watchdog timeout и polling | FreeBSD

Итак на консоли мы заметили сообщение watchdog timeout это значит что можно попробовать включить polling или сменить сетевую карту. Суть поллинга (polling) в том что мы мы говорим ядру опрашивать сетевые интерфейсы на предмет наличия данных через определенный промежуток времени. Иначе при каждом событии на интерфейсе генерится прерывание, что при большом потоке данных может вызвать interrupt storm и соответсвенно watchdog timeout (см. man watchdogd).

Итак делаем.

1. Ядро. Обавляем опции:

options DEVICE_POLLING (включение режима опроса)
options HZ=1000 (таймер проверки 1000 примерно равен пропускной способности 100 Мбитной сети. Если скорость больше 100 мегабит можно пробовать выставить большее значение).

Собираем ставим новое ядро:

make -j6 buildkernel KERNCONF=MYKERNEL
make installkernel KERNCONF=MYKERNEL

2. Добавляем в /etc/sysctl.conf:

kern.polling.enable=1

3. Включаем поллинг на интерфейсе:

# ifconfig em0 polling

Или в /etc/rc.conf прописываем поллинг на интерфейсе:

#ifconfig_em0="inet 44.45.44.12 netmask 255.255.255.0 polling"

4. Тюнинг

Просмотр отброшенных пакетов

# sysctl net.inet.ip.intr_queue_drops

# sysctl kern.polling.user_frac=50 (по дефолту, при болших нагрузках – можно уменьшить)

И настройка стека (в /etc/sysctl.conf) по вкусу.

kern.polling.enable=1
net.inet.ip.intr_queue_maxlen=5000
kern.ipc.maxsockbuf=8388608
net.inet.tcp.sendspace=3217968
net.inet.tcp.recvspace=3217968
net.inet.tcp.rfc1323=1