本文是针对在基于主机的网络应用程序中采用通用CPU的相关优势及陷阱进行深入挖掘分析,并就当前被用于基于主机的网络以提供更好性价比的不同服务器网络硬件技术进行探讨的系列文章的第三部分。在本系列文章的第一部分中,我们主要讨论了基于主机的网络和当使用通用CPU以部署数据路径时所潜在的问题。同时,我们还探讨了智能服务器适配器对于硬件加速和服务器卸载的重要性。而在本系列文章的第二部分中,我们探讨了当前被用于这类智能服务器适配器的三大基本技术,并就为基于主机的网络应用程序提供最佳性价比的解决方案提供了相应的指导和建议。在最后一部分文章中,我们将与大家共同探讨促成智能服务器适配器在未来几年成为数据中心主流技术的几大关键要素。
在最近几年中,许多数据平面处理的实例都已经得到了长足的发展,无论是在开源社区还是在数据中心运营商内部的商业部署。例如,开放虚拟交换机( Open Virtual Switch ,OVS [ 1 ])的用户空间和内核组件已经发展演化到引入了更先进和更具可扩展的隧道和数据流处理能力。OVS的内核模块处理隧道与交换。该内核还针对不重叠或精确匹配的数据流实现了一个快速缓存机制。最近,支持隧道的诸如VXLAN [ 2 ]和通配符匹配规则也已经被添加到数据路径。在诸如微软Azure这样的商业部署中,虚拟交换机支持网络虚拟化的租户,以及复杂的匹配操作功能,如负载平衡和安全性。在谷歌Andromeda网络,数据包处理节点为防火墙、安全、速率限制、路由等提供匹配数据流和数据平面处理等功能。
在主机或服务器领域,基于主机的网络数据平面处理已经获得了演变,部署在通用CPU如x86指令架构的软件中。然而,不同于在这样的通用CPU执行传统的处理任务,数据平面处理,及更特别的隧道的封装和解封以及基于流的匹配处理是独特的。当他们在通用的CPU上执行时,这种独特性会带来显著的不足。替代方案已被提出,如在多核SoC或FPGA运行数据平面,但如本系列文章的前几部分所提到的那样,这些方法只能提供边际收益。
有效且规模化的实施数据平面处理需要处理核心和产品的架构元素是由特殊成分专门打造的。接下来,我们将着重讨论成功的七大重要因素。
关键因素1:处理器的多线程
流处理需要访问内存,诸如基于RAM的DDR3-或DDR4-。为了协助在CPU核心的处理,基于硬件的加速器处理重复或专门的功能,例如加密和散列。单线程处理,通过通用CPU(如标准的x86,MIPS和ARM内核)、内存和加速器存取延迟浪费CPU周期。例如,访问DDR3内存需要几百个CPU周期,而访问硬件加速器可能需要更长的的周期,使CPU核心闲置无用,在这一延长期间有效性无用。对于典型的基于主机的数据平面处理任务,这个问题往往会降低CPU的有效利用率约10-20%。软件定制编码技术可以填补延迟差距,但这些变化是费时且相当麻烦的,并且其减少了软件的可移植性。
解决该问题的一个理想的办法是实现高度多线程的处理核心。当处理核心多线程(例如,每个核心八线程),处理器流水线可以始终执行有用的指导,而不会停滞或闲置。其结果是,较之单线程机器的存储器或硬件加速器的访问要求显著,而在典型的基于主机联网和新兴NFV应用程序的数据平面处理的情况下,多线程处理增益可以高达800%。
关键因素2:许多处理器核心优于一些更快的核心
通用CPU通常是针对最高处理器时钟速度以功率和面积为代价实施了优化的。例如,超过15个阶段的大型复杂管道,乱序执行和分支预测能力在这样的CPU中是常见的。如前面所解释的,由于缺乏多线程,以减少内存延迟的影响,也同样需要大的高速缓存。当这样的通用的CPU核心被打包成一个单一的硅芯片,如在MIPS-或基于ARM的多核SoC,有效性能增益比包装在相同的硅芯片的大量较小的处理核更低。换言之,在硅芯片使用更加优化的多线程处理核心要比使用较少的具备很少或没有线程和大型高速缓存的高性能通用CPU核心的数据平面处理更好。使用大型处理器内核会有显著的开销,其价格和功耗在服务区适配器设计中已经被设置,作为通用服务器用于计算节点显示。
关键因素3:内存和加速器的多线程
在数据密集的流处理,对于内存和硬件加速器的有效访问是相当关键的,但该挑战仅仅只是加剧了大量的流量和复杂的处理(如用于匹配和复杂操作的元组数目)。鉴于越来越多支持更多的用户,租户和应用程序的需要,以及对于安全性和服务水平相关的严格监管政策的要求,这样的要求,必然会成为数据中心普遍的问题。虽然更快地访问内存是很重要的,但多线程访问内存更为重要。一个具备硬件加速器的多线程的内存子系统可以确保避免处理核心停滞。这样一个高效的设计的一个例子是使用多个具备高带宽纵横输入SRAM内存库。采用专用的高性能紧耦合的硬件引擎执行关键功能如原子、统计、查询和负载平衡来访问这种SRAM内存库,进一步实现了加速。
关键因素4:高性能分布式网格构造
以上介绍的多线程处理核心,硬件加速和多组存储单元必须同步,提供高性能的同时避免停滞。在访问共享资源时,传统的共享总线结构受到带宽饱和和负载的竞争问题的作用。这个问题可以通过在处理元件之间使用具备多比特分带宽/对半带宽 (bisection bandwidth)的一个有效的高性能分布式网格构造来避免。这种分布式的网格构造会避免冲突和在通用的基于CPU的SoC常见的共享总线结构饱和的问题。
关键因素5:优化基于主机的网络的编程工具
虽然乍看之下,通用CPU内核似乎很容易编程,例如,通过使用标准的基于C语言的编程工具,但当试图让应用程序并行及性能规模化的时候,其难度和复杂程度大幅增加。所以从这个意义上说,它们缺乏对于开发优化的数据平面处理应用程序良好的支持。当编程的多线程处理核心时,采用强大的、易于使用的、基于C语言的程序工具以支持并行编程环境,并在编程期间支持提供线程级可视化是相当关键的。他们也应该允许创建针对多线程操作优化的数据平面处理程序。
除了基于C编程工具,正在支持高级编程语言,如P4[3]正成为可能,其能够使说明和数据路径的功能的代码更简单并且不那么耗时。使用开源的P4语言,设计人员可以编写简洁的程序,以灵活地定义匹配,操作处理,以快速部署新的协议,如新兴的网络覆盖 。P4也是硬件无关的,所以它可以被重新定向到不同的技术和实现方式中,条件是它们支持P4的环境。
关键因素6:命中计算节点经济
智能服务器适配器正在不断的以自然的方式发展,从低容量的特殊应用程序开始,有望成为大容量的主流部署。采用多内核SoC芯片的初始部署都发现了他们进入设备和专用的服务器的方式,有时被称为服务节点或网络节点。在这样的应用程序中,一些情况下使用网络处理器和FPGA。由于服务节点的部署量并没有非常大,数据中心运营商都愿意为数据平面处理的可编程服务器适配器支付溢价。
尽管基于主机的软件定义网络(SDN)和网络功能的虚拟化(NFV)技术已经成为数据中心应用的主流,然而,对于智能服务器适配器在更高容量的计算节点的需求预计会大幅上升。这种情况将需要智能服务器适配器能够较之早期服务节点部署提供更好的性价比。具体而言,这样的适配器将不得不在今天部署的大多数服务器的25瓦的PCI Express总线封装内以线速运行。最重要的是,他们必须有合理的价格,以支持计算节点服务器的容量经济。因此,在可编程服务器适配器的硅技术和数据平面处理架构必须实现性能,规模性和经济性。上述从1至5的五大关键因素均要求满足数据平面处理在25-, 40- and 50GbE带宽的要求,同时命中数据中心运营商们对于计算节点经济的预期。
关键因素7:为主流应用做好准备的软件系统
除了满足性能、功能、价格和功耗方面的要求,主流对于可编程的服务器适配器的采用将需要一个良好支持的软件系统。具体来说,服务器操作系统内核、用户空间和虚拟交换机的网络软件堆栈必须支持安装和运行这样的服务器适配器,可以卸载数据平面处理如虚拟网络隧道和匹配相关流程处理操作。
易于与现有的服务器应用程序、开源软件和最大特征功能的快速集成整合是一套解决方案能够获得成功的至关重要的原因。举个例子,卸载运行在现有的开放源代码解决方案上的架构,如Open vSwitch,而不是用专有或分叉的解决方案来替换它们,无疑会占上风。关键的一点是,当任何新功能在开源社区中实现部署时,必须向上融入相应的开源主线树(如www.kernel.org或www.openvswitch.org)。来自我们所熟悉的操作系统厂商的商业操作系统和管理程序的分布也应包括上述的数据路径卸载的功能。操作系统供应商必须支持可编程的服务器适配器的设备驱动程序和相关软件的认证资格,以便使这种适配器能够被主流数据中心运营商采纳实现无缝操作。
主流市场的智能服务器适配器
基于主机的网络部署预计将推动主流市场对于智能服务器适配器的应用。这些适配器必须是特制的,并支持其成功的主要因素。而上文中,我们跨架构和技术讨论了服务器适配器获得成功的七大因素,以及规模经济和软件系统的要求。
电联通信 国内规模最大最稳定的BGP多线机房之一,领先的IDC服务商,IDC数据中心服务商。