I/OAT——英特尔的解决方案
伴随着英特尔Bensley平台的发布,英特尔同时抛出了I/OAT(I/O加速技术)的概念。概括的来说,I/OAT是一个整合于平台中的用于移动数据、访问数据和降低网络I/O过程中系统开销的I/O解决方案。Intel I/OAT可以帮助从服务器应用程序中更快、更高效(占用更少的CPU周期)的获取数据。升级到支持I/OAT的平台,用户原来的应用程序立刻可以从中受益(比如可以同时访问更多的数据、处理更多用户的请求)而无需进行任何的修改。
图2-1 |
Intel I/OAT主要在三个方面解决网络I/O瓶颈:
-
降低系统开销
-
流线型内存访问
-
优化TCP/IP协议计算
Intel I/OAT通过适度的中断、适度的内存访问、并行计算、数据移动和减少上下文切换等措施来降低系统开销。比如通过预取操作来提升内存访问和数据移动效率,直接访问子系统可用于卸载数据移动和异步拷贝,TSO(TCP segmentation offload)运算转移给网卡或者板载LAN控制器,并且在数据流和特定的处理器核心之间建立密切的联系。这些技术可以降低网络I/O过程中的CPU占用率,包括协议计算,并且明显的降低由于缓存未命中和Cache line bouncing所引起的CPU停滞。
-
Network Flow Affinity:分割网络堆栈处理并且动态的分配到多个物理或者逻辑CPU,这种方式可以使得数据得到更快的处理。
-
异步低成本拷贝:采用了增强型DMA,可以用更少的CPU时钟从系统内存中的网卡缓冲区复制有效数据到应用程序缓冲区,节约下来的CPU资源可以进一步提升应用程序的负载能力。
-
通过优化TCP/IP栈改进TCP/IP协议:主要优化分离封包头部和有效数据的处理。结合与栈相关的改进可以降低处理协议的时钟数量。
所有的这些改进可以有效的促进网络性能,它们的统称就是英特尔I/OAT。
需要注意的是,封包大小的变化也会使得上述的几个方面的对于网络I/O的影响的比重发生变化。一般来说,I/O尺寸越小,系统开销会越大,这也就意味着应用不同或者说需要传输的数据类型不同,其所面临的问题也是有所不同的。如图2-3所示,TCP/IP处理所占用的CPU资源远比系统开销和内存访问低,因此我们所熟悉的TOE技术所能发挥的作用也是很有限的。此外,将网络堆栈卸载的任务交给一个具有固定速度的微处理器,其风险也是可想而知的,这也是为什么关键网络配置中并不会应用TOE功能的原因。
支持RDMA协议的网卡可以直接将有效数据存放于应用程序的内存空间从而降低数据移动过程所产生的开销。RDMA在现有网络协议上的附加协议,为了安排每次数据传输它当然也会产生自己的开销。
RDMA并没有将这些任务分配给CPU,而是利用TOE(TCP offload Engine)。通过将TOE和RDMA结合在一起,来改进数据移动和卸载处理这两个协议所需的开销。RDMA的缺点也很明显,它需要修改应用程序,使得它们可以支持RDMA功能,因此只有少数的服务器环境可以支持RDMA协议。此外,RDMA是一个端到端协议,它需要所有参与数据传输的系统都支持该协议。因为这些原因,使得RDMA的接受度并不高。
相对而言,英特尔I/OAT则可以解决所有的服务器I/O瓶颈问题,而且仅仅使用TCP/IP协议无需对于现有或者未来的应用程序做修改。