1、第 12 卷第 5 期2023 年 9 月网络新媒体技术Vol.12 No.5Sep.2023实用技术基于 FPGA 智能网卡的高性能 DPDK 驱动设计王 可 王鑫硕 郭志川(中国科学院声学研究所国家网络新媒体工程技术研究中心北京 100190中国科学院大学北京 100049)摘要:FPGA 智能网卡由于其硬件可编程和高吞吐等特性,被广泛的用于网络功能卸载和硬件加速。其作为一种 PCIe 端点设备,FPGA 智能网卡一般通过操作系统驱动程序连接上层应用。然而,目前通用的内核驱动方案存在诸多性能限制,导致 FP-GA 加速处理后的数据包不能被高效的送达应用程序。而其他已有内核旁路解决方案主要针
2、对扩展性和吞吐性能要求较低的 FPGA 平台开发。面向高性能、高灵活性的网络应用场景,本文提出了一种支持 FPGA 智能网卡虚拟化 I/O 传输的多队列DPDK 轮询模式驱动程序。该设计提供了在用户空间进行 FPGA 虚拟端口初始化和对可扩展多队列配置的操作函数功能,并提供了支持轮询模式收发的零拷贝数据传输策略。该设计实现了 FPGA 和应用程序之间 90 Gbit/s 的高性能数据收发,并能够提供具有稳定时延的网络通信服务。关键词:FPGA 智能网卡,轮询模式驱动,高可扩展性,高传输效率,网络 I/O 虚拟化DOI:10.20064/ki.2095-347X.2023.05.008Desig
3、n of High-performance DPDK Driver Based on FPGA SmartNICWANG Ke,WANG Xinshuo,GUO Zhichuan(National Network New Media Engineering Research Center,Institute of Acoustics,Chinese Academy of Sciences,Beijing,100190,China,University of Chinese Academy of Sciences,Beijing,100049,China)Abstract:Due to its
4、hardware programmable and high throughput characteristics,FPGA SmartNIC are widely used for network protocoloffloading and hardware acceleration.As a PCIe endpoint device,FPGA SmartNIC generally connect to upper-layer applicationsthrough operating system drivers.However,there are many performance li
5、mitations in the current common kernel driver solutions,sothat the data packets processed by FPGA acceleration cannot be efficiently delivered to the application program.On the other hand,oth-er existing kernel bypass solutions are mainly developed for FPGA platforms with lower requirements on scala
6、bility and throughput per-formance.Aiming at high-performance and high-flexibility network application scenarios,this paper proposes a multi-queue DPDKpolling mode driver that supports FPGA SmartNIC virtualized I/O transmission.The design provides FPGA virtual port initialization andoperation functi
7、ons for scalable multi-queue configuration in user space,and provides a zero-copy data transmission strategy thatsupports polling mode sending and receiving.Moreover,the design realizes 90Gbit/s high-performance data transmission and recep-tion between FPGA and application program,and can provide ne
8、twork communication service with stable time delay.Keywords:FPGA smartNIC,polling mode driven,high scalability,high transmission efficiency,network I/O virtualization本文于 2023-03-13 收到,2023-03-28 收到修改稿。中科院战略先导项目:SEANET 技术标准化研究与系统研制(编号:XDC02070100);IACAS 前沿探索项目(编号:QYTS202006)。0引言在以基础设施作为服务的云数据中心网络中,越来
9、越多的应用选择部署在虚拟化场景中,这给网络系网络新媒体技术2023 年统带来了巨大的压力。现场可编程门阵列(Field Programmable Gate Array,FPGA)具有高性能及硬件可重构的能力,基于 FPGA 设计的智能网卡能够更好地用于网络功能虚拟化实现。为了提高云环境中的多租户并发访问效率,我们开发了支持单根 I/O 虚拟化(Single Root I/O Virtualiza-tion,SR-IOV)功能的多队列 FPGA 智能网卡架构1及其 Linux 内核设备驱动。该设计允许服务器上运行的多个虚拟设施通过 PCIE VF 接口设备直通能力的虚拟网络端口连接 FPGA,并
10、在每个虚拟端口上执行可扩展多队列的数据传输调度。类似商用网卡的驱动模式,在操作系统中加载 Linux 内核驱动,使得部署在用户空间的应用程序能够利用标准的套接字接口与 FPGA 进行信息交互,具有较好的通用性,并且在 FPGA 和虚拟设施内存之间还可以以直接内存访问(Direct Memory Access,DMA)的方式实现高效率的数据迁移。由于内核系统中存在的诸多高额外开销,到达系统内存的数据很难以同样的高速率送至应用程序接口。这些限制包括复杂的内核协议栈处理开销、频繁的中断处理和系统调用引入的上下文切换开销,以及数据拷贝问题等限制。为了进一步提高数据传输效率,结合 Intel 的数据平面
11、开发套件(Data Plane Development Kit,DPDK)提出了一种旁路内核系统的 FPGA 用户态轮询模式设备驱动。在该方案中,我们利用 DPDK 用户态 I/O(Use-rspace I/O,UIO)架构开发了对 FPGA 虚拟端口的用户空间初始化和多队列配置接口。并通过共享内存和数据轮询传递方式,实现了和上层应用之间高性能数据传输,为部署在 DPDK 框架上的网络业务提供了稳定的数据传输。1相关工作许多工作针对高性能的软件 I/O 框架做出研究。一种是通过优化内核网络堆栈2,3、简化套接字接口设计4等方式来改善内核数据传输路径。但这仍不能避免大量的内核处理操作。为了进一步
12、降低内核操作带来的高额开销,许多旁路内核的软件 I/O 引擎被提出。这主要包括 Net-map5,PF_RING ZC6以及 Intel DPDK7等。Netmap 在用户空间和内核之间公开了数据包缓冲区,并通过Netmap 工作模式以低内核开销的方式接管网卡。PF_RING ZC 使用了专门的零拷贝驱动程序与网卡进行交互,采用 mmap()函数直接将接收缓冲区的数据映射到用户空间,从而屏蔽了内核到用户空间的数据拷贝。DPDK 同样提供了专门的 UIO 驱动,在此基础上通过部署轮询模式驱动连接网络。此外,DPDK 还为高性能的数据处理提供了丰富的库函数,以及包括大页内存在内的多种优化策略。这使
13、得基于 DPDK 的网络功能部署更加灵活高效。因此将 DPDK 和 FPGA 相结合,通过构建专门的用户态驱动连接 FPGA 和上层的应用,能够更好地发挥 FPGA 智能网卡的优势,提高网络系统的数据传输性能。DPDK 框架主要搭载于以 Intel 为主的商用网卡上,对 FPGA 的支持范围有限。近年来,随着 Intel 在 FP-GA 市场的不断发展,新版的 DPDK 推出了用于提供对 Intel FPGA 产品的标准化访问接口的可编程加速引擎(Open Programmable Acceleration Engine,OPAE)8,使得软件开发人员可以更加透明地调用 FPGA 资源进行数据
14、传输。另一主流 FPGA 供应商 Xilinx 也提供了支持 DPDK 的 QDMA(Queve Direct Memory Access)IP 核及其轮询模式驱动。在这些商用 FPGA 产品中,其网卡功能区往往是以不可见的网表文件或者可执行文件提供,驱动程序也是针对特定结构设计,扩展能力有限。此外,在一些利用 FPGA 进行网络加速的工作中也实现了 FPGA 至用户空间的数据传输通道。文献9在 FPGA 平台上部署了 Xilinx XDMA IP 核,利用 Linux 内核驱动连接主机。FlueNT10G10利用 go 语言集成了对双向侧带通道的访问接口,用以配置 FPGA 执行网络流量捕获
15、。文献11提出了一种支持单向数据接收路径的设备驱动,在该设计中 CPU 和 FPGA 之间通过单个环形队列进行数据通信,实现了 40 Gbit/s 的数据接收性能。文献12,13遵循 DPDK 逻辑开发了支持 FPGA 访问的零拷贝的用户态驱动,但他们并没有实现对 FPGA 虚拟功能端口的扩展。相比之下,本方案更强调对虚拟端口以及可扩展多队列策略的支持,通过搭建基于 DPDK 的轮询模式驱855 期王可 等:基于 FPGA 智能网卡的高性能 DPDK 驱动设计动,实现更高效的 FPGA 智能网卡接入。2驱动系统设计DPDK 提供的 UIO 驱动,可以将运行在 Linux 内核的网络设备信息映射
16、到用户空间。我们在此基础上开发了针对 FPGA 智能网卡模型的轮询模式驱动,并为上层应用开放用户空间的访问接口。主要实现的驱动函数如图 1 所示,可以分为设备初始化、设备启动配置以及数据收发在内的多种标准 DPDK 接口的内层功能实体。图 1主要驱动函数接口示意图2.1探测和初始化图 2驱动初始化过程图FPGA 的探测和初始化过程如图 2 所示,DPDK 通过管理设备列表和驱动列表来访问具体的网络设备。首先,我们需要在本方案驱动程序代码中执行 RTE_PMD_REGISTER_PCI 宏注册函数,将其挂在一个全局的驱动列表中。具体的初始化过程由 DPDK 环境抽象层初始化函数(rte_eal_
17、init),以及封装在该函数内的针对 FPGA 虚拟端口的初始化函数执行。当开启应用程序时,rte_eal_init函数首先扫描绑定 UIO 驱动的设备,将供应商 id、设备 id以及 PCI 挂接位置等信息填充到 PCI 设备结构体中。并按照地址大小依次挂接各个设备结构体到设备列表中。然后 DPDK 会从设备列表中依次读取设备信息,并为每一个设备遍历驱动列表。在驱动注册中我们分别为 FP-GA 物理功能(PF)和虚拟功能(VF)端口指定了供应商id,设备 id为0 x1234:0 x1001和0 x1234:0 x1002的映射表项。对于虚拟端口的访问,则需要在对应的驱动程序中添加0 x12
18、34:0 x1002 的设备信息映射表项。如果二者设备信息相同,则匹配成功,然后针对该设备执行具体的驱动初始化流程。包括对 FPGA 板卡的初始化,软件内存空间的创建,以及对设备数据结构字段的填充。如果是 PF 驱动,还需要执行对 SR-IOV 功能的开启,以及在不同 VF 之间配置多队列硬件状态管理资源。但是,由于内核态具有更严格的安全机制和更高的特权级别,为了保证网络系统运行的安全性,我们一般选择将 PF 运行在内核模态,然后开放 VF 端口给用户空间。因此,要求 FPGA 板卡能够同时为中断处理模式和数据轮询传输模式提供服务。95网络新媒体技术2023 年最后,将获取的 FPGA 设备信
19、息封装在 rte_pci_device 设备数据结构中,该结构体还包括一个 eth_dev_ops 的元素,指向用于访问网络设备的函数指针,包括队列配置、端口启动等操作,以及数据传输函数指针。驱动程序需要将这些具体的功能单元挂接到 DPDK 函数指针上,供上层应用访问。自此驱动的初始化流程基本完成。2.2设备启动配置当完成初始化操作后,我们按照 DPDK 网卡启动流程执行对访问端口的启动配置操作,包括端口配置(fpga_dev_configure)、接收队列设置(fpga_rx_queue_setup)、发送队列设置(fpga_tx_queue_setup)以及设备启动函数(fpga_dev_
20、start)。在 DPDK 中,实际使用端口及队列信息可以通过命令行参数传递给应用程序,这些参数被下发到指定设备驱动的具体执行函数中。端口配置函数提供了对收发队列数组的检验,我们通过寄存器接口读取硬件队列参数,并计算每个 VF 可创建的队列总数。若用户通过命令行开启的队列数大于目前 VF 支持的范围则返回检测错误信号 error 标识。如果成功,进一步执行收发队列设置函数,初始化相应的队列实体。图 3队列启动配置流程图以接收队列为例,具体队列初始化过程如图 3 所示。应用层接口函数向驱动程序传递的参数包括描述符数量(desc_num)、启动端口号(port_id)、访问队列号(queue_id
21、)、NUMA(Non-Uniform Memory Access)节点(socket_id)、内存池指针(mempool)以及配置结构体(rx_conf)。首先我们需要判断每个接收队列支持的最大描述符数量。其次,为当前队列结构体分配内存空间,若为 NUMA 架构,则在指定 NUMA 节点上创建。还需要在内存分配前清空当前队列信息,防止历史数据干扰。然后便是对具体队列元素的填充,这包括端口号、队列号、队列深度等信息,以及其他的如校验和卸载等配置属性。在 DPDK 多队列中,我们通过 3 个环形缓冲区来管理数据传输。创建的描述符环是一块地址连续的内存空间。每个描述符都可以被实现为固定大小的内存块,
22、包括数据 DMA 内存地址、数据 DMA 内存空间大小以及 VF端口号。在硬件中提供了共享多队列管理逻辑,来自多个 VF 端口的队列请求都会在该逻辑中进行统一调度。因此,我们需要在描述符中指定当前使用 VF 端口的信息,用于映射当前端口软件虚拟队列到硬件物理队列管理模块。在硬件中可以通过描述符环基地址以及固定的偏移步长获取描述符信息,并根据描述符中提供的主机内存地址向指定位置传递数据包。创建的写完成描述符环与描述符环具有相似的数据结构,当数据传递完成后,FPGA 通过写完成描述符通知上位机该数据包的大小、校验和、时间戳等卸载功能。此外,我们还为每个队列创建环形 Mbuf 链表用以接收数据包。发
23、送队列设置函数提供了与之相似的处理逻辑。当队列配置完成后,我们通过设备启动函数向上层应用开放该端口及队列信息。在端口使能之前,我们还在启动函数中提供了一系列的初始化操作。首先屏蔽与该端口关联的中断信号,将中断悬挂位置 1,防止硬件传递完数据包后触发中断处理逻辑。在 FPGA 中,将 2048 个扩展消息信号中断(Message Signal Inter-rupt eXtend,MSI-X)均匀的分配给 256 个逻辑端口,各个 VF 之间中断信号独立,对当前 VF 的中断屏蔽不会影响其他 VF 运行在中断处理模式下。其次,将描述符环和 Mbuf 链表关联起来,如图 4 所示,DPDK 通过内存
24、池管理 Mbuf 结构体,初始化过程中,队列从传递的内存池指针处提取空的 Mbuf 结构体,依次串接在Mbuf 链表中,在描述符环中,每个描述符通过队列指针和 Mbuf 结构体建立连接,并将 Mbuf 数据空间头指针提供给描述符用作 DMA 内存指针。FPGA 根据读取的描述符中的地址信息,向 Mbuf 数据空间传递数据,而应用程序同样可以调用该 Mbuf 结构对数据包进行处理,该方式消除了内存数据拷贝开销。065 期王可 等:基于 FPGA 智能网卡的高性能 DPDK 驱动设计图 4双环绑定关系图2.3软件数据收发DPDK 通过 Mbuf 结构体来管理数据包。为了降低数据传输成本,提高软件吞
25、吐性能,DPDK 尝试通过一组突发模式的应用程序编程接口(Application ProgrammingInterface,API)和网络设备驱动进行通信。API 使得驱动程序能 够一次性为 来自 FPGA 的多 个 数 据 包 填 充Mbuf 结构体,然后交付由应用程序进行处理,并允许应用程序合并处理完成的 Mbuf 结构体以相反的方向发送给驱动程序传出。针对 FPGA 智能网卡设计的突发模式的数据收发过程由驱动中的接收函数(fpga_recv_burst)和发送函数(fpga_xmit_burst)实现。在 FPGA 智能网卡中,我们提供的数据接收逻辑包括:接收描述符获取、数据DMA 传递
26、、写完成描述符传递,最后通过中断通知上位机传入数据包。在轮询模式中,我们屏蔽了中断信号接口,将当前队列关联的中断信号生成逻辑禁用。然后在应用程序中轮询监测数据包的写完成描述符。fp-ga_recv_burst 函数的参数接口包括接收队列指针、Mbuf 结构体指针、指定配额的最大突发传输数量。接收队列指针指向了具体访问的 VF 队列,通过 for 循环的方式监测该队列数据接收情况。Mbuf 结构体指针用于接收数据包信息,并传递给上层应用访问。应用程序中还可以通过修改突发配额调整最大轮询次数,以适配最优的数据传输性能,我们指定为 64。具体的数据接收过程如图 5 所示。首先获取该队列的写完成描述符
27、环的头尾指针,并根据指针差值判断是否有数据写入。当数据从 FPGA 传入主机内存后,FPGA 更新写完成描述符环头指针,驱动数据接收函数则从尾指针处依次获取写完成描述符信息,这包括数据包长度,时间戳等其他辅助信息。同样的,从 Mbuf 链表的尾指针处获取一个 Mbuf 结构体,并将包长等元数据信息填充到该 Mbuf 结构体头部,一并传递给应用程序。传递完成后,重新从内存池中获取一个新的 Mbuf 结构链接到Mbuf 链表中,等待下一次的数据接收,并同步更新描述符环以及写完成描述符环。图 5数据接收示意图本方案中,我们还提供了对于巨帧的支持,每个 Mbuf 结构体的数据空间最大尺寸为 2 048
28、 字节,我们通过在 Mbuf 链表的每个节点上创建 4 个首尾相连的 Mbuf 结构体,从而允许最大数据传递尺寸扩充到 8 192字节。在接收函数中读取的第 1 个写完成描述符中,若数据包长度大于 2 048 字节的限度,则将数据包的第1 个分段链接到当前 Mbuf 结构体中,并对包长做递减操作。然后从描述符环中获取下一个描述符信息,并从该描述符中的指向位置获取数据包的第 2 个分段,依次类推,直至剩余包长小于等于 2 048 字节的限度值,将剩下的数据全部链接到最后一个 Mbuf 中,最后将多个 Mbuf 以 next 指针的方式串接在一起。fpga_xmit_burst 函数提供了与接收路
29、径相反的数据处理逻辑,接收来自应用程序的 Mbuf 结构体,并将数据包发送信息转换成硬件可识别的一个或多个描述符字段。除了指向数据的地址和长度信息外,发送描述符还包括当前 VF 的 id 号。通过该 id 号,FPGA 可以计算发送队列的物理映射地址,并向上位机中指定的虚拟设施内存发起 DMA 数据转发请求。待描述符传递完成后,发送逻辑将该 Mbuf 结构体释放回内存池16网络新媒体技术2023 年中。收发逻辑之间以 Mbuf 为单位的数据生成和释放,实现了对内存资源的灵活管理。并且该过程完全屏蔽了内核协议栈以及上下文切换的问题,实现了应用程序和数据缓冲区的直接对接,具有更高的数据传输效率。3
30、实验本文提供了对 DPDK 轮询模式驱动的性能分析。我们将该设计部署在 FPGA 智能网卡和戴尔服务器上。FPGA 智能网卡的芯片型号为 XILINX Zynq UltraScale+ZU19EG,并通过 QSFP28 光口连接网络,支持高达 100 Gbit/s 链路速率。为了测试对虚拟功能端口的访问性能,我们在戴尔服务器上利用 KVM(Kemel-based Virtual Machine)管理程序搭建了一个虚拟机系统,该系统具有 8 个主频 2.3 GHz 的 CPU 内核和 32 GB内存,通过指定的 VF 端口和 FPGA 相连。SR-IOV 功能的开启允许将多个 VF 端口直连给虚
31、拟设施,该方式和直接在物理机上部署具有相似的传输性能。测试中,我们将 FPGA 与 Ixia 流量发生器相连,通过 Ixia 设备生成持续的高速测试流量给 FPGA 和服务器系统。设备硬件连接如图 6 所示。软件中,我们提供了一款运行在 DPDK 框架下的环回测试程序,该测试程序中的每个线程关联一组收发队列的数据传输,并且多个环回线程被独立的执行在不同的 CPU 处理核心上。收发队列的数量可以通过命令行参数进行灵活的调整。自 Ixia 的高速网络数据包经过 FPGA 分流处理,由指定 VF 端口的传输队列接入 DPDK 驱动,数据包在驱动程序接收队列上被打包为 Mbuf 结构体,经测试程序环回
32、转发后从对应的发送队列传出,最后在 Ixia 设备中观测数据收发情况。图 6实验环境硬件连接图图 7用户空间数据环回测试图图 7 给出了针对不同尺寸数据包,多种队列组合的吞吐性能。我们将环回测试程序运行在 1、2、4、8 组收发队列上,每组队列独立占用 CPU 核心。该设计允许通过软硬件参数配置为复杂的网络功能扩展更多的队列资源,但就吞吐性能而言,4 组队列和 8 组队列具有相同的性能曲线,因此 8 组队列的组合足以验证本方案的最大传输性能。由图 7 结果可以看出,本方案在单组收发队列上便能够为长度在 4 096 字节以上的数据包提供 90 Gbit/s 的环回转发效率。而相较于利用 pf_r
33、ing 测试工具执行的基于内核驱动的数据传递,对于 8 192 字节的巨帧,即使仅在接收的情况下,最大传输性能也只有 40 Gbit/s,这远低于本设计方案的性能。图 7 中还展示了其他尺寸数据包的测试结果,随着开启的收发线程的数量增加,其吞吐性能也随之增加,并在队列数为 4 组时到达稳定传输。这说明对于小包传递,单核的处理性能有限。将数据包传输服务均匀地分配在多个处理核心上可以提高整体的传输性能。即使将队列数增加到 8 组时,其性能也不能接近线速。这是由于对于小包传输的性能瓶颈不仅在于软件处理能力,而且受限于 DMA 效率。在目前的智能网卡方案中,我们采用了以数据包为单位的描述符交互方式。每
34、接收一个数据包,FPGA 需要向上位机索取一个描述符,并在数据传递完成后生成一个数据完成描述符。在数据转发过程中存在同样的操作数。因此一265 期王可 等:基于 FPGA 智能网卡的高性能 DPDK 驱动设计次数据包环回操作需要另外 4 次额外的 DMA 访问开销,并且每次 DMA 传递都需要为描述符或者数据包封装 TLP 格式的包头字段。这些开销在一定程度上影响了通过 PCIe 总线发送网络数据包的速率。数据包越小,有效传输占比越小。为此,我们也考虑后续通过批处理描述符读取和完成写操作,以减小无效数据开销,改善数据包 DMA 传输性能。因此,进一步统计了本测试方案的延迟性能,并将测试结果记录
35、在表 1 中。在单个收发线程中执行对多种尺寸数据包的环回转发测试,测试负载为图 7 中展示的各个尺寸数据包在单个收发队列上的最大吞吐性能。我们分别截取了程序稳定运行 1 min-5 min 节点时的平均传输时延。由表 1 可以看出,不同尺寸包长的环回测试中,整体传输时延在 s 级,并且在不受其他任务干扰的情况下,长时间运行的时延偏差可以保持在 ns 级。因此,此设计具有较高的稳定性,能够满足大多数对延迟敏感的应用需求。表 1延迟性能统计表(延迟单位:s)测试包长(Bytes)测试负载(Gbit/s)采样时间(min)12345641.7621.6921.0221.1321.2821.16128
36、3.4621.5821.6621.6321.6121.592566.9722.6022.2622.5622.3122.0951214.4322.1222.1422.3322.2722.40102426.5724.9624.7524.0723.9124.77204850.3528.0828.2428.4128.5928.25409690.0237.9537.8737.7337.8137.63819290.8746.0646.0947.2746.5545.464结束语本文实现了针对 FPGA 智能网卡高性能数据传输的 DPDK 轮询模式驱动,在 FPGA 和用户空间应用程序之间构建了高效的软件中间
37、层。该驱动设计提供了硬件虚拟化端口的用户空间初始化操作、设备启动配置,以及突发模式的数据传输函数。将驱动接口函数挂接到 DPDK 标准 API 组上,从而方便了上层应用更加灵活地访问 FPGA 智能网卡设备。该设计还通过关联描述符环和 Mbuf 链表,将来自 FPGA 的网络数据包直接存储到 Mbuf 结构体中,实现了零拷贝的数据传递。并在环回测试中评估了所提出的驱动方案。实验结果表明,该设计能够在 FPGA 和用户空间应用程序之间实现多队列数据传输,具有较高的 I/O 传输灵活性。采用该驱动方案,运行在单个 CPU 核心上的环回测试线程能够达到 90 Gbit/s 的数据传输性能,针对不同尺
38、寸的数据包的实际最大传输负载提供稳定的通信时延,为基于 FPGA 的网络应用开发提供了高性能的 I/O 传输效率。参考文献1 Wang K,Chang Y,Guo Z.High Performance Network Virtualization Architecture on FPGA SmartNICJ.IEICE Transactionson Communications,2023,106(6):500-508.2 Lin X,Chen Y,Li X,et al.Scalable kernel TCP design and implementation for short-lived c
39、onnectionsJ.ACM SIGARCHComputer Architecture News,2016,44(2):339-352.3 Pesterev A,Strauss J,Zeldovich N,et al.Improving network connection locality on multicore systemsC/Proceedings of the7th ACM european conference on Computer Systems.2012:337-350.4 Han S,Marshall S,Chun B G,et al.MegaPipe:a new pr
40、ogramming interface for scalable network I/OC/Presented as part ofthe 10th USENIX Symposium on Operating Systems Design and Implementation(OSDI 12).2012:135-148.36网络新媒体技术2023 年5 Rizzo L.netmap:a novel framework for fast packet I/OC/21st USENIX Security Symposium(USENIX Security 12).2012:101-112.6 Ki
41、m J H,Na J C.A study on one-way communication using PF_RING ZCC/2017 19th international conference on advancedcommunication technology(ICACT).IEEE,2017:301-304.7 曾理,叶晓舟,王玲芳.DPDK 技术应用研究综述J.网络新媒体技术,2020,9(2):1-8.8 Intel.Intel opae EB/OL.(2017)2023-02-20.https:/opae.github.io/0.13.0/docs/fpga_api/quick
42、_start/readme.ht-ml.9 Du L,Zhang Z,Tong J,et al.Research on XDMA High-Speed Data Transmission Architecture Based on PCIeC/2020IEEE 6th International Conference on Computer and Communications(ICCC).IEEE,2020:1783-1787.10 Oeldemann A,Wild T,Herkersdorf A.FlueNT10G:A programmable FPGA-based network tes
43、ter for multi-10-gigabit eth-ernetC/2018 28th International Conference on Field Programmable Logic and Applications(FPL).IEEE,2018:178-1787.11 Watanabe Y,Kobayashi Y,Takenaka T,et al.Accelerating NFV application using CPU-FPGA tightly coupled architectureC/2017 international conference on field prog
44、rammable technology(ICFPT).IEEE,2017:136-143.12 Kublek J.High-speed DMA packet transfer in system DPDK EB/OL.(2018)http:/excel.fit.vutbr.cz/submissions/2018/012/12.pdf.13 Wang J,Lv G,Liu Z,et al.Programmable Deterministic Zero-Copy DMA Mechanism for FPGA AcceleratorJ.Applied Sci-ences,2022,12(19):9581.作者简介王可,(1994-),男,博士研究生,主要研究方向:FPGA 智能网卡高性能数据传输。王鑫硕,(1999-),男,硕士研究生,主要研究方向:FPGA 网络数据处理。郭志川,(1975-),男,研究员,主要研究方向:FPGA 网络加速。46