Я тестировал, могу ли я получить какую-либо пользу от включения jumbo-кадров. Я установил два идентичных сервера Dell R210 с четырехъядерными процессорами Xeon E3122, 8 ГБ оперативной памяти и картами Broadcom NetXtreme II BCM5716 Gigabit Ethernet. Я запускаю Debian Squeeze с сетевым драйвером bnx2 в обеих системах. Серверы подключены друг к другу по одному сетевому адаптеру каждый в частной подсети, а я использую другой сетевой адаптер как для SSH, так и для мониторинга. Я добавил известные мне параметры настройки ОС:
sysctl -w net.core.rmem_max=134217728
sysctl -w net.core.wmem_max=134217728
sysctl -w net.ipv4.tcp_rmem="4096 87380 134217728"
sysctl -w net.ipv4.tcp_wmem="4096 65536 134217728"
sysctl -w net.core.netdev_max_backlog=300000
sysctl -w net.ipv4.tcp_sack=0
sysctl -w net.ipv4.tcp_fin_timeout=15
sysctl -w net.ipv4.tcp_timestamps=0
ifconfig ethX txqueuelen 300000
ethtool -K eth1 gso on
Ethtool -k
вывод показывает
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
ntuple-filters: off
receive-hashing: off
Оба сервера настроены на 9000-байтовые кадры jumbo через ifconfig (sudo /sbin/ifconfig eth1 mtu 9000
), и я подтвердил MTU в обеих системах с помощью команды ping (ping -s 8972 -M do <other IP>
). Когда я тестирую массовые передачи с помощью netperf, tcpdump подтверждает, что большинство пакетов данных используют полный MTU в 9000 байт с размером кадра 9014.
Однако когда я тестирую «настоящее» приложение - я устанавливаю Postgres на одном сервере и использую другой в качестве клиента, максимальный MTU, сообщаемый tcpdump и tshark, составляет 2160, даже для очень больших выборок с наборами результатов, работающими в мегабайтах. Я не могу поднять его выше, несмотря на то, что пробовал шарлатанство, например, установить advmss на маршруте с помощью iproute2.
Мысли?
TIA.
Postgres может быть не лучшим «настоящим» приложением для полной упаковки jumbo-кадров. На основании ветка старого списка, похоже, что разработчики пытались повысить производительность с помощью TCP_NODELAY и / или TCP_CORK (отключение алгоритма Нагла).
Попробуйте использовать другое приложение, например ...