【存储】ZYNQ+NVMe小型化全国产存储解决方案

2024-03-12 12:44

本文主要是介绍【存储】ZYNQ+NVMe小型化全国产存储解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1、背景
  • 2、基础理论
  • 3、设计方案
    • 3.1、FPGA设计方案
      • 3.1.1、NVMe控制器实现
      • 3.1.2、NVMe控制器实现
    • 3.2 驱动软件设计方案
      • 3.2.1 读写NVMe磁盘软件驱动
      • 3.2.2 NVMe磁盘驱动设计
      • 3.2.3 标准EXT4文件系统设计
    • 3.3 上位机控制软件设计方案
  • 4、测试结果
    • 4.1 硬件测试平台说明
    • 4.2 测试结果说明
      • 4.2 .1、基于PCIe Gen2 软核,裸机测试
      • 4.2.2基于PCIe Gen3 软核,裸机测试
      • 4.2.3基于PCIe Gen2软核,带ext4文件系统测试
  • 5、总结


1、背景

  针对机载或其他对体积空间、成本有高要求的存储场景,使用单片ZYNQ7045/7100(复旦微FMQL45T900/FMQL100TAI) FPGA,实现数据接口、存储、文件系统管理、导入导出等功能。

实现规格:
1)2盘可组成RAID阵列,双盘最大能实现8TB容量
2)实现EXT4标准文件系统
3)EXT4文件系统下2GB/s的写、读速度;自定义文件系统4GB/s的写、读速度。
4)能支持万兆网网盘导出、千兆网盘导出、FTP导出

2、基础理论

  ZYNQ的相关使用请参见Xilinx的官方手册/复旦微的官方手册。NVMe的实现原理需要参见NVMe的具体协议。

NVMe协议下载链接:
NVMe协议下载
请添加图片描述

3、设计方案

3.1、FPGA设计方案

3.1.1、NVMe控制器实现

  NVME控制器主要由PCIE接口适配器、AXI交换桥、PRP计算模块以及命令/文件系统通道模块构成。
  PCIE接口适配器通过逻辑实现AXI的Master接口以及Slave接口到PCIE的接口转换。由AXI的Master接口实现盘主动读写内存的功能,由AXI的Slave接口实现PS对盘的SQ/CQ队列的读写。
  PRP计算模块实现解析盘请求的PRP2地址,计算、传送内存页地址给盘,从而实现大于4KB的读写请求的内存地址传送功能。
  命令通过通过解析PS传送过来的SQ指令,填充RPR1、PRP2地址,使数据通道始终指向PL DDR,以及文件系统数据始终指向PS DDR,文件系统通道由盘主动读写PS DDR实现。数据通道通过盘解析SQ指令,通过AXI桥,主动访问PL DDR实现。
在这里插入图片描述

3.1.2、NVMe控制器实现

  PCIE控制器主要完成PCIE协议传输层以及数据链路层协议。组TLP包发送给PHY控制器;对PHY层数据解析成TLP、LCRC、Sequence number等字段;实现ACK/NCK协议保证报文的可靠性;流控制管理,根据链路层报文更新credit值。
  PHY控制器主要实现PMA/PCS层协议,实现高速串行总线的串并转换以及8B/10B编码等功能。
  接口适配功能将TL层自定义接口转换成标准的AXI Stream总线接口。
在这里插入图片描述

3.2 驱动软件设计方案

3.2.1 读写NVMe磁盘软件驱动

  SOC处理器PL和PS协同工作,共同完成数据高速实时记录、传输、存储、加卸载和文件管理等功能。 SOC内部采用异构的架构,PL完成带宽要求高、实时性要求高的底层协议转换处理,如以太网UDP协议处理、NVMe协议处理等,PS完成数据量比较小的处理,如文件系统管理、以太网L3以上的相关处理等。同时,PS还负责单板管理、版本在线升级、温度、电源电压等健康检测。
  FPGA内部实现接口处理,包解析处理,对于要记录和加载的数据,经过包解析后会送到核心交换模块,进行存储接口的调配以及和PS的文件系统管理的交互。
  软件驱动方案如下:
在这里插入图片描述

3.2.2 NVMe磁盘驱动设计

  Linux应用层接受相关读写NVMe磁盘指令,通过PCIe硬核驱动将控制命令队列发送给自定义NVMe磁盘驱动,自定义驱动程序根据数据类型不同,然后将队列存放于PS端的DDR中,并通过门铃告知NVMe磁盘。磁盘接收到门铃通知后,去相应地址读取指令并解码,然后执行相关读写流程。
在这里插入图片描述

3.2.3 标准EXT4文件系统设计

  Linux系统应用层接受读写磁盘命令。触发系统调用函数,进程由用户态转换到内核态,文件系统通过目录项检索缓存,如果没有则创建文件。通过虚拟文件系统接口调用具体文件系统读写函数,此处为ext4文件系统。经过文件系统的管理,创建磁盘管理的IO请求,此处IO请求分为,文件系统管理IO请求与原始数据读写请求。此时根据数据类型的不同,如果为原始数据读写请求,则将数据地址路由至系统指定缓存地址即可,否则原地址不变。将修改后的IO请求发送给磁盘驱动,磁盘解码命令,并执行相关IO请求。
  Linux ext4文件系统读写控制流程如下:
在这里插入图片描述

3.3 上位机控制软件设计方案

软件界面参考如图所示:
在这里插入图片描述

4、测试结果

4.1 硬件测试平台说明

使用XILINX的ZYNQ7100作为测试核心板,如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

整体硬件测试平台如下图:
在这里插入图片描述

4.2 测试结果说明

4.2 .1、基于PCIe Gen2 软核,裸机测试

不带文件系统,使用裸跑,PCIe使用两路Gen2 x4 的情况下,写可以达到 2.4GB/s ,读可以达到 2.8GB/s
在这里插入图片描述
在这里插入图片描述

4.2.2基于PCIe Gen3 软核,裸机测试

不带文件系统,使用裸跑,PCIe使用两路Gen3 x4 的情况下,写可以达到 4.2GB/s ,读可以达到 3.5GB/s
在这里插入图片描述
在这里插入图片描述

4.2.3基于PCIe Gen2软核,带ext4文件系统测试

标准的EXT4文件系统,PCIe使用两路Gen2 x4 的情况下,写可以达到 2GB/s ,读可以达到 2.2GB/s
在这里插入图片描述
在这里插入图片描述

5、总结

按照本文方式处理,使用ZYNQ标准的文件系统下可以达到2GB/s的存储带宽。该方案的文件系统采用标准的Linux内核系统,移植性好,成本低,运行也稳定。通过PCIE核的更换,PCIe核的增加,也能够适应不同的存储带宽核存储容量的需求。

文章引用:
https://blog.csdn.net/weixin_42549375/article/details/128168729

更多解决方案,请查看官网:
http://www.levelchip.com/

欢迎各位加入FPGA技术群聊,加群方式添加管理员weixin,请大家遵守群公告一起交流 FPGA相关技术方案
管理人员联系二维码:
请添加图片描述

这篇关于【存储】ZYNQ+NVMe小型化全国产存储解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/801289

相关文章

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

html 滚动条滚动过快会留下边框线的解决方案

《html滚动条滚动过快会留下边框线的解决方案》:本文主要介绍了html滚动条滚动过快会留下边框线的解决方案,解决方法很简单,详细内容请阅读本文,希望能对你有所帮助... 滚动条滚动过快时,会留下边框线但其实大部分时候是这样的,没有多出边框线的滚动条滚动过快时留下边框线的问题通常与滚动条样式和滚动行

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创