中文 英语
系统与设计
的意见

NVMe SSD千兆性能评估

使用嵌入式原型板来减少系统启动时间并简化定制工作。

受欢迎程度

NAND闪存技术的多通道并行性和低延迟访问使得基于非易失性快速存储器(NVMe)的ssd在数据存储市场的主要领域非常受欢迎,不仅包括消费电子领域,还包括数据中心处理和加速服务,其中基于fpga的专用硬件在特定应用工作负载中发挥了关键作用。

通过扩展其功能,Aldec已经上升到对基于fpga的仿真和原型平台的NVMe连接解决方案日益增长的需求投资组合基于fmc的I/O扩展子卡,包括可堆叠FMC-NVMe通过高性能PCIe开关,支持M.2外形尺寸的x4 NVMe ssd。

验证此FMC-NVMe卡性能的最简单方法是将其连接到Aldec的Zynq US+ mpsoc嵌入式原型板产品线的TySOM-3或3A板。由于MPSoC的可编程逻辑(PL)部分的集成PCIe块,并且在MPSoC的处理系统(PS)部分的ARM Cortex-A53内核上运行的嵌入式Linux的控制下,这些板能够与NVMe接口。

在这篇博客中,我们将评估Aldec的TySOM-NVMe捆绑包在现实世界基准测试任务中的性能潜力,并强调可供所有客户使用的参考设计的细节,以减少他们的系统启动时间并简化他们的定制工作。

Xilinx Vivado硬件设计
提供FMC-NVMe作为PCIe端点设备,并且由于NVMe协议需要4x PCIe Gen3通道,Zynq US+ MPSoC主机的硬件设计主要集中在PCIe根复杂子系统实现上。

PCIe根复合物的根端口构建在高性能和可配置的Xilinx AXI桥上,用于PCIe Express Gen3 IP (XDMA),它基于可用于UltraScale+ FPGA设备的PCIe Gen3集成块。Vivado IP Integrator的整体块设计如图1所示(Vivado 2018.3)。


图1:PCIe根复杂主机实现(TySOM-3-ZU7EV)

PCIe根复合物通过x8个Gen3通道连接到FMC- nvme子卡上的32通道Microsemi PM8532 PCIe开关,通过高引脚数(HPC) FMC连接器(FMC1),产生64 Gb/s的理论带宽。PCIe主要配置参数如图2所示。


图2:PCIe桥基本参数(TySOM-3-ZU7EV)

注意,FMC1连接器为TySOM-3-ZU7EV和TySOM-3A-ZU19EG板提供了MPSoC主机和FMC-NVMe之间所需的8x GTH链路。PM8532开关负责连接4通道M.2连接器的4x NVMe ssd。剩余的8个通道被路由到堆栈中上游FMC- nvme卡的顶部FMC连接器。整个系统拓扑如图3所示。

虽然所引用的PCIe根复杂子系统实现是通用的,并且可以与大多数类型的PCIe端点设备一起工作,但有几个系统设计考虑因素已经被考虑在内,特别是对NVMe ssd的支持,以保证硬件、IP和相应的Linux驱动程序(PCIe -xdma-pl)的无缝互操作性。

这些考虑因素是:

  • 正确的AXI地址宽度配置,对齐和映射,包括支持PS DDR HIGH段(访问低于2gb的系统内存)-参见图4;
  • 用于PCIe中断的MSI解码模式,以避免处理多个高速下行设备时MSI中断FIFO溢出和超时。这对于FMC-NVMe的正确操作是非常重要的;
  • 为正确的下游设备枚举,在低32位地址内存空间中分配了至少一个不可预取的AXI BAR(参考设计中的BAR0)。

请参考Xilinx Answer Record 70854文档获得MPSoC PCIe根复合PL实现技巧的完整列表。


图4:XDMA IP的地址映射

Linux中的NVMe支持
近年来,一些主要的增强已经集成到主线内核中以支持NVMe协议,不仅包括NVMe驱动程序本身,还包括块层的一些改进,以有效地处理块I/O请求。

在我们的参考设计中使用的嵌入式Linux内核是基于Xilinx的内核源代码树(v2018.3 - 4.14.0内核版本)构建的,来自基于arm64的Zynq US+ MPSoC设备的xilinx_zynqmp_defconfig默认配置文件。注意,默认情况下,对基于MPSoC pl的PCIe根复合物和NVMe块层的支持是禁用的,必须手动选择另外两个驱动程序,如图5和6所示。


图5:选择XDMA PCIe主机驱动


图6:选择NVMe块设备驱动程序

NVMe用户空间基准测试
参考解决方案在M.2形状因子的不同型号NVMe ssd上进行了测试。其中包括西部数据公司(Western Digital)和三星(Samsung)最畅销的卡,以及成本优化的Lite-On卡。基于TySOM-3A-ZU19EG板,连接x1 FMC-NVMe和x4 NVMe SSD存储的完整的启动和运行硬件设置如图7所示。

执行基准测试的主要思想是测量TySOM-NVMe捆绑包可实现的线性读/写数据速率,并将其与NVMe驱动器制造商声明的数据速率进行比较。

Linux操作系统成功启动后,下一步是验证系统中是否存在已连接的NVMe ssd,这可以通过NVMe -cli工具轻松完成(如图8所示),NVMe -cli工具是Linux用户空间中用于NVMe管理的主要工具。


图7:基于TySOM完成硬件设置


图8:NVMe -cli Tool发现的NVMe ssd

线性I/O估计是使用标准的dd命令行实用程序进行的。注意,使用DIRECT_IO方法是为了避免一些Linux VFS堆栈开销,例如页数据块的页缓存转换,直接将I/O请求提交给块I/O层,然后再提交给nvme硬件驱动程序。

可以使用Perf性能分析和用户空间命令行实用程序对通过Linux内核堆栈跟踪的读/写操作进行更详细的监视。由Perf捕获的简化函数调用跟踪如图9所示。


图9:已发出写操作的简化内核跟踪

基准测试结果显示,数据传输速度和数据传输大小之间近似线性相关,读取时峰值为3.3 GB/s。在写传输的情况下,当大部分数据存储使用较慢的TLC NAND技术时,由于作为写缓存的高速SLC NAND内存的大小不同,每个测试NVMe SSD都有自己的峰值性能区域(1.0到1.5 GB/s)。

图10清楚地显示了这种级别的NVMe I/O性能使用标准Page Cache机制是无法达到的,该机制提供了大约3倍的数据速率(850 MB/s RD和550 MB/s WR)。


图10:直接I/ o与页缓存数据速率

图11和图12分别显示了收集到的性能数据与声明值的读和写操作的比较。


图11:读性能比较


图12:编写性能比较

可以看到,TySOM-NVMe接口解决方案的性能足够好,可以最大限度地利用成本优化的NVMe ssd,提供3100 MB/s的读和1000 MB/s的写;正如卖方所声称的那样。

在具有更高I/O性能的存储驱动器的情况下,获得的数据速率也会更高,几乎达到测试中使用的NVMe驱动器的最大值。

最后,但并非最不重要的是,I/O操作可以同时在多个存储驱动器上执行,以获得更高的整体数据传输速率。在当前的基准测试中,同时4x驱动器I/O接口的峰值性能在读时被限制在4 GB/s,在写时被限制在3.4 GB/s。

结论
Aldec的TySOM-NVMe硬件包被证明是这类嵌入式平台可以实现的每秒千兆NVMe SSD性能的一个很好的演示。

尽管市场上有来自IP设计公司的定制专有NVMe IP加速器,但基于嵌入式mpsoc的解决方案提供了足够的数据传输速率和丰富的功能,再加上Linux操作系统的灵活性,可以满足广泛的专业数据存储应用程序所需的不断增长的I/O速率。



留下回复


(注:此名称将公开显示)

Baidu