Оптимизация настроек сети

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

В первую очередь имеет смысл явно включить все аппаратные возможности, если они по каким-либо причинам оказались выключены. Это делается через настройки ifconfig в файле /etc/rc.conf

ifconfig_DEFAULT=" -rxcsum -rxcsum6 -txcsum -txcsum6 -lro -tso -vlanhwtso -vlanhwfilter"

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

Наиболее популярные меры по оптимизации сети:

Увеличить допустимые объемы памяти (буферы и кластеры), выделенные на работу с сетью:

kern.ipc.maxsockbuf=16777216
net.inet.tcp.sendbuf_max=16777216
net.inet.tcp.recvbuf_max=16777216
  
kern.ipc.nmbclusters=100000
kern.ipc.nmbjumbop=50000

Если используется UDP, можно добавить

net.inet.udp.maxdgram=65535

При большом количестве непродолжительных соединений (например, web сервер), имеет смысл увеличить очередь соединений, ждущих обработки, а также общее количество соединений на сокет:

kern.ipc.soacceptqueue=2048
kern.ipc.somaxconn=4096

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

kern.maxfiles=204800
kern.maxfilesperproc=200000

Если планируется передавать большие объёмы данных по TCP, особенно потоком, можно увеличить следующие параметры:

net.inet.tcp.recvspace=1024000
net.inet.tcp.sendspace=1024000

Также можно несколько оптимизировать процесс выделения системой портов для соединений:

net.inet.ip.portrange.randomized=0
net.inet.ip.portrange.first=1024
net.inet.ip.portrange.last=65535

И сократить время ожидания закрытия (завершения) соединений:

net.inet.tcp.fast_finwait2_recycle=1

Посмотреть информацию об использовании памяти сетевой подсистемой можно командой

netstat -m