NetSago
Вход
Войти

Как присоединиться?
Меню
Главная
События
 Заметки
Статьи
Теги
Поиск
О Проекте
Ссылки
Наше
RSS События по RSS
RSS Заметки по RSS
netsago NetSago
Популярное
Руководство по получению прибыли от Свободных и Открытых Проектов by Джон Эндрюс

Настройка ядра с помощью sysctl by n0xi0uzz

Заметки — Настройка ядра с помощью sysctl
Назад в Заметки

Настройка ядра с помощью sysctl
n0xi0uzz



Теги: linux kernel


Перевод статьи Federico Kereki «Kernel tuning with sysctl».


Ядро Linux гибкое, и вы даже можете менять способ его работы налету, путем динамической смены некоторых из его параметров, благодаря команде sysctl. Sysctl предоставляет интерфейс, позволяющий вам исследовать и менять несколько сотен параметров ядра в Linux или BSD. Изменения имеют эффект незамедлительно и также можно сохранять их и после перезагрузки. Разумно используя sysctl, вы можете оптимизировать вашу систему без перекомпиляции ядра, и получить результаты немедленно.

Чтобы начать изучение того, что sysctl может изменить, выполните sysctl -a, и вы увидете возможные параметры. Список может быть достаточно большим: на моей текущей системе есть 712 возможных настроек:
$ sysctl -a
kernel.panic = 0
kernel.core_uses_pid = 0
kernel.core_pattern = core
kernel.tainted = 129

...много строк пропущено...

Если вы хотите получить значение одной переменной, используйте что-то, вроде sysctl vm.swappiness, или просто sysctl vm, чтобы получить список всех переменных, которые начинаются на «vm.». Добавьте опцию -n, чтобы выводились только значения переменных, без имен; -N приведет к противоположному эффекту и выведет имена, но не значения.

Вы можете изменить любую переменную, используя опцию -w со следующим синтаксисом: sysctl -w переменная=значение. Например: sysctl -w net.ipv6.conf.all.forwarding=1 устанавливает соответствующей переменной значение true (0 обозначает «нет», или false; 1 значит «да», или true), что включает форвардинг IP6. Вам может и не понадобится опция -w, — она кажется запрещенной. Проведите самостоятельно несколько экспериментов, чтобы убедиться в этом.

Для более подробной информации, выполните man sysctl для отображения стандартной документации.

Значение sysctl загружаются во время загрузки системы из файла /etc/sysctl.conf. В этом файле могут быть пустые строчки, комментарии (строки, начинающиеся на символ «#» или точку с запятой), а также строки в формате «переменная=значение». Например, мой файл sysctl.conf приведен ниже. Если вы хотите применить его в любой момент времени, вы можете сделать это с помощью команды sysctl -p.
# Disable response to broadcasts.
net.ipv4.icmp_echo_ignore_broadcasts = 1


        

# enable route verification on all interfaces net.ipv4.conf.all.rp_filter = 1 # enable ipV6 forwarding net.ipv6.conf.all.forwarding = 1 # increase the number of possible inotify(7) watches fs.inotify.max_user_watches = 65536

Как решить, что делать с таким большим количеством параметров настройки? Увы, это больной вопрос sysctl: большинство релевантной документации спрятано во множестве исходных файлов ядра Linux, она труднодоступна и не может помочь, так как объяснения иногда скрыты и тяжелы для понимания. Кое-что вы можете найти в директории /usr/src/linux/Documentation/sysctl, но большинство (если не все) файлов там ссылаются на ядро 2.2 и, похоже, не обновлялись последние несколько лет.

Поиск по теме в книгах, возможно, сильно не поможет. Я нашел hack#71 в Linux Server Hacks, Volume 2 (O'Reilly) от 2005 года, и это все. Несколько других книг ссылаются на sysctl, но со специфическими параметрами или возможностями, вы предоставлены сами себе.

В качестве эксперимента, я попробовал поискать информацию о параметре swappiness, который может оптимизировать управление виртуальной памятью. Файл /usr/src/Linux/Documentation/sysctl/vm.txt даже не ссылался на него, возможно, потому что этот параметр появился в версии ядра 2.6. Общий поиск во всех директории /usr/src/linux вернул пять файлов, содержащих «swappiness»: три заголовочных (.h) файла в include/linux, плюс kernel/sysctl.c и mm/vmscan.c. Последний файл содержал следующую информацию:
/*
* From 0 .. 100.  Higher means more swappy.
*/
int vm_swappiness = 60;

Вот оно! Вы можете видеть значение по умолчанию (60) и минимальное объяснение значения этого параметра. Насколько полезно это может быть?

Мое предложение, — использовать sysctl -a для изучения доступных параметров, а затем Google для дополнительной помощи. Скажем, вы можете найти пример изменения выделения совместно используемой памяти для решения проблемы видео программы или объяснение vm.swappiness или даже больше предложений по оптимизации сетевого трафика IP4.

sysctl и директория /proc

Виртуальная директория /proc/sys также предоставляет интерфейс для параметров sysctl, позволяя вам проверять и менять их. Например, файл /proc/sys/vm/swappiness эквивалентен параметру vm.swappiness в sysctl.conf. Просто забудьте о начальной части «/proc/sys/», замените точками слеши и вы получите соответствующий параметры sysctl (кстати, эта замена вообще-то и не требуется; слеши также принимаются, хотя, похоже, что все используют вместо них нотацию с точками). Вот почему echo 10 >/proc/sys/vm/swappiness это то же самое, что и sysctl -w vm.swappiness=10. Но, как оказывается на практике, если файл /proc/sys предназначен только для чтения, вы не сможете настроить его с помощью sysctl.
Язык
English/Английский
Поиск
Расширенный Поиск
Ошиблись?
Если вы обнаружили ошибку на сайте, пожалуйста, сообщите нам о ней.
Посчитали
0 / 0
К нам сегодня роботы не заходили, человеки могут быть спокойны.

Зарегистрированных пользователей: 0
Онлайн: 0

Время генерации: 0.020 с
NetSago.v2.β © [2006;∞)  Neunica