TCP tuning
Набрел тут на статью, которая описывает оптимизацию tcp стека во freebsd. Открыл для себя кое-что новое, до этого не слышал. Не уверен, что все перевел правильно, но указания к действию там достаточно прямые:
В FreeBSD начиная с 7 ветки добавлен TCP autotuning, в 8.2 улучшены алгоритмы контроля перезагрузки (cubic and HTCP).
Вот рекомендованные настройки для /etc/sysctl.conf (часть из них — по умолчанию, но приводится для тех, кто по каким-либо причинам внес изменения вручную):
[cc lang=»bash»] # 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
[/cc]
Начиная с FreeBSD 8.2 можем включить H-TCP:
[cc lang=»bash»] net.inet.tcp.cc.default.algo=htcp[/cc]
По умолчанию параметр inflight limiting включен, что хорошо для модемной связи, но может приводит к ухудшению связи в ряде случаев при высокоскоростном соединении. Поэтому выключаем.
По умолчанию FreeBSD кэширует соединения в течение одного часа, что хорошо для web-сервера, но в других случаях приводит к снижению производительности канала. Поэтому, если у нас не web-сервер, приводим hostcache.expire к значению 1, что назначает время кэширования в 5 минут. Более подробно здесь.
Кроме того, есть патч, позволяющий использовать h-tcp в седьмой ветке.
Что за h-tcp такой, который всем срочно нужен, не знаю. Сейчас пойду выяснять, как выясню — запишу.