FPGA实现高带宽NVMeSSD读写——纯逻辑实现

这篇具有很好参考价值的文章主要介绍了FPGA实现高带宽NVMeSSD读写——纯逻辑实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目背景

在两年之前的帖子《FPGA实现高带宽NVMe SSD读写》中,我们实现了一个基于PS和PL端的高速NVMe SSD IP。这个IP在我们自己的系统中使用正常,但是由于该IP使用了PS端资源,在与其他应用系统集成时遇到了麻烦。为了保护自有的设计,需要独占PS端的一个ARM处理器,这使得该IP在与其他项目集成时,使用很不方便。除此以外,原方案IP写SSD硬盘的最大速度约为2.8GB/s,而PCIe Gen3条件下理论有效带宽为3.938GB/s,基于x86的PC测速一般为3.6GB/S,FPGA的实现方式与理论速度以及x86平台的速度存在一定的差距,因此希望进一步提高IP的硬盘的读写速率。

为此我们对IP进一步进行优化,仅使用PL资源(不使用PS部分资源)实现一个纯逻辑的NVME Host IP,并也想看看基于FPGA的NVME SSD读写最快能到多少。

方案介绍

本IP的核心是对NVME协议进行解析并对应发出控制信号的NVMe Host模块。该模块的核心工作是实现NVMe协议中的命令队列的生成以及响应。NVMe有两种命令,一种叫Admin Command,用以Host管理和控制SSD;另外一种就是I/O Command,用以Host和SSD之间数据的传输。两种命令都需要有对应的SQ和CQ, NVMe Host不仅负责生成SQ任务队列,且需将其发送至控制寄存器,此外模块还需实时响应CQ队列的命令,并做出相应处理。此外该模块中还有一个初始化模块用于对于模块进行初始化。

系统的结构框图如下,其中虚线框内为IP

fpga ssd,PCIe,NVMe,fpga开发,nvme,pci-e,fpga,嵌入式硬件

系统中PCIe PHY为Xilinx官方IP,其可以实现PCIe协议层,通过PCIe 3.0直接连接SSD硬盘,直接实现与硬盘的数据传输。

控制寄存器存储NVMe协议中使用的控制命令及传输命令,本设计中将其独立为一个模块以方便PCIe PHY对其进行读写。

存储队列控制器主要实现对DDR的多任务调度。由于本IP的项目背景需要较高的传输速度,单NVME SSD无法直接满足,需要使用RAID的模式,下挂2个NVMe SSD硬盘。该模块主要负责在两个硬盘进行任务调度以提高DDR4的利用效率。在单盘的应用中,该控制器可不使用。

测试平台

为测试IP模块的读写性能,以NVME Host IP为核心,利用一个MicroBlaze实现测试数据的写入及读出,并使用一段DDR4存储空间作为NVME读写数据的缓存空间,即将需写入NVME SSD的测试数据提前送至DDR4,或是存入从NVME SSD读出的数据。此外,MicroBlaze还为IP提供NVME SSD硬盘所需的读写控制信号R/W、SLBA、NLB以及IP开始工作的Start信号。

MicroBlaze通过AXI Bridge与存储队列控制器一起连接至DDR Controller,使用GPIO模块送出相应的控制信号及数据。此外,该MicroBlaze下挂了一个AXI Timer模块,通过IP实时反馈信号以进行数据传输的实时测速。

整个系统的实现,与之前的几个帖子相同,我们仍然使用Xilinx官方开发板ZCU106和FMC NVMe SSD转接卡。与之前方案的区别在于之前的系统中的NVMe协议由PS中的ARM处理器实现,受限于ARM处理器的速度,协议NVME解析过程中有一定的耗时。新IP设计了一个独立模块以实现NVMe Host的功能,并使用ZCU106主芯片ZU7EV内部集成PCIe RC硬核,完成PCIe协议层。

测试方案

为了验证新IP的读写性能,我们选用了三星硬盘,致态、爱国者、七彩虹市场的三款热卖家(商)用硬盘以及忆芯和至誉两款国产工业盘作为测试对象,通过实际SSD盘的读写来标定IP的性能。此外,也想测试一下市场家用SSD的性能到底如何,并向大家介绍一款新的国产工业用SSD厂家,至誉科技。本次测试中,每个硬盘的详细性能数据,将在随后的另外一个帖子中发布。

测试中,分别进行了功能验证测试、连续数据读写测试、SSD分段测试、交叉读写测试,并为了验证测试平台及环境,还特别进行了时间基准验证。其中,连续数据读写测试是向SSD连续写入/读出1000GB的数据,地址连续,得到的性能参数。交叉读写测试,即交叉执行写入128MB和读出128MB的命令,以测试SSD硬盘交叉读写的性能。

为了进一步提高测试数据的精度,我们使用了一套较之前更精准的测试方案对读写性能进行测试及对比。

关于功能验证测试、连续数据读写测试、SSD分段测试以及时间基准验证将在随后的SSD测试帖子详细介绍。敬请关注。

测试硬盘:

本次测试中所使用的4块SSD的详细信息如下:
三星960PRO 型号:MZ-V6P512,容量:512GB。
三星980PRO 型号:MZ-V8P2T0,容量:2TB。
忆芯Starblaze 型号:S1200ITT2-T2M22T-C1,容量:2TB。
至誉 型号:PI4 EXP4M9A0038ZAN8100,容量:3840GB。

fpga ssd,PCIe,NVMe,fpga开发,nvme,pci-e,fpga,嵌入式硬件

测试结果:

IP连续数据读写测试结果:

fpga ssd,PCIe,NVMe,fpga开发,nvme,pci-e,fpga,嵌入式硬件fpga ssd,PCIe,NVMe,fpga开发,nvme,pci-e,fpga,嵌入式硬件
PS:由于忆芯读出速度与三星980PRO读出速度基本重合,在作图时进行适当调整

硬盘的测试结果如上图所示。相较于上一次测试( 你所不知道的NVMe SSD固态硬盘读写速度及国货的惊喜–基于FPGA的速度测试_sm961_ARTBES的博客-CSDN博客),三星980 PRO的读盘速度从之前的2.7GB/s提升至3.0GB/s,写盘速度从2.5GB/s提升至2.8GB/s;忆芯硬盘的读出速度从2.7GB/s提升到3.0GB/s,写入速度从2.2GB/s提升至2.3GB/s,也是有一定的提升,这两款硬盘是上次测试时使用过且至今仍能继续正常使用的盘。由此可以看出本IP较之前测试速度有较大提升,足以证明本IP功能的强大。此外我们在本次测试中也加入了许多新的硬盘,三星960PRO的读盘平均速度达到3.05GB/s,写盘平均速度为2.0GB/s;新加的工业级SSD硬盘至誉硬盘的读盘平均速度达到2.45GB/s,写盘平均速度为2.65GB/s。三星980Pro的写盘速度在约200GB的位置开始出现了速度的下跌,这在之前的测试是没有的。经过多次测试,现象依旧。本着如实反映实际测试结果的原则,我们将实际结果列出。欢迎各位朋友指出问题或原因。由于篇幅的原因,测试的具体数据将在另外的一个SSD测试帖子中详细介绍并分析。

在交叉读写测试中,主要测试了三星980PRO未降速部分和至誉硬盘的交叉读写,测得980PRO交叉读写速度约为2.94GB/s,至誉交叉读写速度约为2.52GB/s,均约等于读写速度的平均数,由此可以认为NVME HostIP在读写功能切换中基本没有速度损失。具体测试结果见下图:
fpga ssd,PCIe,NVMe,fpga开发,nvme,pci-e,fpga,嵌入式硬件
fpga ssd,PCIe,NVMe,fpga开发,nvme,pci-e,fpga,嵌入式硬件

在SSD分段测试中三星960PRO读盘的瞬时速度达到了3125MB/s,三星980PRO写盘的瞬时速度达到2960MB/s。

由于在实验中不存在一个足够理想的SSD硬盘对接NVME Host IP,使IP能够达到理想中的最大传输速度,因此IP的最大速度的标定采用了实际测试中的结果。我们认为NVME Host IP写硬盘性能不低于2960MB/s,读硬盘性能不低于3125MB/s,IP整体数据传输性能不低于3125MB/s。

IP实现及测试中的问题

在NVME Host IP的实现、优化和测试过程中,我们也遇到了各种各样的问题,在此把我们遇到的几个有意思的问题和大家分享一下:

Xilinx官方IP:AXI Interconnect

Xilinx的官方IP是真好用,也是真不好用!(对,你没看错)

AXI interconnect是Xilinx官方提供的一个IP,主要用于AXI线的转接,可以实现地址的自动分配。该IP还有其他强大的功能,例如可以实现AXI4和AXI Lite协议转换,可以实现不同位宽的AXI线转换,还可以实现不同时钟域的AXI线转换。对于两个AXI设备的相连,只要把AXI interconnect扔进去,其会根据两个AXI设备的具体配置而自动配置这个IP的功能和参数,而且保证功能是对的。从这个层面来说,Xilinx的官方IP是真好用。

在IP实现及优化的过程中,当AXI数据传输的速度比较快时,AXI interconnect会有各种奇怪的错误,比如左边的信号到了,右边就是不出来。一点解决的办法都没有!所以,从这个层面来说,Xilinx的官方IP是真不好用!后来索性自己写这部分的功能,好麻烦,但是就只能硬着头皮来。自己写出来了,在调试及优化过程中,就方便多了,想怎么加buffer就怎么加,想怎么做并行优化就能怎么做,从而进一步提升传输速度。

硬盘厂商的调教:队列深度

我们一般认为三星980PRO是同参数SSD的标尺,这是有道理的。因为该盘的主控芯片及闪存芯片都是三星自己设计及出品,具有较高的优化程度。在本次测试中,三星980PRO SSD的任务队列深度为协议队列最大深度的一小部分(不到10%)时,就能跑出最好状态。相比之下,忆芯使用的是其自研的主控芯片,其读出速度与三星处于性能顶端,但是其写入的速度略慢,与三星的主控有一点差距。忆芯开发了4款主控芯片,都已投入使用。我们相信经过产品的迭代,忆芯能做出性能更优秀的主控及SSD。在本文之后的另外一篇测试帖子中的其他国产SSD使用的都是第三方的主控芯片,因此国产盘的设计工作更多是在第三方的主控芯片的配置及使用方面。想深入优化队列的处理,因为不是自己的芯片,也无能为力。这种技术的差距,体现在测试中任务队列深度上。国产的SSD一般任务队列要达到三星980PRO的3倍以上,才能达到该盘的最大性能,不同的SSD有各自不同的最佳性能队列深度的阈值。至誉科技使用Marvell的主控芯片,并经深度优化。其产品采用了自适应温控 (Adaptive Thermal Control™) 和SuperCruise™技术,可以优化存储写入速度,达到极高的稳定性,此外在性能及功耗之间取得较好的平衡,具有较高的写入速度。

国产SSD与三星产品的差距,一方面是一个遗憾吧,说明我们在SSD这方面和世界最高水平还有一定的差距。另外一方面,也说明NVME主控芯片的设计是由一定技术门槛的,需要完整的理解协议并按照规范实现传输任务的创建、生成、打包、分配,并优化每个传输环节,以达到最大性能,我们在本次IP实现中,也深深体会到该工作之难。

结语

经过测试,本次的IP使用FPGA纯逻辑实现,相较于上一版基于嵌入式ARM处理器的IP速度有了较大的提升。NVMe协议的固态硬盘在PCIe Gen3条件下,理论有效带宽为3.938GB/s,我们已经近似达到理论值的80%,最高速度不低于3125MB/s,考虑到Xilinx的PCIE3.0 的IP性能要弱于其他如Synopsys的ASIC IP,所以本次的IP性能对于FPGA来说这已经是一个十分可观的速度了。当然,我们的实验中可能仍然存在一些不足之处,如果有朋友有更好的方法欢迎联系我们。

如果需要讨论,联系方式如下:
北京市可线下,地址:北京市海淀区中关村南大街5号北京理工大学。
非京可联系:Tel:13810602873(微信同号)
E-mail:liuzhenyu@bit.edu.cn

声明
  在本文的结尾,我们做如下声明:本次的测试仅仅是作为与该领域感兴趣的朋友交流之用。我们仅对某款型号的某块盘,基于FPGA平台,用自己的测试程序做了统一的、无差别的测试而得到了结果。我们仅对我们的方法及所用的盘负责,保证不出现虚假或是伪造的结果。但不是对市场上所有的该型号或类似的产品性能做出推断或推论。本文的数据发布出来,仅供大家参考。文章来源地址https://www.toymoban.com/news/detail-745796.html

到了这里,关于FPGA实现高带宽NVMeSSD读写——纯逻辑实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Quartus FPGA】EMIF DDR3 读写带宽测试

    在通信原理中,通信系统的有效性用带宽来衡量,带宽定义为每秒传输的比特数,单位 b/s,或 bps。在 DDR3 接口的产品设计中,DDR3 读/写带宽是设计者必须考虑的指标。本文主要介绍了 Quartus FPGA 平台 EMIF 参数配置,以及测试 DDR3 读写带宽的过程,FPGA 器件型号是 Cyclone 10 GX

    2024年02月13日
    浏览(43)
  • 【PCIE732】基于Kintex UltraScale系列FPGA的2路40G光纤通道适配器(5GByte/s带宽)

    PCIE732是一款基于PCIE总线架构的高性能数据传输卡,板卡具有1个PCIe x8主机接口、2个QSFP+ 40G光纤接口,可以实现2路QSFP+ 40G光纤的数据实时采集、传输。板卡采用Xilinx的高性能Kintex UltraScale系列FPGA作为实时处理器,板载2组独立的72位DDR4 SDRAM大容量缓存。板卡具有1个RJ45千兆以太

    2024年01月18日
    浏览(43)
  • 树莓派5使用PCIE M.2 NVME SSD固态硬盘扩展版HAT制作小电脑

    上一篇文章《树莓派5使用USB外接M2接口1TB固态硬盘作启动盘》 杭州野芯科技(Mcuzone)生产的树莓派许多周边产品是受到爱好者的喜欢,最近树莓派官方开源了PCIE的应用,他们推出了一款PCIE M.2 NVME SSD固态硬盘扩展版HAT。我选择了支持2242尺寸的规格,这款扩展版还配置了制作精

    2024年02月03日
    浏览(84)
  • Ceph入门到精通-SATA SSD、HDD和NVMe读写性能差异

    SATA SSD、HDD和NVMe是不同类型的存储设备,它们在读写性能方面有所区别。 读写IOPS(每秒输入/输出操作次数):通常在10,000至100,000 IOPS之间,具体取决于具体的型号和制造商。 带宽:SATA III接口的最大带宽为600 MB/s(理论值),但实际上SSD可能会受到其他因素的限制而达不到

    2024年01月17日
    浏览(40)
  • 【FPGA】MIG DDR3读写逻辑测试

            笔者在之前通过microblaze软核的方式实现了DDR3芯片的读写测试,当时对于Xilinx MIG DDR控制器的理解还比较肤浅。还是想通过控制用户接口时序的方式来读写DDR,扩展和加深自己对DDR的理解。 MIG IP核配置请看我的前一篇文章 【FPGA测试】Microblaze测试DDR读写_microblaze

    2024年01月22日
    浏览(41)
  • FPGA PCIe 软核的实现——扒一扒复旦微、国微PCIe软核的实现

    近来复旦微、国微等厂家相继推出了可以兼容XILINX PCIe硬核的PCIe软核,销售也到所里来推广了一下,领导交代让抽自己的时间试用研究一下,看项目中用不用的起来。 读研的时候就接触过,PCIE协议非常非常复杂,要实现非常非常困难,稍微看过一些协议,看球不懂,真给这

    2024年02月16日
    浏览(117)
  • 关于xilinx使用PCIE实现FPGA的部分重配置实现(MCAP)

    平台:vivado21018.3 芯片:xcku115-flva1517-2-i (active) 本文官方文档:Xilinx_Answer_64761_Ultrascale_Devices 本文驱动下载地址:64761 - Bitstream Loading across the PCI Express Link in UltraScale and UltraScale+ Devices for Tandem PCIe and Partial Reconfiguration (xilinx.com) 本文参考:Xilinx基于PCIE的部分重配置实现(一)

    2024年02月01日
    浏览(59)
  • 通用读写仲裁模块(FPGA实现)

      当涉及多个模块向同一个模块进行读写操作、向一个半双工模块请求读写,甚至综合一下,多个模块向一个半双工模块发起读写请求,那就要涉及读写仲裁。因为最近做的项目中涉及的读写仲裁太多了,所以就想还是要写一个通用的读写仲裁模块,最好还是具备“凡请求

    2024年02月07日
    浏览(39)
  • FPGA实现MPEG2视频压缩PCIe传输 提供软硬件工程源码和技术支持

    MJPEG、MPEG2、MPEG4、H264 是流行且兼容性很高的 4 种视频编码格式。其中 MJPEG 对每帧独立进行 JPEG 图象压缩,而不利用帧间相关性,因此压缩效果较差。 MPEG2、MPEG4 和 H264 会进行帧间压缩,但后两者更复杂,效果也更好。MPEG2 虽然比较老 (1994年),但在低压缩率的条件下与 MPEG

    2024年02月08日
    浏览(47)
  • FPGA实现SDI视频解码PCIE传输 提供工程源码和QT上位机源码加技术支持

    FPGA实现SDI视频编解码目前有两种方案: 一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971直接将SDI解码为并行的YCRCB,缺点是成本较高,可以百度一下GS2971的价格; 另一种方案是使用FPGA实现编解码,利用FPGA的GTP/GTX资源实现解串,优点

    2024年02月06日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包