acm-header
登录

ACM通信

研究突出了

hXDP: FPGA网卡上的高效软件包处理


多核的概念,说明

来源:盖蒂图片社

现代计算机的网络接口卡(nic)正在发生变化,以适应更快的数据速率,并帮助解决通用CPU技术的扩展问题。在正在进行的创新中,在NIC的数据路径上包含可编程加速器是特别有趣的,因为它提供了将CPU的一些网络数据包处理任务卸载给加速器的机会。考虑到数据包处理任务的严格延迟限制,加速器通常利用诸如现场可编程门阵列(fpga)等平台来实现。fpga可以在部署后重新编程,以适应不断变化的应用需求,并在实现数据包处理任务时实现高吞吐量和低延迟。然而,它们可能需要在不同的应用程序之间共享有限的资源,而且对它们进行编程非常困难,而且需要硬件设计专业知识。

我们提出了hXDP,一种运行在fpga软件包处理任务上的解决方案,用epf技术描述并针对Linux的eXpress数据路径。hXDP只使用小部分可用FPGA资源,性能与高端cpu相当。epf的迭代执行模型并不适合FPGA加速器。尽管如此,我们表明,在针对特定的FPGA设计时,epf程序的许多指令可以被压缩、并行化或完全删除,从而显著提高性能。

我们在FPGA网卡上实现hXDP,并运行真实世界未修改的eBPF程序对其进行评估。我们的实现在156.25MHz运行,使用大约15%的FPGA资源。尽管这些要求不高,但它可以运行动态加载的程序,达到高端CPU核心的包处理吞吐量,并提供低10倍的包转发延迟。

回到顶部

1.简介

数据中心和电信运营商网络中的计算机使用其CPU资源的很大一部分来处理来自其网络接口卡(nic)的网络流量。加强安全性,例如,使用防火墙功能、监视网络级性能和将数据包路由到预期的目的地,这些只是这些系统正在执行的任务的几个例子。随着网卡端口速度超过100gb /s (Gbps),并考虑到进一步扩展cpu性能的限制,17正在引入新的体系结构解决方案来处理这些不断增长的工作负载。

NIC上的可编程加速器是一种很有前途的方法,可以将资源密集型的包处理任务从CPU中卸下来,从而为在其他地方无法执行的任务节省宝贵的周期。尽管如此,实现高性能网络包处理任务的可编程性是一个开放的研究问题,解决方案探索解决方案空间的不同领域,以不同的方式在性能、灵活性和易用性之间妥协。25因此,今天的加速器使用不同的技术实现,包括特定应用集成电路(asic)、现场可编程门阵列(fpga)和多核片上系统。

基于fpga的网卡特别有趣,因为它们提供了良好的性能和高度的灵活性,这使程序员能够定义几乎任何功能,只要它适合可用的硬件资源。相比于其他用于网卡的加速器,如网络处理asic4或多核片上系统智能网卡,27FPGA网卡的灵活性还为更广泛的应用程序支持不同的加速器提供了额外的好处。例如,微软在数据中心使用它们来完成网络和机器学习任务,811在电信网络中,它们也被用来执行无线电信号处理任务。20.3126尽管如此,fpga的编程是困难的,通常需要建立一个专门的硬件专家团队,11它与软件和操作系统开发人员交互,将卸载解决方案与系统集成。此外,先前在FPGA上简化网络功能编程的工作假设FPGA的很大一部分完全用于包处理,130.28降低了FPGA与其他加速器共享的能力。

我们的目标是为FPGA网卡上的程序包处理提供更通用、更易于使用的解决方案,只使用很少的FPGA资源,同时与现有操作系统无缝集成。我们通过介绍hXDP来实现这一目标,hXDP是一组支持Linux的高效执行的技术表达数据路径(XDP)19在FPGA上。XDP利用epf技术在Linux内核中提供安全的可编程包处理,它在生产环境中被Linux社区广泛使用。hXDP提供完整的XDP支持,允许用户在FPGA上动态加载和运行未修改的XDP程序。

因此,挑战在于如何在FPGA上有效地运行XDP程序,因为epf技术最初是为在高性能的类似risc的寄存器机上顺序执行而设计的。也就是说,epf是为具有高时钟频率的服务器cpu设计的,并且能够每秒执行多个连续的epf指令。相反,fpga采用广泛的并行执行模型,时钟频率比高端cpu低5 - 10倍。因此,在FPGA上直接实现epf迭代执行模型可能会提供较低的包转发性能。此外,hXDP设计应该在使用少量硬件资源的情况下实现任意的XDP程序,以保证FPGA的资源可以用于其他加速器。

我们通过对epf指令集体系结构(ISA)和现有XDP程序的详细分析来解决这一挑战,以揭示和利用优化的机会。首先,我们确定在不运行在Linux内核上下文中时可以安全删除的epf指令。例如,通过提供有针对性的硬件支持,我们消除了数据边界检查和可变调零指令。其次,我们定义了对eBPF ISA的扩展,以引入3-操作数指令、新的6B加载/存储指令和新的参数化程序退出指令。最后,我们利用eBPF指令级并行性,在编译时执行程序的静态分析,这允许我们并行执行几个eBPF指令。我们设计hXDP来实现这些优化,并充分利用网卡上的执行环境,例如,避免不必要的PCIe传输。我们的设计包括:(i)编译器将XDP程序的字节码转换为扩展的hXDP ISA;(ii)一个独立的FPGA IP核模块,该模块实现了扩展ISA和其他一些低级优化;(iii)以及动态加载和与运行在FPGA NIC上的XDP程序交互所需的工具链。

为了评估hXDP,我们为NetFPGA提供了一个开源实现。32我们使用Linux源代码提供的XDP示例程序测试实现,并使用两个实际应用程序:一个简单的有状态防火墙和Facebook的Katran负载均衡器。hXDP可以匹配多ghz服务器CPU内核的报文转发吞吐量,同时提供10倍的转发时延。尽管我们的原型的时钟频率很低(156MHz),而且只使用了不到15%的FPGA资源,但还是实现了这一点。

hXDP来源在https://axbryd.io/technology

回到顶部

2.概念和概述

我们的主要目标是提供在FPGA nic上高效运行XDP程序的能力,同时使用很少的FPGA硬件资源(参见图1).

f1.jpg
图1。hXDP概念。hXDP提供了一个易于使用的网络加速器,它与其他特定于应用程序的加速器共享FPGA NIC资源。

少量使用FPGA资源尤其重要,因为它可以通过在同一FPGA上打包不同的应用程序加速器来实现额外的整合。

选择支持XDP是由该技术带来的双重好处所驱动的:它很容易为已经部署的XDP程序支持网卡卸载,并且它提供了一个大型Linux程序员社区已经熟悉的基于网卡的编程模型;因此,开发人员不需要学习新的编程范式,比如P4引入的那些编程范式3.或FlowBlaze。28

非目标:与之前针对FPGA网卡的工作不同,30.128hXDP不假定FPGA专门用于网络处理任务。正因为如此,hXDP采用了迭代处理模型,与前人工作支持的流水处理模型形成了鲜明对比。迭代模型需要固定数量的资源,不管正在实现的程序有多复杂。相反,在管道模型中,资源需求依赖于实现的程序复杂性,因为程序是在FPGA中有效地“展开”的。事实上,hXDP提供了XDP程序的动态运行时加载,而解决方案如P4->NetFPGA30.或FlowBlaze需要经常加载一个新的FPGA位流时,改变应用程序。因此,hXDP在处理数据包时并没有设计得比这些设计更快。相反,hXDP旨在释放宝贵的CPU资源,然后这些资源可以专门用于无法在其他地方运行的工作负载,同时提供与CPU类似或更好的性能。

同样,hXDP也不能直接与专门用于网络处理的smartnic进行比较。这类网卡的资源很大程度上,通常是专门用于网络包处理。相反,hXDP只利用FPGA资源的一小部分来添加性能良好的包处理,以及其他特定于应用程序的加速器,它们共享相同的芯片资源。

要求:根据以上讨论,我们可以推导出hXDP的三个高级需求:

  1. 它应该执行未经修改的编译XDP程序,并支持XDP框架的工具链,例如,动态程序加载和用户空间访问映射;
  2. 它至少应该提供与高端CPU核心相当的包处理性能;
  3. 它应该需要少量的FPGA硬件资源。

在更详细地描述hXDP概念之前,我们先简要介绍一下XDP的背景知识。

*2.1.XDP底漆

XDP允许程序员在网卡驱动程序级别注入程序,以便在网络数据包传递到Linux的网络堆栈之前执行这些程序。XDP程序基于Linux的epf技术。eBPF为内核上下文中小程序的沙箱执行提供了一个内核内虚拟机。在当前版本中,epf虚拟机有11个64b寄存器:r0表示内核函数和程序的返回值,r1 -r5用于存储传递给内核函数的参数,r6 -r9是在函数调用期间保存的寄存器,和r10存储访问堆栈的帧指针。eBPF虚拟机有一个定义良好的ISA,它由100多个固定长度的指令(64b)组成。程序员通常使用带有一些限制的C语言编写eBPF程序,这简化了程序的静态验证。

eBPF程序还可以访问内核内存区调用地图,即本质上类似于表的内核内存位置。例如,eBPF程序可以使用映射来实现数组和哈希表。eBPF程序可以通过指针遵从(用于非结构化数据访问)的方式与地图的位置进行交互,或者通过调用特定的帮助函数(用于结构化数据访问),例如,对配置为哈希表的地图进行查找。映射尤其重要,因为它们是跨程序执行保持状态的唯一手段,是与其他epf程序和在用户空间中运行的程序共享信息的唯一手段。

*2.2.挑战

为了直观地理解在FPGA上支持XDP所涉及的设计挑战,我们现在考虑一个XDP程序示例,该示例实现了一个简单的有状态防火墙,用于检查双向TCP或UDP流的建立。描述这个简单防火墙功能的C程序被编译成71条epf指令。

我们可以大致了解在基于FPGA的epf执行器上运行该函数的潜在最佳情况速度,假设每个epf指令需要执行1个时钟周期,时钟周期不用于任何其他操作,并且FPGA具有156MHz时钟率,这在FPGA网卡中很常见。32在这种情况下,实现顺序eBPF执行器的原始FPGA实现将提供每秒280万个包的最大吞吐量(例如,在乐观的假设下,假定没有由于队列管理而产生的额外开销)。作为比较,当运行在3.7GHz的高端服务器CPU的单核上时,包括操作系统开销和PCIe传输成本,XDP简单防火墙程序实现了7.4Mpps的吞吐量。一个由于通常不希望或不可能增加FPGA时钟率;例如,由于功率限制,在缺乏其他解决方案的情况下,基于fpga的执行器将比CPU核心慢2 - 3倍。

此外,现有的加速顺序代码执行的解决方案(例如,超标量体系结构)在这种情况下,在硬件资源方面过于昂贵,无法采用。事实上,在超标量体系结构中,加速是在运行时利用指令级并行实现的。然而,这样做所需的硬件复杂性随着并行执行检查指令的数量呈指数增长。这就排除了重用通用软核设计的可能,比如基于RISC-V的软核设计。1614

*2.3.hXDP概述

hXDP通过采用软硬件协同设计的方法解决了上述挑战。特别是,hXDP同时提供了编译器和相应的硬件模块。编译器利用eBPF ISA优化机会,利用引入的hXDP硬件模块特性简化对此类机会的利用。实际上,我们设计了一个新的ISA,它扩展了epf ISA,专门针对XDP程序的执行。

编译器优化在eBPF指令级别执行转换:删除不必要的指令;用新定义的更简洁的指令替换指令;并行化指令执行。所有优化都在编译时执行,将大部分复杂性转移到软件编译器,从而降低目标硬件的复杂性。因此,hXDP硬件模块实现了一个可并行运行多达4条指令的基础设施,实现了一个超长指令字(VLIW)软处理器。VLIW软处理器不提供任何运行时程序优化,例如,分支预测,指令重排序。我们完全依靠编译器来优化XDP程序以实现高性能执行,从而将硬件模块从使用更多硬件资源的复杂机制中解放出来。

最后,将hXDP硬件组件作为一个独立的IP核模块部署到FPGA上。如果需要,该模块可以与其他处理模块连接,或者只是作为网卡端口和指向主机系统的PCIe驱动程序之间的线中凸点。hXDP软件工具链,包括编译器,提供了在Linux操作系统中使用hXDP的所有机制。

从程序员的角度来看,编译后的eBPF程序可以在内核中或FPGA上交替执行(参见图2).

f2.jpg
图2。XDP工作流和体系结构的概述,包括本文的贡献。

回到顶部

3.hXDP编译器

我们现在描述hXDP指令级优化和实现它们的编译器设计。

减少指令:epf技术被设计成支持在Linux内核内执行,为此它要求程序包含大量额外的指令,然后由内核的验证者检查。当针对FPGA上实现的专用eBPF执行器时,大多数这样的指令都可以安全地删除,或者可以用更便宜的嵌入式硬件检查替换它们。两个相关的例子是内存边界检查和内存归零(图3).

f3.jpg
图3。hXDP删除的指令示例。

边界检查当涉及到指针操作时,epf验证器要求程序只读取有效的内存位置。在hXDP中,我们可以安全地删除这些指令,直接在硬件中实现检查。

Zero-ing是将新创建的变量设置为零的过程,这是程序员为了安全和确保程序的正确执行而执行的一种常见操作。专用的FPGA执行器可以提供硬保证,使所有相关的内存区域在程序启动时为零,因此在初始化过程中显式地为变量置零是多余的。

ISA扩展:为了有效地减少指令的数量,我们定义了ISA,使程序描述更加简洁。在这方面,有两个因素对我们有利。首先,我们可以扩展ISA,而不必考虑与支持高效的即时编译需求相关的约束。其次,我们的eBPF程序是XDP应用程序的一部分,因此,我们可以预期将包处理作为主要的程序任务。利用这两个事实,我们定义了一个新的ISA,它主要在三个方面改变了原来的eBPF ISA。

操作数的数字。第一个重要的变化是包含了三操作数操作,取代了eBPF的两操作数操作。在这里,我们认为epf对双操作数操作的ISA选择主要是基于X86 ISA将是最终编译目标的假设。相反,使用三操作数指令允许我们用一条指令实现通常需要两条指令的操作。

加载/存储大小.eBPF ISA包括字节对齐的内存加载/存储操作,大小为1B、2B、4B和8B。虽然这些指令在大多数情况下是有效的,但我们注意到,在包处理过程中,使用6B加载/存储可以减少通常情况下的指令数量。事实上,6B是以太网MAC地址的大小,这是一个经常访问的字段。使用6B加载/存储指令扩展epf ISA通常将所需的指令减半。

参数化的退出.epf程序的结束由退出指令标志。在XDP中,程序设置r0到与所需转发动作(即DROP, TX)对应的值;然后,当程序退出时,框架检查r0寄存器最后执行转发动作。虽然ISA的这个扩展只为每个程序节省了一条(运行时)指令,正如我们将在第4节中看到的,但它也将实现更重要的硬件优化(图4).

f4.jpg
图4。hXDP ISA扩展的例子。

指令并行性。最后,我们探讨了并行处理epf程序指令的机会。由于我们的目标是保持硬件设计尽可能简单,因此我们不为此引入运行时机制,而只是在编译时对epf程序的指令级并行性进行静态分析。因此,我们设计了一个定制编译器来实现本节中概述的优化,并将XDP程序转换为一个时间表可以与hXDP一起运行的并行指令。编译器分析eBPF字节码,同时考虑(i)数据和控制流依赖关系和(ii)目标平台的硬件约束。的时间表可以可视化为几乎无限行的集合,每一行都有多个可用点,需要用指令填充。点的数量对应于目标执行器的执行通道的数量。编译器将给定的XDP程序的指令放在最少的行数中,同时尊重三个Bernstein条件,以确保能够并行运行所选指令。2

回到顶部

4.硬件模块

我们将hXDP设计为一个独立的IP核,可以根据需要添加到更大的FPGA设计中。我们的IP核包括在NIC上执行所有XDP功能块的元素,包括辅助函数而且地图

*4.1.体系结构和组件

hXDP硬件设计包括五个部分(参见图5):可编程输入队列(PIQ);主动包选择器(APS);的Sephirot加工的核心;辅助功能模块(高频);和内存映射模块(毫米).所有模块工作在同一个时钟频域内。传入的数据由PIQ接收。APS从PIQ读取一个新包到它的内部包缓冲区。在此过程中,APS通过接口提供对包数据的字节对齐访问数据总线,这Sephirot有选择地读/写报文内容。当APS将一个包提供给Sephirot核心,开始执行加载的epf程序。指令完全在内部执行Sephirot,使用四个并行执行通道,除非它们调用一个辅助函数或读/写映射。方法访问相应的模块辅助总线数据总线,分别。我们详细描述了体系结构的核心组件,即SephiroteBPF处理器,下一个。

f5.jpg
图5。hXDP硬件设计的逻辑架构。

Sephirot是一个VLIW处理器,具有四个并行通道,用于执行epf指令。Sephirot被设计成一个有四个阶段的管道:指令获取(IF);指令解码(ID);指令执行(IE);和提交。一个程序被存储在一个专用的指令存储器中Sephirot按顺序获取指令。处理器有另一个专用的内存区域来实现程序堆栈,它的大小是512B,在寄存器文件中存储了11个64b寄存器。这些内存和寄存器位置与epf虚拟机规范一一对应。Sephirot当APS有一个准备处理的新包时开始执行,它给处理器开始信号。

在处理器启动(IF阶段)时,读取一条VLIW指令,并静态地将组成它的4条扩展epf指令分配到各自的执行通道中。在这一阶段,指令的操作数从寄存器文件中预取。其余3个管道阶段由4个执行通道并行执行。在ID期间,如果eBPF指令中的任何一个是负载,而在IE阶段,使用相关的预取值激活相关的子单元。子单元是算术和逻辑单元(ALU),内存访问单元和控制单元。ALU实现了eBPF ISA所描述的所有操作,显著的区别是它能够对三个操作数执行操作。内存访问单元抽象了对不同内存区域的访问,即栈、存储在APS中的包数据和映射内存。控制单元提供修改程序计数器的逻辑,例如,执行一个以及调用辅助函数。最后,在提交阶段,IE阶段的结果被存储回注册文件或其中一个内存区域。Sephirot当它发现退出指令时终止执行,在这种情况下,它向APS发送数据包转发决策的信号。

*4.2.管道的优化

现在,我们列出了应用于设计中的一些显著的体系结构优化的子集。

程序状态自动复位。正如我们在第3节中看到的,epf程序可能会执行它们将要使用的变量的归零操作。我们在程序初始化时提供堆栈和寄存器的自动重置。这是硬件上的一个廉价特性,可以提高安全性9并允许我们从程序中删除任何此类归零指令。

并行分支。对于缺乏分支预测、推测性和无序执行的体系结构,分支指令的存在可能会导致性能问题。为Sephirot,这将强制对分支指令进行序列化。然而,在XDP程序中,经常有一系列的分支按紧密的顺序排列,特别是在头解析期间。我们启用了这样的分支的并行执行,建立了Sephirot的车道。也就是说,所有的分支指令都由VLIW的通道并行执行。如果采用了多个分支,则选择优先级最高的分支来更新程序计数器。编译器在调度指令时考虑到这一点,并相应地对分支指令进行排序。b

早期处理器退出。处理器在执行退出指令时停止。退出指令在IF阶段被识别,这允许我们提前停止处理器管道并保存剩下的三个时钟周期。这种优化还提高了使用参数化退出指令扩展ISA所获得的性能增益,如第3节所述。事实上,XDP程序通常将值移动到r0,在调用退出之前定义转发动作。为寄存器设置值总是需要遍历整个Sephirot管道。相反,通过参数化出口,我们不需要为其赋值r0,因为该值嵌入到新定义的退出指令中。

*4.3实现

我们用NetFPGA制作了hXDP原型,32嵌有4个10Gb端口的板和Xilinx Virtex7 FPGA。hXDP实现使用的帧大小为32B,时钟为156.25MHz。这两个设置都来自于NetFPGA参考网卡设计的标准配置。

hXDP FPGA IP核占用FPGA逻辑资源的9.91%,寄存器资源的2.09%,FPGA可用BRAM的3.4%。APS和Sephirot是需要更多逻辑资源的组件,因为它们是最复杂的组件。有趣的是,即使有些复杂的帮助函数(例如,实现hashmap查找的帮助函数)在所需逻辑方面的贡献也很小,这证实了在硬件设计中包含它们的代价很小,同时提供了良好的性能优势。当包含NetFPGA的参考网卡设计,即构建一个全功能的基于fpga的网卡时,逻辑、寄存器和BRAM的总资源占用分别增加到18.53%、7.3%和14.63%。这是一个相对较低的占用级别,因此可以将最大份额的FPGA用于其他加速器。

回到顶部

5.评价

我们使用选择的Linux的XDP示例应用程序和两个实际应用程序来执行hXDP评估。Linux示例在表1.实际的应用程序是第2节中描述的简单防火墙和Facebook的Katran服务器负载平衡器。10Katran是一个高性能的软件负载均衡器,它使用加权调度策略将虚拟地址转换为实际服务器地址,并提供每个流的一致性。此外,Katran收集一些流量指标并执行IPinIP包封装。

t1.jpg
表1。测试Linux XDP示例程序。

使用这些应用程序,我们对编译器优化对程序指令数量和实现的并行程度的影响进行评估。然后,我们评估了我们的NetFPGA实现的性能。我们还使用微基准测试来比较hXDP原型和Netronome nf4000 SmartNIC的性能。尽管这两种设备针对不同的部署场景,但这可以为hXDP设计选择的效果提供进一步的洞察。不幸的是,nf4000只提供有限的epf支持,这不允许我们运行完整的评估。我们还将hXDP与其他FPGA NIC编程解决方案进行比较,然后对评估结果进行简要讨论,以此结束本节。

*5.1.测试结果

编译器。图6显示编译器生成的VLIW指令的数量。我们将每次优化提供的减少显示为一个堆叠列,并报告x86指令的数量,这是Linux的epf JIT编译器的输出结果。在这个图中,我们报告了指令并行化的增益,以及来自代码运动,是通过预测来自控制等效块的指令获得的增益。正如我们所看到的,编译器能够提供的VLIW指令数量通常比原始程序的指令数量小2 - 3倍。注意,相比之下,x86的JIT编译器的输出通常会增加指令的数量。c

f6.jpg
图6。VLIW指令的数量,以及优化对其减少的影响。

每个周期的指令。我们将hXDP在编译时获得的并行化水平与x86 CPU核心在运行时执行的并行化进行比较。表2表明静态hXDP并行化通常可以达到与复杂的x86运行时机器所达到的并行化水平。d

t2.jpg
表2。程序指令数、x86运行时每周期指令数(IPC)和hXDP静态IPC平均速率。

硬件性能。我们将hXDP与服务器上运行的XDP进行比较,并与基于soc的Netronome nf4000 SmartNIC提供的XDP卸载实现进行比较。nf4000有60个可编程网络处理核(称为微型),时钟为800MHz。服务器配置Intel Xeon E5-1630 v3 @3.70GHz, Intel XL710 40GbE网卡,运行Linux v.5.6.4,自带i40e Intel网卡驱动。在测试期间,我们使用不同的CPU频率,即1.2GHz、2.1GHz和3.7GHz,以涵盖更广泛的部署场景。事实上,许多部署都偏爱频率较低、内核数量较多的cpu。15我们使用一个DPDK包生成器来执行吞吐量和延迟度量。该包生成器能够产生40Gbps吞吐量的任何包大小,并与被测系统背对背连接,即运行在NetFPGA上的hXDP原型、Netronome SmartNIC或运行XDP的Linux服务器。延迟测量在流量生成器的NIC上使用硬件数据包时间戳执行,并测量往返时间。除非另有说明,否则所有测试都使用属于单个网络流的大小为64B的包执行。对于被测试的系统来说,这是一个具有挑战性的工作负载。

应用程序的性能。在第2节中,我们提到简单防火墙性能的乐观上限应该是2.8Mpps。当使用hXDP和本文描述的所有编译器和硬件优化时,相同的应用程序实现6.53Mpps的吞吐量,如图所示图7.这只比运行在功能强大的x86 CPU核心(3.7GHz)上的相同应用程序慢12%,比运行在相同CPU核心(2.1GHz)上的相同应用程序快55%。在延迟方面,hXDP提供了约10倍低的包处理延迟,对于所有的包大小(参见图8).这是因为hXDP避免了跨越PCIe总线,并且没有与软件相关的开销。我们忽略了其余应用程序的延迟结果,因为它们没有明显的不同。虽然我们无法使用Netronome的epf实现运行简单的防火墙应用程序,图8亦显示Netronome nf4000的转发延迟(nfp标签)当与只执行包转发的XDP程序一起编程时。即使在这种情况下,我们也可以看到hXDP提供了较低的转发延迟,特别是对于较小大小的包。

f7.jpg
图7。用于实际应用程序的吞吐量。hXDP比2GHz以上的高端CPU内核更快。

f8.jpg
图8。不同报文大小的报文转发时延。

当测量Katran时,我们发现hXDP比x86内核的3.7GHz慢38%,只比同一内核的2.1GHz快8%。hXDP性能相对较差的原因是整个程序的长度。Katran的程序有很多指令,因为这样的执行者具有非常高的时钟频率是有利的,因为他们可以每秒运行更多的指令。但是,请注意部署在例如Facebook数据中心的cpu的时钟频率15频率接近2.1GHz,有利于多核部署,以取代高频部署。hXDP在156MHz的频率上仍然能够超过在该频率上的CPU内核。

Linux的例子。我们最后测量了Linux的XDP示例的性能表1.这些应用程序允许我们通过不同类型的程序更好地理解hXDP性能(参见图9).我们可以确定三种类型的程序。首先,在hXDP上运行时,将数据包转发到NIC接口的程序速度更快。这些程序不向主机系统传递数据包,因此,它们可以完全驻留在NIC中。对于这类程序,hXDP的性能通常至少与单个x86核心的2.1GHz时钟一样好。事实上,在主机系统上处理XDP会引起额外的PCIe传输开销,以将包发送回NIC。其次,总是丢包的程序通常在x86上运行得更快,除非处理器的频率很低,比如1.2GHz。在这里,应该注意到这样的程序是相当不常见的,例如,用于收集从网络抽头接收数据包的网络流量统计信息的程序。最后,那些很长的程序,例如,tx_ip_tunnel有283条指令,在x86上更快。就像我们在Katran的例子中注意到的,对于较长的程序,hXDP实现的低时钟频率可能会成为问题。

f9.jpg
图9。Linux的XDP程序吞吐量。hXDP对于执行TX或重定向的程序更快。

5.1.1.与其他FPGA解决方案的比较。hXDP为FPGA NIC编程提供了比以往工作更灵活的编程模型。然而,在某些情况下,使用hXDP实现的更简单的网络功能也可以使用FPGA nic的其他编程方法实现,同时保持功能等价。本文中介绍的简单防火墙就是这样一个例子,它也受到FlowBlaze的支持。28

吞吐量。撇开使用FlowBlaze抽象重新实现功能的成本不谈,我们通常可以预期hXDP在处理数据包时比FlowBlaze慢。事实上,在简单的防火墙情况下,FlowBlaze可以转发大约60Mpps,而hXDP可以转发6.5Mpps。FlowBlaze的设计时钟为156MHz,就像hXDP一样,其更好的性能是由于高水平的专业化。FlowBlaze被优化为只处理包头,使用静态定义的函数。这需要在功能变化时在FPGA上加载一个新的位流,但它可以使系统达到报告的高性能。e相反,hXDP必须付出很大的代价才能提供完全的XDP兼容性,包括动态网络功能的可编程性以及包头和有效负载的处理。

硬件资源。第二个重要的区别是这两种方法所需的硬件资源量。hXDP需要大约18%的NetFPGA逻辑资源,独立于正在实现的特定网络功能。相反,FlowBlaze实现了一个包处理管道,管道的每个阶段需要大约16%的NetFPGA逻辑资源。例如,简单的防火墙功能实现需要两个FlowBlaze管道阶段。更复杂的功能,如负载平衡器,可能需要4或5个阶段,具体取决于实现的负载平衡逻辑。12

总之,FlowBlaze的管道利用硬件并行来实现高性能。然而,它的缺点是通常比顺序执行器需要更多的硬件资源,比如由hXDP实现的执行器。正因为如此,hXDP在有少量FPGA资源可用的情况下特别有用,例如在不同加速器之间共享FPGA时。

*5.2.讨论

合适的应用程序。hXDP无需修改即可运行XDP程序;然而,本节给出的结果表明,hXDP特别适合于可以完全在NIC上处理数据包的程序,并且这些数据包的VLIW指令长度不超过10秒。这也是对其他卸载解决方案的常见观察。18

FPGA共享。与此同时,hXDP成功地使用了很少的FPGA资源,为其他加速器留下了空间。例如,我们可以在同一FPGA上共同定位Chen中介绍的神经网络的VLDA加速器设计的几个实例。7这里,一个重要的注意事项是关于内存资源(BRAM)的使用。一些XDP程序可能需要更大的地图内存。应该清楚的是,专用于映射的内存区域减少了FPGA上其他加速器可用的内存资源。因此,XDP程序的内存需求(在编译时就知道)是做出程序卸载决策时要考虑的另一个重要因素。

回到顶部

6.相关工作

网卡编程。AccelNet11是一个匹配动作卸载引擎,用于大型云数据中心卸载虚拟交换和防火墙功能,在Catapult FPGA NIC上实现。6FlexNIC23是基于RMT的设计吗4该体系结构提供了一个灵活的网络DMA接口,供操作系统和应用程序使用,以减轻无状态数据包解析和分类。P4 - > NetFPGA1和P4FPGA30.从P4提供高水平的合成3.领域特定语言到FPGA NIC平台。FlowBlaze28在FPGA网卡上使用匹配动作表实现有限状态机抽象,实现简单但高性能的网络功能。鸸鹋29在NetFPGA上使用高级合成实现c#描述的函数。与这些工作相比,hXDP利用了Linux内核定义的抽象,而不是匹配动作或更高级别的抽象,并实现了使用eBPF ISA描述的网络功能。

Netronome SmartNICs实现了有限形式的epf卸载。24与实现专门针对XDP程序的解决方案的hXDP不同,Netronome解决方案被添加到它们的网络处理器之上,作为事后考虑,因此,它不是专门用于XDP程序的执行。

网卡的硬件。以前的工作提出了fpga的VLIW核心设计,并没有关注网络处理。2122Brunella5是离hXDP最近的。它采用非专门的基于mips的ISA和VLIW体系结构进行包处理。hXDP有一个专门针对使用XDP抽象进行网络处理的ISA设计。Forencich13提出了一种开源的100Gbps FPGA网卡设计。hXDP可以集成在这种设计中,实现一个支持XDP卸载的开源FPGA网卡。

回到顶部

7.结论

本文介绍了在FPGA网卡上运行Linux XDP程序的系统hXDP的设计与实现。hXDP可以在FPGA上运行未修改的XDP程序,其性能与2GHz以上的高端x86 CPU核心相匹配。设计和实现hXDP需要大量的研究和工程工作,这涉及到处理器及其编译器的设计,虽然我们相信运行在156MHz的设计的性能结果已经非常显著,但我们也确定了未来需要改进的几个领域。事实上,我们认为hXDP是设计操作系统/应用程序和网卡/加速器之间未来接口的起点和工具。为了促进这个方向的工作,我们将我们的实现提供给研究社区。

回到顶部

致谢

根据第876967号赠款协议(“BRAINE”项目),ECSEL联合项目与欧盟H2020框架计划(H2020/2014 - 2020)和国家当局合作,为导致这些成果的研究提供了资金。

uf1.jpg
数字观看作者在独家报道中讨论这项工作通信视频。//www.eqigeno.com/videos/hxdp

回到顶部

参考文献

1.P4-NetFPGA。https://github.com/NetFPGA/P4-NetFPGA-public/wiki

2.并行处理程序的分析。IEEE反式。电子。第一版EC-15, 5(1966), 757-763。

3.P. Bosshart, Daly, D., Gibb, G., Izzard, M., McKeown, N., Rexford, J., Schlesinger, C., Talayco, D., Vahdat, A., Varghese, G., Walker, D. P4:编程协议无关的包处理器。SIGCOMM第一版。Commun。牧师44, 3(2014), 87-95。

4.博斯特,P,吉布,G,金,h - s。,Varghese, G., McKeown, N., Izzard, M., Mujica, F., Horowitz, M.. Forwarding metamorphosis: Fast programmable match-action processing in hardware for sdn. In2013年ACM SIGCOMM会议论文集SIGCOMM '13 (New York, NY, USA, 2013)。计算机协会,99-110。

5.布鲁内拉,m.s.,庞塔雷利,博诺拉,m.s.,比安奇,G. V-PMP: VLIW包操纵器处理器。在2018年欧洲网络与通信会议, 2018, 1-9。

6.考尔菲尔德,a.m.,钟,e.s.,普特南,A.,安杰帕特,H.,福尔斯,J.,哈泽尔曼,M.,海伊尔,S.,汉弗莱,M.,考尔,P.,金,J.,洛,D.,马森吉尔,T., Ovtcharov, K.,帕帕迈克尔,M.,伍兹,L.,兰卡,S.,邱,D.,伯格,D.云级加速架构。在2016年49th2016年IEEE/ACM国际微架构研讨会(MICRO), 1-13。

7.陈涛、莫罗、泰、江、志、郑、利、严、娥、沈、华、考万、明、王、利、胡、勇、Ceze、利、guestin、C、Krishnamurthy、A. TVM:用于深度学习的自动端到端优化编译器。在13th操作系统设计和实现USENIX研讨会(OSDI 18), USENIX协会,卡尔斯巴德,CA, 2018, 578-594。

8.Chiou, D.微软弹射器项目。在2017 IEEE负载特性国际研讨会(IISWC), 2017, 124-124。

9.Dumitru, m.v., Dumitrescu, D., Raiciu, C..我们可以利用有bug的p4程序吗?在SDN研究研讨会论文集, SOSR '20,计算机协会,纽约,纽约,美国,2020,62-68。

10.Facebook。Facebook。Katran源代码库,2018年。https://github.com/facebookincubator/katran

11.费尔斯通,D.,普特南,A., Mundkur, S., Chiou, D., Dabagh, Andrewartha, M., Angepat, H., Bhanu, V., Caulfield, A., Chung, E., Chandrappa, H., Chaturmohta, S., Humphrey, M., Lavier, J., Lam, N., Liu, F., Ovtcharov, K., Padhye, J., Popuri, G., Raindel, S., Sapre, T., Shaw, M., Silva, G., Sivakumar, M., Srivastava, N., Verma, A., Zuhair, Q, Bansal, D., Burger, D., Vaid, K., Azure加速网络:公共云中的smartnic。在15th网络系统设计与实现USENIX研讨会(NSDI 18),兰顿,华盛顿州,USENIX协会,2018,51-66。

12.FlowBlaze。仓库与FlowBlaze源代码和额外的材料。http://axbryd.com/FlowBlaze.html

13.法伦奇,A.,斯诺伦,a.c.,波特,G.,帕彭,G.刚玉:一个开源的100 gbps NIC。在28th现场可编程自定义计算机国际研讨会, 2020年。

14.高茨基,M.,斯齐亚沃尼,p.d.,特拉伯,A.,洛伊,I.,普利尼,A.,罗西,D.,弗拉曼德,E., Gürkaynak, F.K,贝尼尼,L..近阈值risc-v核心与dsp扩展的可扩展物联网端点设备。IEEE反式。超大尺度积分。VLSI系统25, 10(2017), 2700-2713。

15.Hazelwood, K, Bird, S., Brooks, D., Chintala, S., Diril, U., dzhuulgakov, D., Fawzy, M., Jia, B., Jia, Y., Kalro, A., Law, J., Lee, K., Lu, J., Noordhuis, P., Smelyanskiy, M., Xiong, L., Wang, X.在Facebook应用机器学习:一个数据中心基础设施的视角。在高性能计算机体系结构(HPCA).IEEE 2018。

16.Heinz, C., Lavan, Y., Hofmann, J., Koch, A.开源随手插入兼容risc-v软核处理器的目录和硬件评估。在2019可重构计算与fpga国际会议(ReConFig), ieee, 2019, 1-8。

17.计算机架构的新黄金时代。Commun。ACM 62, 2(2019), 48-60。

18.霍菲尔德,克鲁德,J., Reelfs, j.h., Rüth, J., Wehrle, K.揭示XDP BPF的性能。在2019 IEEE网络软件会议, 2019, 208-212。

19.Høiland-Jørgensen, T., Brouer, j.d., Borkmann, D., Fastabend, J., Herbert, T., Ahern, D., Miller, D.快速数据路径:操作系统内核中的快速可编程数据包处理。在14国会议记录th新兴网络实验与技术国际会议, CoNEXT 18。美国纽约,计算机械协会,2018,54-66。

20.英特尔。5 g无线。2020https://www.intel.com/content/www/us/en/communications/products/programmable/applications/baseband.html

21.Iseli, C, Sanchez, E. Spyder:使用fpga的可重构vliw处理器。在[1993]用于自定义计算机的fpga研讨会论文集。IEEE 1993 17-24。

22.Jones, a.k., Hoare, R., Kusic, D., Fazekas, J., Foster, J.一个基于fpga的vliw处理器,具有定制的om硬件执行。在2005年ACM/SIGDA会议记录th现场可编程门阵列国际研讨会, FPGA的05。纽约,纽约,美国,计算机协会,2005,107-117。

23.考夫曼,彼得,S,安德森,T, Krishnamurthy, A. Flexnic:重新思考网络直接存储器存取。在15th操作系统热点专题研讨会(HotOS XV), Kartause Ittingen,瑞士,USENIX协会,2015。

24.Kicinski, J., Viljoen, N. epf硬件卸载到SmartNICs: cls bpf和XDP。Proc。Netdev1, 2016。

25.Michel, O., Bifulco, R., Rétvári, G., Schmid, S.可编程数据平面:抽象、体系结构、算法和应用。544(2021)。

26.NEC。构建开放的vRAN生态系统白皮书,2020。https://www.nec.com/en/global/solutions/5g/index.html

27.Netronome。AgilioTM CX 2x40GbE智能服务器适配器。https://www.netronome.com/media/redactor_files/PB_Agilio_CX_2x40GbE.pdf

28.Pontarelli, S., Bifulco, R., Bonola, M., Cascone, C., Spaziani, M., Bruschi, V., Sanvito, D., Siracusano, G., Capone, A., Honda, M., Huici, F., Siracusano, G. Flowblaze:硬件中的有状态包处理。在16th网络系统设计与实现USENIX研讨会(NSDI 19)。马萨诸塞州波士顿USENIX协会,2019,531-548

29.Sultana, N., Galea, S., Greaves, D., Wojcik, M., Shipton, J., Clegg, R., Mai, L., Bressana, P., Soulé, R., Mortier, R., Costa, P., Pietzuch, P., Crowcroft, J., Moore, a.w., Zilberman, N. Emu:网络服务快速原型。在2017 USENIX年度技术会议(USENIX ATC 17),圣克拉拉,加州,USENIX协会,2017,459 - 471。

30.Wang, H., Soulé, R., Dang, h.t., Lee, k.s., Shrivastav, V., Foster, N., Weatherspoon, H. P4fpga: p4的快速原型框架。在SDN研究研讨会论文集, SOSR 17。纽约,纽约,美国,计算机协会,2017,122 - 135。

31.由Xilinx提供的5G无线解决方案。https://www.xilinx.com/applications/megatrends/5g.html

32.Zilberman, N., Audzevich, Y., Covington, G.A., Moore, A.W. NetFPGA:迈向100 Gbps作为研究商品。IEEE Micro '14 34, 5(2014), 32-41。

回到顶部

作者

马可Spaziani Brunellaspaziani@axbryd.com), Axbryd/罗马大学Tor Vergata,罗马,意大利。

Giacomo Belocchibelocchi@axbryd.com), Axbryd/罗马大学Tor Vergata,罗马,意大利。

马可Bonolamarco@axbryd.com), Axbryd/CNIT,罗马,意大利。

萨尔瓦多Pontarellisalvatore@axbryd.com), Axbryd/罗马大学,罗马,意大利。

朱塞佩Siracusanogiuseppe.siracusano@neclab.eu), NEC欧洲实验室,海德堡,德国。

朱塞佩·比安奇giuseppe.bianchi@uniroma2.it),罗马torvergata大学,意大利罗马。

Aniello卡马拉cammarano@axbryd.com),意大利罗马的Axbryd。

亚历桑德罗·查克palumbo@ing.uniroma2.it),罗马torvergata大学,意大利罗马。

卢卡Petrucciluca.petrucci@uniroma2.it),罗马torvergata大学,意大利罗马。

罗伯特·Bifulcoroberto.bifulco@neclab.eu), NEC欧洲实验室,海德堡,德国。

回到顶部

脚注

a. Intel Xeon E5-1630v3, Linux内核v.5.6.4。

b.这同样适用于一系列的如果其他……转到语句。

c.这也是由于在共享执行器上运行的开销,例如,调用助手函数需要几个指令。

d. x86 IPC应该被理解为XDP指令级并行性的粗粒度估计,因为尽管被隔离,CPU也运行与epf虚拟机相关的操作系统服务,它的IPC也受到内存访问延迟的影响,这对高时钟频率的IPC影响更大。

e. FlowBlaze允许程序员执行一些函数的运行时重新配置,但这是一个有限的特性。例如,包解析器是静态定义的。

要查看附带的技术透视图,请访问doi.acm.org/10.1145/3543844

本文的原始版本是发表在14国会议记录th操作系统设计和实现USENIX研讨会, 2020年11月。


cacm_ccby-ncsa.gif本作品遵循创作共用署名-非商业性共享国际4.0许可协议。

数字图书馆是由计算机协会出版的。版权所有©2022 ACM, Inc.


没有发现记录

Baidu
map