Оптимизация настроек драйверов для карт 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 /]# 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
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
Вроде помогло.
Комментариев нет:
Отправить комментарий