BittWare 软件开发工具包(SDK)、CSP和BMC
BittWare SDK适用于BittWare FPGA硬件的软件开发包概述 BittWare的SDK是一个跨平台的驱动程序、库、模块和实用程序的集合,有助于
高分辨率的传感器可以产生需要FPGA预处理的数据率,将其输出减少到主机可以捕获和处理的程度。如果FPGA后的数据率超过约40Gb/秒,将该数据移入主机需要专门的解决方案。
BittWare的架构概念可以灵活地满足客户的IP需求并降低成本。
本白皮书介绍了BittWare的高速数据捕获和记录器概念中的数据捕获部分。我们解释了用于通过PCIe总线向主机DDR4实现持续100Gb/s捕获的一些技术。
这个概念的目标是实现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+ 卡上。
需要比本白皮书提供的更多细节吗?要求提供应用说明,它提供了我们的数据采集概念的文件。点击这里 >>
理论上,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 "选项。
在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。
这个概念有两个可选组件,一个是在固态硬盘上添加记录元素,另一个是利用XUP-P3R拥有第二个PCIe接口的能力,允许高达200Gb/s的捕获。
使用双插槽主板,可以记录100GbE数据包流。BittWare IP将数据包捕获到连接到其中一个插座的主机DRAM中。 然后应用软件通过处理器插座之间的QPI链路将MBUFs移动到连接到另一个CPU插座的PCIe上的RAID 0 NVMe中。未来的白皮书将解释这是如何做到的。综上所述,需要的NVMe驱动器比你想象的要多很多。这是因为流行的TLC固态硬盘的NVme驱动器数据表倾向于指定其伪SLC缓存的写入性能。溢出缓存,写入性能就会急剧下降。最新的QLC固态硬盘在长时间、无休止的流式写入方面实际上比老式的磁盘技术要慢!
通过在有两个CPU的TeraBox中增加第三槽附加卡,XUP-P3R可以在两个Gen3 x16 PCIe接口上实现200 Gb/s的速度!
对于需要超过100Gb/s捕获的客户,另一个选择是利用XUP-P3R的SEP到PCIe附加卡。这可以实现高达约200Gb/s的主机内存。第二个连接是在相邻的PCIe插槽中。请注意,这个选项将消耗第二个CPU,而没有选择以线速记录到持久性内存。
客户也可以只在一个有两个或更多CPU的主板上使用两块FPGA卡。
今天的传感器越来越快,这导致了两个CPU的挑战。首先是将I/O接入CPU,其次是将传感器数据转化为可操作的信息。FPGA经常被用来通过硬件预处理来弥补这一差距,然而,在许多情况下,即使减少的数据量也足以使CPU承受压力。
在这篇白皮书中,我们研究了如何最大限度地提高PCIe带宽,以捕获高达100Gb/s,包括使用CPU捕获到DRAM。这仍然有可能对CPU造成压力,因此在下一篇白皮书中,我们将完全绕过CPU,直接记录到NVMe。
BittWare正在利用其多年的经验帮助客户将数据挤入CPU,以产生解决这些问题的架构概念。有了这些概念,再加上利用BittWare广泛的FPGA卡和集成服务器组合进行大规模部署的能力,客户可以随时为特定的用例构建数据采集和记录器设备。关注BittWare的社交媒体渠道,了解最新的出版物。
你在这一页看到的是BittWare的数据采集的介绍。在完整的应用说明中有更多的细节!请填写表格,要求获得PDF版本的完整应用说明。
"*"表示必填项目
BittWare SDK适用于BittWare FPGA硬件的软件开发包概述 BittWare的SDK是一个跨平台的驱动程序、库、模块和实用程序的集合,有助于
PCIe FPGA 卡 520NX Stratix 10 AI 优化 FPGA,带 HBM2 AI 优化,用于高带宽、低延迟 AI 加速 过时产品通知:此产品已过期
小组讨论 今天的FPGA如何解决数据泛滥的问题 从第五代到人工智能,从NOC到边缘的RF 观看录音,以了解
带有HBM2和480Gbps光学输入的PCIe FPGA卡520R-MX Stratix 10 FPGA板,针对具有大量实时数据采集要求的传感器处理应用进行了优化