Содержание:
Причин для сборки custom ядра может быть много, но основные это:
Внимание: настройка custom ядра - это операция, предполагающая определенный уровень понимания своих действий и способная привести систему в нерабочее состояние. Данное руководство призвано прояснить некоторые детали и помочь в настройке ядра подготовленным пользователям.
Основная идея оптимизации ядра по размеру - удаление неиспользуемого кода. Это, прежде всего, неиспользуемые драйверы устройств и различные подсистемы. Для поиска используемых драйверов устройств можно использовать вывод dmesg(8), а также специализированные программы, например, dmassage.
Неиспользуемые подсистемы ядра отключаются удалением соответствующих
опций, например, если не используется двоичная совместимость с
исполняемыми файлами Linux, можно удалить опцию COMPAT_LINUX
и т. д. Список всех опций приведен в руководстве
options(4).
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
|
Поддержка виртуальных экранов. |
Остальные опции ядра включаются, если необходим соответствующий функционал.
Для того чтобы собрать ядро с поддержкой SMP для архитектуры i386, необходимо
добавить в конфигурацию ядра опцию MULTIPROCESSOR
,
поддержку
I/O APIC
и устройств для дополнительных процессоров:
option MULTIPROCESSOR cpu* at mainbus? ioapic* at mainbus?
За долгое время развития архитектура 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
,
для того чтобы отлаживать ядро по дампу памяти, необходимо соблюдение
двух условий:
makeoptions DEBUG="-g"
.
Для отладки пользовательских процессов удобно использовать
ktrace(1)
или
gdb(1).
Для этого необходимо включить опции KTRACE
и
PTRACE
соответственно.
Важной является и опция BOOT_CONFIG
, разрешающая
изменение параметров ядра на этапе загрузки через
User Kernel Config (UKC).
OpenBSD поддерживает ряд опций, связанных со сбором статистики и дополнительными проверками в коде ядра:
ACCOUNTING
|
Поддержка сбора статистики работы системы по процессам (сюда входят данные по нагрузке на процессор, дисковую подсистему и так далее). Включение сбора статистики производится с помощью accton(8). |
DIAGNOSTIC
|
Включить дополнительные проверки в коде. Обычно это незначительные проверки, которые могут привести к kernel panic. Можно попробовать отключить данную опцию для достижения большей надежности системы, однако это может привести и к нежелательным последствиям. |
KMEMSTATS
|
Сбор статистики по использованию памяти. Может быть отключен, поскольку требует дополнительных затрат процессора и памяти. |
Для достижения повышенной скорости работы эти опции могут быть почти безболезненно удалены из конфигурации ядра.
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 и др.
APERTURE
|
Драйвер апертуры ядра, позволяет X серверу получать прямой доступ к видео
памяти и регистрам PCI устройств. Непосредственное разрешение использования
апертуры ядра осуществляется через sysctl-переменную:
machdep.allowaperture .
|
USER_PCICONF
|
Предоставляет прикладным процессам (например, X серверу) возможность получения доступа к конфигурации PCI устройств. |
WSDISPLAY_COMPAT_RAWKBD WSDISPLAY_COMPAT_PCVT
|
Позволяет получить доступ к клавиатуре. |
На архитектуре i386 система X Window System может использовать регистры атрибутов областей памяти, mtrr(4), управляющих параметрами кэширования. Использование этого механизма теоретически позволяет ускорить работу с видео подсистемой.