Сборка custom ядра


Содержание:


Зачем это нужно?

Причин для сборки custom ядра может быть много, но основные это:

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

Основная идея оптимизации ядра по размеру - удаление неиспользуемого кода. Это, прежде всего, неиспользуемые драйверы устройств и различные подсистемы. Для поиска используемых драйверов устройств можно использовать вывод dmesg(8), а также специализированные программы, например, dmassage.

Неиспользуемые подсистемы ядра отключаются удалением соответствующих опций, например, если не используется двоичная совместимость с исполняемыми файлами Linux, можно удалить опцию COMPAT_LINUX и т. д. Список всех опций приведен в руководстве options(4).

Основные опции (на примере архитектуры i386)

Ниже приведен список опций, без которых работа ОС будет осложнена или невозможна:

KVM86 Поддержка эмуляции виртуального режима 8086-совместимого процессора. Требуется для устройства piixpcib(4). Возможно будет также использоваться для разработки бэкенда для драйвера wsfb(4).
FIFO Поддержка именованных каналов, mkfifo(2).
SYSVMSG
SYSVSEM
SYSVSHM
Средства IPC из UNIX SystemV (очереди сообщений, семафоры, разделяемая память).
FFS,FFS2 Файловая система Berkeley Fast File System с поддержкой 2-ой версии.
INET Поддержка протоколов стека IPv4.
WSDISPLAY_COMPAT_USL
WSDISPLAY_DEFAULTSCREENS
Поддержка виртуальных экранов.

Остальные опции ядра включаются, если необходим соответствующий функционал.

Поддержка многопроцессорности для архитектуры i386

Для того чтобы собрать ядро с поддержкой SMP для архитектуры i386, необходимо добавить в конфигурацию ядра опцию MULTIPROCESSOR, поддержку I/O APIC и устройств для дополнительных процессоров:


option		MULTIPROCESSOR

cpu*		at mainbus?
ioapic*		at mainbus?

Поддержка расширенных возможностей архитектуры i386

За долгое время развития архитектура i386 процессора вобрала в себя множество различных возможностей. Некоторые фундаментальны, некоторые опциональны. Ряд опциональных возможностей архитектуры i386 в OpenBSD представлен отдельными опциями или устройствами.

USER_LDT Добавляет возможность процессам менять локальную таблицу дескрипторов (LDT). Обычно ядро OpenBSD полагается на глобальную таблицу дескрипторов (GDT) и отдельные процессы не могут менять LDT. Однако, в ряде случаев, необходимо иметь возможность изменять её. Чаще всего это связано с работой файлов и библиотек других систем, например использование эмулятора Wine или Win32 кодеков в mplayer. Возможность изменения LDT должна быть явно задана sysctl-флагом machdep.userldt.

Также поддерживаются два псевдо-устройства, связанные с дополнительными возможностями процессоров семейства i386. Прежде всего это поддержка регистров атрибутов областей памяти, mtrr(4), управляющих параметрами кэширования:

pseudo-device mtrr

Эти регистры используются X Window System и теоретически ускоряют работу с видео подсистемой.

Второе псевдо-устройство предоставляет доступ к "счетчикам производительности" процессоров Intel и к счетчикам времени TSC на других процессорах, pctr(4):

pseudo-device pctr

"Счетчики производительности" процессоров Intel поддерживают широкие возможности по наблюдению за прерываниями, кэшированием и др., в то время как счетчик времени содержит монотонно возрастающее 64-битное значение, обнуляемое при включении процессора или при естественном переполнении разрядной сетки.

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

Опции, используемые при отладке

Отладка ядра OpenBSD может выполняться в двух режимах: непосредственно после аварийного останова с использованием встроенного отладчика ddb(4) или отладка дампа памяти ядра в gdb(1) с использованием дополнительного ядра, содержащего отладочные символы. Возможно использование обоих методов. За возможность использования ddb отвечает опция DDB, для того чтобы отлаживать ядро по дампу памяти, необходимо соблюдение двух условий:

Для отладки пользовательских процессов удобно использовать ktrace(1) или gdb(1). Для этого необходимо включить опции KTRACE и PTRACE соответственно.

Важной является и опция BOOT_CONFIG, разрешающая изменение параметров ядра на этапе загрузки через User Kernel Config (UKC).

Статистика и диагностика

OpenBSD поддерживает ряд опций, связанных со сбором статистики и дополнительными проверками в коде ядра:

ACCOUNTING Поддержка сбора статистики работы системы по процессам (сюда входят данные по нагрузке на процессор, дисковую подсистему и так далее). Включение сбора статистики производится с помощью accton(8).
DIAGNOSTIC Включить дополнительные проверки в коде. Обычно это незначительные проверки, которые могут привести к kernel panic. Можно попробовать отключить данную опцию для достижения большей надежности системы, однако это может привести и к нежелательным последствиям.
KMEMSTATS Сбор статистики по использованию памяти. Может быть отключен, поскольку требует дополнительных затрат процессора и памяти.

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

Стеки протоколов IPv4 и IPv6

INET Поддержка стека протоколов IPv4. Во многих случаях опция необходима.
INET6 Поддержка стека протоколов IPv6. Требует IPv4. Если вы не работаете с IPv6, данную опцию можно отключить.
TCP_SACK Поддержка механизма выборочного подтверждения TCP сегментов (Selective Acknowledgements, RFC 2018). Позволяет повысить эффективность передачи TCP сегментов. TCP SACK должен поддерживаться сервером и клиентами.
TCP_ECN Поддержка явных уведомлений о перегрузках в сети (Explicit Congestion Notification, RFC 3168). Позволяет дополнительно регулировать скорость передачи TCP сегментов между двумя сторонами в следствии перегрузок в канале передачи. TCP ECN должен поддерживаться обоими сторонами.
TCP_SIGNATURE Поддержка подписи сегментов TCP с использованием MD5 хэш сумм (Protection of BGP Sessions via the TCP MD5 Signature Option, RFC 2385). Используется протоколом внешней маршрутизации BGP для установления подлиности отправителя. Возможность подписи сегментов TCP должна поддерживаться обоими сторонами. Требует наличия опции CRYPTO.
ALTQ Поддержка механизмов обеспечения качества обслуживания (Quality of Service, QoS). Включает в себя ряд дисциплин трафика: приоритетную, классовую и иерархическую. Управление очередями осуществляется посредством соответствующих правил pf(4).

Пакетный фильтр pf(4), работающий на межсетевом уровне (Internetworking) стека TCP/IP, поддерживает работу как с IPv4, так и с IPv6 в зависимости от конфигурации ядра. Поддержка pf(4) в ядре включается добавлением псевдо-устройства:

pseudo-device pf

Для того чтобы в правилах pf(4) можно было использовать директиву log, необходимо добавить поддержку псевдо-интерфейса pflog(4):

pseudo-device pflog

Синхронизация таблицы состояний соединений (connection state table) реализуется через интерфейс pfsync(4), поддержка которого в ядре реализуется через псевдо-устройство:

pseudo-device pfsync

На основе pfsync(4), построен протокол Common Address Redundancy Protocol (CARP), реализуемый в OpenBSD через псевдо-устройство carp(4):

pseudo-device carp

Криптография в ядре. Использование криптографии в сетевых протоколах

Криптография очень широко используется в ядре OpenBSD. В основу положено обобщенное OpenBSD Cryptographic Framework (OCF), которое включается в сборку при указании опции CRYPTO - это базис для всего кода, использующего криптографию в ядре.

Опция UVM_SWAP_ENCRYPT включает шифрование страниц памяти до попадания в swap. По результатам тестирования на это затрачивается сравнительно немного ресурсов, но для повышения быстродействия на слабых машинах, возможно, имеет смысл исключить эту опцию из файла конфигурации ядра. Отключить шифрование можно также через sysctl(8):

# sysctl vm.swapencrypt.enable=0

OpenBSD поддерживает ряд устройств, называемых крипто-акселераторами (hifn(4), ubsec(4) и др.), которые способны регистрировать в OCF поддерживаемые алгоритмы, и ядро в состоянии разгрузить работу по шифрованию на такие устройства. Доступ пользовательских программ (таких как OpenSSL) к этой подсистеме организуется через псевдо-устройство crypto(4):

pseudo-device crypto

Практика показывает, что использование подобных устройств способно реально повысить быстродействие только в определенных случаях. Узкими местами являются пропускная способность шины PCI и медлительность самих устройств, по сравнению с современными CPU. Крипто-акселераторы могут повысить быстродействие в тех случаях, когда используются медленные CPU, шина PCI разгружена, а также при больших блоках шифруемых данных и при определенных алгоритмах шифрования (чаще всего - блочных симметричных шифрах, например 3DES). Однако, весьма эффективными являются криптографические средства, встроенные непосредственно в CPU. Ярким примером является процессор VIA Eden-N, поддерживающий инструкции работы с блочным симметричным шифрованием AES.

Поддержка IPsec включается опцией IPSEC. Требуется поддержка IPv4 стека (опция INET), OCF (опция CRYPTO) и специализированного псевдо-интерфейса enc(4), позволяющего фильтровать пакеты до и после их обработки кодом IPsec:

pseudo-device enc

Средства криптографии также применяются в ряде сетевых протоколов. При использовании BGP маршрутизации очень часто используются подписанные TCP сегменты для обеспечения аутентификации источника сообщений. В OpenBSD это делается добавлением опции TCP_SIGNATURE (это требует включенных опций INET, CRYPTO, IPSEC).

Протоколы pfsync(4) и carp(4) также используют криптографическую подпись пакетов, поэтому нуждаются в поддержке OCF и зависят от ряда компонент IPsec.

Файловые системы

Основной файловой системой в OpenBSD является Berkeley Fast File System. Также поддерживаются FAT, NTFS, Linux Extended 2, ISO-9660, UDF и две сетевые файловые системы: NFS и XFS.

FFS,FFS2 Файловая система Berkeley Fast File System с поддержкой 2-ой версии.
FFS_SOFTUPDATES Поддержка SoftUpdates для FFS и FFS2. За счет системы буферизации заметно увеличивает скорость записи на диск.
UFS_DIRHASH Хеширование содержимого директорий, повышает скорость доступа к директориям с большим количеством файлов.
QUOTA Поддержка квот на файловых системах FFS и FFS2.
MFS Поддержка создания файловой системы в оперативной памяти, способной к переходу в свап.
MSDOSFS Поддержка FAT12, FAT16 и FAT32.
NTFS Поддержка NTFS4 (Windows NT 4.0) и NTFS5 (Windows 2000 и более поздние) в режиме только для чтения.
EXT2FS Поддержка Linux Extended 2 File System (и Extended 3 без журналирования) с размером inode равным 128. Для переформатирования следует использовать опцию -I 128 команды mkfs.ext2. Файловые системы ext3 рекомендуется монтировать только в режиме для чтения.
CD9660 Поддержка файловой системы ISO-9660, используемой на CD и DVD дисках (мультисессионные диски не поддерживаются).
UDF Поддержка файловой системы DVD. Некоторые DVD диски могут быть смонтированы как обычные CD.
NFSCLIENT
NFSSERVER
Поддержка сетевой файловой системы NFS в режимах клиента и сервера.
XFS Поддержка сетевой распределенной файловой системы Andrew FS (AFS).

Существуют и несколько виртуальных файловых систем: PROCFS и PORTAL. Однако, из-за архитектурных особенностей системы они являются необязательными. Файловая система PROCFS используется в основном с эмуляцией Linux, а поддержка PORTAL осталась со времен BSD UNIX и не несет в себе никакой смысловой нагрузки.

Совместимость с ранними версиями

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

COMPAT_43 Самая старая из опций совместимости. Отвечает за поддержку ряда устаревших ioctl'ей для терминальных устройств и других незначительных интерфейсов. На практике опция нужна только при использовании опции COMPAT_BSDOS.
COMPAT_O43 Опции совместимости с соответствующей версией OpenBSD. Они вводились, когда менялись интерфейсы ядра. Более подробно о том, для чего введены эти опции, написано в руководстве options(4).
COMPAT_AOUT Поддержка двоичных файлов, собранных для OpenBSD/i386 версий ниже 3.4 (т.е. двоичные файлы формата a.out). Возможно, будет необходимо также включить опции совместимости с предыдущими версиями OpenBSD. Эмуляция активизируется при включении опции kern.emul.aout.

Двоичная совместимость с другими системами

OpenBSD поддерживает эмуляцию системных вызовов для некоторых систем. Основным требованием является принадлежность двоичного файла и хостовой системе к одной архитектуре. Например, OpenBSD поддерживает исполняемые файлы от Solaris, но программы, оттранслированные для архитектуры SPARC, не загрузятся на i386-совместимом процессоре.

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

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

COMPAT_LINUX Поддержка запускаемых файлов ОС Linux. (Возможно, придется так же установить порт с библиотеками Linux системы, /usr/ports/emulators/redhat/). Эмуляция активизируется при включении kern.emul.linux. Подробную информацию можно получить из страницы руководства.
COMPAT_FREEBSD Поддержка запускаемых файлов ОС FreeBSD. (Существует порт, содержащий библиотеки FreeBSD, /usr/ports/emulators/freebsd_lib/). Эмуляция активизируется при включении kern.emul.freebsd. Подробную информацию можно получить из страницы руководства.
COMPAT_BSDOS
COMPAT_IBCS2
COMPAT_SVR4
Поддержка запускаемых файлов систем BSDI, Solaris, SCO и др. Подробную информацию можно найти в руководствах: compat_bsdos(8), compat_ibcs2(8), compat_svr4(8).

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

X Window System

Для корректной работы X Window System необходимы или желательны следующие опции (платформа i386):

APERTURE Драйвер апертуры ядра, позволяет X серверу получать прямой доступ к видео памяти и регистрам PCI устройств. Непосредственное разрешение использования апертуры ядра осуществляется через sysctl-переменную: machdep.allowaperture.
USER_PCICONF Предоставляет прикладным процессам (например, X серверу) возможность получения доступа к конфигурации PCI устройств.
WSDISPLAY_COMPAT_RAWKBD
WSDISPLAY_COMPAT_PCVT
Позволяет получить доступ к клавиатуре.

На архитектуре i386 система X Window System может использовать регистры атрибутов областей памяти, mtrr(4), управляющих параметрами кэширования. Использование этого механизма теоретически позволяет ускорить работу с видео подсистемой.


OpenBSD.ru www@openbsd.ru
$RuOBSD: howto-kernconf.html,v 1.43 2010/11/01 10:57:47 dinar Exp $
Hosted by uCoz