Improving performance (Русский)
Эта статья является ретроспективным анализом и кратким изложением того, как увеличить производительность в Arch Linux.
Основы
Узнай свою систему
Лучший способ настроить систему — определить «узкие места», т.е. подсистемы, которые снижают общую скорость работы. Как правило, они могут определены, зная характеристики системы, однако есть несколько основных признаков:
- Если компьютер начинает медленнее работать при запуске «больших» приложений, таких как OpenOffice и Firefox, запущенных одновременно, то существует большая вероятность того, что объём оперативной памяти недостаточен. Чтобы проверить объём оперативной памяти, используйте эту команду:
$ free -m
- Если время загрузки очень большое и если приложения запускаются медленно при первом запуске, но потом работают нормально, то, вероятнее всего, жёсткий диск работает медленно. Скорость жёсткого диска может быть измерена с помощью команды hdparm:
$ hdparm -t /dev/sdX
Это только скорость чтения с диска и не является абсолютным критерием, но значение скорости выше 40 МБ/с можно считать приемлимым для средней системы.
- Если загрузка процессора постоянно высокая, даже когда есть достаточно оперативной памяти, то снижение загрузки процессора является приоритетной задачей. Загрузку процессора можно контролировать множеством способов, например, используя команду top (а лучше htop):
$ top
- Если медленно работают только те приложения, которые используют ускорение (direct rendering), т.е. где используется видеокарта (видеоплееры, игры и т.п.), то увеличение производительности видеокарты возможно будет достичь. Чтобы убедиться в этом, поставьте
mesa-demos
:
# pacman -S mesa-demos
Затем попробуйте запустить эту команду на 20 секунд (vblank_mode=0 отключает вертикальную синхронизацию у свободных драйверов):
$ vblank_mode=0 glxgears
Если у вас ниже 300 FPS, то, возможно, у вас отключён direct rendering. Чтобы проверить это, введите команду:
$ glxinfo | grep direct
Первое, что необходимо сделать
Самый простой и эффективный способ повысить общую производительность — это использовать легковесные окружения (Desktop Environment) и легковесные приложения:
- Использовать оконный менеджер вместо среды рабочего стола. Вы можете выбрать dwm, Openbox или JWM.
- Выберите минималистичные окружения рабочего стола (не GNOME и KDE), а, например, LXDE или Xfce.
- Используйте легковесные приложения. См. список приложений и темы на форуме, посвящённые легким и быстрым приложениям: 2007, 2008, 2009, and 2010[устаревшая ссылка 2020-08-02].
- Удалите из запуска все ненужные демоны. Для этого надо сначала посмотреть какие демоны запущены:
$ systemctl
Затем, если вам, например, не нужен avahi-daemon.service, ввести:
# systemctl disable avahi-daemon
Жёсткие диски
Выбор и настройка файловых систем
Выбор лучшей файловой системы под особенности системы является очень важным, так как каждая файловая система имеет свои сильные стороны. В File systems кратко рассматриваются наиболее популярные файловые системы. Вы можете также найти полезные статьи здесь.
Резюме
- XFS: Высокая производительность при работе с большими файлами. Низкая скорость при работе с маленькими файлами. Хороший выбор для /home.
- Reiserfs: Хорошая производительность при работе с маленькими файлами. Хороший выбор для /var.
- Ext3: Средняя производительность, надёжность.
- Ext4: Превосходная общая производительность, надёжность, имеет проблемы с производительностью SQLite и другими базами данных.
- JFS: Хорошая общая производительность, низкое потребление ресурсов процессора.
- Btrfs: Превосходная общая производительность (лучше чем у ext4), надёжна (как только станет стабильной). Множество функций. Тем не менее эта файловая система находится на стадии разработки, и рассматривается как нестабильная. Не используйте эту файловую систему, если вы не знаете, что вы делаете, и не готовы к возможной потери данных.
Параметры монтирования
Опции монтирования позволяют легко увеличить скорость без переформатирования. Они могут быть установлены при использовании команды mount:
$ mount -o option1,option2 /dev/partition /mnt/partition
Чтобы сделать эти опции постоянными, измените свой /etc/fstab
/dev/partition /mnt/partition partitiontype option1,option2 0 0
Два параметра, которые увеличивают проивзодительность почти всех файлов систем — это noatime, nodiratime. Первый является расширением второго, который применяется только к каталогам (noatime применяется и к каталогам и к файлам). В редких случаях, например если вы используете mutt, это может стать причиной незначительных проблем. Их вы можете использовать вместо параметра relatime.
Ext3
Смотри Ext3 Filesystem Tips.
JFS
Смотри JFS Filesystem.
XFS
Для оптимизации скорости создайте XFS командой:
# mkfs.xfs -l internal,lazy-count=1 size=128m -d agcount=2 /dev/thetargetpartition
Такой специфичный для XFS параметр монтирования как logbufs=8
может увеличить производительность.
#/etc/fstab LABEL=XFSHOME /home xfs noatime,logbufs=8 0 1
Reiserfs
Параметр data=writeback
увеличивает скорость, но это может привести к повреждению данных при отключении питания. Опция монтирования ((Codeline | notail)) увеличивает пространство, используемое файловой системы примерно на 5 %, но и повышает общую скорость. Вы также можете уменьшить нагрузку на диск, располагая файловую систему и журнал на разных дисках. Сделать это можно следующим образом:
# mkreiserfs –j /dev/hda1 /dev/hdb1
Тут /dev/hda1 будет зарезервирован для журнала, а /dev/hdb1 для данных. Вы можете узнать больше о ReiserFS в этой статье.
Btrfs
Btrfs — новая файловая система, позволяющая делать онлайн дефрагментацию, имеющая оптимизированный режим для твердотельных накопителей, запись снапшотов, изменение размера раздела без потери данных и другие возможности. Btrfs находится в активной разработке и поддерживается ядром (в экспериментальном режиме). Больше можно узнать на Btrfs домашней странице проекта.
mkinitcpio.conf для btrfs
Для Btrfs в качестве некорневой файловой системы модули и зависимости загружаются, когда это необходимо. При использовании btrfs в качестве корневой файловой системы в загрузочном ramdisk должен быть соответствующий модуль. Модуль btrfs зависит от libcrc32c. Вам нужно добавить crc32c модули в /etc/mkinitcpio.conf, как показано ниже:
MODULES="crc32c libcrc32c zlib_deflate btrfs"
Это позволяет избежать ошибок, таких как «неизвестный символ» при загрузке Btrfs модулей. См. также mkinitcpio-btrfs[устаревшая ссылка 2020-08-02].
Сжатие /usr
Одним из способов увеличить скорость чтения данных с диска — это сжатие, т.к. уменьшается объём данных для чтения. Однако данные должны быть распакованы, что увеличит нагрузку на ЦП. Некоторые файловые системы поддерживают прозрачное сжатие, такие как Btrfs и Reiserfs4, но их сжатия ограничивается 4K (btrfs 128К) размер блока. Поэтому в этом руководстве рассматривается сжатие /usr в SquashFS и последующее монтирование через Aufs. Это экономит довольно много места, как правило две трети, и приложения запускаются быстрее. Однако установка, обновление или перестановка приложений будут перезаписывать несжатый /usr, поэтому вам придётся периодически сжимать /usr. SquashFS уже включён в ядро, Aufs можно найти в extra репозитории, так что перекомпиляция ядра не требуется. Чтобы всё это заработало, нужно установить всего два пакета:
# pacman -S aufs2 squashfs-tools
Эта команда установит Aufs модули и некоторые утилиты для файловой системы SquashFS. Теперь нам понадобятся две директории. Одна для сохранения сжатого /usr в режиме «только для чтения» и вторая — для записи изменений с момента последнего сжатия, т.е. «для записи».
$ mkdir -p /squashed/usr/{ro,rw}
Кэширование файлов
Есть такой параметр vm.vfs_cache_pressure. Он влияет на тенденцию ядра освобождать оперативную память, использованную для кэширования объектов ФС. Значение по умолчанию 100. При значении 0, объекты он кэширует (в оперативную память) навсегда. Чем больше значение, тем чаще ядро занимается чисткой их (так будет больше свободной оперативной памяти). Если у вас оперативной памяти не хватает (например, всего 2 ГБ), то лучше поставить 1000:
# sysctl -w vm.vfs_cache_pressure=1000
Эта команда будет действует только на текущий сеанс ОС. А чтобы при каждом старте ОС действовало, надо:
# echo "vm.vfs_cache_pressure=1000" >> /etc/sysctl.d/99-sysctl.conf
Процессор
Единственный способ увеличить производительность ЦП — его разгон (оверклокинг). Так как это сложный рискованный процесс, производить его рекомендуется только экспертам. Не забывайте, что у многих материнских плат под процессоры Intel отключена возможность разгона.
Также многие Intel Core i5 и i7, даже после правильного оверклокинга через BIOS или UEFI, не могут сообщить правильную частоту acpi_cpufreq и многим другим утилитам.
VeryNice
VeryNice — демон, который доступен в AUR под названием veryniceAUR. Он занимается динамической регулировкой приоритетов (nice level) приложений. Чем больше приоритет, тем относительно больше ресурсов будет выделено именно этому приложению. Это особенно может пригодиться для мультимедиа приложений (например, чтобы проигрывание и запись видео была без особых задержек). Просто определите важные процессы в /etc/verynice.conf
как goodexe, а ненужные CPU-hungry (например, make, gcc, g++ при компиляции) как badexe. При большой нагрузкe всё это сильно поднимет отзывчивость системы.
Однако для PulseAudio приоритет надо править в файле /etc/pulse/daemon.conf
, после чего произвести перезагрузку.