Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #82, ОКТЯБРЬ 2005 г.

Тюнинг ядра Linux

j1m (j1m@list.ru)

Хакер, номер #082, стр. 082-102-1


Тонкая настройка ядра с помощью механизма sysctl

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

[теория]

Каталог /proc/sys является частью виртуальной файловой системы procfs, о которой я рассказывал в прошлой статье. Впервые он появился в ядре версии 1.3.57 в качестве интерфейса, позволяющего получить доступ к переменным ядра. В настоящий момент при помощи /proc/sys можно изменить настройки: файловых систем, виртуальной памяти, сетевого стека и внутренних структур ядра. Также во многих дистрибутивах можно найти удобную и близкую пользователям BSD-систем утилиту /sbin/sysctl, выполняющую те же функции.

[практические занятия]

Теперь перейдем непосредственно к тюнингу. Каталог /proc/sys содержит пять основных элементов:

1. kernel - структуры ядра

2. vm - подсистема виртуальной памяти

3. dev - управление оборудованием

4. net - сетевые настройки

5. fs - файловые системы

Через файлы, находящиеся в приведенных каталогах, можно управлять соответствующими подсистемами ядра. Получение текущих настроек происходит путем чтение файла, а изменение - записью в этот файл. Разумеется, производить запись имеет право только root. Приведу пример. Узнаем текущее сетевое имя нашей машины:

$ cat /proc/sys/kernel/hostname

localhost

Изменим его:

# echo linuxoid >gt; /proc/sys/kernel/hostname

# cat /proc/sys/kernel/hostname

linuxoid

Как видишь, все очень просто и понятно. А теперь выполним тоже самое, но используя утилиту sysctl:

# sysctl kernel.hostname

kernel.hostname = localhost

# sysctl -w kernel.hostname=linuxoid

kernel.hostname = linuxoid

Наверное, ты заметил, что имя переменной - это всего лишь имя файла без префикса /proc/sys и с точкой вместо символа '/'.

Для большего удобства существует конфиг /etc/sysctl.conf, где ты можешь прописать любые доступные переменные и их значения. Теперь тебе не надо заботиться о том, что настройки пропадут после перезагрузки.

[мир ядра]

Изменение настроек ядра - мера не всегда оправданная, но в некоторых случаях все-таки полезная. Поэтому мы внимательно рассмотрим каталог /proc/sys/kernel.

В каталоге /proc/sys/kernel можно найти три файла, не доступных для записи: ostype, osrelease и version. Содержимое их таково: тип ОС (разумеется, всегда Linux), версия ядра (например, 2.6.11) и время сборки ядра, причем первое число строки указывает на число сборок из одного дерева исходников. Честно говоря, я так и не понял, зачем нужны эти файлы при живом /proc/version.

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

Я надеюсь, ты в курсе, что происходит с системой, когда ты нажимаешь комбинацию из трех клавиш gt;? На самом деле происходит банальная вещь: ядро переводит процесс init в режим 6, что приводит к перезагрузке с корректным завершением всех сервисов. Такой эффект будет происходить при каждом нажатии волшебной комбинации, пока в файле /proc/sys/kernel/ctrl-alt-del находится значение ноль. Если же поместить в этот файл число, превышающее ноль, то ядро будет немедленно отправлять ПК в перезагрузку (без вызова init, синхронизации буферов и т.д.).

Содержание  Вперед на стр. 082-102-2