sysctl

Программа (8) позволяет взглянуть на параметры ядра и в некоторых случаях установить их значения. Запутаем дело: иногда эти параметры тоже называются s. Sysctl – это мощный инструмент, поскольку во многих случаях он позволяет увеличивать производительность без повторной сборки ядра или переконфигурирования приложения. К сожалению, это палка о двух концах – таким образом можно нарушить работу программ и сделать пользователей очень несчастными.

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

# -А > .out

После выполнения этой команды файл .out будет содержать сотни параметров настройки ядра и их значений. Большая их часть пока неясна, но некоторые понять нетрудно:

kern.hostname: humvee.blackhelicopters.org

Этот параметр , называемый kern. hostname, имеет значение humvee. blackhelicopters. org. Система, на которой я запустил эту команду, называется humvee.blackhelicopters.org. По названию этого параметра ядра нетрудно догадаться, что он хранит имя компьютера. Если бы все было так просто…

kerri. ipc. msqids : Format: Length : 3520

Dump:0xe903e903e903e903c0010100168f7542…

Я понятия не имею, какую роль играет переменная kern. ipc. msqids, и еще меньше понимаю смысл ее значения. Все же, если у меня возникают трудности, я могу получить нужную информацию, обратившись за помощью к поставщику системы или в почтовую рассылку.

Организация

Параметры настройки ядра организованы по древовидной схеме, которая называется базой управляющей информации (Management Information Base, MIB). В ней есть несколько основных категорий, таких как net (network – сеть), vm (virtual memory – виртуальная память) и kern (kernel – ядро). В табл. 5.1 перечислены корневые элементы дерева MIB , присутствующие в системе, работающей на базе ядра GENERIC.

Таблица 5.1. Корни дерева MIB

Sysctl

Назначение

kern

Основные функции ядра

vm

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

vfs

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

net

Сетевые функции

debug

Отладочная информация

hw

Информация об аппаратных средствах

user

Информация об интерфейсах пространства пользователя

p1003_1b

Параметры, управляющие характеристиками POSIXa

compat

Совместимость ядра с программным обеспечением других операционных систем (глава 12)

security

Параметры обеспечения безопасности

dev

Информация драйверов устройств

а POSIX – это международный стандарт, описывающий характеристики и возможности UNIX-подобных операционных систем. К сожалению, стандарт POSIX сильно изменился за последние годы, причем эти изменения иногда настолько непоследовательны, что системы, соответствующие требованиям одной версии POSIX, могут оказаться несовместимы с другими версиями стандарта. Если вы хорошо знакомы со стандартом POSIX, вы наверняка знаете, что это за различия. С помощью параметров вы сможете точно узнать о поведении FreeBSD и какой версии стандарта она соответствует.

Каждая категория, в свою очередь, подразделяется на подгруппы; например, категория net, охватывающая все сетевые s, разделена на категории IP, ICMP, TCP и UDP. Термины MIB и часто употребляются попеременно. Концепция, лежащая в основе базы управляющей информации (MIB), используется и в других частях операционной системы, в чем вы сможете убедиться в главе 20 и на протяжении всей своей карьеры. Термины MIB и часто употребляются попеременно. Уникальные имена переменных создаются из комбинации названия родительской категории и всех вложенных подкатегорий, например:

kern.maxfilesperproc: 11095 kern.maxprocperuid: 5547 kern.ipc.maxsockbuf: 262144 kern.ipc.sockbuf_waste_factor: 8 kern.ipc.somaxconn: 128

Здесь представлены пять параметров , извлеченные из категории kern. Первые два входят непосредственно в категорию kern, и с другими значениями их связывает лишь тот факт, что все они имеют отношение к ядру. Имена остальных трех параметров начинаются с kern. ipc – они являются частью раздела IPC (inter-process communication – взаимодействие между процессами). Если продолжить рассмотрение сохраненного ранее файла со списком параметров , можно заметить, что ветвление дерева s может продолжаться на нескольких уровнях.

Значения параметров

Каждый MIB имеет значение, которое связано с неким буфером, настройками или особенностями, используемыми ядром. Изменение этого значения повлечет за собой изменение в характере работы ядра. Например, некоторые параметры настройки ядра управляют выделением памяти для каждого сетевого соединения. Если сетевая производительность низка, можно увеличить объем системных ресурсов, резервируемых для сетевых соединений.

Каждый параметр может представлять собой строку (string), целое число (integer), двоичное значение (binary value) либо неясный код (opaque). String – это текст свободного формата с произвольной длиной; integer – обыкновенное целое число; binary value – либо 0 (off), либо 1 (on); значение opaque представлено в машинном коде, который могут интерпретировать только специальные программы. Многие параметры настройки ядра недостаточно документированы. Нет отдельного документа, в котором перечислены все имеющиеся базы управляющей информации ( MIB) и их назначение. Но описание каждого параметра присутствует на странице руководства к соответствующей функции, а иногда- только в исходных текстах. Например, исходная документация для MIB kern, securelevel (более подробно рассматривается в главе 7) представлена в init(8). Хотя за последние несколько лет объем документации по существенно вырос, тем не менее многие параметры по-прежнему вообще не имеют документации. В приложении А приведен список распространенных параметров настройки ядра и описано их назначение.

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

kern.bootfile: /boot/kernel/kernel

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

Просмотр параметров

Чтобы увидеть поддерево MIB, доступных в отдельном поддереве MIB, можно воспользоваться командой , передав имя поддерева, которое следует вывести. Например, чтобы увидеть все параметры в дереве, таком как kern, введите такую команду:

#           kern

kern.ostype: FreeBSD

kern.osrelease: 7.0-CURRENT-SNAP010

kern.osrevision: 199506

Этот список может быть длинным. Он может пригодиться, когда необходимо выяснить, какие параметры представлены в ядре. Чтобы получить только значение отдельного параметра настройки ядра, задайте имя MIB как аргумент:

#           kern.securelevel

kern.securelevel: -1

В этом случае kern, securelevel имеет целочисленное значение -1. Смысл этого значения обсуждается в главе 7.

Чтобы получить хоть какое-то представление о назначении того или иного параметра , можно использовать ключ -d вместе с полным именем MIB. В результате будет выведено краткое описание параметра:

#           -d kern.maxfilesperproc

kern.maxfilesperproc: Maximum files allowed open per process

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

Изменение параметров

Некоторые параметры предназначены только для чтения. Рассмотрим MIB-дерево hw:

hw.model: AMD Athlon(tm) 64 X2 Dual Core Processor 4200+

Разработчики FreeBSD еще не до конца разработали технологию переноса системы с AMD на аппаратные средства sparc64 с помощью программных настроек, поэтому данный параметр доступен только для чтения и его изменение может привести лишь к неработоспособности системы. Вот почему во FreeBSD такие параметры MIB доступны только для чтения. Попытки изменить их ничего не нарушат, однако будет выдано предупреждение о том, что сделать это нельзя. Но есть MIB, значения которых изменять можно. Рассмотрим следующий MIB:

vfs.usermount: О

Его значение определяет, могут ли пользователи монтировать сменные носители, такие как CD или дискету. Изменение этого параметра не требует внесения обширных изменений в ядро или в аппаратное окружение, он всего лишь разрешает или запрещает функцию в ядре. Чтобы изменить значение параметра, следует вызвать команду (8), передать ей имя параметра, знак «равно» (=) и желаемое значение:

# vfs.usermount=1

vfs.usermount: 0 -> 1

Команда (8) возвращает сообщение, в котором показаны предыдущее и новое значения. После этого параметр будет изменен. Параметры , которые подстраиваются «на лету», называются , настраиваемые на этапе выполнения (run-time tunable ).

Автоматическая настройка параметров

Когда будут выполнены все необходимые настройки параметров ядра, было бы желательно, чтобы они автоматически устанавливались после перезагрузки. Для этих целей используется файл / etc / .conf. Просто перечислите в этом файле все желаемые параметры с необходимыми значениями. Например, чтобы установить тот же самый параметр vfs. usermount на этапе загрузки, достаточно добавить в /etc/.conf следующую строку:

vfs.usermount=1

Параметры , устанавливаемые на этапе загрузки

Некоторые этапы конфигурирования ядра должны предшествовать загрузке системы. Можно найти множество примеров параметров, значения которых должны определяться на этапе загрузки. Часто эти параметры связаны с низкоуровневой настройкой аппаратных устройств. Например, во время первоначального опроса ядром жесткого диска IDE драйвер устройства определяет, следует ли использовать DMA, РЮ, кэширование записи или какие-либо другие особенности, характерные для жестких дисков. Это решение должно приниматься при обнаружении устройства, на этапе начальной загрузки, после чего решение изменить нельзя. Эти значения можно установить с помощью системного загрузчика (system loader), определив необходимые настройки в файле /boot/loader.conf, как уже говорилось в главе 3.

Настройки в loader.conf, как и в .conf, при неумелом использовании могут доставить компьютеру неприятности. Но нет причин для расстройства, потому что эти значения легко можно сбросить.

Слишком много настроек?

Не путайте между собой параметры , значения которых могут устанавливаться только на этапе загрузки, параметры, которые могут изменяться в процессе работы системы, и параметры, которые могут изменяться в процессе работы, но настроены для автоматической установки на этапе загрузки. Запомните, что настройки, выполняемые только на этапе загрузки, связаны с низкоуровневыми функциями ядра, тогда как настройки, позволяющие изменять свои значения «на лету», – с высокоуровневыми. Автоматическая настройка параметров во время загрузки – это просто пример экономии вашего времени; принадлежность параметров к той или иной категории не изменяет-

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

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

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

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