Конфигурирование ядра linux что для чего

Конфигурирование и компиляция ядра Linux

Когда возникает необходимость создания мощной и надёжной системы на основе Linux (будь то обслуживание технологических процессов, веб-хостинга и т. д.), то очень часто приходится настраивать системное ядро таким образом, чтобы вся система работала более эффективно и надёжно. Ядро Linux хоть и является универсальным, однако бывают ситуации, когда его необходимо «подтюнинговать» по объективным причинам. Да и сама архитектура ядра это предполагает благодаря своей открытости. Таким образом, системные администраторы Linux – это те люди, которым важно знать и понимать некоторые общие аспекты конфигурирования ядра Linux.

Способы конфигурации ядра Linux

За время развития Linux постепенно сложились четыре основных способа для конфигурирования её ядра:

  • модификация настраиваемых параметров ядра;
  • сборка ядра из исходных кодов с внесением нужных изменений и/или дополнений в тексты исходных кодов ядра;
  • динамическое подключение новых компонентов (функциональных модулей, драйверов) к существующей сборке ядра;
  • передача специальных инструкций ядру во время начальной загрузки и/или используя загрузчик (например GRUB).

В зависимости от конкретной ситуации следует использовать тот или иной способ. Но сразу необходимо отметить, что на самом деле самым простым является первый — настройка параметров ядра. Самым же сложным является компиляция ядра из исходных кодов.

Настраиваемые параметры ядра

Системное ядро Linux разрабатывалось таким образом, чтобы всегда была возможность его максимально гибко (впрочем, как и всё в системах UNIX и Linux) настроить, адаптируя его к требуемым условиям эксплуатации и аппаратному окружению. Причём так, чтобы это было возможно динамически на готовой сборке ядра. Другими словами, системные администраторы могут в любой момент времени вносить корректирующие параметры, влияющие на работу как самого ядра, так и его отдельных компонентов.

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

Но как и всё в системах UNIX и Linux, настройка параметров ядра по информационным каналам завязана на файловой системе. Чтобы просматривать конфигурацию ядра и управлять ею, в файловой системе в каталоге /proc/sys существуют специальные файлы. Это обычные файлы, но они играют роль посредников в предоставления интерфейса для динамического взаимодействия с ядром. Однако документация, касающаяся этого аспекта, в частности об описании конкретных параметров и их значений довольно скудна. Одним из источников, из которого можно почерпнуть некоторые сведения по этой теме, является подкаталог Documentation/sysent в каталоге с исходными кодами ядра.

Для наглядности стоит рассмотреть небольшой пример, показывающий, как через параметр ядра настроить максимальное число одновременно открытых файлов в системе:

Как можно видеть, к такому приёму можно довольно быстро привыкнуть и это не будет казаться чем-то очень сложным. Такой метод хоть и удобен, однако изменения не сохраняются после перезапуска системы.

Также можно использовать специализированную утилиту sysctl. Она позволяет получить значения переменных прямо из командной строки, либо список пар вида переменная=значение из файла. На этапе начальной загрузки утилита считывает начальные значения некоторых параметров, которые заданы в файле /etc/sysctl.conf. Более подробную информацию об утилите sysctl можно найти на страницах man-руководства.

В следующей таблице приводятся некоторые настраиваемые параметры ядра:

Каталог Файл/параметр Назначение
С autoeject Автоматическое открывание лотка с компакт-диском при размонтировании устройства CD-ROM
F file-max максимальное число открытых файлов. Для систем, которым приходится работать с большим количеством файлов, можно увеличивать это значение до 16384
F inode-max Максимальное число открытых индексных дескрипторов в одном процессе. Полезно для приложений, которые открывают десятки тысяч дескрипторов файлов
К ctrl-alt-del Перезагрузка системы при нажатии комбинации клавиш .
К printk ratelimit Минимальный интервал между сообщениями ядра, в секундах
К printk_ratelimi_burst Количество сообщений, которые должны быть получены, перед тем как значение минимального интервала между сообщениями printk станет активным
К shmmax Максимальный размер совместно используемой памяти
N conf/default/rp_filter Включает механизм проверки маршрута к исходному файлу
N icmp_echo_

ignore_all

Игнорирование ICMP-запросов, если значение равно 1
N icmp_echo_

broadcasts

Игнорирование широковещательных ICMP-запросов, если значение равно 1.
N ip_forward Перенаправление IP-пакетов, если значение равно 1. Например, когда машина на Linux используется как маршрутизатор, то это значение нужно устанавливать равным 1
N ip_local_port_

range

Диапазон локальных портов, выделяемый при конфигурировании соединений. Для повышения производительности серверов, инициирующих много исходящих соединений, этот параметр нужно расширить до 1024-65000
N tcp_fin_timeout Интервал для ожидания (в секундах) заключительного RN-пакета. В целях повышения производительности серверов, которые пропускают большие объемы трафика, нужно устанавливать более низкие значения (порядка 20)
N tcp_syncookies Защита от атак волнового распространения SYN-пакетов. Нужно включать при наличии вероятности DOS-атак

Условные обозначения: F — /proc/sys/fs, N — /proc/sys/net/ipv4, К — /proc/sys/kernel, С — /proc/sys/dev/cdrom.

В результате выполнения этой команды будет отключено перенаправление IP-пакетов. Есть одна особенность для синтаксиса этой команды: символы точки в «net.ipv4.ip_forward» заменяют символы косой черты в пути к файлу ip_forward.

Когда нужно собирать новую версию ядра?

В настоящее время ядро Linux развивается очень быстро и бурно. Зачастую производители дистрибутивов не успевают внедрять в свои системы новые версии ядер. Как правило все новомодные «фишки» больше понадобятся любителям экзотики, энтузиастам, обладателям новинок устройств и оборудования и просто любопытствующим — т. е. преимущественно тем, в чьём распоряжении имеется обычный пользовательский компьютер.

Для серверных машин, однако, мода вряд ли имеет какое-то значение, а новые технологии внедряются только после того как на практике доказали свою надёжность и эффективность на тестовых стендах или даже платформах. Каждый опытный системный администратор знает, что гораздо надёжнее один раз настроить то, что может и должно хорошо и безотказно работать, чем пытаться бесконечно модернизировать систему. Ведь для этого необходимы многие часы работы (ведь приходится собирать ядро из исходных кодов, что довольно сложно) и обслуживания, что довольно дорогостоящее занятие, поскольку, вдобавок ко всему прочему требует глубокого резервирования — сервера не должны останавливаться без организации «горячего» (а уж тем более без «холодного») резерва.

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

Если же принято решение обновить версию ядра путём его самостоятельной сборки, то нужно выяснить, является ли данная версия стабильной. Раньше система нумерования версий ядра Linux была организована таким образом, что чётные номера версий означали стабильный выпуск, нечётные — ещё «сырой». В настоящее время этот принцип соблюдается далеко не всегда и выяснять этот момент следует из информации на официальном сайте kernel.org.

Конфигурирование параметров ядра

Конфигурация для будущей сборки ядра Linux хранится в файле .config. Мало кто занимается ручным созданием и редактированием этого файла, поскольку, во-первых: это сложный синтаксис, который далеко не самый «человекопонятный», и во-вторых: существуют способы для автоматической генерации конфигурации сборки ядра с удобным графическим (или псевдографическим) интерфейсом. Список основных команд для конфигурирования сборки ядра:

  • make xconfig – рекомендуется, если используется графическая среда KDE. Весьма удобный инструмент;
  • make gconfig – лучший вариант для использования в графической среде GNOME;
  • make menuconfig – данную утилиту следует использовать в псевдографическом режиме. Она не так удобна, как две предыдущие, однако со своими функциями справляется достойно;
  • make config – самый неудобный «консольный» вариант, выводящий запросы на задание значений каждого параметра ядра. Не позволяет изменить уже заданные параметры.

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

Очень полезной может оказаться команда make oldconfig, предназначенная для переноса существующей конфигурации с другой версии (сборки) ядра в новый билд. Эта команда читает конфигурацию из перенесенного из другой сборки файла .config со старой сборкой, определяет, какие новые параметры доступны для актуальной сборки и предлагает их включить или оставить как есть.

Для выполнения конфигурации сборки ядра Linux нужно перейти в каталог с исходными кодами и запустить одну из команд генерации конфигурации.

В результате работы вышеуказанных команд будет сгенерирован файл .conf, фрагмент содержимого из которого может быть следующим:

Как можно видеть, в данном коде нет ничего привлекательного для ручного редактирования, о чём даже упоминает запись комментария в начале файла .config. Символ «y» в конце какой-либо из строк указывает, что соответствующий компонент будет скомпилирован в составе ядра, «m» — как подключаемый модуль. Расшифровки или описания о каждом компоненте или параметре в файле .config не содержится — по этим вопросам следует изучать соответствующую документацию.

Компиляция ядра

Самое сложное в компиляции ядра Linux – это создание конфигурации сборки, поскольку нужно знать, какие компоненты подключать. Хотя использование команд make xconfig, make gconfig, make menuconfig и обеспечивает задание стандартной рабочей конфигурации, с которой система будет работать на большинстве аппаратных платформ и конфигураций. Вопрос лишь в том, чтобы грамотно задать конфигурацию ядра без ненужных и занимающих лишние ресурсы компонентов при его работе.

Итак, для успешного конфигурирования и компиляции ядра нужно выполнить следующие действия:

  • перейти в каталог с исходными кодами ядра. Обычно «исходники» для ядра Linux помещаются в каталог /usr/src, либо можно скачать с сайта kernel.org в любое удобное место;
  • выполнить команду make xconfig, make gconfig или make menuconfig;
  • выполнить команду make dep (можно не выполнять для ядер версии 2.6.x и более поздних);
  • выполнить команду make clean (для очистки от всего того, что может помешать успешной сборке);
  • выполнить команду make;
  • выполнить команду make modules_install;
  • скопировать файл /arch/имя_архитектуры/boot/bzImage в /boot/vmlinuz. Здесь каталог /arch находится в каталоге с исходными кодами ядра Linux, имя_архитектуры — каталог, имеющий имя соответствующей архитектуры (указанной на этапе конфигурирования). Имя собранного бинарного образа ядра bzImage может быть другим;
  • скопировать файл /arch/имя_архитектуры/boot/System.map в /boot/System.map;
  • внести изменения в конфигурационные файлы системных загрузчиков /etc/lilo.conf (для LILO) или /boot/grub/grub.conf — для GRUB, а также добавить в них соответствующие конфигурационные и параметры загрузки для нового ядра.

Далее остаётся протестировать загрузку и работу нового ядра. В случае проблем обычно подбираются нужные параметры для системных загрузчиков.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Конфигурирование ядра linux и повышение его производительности

Я использую версию ядра 2.2.17 поставляемую с дистрибутивом Mandrake, но основные принципы останутся теми же

Убедитесь, что у вас установлены исходники ядра и пакет заголовков:
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)
Все действия нужно выполнять под root’ом.

Затем нужно ввести одну из команд:
# make config
# make menuconfig
# make xconfig

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

Перед внесением изменений в файл конфигурации ядра, сохраните его под
другим именем — Save Configuration to an Alternative File

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

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

Processor type and features

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

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

Данная функция используется для оптимизации работы процессора. Если вы укажите тип процессора, например 486, 586, Pentium, PPro ядро не обязательно будет запускаться на более ранней архитектуре. Например, если вы укажите Pentium, ядро будет работать на PPro (хотя медленнее), но нет никакой гарантии, что оно запуститься на 486.

Следующие типы рекомендованы для получения наибольшей производительности:

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

В моем случае ядро было оптимизировано под 586/K5, после того
как я установил PPro Linux заработал быстрее. Я использую Intel Celeron 433A

Объем памяти — установите 1GB, если, конечно, у вас менее 1GB.

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

SMP (Symmetric multi-processing support)

Скорее всего у вас установлен один процессор и эту опцию вам нужно будет отключить — зачем включать лишний код в ядро?

Loadable module support

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

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

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

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

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

PCI bridge optimization (experimental)

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

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

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

Просто включите эту опцию. Более подробно вы можете прочитать на сайте metalab

BSD Process accounting

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

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

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

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

Parallel port support

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

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

Support foreign hardware

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

Advanced Power Management (APM) BIOS support

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

При возникновении проблем проверьте следующее:

  1. наличие достаточного количества свопа, а также убедитесь, что раздел подкачки включен
  2. передайте ядру инструкцию no-hlt
  3. попробуйте отключить поддержку сопроцессора (инструкция no387)
  4. передайте ядру инструкцию floppy-nodma
  5. убедитесь, что процессор не «разогнан»
  6. установите новый вентилятор для процессора

PnP support

Поддержка Plug and Play

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 дисков. Опцию можно отключить, только если вы не используете ATA-дисков.

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

Include IDE/ATAPI FLOPPY support

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

SCSI emulation support

Позволяет использовать SCSI-драйвер для ATAPI-устройств,
для которых нет родного драйвера.

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

Достичь увеличения производительности жесткого диска
можно также и с помощью команд:
# hdparm -c 1 /dev/hda

setting 32-bit I/O support flag to 1
I/O support =1 (32 bit)

# hdparm -d 1 /dev/hda

setting using_dma to 1 (on)
using_dma = 1 (on)

Первая из них включает 32-битный доступ к диску (если он еще не включен), а вторая — DMA.
Иногда вместо опции -c 1 нужно использовать -с 3. Подробнее можете узнать в hdparm(8) (команда man 8 hdparm)
После этих команд нужно запустить hdparm в режиме теста скорости
# hdparm -t /dev/hda
Если параметры вас устраивают, введите команду
# hdparm -k 1 /dev/hda
для сохранения изменений.

hdparm в режиме теста для моего жесткого диска до
Timing buffered disk reads: 64B in 10.92 seconds = 5.86MB/sec
после
Timing buffered disk reads: 64B in 7.52 seconds = 8.53MB/sec

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

Kernel/User netlink support

Просто включите эту опцию

Я рекомендую включить следующие опции

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: transperent 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 на рабочей станции не будет лишним.

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

Network device support

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

IrDA, USB support

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

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

Я рекомендую включить в ядро следующие системы:
Second ext fs (ext2), ISO 9660, MS Joliet CDROM extension, VFAT, /proc, /dev/pts
В виде модулей: MS DOS FAT, MINIX

Также неплохо было бы включить поддержку квотирования (в случае с сервером).

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

Теперь, когда все устройства сконфигурированы, нужно сохранить файл конфигурации ядра и перейти непосредственно к этапу
компилирования ядра.

Введите команду
# make dep

После завершения ее работы нужно ввести команду
# make bzImage

Если исходники ядра и компилятор установлены корректно примерно минут через 20 (это зависит от версии ядра и от быстродействия вашей системы), вы получите откомпилированное ядро.

Обычно оно помещается в каталог /usr/src/linux/arch/i386/boot

Теперь нужно откомпилировать модули, которые будут использоваться ядром
# make modules

И установить их
# make modules_install

Перед установкой модулей сделайте резервную копию модулей
старого ядра (каталог /lib/modules)

Теперь можно ввести команду
# make install
для установки только что созданного ядра, однако я не рекомендую этого делать — сначала нужно протестировать наше ядро.

Откройте в любом редакторе файл /etc/lilo.conf
# vi /etc/lilo.conf
Добавьте следующие строки

image=/usr/src/linux/arch/i386/boot/bzImage
label=my_linux
root=/dev/hda5
append=» mem=128M»
read-only

Естественно, укажите свою корневую файловую систему и объем оперативной памяти. Подробнее об использовании LILO вы можете прочитать в моей статье Использование LILO

Введите команду
# lilo

Теперь перезагрузите систему
# reboot

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

Источник

Читайте также:  Видеоплеер windows ce для автомагнитол
Оцените статью