Набрел тут на статью, которая описывает оптимизацию tcp стека во freebsd. Открыл для себя кое-что новое, до этого не слышал. Не уверен, что все перевел правильно, но указания к действию там достаточно прямые:
В FreeBSD начиная с 7 ветки добавлен TCP autotuning, в 8.2 улучшены алгоритмы контроля перезагрузки (cubic and HTCP).
Вот рекомендованные настройки для /etc/sysctl.conf (часть из них – по умолчанию, но приводится для тех, кто по каким-либо причинам внес изменения вручную):
# set to at least 16MB kern.ipc.maxsockbuf=16777216 # set autotuning maximum to at least 16MB too net.inet.tcp.sendbuf_max=16777216 net.inet.tcp.recvbuf_max=16777216 # enable send/recv autotuning net.inet.tcp.sendbuf_auto=1 net.inet.tcp.recvbuf_auto=1 # increase autotuning step size net.inet.tcp.sendbuf_inc=16384 net.inet.tcp.recvbuf_inc=524288 # turn off inflight limitting net.inet.tcp.inflight.enable=0 # set this on test/measurement hosts net.inet.tcp.hostcache.expire=1
Начиная с FreeBSD 8.2 можем включить H-TCP:
net.inet.tcp.cc.default.algo=htcp
По умолчанию параметр inflight limiting включен, что хорошо для модемной связи, но может приводит к ухудшению связи в ряде случаев при высокоскоростном соединении. Поэтому выключаем.
По умолчанию FreeBSD кэширует соединения в течение одного часа, что хорошо для web-сервера, но в других случаях приводит к снижению производительности канала. Поэтому, если у нас не web-сервер, приводим hostcache.expire к значению 1, что назначает время кэширования в 5 минут. Более подробно здесь.
Кроме того, есть патч, позволяющий использовать h-tcp в седьмой ветке.
Что за h-tcp такой, который всем срочно нужен, не знаю. Сейчас пойду выяснять, как выясню – запишу.