卫星天线

白皮书

PCIe数据采集

概述

高分辨率的传感器可以产生需要FPGA预处理的数据率,将其输出减少到主机可以捕获和处理的程度。如果FPGA后的数据率超过约40Gb/秒,将该数据移入主机需要专门的解决方案。

BittWare的架构概念可以灵活地满足客户的IP需求并降低成本。

本白皮书介绍了BittWare的高速数据捕获和记录器概念中的数据捕获部分。我们解释了用于通过PCIe总线向主机DDR4实现持续100Gb/s捕获的一些技术。

PCIe数据采集的架构目标

这个概念的目标是实现100Gb/s的速度,从FPGA出来,进入主板,客户可以使用许多CPU核心处理这些数据。它通过PCIe和CPU将数据从FPGA卡转移到主机DDR4上。有一些可选的组件可以记录到持久性内存(需要一个专门的CPU来完成这项任务),并增加第二个PCIe,以便使用两个CPU来捕获200Gb/s的数据到DDR4。

数据捕获概念可在BittWare Developer 网站上向使用基于 AMD 和英特尔 FPGA 产品的客户提供。它消耗 AMD Virtex UltraScale+ VU9P FPGA 的 12%。客户可以比较容易地将该项目调整到另一个 BittWare Agilex 或 UltraScale+ 卡上。 

数据采集插图
应用程序注释缩略图
数据采集应用说明的样本页

索取应用说明

需要比本白皮书提供的更多细节吗?要求提供应用说明,它提供了我们的数据采集概念的文件。点击这里 >>

我们如何实现100Gb/s的PCIe数据采集

PCIe理论与实践

理论上,PCIe Gen 3每条通道可以传输985 MB/s。对于16倍来说,这意味着每个方向都有15.760 GB/s(126 Gb/s),远远超过我们的100 Gb/s目标。然而,沿路有多层协议以及缓冲区管理。Rolf Neugebauer撰写的了解终端主机网络的PCIe性能》是一篇探讨这个问题的优秀学术论文。

在实践中,BittWare的PCIe数据采集能够将12.8 GB/s(102 Gb/s)从FPGA推入主机DRAM。这只是PCIe理论上最大传输速度的80%多一点。

在实践中,PCIe传输的实际情况要低得多,而且在很大程度上受到用于优化系统的特定方法的影响。实现100Gb/s实际上是一种强调PCI的好方法--对于非常大的数据包,100Gb以太网(GbE)接近12.5GB/s,为元数据留下300MB/s的空间。然而,当一个饱和的100GbE由所有微小的数据包组成时,总体数据速率要低得多,但PCIe总线交易的数量可以上升,以不同的方式对PCIe施加压力。

我们使用以太网来代替BittWare客户通常使用的专有传感器。我们的解决方案既可以通过大数据包,也可以通过微小的数据包,而不会丢掉任何数据。接下来,我们将解释我们是如何做到这一点的。

实施第一部分:优化主机

当通过PCIe推送高带宽数据时,有一项优化实际上不在FPGA内部,而是在主机的软件方面。看一下CPU的内部结构。

为了实现我们的性能目标,位于芯片PCIe接口和DRAM接口之间的 每个CPU内核必须以全时钟速度运行(没有省电模式),即使该内核不做其他工作。换句话说,每个CPU核都需要处于C-状态0和P-状态0。在Linux中,实现这一目标的方法之一是使用 "tuned-adm "命令并选择其 "latency-performance "选项。

CPU 架构图

实施第2部分:优化PCIe

通过整合优化PCIe交易

在FPGA方面最重要的是尽量减少在总线上移动数据所需的PCIe交易的数量。这意味着在缓冲区管理方案中整合多个数据包,以使每个PCIe事务达到系统协商的 "最大有效载荷 "大小,在现代基于英特尔的系统中一般为256字节。

因此,BittWare产品的一个主要功能就是执行这种合并功能。我们将数据包合并到一个固定大小的缓冲区,我们称之为MBUF。

MBUF的大小可以在FPGA初始化时改变。正如我们所说,MBUF需要是PCIe最大有效载荷大小的固定倍数。我们建议使用4k byes,原因在后面讨论。

在FPGA处理中,将数据包分组以便由不同的控制线程进行处理是非常常见的。我们把这些分组称为 "队列",每个队列都需要流向主机侧的不同处理核心。因此,数据包的整合需要在每个队列的基础上进行。

我们的合并功能是用HLS编写的,它运行在我们接下来讨论的队列管理功能之上。

数据包连接图解

主机队列

我们的 IP 将其 MBUF 数据流发送到主机 DRAM。与其他所有人一样,我们在 DRAM 中使用循环队列。不过,在 AMD 上,我们不使用 QDMA 队列,而是在 QDMA 的桥接功能之上创建自己的替代方案。

AMD QDMA 队列基于 RDMA 数据结构。RDMA 是一种比我们需要的更动态的环境。我们的版本具有描述符环,但主机驱动程序会在 FPGA 初始化时加载描述符,然后重复使用。这样做可以避免在运行时通过 PCIe 发送描述符。此外,作为一个更大的偏差,我们没有完成队列。相反,我们只是重复使用描述符,让主机软件来判断 FPGA 传输数据的速度是否快于主机处理数据的速度。换句话说,我们不是在 FPGA 中丢弃数据,而是在主机上丢弃数据。用 RDMA 术语来说,主机驱动程序从不向 FPGA 发送 CIDX 更新。

我们的队列实现在主机侧使用轮询而不是中断。这是因为中断会消耗更多的PCIe带宽,因为在这两种方法中FPGA都需要向主机发送PIDX更新。实验表明,在现代CPU中,PIDX更新需要在传输一连串MBUFs共计4k字节后发生。这就是为什么我们建议只将单个MBUF做成4k字节。

在主机方面,我们允许我们的队列描述符指向巨大的页面。这样做可以最大限度地减少CPU TLB的丢失。我们还可以根据FPGA卡的位置,在特定的主机NUMA区域分配巨大的页面,以控制相对于主机处理线程的FPGA DMA传输路线,这些线程也被锁定在特定的NUMA区域。

数据捕获的第一个版本是在 AMD XDMA 上分层的。第二个版本将过渡到我们自己的 DMA 传输,分层于 AMD QDMA 的桥接模式之上。

主机控制

我们的PCIe数据采集概念使用标准的Linux VFIO驱动。这使得CPU的虚拟化硬件能够提供进程保护和安全。我们提供一个Python API来控制卡。我们使用一个Python程序将描述符加载到FPGA中,设置DRAM队列,并启动应用代码。BittWare的工具包目前不支持VFIO作为驱动,但计划在未来提供支持。

申请处理

BittWare在主机侧的处理框架是以DPDK(数据平面开发工具包)为模型。我们在主机上使用一个目标队列。一个专门的内核对传入的MBUF进行解析,将MBUF指针发送到工作线程的集合中。一个专门的核心可以在任何MBUF大小下完成这项任务。

我们计划发布示例工作程序,将我们的内部数据结构重新格式化为PCAPng格式。重新格式化需要大约四个工作核心,以跟上任何数据包大小的线速100GbE。

PCIe数据采集架构概念的其他选项

这个概念有两个可选组件,一个是在固态硬盘上添加记录元素,另一个是利用XUP-P3R拥有第二个PCIe接口的能力,允许高达200Gb/s的捕获。

100Gb/s记录

使用双插槽主板,可以记录100GbE数据包流。BittWare IP将数据包捕获到连接到其中一个插座的主机DRAM中。 然后应用软件通过处理器插座之间的QPI链路将MBUFs移动到连接到另一个CPU插座的PCIe上的RAID 0 NVMe中。未来的白皮书将解释这是如何做到的。综上所述,需要的NVMe驱动器比你想象的要多很多。这是因为流行的TLC固态硬盘的NVme驱动器数据表倾向于指定其伪SLC缓存的写入性能。溢出缓存,写入性能就会急剧下降。最新的QLC固态硬盘在长时间、无休止的流式写入方面实际上比老式的磁盘技术要慢!

通过双PCIe的200Gb/s

通过在有两个CPU的TeraBox中增加第三槽附加卡,XUP-P3R可以在两个Gen3 x16 PCIe接口上实现200 Gb/s的速度!

双PCIe数据采集

对于需要超过100Gb/s捕获的客户,另一个选择是利用XUP-P3R的SEP到PCIe附加卡。这可以实现高达约200Gb/s的主机内存。第二个连接是在相邻的PCIe插槽中。请注意,这个选项将消耗第二个CPU,而没有选择以线速记录到持久性内存。

客户也可以只在一个有两个或更多CPU的主板上使用两块FPGA卡。

带扩展卡的 XUP-P3R 与双 CPU 连接的示意图

总结

今天的传感器越来越快,这导致了两个CPU的挑战。首先是将I/O接入CPU,其次是将传感器数据转化为可操作的信息。FPGA经常被用来通过硬件预处理来弥补这一差距,然而,在许多情况下,即使减少的数据量也足以使CPU承受压力。

在这篇白皮书中,我们研究了如何最大限度地提高PCIe带宽,以捕获高达100Gb/s,包括使用CPU捕获到DRAM。这仍然有可能对CPU造成压力,因此在下一篇白皮书中,我们将完全绕过CPU,直接记录到NVMe。

BittWare正在利用其多年的经验帮助客户将数据挤入CPU,以产生解决这些问题的架构概念。有了这些概念,再加上利用BittWare广泛的FPGA卡和集成服务器组合进行大规模部署的能力,客户可以随时为特定的用例构建数据采集和记录器设备。关注BittWare的社交媒体渠道,了解最新的出版物。

还有更多内容可读:获取数据采集应用程序说明

要求下载PDF文件

你在这一页看到的是BittWare的数据采集的介绍。在完整的应用说明中有更多的细节!请填写表格,要求获得PDF版本的完整应用说明。

应用程序注释缩略图
数据采集应用说明的样本页

"*"表示必填项目

名称*
请检查这是一个有效的电子邮件,因为PDF将使用这个地址发送。
地址和城市*