【IDF2007报道】
为什么需要I/O加速技术?
近些年,网络应用的类型不但越来越多,对于网络带宽的需求也越来越高。比如iSCSI存储系统虽然面世时间不长,但是IDC调查报告显示其推动了以太网上600%以上的数据包量的增长。
另一方面,自从上个世纪80年代起,尽管IT技术有了巨大的进步,但是TCP/IP(网络堆栈)的处理方式却几乎没有变化,这也就是说当前非常先进的CPU依然要处理那些未经优化的TCP/IP协议。比如,TCP/IP协议的传输过程中需要封装、解包,这些动作对于处理器而言并不是一个复杂的过程,但是却是会占用处理器的时间,而且网络带宽越高,这个问题越严重。
频繁的内存访问,耗费了大量宝贵的处理器时钟周期 |
平台化策略使得英特尔不再仅以推出速度更快的处理器为满足,他们更加注重整个平台的协调和平衡,任何浪费都可能会让他们在提升处理器性能上所做的努力付之东流。所以,英特尔在去年推出Bensley平台的同时,也推出了英特尔I/O加速技术(I/OAT),充分表达了“以应用为中心的服务器I/O观点”。
现有的Intel 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)运算转移给网卡或者板载LAN控制器,并且在数据流和特定的处理器核心之间建立密切的联系。这些技术可以降低网络I/O过程中的CPU占用率,包括协议计算,并且明显的降低由于缓存未命中和Cache line bouncing所引起的CPU停滞。
英特尔I/OAT所涉及的方方面面 |
-
Network Flow Affinity:分割网络堆栈处理并且动态的分配到多个物理或者逻辑CPU,这种方式可以使得数据得到更快的处理。
-
异步低成本拷贝:采用了增强型DMA,可以用更少的CPU时钟从系统内存中的网卡缓冲区复制有效数据到应用程序缓冲区,节约下来的CPU资源可以进一步提升应用程序的负载能力。
-
通过优化TCP/IP栈改进TCP/IP协议:主要优化分离封包头部和有效数据的处理。结合与栈相关的改进可以降低处理协议的时钟数量。
I/OAT获得越来越多的业界支持
Intel I/OAT推出之后,其应用环境并不成熟,比如在Windows Server 2003系统上需要额外安装SNP包和特有的驱动程序,Linux世界尚未接纳这项技术,而且只有Intel自己生产的网卡控制器芯片能支持这个功能。
在IDF2007会议期间,我们获悉Intel I/OAT的应用环境已经趋于成熟:
-
Linux 2.6.18内核支持
-
Novell SUSE Linux Enterprise 10支持
-
Micorsoft Server 2003 SNP支持
-
VMware ESX 3.x即将正式支持
而且,会议期间英特尔表示Broadcom也已经实现了对于该技术的支持,I/OAT运行的硬件平台不再仅是Intel的产品了。
I/OAT2的新特性
英特尔计划在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/OAT通过芯片组支持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/O加速技术只能应用于GbE网络设备上,新一代的I/O加速技术可扩展应用于10GbE网络设备上——在10GbE环境中,其作用将会更加明显。
I/OAT2的虚拟化应用
服务器平台的多核化趋势使得虚拟化成为了充分发挥高密度计算资源的不可获取的应用。过去的平台上,几台虚拟机(VM)之间共享网卡端口的虚拟机(VMM)软件的开销,服务器虚拟化应用中I/O性能损失非常的显著,也就影响的虚拟化的效能。
英特尔通过提升虚拟化运行平台和NIC硬件的性能来提升虚拟服务器的运行效率。I/OAT可以在虚拟系统中继续发挥效能,使得网络数据传输更高效(I/OAT可提高VM、VMM网络协议栈处理效率,还可以加速数据从网络NIC硬件队列到虚拟NIC的移动)。此外还利用了VMDq(NIC使用多硬件队列给VMM软交换机加速)来提升虚拟化应用的效能。
I/OAT2 不再是“头痛医头”
在每场的关于I/OAT2的技术讲座中,都会有听众问英特尔I/OAT同现有的TOE等技术有什么不同。从结果上看,两者非常的类似,都是尽量的提升网络处理效能,降低处理器负载。两种技术的实现方式却是南辕北辙,TOE仅仅着眼于NIC本身,通过增加协处理器来提升数据包的处理效率。I/OAT的精髓却是不局限于I/O问题的本身,从整个平台的层面入手解决问题。