воскресенье, 8 ноября 2009 г.

Повышение производительности Linux на десктопе

1). Виртуальной памяти
При работе с небольшими программами и частым переключением между ними, коэффициент подкачки нужно установить 20 или 30 (переключение мгновенное, работа с ними медленная, поскольку они не большие то это будет незаметно).
При работе с громоздкими приложениями (OpenOffice, GIMP) и редким переключением между ними, коэффициент подкачки нужно установить > 70, например 80 или 85 (переключение медленное, работа с ними быстрая).
меняем в /etc/sysctl.conf - wm.swappiness=20 (установил 85)
Ограничение размера файлового кеша, чтобы занимал меньший объем ОЗУ (предотвращение свопинга) + активация принудительного сброса буфера в случае, если приложения суммарно займут более половины памяти:
vm.pagecache=90 (установил)
vm.dirty_ratio=50 (установил)
2). Выключение загрузки модуля ipv6
вставить строку blacklist ipv6 в файл vim /etc/modprobe.d/blacklist-mdv (может быть blacklist*)
3). предварительное связывание или prelink
ставим пакет и даем команду
# prelink -avmR
v - выводить информацию на экран;
a - подвергать пре-связыванию все бинарные файлы;
m - сохранить виртуальную память (нужно если библиотек очень много);
R - рандомизировать порядок следования участков памяти (повышает уровень защиты от атак на срыв стека).
После можно радовать ускорению. Ограничения:
3.1). prelink не способен увеличить скорость загрузки бинарников, скомпиленых без опции '-fPIC'. К сожалению, таких библиотек много, обычно сборщики нарочно отключают этот флаг для увеличения производительности предложения;
3.2). prelink не умееет обрабатывать библиотеки wine;
3.3). некоторые статистические библиотеки могут перестать запускаться после обработки prelink;
3.4). после установки новых приложений или библиотек операцию нужно повторить  
3.5). в Ubuntu prelink ставить не нужно - у него альтернативный метод DT_GNU_HASH (реализован на уровне корневой библиотеки (glibc)), также в Ubuntu вместо init используется система паралельно загрузки сервисов upstart.
Удаление prelink
# prelink -au
удаления пакета после этого
4). preload
Имеет смысл использовать данный демон если оперативки больше или равно 2 Гб, при меньшем количестве только помешает.
демон используется для предварительно загрузки библиотек для часто используемых приложией (холодный запуск приложений занимает меньше времени).
Ставим пакет - стандартный конфиг /etc/preload.conf работает сносно, но можно елси хочентся поменять - основные опции
секции model:
cycle - число обращений к системе для сбора статистики (дефолт 20с), если вредит производительности можно увеличить;
halflife - интервал, по истечении которого демон забывает накопленную статистику на 50% (дефолт 168 часов - неделя), уменьшать стоит если часто меняешь софт, увеличивать если месяцами и годами нет;
minsize - минамальный размер обьекта (программы, библиотеки), обрабатываемой демоном (дефолт 2000000 - 2 Мб), файлы меньшого размера демон на загружает, смысла менять нет, можно уменьшить елси кажеться что памяти хватит;
memtotal, memfree, memcached - опции взаимозаменямы - указывают на объем памяти потребляемый демоном, расчет по форумуле - вся память (memtotal) + доступная при старте (memfree) + кеш (memcached).
секции system:
mapprefix - список каталогов, файлы которых должны быть предварительно загружены (все не только бинарники и библиотеки);
exeprefix - список каталогов с бинарными файлами;
sortstrategy - способ оптимизации операций ввовда-вывода (дефолт 3 - оптимизация для жестких дисков) 1 - твердотельных, 2 - сетевые файловые системы.
теперь
# service preload reload
/var/log/preload.log - логи, /var/lib/preload/preload.state - текущее состояние preload и его кеш
5). предварительное чтение или readhead
Ubuntu и другие дистры используют систему readhead при инициализации (также как и preload заранее загружает приложения и компоненты в ОЗУ, + он частично внутри ядра и оптимизирован для ускорения запуска).
Но количество севрисов при старте может меняться и надо обновить списки файлов - параметр ядра profile перестраивает списки предварительно загружаемых файлов:
перезагрузка, - вход в меню загрузчика, и добавить в конец списка параметров ядра "profile", для загрузки - трошки покурить пока система будет грузиться в режиме профиля.
6). заморозка процесса или cryopid
чтобы ускорить запуск приложения лушче его не останавливать, а заморозить, а позже восстановить (программе не нужно будет инициализировать заново). Проге не нужно root и модификация ядра и не привязывает замороженный процес к конкретной машине. После заморозки процесс становится вроде самораспак архива и его можно лего перенести на другую машину и просто запустить. Пакет есть не в каждом дистрибутиве, с исходников так:
$ cd /tmp
$ wget http://dagobah.ucc.asn.au/wacky/cryopid-0.5.9.1-i386.tar.gz
$ tar -xzf cryopid-0.5.9.1-i386.tar.gz
$ make
$ mkdir ~/bic
$ cp freeze ~/bin
Запуск программы
$ ~/bin/freeze имя-файла pid-процесса
Проблемы: неполная поддержка сокетов и X-приложений, генерация мусора в списке процессов вместо имени восстановленной проги
7). ускоряем Ubuntu
7.1). отключение таймаута grub - /boot/grub/menu.lst  timeout=0 (было 3)
7.2). Ubuntu splash-screen, показываемый во время загрузки системы отключаеться -  /boot/grub/menu.lst убираем опиции "quiet" "splash"
7.3). IPv6 уже вшит в ядро (раньше модуль /etc/modprobe.d/aliases), надо ядру передать параметр "ipv6.disable=1" в том же /boot/grub/menu.lst
7.4). отключение проверки выхода из спящего режима (при загрузке ядро проверяет выходит ли пк из оного режима или выполняет обычную загрузку), добавить "noresume" в параметры загрузки ядра - ноутбучникам конечно этого делать не стоит
7.5). оптимизация initramfs (ram-диск хранит низкоуровневые компоненеты ос, которые должны быть доступны до монтирования корневой файловой системы). Открываем файл /etc/initramfs-tools/initramfs.conf строку "MODULES=most" меняем на "MODULES=dep". Пересобираем образы только с необоходимимы компонентами:
$ sudo update-initramfs -k all -u
после обновления ядра образы будут сгенерерированы атоматом.
7.6). отключи ненужные сервисы System -> Administration -> Services, безболезненно можно
- Bluetooth Manager - менеджер устройств Bluetooth
- Check for new hardware drivers - проверка новых версий проприетарных драйверов
- Evolution Alarm Notifier - сигнализатор прихода почты в Evolution
- Print Quene Applet - аплет очереди печати
- Tracker - служба поиска и индексирования
7.7). отключи автостарт ненужных приложений System -> Preferences -> Applications startup как пример апплет bluetooth. Запуск остальных можно оптимизировать так - редактирования строки каждого из них так:
sh -c "sleep 10; exec bluetooth-applet"
sh -c "sleep 10; exec /usr/lib/evolution/2.28/evolution-alarm-notify"
то есть для каждого следующего нужно число увеличить на 10.
8). запуск тяжеловесов
8.1). OpenOffice.
Tools -> Options раздел Memory значение для "Number of steps" 20 (уменьшение истории отмены), "Graphics cache" устанавливаем "Use for OpenOffice.org" 128, "Memory per object" 20. В подсекции "Java" убираем галочку "Use a Java runtime enviroment"
8.2). Firefox
удаляем ненужные и редко используемые плагины, оптизимировать базу sqlite, которая использует для хранения данных профиля
$ find ~/.mozilla/firefox/ -name *.sqlite -exec sqlite3 {} VACUUM \;
делать нужно постоянно раз в неделю например - потому что база растет и захламляется

Комментариев нет:

Отправить комментарий