MegaFAQ по разгону Linux на десктопе

Posted by admin On Сентябрь - 1 - 2009

Прожорливость современных Linux-дистрибутивов легко ощутить, запустив один из них на компе с 512Мб ОЗУ или купив ASUS ЕееРС. Нерасторопная загрузка десктопа, борьба приложений за ресурсы, тонущий под собственным весом Firefox и постоянно шуршащий жесткий диск — зрелище пугающее и обескураживающее. Где же тот Linux, который способен работать на машинах с 16 Мб оперативки и процессором семейства i486? А ведь он до сих портам, внутри, задавленный грузом многочисленных библиотек, бесполезных демонов, жирных приложений и красивостей рабочего стола.

Q. В моем любимом дистрибутиве Linux загружается огромное количество сервисов. Это занимает кучу времени. Можно ли как-то ускорить загрузку?
А. Ну, например, можно попытаться организовать параллельный запуск сервисов. Это несложно, найди в файле /etc/init.d/гс такой код:

for i in /etc/rc$runlevel.d/S*
do case “$runlevel” in
*) startup $i start ;; esac done

И замени строку «*) startup $i start;;» на «*) startup $i start & ;;». Так загрузочные процессы будут запускаться параллельно: последующий сервис начнет стартовать, не дожидаясь выполнения предыдущего. После модификации конфига перезагрузи систему. Если тебе повезет, и Linux запустится корректно, то время его запуска сократится примерно в два раза. Но он может и не загрузиться. У этого способа есть один недостаток. Представим, что нам нужно запустить к сервиса: А, В, С и D, причем сервис С — довольно громоздкий, и его запуск занимает, скажем, секунд 15-20, а сервис D
— небольшой, но он зависит от С. Получается, что С еще не запущен, a D запущен, но он не может работать без С. В результате, D окажется неработающим. В реальной системе таких сервисов можетбыть много. Что же делать? Ответ прост: нужно использовать программу cinit, которая параллельно запускает сервисы, но при этом проверяет зависимости. Таким образом, cinit не запустит сервис D, если сервис С, необходимый для корректной работы D, еще не запущен.

Прочитать о правильной настройке cinit можно по адресу: nico.schottelius.org/documentations/ speeches/metarheinrrtain-chaosdays-110Ь/ cinit/view. Еще один вариант — перевести дистрибутив на систему инициализации InitNG (Init Next Generation). За подробностями обращайся к статье «Молниеносная загрузка тукса»зс _03_2006). Кслову,убунтовский upstart, использующий метод параллельного запуска сервисов, грузит дистрибутив до окна логина за -10 секунд.

Q. А как отключить ненужные сервисы?
А. Отключить сервисы можно с помощью графического конфигуратора (drakxservices в Mandriva, system-config-services в Fedora, services-admin в Ubuntu), но намного проще «прибить» ссылку в соответствующем rcN.d-каталоге (или же переместить ее в другой каталог — на случай, если когда-то понадобится включить сервис).

Q. Какувеличить объем виртуальной памяти?
А. Набери команду free в консоли. Сколько виртуальной памяти (физическая память плюс область подкачки) сейчас свободно? Если все заполнено, например, осталось несколько мегабайт физической памяти и столько же в своп-области, значит, памяти катастрофически не хватает. Лучший совет — это купить еще один модуль оперативки. В качестве временного решения могу предложить создать и активировать дополнительный файл подкачки (в нашем случаеего размер — 512 Мб):

# dd if=/dev/zero of=/swap/sw-f ile bs=lk count=524288
# mkswap /swap/sw-file 524288
# swapon /swap/sw-file

Чтобы последнюю команду не вводить каждый раз при запуске системы, пропиши ее в загрузочных сценариях (желательно после команды «swapon -а»).

Q. Как повысить производительность виртуальной памяти?
А. Если ты работаешь с небольшими программами и часто переключаешься между ними, можно установить коэффициент подкачки равным 20 или 30. В этом случае переключение между приложениями будет мгновенным, но замедлится их работа. Поскольку приложения небольшого размера, то это не будет заметно.

Если же на протяжении дня ты в основном работаешь с громоздкими приложениями, например, OpenOffice, или занимаешься обработкой изображений в GIMP, лучше установить значение коэффициента, превышающее 70, например, 80 или даже 85.

Тогда переключение между приложениями будет медленное, зато основное приложение будет работать быстро. Изменить значение коэффициента подкачки можно с помощью команды:

swappiness
Или через /etc/sysctl.conf:
vm.swappiness =20

Поэкспериментируй с различными параметрами — только так можно подобрать для себя оптимальное значение. Кроме того, не мешает ограничить размер файлового кэша, чтобы он занимал меньше ОЗУ (так мы предотвращаем свопинг), и активировать принудительный сброс буфера в случае, если приложения суммарно займут более половины памяти:

vm.pagecache = 90 vm.dirty_ratio = 50

Q. Как оптимизировать работу жесткого диска?
А. В большинстве случаев система сама подбирает оптимальные параметры работы с жестким диском. Используя утилиту hdparm, есть возможность дополнительно повысить производительность. Чтобы получить информацию о текущих настройках харда, запустим команды:

$ hdparm /dev/sda $ hdparm -i /dev/sda

Параметров будет получено много, но на производительность напрямую влияют лишь некоторые:
• MaxMultSect/MultSect — максимальное/ текущее число секторов, которые диск может считать за один проход (для максимальной производительности они должны совпадать);
• РЮ modes/DMA modes — режимы, которые поддерживает жесткий диск (режим, помеченный звездочкой, является текущим);
• multcount — число одновременно считываемых секторов;
• 1/0 support — режим работы жесткого диска (16-битный режим, 32-битный режим или 32-битный синхронный режим);
• using_dma — использовать DMA или нет;
• readahead — количество секторов для упреждающего чтения.
Переопределить установки для конкретного диска можно в командной строке (вступают в силу немедленно) или —указав их в конфигурационном файле/etc/hdparm.conf или/etc/ default/hdparm (потребуется перезагрузка). Влияние изменений можно протестировать при помощи команды «hdparm -tT/dev/sda». Для примера включим DMA(-dl),32-битный режим I/O (c1); multicount выкручиваем по максимуму (-m64), а упреждающее чтение ставим равным multicount (-абЛ). Установка параметра *-и1* разрешает драйверу параллельно обрабатывать несколько прерываний, что повышает производительность:

# hdparm -ulcldlm64a64 /dev/sda

Дополнительно можно поиграться с параметром ‘-W (0/1), отключающим/включающим кэширование. Его значение зависит от производителя и модели харда и по умолчанию не определено.
Q. Как задать отдельной программе приоритет для работы с диском?
А. Аналогично nice, позволяющей изменить приоритет процесса, утилита ionice задает приоритет на использование харда для процесса или приложения. В Ubuntu ionice входит в пакет schedutils. Приоритет указывается при помощи класса и собственно приоритета в виде:

ionice -с класс -п приоритет -р PID

Приоритет — число от 0 до 7 (чем меньше число, тем он выше). В позиции класс три значения:
1. Realtime — планировщик дает преимущество при доступе к диску выбранному процессу, без внимания на работу других процессов (8 уровней приоритета [0-7]);
2. Best Effort — класс, устанавливаемый по умолчанию для всех процессов (8 уровней приоритета);
3. Idle — программа получает право на использование жесткого диска только в том случае, если другая программа не требует диск; приоритеты не задаются.
Вместо PID можно указать имя процесса:

$ sudo ionice -с2 -n0 mplayer

Q. Как разогнать файловую систему?
А. Через отключение ненужной функциональности. Любая современная ФС достаточно гибка, но напичкана большим количеством функций, которые лично тебе могут и не понадобиться. Возьмем, к примеру, ext3, наиболее популярную сегодня Linux-ФС. Она обладает двумя важными, но далеко не всегда необходимыми функциями: журналирование и временные метки последнего доступа к файлу. Обе они требуются, но только в случае, если твоя система целиком «сидит» на одном разделе. Если же установить ОС на несколько разделов, каждый из которых будет ответственен за хранение файлов конкретного каталога, — мы получим возможность использовать для них разные файловые системы с различным уровнем функциональности. Смотри:
• Раздел #1. Корень файловой системы, то есть каталог
• Раздел #2. Каталог/usr, хранящий все устанавливаемое программное обеспечение.
• Раздел #3. Каталог/home, личные данные пользователей.
• Раздел #4. Каталог/tmp, временные файлы.
• Раздел #5. Каталог/var, множество изменяемых во времени данных приложений.
Зачем журналировать и обновлять время последнего обращения к файлам для корня файловой системы, который изменяется очень редко (обычно во время переустановки ядра или обновления дистрибутива)? Ответ: незачем. Монтируем к корню шуструю ext2 (которая не ведет журнал) с опцией noatime (не использовать временные метки последнего доступа). То же относится к каталогу/tmp, за исключением того, что в этом случае atime лучше оставить. Каталог/var хранит множество мелких файлов, для управления которыми отлично подходит ReiserFS./home — важнейшие данные пользователя, поэтому к нему лучше подключить журналируемую ФС.
Кстати, для ускорения доступа к каталогу/tmp можно использовать файловую систему tmpfs, хранящую все свои файлы в оперативной памяти. Это отличное подспорье тогда, когда памяти много, а девать ее некуда. Вот строка для/etc/fstab:

tmpfs /tmp tmpfs size=512m/mode=1777 О О

Можно пойти и радикальным путем: не разбивать диск на множество разделов, а просто перейти на файловую систему ext4. В июльском номере журнала, в статье «На пути к совершенству», мы много говорили о ней и показали бенчмарки, которые доказывают, что производительность ех14за последнее время возросла настолько, что другие ФС на ее фоне выглядят поделками второкурсников.

Q. Что можно сделать с видеоподсистемой?
А. Первое — отказаться от использования стандартных видеодрайверов, поставляемых в комплекте с Х.огд. Особенно ущербны драйвера для карточек ATI и nVidia, и если первые способны хотя бы на что-то в плане 20-ускорения (во многом благодаря открытию некоторых спецификаций), то вторые — просто ужасны. Я на собственной шкуре ощутил примитивизм драйвера nv, когда попытался поиграться с КОЕ4.1.1, По уровню тормознутости картинка легко обставляла UT, запущенный на 166′ом пентиуме (тоже личный опыт), и это несмотря на 1 Гб оперативки, 2.6-гигагерцовый камень и полностью отключенные эффекты. После установки официальных дров кеды полетели быстрее XFCE. Ответ на вопрос «почему?» легко найти, прочитав документацию Knv, которая прямо говорито полном отсутствии функций 2й-ускорения (именно 2D) в драйвере. Второе, что можно сделать —установить простую утилиту nvclock [www.linuxhardware.org/ nvclock), которая позволит разогнать видеокарту как по частоте видеочипа, так и по памяти. На моем домашнем компе установлена старенькая видеокарта nVidia 5900FX. Когда-то давно я запускал на ней первый Far Cry (через wine). Поначалу он притормаживал даже на средних настройках графики, но после выполнения команды «nvclock -f -n 540». которая увеличила частоту чипа с дефолтовых 400 МГц до 540, игрушка начала без проблем бегать на высоких настройках.
Третье — отключить Зй-эффекты рабочего стола. Операция, которая не несет особого прироста производительности (эффекты не грузят проц, а для 30-ускорителя это просто семечки), может повысить скорость реакции системы за счет снижения времени на исполнение дополнительного кода и количества переключений контекста.

Q. Как отключить Compiz?
А. Все зависит оттвоего дистрибутива. Например, в Ubuntu нужно выполнить команду «Система -> Параметры -> Внешний вид» и на вкладке «Внешний вид» отключить эффекты рабочего стола. В других дистрибутивах можно использовать универсальные команды:

# gtk-window-decorator –replace (если у тебя GNOME)
# kde-window-decorator –replace

Q. Можно ли как-то использовать ресурсы видеоадаптера во время его простоя?
А. Да, можно. ATI и nVidia, два основных игрока на рынке видеоадаптеров, не так давно выпустили специальные фреймворки, позволяющие перенести некоторые прожорливые вычислительные задачи на GPU. Позднее была сформирована специальная группа KhronosGroup, разработавшая стандарт OpenCL (www.khronos. org/opencll. который описывает стандартизованный интерфейс доступа kGPU для вычислительных задач. Беда втом, что пока почти не существует приложений, использующих эту технологию. А вот задействовать установленную на видеоадаптер высокоскоростную память удастся прямо сейчас. Ядро Linux включает в себя специальный драйвер Memory Technology
Device (MTD), который позволяет адресовать не только оперативную память, но и память любого устройства, подключенного через шину PCI. Методика, описанная в статье en.gentoo-wiki.com/ wiki/TIP Use memory on video card as swap, использует этот драйвер для создания (псевдо) блочного устройства, которое будет использовать видеопамять в качестве хранилища данных. На устройстве можно создать своп или файловую систему для хранения файлов, например, каталога Amp. Интересная особенность: подход отнюдь не отменяет возможности использования графических приложений, позволяя зарезервировать небольшой кусочек памяти для VGA-режима.

Q. Интернет-соединение тормозит, периодически появляются раздражающие задержки. Как исправить?
А. Это известная проблема в некоторых дистрибутивах Linux с включенной по умолчанию поддержкой IPv6. Если поддержка новой версии протокола IP в системе не нужна, ее очень просто отключить. Для этого достаточно закомментировать строку, содержащую «ipv6», в конфиге /etc/modprobe.conf, или занести этот модуль в блэклист, добавив в файл /etc/modprobe.d/ blacklist.local запись «blacklist ipv6». Если проблема не решена, следует включить/отключить параметр TCP window scaling, определяющий масштабирование TCP-окна, то есть установку количества пакетов, которое может быть послано без подтверждений. Временно отключить его можно командой:

# sysctl -w net.ipv4.tcp_window_ scaling=0

Если это поможет, заносим следующую строчку в/etc/sysctl.conf:

net.ipv4.tcp_window_scaling=0

Другой вариант — не отключать «ТСР window scaling», а попробовать подобрать оптимальные параметры для TCP-буфера чтения и записи:

net . ipv4.tcp_rmem = 4096 87380 174760
net.ipv4.tcp_wmem = 4096 87380 174760

Аналогичный параметр есть и для UDP:

net.ipv4.udp_rmem_min = 16384 net.ipv4,udp_wmem_min = 16384 net.ipv4.udp_mem = 8388608 12582912 16777216

Ядро Linux 2.6 включает алгоритмы автоматической оптимизации буферов принимающей и отправляющей сторон.

Дистрибутивы Linux

Posted by admin On Август - 9 - 2009

Представляем вашему внимаю полный список дистрибутивов линукса, все ссылки кликабельны: