随着智能化信息产业的迅速发展, 数据采集的需求也急剧增加。 基于 FPGA 的NVMe 存储系统凭借高性能、 大容量等优势被广泛应用于数据采集系统。 然而现有的NVMe 解决方案大多只关注 NVMe 协议层的优化与数据吞吐量性能, 尽管在顺序读写环境中实现了性能提升, 但是面临较复杂的带有零散数据的数据环境时, 缺少灵活性且难以满足随机读写性能需求。针对以上问题, 本系列博文给出一种基于 FPGA 的 NVMe over PCIe(NoP) 逻辑加速引擎IP设计方案。 该引擎IP使用纯逻辑电路设计, 用于提供对 NVMe 固态硬盘的存储控制, 实现 DMA 数据传输。下图给出应用于VC709的一种结构示意图范例,实际上它可以应用于不同平台。(抱歉 上传不了图)
该IP方案采用模块化设计思想。它由系统控制模块、初始化模块、 NVMe 控制模块和 PCIe 加速模块组成;并包含 AXI4-Lite 接口和 AXI4 接口,两个接口分别用于系统控制和数据传输。系统控制模块使用寄存器来实现对系统功能的控制,并通过AXI4-Lite 接口提供对寄存器的访问。初始化模块负责执行初始化流程并反馈初始化状态,主要包括 PCIe 初始化和 NVMe 初始化。NVMe 控制模块实现 NVMe 指令提交与完成机制,主要包括指令组装与分配、 队列管理和寻址机制。PCIe 加速模块负责实现 TLP 事务与 NVMe 事务的相互转换,并完成数据传输。NoP 逻辑加速引擎工作时,首先通过系统控制模块启动初始化流程,完成 PCIe 设备枚举和 NVMe 寄存器配置。初始化结束后根据用户配置的控制寄存器内容自动执行 NVMe 事务, 同时由 PCIe加速模块完成 DMA 数据传输。该 NoP 逻辑加速引擎将 NVMe 事务抽象为寄存器级事务,通过访问寄存器直接执行 NVMe 命令, 因此可以方便地实现功能控制与系统集成。 此外, 原本由软件执行的初始化流程和 NVMe 机制使用硬件直接实现, 使 NoP 逻辑加速引擎脱离了对 CPU 的依赖, 并降低了其对部署环境的要求, 提高了通用性。 同时 NVMe 队列管理功能使用存储与控制分离的方式实现, 可支持最大数量为 16、 总深度为 1024 的动态配置队列。 在面对不同的数据环境时, 用户可以动态的调整 NoP 逻辑加速引擎的队列配置, 不仅能保证顺序读写性能, 也能满足随机读写的需求, 实现高性能的同时提供了灵活性。
经IP实测结果表明, NoP 逻辑加速引擎可以实现 NVMe 核心功能, 并提供动态配置队列和 DMA 功能。 在性能方面, 4KB 随机读写性能最高分别达到了 642,333IOPS 和 656,194 IOPS; 读写吞吐量性能最高分别达到 3136MB/s 和 2652MB/s; 读写延迟最低分别达到 17,684ns 和 2,184ns。 基于以上数据,该设计可以满足项目对更高性能和更加灵活的数据缓存控制需求, 并具有一定的工程应用价值。
最新推出适合PCIe4.0的NVMe IP。详见:B站 搜用户: 专注与守望
--
FROM 111.18.92.*