Включения, исключения и расширения ядра FreeBSD

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

NOTES

Ядро FreeBSD включает в себя самые разнообразные функциональные возможности, которые не включены в GENERIC. Многие из этих возможностей предназначены для построения весьма специфических систем или сетей особого вида. Полный перечень особенностей, зависящих от аппаратного обеспечения, можно найти в файле NOTES, в каталоге с конфигурациями ядра для каждой из аппаратных архитектур, например /sys/amd64/conf/NOTES. Перечень особенностей, поддерживаемых системой FreeBSD и не зависящих от аппаратного окружения, можно найти в файле /sys/conf/NOTES. Если у вас имеется аппаратное устройство, которое не поддерживается ядром GENERIC, загляните в файл NOTES. Некоторые из перечисленных в этом файле особенностей имеют неясное назначение, но если у вас имеется определенное устройство, то вы сможете разобраться, какая запись ему соответствует. Давайте взглянем на типичную запись из файла NOTES:

#           CPU_SOEKRIS enables support www.soekrls.com hardware.

#            

options CPU_SOEKRIS

Soekris – это название производителя небольших систем для встраиваемых устройств. Об этих системах мы поговорим в главе 21 – они не настолько распространены, чтобы эта запись попала в GENERIC, но если у вас имеется одно из таких устройств, вы можете использовать параметр CPU_SOEKRIS, чтобы активировать особые функциональные возможности этого микропроцессора.

Если в файле NOTES перечислены все особенности для каждого из возможных устройств, почему бы не использовать его как основу для сборки собственного ядра? Во-первых, такое ядро расходовало бы больший объем памяти, чем ядро GENERIC. Несмотря на то, что даже небольшие современные компьютеры имеют достаточно памяти для запуска ядра GENERIC без каких-либо проблем, тем не менее, если ядро увеличится в размерах в десять раз без заметного увеличения функциональности, люди начнут недоумевать. Кроме того, многие параметры настройки являются взаимно исключающими. В файле NOTES можно отыскать параметры для микропроцессоров Athlon, Cyrix, IBM, параметры, предназначенные для учета некоторых особенностей различных версий плат, и т. д.

Включения и исключения

Механизм конфигурирования ядра FreeBSD обладает двумя интересными возможностями, которые способны упростить обслуживание ядра: ключевые слова с префиксом по и включения.

Возможность подключения позволяет добавить отдельный файл в конфигурацию ядра. Например, если имеется конфигурация ядра, которая описана как «GENERIC с парой дополнительных настроек», к ней можно было бы подключить конфигурацию GENERIC с помощью оператора include:

include GENERIC

Так, например, если необходимо собрать ядро, которое обладает функциональностью GENERIC, но кроме того поддерживает микропроцессор Soekris, можно было бы создать конфигурацию, составленную из следующих строк:

ident     MYKERNEL

include   GENERIC

options   CPU_S0 EKRIS

Вы можете подумать, что такой подход дает немного больше, чем простое копирование и редактирование файла GENERIC, и будете правы.

Какие преимущества дает такой подход? Дело в том, что по мере обновления FreeBSD конфигурация GENERIC может изменяться. Например, конфигурация GENERIC в версии FreeBSD 7.1 несколько отличается от той, что используется в версии 7.0. При рассматриваемом подходе ваша конфигурация будет корректной в обеих версиях Free- BSD и в обеих по праву может называться «GENERIC плюс дополнительные параметры».

Такой подход отлично подходит для случаев включения элементов конфигурации, но не годится для случая исключения элементов из ядра. Например, любые микропроцессоры Soekris используются в небольших системах, не имеющих карты SCSI или RAID. В этом случае можно было бы дополнить свою конфигурацию объявлениями nodevice, исключающими поддержку всех этих устройств. Запись nodevice отменяет ранее объявленное включение устройства. Аналогичным образом ключевое слово nooption запрещает активизацию указанного параметра.

Наглядным примером использования такой методики может служить конфигурация ядра РАЕ. РАЕ – это конфигурация, которая используется в системах i386 с объемом памяти более 4 Гбайт, о чем будет говориться ниже, в этой же главе. Многие устаревшие устройства не в состоянии работать на компьютерах с таким объемом памяти, поэтому они должны быть исключены из конфигурации. Неважно, насколько велики изменения, произошедшие в вашей системе FreeBSD в результате обновления, вы всегда точно будете знать, что ядро РАЕ – это «GENERIC плюс возможности РАЕ минус все драйверы, которые не способны работать в конфигурации РАЕ».

Как с помощью параметров ядра исправлять проблемы

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

Jun 9 16:23:17 ralph/kernel: pmap_collect: collecting pv entries —

suggest increasing PMAP_SHPGPERPROC

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

#           Set the number of PV entries per process. Increasing this can

#           stop panics related to heavy use of shared memory. However, that can

#           (combined with large amounts of physical memory) cause panics at

#           boot time due the kernel running out of VM space.

#           (Устанавливает количество записей (pv-entry) таблицы страниц

#           на один процесс. Увеличение этого числа может предотвратить неполадки,

#           связанные с нехваткой разделяемой памяти. Однако при большой емкости

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

#           из-за выхода за пределы пространства виртуальной памяти.)

#            

#           If you’re tweaking this, you might also want to increase the sysctls

#           "vm.v_free_min", "vm.v_f ree_reserved", and "vm.v_free_target".

#           (При настройке этого параметра надо также увеличить значения:

#           sysctls "vm.v_free_min", "vm.v_free_reserved" и "vm.v_free_target".)

#            

#           The value below is the one more than the default.

#           (Значение,приведенное ниже, на единицу превышает значение по умолчанию.)

#            

options PMAP_SHPGPERPR0C=201

Прочитав это объяснение, мы приступили к решению проблемы. Прежде всего, сохранили старое ядро в /boot/kernel.pmap-crash. Это было не самое лучшее ядро, но оно обеспечивало работоспособность системы хотя бы на несколько часов. Затем мы увеличили значение РМАР SHPGPER- PR0C до 400, а емкость оперативной памяти увеличили до 192 Мбайт. (Да, эта недорогая система обслуживала несколько сотен веб-страниц в секунду, имея в распоряжении 64 Мбайт оперативной памяти, один диск IDE и CPU Celeron 433!) После сборки нового ядра проблема была устранена, а период работоспособного состояния сервера достиг нескольких месяцев. В версии FreeBSD 7 данный параметр ядра можно настроить через sysctl, прямо во время работы системы, однако в ядре существует еще множество параметров, которые можно изменить только таким способом.

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

Распространение ядра

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

Прежде всего, создайте и установите одно ядро и тщательно протестируйте его. Затем заархивируйте /boot/kernel с помощью tar и скопируйте тарбол на остальные серверы. Сохраните текущее ядро на каждом из них и разархивируйте тарбол, чтобы установить новый файл /boot/kernel. Перезагрузитесь, и дело сделано!

Источник: ЛукасМ. FreeBSD. Подробное руководство, 2-е издание. – Пер. с англ. – СПб.: Символ- Плюс, 2009. – 864 е., ил.

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий