2006年9月12日,英特尔专门在北京中国大饭店召开了一场主题为“优化平台、提升效率”的技术研讨会。期间,英特尔详细的剖析了I/O加速技术,并且详细的解答了关于服务器应用中I/O相关的问题。
英特尔指出,目前之所以网络带宽投资和产出不成正比的原因主要包括两个方面。原因之一是,网络应用的类型增加快速,而每种应用所需要处理的数据量也越来越多,服务器所要面临的数据增长速度甚至有超过服务器性能增长的趋势。原因之二是,自从上个世纪80年代起,尽管技术上有巨大的进步,但是TCP/IP(网络堆栈)的处理方式却几乎没有变化,这也就是说当前非常先进的CPU依然要处理那些未经优化的TCP/IP协议。比如,TCP/IP协议的传输过程中需要封装、解包,这些动作对于处理器而言并不是一个复杂的过程,但是却是会占用处理器的时间,而且网络带宽越高,这个问题越严重。
图1-1:9月12日,英特尔公司亚太区通信市场总监程宇樑在北京向 主流媒体介绍I/O加速技术 |
目前有几种技术在试图提升网络应用的效能,降低网络应用对于系统处理器资源的占用。TOE(TCP Offload Engine,TCP卸载引擎)通过网卡上的专用处理器处理部分或者全部的封包,借此来降低对于系统处理器资源的占用,不过这种解决方案也只是对于具有某些特征的数据包有效;RDMA(Remote Direct Memory Access,远程直接内存访问)是发送端系统直接将有效数据送至目的系统的指定的内存中,无需移动数据包的时间消耗,因此大大提升了网络传输的效率。但是这种技术需要专用的网卡,应用程序也需要进行修改,甚至还增加了一个RDMA层的封装过程,而且这种操作风险较高,因此目前看来还并非一个吸引人的解决方案;Onloading技术将系统处理器作为处理网络流量的第一引擎,尽可能的提升CPU处理器网络数据包的效率,这种思想已经被英特尔借鉴。
客户端请求/服务器响应的模式已经应用了10多年的时间了,而通过TCP/IP协议交换数据也已经是处理网络数据必需方法,因此了解基于传统模式的数据传输流程将有助于我们发现目前网络I/O中的问题。
图1-2:数据进出服务器应用程序的流程,这个过程中的各个环节 均有各自的开销和延迟,这些开销和延迟包括处理客户端发送来 的TCP/IP包、将包中有效数据发送给应用程序、获取存储信息和 在将处理结果封装成TCP/IP包 |
-
客户端通过网卡将请求以TCP/IP数据包的形式发送给服务器。数据包包括TCP报头信息和实际要传送的数据。
-
服务器将TCP/IP包进行处理,然后将其中的信息分配给相应的应用程序。
-
运行在服务器上的应用程序了解了客户端请求,然后去存储器中查找所需的数据来响应请求
-
应用程序访问存储器来获得数据以满足客户端的请求
-
存储将应用程序所请求的数据反给应用程序
-
应用程序按照客户端的请求将从存储器调用数据进行处理
-
服务器将处理器结果封成TCP/IP包然后传回客户端
图1告诉我们网络封包必需经过接收、验证和处理才能将其中的有效数据提供给应用程序。运行服务器上的应用程序常常需要从内存取出必要的数据并且将结果返回给服务器。最后,服务器必需将应用程序影响结果封装到TCP/IP包中然后发回给客户端。显然网络I/O瓶颈是多方面因素造成的,是一个平台层面的问题。