Назад | Перейти на главную страницу

Полный MTU не используется при включенных jumbo-кадрах

Я тестировал, могу ли я получить какую-либо пользу от включения 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 (отключение алгоритма Нагла).

Попробуйте использовать другое приложение, например ...

  • HTTP (веб-сервер на одном хосте, извлечение больших файлов на другом сервере)
  • NFS (смонтировать с "rsize = 8192, wsize = 8192")
  • Разместите свои данные postgres с помощью SOAP
  • Попробуйте MySQL, DB2 Express, Oracle XE, Sybase Anywhere (с пакетами 4 КБ или больше). Если какая-то другая база данных лучше заполняет jumbo-пакеты теми же таблицами, данными и запросами, сообщите об ошибке разработчикам Postgres.