专栏首页数字积木FPGA实现高带宽NVMe SSD读写

FPGA实现高带宽NVMe SSD读写

本文引用自CSDN,作者:ARTBES。原文地址:https://blog.csdn.net/weixin_42166371/article/details/117573776

项目背景

近期实验室项目需对2GB/s的高速数字图像数据实时存储,后续数据带宽将提升至30GB/s。经调研,SATA协议的固态硬盘理论存储有效带宽为600MB/s,NVMe协议的固态硬盘理论带宽随PCIe协议而不同。NVMe协议的固态硬盘在PCIe Gen2、Gen3条件下,理论有效带宽分别为2GB/s、3.938GB/s。目前,NVMe SSD最高搭载PCIe Gen4通路,其理论有效带宽为7.877GB/s。

基础知识

NVMe协议基于PCIe协议之上实现NVMe Host与NVMe SSD之间高速数据通信。所以在学习NVMe协议之前,需要对PCIe协议系统的学习。

PCIe

PCIe设备分为RC设备和EP设备,本系统中NVMe Host为PCIe RC设备。对于PCIe RC设备,x86和NVIDIA等架构均有实现,但每个公司对PCIe RC的具体架构实现方案不同且不开源,并且PCIe Spec没有对PCIe RC规定其实现方式及RC需要完成的功能。网上大多数对PCIe的介绍仅停留在协议层,作者在这里纠结了好久,也做了很多无用功,下面对学习PCIe时看的资料做出整理,希望对大家有所帮助。(切记,我们要实现的是PCIe RC,EP和RC设备有很大的区别)

  • 1.PCIe科普教程 古猫著(PCIe基础知识良心科普)
  • 2.https://blog.csdn.net/BjarneCpp/article/details/112433384(老男孩读PCIe系列)
  • 3.PCI Express体系结构导读 王齐著(重点推荐)
  • 4.PCI Express® Base Specification Revision 3.0(推荐英文原版)
  • 5.https://blog.csdn.net/Newyan3651/article/details/92832320(工程方面的介绍,研新哥对我的帮助很大,在这里特别感谢)

个人觉得掌握PCIe知识,以上资料足够,当然对于PCIe RC的实现,大家还需要在摸索摸索,毕竟,没有现成的实现方案。

NVMe

NVMe同PCIe一样也是标准的协议,对于NVMe协议的入门建议大家可以看看这本书

《NVMe科普教程 》古猫著(新手必备)

出了新手村以后,必要的还是需要反复啃一下NVMe的Specification。注意NVMe 1.3和1.4有一些不同,我先读了1.4,后续发现大多数硬盘都是1.3版本的NVMe协议,后续又读了1.3。大家可以直接上手NVMe 1.3。

《NVM ExpressTM base specification revision 1.3》

学习完以上所有资料基本对NVMe及PCIe知识体系会有一个完整的了解,那么接下来我们讨论一下架构问题。

架构分析

现有NVMe存储系统均为复杂计算体系中的存储子系统,目前暂无NVMe 主控芯片用于搭建独立存储系统。无论是基于x86还是NVIDIA架构的NVMe存储系统,都为基于操作系统的独立软硬件一体实体系统,无法将其嵌入或整合至另外的处理系统中,无法实现嵌入式NVMe存储功能并用于高温、冲击、振动等恶劣条件场景下的信号处理及存储系统。

FPGA 具有开发周期短、设计灵活性高等特点,且主流 FPGA 供应商 Xilinx 和Intel 公司均提供了功能丰富的 IP 以缩短项目开发时间。FPGA 提供带宽为 12.5 Gbps的 GTX 高速通道及带宽为 16.3 Gbps 的 GTY 等高速通道,其高速通道可外接 M.2 接口的 NVMe 协议固态硬盘。但FPGA适合高带宽的数据吞吐及处理,完成系统调度等任务较为复杂。因此Xilinx推出ZYNQ系列芯片以ARM为主处理器,FPGA为协同处理器为基本架构,软硬协同的处理方式使系统更具灵活性。

考虑到PCIe协议的高速吞吐量及NVMe协议的特性本系统采用软硬结合的方式实现NVMe协议。PL端实现PCIe的协议层,PS端实现PCIe总线枚举及NVMe协议。

软件实现层面,Xilinx提供了裸机开发及Petalinux工具开发。其中Petalinux工具使用内核自带PCIe驱动及NVMe驱动实现系统功能,但由于其操作系统指令需经过系统层、块设备层、驱动层的处理,在嵌入式处理器中会产生较大的访问延迟。因此本系统采用裸机的方式实现上述功能,其中裸机需要完成的有PCIe初始化、PCIe总线枚举、NVMe初始化及NVMe命令。

方案介绍

本方案由Xilinx官方开发板ZCU106和FMC NVMe SSD转接卡组成,支持主流厂家SSD实现高速数据存储功能。本方案采用软硬协同实现NVMe协议,写入速度稳定2.3GB/s,读取速度稳定2.5GB/s。软硬协同的架构使NVMe Host可随系统硬件升级而升级,从而提高读写速度。

硬件使用ZCU106主芯片ZU7EV内部集成PCIe RC硬核,完成PCIe协议层。软件使用ZCU106主芯片PS端ARM处理器,完成PCIe和NVMe Host功能。

本测试系统使用DDR产生伪数据,由ARM裸机启动完成NVMe协议,PL端实现PCIe协议及NVMe所需存储空间。

系统通过Cortex A53对NVMe设备初始化,并将指令存放至PL端BRAM中,通过更新Doorbell完成命令发送和完成。前端采集数据可由DDR缓存通过AXI总线发送至PCIe总线并路由至M.2 SSD。

测试平台

ZCU106无M.2接口,因此选用FMC接口作为高速接口,通过FMC转M.2卡连接SSD。转接卡可以自己做但是没必要,某鱼淘了一个,性价比还不错,主要是性能ok,链接放在这,算是给老哥打个广告。购买链接:https://m.tb.cn/h.4vq8Z9n。

性能测评

本系统使用ARM裸机结合FPGA实现NVMe SSD读写速度如图所示。在使用ZCU106硬件系统下,配合使用忆芯科技1TB SSD(国产主控+颗粒)写入速度稳定达到2.3GB/s,读取速度稳定达到2.5GB/s(预计三星970 Pro速度可以达到更高)。

资源情况

Resource

Utilization

Available

Utilization%

LUT

24471

230400

10.62

LUTRAM

1448

101760

1.42

FF

28753

460800

6.24

BRAM

54

312

17.31

GT

4

20

20

BUFG

10

544

1.84

PCIe

1

2

50

系统资源使用率远低于ZCU106资源,可移植到嵌入式系统作为存储子系统应用。

应用范围

NVMe Host IP,内部使用Xilinx PCIe 核,可以通过简易的寄存器总线控制,轻松高效管理/访问各类NVMe SSD。

  • NVMe SSD 数据拷贝机/烧录机
  • NVMe SSD数据记录仪
  • NVMe SSD 功能和读写性能测试
  • 数据中心大容量高速存储设备
  • AI 计算云端/设备端高速存储
  • SMART NIC控制器

系统特征

  • NVMe Host符合NVMe协议标准1.3,支持各种常用命令,如:Identify、Write, Read, Flush 等。
  • NVMe Host采用软硬协同设计,系统灵活性高。
  • NVMe Host使用DDR作为数据缓冲区,DMA传输稳定,使用国产忆芯硬盘测试PCIe Gen3×4条件下,写入速度稳定2.3GB/s,读取速度稳定2.5GB/s。
  • PCIe基于Xilinx硬核开发,NVMe Host可随Xilinx PCIe升级而提升性能。

系统升级

本课题最终存储实时带宽30GB/s,因此需对系统进行扩展,系统扩展选用CMOS数据分送给4片FPGA,每片FPGA下挂2个NVMe硬盘完成系统存储。

系统对每个FPGA做双盘存储,双盘存储的示意图如图所示:

此存储方案激活两个PCIe IP,使PL端实现两个PCIe RC,从而两个NVMe硬盘互不干扰,实现双盘存储功能,此方案的好处在于两个独立的RC可以更好的开发PCIe总线带宽,从而更好的开发NVMe硬盘存储功能,理论上存储速度可以翻倍。

此外,由于PCIe采用Xilinx硬核,目前XDMA的IP的RC功能最高支持到PCIe 3.0,后期随着XDMA的RC功能升级到PCIe4.0甚至5.0,本方案的架构无需改变,仅升级IP就可以做到NVMe硬盘速度采用PCIe4.0甚至5.0的总线速度。

个人体会

讲一下个人开发这个工程的心理路程,算是给各位同仁一点激励。2020年10月,刚开始拿到这个项目,评估了一下,难度还是蛮大的,有一些纯逻辑实现NVMe协议的方法,瞬间感觉要延毕了。沮丧了几天后,重拾心情,考虑了一下NVMe的特性,决定把初始化等流程放到PS,把大量数据吞吐放到PL。PS端可以借用Linux、RTOS和裸机。搜集资料有个老外使用Petalinux工具,借助Linux操作系统完成NVMe协议。跟着老外的教程,一步步走下来,发现读写速度也太低了,这连SATA3.0的速度都没达到,完全没发挥NVMe的性能。于是改进方案:

  • 第一:优化Liunx底层
  • 第二:RTOS
  • 第三:裸机

本人对Linux不太熟,第一种方案直接放弃。RTOS研究了几天,不太感冒直接放弃。裸机,用C语言直接底层驱动PCIe和NVMe,尝试了一下去读PCIe和NVMe的Specification,感觉可以,于是裸机开发。

历时5个月,终于成了,喜极而泣,可以毕业了。还好效果也不错,写入速度超过了大部分商业公司IP。

如果需要讨论,联系方式如下:

北京市可线下,地址:北京市海淀区中关村南大街5号北京理工大学。

非京可联系:Tel:13810602873(微信同号)

E-mail:liuzhenyu@bit.edu.cn

‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

本文分享自微信公众号 - 数字积木(ggreat-top),作者:ARTBES

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 华为:用傲腾SSD提供更好的智能计算服务

    过去多年,华为智能产品线得到了很大发展。华为智能计算产品线SSD业务总经理赵春辉介绍,今年Q1比去年同期增长70%以上,业务发展势头旺盛。这得益于公司在相关领域...

    冬瓜哥
  • 当“数据为中心”时代来临

    熟悉存储发展趋势就会知道:如今冯·诺依曼架构备受挑战,简单说,当数据为中心时代到来,要求计算围着数据转,以减小数据搬移带来的性能瓶颈以及功耗,所谓解决“存储墙”...

    用户5498443
  • 蛋蛋读NVMe之一:为什么刘备需要NVMe

    NVMe在协议栈中处于应用层或者命令层,它是指挥官,军师,在三国的话,就是诸葛亮的角色。”运筹帷幄之中,决胜千里之外”。军师设计好计谋,就交由手下五虎大将去执行...

    Linux阅码场
  • 腾讯云发布第三代云服务器矩阵,开放更强计算力赋能产业智能化

    云计算正在经历全新的变革,在强大的计算力之上,业务场景正在驱动技术的创新与变革。9月25日,腾讯云正式发布第三代云服务器(CVM)矩阵,最新的计算、存储、网络和...

    腾讯云计算产品团队
  • 使用n2disk和PF_RING构建一个(便宜的)连续数据包记录器(Part2)

    连续数据包记录器是一种捕捉原始流量到磁盘上的设备,提供了一个网络历史记录的窗口,当网络事件发生时,你可以回溯到过去,并分析流量到数据包级别,以找到导致问题的确切...

    虹科网络可视化与安全
  • 提升应用性能、降低TCO的新利器

    提示:表3-3所示的测试场景中提及的DW,表示MySQL InnoDB引擎中的DoubleWrite双写缓冲机制,该机制是一种数据页的安全保护机制。因MySQL...

    老叶茶馆
  • 企业级SSD,性能之后,还有什么?

    现在的企业级NVMe SSD的性能真是让人震撼,有些SSD的性能动辄上百万IOPS,延迟20μs~1ms(视队列深度),冬瓜哥这辈子恐怕都用不了这么高的性能。冬...

    冬瓜哥
  • 据传,Memblaze将于6月初........!

    广告:冬瓜哥新作《大话计算机——计算机系统底层架构原理极限剖析》将于8月份出版。

    冬瓜哥
  • 可计算存储: 数据压缩和数据库计算下推

    2016年2月9号《自然》杂志的《The chips are down for Moore’s law》写到即将出版的国际半导体技术路线图不再以摩尔定律(Moo...

    老叶茶馆
  • 存储和服务器的三大件

    上周末参加了冬瓜哥的存储和服务器底层原理架构培训课程,又重拾了存储和服务器的部分知识。个人言论不代表冬瓜哥及所在公司观点。

    时间之外沉浮事
  • BPF for storage:一种受外核启发的反式

    译自:BPF for storage: an exokernel-inspired approach

    charlieroro
  • 你所不知道到的NVMe

    NVMe SSD具有高性能、低时延等优点,是目前存储行业的研究热点之一,但在光鲜的性能下也同样存在一些没有广为人知的问题,而这些问题其实对于一个生产系统而言至关...

    Linux阅码场
  • 闪存时代来临,如何才能不落伍?

    作为《大话存储 终极版》以及《大话存储后传》的作者,我有幸经历了国内存储行业发展的启蒙和鼎盛时代。在2005年到2013年这8年间,存储市场基本就是SAN的市场...

    冬瓜哥
  • 浪潮存储:以全栈能力驱动存储平台战略

    用一个极致容量、极致性能、极简架构和极易管理的存储平台去支撑起一个新数据中心,这是浪潮存储的目标,也即今年3月浪潮存储宣布的存储平台化战略。

    大数据在线
  • 如何构建一个100 Gbit(无丢包)连续数据包记录器[Part3]

    在本系列的第一篇文章(第1部分)中,我们描述了如何使用n2disk和PF_RING构建2×10 Gbit连续数据包记录器,在第二篇文章(第2部分)中,我们描述了...

    虹科网络可视化与安全
  • 对QLC不放心?听Intel给讲讲再说。

    7月29日,由杭州市萧山区人民政府、浙江省半导体行业协会主办,萧山经济技术开发区管理委员会、杭州国家“芯火”双创平台(基地)协办的“2021全球闪存峰会”在杭州...

    冬瓜哥
  • 西部数据引领企业级存储,率先投放NVMe-oF

    几年之前就知道NVMe-oF,它和NVMe就如同一对双胞胎,如影随形,是闪存新技术发展代表之一。

    用户5498443
  • 云原生下,TencentOS“如意” IO隔离之BPS. IOPS. 权重隔离

    架构鹅结合TencentOS团队在混部方面的落地实战经验,重点推送了TencentOS Server大规模容器集群混部服务器QoS产品“如意”相关内容。

    腾讯 架构师
  • NVMe协议及视频转码应用

    NVMe(非易失性存储器Express)是一种用于访问高速存储介质的新协议,与传统协议相比具有许多优势。大规模数据的性能,经济性和耐久性至关重要。NVMe对企业...

    用户1324186

扫码关注云+社区

领取腾讯云代金券