Linux-сервер своими руками — страница 76 из 119

Компилирование ядра

В этой главе будет рассмотрены все этапы компилирования ядра, а также приведены рекомендации по повышению производительности системы.

В показательных целях мною в примерах использовано ядро 2.2.17, но ниже написанное верно также и для более поздних версий ядер (2.3.x , 2.4.x).

18.1. Параметры ядра

Во время загрузки ядру ОС Linux могут быть переданы различные параметры. В этой главе будут рассмотрены не все параметры ядра (полное их описание занимает достаточно много места). За более подробным их описанием вам следует обратиться к BootPrompt-HOWTO. Передача параметров может быть осуществлена либо с помощью загрузчика LILO, либо с помощью любого другого загрузчика Linux (например, bootlin, bootact). В том случае, если вы решили использовать LILO, то в ответ на приглашение нужно ввести:

linux строка_параметров.

где: linux — метка, указанная в файле /etc/lilo.conf.

Вторым способом указания ядру параметров является команда append, используемая в файле конфигурации LILO — /etc/lilo/conf. Параметры при этом следует указывать в следующем виде:

параметр[=значение1][,значение2]…[,значением]

Значения разделяются запятой без пробелов. Если нужно указать несколько параметров, используйте пробел для их разделения.

Пример строки параметров:

// правильное объявление параметров 

root=/dev/hda1 ether=9,0x300,0xd0000,0xd4000,eth0 

// неправильное объявление параметров 

root=/dev/hda1 ether=9, 0x300, 0xd0000, 0xd4000, eth0

18.1.1. Параметры корневой файловой системы

Итак, начнем описание параметров, с параметров корневой файловой системы:

root=yстройство

Устанавливает корневую файловую систему. Например, root=/dev/hda1. В качестве устройства допустимыми являются:

1. /dev/hdaN…/dev/hddN — для IDE-дисков;

2. /dev/sdaN…/dev/sdeN — для SCSI-дисков;

3. /dev/xdaN…/dev/xdbN — для XT-совместимых дисков;

4. /dav/fdN — дисковод для дискет. N=0 — диск А, N=1 — диск В;

5. /dev/nfs — не является устройством, но указывает ядру, что нужно произвести загрузку по NFS.

ro

Этот параметр указывает монтирование корневой файловой системы в режиме «только чтение». Используется по умолчанию,

rw

Задает монтирование корневой файловой системы в режиме «чтение/ запись». При использовании этого параметра нельзя запускать программы типа fsck. Перед запуском программы fsck нужно перемонтировать корневую файловую систему в режиме ro.

18.1.2. Управление RAMDISK

При создании загрузочных дискет для ОС Linux необходимо, чтобы на эти дискеты было помещено нужное программное обеспечение и чтобы для этого программного обеспечения хватило места. Обычно поступают следующим образом: создают сжатый архив всего необходимого программного обеспечения и помещают его на загрузочный диск. При загрузке системы в памяти создается «электронный» диск, на который это программное обеспечение и записывается. Этот «электронный» диск называется RAM-диском. Описываемые далее параметры задают режимы работы с RAM-диском.

ramdisk_start=<смещение>

Разрешает ядру находиться на гибком диске вместе со сжатым образом RAM-диска.

Ядро не может быть включено в сжатый образ файловой системы RAM-диска, так как оно должно быть записано начиная с нулевого сектора, чтобы BIOS могло загрузить загрузочный сектор и ядро могло бы продолжить загрузку.

Если вы используете несжатый образ RAM-диска, то ядро может быть частью образа файловой системы. Такая дискета может быть загружена с помощью LILO.

В том случае, если вы для загрузки используете две дискеты (первая содержит ядро — boot, на второй находится образ файловой системы — root), образ файловой системы должен начинаться на нулевом секторе и смещение = 0.

load_ramdisk=

Этот аргумент заставляет ядро использовать RAM-диск. Значение load_ramdisk=1 сообщает ядру, что нужно загрузить дискету в RAM-диск. Значение по умолчанию 0 (ядро не использует RAM-диск).

prompt_ramdisk=

Сообщает ядру, что нужно запросить дискету, которая содержит образ файловой системы (пример: promt_ramdisk=l).

ramdisk_size=

Устанавливает размер RAM-диска в Кб.

ramdisk=

Определяет размер (в Кб) устройства RAM-диска. Например, для загрузочной дискеты 1.44 Мб нужно указать ramdisk=1440. Этот аргумент поддерживается ядрами, начиная с версии 1.3.47.

18.1.3. Управление памятью

Управление памятью осуществляется с помощью параметра mem:

mem=

Определяет объем памяти, установленной в компьютере.

Например: mem=16384K или mem=16M.

Иногда нужно указать объем ОЗУ, отличный от того, который имеется на самом деле. Например, у вас чипсет Intel 810 с интегрированной видеоплатой, тогда вам нужно указать объем ОЗУ на 1 Мб меньше (а иногда даже на 2 Мб). Это связано с аппаратной особенностью чипсета. Более подробно об этом вы можете узнать на сайте компании Intel (http://www.intel.com).

18.1.4. Другие параметры ядра

debug

Сообщения ядра (важные и не очень) передаются через функцию printk(). Если сообщение очень важно, то его копия будет передана на консоль, а также функции klogd() для его регистрации на жестком диске.

Сообщения передаются на консоль, потому что иногда невозможно запротоколировать сообщение на жестком диске (например, отказ самого диска). Предел того, что будет отображаться на консоли, задается переменной console_loglevel. По умолчанию на консоли отображается все, что выше уровня DEBUG (7). Список уровней можно найти в файле kernel.h.

init=

По умолчанию ядро пытается запустить программу /sbin/init, которая продолжит загрузку согласно стартовым сценариям (rc). Если программа init повреждена, вы можете использовать параметр imt=/bin/sh. В оболочке вы сможете заменить поврежденную программу.

no-hlt

Процессоры 386 (и выше) имеют инструкцию hlt, которая сообщает процессору не производить никаких действий. При этом обычно процессор переводится в режим пониженного потребления энергии и ожидает прерывания от устройства. Параметр no-hlt отключает использование инструкции hlt.

Существование этого параметра обусловлено тем, что некоторые чипы 486DX-100 имеют проблемы с этой инструкцией. Кроме того, параметр no-hlt позволяет использовать Linux на бракованных процессорах.

no387

Отключает использование математического сопроцессора.

no-scroll

Отключает функцию прокрутки экрана во время загрузки.

reboot=

Параметр, задающий режим перезагрузки. Возможные значения: cold и warm, то есть «холодная» или «горячая» перезагрузка. Поддерживается ядрами версии 2.0 и выше.

single

Устанавливает однопользовательский режим для администрирования системы, например, в случае отказа.

18.2. Конфигурирование ядра

Итак, немного разобравшись в параметрах ядра, приступим к его конфигурированию. Однако перед тем как приступить, убедитесь, что у вас установлены исходники ядра и пакет заголовков:

kernel-2.2.17-21mdk.i586.rpm

kernel-headers-2.2.17-21mdk.i586.rpm

Затем перейдите в каталог, который содержит исходные тексты ядра. Обычно это /usr/src/linux или /usr/src/linux-2.2.17. По сути linux — это ссылка на каталог linux-2.2.17. Все действия нужно выполнять от имени суперпользователя:

# cd /usr/src/linux

Затем введите одну из следующих команд:

# make config

# make menuconfig

# make xconfig

В первом случае вам будет задан ряд вопросов, кстати, очень длинный, на который вам предстоит ответить. Я рекомендую команду make menuconfig — это намного удобнее (рис. 18.1). В этом случае вы можете редактировать конфигурацию ядра с помощью меню. Параметр xconfig аналогичен menuconfig, только предназначен для запуска из-под системы X-Window (см. рис. 18.2).

Рис. 18.1. Программа Menuconfig

Рис. 18.2. Программа xconfig


Перед внесением изменений в файл конфигурации ядра, сохраните его под другим именем — Save Configuration to an Alternative File. Во время конфигурирования ядра вы можете включать или исключать некоторые функции из состава ядра или же сделать нужную вам функцию модулем, то есть в состав ядра данная функция включена не будет, но она будет использоваться при необходимости. Например, если вы добавите в систему устройство, то будет подключен нужный модуль, при условии, что вы его откомпилировали. Главная задача — повышение производительности системы, этого можно достичь, если точно сконфигурировать ядро и исключить из его состава ненужный код.

18.2.1. Processor type and features

Здесь можно указать тип процессора и его функции, например, поддержка памяти более 1 Гб, MTRR, эмулирование математического сопроцессора.

Рис. 18.3. Processor type and features


Очень важно правильно указать тип процессора: после того, как я правильно указал тип своего процессора, производительность системы повысилась примерно в 1,5 раза, особенно это стало ощутимо при загрузке системы. Данная функция используется для оптимизации работы процессора. Если вы укажете тип процессора, например, 486, 586, Pentium, PPro, ядро не обязательно будет запускаться на более ранней архитектуре. Например, если вы укажете Pentium, ядро будет работать на PPro (хотя и медленнее), но нет никакой гарантии, что оно запустится на 486. В табл. 18.1 приведены типы процессоров, которые рекомендуются для получения наибольшей производительности.

Типы процессоров Таблица 18.1 

Тип Процессоры
386 Процессоры производства AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix 486DLC/DLC2, UMC 486SX-S
486/Сх486 AMD/Cyrix/Intel/IBM DX4, 486DX/DX2/SL/SX/SX2 AMD/Cyrix 5x86 NexGen Nx586, UMC USD или U5S
586/К5/5х86/6х86 Обычные (самые первые) процессоры Pentium, AMD K5
Pentium/K6/TSC Intel Pentium/Pentium MMX, AMD K6,K6-3D
PPro/6х86МХ Intel Pentium II/Pro, Cyrix/IBM 6x86MX, MM

В моем случае ядро было оптимизировано под 586/К5. После того, как я установил PPro, Linux заработал быстрее (для справки: я использую Intel Celeron 433А). Объем памяти — установите 1 Гб, если, конечно, у вас менее 1 Гб.

Math emulation

Включите эту опцию, если вы используете один из следующих процессоров: 386SX/DX/SL/SLC без 80387, 486SL/SX/SX2.

SMP (Symmetric multi-processing support)

Скорее всего, у вас установлен один процессор и эту опцию вам нужно будет отключить — зачем включать лишний код в ядро? Если же вы счастливый обладатель мультипроцессорной машины, включите данную опцию. При включении SMP укажите правильный тип процессора. Вы должны указать хотя бы 586. Ядро не запустится, если у вас выбран тип процессора 486. Также ядро не будет работать, если ваш компьютер оснащен процессором Pentium, а вы установили тип процессора PPro. Если у вас мультипроцессорная машина, вы должны также включить опцию Enhanced Real Time Clock Support. Опция Advanced Power Management у вас будет отключена при использовании SMP. 

MTRR

В семействе процессоров Intel P6 (Pentium Pro, Pentium II и выше) используются специальные регистры — Memory Type Range Registers (MTRR). Эти регистры используются для управления доступом процессора к различным диапазонам памяти. Включение этой опции может существенно повысить производительность системы, особенно если вы используете видеокарту PCI или AGP. Данную возможность поддерживают процессоры и посторонних производителей: Cyrix 6x86, 6х86МХ, MII, AMD K6-2 (stepping 8 и выше), К6-3, Centaur С6. Некоторые BIOS устанавливают MTRR для первого процессора, но отключают для второго. Активизация данной опции также решает и эту проблему. Если вы не уверены, поддерживает ли ваш процессор MTRR, все равно включите данную опцию. Поддержка MTRR увеличит объем ядра всего лишь на 3 Кб.

18.2.2. Loadable module support

Если вы планируете использовать загружаемые модули, включите все функции. Можно создать компактную версию ядра, которая вообще не использует модули, а поддержка всех необходимых устройств будет включена непосредственно в ядро. В этом случае можно отключить все функции в этой секции. 

18.2.3.General setup

BIGMEM

Поддержка памяти более 1GB.

Networking support

Включите эту опцию, даже если вы не планируете работу в сети. Функции печати в Linux требуют сетевой поддержки.

PCI support

Поддержка шины PCI.

PCI quirks

Эту опцию нужно использовать, если у вас неисправна BIOS. Некоторые BIOS содержат ошибки, которые могут привести к сбоям при работе с PCI. Данная опция должна исправить эту ошибку. Если вы неуверенны, включите ее. Позже можно будет поэкспериментировать. Если же BIOS исправна, эту функцию можно спокойно отключить и тем самым внести вклад в повышение производительности системы.

PCI bridge optimization (experimental)

Оптимизация моста PCI — для любителей экспериментов. Система может работать нестабильно. Попробовать можно, но я бы не стал жертвовать надежностью ради производительности.

Backward-compatible /proc/pci

Старые версии ядра поддерживали файл /proc/pci, который содержит перечень всех PCI-устройств. Некоторые программы используют этой файл, например, для сбора информации о системе. В новых ядрах используется файл /proc/bus/pci. Для поддержки обратной совместимости рекомендуется включить эту опцию. Если вы ее отключите, то у вас будет только один (новый) интерфейс /proc/bus/pci.

MCA support

Данная опция устанавливает поддержку шины MCA. MCA — шина передачи данных, разработанная IBM, — использовалась в системах PS1/PS2. Шина МСА снята с производства и не используется.

Рис. 18.4. General setup


System V IPC

Просто включите эту опцию. Более подробно о ней вы можете прочитать на сайте metalab (ftp://metalab.unc.edu/pub/Linux/docs/LDP/programmers-guide).

BSD Process accounting

При включении этой опции программы пользовательского уровня будут информировать ядро о времени своего создания, владельце, использовании памяти и терминалов. Данную опцию рекомендуется включить.

Sysctl support

Включает поддержку Sysctl. Sysctl позволяет изменять параметры ядра без перекомпилирования во время загрузки. Поддержка sysctl увеличивает размер ядра на 8 Кб. Если ядро, которое вы компилируете, не предназначено для дисков загрузки/восстановления, включите эту опцию.

Kernel support for a.out/ELF/MISC/JAVA binaries

Linux-программы используют ELF-формат. Поэтому его нужно включить в состав ядра, а остальные использовать в качестве модулей.

Parallel port support

Поддержка параллельного порта.

PC-style hardware

Вы должны включить эту опцию (или хотя бы модулизировать ее), если вы используете параллельный порт типа PC. Все компьютеры, совместимые с IBM PC, и некоторые Alpha используют именно этот тип порта.

Support foreign hardware

Включите эту опцию, если вы используете другой (не PC) тип параллельного порта.

Advanced Power Management (АРМ) BIOS support

Поддержка расширенного управления питанием: АТХ, «green»-устройства (например, VESA-мониторы). Если вам нужно отключить эту функцию во время загрузки, введите в качестве параметра ядра apm=off. При возникновении проблем проверьте следующее:

1. Наличие достаточного количества свопа (объема файла подкачки), а также убедитесь, что раздел подкачки включен.

2. Передайте ядру инструкцию no-hlt.

3. Попробуйте отключить поддержку сопроцессора (инструкция по387).

4. Передайте ядру инструкцию floppy-nodma.

5. Убедитесь, что процессор не «разогнан».

6. Установите новый вентилятор для процессора.

Support Enable PM at boot time

Включает АРМ во время загрузки системы. Если эта опция отключена, BIOS не будет управлять питанием устройств, входить в режимы Standby и Suspend, а также не будет производить никаких действий в ответ на вызовы процессора CPU Idle. Если ваш компьютер зависает во время загрузки, выключите эту опцию. Make CPU Idle calls when idle

Во время цикла простоя ядра разрешает вызовы к АРМ. Включение данной опции может привести к зависанию компьютера во время загрузки! Если компьютер использует несколько процессоров, эта опция игнорируется. Заметьте, сколько процессоров именно использует компьютер, а не сколько в нем установлено. Если у вас два процессора, а вы используете только один и поддержка SMP у вас отключена, данная опция игнорироваться не будет!

Enable console blanking using АРМ

Включает мерцание консоли при использовании АРМ. Некоторые лэптопы могут использовать эту опцию для того, чтобы отключить подсветку LCD-экрана, когда активизирован хранитель экрана на одной из виртуальных консолей Linux.

Ignore multiple suspend/resume cycles

Эта опция необходима для ноутбуков Dell Inspiron 3200 и некоторых других для нормальной работы АРМ. Прежде чем активизировать эту опцию, прочитайте документацию по вашему ноутбуку.

RTC stores time in GMT

Если ваш аппаратный таймер сохраняет время в формате GMT, включите эту опцию, иначе она должна быть отключена. Если опция выключена, сохраняется локальное время. Рекомендуется сохранять время в формате GMT. Allow interrupts during АРМ BIOS calls

Обычно прерывания внешних устройств запрещены во время выполнения процедур АРМ. BIOS некоторых ноутбуков разрешает прерывания внешних устройств, например, IBM ThinkPad. По умолчанию данная опция выключена. Если вы не уверены, не включайте ее.

18.2.4. PnP support

В данной секции задается поддержка Plug and Play.

18.2.5. Block devices

Normal PC floppy disk support

Если вы хотите использовать FDD в Linux, включите эту опцию.

Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support

Выключите эту опцию, если ваша система оснащена только SCSI-устройствами.

Use old disk-only driver on primary interface

Данная опция устанавливает старый драйвер для управления Primary master интерфейсом IDE. Обычно ее нужно отключить, чтобы был использован новый драйвер для всех четырех дисков (Primary master, Primary slave, Secondary Master, Secondary slave). Ее также нужно отключить, если у вас на компьютере используются только SCSI-устройства.

Include IDE/ATA-2 Disk support

Поддержка IDE/ATA-2 дисков. Опцию можно отключить, только если вы не используете АТА-диски.

Use multi-mode by default

При возникновении ошибки вида:

hda: set_multmode: status=0x51 

hda: set_multmode: error=0x04 

включите эту опцию.

Include IDE/ATAPI CDROM support

Поддержка привода CDROM. При отсутствии такового отключите ее для уменьшения размера ядра.

Include IDE/ATAPI TAPE support

Поддержка IDE/ATAPI-стримера.

Include IDE/ATAPI FLOPPY support

Поддержка IDE/ATAPI-флопии. Если вы используете LS-120 или lomega-ZIP, включите эту опцию.

SCSI emulation support

Позволяет использовать драйвер SCSI для устройств с интерфейсом ATAPI, для которых нет родного драйвера. Все остальные опции в данной секции предназначены для поддержки конкретных чипсетов. Рекомендую оставить поддержку только тех устройств, которые имеются в вашей системе.

18.2.6. Networking options

Рис. 18.5. Networking options


Packet Socket

Протокол Packet используется программами, которые обмениваются данными непосредственно с сетевыми устройствами без промежуточных сетевых протоколов, например, tcpdump.

Kernel/User netlink support

Просто включите эту опцию. В данной секции задания сетевых настроек я рекомендую включить опции, указанные в табл. 18.2.

Опции сети Таблица 18.2 

Опция Описание
Routing messages Сообщения маршрутизатора
Netlink device emulation Опция обратной совместимости. Скоро будет удалена, но сейчас она нужна
Network firewalls Поддержка firewall
Socket Filtering Фильтр сокетов
UNIX domain sockets Поддержка UNIX-сокетов. Не отключайте эту опцию
TCP/IP networking Поддержка TCP/IP обязательно должна быть включена
IP:firewalling (*) IpChains
IP:firewall packet (*) IpChains
IP: transparent proxy support (*) Прозрачный прокси
IP: masquerading (*) IP-маскарадинг
IP: ICMP masquerading (*) ICMP-маскарадинг
IP: masquerading virtual server support (*) IP-маскарадинг для виртуальных серверов
IP: broadcast GRE over IP (*) Поддержка broadcasting в WAN
IP: aliasing support Поддержка псевдонимов
IP: TCP syncookie support Рекомендуется включить из соображений безопасности. Противодействует SYN-атакам
IP: allow large windowsПозволяет повысить производительность при работе в сети. Не рекомендуется при объеме памяти менее 16 Мб

Опции, отмеченные звездочкой (*), требуются в случае конфигурирования сервера. При создании сервера также потребуется включение ряда дополнительных опций в зависимости от его назначения. Из соображений безопасности включение поддержки firewall и на рабочей станции не будет лишним.

18.2.7. SCSI support


В данной секции можно установить параметры SCSI. При отсутствии в системе SCSI-устройств можно отключить все.


18.2.8. Network device support

Здесь можно указать поддерживаемые протоколы (например, РРР), а также типы поддерживаемых сетевых адаптеров. Отключите все, что не используете. Например, если у вас установлена PCI-сетевая плата, то особого смысла включения поддержки других ISA-сетевых плат я не вижу.

18.2.9.IrDA, USB support

Поддержка соответственно IrDA– и USB-устройств.

Рис. 18.6. USB support

18.2.10. Filesystems

Здесь принцип такой: все, что нужно — встраивайте в ядро, остальное — или исключайте, или используйте в качестве модуля. При этом я рекомендую включить в ядро следующие файловые системы:

Second ext fs (ext2), ISO 9660, MS Joliet CDROM extension, VFAT, /proc, /dev/pts

В виде модулей следующие: MS DOS FAT, MINIX. Также неплохо было бы включить поддержку квотирования, если вы настраиваете сервер.

18.2.11. Sound

Включите поддержку звука, если у вас есть звуковая плата. Во всем остальном следует поступить так, как и в случае с сетевыми платами — включить в ядро только используемую звуковую плату, а все остальные отключить (даже не использовать в качестве модуля). Точнее включить код драйвера для вашей звуковой платы непосредственно в ядро вам, скорее всего, не удастся, но вы его можете использовать в качестве модуля, а все остальные модули даже не компилировать.

18.3. Компилирование ядра