一剂良方克顽疾 英特尔I/O加速技术综述 『应用技术』 火柴天堂社区 - MatchTT

来源:百度文库 编辑:神马文学网 时间:2024/04/28 17:42:08
恩丹西酮 2007-08-30 14:02
越来越多的业务的成功依赖于快速的数据传输和处理。网络应用类型的不断创新,也在快速提升对于网络效能的需求。比如,IDC调查报告显示面世时间不长的iSCSI存储系统近几年推动了600%以上的以太网数据包的增长。
为了更快的向应用程序传输数据或者得到数据,IT经理们不断的在新型网络和存储架构上进行着投资,以期获得更高的效能。然而网络瓶颈却越来越成为阻碍这些投资发挥完全作用的最大障碍。
多种良方只为克顽疾一种
自从上个世纪80年代起,尽管IT技术有了巨大的进步,但是TCP/IP(网络堆栈)的处理方式却几乎没有变化。也就是说,即便用户使用最先进的CPU依然要处理那些未经优化的TCP/IP协议,由此产生巨大的系统开销并不奇怪。比如,TCP/IP协议的传输过程中需要封装、解包,这些动作对于处理器而言并不是一个复杂的过程,但是却是会占用处理器周期,而且网络带宽越高,这个问题越严重。

频繁的内存访问会影响CPU效能
系统开销的增大不仅仅表现在占用较多的处理器周期,还会导致处理网络相关数据导致时的内存访问效率降低的问题。这又会进一步的降低CPU效能和网络效率。
客户端请求/服务器响应的模式已经应用了多年,通过TCP/IP协议交换数据也已经是处理网络数据必需方法,因此了解基于传统模式的数据传输流程将有助于我们发现目前网络I/O中的“顽疾”所在。

数据进出服务器应用程序的流程
客户端通过网卡将请求以TCP/IP数据包的形式发送给服务器。数据包包括TCP报头信息和实际要传送的数据。
服务器处理TCP/IP包,然后将其中的信息分配给相应的应用程序。
运行在服务器上的应用程序获悉客户端请求,然后去存储器中查找所需的数据来响应请求
应用程序访问存储器来获得数据以满足客户端的请求
存储将应用程序所请求的数据反给应用程序
应用程序按照客户端的请求将从存储器调用数据进行处理
服务器将处理器结果封装成TCP/IP包然后传回客户端
这个过程中的各个环节均有各自的开销和延迟,这些开销和延迟包括处理客户端发送来的TCP/IP包、将包中有效数据发送给应用程序、获取存储信息和在将处理结果封装成TCP/IP包。在过去,网络流量较低,处理网络相关数据所产生的开销,远远低于用于执行正常任务的开销,所以并不被人所关注。现在,虽然网络流量的大幅度提升,处理网络相关数据所产生的系统开销则越来越不能忽视,甚至已经影响到了正常应用。
这些问题已经引起了业界的普遍关注,并且已经有了几种解决方案:
TOE(TCP Offload Engine,TCP卸载引擎)通过网卡上的专用处理器处理部分或者全部的封包,借此来降低对于系统处理器资源的占用,不过这种解决方案也只是对于具有某些特征的数据包有效;
RDMA(Remote Direct Memory Access,远程直接内存访问)是发送端系统直接将有效数据送至目的系统的指定的内存中,无需移动数据包的时间消耗,因此大大提升了网络传输的效率。但是这种技术需要专用的网卡,应用程序也需要进行修改,甚至还增加了一个RDMA层的封装过程,而且这种操作风险较高,因此目前看来还并非一个吸引人的解决方案;
Onloading技术将系统处理器作为处理网络流量的第一引擎,尽可能的提升CPU处理器网络数据包的效率,这种思想已经被英特尔借鉴。
这些方案中TOE是被应用非常广泛的,几乎每次关于I/OAT的技术讲座中,都会有听众询问两者之间的异同。从结果上看,两者非常的类似,都是尽量的提升网络处理效能,降低处理器负载。两种技术的实现方式却是南辕北辙,TOE仅仅着眼于NIC本身,通过增加协处理器来提升数据包的处理效率。I/OAT的精髓却是不局限于I/O问题的本身,从整个平台的层面入手解决问题。
恩丹西酮 2007-08-30 14:02
头痛不医头,第一代Intel I/O加速技术
平台化策略使得英特尔不再仅以推出速度更快的处理器为满足,他们更加注重整个平台的协调和平衡,任何浪费都可能会让他们在提升处理器性能上所做的努力付之东流。所以,英特尔在去年推出Bensley平台的同时,也推出了英特尔I/O加速技术(I/OAT),充分表达了“以应用为中心的服务器I/O观点”。
概括的来说,I/OAT是一个整合于系统平台中的用于移动数据、访问数据和降低网络I/O过程中系统开销的I/O解决方案。Intel I/OAT可以帮助从服务器应用程序中更快、更高效(占用更少的CPU周期)的获取数据。升级到支持I/OAT的平台,用户原来的应用程序立刻可以从中受益(比如可以同时访问更多的数据、处理更多用户的请求)而无需进行任何的修改。

Intel I/OAT主要在三个方面解决网络I/O瓶颈:
降低系统开销
实现流线型内存访问
优化TCP/IP协议计算
Intel I/OAT通过适度的中断、适度的内存访问、并行计算、数据移动和减少上下文切换等措施来降低系统开销。比如通过预取操作来提升内存访问和数据移动效率,直接访问子系统可用于卸载数据移动和异步拷贝,TSO(TCP segmentation offload)运算转移给网卡(NIC)或者板载LAN控制器(LOM),并且在数据流和特定的处理器核心之间建立密切的联系。这些技术可以降低网络I/O过程中的CPU占用率,包括协议计算,并且明显的降低由于缓存未命中和Cache line bouncing所引起的CPU停滞。

英特尔I/OAT所涉及的方方面面
如上图所示,Intel I/OAT涉及到服务器系统的方方面面:
Network Flow Affinity:分割网络堆栈处理并且动态的分配到多个物理或者逻辑CPU,这种方式可以使得数据得到更快的处理。
异步低成本拷贝:采用了增强型DMA,可以用更少的CPU时钟从系统内存中的网卡缓冲区复制有效数据到应用程序缓冲区,节约下来的CPU资源可以进一步提升应用程序的负载能力。
通过优化TCP/IP栈改进TCP/IP协议:主要优化分离封包头部和有效数据的处理。结合与栈相关的改进可以降低处理协议的时钟数量。
恩丹西酮 2007-08-30 14:03
I/OAT的微妙的生存环境
Intel I/OAT刚刚推出之初,其应用环境并不成熟,比如在Windows Server 2003 SP1系统上需要额外安装SNP包和特有的驱动程序,Linux世界尚未接纳这项技术,而且只有Intel自己生产的网卡控制器芯片能支持这个功能。我们曾经在2006年度服务器横评中发现,英特尔I/O加速技术所面临的局势非常微妙:

在这14台服务器中,有3台服务器采用了AMD Opteron平台,因此这21%的产品肯定不支持英特尔I/O加速技术,在剩余的11台服务器中,只有3台服务器支持TOE技术,剩余的8台服务器全部支持英特尔I/O加速技术,从数量上看英特尔I/O加速技术毫无悬念的取得了占有率的领先。
然而,我们发现此次参测的DELL POWEREDGE 2950服务器、HP ProLiant DL380 G5服务器、IBM X3650服务器全部选择了TOE技术,而没有采用英特尔I/O加速技术。这三家厂商在全球服务器市场占据什么样的地位自不必说,而这三款产品也是各家厂商的主力机型。

短短的一年之后,在IDF2007会议期间,我们获悉Intel I/OAT获得了很多重量级厂商的,其应用环境已经趋于成熟:
Linux 2.6.18内核支持
Novell SUSE Linux Enterprise 10支持
Micorsoft Server 2003 SNP支持
VMware ESX 3.x即将正式支持
恩丹西酮 2007-08-30 14:03
实战I/OAT部署
要正确的启用I/OAT功能,支持I/OAT的硬件、操作系统和驱动程序三个方面的条件缺一不可:
操作系统的支持
目前Windows Server 2003 with service pack 2可直接支持I/OAT,而Windows Server 2003 with service pack 1用户则需要安装Microsoft Scalable networking pack,这个补丁包为Windows Server 2003 SP1增加了新的体系结构增强功能和应用程序编程接口 (API),以支持下一代的网络加速和基于硬件的卸载技术。
此外,Linux 2.6.18及其以上版本内核、Novell SUSE Linux Enterprise 10等主流的Linux操作系统都已经支持该功能。
硬件设备的支持
笼统的来讲,目前只有基于Bensley平台的产品才支持I/OAT。比如,英特尔最新的双核Xeon 5000/5100系列处理器为处理网络堆栈进行优化,处理该类操作效率会更高。MCH芯片则整合了数据移动引擎(Data movement engine)。另外,在MAC层实现了硬件辅助加速——这个部分是需要我们重点强调的,属于Bensley平台体系的南桥芯片有两款:6311/6321ESB,只有其中的6321ESB支持英特尔I/OAT。

HY82563是一款配合6321ESB所整合的MAC功能的双端口PHY芯片,目前我们所接触到的Bensley平台均采用了这颗芯片
Intel给出了目前支持I/OAT的网卡的列表:
Intel PRO/1000 PT Server Adapter
Intel PRO/1000 PT Dual Port Server Adapter
Intel PRO/1000 PT Quad Port Server Adapter
Intel PRO/1000 PT Quad Port Low Profile Server Adapter
Intel PRO/1000 PF Server Adapter
Intel PRO/1000 PF Dual Port Server Adapter
Intel PRO/1000 PF Quad Port Server Adapter
Intel PRO/1000 PT Network Connection
Intel PRO/1000 PF Network Connection
Intel PRO/1000 EB Network Connection with I/O Acceleration
Intel PRO/1000 EB Backplane Connection with I/O Acceleration
Intel PRO/1000 PB Server Connection
Intel PRO/1000 PB Dual Port Server Connection
驱动程序的支持
如果要正确的启用I/OAT功能,用户还需要安装支持I/OAT功能的网卡驱动程序。如果安装的驱动程序不支持I/OAT功能,网卡还是可以正常工作的,但是在设备管理器中会发现网卡设备前面有黄色叹号的标记。

英特尔提供了一个名称为“Intel I/OAT System Check”的工具,这个工具可以检验用户的硬件是否支持I/OAT,I/OAT功能是否正确启用。图4-1显示该工具侦测到硬件平台支持I/OAT但是并没有启用。
根据我们的经验,在一台符合要求的服务器上部署Windows Server 2003 SP2可以较为容易的启用I/OAT功能,但是不少用户在Windows Server 2003 SP1上则遇到了问题。这里我们介绍一下方法:
第一步,安装Windows Server 2003 SP1

第二步,安装INF驱动程序包,INF 7.3.x.xxxx和INF 8.1.x.xxxx及其以上版本均可。安装INF驱动程序之后,设备管理器中发现一个名称为“Base System Device”的未知设备(如上图所示),这是启用I/O AT功能的重要设备。
第三步,安装KB912222更新程序,也就是Microsoft Scalable networking pack

第四步,安装1A38设备的驱动程序。一般需要通过设备管理器界面升级“Base System Device”,正确安装驱动之后,其被识别为“Intel 5000 Series Chipsets Integrated Device-1A38。”

在查看Intel 5000 Series Chipsets Integrated Device-1A38的设备属性,会发现一个名称为“Setting”的标签,在这里用户可以选择是否启用英特尔I/O加速技术。至此,我们成功的启用了I/OAT功能。
恩丹西酮 2007-08-30 14:03
TOE的实现,也是壁垒重重
从前面的介绍,用户会发现顺利的启用Intel I/OAT所具备的条件着实不少。用户如果要在服务器系统中引入TOE技术,那么也需要满足硬件、驱动程序、操作系统等三大方面的要求。

以我们在过去所测试的DELL POWEREDGE 2950服务器、HP ProLiant DL380 G5服务器、IBM X3650服务器这三款支持TOE技术的服务器为例,它们均配置了采用Broadcom BCM5708或者BCM5706C芯片的千兆网卡,这两个系列的芯片才支持TOE、RDMA、iSCSI等加速技术。
用户需要使用Broadcom NetXtreme 8.3和NetXtreme II 2.6及其以上版本的驱动程序才能支持TOE等技术。
用户在Windwos Server 2003 SP1操作系统上也需要安装Microsoft SNP补丁才能实现对于TOE的支持。Liunx世界因为可靠性等原因,并没有实现对于TOE的正式支持,比如Redhat目前的Red Hat Enterprise Linux版本并不支持这个功能,而且未来的版本也不会提供支持(http://kbase.redhat.com/faq/FAQ_45_4898.shtm)。
Intel I/OAT广泛部署于基于Benlsey平台设计的服务器上,有点类似于标准配置的味道,而TOE则不同,它需要用户根据情况另外花钱购买。比如部分Dell服务器的板载网卡是支持TOE功能的,但是用户需要另外购买硬件钥匙才能启用该功能。
应用TOE的限制也不少,如果系统中安装或激活某些防火墙、构建VPN服务器、启用桥接功能、启用路由服务、启用IPNAT、启用IPSec等功能时,TOE均无法正常工作。Intel I/OAT则没有这些限制。
恩丹西酮 2007-08-30 14:04
英特尔I/OAT效能实测
我们在如下表所示的平台上配置了文件服务器,然后利用Netbench v7.03 NIC.tst测试脚本进行了测试,同时利用Windows Server 2003内置的“系统监视器”监测处理器占用率。
测试平台配置
主板
Gigabyte GA-7BESH-RH
芯片组
Intel 5000P+6321ESB
驱动程序
INF 7.3.1.1013
处理器
Intel Xeon 5080
主频
3.73GHz
FSB
1066MHz DIB
L2容量
2 x 2MB
处理器设置
XDbit Disable
EIST Disable
C1 State Disable
HyperThreading Disable
内存
三星512MB 1Rx8 PC2-4200F x8
内存时序
444-11
磁盘控制器
LSI Logic MegaRaid SAS 8408E RAID卡
硬盘
FUJITSU MAX3147RC x 4
驱动程序
1.17.0.32
磁盘设置
四块硬盘配置为RAID 5模式,磁盘分为两个分区,均为NTFS格式,系统默认簇,主分区20GB,其它分为扩展分区,共享文件夹、磁盘测试均在格式化后的扩展分区进行
操作系统
Microsoft Windows Server2003,5.02.3790,SP1
网卡
Intel Pro/1000EB Network Connection with I/O Acceleration
驱动程序
9.3.28.0(1/23/2006)
这款基于英特尔Bensley平台的服务器采用了Xeon 5080处理器(Dempsey核心,3.73GHz),可支持I/OAT技术。

测试平台1:未开启I/O AT功能时处理器负载

测试平台1:开启I/O AT功能时处理器负载
从上面的数据可以看出,未启用I/OAT技术时,运行NIC.tst测试时处理器负载大约是15.3%,而开启I/OAT技术之后,处理器负载为12.5%,处理器负载下降幅度为18%。
英特尔的公布的资料中展示了I/OAT在Linux和Windows Server 2003两种操作系统中的表现。一个硬件平台是基于E7520芯片组构建的不支持I/OAT功能,一个硬件平台则是基于Benlsey平台构建的支持I/OAT功能。每台服务器中都安装8个千兆网卡,读者会发现I/OAT在多网卡应用中其作用更加明显。

Linux环境下,在2端口的时候,支持I/OAT的平台和不支持I/OAT的平台的吞吐量差异不大,但是CPU占用率却有巨大差异,前者只有7%而后者则达到了24%。
4-8端口时,不支持I/OAT的Intel E7520平台的吞吐量基本稳定在4000Mbps左右,甚至还有轻微下降的趋势,但是此时CPU已经几乎是满载了。支持I/OAT的新双核Intel Xeon平台的吞吐量却基本上保持了线性增长,当8端口时吞吐量已经达到了11000Mbps以上,而CPU占用率依然只有56%。

在Microsoft Windows Server 2003操作系统下的测试结果所表现出来的趋势同Linux操作系统下的测试结果相同。支持I/OAT功能的双核Xeon平台处理器占用率在11-70%之间(占用CPU资源比Linux平台略高),而吞吐量也是在4000-11000Mbps之间。各位读者一定注意到,上图中并没有在Intel E7520平台上的CPU占用率曲线,主要是在4端口时,该系统已经完全饱和,无法很好的侦测处理器占用率了。
恩丹西酮 2007-08-30 14:04
直接缓存访问,第二代I/OAT
英特尔计划在2007年将会全面升级DP和MP服务器平台,无论是定位于嵌入式应用的Cranberry Lake平台、还是定位于主流双路处理器的Stoakley平台、或者是定位于多路处理器的Caneland平台,都将会支持新一代的I/OAT2技术(代号Crystal Beach2)。
I/OAT2有两个主要的设计目的,第一个是进一步增强数据中心网络I/O能力,第二个继续保持英特尔I/OAT的无状态架构优势。同样,I/OAT2依然是一个平台级的I/O优化方案,涉及到了CPU、芯片组、网卡控制器、等多个方面。

第一代的I/OAT通过增强软件接口、软件预取到CPU、优化数据流等措施,实现对于TCP协议栈的优化处理。新一代的I/OAT2利用DCA(Direct Cache Access,直接高级缓存访问)技术,进一步降低频繁存取内存对系统性能所造成的负面影响。I/OAT2通过芯片组支持QuickData技术,该技术通过直接将网络数据放入内存中无需处理器参与,从而加速了标准网络数据的传送过程。英特尔在此基础上增加了DCA和MSI-X等功能,以提升数据传输和复制的效率。
支持IOAT2的网卡控制器不仅支持无状态卸载,TCP分配&效验和卸载,优化多队列&数据流,分离头部/有效负载等功能,还通过增加对于DCA、MSI-X、中断快速响应、头部分离/复制等功能的支持,提升IO效能。

可以看到DCA和MSI-X两个功能是此次IOAT2所带来的主要改进。DCA(Direct Cache Access,直接高级缓存访问)基本工作原理是使得CPU高速缓存中的数据可以被网络控制器优先访问,一方面充分利用缓存中的数据,另外一个方面利用高速缓存低延迟的特性,来避免CPU频繁的访问内存,降低系统开销。DCA有两种基本的工作模式,当处理小型I/O任务的时候,甚至不需要芯片组中QuickData引擎的参与,只有当处理大型I/O任务的时候才需要。
MSI-X(Extended Message Signaled Interrupts,扩展消息信号中断)是MSI(消息信号中断)的增强版本,是PCIe 1.1规范中增加的新特性,可以将PCIe总线中的数据封包进行更灵活的分割,满足不同应用的需求。在I/OAT2中结合了直接内存访问、选择性中断行为的流量区别等功能,提供了更快的中断速度。
I/OAT2还支持头部分离/复制这一新特性。头部分离是TCP/IP协议处理过程中一个必不可少的过程,I/OAT2将来自数据/有效负载的TCP、IP头部放入不同的内存缓冲中。头部复制动作则是将头部进行拷贝并放置于不同的缓冲中,然后将整个数据包放入另一个缓冲中。头部复制可用于处理更长的头部。

I/OAT2顺应服务器应用虚拟化潮流,可提供更高效的网络数据传输,比如VM、VMM网络协议栈处理效率均可受益,该技术还可以加速数据从网络NIC硬件队列到虚拟NIC的移动。此外还利用了VMDq(NIC使用多硬件队列给VMM软交换机加速)来提升虚拟化应用的效能。
英特尔将会于9月上旬发布新的服务器平台,届时I/OAT2技术也会正式浮出水面,它的效能将会对于英特尔新平台在网络应用中的表现有着重大影响,我们期待着能够尽快验证并享用这一新的平台技术。