понедельник, 19 марта 2012 г.

Оптимизация настроек драйверов для карт Intel

Оптимизация настроек драйверов для карт Intel

TCP segmentation offload (TSO)


Позволяет разгрузить процессор путем разделения больших пакетов и отправки их на обработку к сетевой карте. Если эта функция поддерживается можно включить ее посредством ethtool
# ethtool -K eth0 tso on
# ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: on
udp fragmentation offload: off
generic segmentation offload: off

# dmesg |grep TSO
e1000: eth0: e1000_set_tso: TSO is Enabled 
 
 


Ситуация: на одном хосте VMWARE ESX4.0 стоит две гостевых системы с OS CentOS 5.8, на одной поднят FTP-сервер, на другой шлюз в интернет iptables, NAT, запрет фрагментации пакетов. Скачивание с FTP из вне происходит крайне медленно, закачка нормально. Анализ пакетов показал, что с FTP сервера frame length при скачивании многим больше 1514 байт, шлюз не может их фрагментировать (т.к. вкл запрет на фрагментацию), соответственно пока они договариваются о размере фрейма уходит много времени, чем вызываются жуткие "тормоза" при скачивании. MTU на всех интерфейсах выставлено 1500. Вопрос: от чего это происходит ? Непонятно.

Временное решение: перенес FTP сервер на другой хост с VMWare ESX4.0.

Дальнейший анализ показал, что frame length больше 1514 байт ходят только внутри хоста VMWare ESX4.0 (в виртуальном коммутаторе), когда они покидают физический интерфейс и попадают в физический коммутатор то размер фрейма становится нормальным - 1514 байт. Такое ощущение, что их фрагментирует сам гипервизор. Вопрос открытый: отчего фрейм большого размера?

Попробовал варианты

1)
Поменял тип адаптера с Flexible на  E1000  - не помогло.

2)
[root@testhost /]# ethtool -K eth0 tso off
[root@testhost /]# dmesg |grep TSO
e1000: eth0: e1000_set_tso: TSO is Enabled
e1000: eth0: e1000_set_tso: TSO is Disabled
[root@testhost /]# ethtool -k eth0
Offload parameters for eth0:
Cannot get device udp large send offload settings: Operation not supported
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: off
udp fragmentation offload: off
generic segmentation offload: off
generic-receive-offload: off
 Вроде помогло.

  [root@ftp rc.d]# cat rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
ethtool -K eth0 tso off &

Комментариев нет:

Отправить комментарий