Документация по ОС FreeBSD Воскресенье, 19.05.2024, 05:29
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Установка и настройка

Приоткрывая занавес ядра (Часть 1)

Историческая справка

 

Во времена ранних версий BSD пользователям, желавшим получить доступ к настройкам ядра или изменить его конфигурацию, приходилось прибегать к замысловатым приемам и техникам. Обычно для этого создавались небольшие вспомогательные утилиты, которые читали файл /dev/kmem (образ памяти ядра), находили в нем необходимые структуры данных и передавали их пользователю. Для изменения параметров применялся похожий прием с последующей записью информации по определенному адресу. Практика использования файла /dev/kmem как интерфейса конфигурирования ядра обнаружила множество недостатков такого подхода. Структуры данных могли как перемещаться в памяти, так и просто исчезать из нее. Поэтому всегда существовал риск того, что программа запишет данные в неверно выбранный участок памяти с последствиями в виде классического kernel panic. Процедура поиска значительно нагружала процессор, который в те годы и без того не мог похвастаться производительностью. Меры ограничения доступа к файлу /dev/kmem ослаблялись, так как администраторам приходилось считаться с потребностями программ-конфигураторов. И конце концов, все это крепко пахло грязным хаком, который был совершенно несвойственен элегантному UNIX.

В какой-то момент все эти проблемы настолько надоели пользователям, что разработчики решили добавить в ядро специальную функцию, с помощью которой любая программа, имеющая на то право, могла прочитать или изменить настройки ядра. Так в 4.4BSD появился интерфейс sysctl, который впоследствии был унаследован всеми ее потомками.

 

Реализация

 

Все настройки ядра хранятся в специальных переменных, организованных в древовидную структуру, называемую MIB (Management Information Base), а совокупность всех переменных именуется состоянием ядра. Структура MIB очень напоминает древовидную организацию файлов и каталогов в файловой системе. Каждая ветвь такого дерева ссылается на определенную тематическую область конфигурации ядра (сведения об ОС, безопасность, подсистема виртуальной памяти, подсистема ввода-вывода и т.д.), позволяя легко найти нужную переменную. При этом ветви могут быть многократно вложены, разбивая разделы на подразделы.

Не все переменные доступны для записи, так же как не все переменные служат для настройки ядра. Многие из них используются для получения сведений о ядре и операционной системе. Другие предназначены для получения различной статистики, третьи — для наблюдения за состоянием ядра. Специальный раздел отведен для информации о железной составляющей ПК: ISA- и PCI-устройства, жесткие диски, ACPI. Многие переменные привязаны к определенной подсистеме или механизму ядра, и в случае отсутствия одного из его компонентов, структура MIB будет неполной. Так, например, если ядро собрано без поддержки пакетного фильтра ipfw, все запросы к переменным ветви net.inet.ip.fw приведут к сообщению об ошибке.

В FreeBSD версии 6.1 доступно более тысячи переменных, разбитых на 12 основных разделов.

 

Корневые ветви дерева MIB

kern — основные настройки ядра;

vm — подсистема виртуальной памяти;

vfs — подсистема VFS;

net — стек сетевых протоколов;

debug — отладочная информация;

hw — настройки аппаратного обеспечения;

machdep — настройки, зависящие от аппаратной платформы;

user — ограничения пользователей;

p1003_1b — совместимость со стандартом POSIX 1003.1b;

compat — совместимость с другими операционными системами;

security – безопасность;

dev — информация об аппаратных устройствах.

 

Начинаем

 

Специально для манипуляции переменными ядра в BSD была введена специальная утилита /sbin/sysctl. С ее помощью можно просмотреть список доступных переменных, узнать и изменить их значение, а также получить описание переменной. Так, для получения значения переменной используется команда «sysctl путь.до.переменной», для записи нового значения – «sysctlпуть.до.переменной=значение». Для получения списка переменных можно использовать флаг -a, а чтобы узнать описание переменной — флаг -d.

Кроме того, предусмотрен специальный конфигурационный файл /etc/sysctl.conf, куда следует вносить переменные, значения которых должны быть изменены во время инициализации системы. Замечу, что некоторые переменные не могут быть изменены во время работы ядра (в основном это переменные раздела hw), их необходимо поместить в файл /boot/loader.conf, который читается еще до загрузки ядра.

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

 

Основные настройки ядра

 

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

 

Основные настройки ядра Free BSD

Информация о ядре (только для чтения):

kern.ostype — тип ОС, всегда FreeBSD;

kern.osrelease — версия, например 6.1-RELEASE;

kern.osreldate — дата выхода данной версии;

kern.osrevision — время ревизии ОС;

kern.version — тип ОС, ее версия и время последней сборки;

kern.posix1version — с какой версией POSIX.1 совместима ОС;

kern.ident — идентификатор ядра; строка, указанная в конфиге ядра после директивы ident;

kern.boottime — время последней загрузки ядра.

 

Инициализация ядра (могут быть изменены через

/boot/loader.conf):

kern.bootfile — путь до ядра (директива bootfile);

kern.module_path — путь до каталога с модулями (директива module_path);

kern.init_path — путь до программы init (директива init_path).

 

Сетевое имя:

kern.hostname — сетевое DNS-имя машины;

kern.domainname — домен службы NIS.

 

Ограничения:

kern.maxproc — максимально допустимое число процессов;

kern.maxfiles — максимально допустимое число открытых файлов;

kern.maxfilesperproc — максимальное число открытых файлов на каждый процесс;

kern.maxusers — максимально допустимое число зарегистрированных пользователей в системе.

 

Другое:

kern.disks — список доступных жестких исков (ro).

kern.malloc — список буферов, динамически выделяемых ядром для собственных нужд, и их размер.

kern.coredump — включить/выключить создание ore-файлов при крахе программы. а домашней машине лучше указать .

kern.corefile — место, куда складывать ore-файлы. По умолчанию core-файлы опадают в текущий каталог. Возможным решением будет строка «/tmp/%U.%N.core».

kern.sched.name — используемый планировщик процессов (ro).

kern.sched.quantum — квант времени в микросекундах, выделяемый на каждый процесс. Для лучшей отзывчивости программ значение можно поднять до 250000. На серверах рекомендуется ставить значение по умолчанию 100000).

kern.sched.preemption — при необходимости позволить ядру вытеснять работающий процесс. Повысит отзывчивость системы.

 

SMP:

kern.smp.maxcpus — максимальное число процессоров, поддерживаемых ядром. Задается при сборке ядра.

kern.smp.active — число активных процессоров найденных ядром и готовых к выполнению задачи).

kern.smp.disabled — число отключенных процессоров.

kern.smp.cpus — число задействованных в данный момент процессоров.

 

Несколько ремарок. По умолчанию переменная kern.module_path содержит строку «/boot/kernel;/boot/modules». Первый каталог для модулей, поставляемых с ядром, второй — для модулей сторонних разработчиков. Модифицировать значения переменных kern.max* в большинстве случаев не имеет смысла, потому как времена, когда эти значения были вшиты в ядро, прошли. Сегодня FreeBSD способна сама определять оптимальные величины и не требует от пользователя бессмысленных вычислений. Единственным случаем, когда все-таки может понадобиться увеличение числа открытых файлов, является нагруженный веб-сервер или любая другая программа, работающая с множеством файлов. Для вычисления оптимального значения можно обратиться к переменной kern.openfiles, которая содержит текущее число открытых файлов.
 
Категория: Установка и настройка | Добавил: oleg (21.11.2007)
Просмотров: 1151 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0
links

Copyright MyCorp © 2024