В последнее время в разного рода конференциях по линуксу возникает флейм по поводу того, что линукс типа сакс, отстой и полные тормоза и что винда была, есть и будет форева. Ярые сторонники этой мысли при скромном вопросе - а вы линух-то свой оптимизировали вообще? - тут же замолкают и спрашивают, на фига это надо - дескать, и без этого грузится вроде, но тормозит... Не стоит наивно полагать, что в конфигурации по умолчанию все прооптимизировано, ибо она настроена так, чтобы работать как на твоем Пентиуме III с кучей прибамбасов, так и на старой трешке. Я не затрону в этой статье "железной" оптимизации (...из нашей статьи вы не узнаете о том, что вешать на один шлейф CD-ROM и хард нехорошо :o)) - я лишь поговорю об оптимизации на уровне софта. Так что вперед - оптимизировать, оптимизировать и еще раз оптимизировать... :-))
Возможно, у тебя линукс уже установлен, однако этап установки является одним из важных шагов по оптимизации. В первую очередь, скорость работы зависит от дистрибутива, коих на рынке сейчас великое множество. Каждый из них имеет свои особенности, достоинства и недостатки. Наиболее быстроходным, по моему мнению, является дистрибутив Mandrake, наиболее тормозным - SuSe Linux (как это ни печально Ядро Mandrake оптимизировано для процессоров Пентиум, так что по сравнению с RedHat он быстрее где-то на 10-15% (по моим субъективным оценкам).
Во время установки (в принципе это можно сделать и после, набрав в командной строке ntsysv) можно убрать ненужные сервисы из автоматического старта, тем самым уменьшая время загрузки линукса. Например, из всего что есть в списке, у меня остались сервисы: cron, atd, network, xfs, xfstt.
Также еще один важный момент - это использование свапа и его размер. Я думаю, все знают, что когда заканчивается оперативная память (и даже несколько раньше ;-)) при запуске очередной проги, неактивная в данный момент программа свапуется, то есть OS копирует память, занятую этой прогой на хард, очищает память и загружает в нее свежезапущенную программу. Ну так вот, важно правильно выбрать размер свапа: если у тебя 16...32 Mb памяти, то размер свапа должен быть в 3-4 раза больше размера памяти, при 32...64Mb размер свапа где-то в 1.25-2 раза больше объема памяти, при количестве памяти более 64 Mb свап уже включают по желанию. Короче: чем меньше памяти, тем больше должен быть свап. Могу сказать, что у меня, при 128 Mb ОЗУ, свап потребовался только ОДИН раз, и обычно ВСЕГДА где-то 20Mb пребывают свободными.
Также попробуй расположить свой своп-диск ближе к началу IDE диска. Hачало жесткого диска физически расположено на внешней части цилиндра. Головка чтения/записи в этом случае cможет покрыть большую область за один оборот диска. Это значит, что может быть записано/считано больше данных за один оборот. У меня разница составляет 3MB/сек в зависимости от местоположения логического диска на IDE устройстве.
Раз мы уж заговорили про память, скажу пару слов о "прожорливом" софте. Самые памятелюбивые под линухом (в порядке убывания): StarOffice - 128Mb, Mozilla M1* - 96 Mb, Kde & Gnome - 64 Mb, Netscape 4.x - 32Mb. Так что даже не пытайся поставить староффис на пень с 32 мегами - встать-то он встанет, но пока будет запускаться - успеешь кофе сварить :-(.
Ядро, устанавливаемое по умолчанию, содержит в себе много ненужных для тебя опций, цель которых - заставить его работать почти на любой конфигурации. У нас есть 2 задачи: выкинуть из него все лишнее совсем и выложить то, что нужно для твоего компа, в отдельные модули. Дело в том, что при работе Linux ядро - единственный кусок памяти, который не свапуется, поэтому логично сделать его меньше. Что же выкидывать из ядра? Тут сложно продвинуть конкретные рекомендации - все зависит от конфигурации твоего компа. Но несколько советов я могу дать:
- Установи семейство процессоров в PPro/6x86MX для Pentium II/III систем.
- Разреши MTRR для PentiumPro/II/III и AMD K6-2/3 систем.
- Запрети багофиксы для чипсетов, которых у тебя нет. Пример: CMD640 и RZ1000.
- Разреши Generic PCI bus-master DMA поддержку и использование DMA по умолчанию (Use DMA be defaults).
- Разреши поддержку чипсета, который у тебя есть. Пример: VIA82C586 для VIA VP2/3 и MVP3 материнских плат.
- Разреши ТОЛЬКО специфичные SCSI контроллеры, которые у тебя есть. Пример: Adaptec AIC7xxx.
- Запрети ВСЕ сетевые устройства, поддержка которых тебе не нужна.
- Установи максимальное число Unix98 PTYs в 128.
- Установи 'persistant dma buffer' в конфигах звука.
- Запрети все файловые системы, за исключением: ISO 9660 CDROM,VFAT, Second extended fs, /dev/pts и /proc поддержка.
- Запрети все сетевые файловые системы (NFS).
- Запрети все консольные драйвера. Исключение: VGA text console.
- Запрети Enhanced Real Time Clock поддержку.
- Запрети поддержку ISDN.
- Запрети поддержку IPv6.
- Запрети поддержку Amateur Radio.
- Запрети поддержку инфракрасных устройств (IrDA subsystem).
- Запрети поддержку джойстиков (Joysticks).
- Запрети все Ftape.
Попробуй другие вещи. Отредактируй /usr/src/linux/Makefile: найди строку
'MAKE =make' и измени ее на 'MAKE =make -j5' - так будет использоваться
несколько копий make, с которыми на некоторых системах будут быстрей
компилироваться программы. Потом измени: 'CFLAGS= -Wall -Wstrict-prototypes -O2
-fomit-frame-pointer' на 'CFLAGS = -Wall -Wstrict-prototypes -O7
-fomit-frame-pointer -fno-exceptions', что включит использование оптимизирующих
фишек, которые могут работать или не работать со всеми ядрами (оптимизация кода
при компиляции).
Ядро желательно брать посвежее и стабильное, например,
2.2.17 - последний стабильный релиз ядра из серии 2.2.* на данный
момент.Компиляция его осуществляется командами: make menuconfig (или xconfig,
если компилить из-под X [*] - данный параметр ядра будет скомпилирован
встроенным в него [M], - означает, что он будет откомпилирован в качестве
отдельного модуля, загружаемого по необходимости)
make dep
make bzlilo
make modules
make modules_install
Необходимо также заметить, куда скомпилилось новое ядро (у меня это всегда корень), и добавить в файл /etc/lilo.conf строки, дающие возможность загрузить старую версию ядра, если эта криво скомпилена или просто глючит (и такое бывает!):
image=/vmlinuz #путь к новому ядру
root=/dev/hda3 #путь к корню, пишем тот же, что и для установленного системой ядра
read-only
label=linux_new #название нового типа загрузки
Далее ставим эти 4 строчки ПЕРЕД кодом старого загрузчика (обычно начинающегося с image=/boot/vmlinuz), чтобы твое ядро грузилось первым по умолчанию, и ребутимся. Вуаля! Все должно работать!
Здесь оптимизацию можно разделить на две части: оптимизация производительности харда и оптимизация свободного места на нем. Скажу сразу - лучше устанавливать программы по минимуму, а то потом будешь просто офигевать, заглядывая в папку /../bin и думая, что тебе со всем этим делать. Ибо проще доставить НУЖНУЮ тебе прогу, чем потом удалять кучи прог, которые ты не использовал, освобождая место на винте.
Благодаря особенностям файловой системы ext2fs, используемой в линуксе, диск менее подвержен фрагментации, но она все же имеется (у меня она составляет максимум 10%). Если у кого-то она очень большая, то можно скачать дефрагментатор с ftp://metalab.unc.edu/pub/linu/system/filesystems.
Далее. Несмотря на стабильность линуха, некоторые проги все-таки падают, давая прибавление на харде в несколько мег путем образования файла core - дамп памяти, с которой работала упавшая программа (они это делают для удобства отладки). Если тебе надо ограничить максимальный размер образа ядра в tcsh - используй команду 'limit'. Hабранная сама по себе, она покажет текущее значение для данного шелла. Также core-файлы могут представлять угрозу для безопасности системы, так как могут содержать куски памяти, содержащие пароли и другую важную информацию. Для отключения сохранения образа ядра при сбоях используй 'limit coredumpsize 0' или добавь в файл конфигурации bash (~/bash_profile) строку 'ulimit -c 0'.
Вообще, можно попробовать использовать ReiserFS - журналируемую файловую систему - 'самоизлечивающуюся' при потерях кластеров, связанных с некорректным выходом из системы (кнопка power off?) или перебоях с электропитанием.
Для этого есть хорошая команда 'hdparm'. Запустив ее hdparm -t <имя раздела или диска>, можно померить производительность данного раздела (или диска в целом). У этой команды есть много ключей - вот самые интересные:
-d [0|1] включение DMA
-c [1|2|3] 16/32bit общение с диском
-m количество секторов, считываемое за раз
-k сохранение параметров.
Не все из этих опций смогут работать на твоей машине, могут добавиться и другие к моменту чтения тобой этой статьи, но могу сказать одно: поиграв с ними и написав 'hdparm -d 1 -c 3 /dev/hda' и 'hdparm -k /dev/hda', я повысил скорость работы своего диска под линуксом с 3Mb/sec до 12Mb/sec. Типа, апгрейд подождет! Диск - IBMDTTA351010. После того как наиграешься с параметрами и добьешься результатов, создай простой скриптик, вписав в него все, что ты поменял, а потом, сделав его запускаемым, скопируй его в /etc/rc.d/local, чтобы он при каждом старте системы срабатывал автоматически.
Не секрет, что для иксов лучше иметь не менее 16 мег оперативки. Такого же мнения придерживаются и несколько Desktop & Windows менеджеров :0). Самые навороченные из них это AfterStep, WebMaker, IceWM, BlackBox. Что касается моего любимого KDE - то он несколько не торопится при старте на слабой машине. Есть шанс ему помочь, найдя стартовый скрипт - startkde (у меня он лежит в /usr/bin) - и закомментировав строчки "'sleep 2'", говорящие о паузе в две секунды между стартами разных KDE сервисов. Что касается Gnome+Enlightment, то здесь явно ничем хорошим не пахнет, так что лучше не мучить себя и компьютер. На 32 метрах памяти все вышеперечисленное в этом разделе работает весьма сносно.
Для ускорения видеокарты в Х можно использовать следующую фичу: требуется процессор pentium pro :0). Смотрим в /proc/pci (cat /proc/pci) :
VGA compatible controller: S3 Inc. ViRGE/DX or /GX (rev 1).
Medium devsel. IRQ 7. Master Capable. Latency=40. Min Gnt=4.Max Lat=255.
Non-prefetchable 32 bit memory at 0xf8000000 [0xf8000000].
Видим нашу видеокарту. Теперь мы попробуем увеличить скорость записи в
устройство, используя 'write-combining'. Команда, разрешающая 'write-combining'
в 4-х меговую область, начинающаяся с
0xf8000000 : 'echo \"base=0xf8000000
size=0x400000 type=write-combining\" >> /proc/mtrr'.
Теперь в /proc/mtrr мы видим следующую новую строчку:
reg02: base=0xf8000000 (3968MB), size= 16MB: write-combining, count=1 .
Если понадобится, можно запретить использование 'write-combining': 'echo \"disable=2\" /proc/mtrr'. Более подробно об этом можно посмотреть в /usr/src/linux/Documentation/mtrr.txt.
Также можно поиграть с нестандартными разрешениями карточки, выжав из нее все - но тут я не советчик, ибо этого САМ не пробовал. Понятно, что перед этим неплохо почитать доку на свою карточку.
В оставшейся части я дам несколько общих советов для ускорения Linux'a.
1) Отредактировать inittab, уменьшив число виртуальных консолей - особенно,
если можно запускать X-terms. Я еще не видел человека, который бы работал
одновременно с шестью консолями и X-Window. Найти следующую строчку:
c1:1235:respawn:/sbin/agetty 38400 tty1 linux (Обычно их 6 с c1 по c6) и
закомментировать ненужные (только случайно не закометируй все ;))
2) Убрать из /dev все ненужные записи - особенно эту тьму разных pty. Кому это надо, когда есть PseudoTerminal Miltiplexor.
3) Отключить inetd/xinetd - зачем он нужен, если нет насущной потребности, скрываясь от полиции в Интернет-кафе "Зимбабве", стереть с жесткого диска важный налоговый документ, подключившись по telnet.
4) Убрать лишние шрифты XFree86, поставить шрифты 75dpi, 100dpi, Speedo, PEX, Type1, misc, cyrillic. Реально IMHO нужны 75dpi, misc, Type1. Шрифты cyrillic - вообще довольно низкого качества, гораздо лучше Cyr-RFX (75dpi, misc со встроенной кириллицей).
5) Отключить все ненужные сетевые сервисы: sendmail, nfsd, httpd.
Ну и, напоследок,
1) ftp://ftp.chg.ru/pub/benchmark - разнообразные проги для замера производительности под линукс.
2) Если ты хочешь себе купить к компу какую-нить новую железку и не знаешь, будет ли она поддерживаться твоим ядром, то обратись сюда:
http://cdb.suse.de/cgi-bin/scdb