четверг, 15 сентября 2011 г.

Сетевые Intel во FreeBSD

EM
Драйвер для гигабитных сетевых карточек
Можно увеличить размеры очередей в карточке (в данном случае до 4 Мб).

### EM net
hw.em.rxd=4096
hw.em.txd=4096
hw.em.max_interrupt_rate=32000

Примечание: желательно посмотреть, какой буфер в реальности имеет ваша сетевая карточка. При возникновении проблем можно уменьшить его в 2 или 4 раза.
Для нормальной работы сетевой особо больше ничего не нужно. Драйвер em в FreeBSD уже очень давно и большинство глюков уже отловлено.
Можно разве что, еще немного заняться тюннингом sysctl.

IGB
Это драйвер для более новых гигабитных сетевых карточек (чипы 82575, 82576, 82580).
Поведение данного драйвера при первоначальном внедрении не очень радовало многих(FreeBSD 7.x). Особенно проблемы возникали с новыми "фичами".
Можно вместо базовых драйверов:
Скачать последнюю версию драйвера igb с офф.сайта Intel
Либо использовать драйвера от Yandex
Драйвера от Yandex более грамотно раскладывают нагрузку по ядрам процессора.
Добавляем в /etc/rc.conf

ifconfig_igb0="-rxcsum -txcsum -lro -tso up"
Это отключает LRO TSO и checksum.
Работать с LRO на данный момент при большом потоке не реально.
Добавляем в /boot/loader.conf

hw.igb.rxd=4096
hw.igb.txd=4096
hw.igb.max_interrupt_rate=32000
hw.igb.lro=0

Можно также внести изменения в ядро.
Рекомендуемые:

## Убирать, т.к. выкладывает проц в полку без прироста в производительности
#options                FLOWTABLE  
#Для создания дополнительных буферов под копирование сокетов
options         ZERO_COPY_SOCKETS # man 9 zero_copy_sockets
## Несколько таблиц маршрутизации.
## Полезно при использовании jail
#options         ROUTETABLES=10
options         HZ=4000
options         PANIC_REBOOT_WAIT_TIME=16
device lagg
А также подтюнить sysctl(параметры подбираются индивидуально под задачу)

net.inet.ip.forwarding=1 #включаем форвардинг пакетов
net.inet.ip.fastforwarding=1 #эта опция действительно ускоряет форвардинг
net.inet.tcp.blackhole=2 #ядро убивает tcp пакеты, приходящие в систему на непрослушиваемые порты
net.inet.udp.blackhole=0 #как и выше, только не убивает ибо traceroute пакеты не покажут этот хоп
net.inet.icmp.drop_redirect=1 #не обращаем внимания на icmp redirect
net.inet.icmp.log_redirect=0 #и не логируем их
net.inet.ip.redirect=0 #не реагируем на icmp redirect
net.inet.ip.sourceroute=0 #отключение маршрутизации от источника
net.inet.ip.accept_sourceroute=0 #старый и бесполезный механизм
net.inet.icmp.bmcastecho=0 #защита от SMURF атак
net.inet.icmp.maskrepl=0 #не отдавать по icmp паску своей подсети
net.link.ether.inet.max_age=30 #переспрашиваем каждые 30 секунд mac адреса в своём arp пространстве
net.inet.ip.ttl=226 #почему бы не поставить ttl побольше ;)
net.inet.tcp.drop_synfin=1 #небольшая защита
net.inet.tcp.syncookies=1 #от доса
kern.ipc.somaxconn=32768 #увеличиваем размер очереди для сокетов
kern.maxfiles=204800 #увеличиваем число открытых файловых дескрипторов
kern.maxfilesperproc=200000 #кол-во ф.д. на каждоый процесс
kern.ipc.nmbclusters=524288 #увеличиваем число сетевых буферов
kern.ipc.maxsockbuf=2097152 #
kern.random.sys.harvest.ethernet=0 #не использовать трафик и прерывания
kern.random.sys.harvest.interrupt=0 #как источник энтропии для random'a
net.inet.ip.dummynet.io_fast=1 #заставляет dummynet работать побыстрее
net.inet.ip.dummynet.max_chain_len=2048 #
net.inet.ip.dummynet.hash_size=65535 #
net.inet.ip.dummynet.pipe_slot_limit=2048 #
net.inet.carp.preempt=1 #включаем carp
net.inet.carp.log=2 #пишем логи карпа
kern.ipc.shmmax=67108864 #макс. размер сегмента памяти
net.inet.ip.intr_queue_maxlen=8192 #размер очереди ip-пакетов
net.inet.ip.fw.one_pass=0 #пакеты, прошедшие пайпы не вылетают из фаервола, а дальше идут по нему
dev.igb.0.enable_lro=0 #отключение large receive offloading 
dev.igb.1.enable_lro=0
dev.igb.0.enable_aim=0 #так нет аномалий с работой сетевушек
dev.igb.1.enable_aim=0
dev.igb.0.rx_processing_limit=2048 #адаптивный polling, разрешаем прерывания с сетевухи при достижении значения
dev.igb.0.flow_control=0 #отключение контроля потока
dev.igb.1.rx_processing_limit=2048
dev.igb.1.flow_control=0

Ссылки:
Intel® Gigabit ET Dual Port Server Adapter (чип 82576) и FreeBSD
Немного об использовании igb во FreeBSD 8
Тюнинг FreeBSD 8.2. Часть 2. Производительность.
FreeBSD 8 igb баги 
Производительный роутер на FreeBSD 


Комментариев нет:

Отправить комментарий