| Your Explorer by Linux links... |
|
Совет №7. Повышаем производительность системы
Для повышения производительности системы вам не понадобится перекомпилирование ядра. Данный совет рассчитан только на ядро 2.6. Оптимизацию производительности начнем со установки оптимальных для нас параметров виртуальной памяти. Что такое подкачка (swapping), надеюсь, вы знаете (уже успели прочитать в этой книге), поэтому останавливаться на теории особо не буду. В псевдофайле /proc/sys/vm/swappiness содержится коэффициент подкачки. Что это такое? Предположим, что вы работаете с несколькими (или даже одним) довольно громоздкими приложениями и нечасто переключаетесь между ними. Возможно, вы дизайнер – с утра вы запускаете GIMP и не выходите из него до самого вечера. Также утром вы запускаете xmms – кто это без музыки работает? Изредка, скажем раз 5-7, за день вам нужно переключаться между GIMP и xmms – чтобы выбрать новый каталог или новую песню (возможно, попалась песня, которая вам не нравится). Если вы установите большое значение коэффициента подкачки, скажем, 90 или даже 100 (максимальное), то переключение между этими приложениями будет довольно медленное, но зато производительность вашего основного приложения (то есть GIMP) будет максимальной. Если вы целый день работаете с небольшими программками и часто переключаетесь между ними, вам, возможно, лучше установить коэффициент подкачки в районе 20 или 30. Поэкспериментируйте с различными параметрами и выберите оптимальный для себя. Вывести значение файла /proc/sys/vm/swappiness можно с помощью команды:
# cat /proc/sys/vm/swappiness
Значение по умолчанию – 70. Возможно, вам больше подойдет именно это значение.
Установить значение (в данном случае 20) можно с помощью команды:
# echo "20" > /proc/sys/vm/swappiness
Устанавливать значение можно только суперпользователь (root).
Теперь займемся повышением производительности сети. Если у вас обычный домашний компьютер, подключенный к Интернету по DSL или локальной сети, имеет смысл попробовать выключить некоторые параметры, это можно сделать следующими командами:
# echo "0" > /proc/sys/net/ipv4/tcp_sack
# echo "0" > /proc/sys/net/ipv4/tcp_timestamps
Возможно, сразу вы не заметите никакой разницы, но попробуйте пару дней поработать в таком режиме. Если не понравится, можно опять их включить (1).
А теперь приступим к самому важному. У вас есть отличный шанс существенно повысить производительность вашей системы. Каждой программа, работающая под Linux, время от времени необходим доступ к диску. Ядро Linux, когда именно программа получит доступ к диску. Часть ядра, отвечающая за планирование ввода/вывода, называется планировщиком ввода/вывода. Имеется четыре различных алгоритма работы планировщика:
Режим по умолчанию (noop) – вряд ли он подойдет для обычного пользователя, не смотря даже на то, что он используется по умолчанию. Мы его даже рассматривать не будем
Упреждающее планирование (Anticipatory Scheduling) – при чтении программой данных с диска ядро пытается предугадать, какие данные программа, вероятно, будет читать при следующей операции чтения. Если ядро правильно угадало «мысли» программы, данный алгоритм позволяет существенно повысить производительность системы. Кроме всего прочего, эффективность этого алгоритма сильно зависит и от логики программы.
elevator=as
«Справедливая» очередь (Complete Fairness Queuing) – равные права для всех программ. Ядро равномерно планирует операции ввода/вывода для каждой программы, здесь нет каких-либо программ, которые могут монополизировать доступ к диску. Если несколько программ одновременно запросят доступ к диску, все программы получат ответ. Данный метод в некоторых случаях позволяет повысить производительность системы, а в некоторых, наоборот, снижает общую производительность – все зависит от конкретной системы.
elevator=cfq
Deadline-планирование или планирование крайних сроков (Deadline Queuing) – все приложения, запросившие доступ к диску, ставятся в очередь. Из очереди извлекается одна программа, которая и получает практически монопольный доступ к диску. Пока эта программа работают, все остальные ожидают в очереди. По истечению определенного времени, планировщик переводит эту программу в состояние ожидания и переключается на другую программу – следующую в очереди. Теперь вторая программа получается доминирующий доступ к диску. Потом третья, четвертая и т.д. Данный метод хорош для сервера баз данных, но не для пользовательского компьютера.
elevator=deadline
У каждого алгоритма есть свои преимущества и недостатки. Но только два алгоритма подходят для обычного домашнего компьютера (то есть рабочей станции) – второй и третий. В Интернете вы можете найти данные о том, что для настольного компьютера более подходит второй алгоритм. Решать вам – все познается в сравнении, тем более, что вы ничем не рискуете. Для применения нового алгоритма достаточно указать определенный параметр ядра и немного поработать с системой – если не понравится, тогда стоит попробовать другой алгоритм. Вам не нужно перекомпилировать ядро – а просто пару раз перезагрузить компьютер. Если вы подберете нужный алгоритм, тогда вам понадобится перезаписать загрузчик (в случае с LILO). Для выбора нужного режима перезагрузите компьютер и при загрузке ядра Linux передайте ему один из указанных выше параметров. Например, для выбора упреждающего планирования нужно передать ядру параметр elevator=as:
linux elevator=as
Предположим, что вам больше всего понравится именно этот параметр. Теперь его нужно «утвердить» в файле конфигурации загрузчика. Если вы используете загрузчик LILO, откройте файл /etc/lilo.conf и найдите в нем строку
append="<параметры ядра>"
Добавьте в эту строку параметр linux elevator=as:
append="elevator=as другие параметры"
Например,
image=/boot/vmlinuz-2.6.9
label=Linux
root=/dev/hda1
append="elevator=as video=vesafb:ywrap,mtrr,1024x768-16@75"
Сохраните файл и перезапишите загрузчик:
lilo
Если у вас загрузчик GRUB, перезапись загрузчика необязательна. Вам нужно только отредактировать файл конфигурации - /boot/grub/grub.conf
...
title My Default Linux
root (hd1,0)
kernel /boot/vmlinuz-2.6.9 ro root=/dev/hda1 elevator=as
...