使用 igb 驱动程序的 Intel 1Gbps 网卡虚拟网络 I/O 性能低下
search cancel

使用 igb 驱动程序的 Intel 1Gbps 网卡虚拟网络 I/O 性能低下

book

Article ID: 340022

calendar_today

Updated On:

Products

VMware vSphere ESXi

Issue/Introduction

Symptoms:
免责声明:本文为 Low virtual network I/O performance with Intel 1Gbps NIC using igb driver (2018891) 的翻译版本。尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。有关最新内容,请参见英文版本。


  • 在虚拟环境中,对于特定工作负载和(或)配置,在使用 igb 驱动程序的 Intel 1Gbps 网卡上所达到的网络性能可能低下,这是因为 igb 驱动程序的中断限制率对于该负载而言并非最优。
  • Intel 82576 和 Intel i340T4/i350 的网络带宽达不到支持的 1 Gb/s
  • 执行速度比其他 1Gb/s 的网卡慢


Environment

VMware vSphere ESXi 5.1
VMware vSphere ESXi 5.5
VMware vSphere ESXi 5.0

Resolution

Igb 驱动程序的 InterruptThrottleRate 参数可调节适配器产生中断时的限制率,该参数会影响网络和系统性能。Igb 驱动程序使用动态保守模式(设置 3)作为根据传入流量动态调整 InterruptThrottleRate 的默认值。InterruptThrottleRate 的有效范围如下:
  • 0 代表关闭
  • 1 代表动态
  • 3 代表动态保守(默认)
  • 100-100000 表示对适配器编程以发送大量每秒中断数中的最大值(即使有更多包到达)
当默认动态保守模式导致性能下降时,考虑将 InterruptThrottleRate 设置为动态或静态值。在大多数环境中,将 InterruptThrottleRate 设置为动态值应增加中断率,并会提高性能。但是,在某些环境中,即使采用动态模式也不能使中断裁决率达到最优,在这些环境中,将 InterruptThrottleRate 设置为一个静态值可能更合适,可以产生更好的性能。
要将 InterruptThrottleRate 设置为动态值,请在 ESXi 主机上运行以下命令:

vmkload_mod driver_name InterruptThrottleRate=value,value
例如:

vmkload_mod igb InterruptThrottleRate=8000,8000
注意:值为 1 即将限制率设置为动态值。每个值都代表一个端口。例如,上述命令用于两个端口。视可用端口数量而定,可以添加更多的值(用逗号分隔)。对于四端口适配器,命令为:
vmkload_mod igb InterruptThrottleRate=8000,8000,8000,8000
或者,使用 esxcfg-module 在整个 ESXi 重新引导过程中保留此参数。例如,为使用一个双端口适配器和一个单端口适配器的 ESXi 主机设置参数。

# esxcfg-module -s "InterruptThrottleRate=8000,8000,8000" igb

验证命令 ethtool -c vmnicX 的输出。

注意:确保 rx-usecs 设置为 125,表示中断最近发生了更改。

注意:将 InterruptThrottleRate 设置为静态值将对适配器编程以发送大量每秒中断数中的最大值(即使有更多包到达)。将该值设置为低于 3000 的值会减少系统上的负载,并会降低 CPU 利用率,但由于不能快速处理包,会增加延迟并降低吞吐量。对于大多数流量类型,InterruptThrottleRate 的值为 8000 时,可以获得良好的性能,但对小型包的性能和延迟则不足。对于包含小型包并且需要极低延迟的网络流量,考虑使用更大的 InterruptThrottleRate 值。

有关详细信息,请参见 Intel 网站上的 Linux* Base Driver for Intel(R) Ethernet Network Connection


Additional Information

Low virtual network I/O performance with Intel 1Gbps NIC using igb driver