Портрет 4X_Pro
Был в Сети 27 авг. 2025 г., 05:32
Мультиблог
4X_Pro
Кратко о себе: Web-разработчик. Пишу на PHP, Python, JavaScript. Знаю Ruby и Go, со студенческих времён более-менее помню C и asm. Специализируюсь на ускорении загрузки сайтов и разработке ботов для Telegram. Linuxоид (использую Debian+LXDE). Сторонник IndieWeb, slow lifer.

Социальные сети


Новости сайта в Telegram

t.me/4x_pro

Лог жизни

Лог моей жизни, где я фиксирую наиболее эмоционально значимые для меня события и текущее настроение. Является продолжением блога, который я вел в ЖЖ с ноября 2004 по апрель 2018 года.


Первый шаг на Debian testing сделан

4X_Pro

Сегодня завершил переустановку системы на втором (дачном) ноутбуке. Вчера установил там Debian, переключил на testing-репозитории, обновил. Всё прошло просто идеально! Порадовался тому, что теперь сразу доступны новые версии ПО. В частности, PHP установился версии 8.1, а Python — 3.10. Но удивило, как странно для Debian подобран софт: нет даже редактора меню, зато предустановлено огромное количество азиатских шрифтов и справка к LibreOffice на огромном количестве языков. А ещё зачем-то встроенный screenreader. Когда я всё это удалил, освободилось почти 2 Гб места!
Но я был бы не я, если бы не нашёл приключений. Решил, что новая система грузится как-то подозрительно медленно, начал переживать, что выбор JFS был неправильным решением. И поставил эксперимент: с помощью gparted «отгрыз» у раздела с данными ещё 30 Гб, сформатировал их в ext4, и поставил туда ещё одну копию Debian.
Увидеть разницу во времени загрузки невооружённым взглядом особо не удалось. Но я — человек упорный, поэтому поставил Phoronix Test Suite и запустил там тест под названием startup-time. Он измеряет время запуска Libre Office Writer. И в итоге с его помощью я выяснил, что на JFS время запуска составляет порядка 8.4 секунды, на ext4 — где-то 9.5. Но тут у меня в голове что-то помутилось, и я решил, что раз полученное значение больше, то ext4 лучше. (Видимо, сказалось, что до этого много тестировал пропускную способность и IOPS.) В результате сильно переживал, и не знал, что делать: то ли снова переустанавливать Debian, то ли как-то временный раздел превращать в невременный. И только потом пришло прояснение, что в данном случае меньше — это лучше, поэтому выбор JFS был правильным.
Но на этом дело не кончилось. Сначала копия на JFS стала во время загрузки долго ждать непонятно чего. Оказалось, что установка второго Debianа привела к смене UUID раздела со swapом, и он просто не находился. Потом я временный раздел удалил, и перестал нормально работать GRUB. Как выяснилось, у меня там ещё со времён до перестановки был жёстко прописан PARTUUID, который тоже поменялся. В общем, на то, чтобы разобраться со всем этим, ушло полчаса.
Остаток дня занимался доустановкой программ и реорганизацией данных. В частности, теперь раздел с данными монтируется внутрь домашнего каталога, а часть материалов с него перенёс в сам домашний каталог, так как это и правильнее, и безопаснее. На диске с данными они лежали со времён Windows XP, сначала — чтобы не быть случайно снесёнными при переустановке системы, потом — чтобы был доступ и из под Windows, и из под Linux. Но теперь это уже не актуально.
В очередной раз задавался вопросом о «стеклянных деревьях». То есть о том, как правильно поступать: организовывать что-либо (те же файлы, например) каким-то изначальным решением в продуманную правильную структуру (как сейчас) или давать расти естественным образом, когда что-то создаётся по мере необходимости.
Ещё установил Free Heroes — открытую версию Heroes II. Первые впечатления очень положительные. Особенно то, что можно разрешение экрана менять. Правда, если поставить родное, то изображение получается слишком мелким, и портится впечатление. Поэтому играл на 960x568. Но играл мало, поэтому не успел оценить, решили ли там главную проблему — слишком неэффективный искусственный интеллект. В прошлый раз (то ли в 2018, то ли в 2019 году) я отказался от Free Heroes именно из-за этого.
Теперь предстоит такая же переустановка и на основном ноутбуке. Но тут уже проще: есть опыт. А потом ещё переделывать систему синхронизации с VDSом…

Игры без Windows: неудачные эксперименты

4X_Pro

Весь день занимался вопросом, можно ли на игровом компьютере обойтись без Windows. Сначала попытался было поставить VMWare Player, так как видел несколько отзывов, что в нём производительность оказывается лишь на десяток-другой процентов ниже по сравнению с запуском под обычной OS. Но безрезультатно: на основном Linux он у меня просто не запустился, хотя модули ядра загрузились и собрались. Хотел было попробовать под Manjaro с live-флешки, но тоже неудача: там не получилось собрать модуль ядра. Причём проблема в том, что загружаемое ядро имеет версию 5.15.60, а если попытаться поставить linux-headers, то качает версию 5.15.75. Если бы я установил Manjaro на жёсткий диск, вопрос бы решился легко: просто обновил бы ядро, но для этого нет места. Разве что поставить на старый SSD, где до сих пор остаётся linux-раздел на 25 Гб, который давно не используется.
Потом ещё раз попытался установить Wargaming Gaming Center под wine. Сам он установился, но вот запустить установку WoT не получается — какая-то бессмысленная ошибка. Затем попытался установить через Steam. Для этого пришлось включить VPN и поменять регион в Steam-клиенте — прикинуться немцем. Потом долго и нудно качал целых 32 Гб, но итог тот же самый: ничего не запустилось… Впрочем, сейчас нашёл, куда Steam ставит свой Proton, попытался запустить вручную, и получил ошибку, связанную с версией glibc. Возможно, она просто слишком старая. Видимо, придётся завтра всё же поставить Manjaro на тот самый раздел и повторить эксперименты.

Непростой выбор дистрибутива

4X_Pro

Сегодня большую часть дня занимался тем, что гонял разные benchmarks под Manjaro, Arch, загружаемыми с флешки и установленным на диске Mint. Всё началось с того, что однажды на YouTube попалось видео, где утверждается, что дистрибутивы на основе Ubuntu, сильно проигрывают Arch-подобным по пропускной способности кеша. Проверил это у себя с помощью pts/cachebench, но нет — разница составила чуть меньше 1%, но таки Arch и Manjaro быстрее (между собой у них расхождение на 0.1% где-то).
Потом решил потестировать пропускную способность памяти в целом. И вот тут разница куда серьёзнее: до 33%. Интересно, с чем это связано? То ли просто под Mint ядро старое (4.04) и хуже оптимизированное, то ли я начудил при его компиляции. На всякий случай даже дважды померил, но результат тот же самый. По-хорошему, нужно бы поставить стоковое из дистрибутива и перетестировать на нём, но как-то мотивация на все эти измерения уже заканчивается.
Также попытался искать чужие сравнения производительности Manjaro и Arch, но ясности это не добавило. В большинстве случаев разница в пределах погрешности. Но нашёл видео, где Manjaro устойчиво проигрывает (хоть и немного) чистому Arch и endeavourOS.
И теперь никак не могу определиться: что для меня важнее. Либо поставить дистрибутив, который условно будет считаться более быстрым, а также лучше соответствующим идеологии Настоящего Компьютерщика. Либо поставить систему, которой можно пользоваться из коробки и сэкономить кучу времени на настройке и подборе софта, но потерять какую-то долю производительности (и, самое главное, убеждение, что я выжал из своего «железа» всё, что можно).

Бесшумность достигнута

4X_Pro

И всё-таки я решил проблему бесшумного ноутбука без переустановки системы! Сегодня нашёл, как включить управление вентилятором в той версии ядра, которой пользуюсь. Оказалось, для этого нужен модуль asus_nb_wmi, а чтобы была возможность его включить, нужно добавить поддержку PCI hotplug. После этого пересобрал ядро и появился файл для ручного управления вентилятором, где задаётся коэффициент от 0 до 100. Поэкспериментировав, обнаружил, что при значении 40 вентиляторы начинают включаться до слышимых значений только при температуре порядка 60 °C. А без них при обычном серфинге в Интернете температура устойчиво держится в диапазоне 53—55 °C.
Правда, есть и обратная сторона: если всё же нагрузка возникнет и ноутбук прогреется выше 60, то остывать будет долго. По-хорошему, нужно либо thermald настраивать (но у него слишком уж мозголомный конфиг), либо набросать на C свою простенькую утилиту, которая будет при превышении 60 °C менять этот коэффициент на тот же 85, который выставляется по умолчанию.
Ещё интересная особенность: если переключиться на ручное управление вентилятором, посмотреть его скорость становится невозможно. Не очень понимаю, чем это вызвано, но это так.
Теперь сижу и наслаждаюсь полной тишиной. А ещё снова задумался, не купить ли под него подставку для лучшего охлаждения.
А ещё разобрался, как решить проблему со встроенной встроенной панелью. Нужно просто дать команду на её отключение и последующее включение. Только вот когда я написал скрипт, который это делает и попытался добавить его в systemd, оказалось, что он не видит соответствующих файлов в /sys (хотя если запустить его вручную после загрузки системы, всё отрабатывает нормально). Экспериментировал с различными targets, но безрезультатно… В чём причина — так и не понял.

Испытания Manjaro с xfce4

4X_Pro

Поробовал сегодня запустить Manjaro с xfce4 с флешки на основном ноутбуке. Как всегда, возникли проблемы при старте с подключенным внешним монитором. Пришлось отключать его на момент запуска. В целом впечатления сложились вполне благпориятные. Во-первых, корректно распознался датчик вентилятора. Во-вторых, температура процессора каким-то образом получается существенно меньше: с запущенным броузером (правда, это Firefox, а не Chromium) всего 51 градус даже при запущенном ВК. Видимо, более корректно отключается дискретная карта. И вентилятора почти не слышно. Только если ухо как следует напрячь, можно разобрать лёгкое высокочастотное гудение (он крутится на 3000-3200 rpm). Попытался замерить приложением-шумометром в мобильнике, разница между включённым и выключенным компьютером составляет где-то 6-7 dB, при этом я спокойно различаю уличные шумы с закрытым окном.
Интерфейс производит двоякое впечатление. С одной стороны, у Lubuntu тема гораздо красивее. С другой — тема по умолчанию xfce выглядит куда современнее, а значки напоминают оболочку EMUI на планшете. Ещё обнаружилось, что можно вынести на панель задач аналог командной строки! Я об этом мечтал со времён, кажется, Windows 2000 или XP. Причём туда можно вводить как названия исполняемых файлов, так и пути, URLы и даже поисковые запросы для DuckDuckGo (правда, последним я всё равно не пользуюсь).
Кое-что остаётся непривычным. В частности, то, что окно терминала закрывалось после запуска какого-либо приложения. (Потом нашёл, как это отключить.) Пока не нашёл, где настроить опцию typo для клавиатуры, без которой уже чувствую себя как без рук. Ну и памяти съедает всё же многовато: после загрузки — 510 Mb (LXDE, кажется, 280, если запускаться без MySQL и Apache).

Справился с проблемой с PulseAudio

4X_Pro

Несколько дней назад обнаружил, что на дачном ноутбуке пропал звук. PulseAudio просто не видел основной Intelовской звуковой карты, а видел только HDMI-выход без кабеля и поэтому включал «фиктивный аудиовыход», и звук отсутствовал. При этом все модули ядра были загружены как надо, и через ALSA карта была видна. Никак не мог понять, в чём дело, пока не применил утилиту lsof для /dev/snd под rootом. Она показала, что почти все файлы в /dev/snd открыты процессом timidity. После того, как я его остановил, PulseAudio сразу же перехватил эти файлы, и звук появился. Эх, придётся отказаться от идеи запускать timidity автоматически (ну или возиться с зависимостями, чтобы он только после pulseaudio стартовал)…
Эх, опять приобретение бесполезного опыта в результате неудачной оптимизации. С одной стороны, решая эту проблему, разобрался с командами pulseaudio и вообще тем, как он работает. С другой — потратил почти два часа времени, но вряд ли когда эти знания потребуются мне снова. И даже полноценной статьи в раздел «компьютерное» тоже не получится.

Эксперименты с Alpine Linux

4X_Pro

После недели почти чистого созерцания возвращаюсь к обычной жизни. Вчера вдруг пришло в голову углубить свои знания в языке Ruby, и почти весь день читал материалы по нему. Язык очень красивый, как говорят соционики, белологичный (по сравнению с чернологичным PHP). Но по сравнению с PHP имеет существенный недостаток: потребляет гораздо больше памяти. Да и по скорости в большинстве случаев проигрывает.
Ещё тестировал Tiny Core Linux и AlpineLinux. Долго не мог между ними выбрать: хотел из своей старой, но очень быстрой флешки на 256 Mb сделать восстановительный диск + «тонкий клиент» — поставить X Server с putty, filezilla и каким-нибудь VNC/RDP-клиентом, а также netsurf или dillo в качестве броузера.
Потом решил поставить Alpine на флешку нормально, не виде записанного ISO-образа, а как на обычный жёсткий диск. Наконец-то разобрался, как пробросить флешку в VirtualBox! (Надо добавить пользователя в группу vboxusers.) Сначала всё шло криво: скрипт setup-disk делал на ней два раздела — /boot и корневой, резервируя под /boot 100 Мб. Естественно, после такого места для установки не хватало. Потом я нашёл, как это обойти, а также удалить пакет с firmware, и вот, наконец, всё установилось. Загрузился с флешки в консоль, решил поставить X Server и jwm, и тут опять закончилось место! Потом ещё извращался, решив, что раз не удаётся поставить X Server, нужно попробовать wayland, но безрезультатно… Теперь буду экспериментировать с Tiny Core Linux.
Кстати, посмотрел дату ISO-файла с AlpineLinux. Оказывается, я скачал его ещё в 2019 году, и уже тогда хотел поэкспериментировать. Но всё откладывал и откладывал, и вот только сейчас вернулся к этой теме.

Перенос бота и впечатления от Amazon Web Services

4X_Pro

Вера всё же решился и взял для SiteKnockerBot облачный сервер в Amazon Web Services. Причём сервер взял на ARM-архитектуре. Долго колебался, но в итоге сказалось то, что для ARM-серверов предлагается сетевое подключение до 5 Гбит/с, для x64 с free tier — нет, а хороший канал для этого бота очень даже важен. В качестве дистрибутива хотел было взять уже привычную Ubuntu. Но потом вычитал, что у Amazon Linux, предлагаемого по умолчанию, используется rolling model для обновлений, и это определило мой выбор в пользу него.
Первые впечатления были не очень: чуть не сломал себе мозг, пытаясь выяснить, как подключиться к серверу. Если с тем, что нужно подключаться, указывая public DNS, разобрался быстро. Но вот что вводить в качестве имени пользователя, было непонятно. Перепробовал кучу всего: идентификатор машины, идентификатор группы безопасности и т.п. Ничего не помогало, пришлось читать документацию. Оказалось, что имя пользователя фиксировано и зависит только от дистрибутива, и в моём случае нужно писать ec2-user.
Решил вернуться к истокам и снова в качестве «простукивающей» части бота использовать ту, которую писал в самом начале на PHP, а не более новую на Go. Версия для Go в последнее время стала очень сильно глючить, в последние дни даже несколько раз падала. Да и ложных срабатываний давала существенно больше. А кроме того, из-за другой архитектуры пришлось бы компилировать её непосредственно на сервере, а не просто закидывать бинарник, как раньше.
Попытался было поставить PHP и с удивлением обнаружил, что установилась версия 5.4. Пришлось снова лезть в документацию. Выяснилось, что ставить более новые версии можно с помощью специального скрипта amazon-linux-extras. Причём оказалось, что выбор версий там весьма велик: есть даже PHP 8.0. Я даже хотел был его и поставить, но потом всё же не решился и ограничился PHP 7.4.
Затем какое-то время колебался, что поставить: настоящий MySQL от Oracle или MariaDB. Пытался даже найти сравнения, но из-за недосыпа плохо вникал. В итоге поставил MariaDB просто из соображения, что это ближе к духу open source.
И вот наконец-то всё установлено, база перенесена со старого сервера и наступил момент запуска. Для начала запустил бота с отключенной отсылкой уведомлений в Telegram. После нескольких ошибок последнего момента вроде всё заработало. Но увы, существенного скачка в производительности не наблюдалось. Когда я повысил количество параллельных проверок до 500, стали проскакивать ложные срабатывания.
Остаток вечера и ночь я провёл в попытках найти оптимальное соотношение между максимально возможным числом проверок и этими ложными срабатываниями, а также подобрать настройки системные настройки через sysctl. В какой-то момент даже показалось, что нашёл. Но когда переключил бота в рабочий режим, увидел, что даже для моих сайтов то и дело приходят уведомления о слишком большом времени ответа —2-3 секунды.
В итоге где-то около пяти часов утра пришло в голову неожиданное решение: вытащить из базы общее количество URL для проверки, разделить весь пятиминутный интервал на это число, умноженное на три, и после каждой проверки делать sleep на нужное время. Решение, конечно, очень костыльное, но тем не менее, оно помогло! Ложные срабатывания исчезли, а время отклика моих сайтов стало показываться на уровне 150—240 мс — почти как в те времена, когда я только запустил бота, и проверялись только мои сайты. (На самом деле тогда было 110—180, лишние 40 мс добавились из-за того, что бот теперь находится в ДЦ во Франкфурте, а не в Москве.)
На этом решил успокоиться и пойти спать. Пока число URL на проверке не дорастёт до 25—30 тысяч, этого должно хватить, если не считать того, что PHPшная версия менее устойчива к медленным сайтам из-за особенностей работы curl_multi_exec. А к этому времени я либо всё же доведу до ума бота на Go (сейчас возникла мысль, что там можно переделать), либо вообще напишу сканирующую часть на C в многопоточном режиме, в которой, если и попадётся медленный сайт, он будет тормозить только один из сканирующих потоков.

Впечатления от GeForce Now

4X_Pro

Вчера весь вечер провозился, пытаясь заставить работать Wurm под Linux. Почему-то при запуске с Intelовским драйвером он просто падал, а с nouveau работал просто ужасно медленно: 1-2 FPS и часть текстур не загружалась. После множества экспериментов (пересобирал даже ядро) в итоге сдался и поставил пропиертарный драйвер nvidia. С ним заработало как надо, но у него есть куча недостатков, поэтому такое решение мне не нравилось совершенно. Да и производительность была так себе, причём как я ни менял настройки, повысить её выше 24 fps не получалось.
Поэтому сегодня вновь задался вопросом, есть ли облачные игровые платформы с поддержкой Linux. Выяснил, что GeForce Now поддерживает работу в броузере Chromium, и решил попробовать. Как выяснилось, там даже есть бесплатный режим. Правда, при первом подключении ждать пришлось почти два часа. Но настоящий Искатель Халявы должен быть терпеливым! А вот в ночное время ожидание очень недолгое.
Сначала на GeForce Now я попытался запустить всё тот же Wurm. Но оказалось, что там доступен только Wurm Unlimited, который, в отличие от обычного, нужно покупать на Steam. Поэтому от идеи поиграть в него пришлось отказаться. Тогда я попытался поиграть в World of Tanks. Но увы, результат оказался вовсе не тем, что я ожидал. Графика, конечно, великолепная (я даже и не знал, что WoT так круто выглядит на максимальных настройках), а fpsы достигали 150. Такое мне на домашнем компьютере никогда не получить! Но увы, с управлением творилось что-то необъяснимое. Такое ощущение, что нажатия мыши и клавиатуры доходили до игры с огромной задержкой. В результате я даже не мог нормально ехать, не говоря уж о том, чтобы стрелять.
Сначала подумал, что проблема в отключившемся из-за установки nvidia аппаратном ускорении видео в броузере. Отключил nvidia-драйвер, восстановил всё как было, попробовал ещё раз. Увы, результат тот же самый, разве что процессор грелся поменьше.
Потом решил попробовать другую игру. Под руку попалась Path of Exile — что-то Diablo-подобное. Большую часть времени игра шла нормально, но стоило нарваться на кучу врагов, как начиналось то же самое, что и в WoT: такое ощущение, что движения щелчки мыши доходили с огромной задержкой. Интересно, кто виноват — X Server или броузер (где может переполняться какой-то буфер или очередь событий), нехватка канала связи или же у меня мощности процессора не хватает на декодирование видео, и задержки из-за этого?
В общем, пока ещё в области облачных игр всё далеко от идеала. А жаль, под Linux это было бы спасением. Да и позволило бы ещё лет пять не обновлять компьютер, так как в остальном мне его вполне хватает, особенно после апгрейда в прошлом году.
А с Wurm Online я всё же разобрался. Обнаружилось, что на минимальных настройках он запускается и под Intelовской картой. Стал экспериментировать, в чём дело, и обнаружил, что игра начинает падать, если включить отражения в воде: видеокарта с этим почему-то не справляется.
Правда, из-за всех этих экспериментов опять слетел с режима дня и засиживаюсь до 4 часов.

Экспериментирую с SiteKnockerBot и лимитом соединений

4X_Pro

Вчера ещё раз попытался избавить SiteKnockerBot от ложных срабатываний. Думал, что проблема в нехватке пропускной способности канала VDSа, на котором он работает. Посмотрел загрузку канала утилитой nload. Потом интереса ради загрузил iso-образ какого-то дистрибутива и увидел, что бот занимает далеко не весь канал.
Решил попробовать со своего компьютера. Вытащил базу на localhost, запустил, и обнаружил, что и тут то же самое: если поставить большое количество одновременных соединений, то через некоторое время ошибки таймаута начинают идти сплошным потоком.
Сначала попытался поменять настройки Http.Transport — увеличить размер приёмного буфера. Для этого пришлось обновлять версию go, так как по умолчанию у меня стояла 1.10, а менять его можно только с 1.13. Безрезультатно. Но позапускав бота на своём компьютере, обнаружил, что даже после его завершения какое-то время даже броузеры не могут нормально устанавливать соединение. Стало понятно, что всё упирается в какие-то системные ограничения.
В результате полдня экспериментировал с настройками: пытался уменьшить tcp_fin_timeout, увеличить tcp_mem, tcp_rmem, включить tcp_tw_reuse. Но безрезультатно. Максимум, чего удалось добиться — это при увеличении количества потоков вместо таймаута начала возникать ошибка no such host. Ещё думал, что дело в нехватке свободных TCP ports, но их увеличение тоже не помогло.
В общем, после всего этого понизил количество одновременных потоков до 25, и пока так и оставил. Плохо только одно: максимальное количество проверяемых сайтов становится равно всего около 15 тысяч. Может, потом придут ещё какие-нибудь идеи.


Страницы:
  • 1
  • 2
Задать вопрос

Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.