22 January 2021
Денис Колисниченко
Как "разогнать" свой Linux
Тюнинг - это настройка чего-либо, приводящая к повышению производительности. "Тюнинговать" можно все, что угодно - от компьютера до автомобиля. В отличие от апгрейда, у тюнинга есть одно неоспоримое преимущество: не нужно покупать дополнительное железо, следовательно, тюнинг экономит деньги. На апгрейде тоже можно сэкономить, если подходить к этому процессу с умом. Например, будь у меня компьютер с процессором Duron 1,2 Ghz и 128 Мб оперативки, я бы лучше купил еще 256 Мб оперативки, чем более мощный процессор, поскольку Линукс более чувствителен к объему оперативки, чем к частоте процессора. Но статья сейчас о тюнинге, поэтому больше сочинений на тему "как проапгрейдить компьютер" не будет.
Мечтал о таком? Если да, то сейчас мечта воплотиться в реальность. Давай определимся, как мы будем настраивать нашу систему. Пойдем по пути наименьшего сопротивления - вдруг после самого простого изменения результат тебя устроит, а оставшееся время можно будет потратить с большей пользой?
Уродовать систему мы также не будем - после нашего тюнинга работа с системой не должна стать менее комфортной. Смотри: можно и с автомобиля повыдергивать все, что есть в салоне, оставив одно кресло, руль и педали - так мы уменьшим вес, и машина будет ехать быстрее, но будет ли тебе комфортно? Точно также и в Linux. Можно отключить все и оставить одну консоль - система будет быстрее загружаться и будет много свободного места, но что делать, если захочется послушать музыку или посмотреть фильм?
План наших действий будет следующим:
Перед началом настройки нужно отметить, что настройка будет производиться на примере дистрибутива Fedora Core 4, а также, что некоторые приемы, описанные в статье, не будут работать со старыми ядрами (ниже 2.6).
Каждый запущенный сервис "съедает" не только драгоценное процессорное время, но но и память, которой постоянно не хватает. Что ни говори, а памяти много не бывает. Если бы еще были нужны все эти сервисы, тогда другое дело. А на практике получается, что о существовании запущенных сервисов многие даже и не подозревают.
Как уже было отмечено, тюнинг Linux будет рассматриваться на примере FC4, а значит, и сервисы будут от Федоры. Возможно, в твоем дистрибутиве будут другие сервисы, которые здесь не рассмотрены, но особо не расстраивайся - какой бы ни был дистрибутив, средство настройки сервисов поможет тебе определиться, нужен тебе тот или иной сервис или нет. В FC для настройки сервисов используется конфигуратор "system-config-services", а в Mandrake - "drakxservices".
В целях экономии времени (и моего и твоего) остановимся только на сервисах, которые в большинстве случаев включены по умолчанию, но домашнему пользователю не нужны - их можешь смело отключить:
Только что мы не только повысили быстродействие системы, но и немного обезопасили ее - ведь каждый ненастроенный, но запущенный сервис - это потенциальная дыра в системе безопасности. Теперь перезагрузи компьютер. Нет, не для того, чтобы изменения вступили в силу как в Windows, а для того, чтобы почувствовать насколько быстрее стала загружаться твоя система. Теперь поработай с системой. Скажем с полчаса. Стала работать быстрее? Значит, не зря ты читаешь эту статью и этот журнал. Но не будем останавливаться на достигнутом.
Введи команду free в консоли. Сколько виртуальной памяти сейчас свободно? Совсем забыл сказать: виртуальная память - это физическая память и своп-память (то есть область подкачки). Если все заполнено, например, осталось несколько мегабайтов физической памяти и столько же в своп-области, значит, памяти катастрофически не хватает.
Лучший совет - это купить новый модуль оперативки, но пока попробуем создать дополнительный своп-файл, который добавит несколько мегабайтов виртуальной памяти. Выполни команду:
# dd if=/dev/zero of=/sw-file bs=1m count=64
Этим мы создали пустой файл /sw-file объемом 64 Мб. Если нужно больше, можешь создать файл на 128, 256 Мб - не имеет значение, хоть на гигабайт, лишь бы места на диске хватило. Теперь сделаем из этого файла своп-файл (64*1024):
# mkswap /sw-file 65536
Осталось попросить систему, чтобы она задействовала новый своп-файл:
# swapon /sw-file
Дабы последнюю команду не вводить каждый раз при запуске системы, пропиши ее в загрузочных сценариях (желательно после команды "swapon -a") - это временно решит проблемы с оперативкой. Заметь, для комфортной работы в Linux (при использовании X Windows и KDE/GNOME) нужно как минимум 192 Мб оперативной памяти и хотя бы 128 Мб своп-памяти. На моей машине картина следующая: со 256 Мб физической ОЗУ свободно лишь 4 Мб, но зато своп практически свободен - занято обычно несколько мегабайтов.
Мало только добавить несколько дополнительных мегабайтов своп-памяти. Очень важно еще точно настроить сам механизм виртуальной памяти, а именно - правильно установить коэффициент подкачки.
Предположим, что по работе приходится использовать несколько (или даже одно) довольно громоздких приложений и нечасто переключаться между ними. Возможно, ты работаешь с документами, поэтому с самого утра запускаешь OO Writer и/или OO Calc и переключаешься только между ними. Также утром запускаешь xmms – кто это без музыки работает? Изредка, скажем 5-7 раз в день ты переключаешься между этими приложениями.
Если установить большое значение коэффициента подкачки (файл /proc/sys/vm/swappiness), скажем, 90 или даже 100 (максимальное), то переключение между приложениями будет довольно медленное, но зато производительность основного приложения (то есть Writer или Calc) будет максимальной.
Если целый день приходится работать с небольшими программками и часто переключаться между ними, возможно, лучше установить коэффициент подкачки в районе 20 или 30. Поэкспериментируй с различными параметрами - так можно выбрать оптимальный для себя.
Вывести текущее значение файла /proc/sys/vm/swappiness можно с помощью команды:
# cat /proc/sys/vm/swappiness
Значение по умолчанию – 70. Возможно, тебе больше всего подойдет именно это значение. Установить значение (в данном случае 20) можно с помощью команды:
# echo "20" > /proc/sys/vm/swappiness
Каждой программе, работающей под Linux, время от времени необходим доступ к диску - прочитать данные с диска или записать на диск. Часть ядра, отвечающая за планирование ввода/вывода, называется планировщиком ввода/вывода. Имеется четыре различных алгоритма работы планировщика:
elevator=as
elevator=cfq
elevator=deadline
У каждого алгоритма есть свои преимущества и недостатки. Но только два алгоритма подходят для обычного домашнего компьютера (то есть рабочей станции) – второй и третий. Для изменения планировщика даже не нужно перекомпилировать ядро: достаточно передать параметр elevator при загрузке ядра. А чтобы не делать это каждый раз при загрузке - прописать в конфигурационном файле загрузчика /boot/grub/grub.conf или /etc/lilo.conf. Пример (фрагмент /etc/lilo.conf):
image=/boot/vmlinuz-2.6.9 label=Linux root=/dev/hda1 append="elevator=as" ...
В случае с LILO по окончанию редактирования файла не забудь перезаписать загрузчик - команда lilo. В случае с GRUB перезапись загрузчика не нужна:
... title My Default Linux root (hd1,0) kernel /boot/vmlinuz-2.6.9 ro root=/dev/hda1 elevator=as ...
Каждый следующий этап требует намного больше времени, чем все предыдущие вместе взятые.
Повысить производительность системы может правильно сконфигурированное ядро. О конфигурировании ядра и о его компиляции уже много писалось (в том числе и мною), поэтому повторяться не буду. Скажу, что при конфигурировании ядра нужно следовать следующим правилам:
Только не переусердствуй - всему есть мера. Можно отключить все и оставить самый минимум, а потом, чтобы подключить Flash-диск приятеля нужно будет перекомпилировать ядро - зачем тебе это нужно?
Если ты не знаешь, как компилировать ядро, рекомендую пропустить этот этап, чтобы не наделать ошибок. Если все же интересно, можешь прочитать об этом процессе в Интернете - по данному вопросу много написано.
В одном из номеров этого журнала (кажется, в предыдущем), рассматривалась экспериментальная система инициализации - initng, позволяющая практически мгновенно загружать Linux. На установку и настройку этой системы может уйти день, но результат, поверь, того стоит.
По умолчанию практически во всех дистрибутивах Linux используется старая добрая программка init - именна она и выполняет всю рутинную работу по инициализации системы. Но "выполняет" - это громко сказано. По своей природе init довольно ленива: все, что она делает - это анализирует файл /etc/inittab и, в зависимости от его содержимого, запускает определенные сценарии из каталога /etc/rc.d/. Сценарии написаны на bash и их выполнением занимается сам bash собственной персоной. Поскольку выполнение сценариев выполняется посторонней программой (bash'ем), снижается скорость загрузки Linux.
Initng сама занимается выполнением сценариев, которые, между прочем, написаны не на bash, а на собственном языке, который, впрочем повторяет синтаксис всем известного bash. Именно потому, что выполнением сценариев занимается сама initng, загрузка Linux происходит быстрее. Новую систему инициализации можно установить не на каждый Linux. Для установки последней версии initng 0.5.3 от
системы требуется поддержка SELinux, пакет filesystem версии 2.2.4 или выше и библиотека glibc версии 2.3.4 (или выше). На третью версию Fedora Core initng установилась сразу и без ошибок, а вот десятая версия Mandrake оказалась старой для initng.
Скачать initng можно по адресу https://initng.thinktux.net/download/v0.5/. Рекомендую скачать исходный код, чтобы потом самостоятельно откомпилировать программу. RPM-пакет с initng можно скачать лишь в том случае, если система полностью соответствует требованиям initng, особенно это касается версии библиотеки glibc.
Статью, посвященную повышению производительности системы, я уже когда-то писал, но это было довольно давно, и тогда в ней рекомендовалось разгонять винт с помощью программы hdparm. В те времена ни один дистрибутив не выжимал из жесткого диска все, что он может, поэтому жесткий диск работал в режиме черепашки. Но те времена прошли - теперь вряд ли с помощью hdparm можно существенно поднять производительность винта, поскольку это уже сделали разработчики дистрибутива. Но у тебя есть еще шанс - ты можешь изменить файловую систему. Обзор файловых систем в свое время занял одну статью, подобную этой. Ее можно найти на сайте https://www.dkws.org.ua в разделе Система.
Если изменение файловой системы - слишком накладно, то можно выбрать оптимальный для себя режим ext3. Самым быстрым режимом является режим обратной записи (writeback), изменить его можно в файле /etc/fstab, например:
/dev/hda1 / ext3 data=writeback 1 0
На этом тюнинг домашнего тукса можно считать завершенным.