Документация по ОС FreeBSD Воскресенье, 19.05.2024, 04:17
Приветствую Вас Гость | 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, включая подробноые описания и советы по обучению.

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

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

Сетевая подсистема

 

Настройка сетевой подсистемы обычно сводится:

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

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

Этими двумя пунктами мы и будем руководствоваться.

 

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

Увеличение производительности:

net.inet.ip.portrange.first=1024

net.inet.ip.portrange.last=48000 — увеличиваем диапазон портов, доступных программам. Стоит изменять только на нагруженных серверах, использующих много исходящих подключений, таких как веб-прокси и ftp.

kern.polling.enable=1 включаем device polling. Осуществляется самостоятельный опрос устройств вместо генерирования прерываний устройством, что позволяет значительно увеличить производительность при больших нагрузках на сетевую карту. Ядро должно быть собрано с опциями «options DEVICE_POLLING» и «options HZ=1000».

kern.ipc.somaxconn=2048 — увеличиваем очередь входящих подключений со 128 до 2048, что помогает нагруженному серверу принять больше подключений, а также затрудняет SYN флуд.

 

Защита от сетевых атак:

net.inet.tcp.blackhole=1

net.inet.udp.blackhole=1 — превращаем машину в черную дыру. Ядро не будет отправлять RST-пакет в ответ на обращение к незанятым портам. Сканеры портов не любят этого.

net.inet.icmp.drop_redirect=1

net.inet.ip.redirect=0 запрещаем ICMP - сообщения, приводящие к изменению таблицы маршрутизации (тип 5: IP Redirect). Удивительно, но FreeBSD даже в 2007 году разрешает такие сообщения по умолчанию.

net.inet.ip.forwarding=0 — отключаем перенаправление пакетов с одного сетевого интерфейса на другой.

Счастливые обладатели высокоскоростных соединений (это в первую очередь Gigabit Ethernet) могут поэкспериментировать с размерами входных и выходных сетевых TCP-буферов, увеличивая значение переменных net.inet.tcp.sendspace и net.inet.tcp.recvspace. Но стоит помнить, что слишком объемные буферы быстро приведут к исчерпанию памяти при большом количестве подключений. Для веб-сервера, который принимает много коротких запросов и отправляет большие объемы данных, размер выходного буфера рекомендуется увеличить в ущерб входного. Производительность samba и squid можно увеличить, изменив значение переменной net.inet.tcp.delayed_ack на 0 и запретив таким образом отправку ответных ACK-сообщений вместе с данными. В случае интерактивных протоколов, таких как POP, IMAP, SMTP, SSH и FTP, это изменение приведет к заполнению сети лишними пакетами, содержащими лишь ACK-сообщения, и снижению производительности.

 

Полезные и не очень мелочи

 

В заключительной части статьи мы рассмотрим несколько интересных (с точки зрения практической выгоды) переменных. Для начала обратимся к неизменяемым переменным, которые будут полезны как источник информации. В первую очередь это переменная vm.vmtotal, которая в удобной для чтения форме показывает информацию о количестве процессов в системе, размере виртуальной и физической памяти, а также о количестве свободной. Далее — переменная vm.loadavg, содержащая таинственное значение «загруженности системы».

Вкратце объяснить эти числа невозможно, поэтому скажу только, что если все три числа подойдут к отметке «5», то значит где-то в системе создалось узкое место, которое может быть где угодно: в оперативной памяти, жестком диске, или заключаться в какой-то внутренней неполадке.

Теперь о переменных, изменять значение которых имеет смысл. К ним относится vfs.usermount, установив значение которой в единицу, мы позволим любому пользователю монтировать файловые системы к точке, принадлежащей ему.

Далее — hw.snd.pcm0.vchans и hw.snd.maxautovchans, позволяющие создать несколько виртуальных каналов для одной звуковой карты, что дает возможность одновременно слышать звук из нескольких источников без использования звуковых демонов. На домашней машине рекомендуется создать 4 канала — этого вполне достаточно для повседневных нужд.

Напоследок скажем пару слов об управлении питанием. Очень часто на форумах можно встретить вопросы вроде: «Как отключить кнопку Power?» или «Как отключить кнопку Sleep на клавиатуре?».

Ответ прост. Пишем в файл /etc/sysctl.conf строку «hw.acpi.power_button_state=NONE» или «hw.acpi.sleep_button_state=NONE» в зависимости от желаемого результата.

Также можно не отключать клавишу совсем, а просто изменить ее поведение, назначив ей любое из доступных состояний ACPI, перечисленных в переменной hw.acpi.supported_sleep_state. При этом S1 — самый низкий уровень энергосбережения (сон), а S5 — самый высокий (выключение).

 

 

Главное правило оптимизатора

Перед тем как приступать к изменению настроек ядра, стоит запомнить одну простую истину. По умолчанию ядро настроено на оптимальную производительность, и, как заметил Пол-Хеннинг Камп, улучшая производительность одной подсистемы, мы понижаем производительность другой. А компетентность этого человека в этом вопросе неоспорима.

 

Дорогу молодым

К сожалению, многое из того, что я хотел рассказать в этом материале, так и осталось в моей голове и на страницах многочисленных заметок. Читателям, жаждущим идти дальше, я предлагаю распечатать вывод команды sysctl -ad и читать его на ночь, время от времени заглядывая в англо-русский словарик. Те, кого интересуют переменные, связанные с jail, могут обратиться к моей статье «Тюрьма для чертенка», где они и описаны.

 

INFO

Pawel Jakub Dawidek, один из коммитеров FreeBSD, написал интересный модуль ядра, воссоздающий дерево переменных sysctl в виде виртуальной файловой системы. Исходники модуля лежат на его сайте (garage.freebsd.pl) и на нашем диске.

 

 

 

Автор: Евгений «j1m» Зобнин  "j1m@list .ru"

Категория: Установка и настройка | Добавил: oleg (21.11.2007)
Просмотров: 1072 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

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

Copyright MyCorp © 2024