Как создать файл sysctl conf

Обновлено: 08.07.2024

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

В этой статье объясняется, как использовать команду sysctl для просмотра и изменения параметров ядра во время выполнения.

Использование sysctl для просмотра параметров ядра

Чтобы просмотреть все текущие параметры ядра, вызовите команду sysctl с параметром -a :

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

Все пользователи могут просматривать текущие параметры ядра; только пользователь root может изменять их значения.

Вы можете проверить значение одного параметра, передав его имя в качестве аргумента в sysctl . Например, чтобы проверить текущее значение подкачки, введите:

Вы также можете просмотреть значение параметра, отобразив содержимое соответствующего файла. Единственная разница в том, как представлен файл. Например, как sysctl vm.swappiness и cat /proc/sys/vm/swappiness дадут одинаковый результат. При использовании sysctl косые черты каталога заменяются точками, и proc.sys часть proc.sys .

Использование sysctl для изменения параметров ядра

Чтобы установить параметр ядра во время выполнения, выполните команду sysctl за которой следует имя и значение параметра в следующем формате:

Если значение содержит пустое пространство или специальные символы, заключите значение в двойные кавычки. Вы также можете передать несколько пар parameter=value в одной команде.

Будьте особенно осторожны при изменении настроек ядра в производственной системе, так как это может сделать ядро нестабильным, и вам потребуется перезагрузить систему .

Например, чтобы включить пересылку пакетов IPv4, вы должны запустить:

Изменение вступает в силу немедленно, но не является постоянным. После перезагрузки системы загружается значение по умолчанию.

Чтобы установить параметр постоянно, вам необходимо записать настройки в /etc/sysctl.conf или другой файл конфигурации в каталоге /etc/sysctl.d :


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


Правим sysctl.conf

Обычно файл /etc/sysctl.conf - пустой, а если нет. Необходимо добавить в конец файла следующие строки.

Не принимать и не отправлять ICMP-пакеты перенаправления. ICMP-перенаправления могут быть использованы злоумышленником для изменения таблиц маршрутизации. Целесообразно установить значение (нуль). Единица имеет смысл только для хостов, использующихся в качестве маршрутизаторов.

Целочисленное значение параметра tcp_max_orphans определяет максимальное число допустимых в системе TCP сокетов, не связанных каким-либо идентификатором пользовательского файла (user file handle). При достижении порогового значения "осиротевшие" (orphan) соединения незамедлительно сбрасываются с выдачей предупреждения. Этот порог помогает предотвращать только простые атаки DDoS. Не следует уменьшать пороговое значение (скорее увеличить его в соответствии с требованиями системы - например, после добавления памяти. Каждое orphan-соединение поглощает около 64 Кбайт не сбрасываемой на диск (unswappable) памяти>.

Параметр tcp_fin_timeout определяет время сохранения сокета в состоянии FIN-WAIT-2 после его закрытия локальной стороной. Партнер может не закрыть это соединение никогда, поэтому следует закрыть его по своей инициативе по истечении тайм-аута. По умолчанию тайм-аут составляет 60 секунд. В ядрах серии 2.2 обычно использовалось значение 180 секунд и вы можете сохранить это значение, но не следует забывать, что на загруженных WEB-серверах вы рискуете израсходовать много памяти на сохранение полуразорванных мертвых соединений. Сокеты в состоянии FIN-WAIT-2 менее опасны, нежели FIN-WAIT-1, поскольку поглощают не более 1.5 Кбайт памяти, но они могут существовать дольше.

tcp_keepalive_time - переменная определяет как часто следует проверять соединение, если оно давно не используется. Значение переменной имеет смысл только для тех сокетов, которые были созданы с флагом SO_KEEPALIVE. Целочисленная переменная tcp_keepalive_intvl определяет интервал передачи проб. Произведение tcp_keepalive_probes * tcp_keepalive_intvl определяет время, по истечении которого соединение будет разорвано при отсутствии откликов. По умолчанию установлен интервал 75 секунд, т.е., время разрыва соединения при отсутствии откликов составит приблизительно 11 минут.

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

Целочисленное значение (1 байт) tcp_synack_retries определяет число попыток повтора передачи пакетов SYNACK для пассивных соединений TCP. Число попыток не должно превышать 255. Значение 5 соответствует приблизительно 180 секундам на выполнение попыток организации соединения.

Векторная переменная net.ipv4.tcp_mem определяется тремя значениями (минимум, режим нагрузки, максимум) cодержит общие настройки потребления памяти для протокола TCP. Эта переменная измеряется в страницах (обычно 4Кб), а не байтах.

  1. Минимум: пока общий размер памяти для структур протокола TCP менее этого количества страниц, операционная система ничего не делает.
  2. Режим нагрузки: как только количество страниц памяти, выделенное для работы протокола TCP, достигает этого значения, активируется режим работы под нагрузкой, при котором операционная система старается ограничивать выделение памяти. Этот режим сохраняется до тех пор, пока потребление памяти опять не достигнет минимального уровня.
  3. Максимум: максимальное количество страниц памяти, разрешенное для всех TCP сокетов.

Векторная переменная net.ipv4.tcp_wmem содержит 3 целых числа (минимум, по умолчанию, максимум), определяющих размер приемного буфера сокетов TCP.

  1. Минимум: каждый сокет TCP имеет право использовать эту память по факту своего создания. Возможность использования такого буфера гарантируется даже при достижении порога ограничения (moderate memory pressure). Размер минимального буфера по умолчанию составляет 8 Кбайт (8192).
  2. Значение по умолчанию: количество памяти, допустимое для буфера передачи сокета TCP по умолчанию. Это значение применяется взамен параметра /proc/sys/net/core/rmem_default, используемого другими протоколами. Значение используемого по умолчанию буфера обычно (по умолчанию) составляет 87830 байт. Это определяет размер окна 65535 с заданным по умолчанию значением tcp_adv_win_scale и tcp_app_win = 0, несколько меньший, нежели определяет принятое по умолчанию значение tcp_app_win.
  3. Максимум: максимальный размер буфера, который может быть автоматически выделен для приема сокету TCP. Это значение не отменяет максимума, заданного в файле /proc/sys/net/core/rmem_max. При "статическом" выделении памяти с помощью SO_RCVBUF этот параметр не имеет значения.

Целочисленной значение tcp_orphan_retries определяет число неудачных попыток, после которого уничтожается соединение TCP, закрытое на локальной стороне. По умолчанию используется значение 7, соответствующее приблизительно периоду от 50 секунд до 16 минут в зависимости от RTO. На сильно загруженных веб-серверах имеет смысл уменьшить значение этого параметра, поскольку закрытые соединения могут поглощать достаточно много ресурсов.

Максимальное количество соединений для работы механизма connection tracking (используется, например, iptables). При слишком маленьких значениях ядро начинает отвергать входящие подключения с соответствующей записью в системном логе.

Разрешает временные метки протокола TCP. Их наличие позволяет управлять работой протокола в условиях серьезных нагрузок.

Разрешить выборочные подтверждения протокола TCP. Опция необходима для эффективного использования всей доступной пропускной способности некоторых сетей.

Протокол, используемый для управления нагрузкой в сетях TCP. bic и cubic реализации, используемые по умолчанию, содержат баги в большинстве версий ядра RedHat и ее клонов. Рекомендуется использовать параметр htcp.

Не сохранять результаты измерений TCP соединения в кеше при его закрытии. В некоторых случаях помогает повысить производительность.

Актуально для ядер 2.4. По странной причине в ядрах 2.4, если в рамках TCP сессии произошел повтор передачи с уменьшенным размером окна, все соединения с данным хостом в следующие 10 минут будут иметь именно этот уменьшенный размер окна. Данная настройка позволяет этого избежать.

Активируем защиту от IP-спуфинга.

Запрещаем маршрутизацию от источника.

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

Разрешаем повторное использование TIME-WAIT сокетов в случаях, если протокол считает это безопасным.

Разрешаем динамическое изменение размера окна TCP стека.

Защищаемся от TIME_WAIT атак.

Запрещаем переадресацию пакетов, т.к. это не роутер.

Не отвечаем на ICMP ECHO запросы, переданные широковещательными пакетами.

Можно вообще не отвечать на ICMP ECHO запросы (сервер не будет пинговаться)

Максимальное число открытых сокетов, ждущих соединения. Имеет смысл увеличить значение по умолчанию.

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

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

Имеет конфигурационный файл /etc/sysctl.conf, в котором переопределяются необходимые параметры.

Для начала сделаем его бэкап следующей командой:

Открываем файл для редактирования:

И увидим возможные параметры. Список может быть достаточно большим:

настройка sysctl под веб-сервер Apache — усилим безопасность и увеличим производительность.

Вот опции, что необходимо добавить в конец /etc/sysctl.conf

А теперь о каждой опции более детально.

Не принимать и не отправлять ICMP-пакеты перенаправления. ICMP-перенаправления могут быть использованы злоумышленником для изменения таблиц маршрутизации. Целесообразно выставить в «0″. Единица имеет смысл только для хостов, использующихся в качестве маршрутизаторов.

Целочисленное значение параметра tcp_max_orphans определяет максимальное число допустимых в системе сокетов TCP, не связанных каким-либо идентификатором пользовательского файла (user file handle). При достижении порогового значения “осиротевшие” (orphan) соединения незамедлительно сбрасываются с выдачей предупреждения. Этот порог помогает предотвращать только простые атаки DoS. Не следует уменьшать пороговое значение (скорее увеличить его в соответствии с требованиями системы – например, после добавления памяти. Каждое orphan-соединение поглощает около 64 Кбайт несбрасываемой на диск (unswappable) памяти.

Параметр tcp_fin_timeout определяет время сохранения сокета в состоянии FIN-WAIT-2 после его закрытия локальной стороной. Партнер может не закрыть это соединение никогда, поэтому следует закрыть его по своей инициативе по истечении тайм-аута. По умолчанию тайм-аут составляет 60 секунд. В ядрах серии 2.2 обычно использовалось значение 180 секунд и вы можете сохранить это значение, но не следует забывать, что на загруженных WEB-серверах вы рискуете израсходовать много памяти на сохранение полуразорванных мертвых соединений. Сокеты в состоянии FIN-WAIT-2 менее опасны, нежели FIN-WAIT-1 , поскольку поглощают не более 1,5 Кбайт памяти, но они могут существовать дольше.

tcp_keepalive_time Переменная определяет как часто следует проверять соединение, если оно давно не используется. Значение переменной имеет смысл только для тех сокетов, которые были созданы с флагом SO_KEEPALIVE . Целочисленная переменная tcp_keepalive_intvl определяет интервал передачи проб. Произведение tcp_keepalive_probes * tcp_keepalive_intvl определяет время, по истечении которого соединение будет разорвано при отсутствии откликов. По умолчанию установлен интервал 75 секунд, т.е., время разрыва соединения при отсутствии откликов составит приблизительно 11 минут.

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

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

Целочисленное значение (1 байт) tcp_synack_retries определяет число попыток повтора передачи пакетов SYNACK для пассивных соединений TCP. Число попыток не должно превышать 255. Значение 5 соответствует приблизительно 180 секундам на выполнение попыток организации соединения.

Векторная (минимум, режим нагрузки, максимум) переменная в файле tcp_mem cодержит общие настройки потребления памяти для протокола TCP. Эта переменная измеряется в страницах (обычно 4Кб), а не байтах.

Минимум: пока общий размер памяти для структур протокола TCP менее этого количества страниц, операционная система ничего не делает.

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

Максимум: максимальное количество страниц памяти, разрешенное для всех TCP сокетов.

Векторная (минимум, по умолчанию, максимум) переменная в файле tcp_rmem содержит 3 целых числа, определяющих размер приемного буфера сокетов TCP.

Минимум: каждый сокет TCP имеет право использовать эту память по факту своего создания. Возможность использования такого буфера гарантируется даже при достижении порога ограничения (moderate memory pressure). Размер минимального буфера по умолчанию составляет 8 Кбайт (8192).

Значение по умолчанию: количество памяти, допустимое для буфера передачи сокета TCP по умолчанию. Это значение применяется взамен параметра /proc/sys/net/core/rmem_default , используемого другими протоколами. Значение используемого по умолчанию буфера обычно (по умолчанию) составляет 87830 байт. Это определяет размер окна 65535 с заданным по умолчанию значением tcp_adv_win_scale и tcp_app_win = 0 , несколько меньший, нежели определяет принятое по умолчанию значение tcp_app_win .

Максимум: максимальный размер буфера, который может быть автоматически выделен для приема сокету TCP. Это значение не отменяет максимума, заданного в файле /proc/sys/net/core/rmem_max . При «статическом» выделении памяти с помощью SO_RCVBUF этот параметр не имеет значения.

Векторная переменная в файле tcp_wmem содержит 3 целочисленных значения, определяющих минимальное, принятое по умолчанию и максимальное количество памяти, резервируемой для буферов передачи сокета TCP.

Минимум: каждый сокет TCP имеет право использовать эту память по факту своего создания. Размер минимального буфера по умолчанию составляет 4 Кбайт (4096)

Значение по умолчанию: количество памяти, допустимое для буфера передачи сокета TCP по умолчанию. Это значение применяется взамен параметра /proc/sys/net/core/wmem_default , используемого другими протоколами и обычно меньше, чем /proc/sys/net/core/wmem_default . Размер принятого по умолчанию буфера обычно (по умолчанию) составляет 16 Кбайт (16384)

Максимум: максимальное количество памяти, которое может быть автоматически выделено для буфера передачи сокета TCP. Это значение не отменяет максимум, заданный в файле /proc/sys/net/core/wmem_max . При «статическом» выделении памяти с помощью SO_SNDBUF этот параметр не имеет значения.

Целочисленной значение tcp_orphan_retries определяет число неудачных попыток, после которого уничтожается соединение TCP, закрытое на локальной стороне. По умолчанию используется значение 7, соответствующее приблизительно периоду от 50 секунд до 16минут в зависимости от RTO . На сильно загруженных WEB-серверах имеет смысл уменьшить значение этого параметра, поскольку закрытые соединения могут поглощать достаточно много ресурсов.

Согласно [urlspan]рекомендациям разработчиков ядра[/urlspan], этот режим лучше отключить.

Максимальное количество соединений для работы механизма connection tracking (используется, например, iptables). При слишком маленьких значениях ядро начинает отвергать входящие подключения с соответствующей записью в системном логе.

Разрешает [urlspan]временные метки протокола TCP[/urlspan]. Их наличие позволяет управлять работой протокола в условиях серьезных нагрузок (см. tcp_congestion_control ).

Разрешить [urlspan]выборочные подтверждения протокола TCP[/urlspan]. Опция необходима для эффективного использования всей доступной пропускной способности некоторых сетей.

[urlspan]Протокол[/urlspan], используемый для управления нагрузкой в сетях TCP. bic и cubic реализации, используемые по умолчанию, содержат баги в большинстве версий ядра RedHat и ее клонов. Рекомендуется использовать htcp .

Не сохранять результаты измерений TCP соединения в кеше при его закрытии. В некоторых случаях помогает повысить производительность.

Актуально для ядер 2.4. По странной причине в ядрах 2.4, если в рамках TCP сессии произошел повтор передачи с уменьшенным размером окна, все соединения с данным хостом в следующие 10 минут будут иметь именно этот уменьшенный размер окна. Данная настройка позволяет этого избежать.

Активируем защиту от [urlspan]IP-спуфинга[/urlspan].

Запрещаем маршрутизацию от источника.

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

Разрешаем повторное использование TIME-WAIT сокетов в случаях, если протокол считает это безопасным.

Разрешаем динамическое изменение размера окна TCP стека

Защищаемся от [urlspan]TIME_WAIT атак[/urlspan].

Запрещаем переадресацию пакетов, поскольку мы не роутер.

Не отвечаем на ICMP ECHO запросы, переданные широковещательными пакетами

Можно вообще не отвечать на ICMP ECHO запросы (сервер не будет пинговаться)

Максимальное число открытых сокетов, ждущих соединения. Имеет смысл увеличить значение по умолчанию.

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

Размер буфера приема данных по умолчанию для всех соединений.

Размер буфера передачи данных по умолчанию для всех соединений (по 16 Мб каждый сокет).

Максимальный размер буфера приема данных для всех соединений (по 16 Мб каждый сокет).

Максимальный размер буфера передачи данных для всех соединений (по 16 Мб каждый сокет).

P.S. Количество соединений обычно можно подсчитать с помощью

Также не забываем про семафоры в системе:

Значения в sysctl:

• Уменьшите значение времени по умолчанию для tcp_fin_timeout связи

• Уменьшите значение времени по умолчанию для соединения, чтобы сохранить живым


21:56 07-01-2013 PapaRoach

Слово автора:
Недавно (хотя сам узнал поздновато) умельцы с XDA предложили способ увеличения работы аккумулятора с помощью sysctl . Скажу сразу, что прирост к работе аккумулятора есть, но у всех по-разному, однако довольно-таки приличный прирост!

Требования:
* Права root, установленный busybox. Не спрашивайте что это такое. На сайте есть раздел по получению рут-прав и установке нужного софта.
* Поддержка прошивкой init.d
99% кастомных прошивок поддерживают init.d . Если же у вас стоковая прошивка и вы не уверены, что там есть init.d посоветую использовать такие программы как mctweaker или Script Manager . Они позволяют эмулировать работу init.d.
* Установленный Android Terminal Emulator и любой файловый менеджер, к примеру, Root Explorer
* Умение делать nandroid backup(на всякий случай!)

Шаг 1
С помощью файлового менеджера идем по пути system/etc и ищем там файл sysctl.conf . Если его там нет, то создаем его. Создать можно и с компьютера и закинуть потом в аппарат- если решили так, то советую использовать редактор Notepad++.
Открываем файл и вставляем туда данный "код":
Код для sysctl.conf


Тщательно следите за лишними пробелами, наличие всяких "левых" символов отрицательно скажется на работе кода. Сохраняем файл и выставляем права-разрешения:
Права




Шаг 2
Теперь идем по пути system/etc/init.d и создаем файл с именем 10sysctl . Открываем его и вставляем следующий текст, тщательно следя за левыми символами!:

Сохраняем и выставляем права-разрешения как с файлом sysctl.conf. Данный файл-скрипт мы создаем для того, чтобы наш файл sysctl.conf срабатывал при загрузке системы.

Шаг 3
Теперь пришло время проверить все ли мы правильно вбили. Можно до этого сделать перезагрузку, а лучше наверно не надо)
Открываем Android Terminal Emulator и пишем следующее:

После этого на экране появится содержимое файла sysctl.conf. Если у строчек файла стоят ошибки "error", то открываем наш файл sysctl.conf и удаляем строчки, у которых стояли ошибки и заново проверяем файл на ошибки!
В качестве иллюстрации




Шаг 4
Теперь делаем перезагрузку и по идеи радуемся успеху!
Если у вас что-то сломалось, не загрузилось, то вся вина лежит на Вас! Я никакой ответственности за работу ваших аппаратов не несу! Однако же, заверяю, что на работу вашего аппарата эти манипуляции плохо не скажутся!

Для ленивых
Специально для ленивых сделали приложение для изменения основных параметров Sysctl Config .
Рекомендуемые настройки для программы


vm.min_free_kbytes = 16284
vm.dirty_ratio = 90
vm.dirty_background_ratio = 55
vm.vfs_cache_pressure = 20
oom kill checked

Итоги:
99% испробовавших этот метод говорят о том, что он работает. Прирост времени жизни у всех разный, однако процент довольно ощутимый. Лично для меня каждый процент батареи очень важен, поэтому я попробовал на своем SE NEO V и уже сейчас заметил, что в режиме сна аккум садится в 2 раза медленнее! Да, это зависит от разных факторов, но все же.

Настройка параметров сети, предотвращает потерю данных и настраивает сетевой стэк на максимальную полосу пропускания.

Системный буфер

Для передачи/приема данных по протоколу UDP нужно настроить буфер операционной системы.

Параметры размера буфера настраиваются в файле /etc/sysctl.conf
Рекомендуется использовать следующие значения для сетевых адаптеров 1G:

Для 10G сетевых адаптеров:

Для 40G сетевых адаптеров:

Чтобы применить изменения, перезагрузите систему или выполните команду:

Вы можете проверить текущие значения с помощью следующей команды:

Размер буфера сетевой карты

Для высоконагруженых серверов необходимо настроить буфер сетевой карты. Это позволит избежать потерь в системном буфере.

Здесь мы видим, что rx-буфер увеличен до максимума. Обычно найти верное значение довольно сложно. Наиболее оптимальным является некоторое «среднее» значение. С высокочастотным и многоядерным процессором (> 3GHz) вы можете получить хорошие результаты с максимальным размером буфера.
Пример команды для увеличения буфера:

RP filter

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

Добавьте в файл /etc/sysctl.conf следующую запись:

Где eth0 - имя интерфейса.

Чтобы применить изменения, перезапустите систему или выполните команду:

Версия IGMP

Многие операционные системы отправляют запрос на подписку к мультикаст-группе в формате igmp v3
Если сетевой коммутатор не может работать с этим протоколом, или протокол не сконфигурирован - попытка подписки на мультикаст группу будет неудачной. Протокол igmp v2 поддерживается большинством коммутаторов.

Версия IGMP может быть настроена в файле /etc/sysctl.conf
Например, настройка IGMPv2 для интерфейса eth1:
net.ipv4.conf.eth1.force_igmp_version=2

Чтобы применить изменения, перезапустите систему или выполните команду:

Вы можете проверить версию IGMP с помощью tcpdump выполнив команду:

Затем попробуйте подписаться на мультикаст. Например:

sysctl.conf

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

Чтобы применить изменения, перезагрузите систему или выполните команду:

Ключевые слова: missed, dropped, fifo, error, rx.

Нужно проверить ошибки RX. Некоторые сетевые карты предоставляют более подробную информацию о потерях:

Потери могут быть не только на сетевых картах вашего сервера. Они также могут находиться на порту сетевого оборудования. Вы можете узнать, как это увидеть из документации производителя сетевого оборудования.

Настройка и диагностика сетевой подсистемы с помощью netutils

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

Установка

network-top

Эта утилита нужна для оценки применённых настроек и отображает равномерность распределения нагрузки (прерывания, softirqs, число пакетов в секунду на ядро процессора) на ресурсы сервера, всевозможные ошибки обработки пакетов. Значения, превышающие пороговые подсвечиваются.

rss-ladder

Эта утилита распределяет прерывания сетевой карты на ядра выбранного физического процессора (по умолчанию на нулевой).

server-info

Данная утилита позволяет сделать две вещи:

server-info --show : посмотреть, что за оборудование установлено в сервере. В целом похоже на lshw, но с акцентом на интересующие нас параметры.

server-info --rate : найти узкие места в аппаратном обеспечении сервера. В целом похоже на индекс производительности Windows, но с акцентом на интересующие нас параметры. Оценка производится по шкале от 1 до 10.

Прочие утилиты

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

отключает плавающую частоту процессора.

Примеры использования:

Пример 1. Максимально простой.

Дано:

один процессор с 4 ядрами.
одна 1 Гбит/сек сетевая карта (eth0) с 4 combined очередями
входящий объём трафика 600 Мбит/сек, исходящего нет.
все очереди висят на CPU0, суммарно на нём ?55000 прерываний и 350000 пакетов в секунду, из них около 200 пакетов/сек теряются сетевой картой. Остальные 3 ядра простаивают

Решение:

распределяем очереди между ядрами командой rss-ladder eth0
увеличиваем ей буфер командой rx-buffers-increase eth0

Пример 2. Чуть сложнее.

Дано:

два процессора с 8 ядрами
две NUMA-ноды
Две двухпортовые 10 Гбит/сек сетевые карты (eth0, eth1, eth2, eth3), у каждого порта 16 очередей, все привязаны к node0, входящий объём трафика: 3 Гбит/сек на каждую
1 х 1 Гбит/сек сетевая карта, 4 очереди, привязана к node0, исходящий объём трафика: 100 Мбит/сек.

Решение:

1 Переткнуть одну из 10 Гбит/сек сетевых карт в другой PCI-слот, привязанный к NUMA node1.
2 Уменьшить число combined очередей для 10гбитных портов до числа ядер одного физического процессора:

3 Распределить прерывания портов eth0, eth1 на ядра процессора, попадающие в NUMA node0, а портов eth2, eth3 на ядра процессора, попадающие в NUMA node1:

4 Увеличить eth0, eth1, eth2, eth3 RX-буферы:

Напоминание:

В случае с сетевыми картами с одной очередью распределить нагрузку между ядрами можно с помощью RPS, но потери при копировании пакетов в память это не устранит.

Распределение прерываний осуществляется на базе расчета хеш функции (остаток от деления) от совокупности таких данных: protocol, source and destination IP, and source and destination port. Технология называется: Receive-side scaling (RSS).

Читайте также: