Linux系统网络性能实例分析( 五 )

2、 Netperf3(千兆位以太网调优实例分析) 价格日益降低的千兆位以太网卡正快速取代百兆位以太网卡 。 当前 , 系统制造商在主板上提供了千兆位以太网支持 ,系统供应商和集成商也选择使用千兆位以太网卡和交换机来连接磁盘服务器、计算机中心以及部门骨干网 。 下面讨论 Linux操作系统中的千兆位网络性能 , 以及千兆位以太网调优对网络性能的改进 。千兆位以太网卡(Intel Gigabit Ethernet和 Acenic Gigabit Ethernet)提供了几个有利于处理高吞吐率的额外特性 。 这些特性包括对巨型帧(MTU)长度、中断延迟(interrupt-delay)以及TX/RX描述符的支持:

  • 巨型帧长度 。 千兆位以太网卡的 MTU长度可以大于 1500B 。 百兆位以太网中 1500B的 MTU限制不再存在 。 增加MTU的大小通常能够改进网络吞吐率 , 但必须确保网络路由器支持巨型帧长度 。 否则 , 当系统连入百兆位以太网络时 , 千兆位以太网卡会降至百兆位的能力 。
  • 中断延迟/中断合并 。 可以针对接收中断和传输中断设置中断合并特性 , 使得 NIC在指定时间内延缓生成中断 。 例如 , 当 RxInt设置为 1.024μs(这是 Intel GigabitEthernet网卡上的默认值)时 ,NIC将收到的帧放入内存中 ,在经过 1.024μs后才生成一个中断 。 这个特性减少了上下文切换次数 , 因此可以改进 CPU效率 , 但它同时也增加了接收报文的延迟 。 如果针对网络流量对中断合并特性加以适当调优 , 也能够改进 CPU效率和网络吞吐率性能 。
  • 传输和接收描述符 。 千兆位以太网驱动程序使用这些参数来分配数据发送和接收缓冲区 。 增加其取值可以允许驱动程序缓冲更多的输入报文 。 每个描述符都包含一个传输和接收描述符缓冲区以及一个数据缓冲区 。 这个数据缓冲区的大小依赖于MTU长度 。 对于本例的驱动程序 ,MTU最大长度为 16110 。
【Linux系统网络性能实例分析】 关于千兆位以太网的其他研究也表明 , 系统大约需要 1GHz的 CPU处理能力来处理每千兆位网络流量 。 笔者的实验也证实了这一点 。但添加更多数量的 GHz处理器和千兆位以太网卡并不会相应地提高网络吞吐率 , 即使在 GHz处理器数目等于千兆位以太网卡数量的情况下 。 在 SMP处理器上 ,其他瓶颈如系统总线会影响到千兆位以太网卡的可伸缩性 。NIC测试表明 ,4个网卡中只有 3个网卡可以达到通信介质速度 。在一台主频为1.6GHz的4路Pentium 4机器与4台客户机(主频为1.0GHz的Pentium3)之间执行这些测试 , 这些机器拥有可达到通信介质速度上限的千兆位网卡 。 所有机器都使用 Linux 2.4.17 SMP vanilla内核 。e1000驱动程序的版本号是4.1.7 。 测试类型是Netperf3的 PACKET_STREAM和 PACKET_MAERTS , 其 MTU都是 1500B 。Pentium 4机器拥有 16GB RAM和 4个 CPU 。 4个 NIC均等分布在 100MHz和 133MHz PCI-X插槽之间 。 在Pentium 4系统上禁用了超线程特性 。PACKET_STREAM测试只传输没有任何 TCP/IP报文头部的原始数据 。 它不通过TCP/IP协议层次来传输或接收报文 , 只是为了测试 CPU、 内存、 PCI 总线和 NIC驱动程序以查找这些部件中的瓶颈 。 它使用不同值来调优千兆位驱动程序的中断延迟以及传输和接收描述符 , 以确定这些参数针对环境的最佳取值 。 另一个调优选项是改变 socket缓冲区容量 。如下表所示 , 在这 4个网卡中 , 可达到的最大吞吐率是 2808Mbps , 实现该吞吐率的调优参数设置如下: 传输和接收描述符数量为 4096 ,接收端和发送端的中断延迟都为 64 ,socket缓冲区大小约为 132?000。
Linux系统网络性能实例分析文章插图


推荐阅读