Linux: ускоряем систему
Вчера на Дзене наткнулся на публикацию, из которой мне стало ясно, что многие пользователи Linux не имеют понятия о его возможностях. Новички мыслят стереотипами и это нормально. Если человек много лет использовал Windows и ничего более, то и пытаясь приобщиться к сообществу свободного ПО в лице какого-либо дистрибутива Linux он непроизвольно будет поступать также, как он привык поступать в Windows. И в большинстве случаев такой человек разочаровывается в Linux, даже не поняв его концепцию.
Для таких новичков я и буду публиковать материалы на этом канале. Главное же, это понять, что Linux - это не операционная система, ЭТО СВОБОДА ВЫБОРА И ДЕЙСТВИЙ. Почему дети любят конструктор Lego? Да по тому, что это целый мир, в котором ребенок становится Богом и может творить. Так представим же себя детьми с новым конструктором в руках, постараемся забыть догмы Windows и начнем творить.
Одним из самых популярных дистрибутивов Linux является Ubuntu. Потому мои примеры будут ориентированы именно на эту ОС, но будут также актуальны для любого дистрибутива, основанного на Debian/Ubuntu. В этой статье я не буду рассматривать процесс установки Ubuntu, так как это очень простая задача. Установить современный Linux-дистрибутив зачастую значительно проще, чем Windows. Тем не менее, если в комментариях Вы попросите рассмотреть процесс установки - я это сделаю.
Итак, Вы установили Ubuntu. Возможно, на виртуальную машину или какой-то старый слабый компьютер только для того, чтоб посмотреть, что же это за зверь и с чем его едят. Первое, с чем Вы возможно столкнетесь в таком случае, это с нехваткой ресурсов в общем и оперативной памяти в частности. Ubuntu Desktop поставляется с окружением рабочего стола GNOME, а это довольно ресурсоёмкая штука сама по себе. И вот, после установки Вы видите, что система очень тормозит. Почему так происходит? Причина - нехватка оперативной памяти. Когда память заканчивается, система начинает использовать в качестве оперативной памяти файл (или раздел) подкачки. Скорость дисковых операций на много порядков ниже скорости работы оперативной памяти и Ваша система начинает "тормозить". Исправить это нам поможет применение ZRAM.
Как говорит Википедия, "zRam — модуль ядра Linux (ранее известный как compcache). Он увеличивает производительность путём предотвращения подкачки страниц на диск, используя сжатое блочное устройство в оперативной памяти, пока не появится необходимость использовать файл подкачки на жёстком диске. Скорость обмена с оперативной памятью выше, чем с жёстким диском, следовательно, zRam позволяет Linux производить большее число операций подкачки, особенно на старых компьютерах с малым объёмом оперативной памяти". Другими словами, в оперативной памяти компьютера создаётся виртуальный диск, данные в котором сжимаются. Этот диск система использует как файл подкачки. И только когда заканчивается место на этом диске, система начинает использовать дисковый файл/раздел подкачки. Таким образом, за счет сжатия в этом виртуальном диске происходит как бы увеличение объёма оперативной памяти. Просто и эффективно.
Подключение zram в Ubuntu происходит крайне просто. Откройте терминал и выполните команду:
sudo apt install zram-config
После установки выполните перезагрузку системы и после этих двух простых действий Вы получите сконфигурированные по умолчанию устройства ZRAM. Получить информацию об их статусе Вы можете используя команду (в терминале):
swapon -s
или
swapon --show
Вывод будет выглядеть примерно так:
На скриншоте первое устройство - это диск MMC, следующие 4 устройства с именами zram* - виртуальные диски. Количество устройств zram будет соответствовать количеству потоков Вашего процессора. В моём случае это Intel Atom Bay Trail Z3735F, который имеет 4 ядра без поддержки hyperthreading. В большинстве случаев больше ничего делать не нужно. Но если Вы хотите изменить размер этих устройств или сделать ещё что-то, в этом Вам поможет утилита zramctl. Для начала посмотрим справку по этой команде. Вводим в терминале:
zramctl --help
Теперь давайте создадим ещё одно устройство zram с более низким приоритетом и сделаем из него общий раздел подкачки. Делать это я буду на примере системы с процессором Intel Atom J2850 и 8Gb RAM. На скриншоте ниже представлена последовательность команд и их вывод.
Теперь рассмотрим команды по порядку.
- sudo zramctl --find --size 1024M --algorithm lz4 - команда ищет свободное устройство и определяет его параметры. Опция --size говорит команде о том, что размер диска должен быть установлен в 1 Гигабайт. Опция --algorithm указывает на применение алгоритма lz4. Возможно использование двух алгоритмов, lz4 и lzo. Первый - лучше сжимает данные но работает чуть медленнее и требует больше ресурса процессора. Второй - жмёт данные менее эффективно, но делает это быстрее и меньше нагружает процессор. Так как мои zram0 - zram3 более быстрые и используют алгоритм lzo, я предпочел сделать общий диск с лучшим коэффициентом сжатия так как это устройство будет использоваться системой менее интенсивно. Вывод команды говорит нам о том, что было создано устройство /dev/zram4.
- sudo mkswap /dev/zram4 - команда превращает устройство zram4 в раздел подкачки.
- sudo swapon /dev/zram4 - команда подключает (вводит в работу) наш новый раздел подкачки.
Ну и дальше вывод уже известной Вам команды. Мы видим, что добавлено новое устройство zram4 с низким приоритетом -2. Таким образом наш новый раздел подкачки начнет работать не ранее, чем заполнятся все предыдущие zram устройства.
Итак, мы создали виртуальный диск с разделом подкачки, попробовали нагрузить систему, посмотрели, на сколько эффективно работает наша новая конфигурация и остались довольны. Теперь нам нужно "объяснить" системе, что всю эту конфигурацию она должна сохранить и активировать после перезагрузки. Устройства zram0 - zram3 были созданы автоматически и система уже "запомнила" их настройки. С ними нам делать ничего не нужно, они будут активированы после перезагрузки. А вот наш раздел подкачки система не запомнит. Для его активации нужно ещё немного поработать руками (и головой разумеется).
Так как Linux это конструктор, то вариантов сделать то, что мы задумали, великое множество. Рассмотрим один из вариантов. В самом начале мы установили пакет zram-config, который сам настраивает нам устройства. Значит попробуем разобраться, как он работает и постараемся использовать его для определения нашего раздела подкачки. Мы знаем название пакета, но не знаем, что у него внутри. Разобраться с этим вопросом поможет утилита apt-file. Её нет в стандартной поставке и её нужно установить. Сделаем это командой:
sudo apt install apt-file
После установки мы должны обновить кэш команды. Выполним:
sudo apt-file update
И теперь для просмотра списка файлов пакета выполним:
apt-file list zram-config
В полученном выводе команды в числе прочего мы видим два скрипта, /usr/bin/end-zram-swapping и /usr/bin/init-zram-swapping
Как можно догадаться из названия, первый выполняется при остановке системы, а второй - при её запуске. Вот эти файлы нам интересны. В первом скрипт просто ищет все устройства zram и выключает их, для нас это не актуально. А вот второй файл - скрипт инициализации - как раз нам и нужен. Откроем его в любимом редакторе. Я предпочитаю для этого использовать встроенный редактор файлового менеджера Midnight Commander (можно установить командой sudo apt install mc). И да, открывать файл нужно от имени root (то есть запустить Ваш любимый редактор из консоли с использованием sudo например).
Итак, скрипт рассчитывает размер и количество устройств zram исходя из объёма оперативной памяти и количества потоков процессора. Это видно в строке mem=$(((totalmem / 2 / ${NRDEVICES}) * 1024)). То есть скрипт берёт общее количество доступной RAM, делит его на 2 и еще раз делит на количество потоков процессора. Если нужно, мы можем внести собственные правки в этот алгоритм расчёта. Но мы сейчас хотим добавить команды для создания нашего дополнительного раздела подкачки /dev/zram4. Для этого в конец файла добавим следующее:
swapdevice=$(zramctl --find --size 1024M --algorithm lz4)
mkswap $swapdevice
swapon -p 3 $swapdevice
Теперь сохраняем файл и выполняем перезапуск системы. Обратите внимание на приоритет нашего устройства подкачки, заданный параметром -p 3. Так как устройства zram0 - zram3 у нас имеют приоритет 5, то нам нужно слегка снизить приоритет для общего раздела подкачки. Потому я и установил -p 3.
На этом хочу закончить статью. В следующих материалах рассмотрим другие эффективные технологии мира открытого ПО. Пишите вопросы, отзывы и предложения в комментариях.
Следующая статья по применению похожей технологии ЗДЕСЬ
Статья про ускорение дисковых операций ЗДЕСЬ
Спасибо за внимание.