Оптимизация настроек сети
Настройки 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