当前位置: 首页 > news >正文

【存储】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小型化全国产存储解决方案

文章目录 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 测…...

数据结构之栈详解(C语言手撕)

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…...

Docker学习——Dock镜像

什么是Docker镜像 Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。 一个镜像可以包含一个基本的操作系统环境,里面仅安装了 Apache 应用程序(或 用户需要的其他软件) 可以把它称为一个 Apache 镜像。镜像是创建 Do…...

CorelDRAW Graphics Suite2024专业图形设计软件Windows/Mac最新25.0.0.230版

CorelDRAW Graphics Suite 2024是一款专业的图形设计软件,它集成了CorelDRAW Standard 2024和其他高级图形处理工具,为用户提供了全面的图形设计和编辑解决方案。 该软件拥有强大的矢量编辑功能,用户可以轻松创建和编辑矢量图形,…...

el-form表单中,对非表单内字段增加校验的方法

1、问题说明: 在开发表单的时候,可能会遇到el-form-item中绑定的值不在表单绑定的数据对象中。 此时用prop绑定该字段名是无效的,需要单独对这个字段进行校验。 在el-form-item中有一个属性 error 。用于表单域验证错误信息,设…...

【VTKExamples::Points】第四期 ExtractEnclosedPoints

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例ExtractEnclosedPoints,并解析接口vtkExtractEnclosedPoints,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我…...

bug--xxoobject has no attribute xxx

Python 创建类的实例后却不能调用写的方法,检查了半天原来是缩进的问题,def函数不应该和class并列 只能说这个英文空格太小了,看不出来。。。。...

7 BUILD.gn文件怎么写,Gn + Ninja编译一个Hello world程序的例子Demo

BUILD.gn文件怎么写,Gn Ninja编译一个Hello world程序的例子Demo 作者将狼才鲸创建日期2024-03-11 Ninja安装流程见:一个能直接运行的Ninja例子,build.ninja文件怎么写?Gn安装流程见:Ubuntu18.04下安装Gn软件 这是一…...

北京市行政村边界shp数据/北京市乡镇边界/北京市土地利用分类数据

北京是一座有着三千多年历史的古都,在不同的朝代有着不同的称谓,大致算起来有二十多个别称。北京地势西北高、东南低。西部、北部和东北部三面环山,东南部是一片缓缓向渤海倾斜的平原。境内流经的主要河流有:永定河、潮白河、北运…...

力扣--动态规划/深度优先算法/回溯算法93.复原IP地址

这题主要用了动态规划和回溯算法。 动态规划数组初始化(DP数组): 首先,创建一个二维数组dp,用于记录字符串中哪些部分是合法的IP地址。对字符串进行遍历,同时考虑每个可能的IP地址部分(每部分由1到3个字符组…...

第一次Python小练习题目

1.打印某学校的校训,具体内容如下所示: ****************************** 勤奋 严谨 求实 创新 ****************************** 注意: 第一行和最后一行各有 30 个*号。 答案: school_strs "勤奋 严谨 求实 创新&q…...

[BUG] docker运行Java程序时配置代理-Dhttp.proxyHost后启动报错

[BUG] docker运行Java程序时配置代理-Dhttp.proxyHost后启动报错 bug现象描述 版本:2.0.4(客户端和服务端都是) 环境:私有云环境,只有少量跳板机器可以访问公网,其他机器均通过配置代理方式访问公网 bug现…...

Python网站的搭建和html基础

1.Python网站代码及讲解 一般我们搭建小型的网站就用flask库就行了。 (1)安装flask库 安装完python后,按住windows徽标键和r,弹出“运行”,在里面输入cmd。 回车打开,输入“pip install flask”。 (2&am…...

SpringCloud(21)之SpringCloud Alibaba Nacos实战应用

一、Nacos安装 1.1 Nacos概述 Nacos是Alibaba微服务生态组件中的重要组件之一,主要用它实现应用的动态服务发现、配置管理、 服务管理。Nacos discovery alibaba/spring-cloud-alibaba Wiki GitHub Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简…...

Python 基础语法:基本数据类型(元组)

1 元组(Tuples)概述 1.1 元组的定义与特点 元组(Tuples)是Python中的一个内置数据类型,用于存储一系列有序的元素。元组中的元素可以是任何类型,包括数字、字符串、列表等,且元素之间用逗号…...

vuepress-theme-vdoing博客搭建教程

搭建流程 前言 这是笔者搭建个人博客所经历的流程,特附上笔记 笔者个人博客地址:沉梦听雨的编程指南 一、主题介绍 本博客使用的主题为:vuepress-theme-vdoing,相关介绍和使用方法可以参考该主题的官方文档 官方文档快速上手…...

ICC2:create terminal参考脚本

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 set list "" set i 0 ; set length xx set width xx foreach port $list { if {$i == 0} { set startx 0 set starty 0 } else { set sta…...

并行计算CUDA DEMO

//并行计算CUDA DEMO #include "cuda_runtime.h" #include "device_launch_parameters.h" #include <stdio.h> cudaError_t addWithCuda(int *c, const int *a, const int *b, unsigned int size); __global__ void addKernel(int *c, const int …...

【linux线程(一)】什么是线程?怎样操作线程?

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux线程 1. 前言2. 什么是线…...

python-0002-linux安装pycharm

下载软件包 下载地址&#xff1a;https://download.csdn.net/download/qq_41833259/88944791 安装 # 解压 tar -zxvf 你的软件包 # 进入软件解压后的路径&#xff0c;如解压到了/home/soft/pycharm cd /home/soft/pycharm cd bin # 执行启动命令 sh pycharm.sh # 等待软件启…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...