Перейти к основному содержимому

Конфигурация ядра Linux

Меню для настройки ядра выглядит следующим образом:

Меню настройки ядра
Внимание !!!

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

General setup

Compile also drivers which will not load

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

Compile the kernel with warnings as errors

Сборка ядра не должна вызывать никаких предупреждений компилятора, и это позволяет использовать флаги '-Werror' (для C) для обеспечения соблюдения этого правила по умолчанию. Некоторые предупреждения от других инструментов, таких как компоновщик, также могут быть преобразованы в ошибки с помощью этой опции.

Local version - append to kernel release

Добавьте дополнительную строку в конец версии ядра. Она отобразится, например, при вводе команды uname. Заданная здесь строка будет добавлена ​​после содержимого любых файлов с именем, совпадающим с localversion в вашем объектном и исходном дереве, в указанном порядке. Общая длина строки не должна превышать 64 символа.

Automatically append version information to the version string

Это позволит автоматически определить, является ли текущее дерево репозиторием релиза, путем поиска git-тегов, принадлежащих текущей вершине ревизии дерева. Если будет найдено дерево на основе Git, к localversion будет добавлена ​​строка в формате -gxxxxxxxx. Сгенерированная таким образом строка будет добавлена ​​после любых соответствующих файлов localversion* и после значения, установленного в LOCALVERSION .

Фактически используемая здесь строка — это первые 12 символов, полученные в результате выполнения команды: git rev-parse --verify HEAD

Build ID Salt

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

Default init path

Этот параметр определяет путь инициализации по умолчанию для системы, если параметр init= не указан в командной строке ядра. Если запрошенный путь отсутствует, мы все равно перейдем к попыткам поиска в других местах (например, /sbin/init и т. д.). Если этот список пуст, мы просто будем использовать резервный список, если параметр init= не указан.

Default hostname

Этот параметр определяет имя хоста системы по умолчанию перед вызовом sethostname() в пользовательском пространстве. Ядро традиционно использует здесь "(none)", но вы можете использовать другое значение по умолчанию, чтобы сделать минимальную систему более удобной в использовании с меньшим количеством настроек.

System V IPC

Интерфейс межпроцессного взаимодействия System V IPC позволяет манипулировать классическими набором объектов, таких как: очередь сообщений, семафор и разделяемая память. По умолчанию включен

POSIX Message Queues

Очереди сообщений POSIX позволяют процессам обмениваться данными в виде сообщений. Этот API отличается от API, предоставляемого очередями сообщений System V ( msgget (2), msgsnd (2), msgrcv (2) и т. д.), но предоставляет аналогичную функциональность. По умолчанию включен

Genegal notification queue

Это общая очередь уведомлений для ядра, позволяющая передавать события в пользовательское пространство путем их обработки в каналах связи. Ее можно использовать совместно с механизмами отслеживания изменений (watch) для уведомлений об изменении key/keyring и уведомлений об устройствах.

Enable process_vm_readv/writev syscalls

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

uselib syscall (for libc5 and earlier)

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

Auditting support

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

IRQ subsystem

Подсистема прерываний

expose irq internals in debugfs

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

Timers subsystem

Подсистема таймеров

Timer tick handling

Periodic timer ticks (constant rate, no dynticks)

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

Idle dynticks system (tickless idle)

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

Full dynticks system (tickless)

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

Old Idle dynticks config

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

Hight Resolution Timer Support

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

BPF subsystem

BPF подсистема

Enable bpf system call

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

Enable BPF Just In Time compiler

Программы на языке BPF обычно обрабатываются интерпретатором BPF. Эта опция позволяет ядру генерировать собственный код при загрузке программы. Это значительно ускорит обработку программ на языке BPF. Обратите внимание, что администратор должен включить эту функцию, изменив следующие параметры: /proc/sys/net/core/bpf_jit_enable /proc/sys/net/core/bpf_jit_harden (необязательно) /proc/sys/net/core/bpf_jit_kallsyms (необязательно)

Permanently enable bpf jit and remove bpf interpreter

Включает JIT-компиляцию BPF и удаляет интерпретатор BPF, чтобы избежать спекулятивного выполнения инструкций BPF интерпретатором. Когда параметр BPF_JIT_ALWAYS_ON включен, значение /proc/sys/net/core/bpf_jit_enable постоянно устанавливается равным 1, и установка любого другого значения приведет к ошибке.

Disable unprivileged bpf by default

По умолчанию отключает непривилегированный BPF, установив соответствующий параметр /proc/sys/kernel/unprivileged_bpf_disabled в значение 2. Администратор может повторно включить его, установив значение 0 позже, или навсегда отключить, установив значение 1 (после чего переход к значению 0 становится невозможным). Использование BPF без привилегий может привести к эксплуатации потенциальных уязвимостей, связанных с побочными каналами спекулятивного выполнения, на неустраненном уязвимом оборудовании. По умолчанию включен

Preload BPF file system with kernel specific program and map iterators

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

Enable BPF LSM Instrumentation

Позволяет интегрировать механизмы безопасности с программами BPF для реализации динамических политик MAC и аудита.

Preemption Model

No Forced Preemption (server)

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

Voluntary Kernel Preemption (Desktop)

Уменьшает задержку ядра за счет добавления большего количества «явных точек прерывания» в код ядра [. . . ] ценой немного более низкой пропускной способности . В дополнение к явным точкам вытеснения, возвраты системных вызовов и прерываний являются неявными точками вытеснения.

Preemptible Kernel (Low-Latency Desktop)

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

Preemption behaviour defined on boot

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

Core Scheduling for SMT

Эта опция включает в себя планирование основных задач (Core Scheduling), позволяющее скоординированно выбирать задачи между соседними узлами SMT. При включении этой опции (см. prctl(PR_SCHED_CORE)) выбор задач гарантирует, что все соседние узлы SMT будут выполнять задачу из одной и той же «группы основных задач», переводя узел в состояние ожидания, если соответствующая задача не найдена. Использование этой функции включает в себя: - подавление некоторых (но не всех) побочных каналов SMT; - ограничение помех SMT для повышения детерминированности и/или производительности. Параметр SCHED_CORE по умолчанию отключен. Если он включен, но не используется, что, вероятно, и происходит в дистрибутивах Linux, это не должно оказывать заметного влияния на производительность.

CPU/Task time and stats accounting

Cputume accounting

  • Simple tick based cputime accounting

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

  • Full dynticks CPU time accounting механизм в операционной системе Linux, который позволяет учитывать время работы процессора (CPU) в системах с режимом full dynticks (также известен как NO_HZ). Этот режим отключает периодические таймерные прерывания (tick) там, где они не нужны, и позволяет учитывать время, проведённое процессором в разных контекстах.

Fine granularity task level IRQ time accounting

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

BSD Process Accounting

При выборе этого пункта программа пользовательского уровня сможет дать ядру (с помощью специального системного вызова) указание записывать информацию об учете процессов в файл: всякий раз, когда процесс завершается, ядро ​​будет добавлять в файл информацию об этом процессе. Эта информация включает в себя такие данные, как время создания, пользователь-владелец, имя команды, использование памяти, управляющий терминал и т. д. (полный список находится в структуре acct в include/linux/acct.h ). Задача программы пользовательского уровня — использовать эту информацию для полезных действий. В целом, это хорошая идея. По умолчанию включен

BSD Process Accounting level 3 format file

Если вы выберете этот пункт, то информация об учете процессов будет записана в новом формате файла, который также содержит идентификаторы каждого процесса и его родительского процесса. Обратите внимание, что этот формат файла несовместим с предыдущими форматами файлов v0/v1/v2, поэтому вам потребуются обновленные инструменты для его обработки. По умолчанию включен

Экспортируйте выбранную статистику для задач/процессов через универсальный интерфейс netlink. В отличие от учета процессов BSD, статистика доступна на протяжении всего жизненного цикла задач/процессов в качестве ответов на команды. Как и в случае с учетом процессов BSD, она отправляется в пользовательское пространство при завершении задачи.

Enable per-task delay accounting

Собирайте информацию о времени, затраченном задачей на ожидание системных ресурсов, таких как процессор, завершение синхронного блочного ввода-вывода и подкачка страниц. Такая статистика может помочь в установлении приоритетов задачи относительно других задач с учетом ограничений процессора, ввода-вывода, RSS и т. д.

Platform selection

Kernel Features

Boot options

Power management options

CPU Power Management

ACPI (Advanced Configuration and Power Interface) Support