Что такое параметры ядра линукс

Конфигурирование и компиляция ядра 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.

Источник

Что такое sysctl

Оглавление

Ядро Linux и его настройка

Ядро Linux — это основа операционной системы. В стандартных сборках Линукс, таких как Ubuntu, Debian, CentOS и т.д., нам не нужно самим собирать ядро ОС, это уже сделано разработчиками данных дистрибутивов. Однако, если у вас появилась необходимость собрать наиболее свежую версию ядра или сформировать свой собственный дистрибутив ОС Линукс, то перед вами встанет задача «как собрать ядро вручную». На этом этапе можно заложить в ядро такие базовые настройки ОС, которые именно вам будут нужны для работы.

Еще одна задача, с которой может столкнуться в своей работе начинающий системный администратор — это настройка ядра системы прямо в ходе работы, т.е. «на лету». Не все специалисты пользуются этими возможностями, некоторые предпочитают выполнить базовые настройки операционной системы, а затем настраивать уже сами приложения. Конечно же, с помощью таких изменений переменных параметров ядра «в ходе работы ОС», администратор не подключит какие-то драйвера новых устройств или новые модули, которые не поддерживаются данной системой, однако можно настроить сетевой стек, сделать оптимальные «установки под себя» параметров процессора, памяти, самого ядра ОС и т.д.

Все это можно выполнить, научившись работать с утилитой sysctl, которая применяется в FreeBSD и Linux. Если системный инженер подойдет грамотно к настройкам ядра с помощью sysctl (а не просто найдет типовые команды из мануалов на сайтах), то возможно будет достичь оптимальных результатов работы системы. Например, таким образом настраивают высоконагруженные серверные ОС или даже выстраивают грамотную защиту от DDoS атак.

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

Как работать с sysctl

Для начала работы нам необходимо вывести на экран все доступные опции, делается с помощью команды:

Просмотреть все параметры sysctl может любой пользователь Linux (в нашем примере показываем на Ubuntu 20), а вот изменять параметры ядра может только пользователь с правами root.

Также можно посмотреть значение одного параметра, который вас интересует в конкретный момент, например*:

*Примечание: данная команда разрешает или запрещает маршрутизацию пакетов.

Надо отметить, что если значение параметра равно 0, то функция запрещена, а если равно 1, то разрешена.

Для вывода списка сразу всех переменных, которые начинаются, к примеру с vm, наберите в терминале команду:

Ниже разъясним основные опции команды sysctl:

man sysctl — выводит подробную документацию по данной команде;

sysctl -n — выведет на экран только значения переменных;

sysctl -N — покажет вам только названия переменных, без их значений;

sysctl -A — показывает все доступные настройки ядра, но в табличной форме;

sysctl -w «переменная»=»значение» — используется для изменения значения переменной;

sysctl -p — выводит на экран настройки из файла /etc/sysctl.conf (или другого указанного файла настроек).

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

Например, попробуем разрешить маршрутизацию пакетов, выполнив команду:

Если мы просто применим команду без опции -w, то сделанные изменения не сохранятся после перезагрузки ОС:

Как правило, все показанные нами переменные параметров ядра Линукс, хранятся в конфигурационном файле /etc/sysctl.conf.

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

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

Для начала, можно поэкспериментировать с настройками ядра в «ручном режиме» с помощью выполнения данных команд в терминале. Если сделанные вами настройки — «рабочие» и помогают в оптимизации работы ядра вашей ОС, то можете их внести на постоянной основе в файл /etc/sysctl.conf.

Виртуальная файловая система /proc

Существует еще один интересный способ для настройки параметров ядра Linux — это работа с директорией /proc/sys. Здесь мы используем команду echo для изменения значений параметров настроек ядра Линукс, а для вывода на экран этих значений используем cat.

Ниже покажем на простых примерах, как это можно сделать на практике (по аналогии с командами sysctl). Итак, выведем на экран значение параметра net.ipv4.ip_forward данным способом (на скриншоте ниже показано, как вывести значение данного параметра двумя способами):

Для изменения значения данного параметра с 0 на 1, выполним команду*:

*Изменения, сделанные таким способом, будут работать до первой перезагрузки ОС.

На скриншоте ниже показано, как вывести на экран и другие параметры настроек ядра Ubuntu, к слову, мы предоставляем VPS хостинг под эту операционную систему:

Примеры некоторых параметров ядра Linux

Приведем некоторые наиболее важные и часто используемые переменные ядра Линукс и расскажем, что они означают и как их настроить:

    fs.file-max — показывает максимальное значение для дескрипторов файлов, создаваемых и обрабатываемых ядром Линукс. «По умолчанию» устанавливается число, равное 10% оперативной памяти компьютера.

  • fs.aio-nr — обозначает заданное число операций ввода и вывода для файловой системы.
  • cad_pid — указывает идентификационный номер процесса (PID), который присваивается сигналу, при нажатии Ctrl+Alt+Del.
  • kernel.ctrl-alt-del — параметр, отвечающий за правильную перезагрузку по комбинации клавиш Ctrl+Alt+Del (связан с параметром cad_pid). При значении 0, ОС передает сигнал процессу, назначенному в cad_pid, если значение параметра больше 0, то ОС выполняет перезагрузку немедленно.
  • kernel.hostname — параметр позволяет произвести изменение имени вашего компьютера «на лету» (без процесса перезагрузки).
  • kernel.modules_disabled — выключает загрузку модулей ядра.
  • kernel.panic — выставлено количество секунд, оставшихся до начала процесса перезагрузки (после случая ошибки в ядре).
  • kernel.randomize_va_space — важный параметр, обеспечивающий безопасность вашей ОС, (служит против атак на переполнение буфера), включен «по умолчанию»
  • kernel.sysrq — включает все функции (значение 1) или отключает (значение 0) для управления ядром при помощи SysRQ.
  • abi.vsyscall32 — параметр, разрешающий (при его значении 1) исполнение 32-разрядных программ в 64-разрядной ОС.
  • debug.exception-trace — служит для вывода значений регистров процессора, стека вызова процедур в случае ошибки в ядре. Установлен во включенном «по умолчанию» состоянии.
  • dev.cdrom.autoclose — параметр предназначен для управления CDROM, при попытке его монтирования, может его автоматически закрыть (отключен «по умолчанию»).
  • net.ipv4.ip_forward — данная настройка применяется для роутеров, она разрешает или запрещает маршрутизацию пакетов.
  • net.ipv4.ip_local_port_range — определяет диапазон локальных портов, разрешенных для использования вашими программами.
  • net.ipv4.tcp_rmem — указывает объем памяти, которая выделена для работы TCP.
  • vm.laptop_mode — данный параметр будет полезен для работы ноутбуков, в частности, для экономии заряда батареи. Эта настройка позволяет хранить данные какое-то время в оперативной памяти компьютера (а не сразу записывать их на винчестер).
  • vm.swappiness — этот параметр служит для установки % свободной памяти, при достижении этого значения, данные будут автоматически переводиться в swap. «По умолчанию» в Ubuntu установлено значение этого параметра, равное 60. Т.е. ОС будет переносить в раздел swap такие разделы памяти, которые были не использованы в течении длительного промежутка времени.
  • Выше, мы привели только некоторые переменные настроек ядра Linux, для применения всех возможных параметров, рекомендуем изучать документацию на вашу ОС. Например, работая с переменными типа net. можно выставить оптимальные сетевые настройки для вашей операционной системы.

    Заключение

    В этой статье мы осветили достаточно актуальную тему для системного администратора, как настроить ядро ОС Linux «на лету» с помощью sysctl и виртуальной файловой системы /proc. Не каждый специалист знаком с методами гибкой настройки ядра ОС, поэтому, прежде чем применять «любые настройки из Интернета», необходимо глубоко изучить данный вопрос, посмотреть параметры конкретной ОС, поэкспериментировать с различными значениями переменных (не сохраняя их) и уже затем, получив положительный результат — применять эти методы на постоянной основе. Потому что, не всегда «настройки из мануалов в Интернете» подходят всем подряд пользователям Линукс, и любые изменения настроек ядра системы надо выполнять крайне осторожно.

    Источник

    Читайте также:  Windows server cluster service
    Оцените статью