温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于
FPGA
存储
阵列
优化
设计
实现
林建华
电子技术应用 2023年 第49卷 第4期Circuits and Systems电路与系统基于 FPGA 存储阵列的优化设计与实现林建华1,吴绪玲2(1.中国电子科技集团公司第五十八研究所,江苏 无锡 214000;2.西南交通大学希望学院,四川 成都 610000)摘 要:在雷达、通信、电子对抗等数据存储应用领域,为满足大容量 SATA 固态盘存储阵列的持续稳定高速写盘要求,设计了一种基于 FPGA 的 RAID0 存储阵列系统。该系统以 FPGA 作为数据处理核心芯片,实现了数据接收、数据缓存、数据传输、数据存储等功能。根据 SATA 固态盘垃圾回收的特性,设计并优化逻辑功能模块。经反复测试验证,16 路 SATA 固态盘存储容量达 32 TB,写入带宽高达 5.5 GB/s,在工业温度环境下能长时间稳定工作。关键词:内存切换;FPGA;固态盘;顺序存储;RAID0 阵列中图分类号:TP302 文献标志码:A DOI:10.16157/j.issn.0258-7998.223083中文引用格式:林建华,吴绪玲.基于 FPGA 存储阵列的优化设计与实现J.电子技术应用,2023,49(4):111-116.英文引用格式:Lin Jianhua,Wu Xuling.Optimized design and realization of storage array based on FPGAJ.Application of Electronic Technique,2023,49(4):111-116.Optimized design and realization of storage array based on FPGALin Jianhua1,Wu Xuling2(1.The 58th Research Institute of CETC,Wuxi 214000,China;2.Southwest Jiaotong University Hope College,Chengdu 610000,China)Abstract:In the domain of data storage applications such as radar,communication,and electronic countermeasure,in order to meet the requirements of writing large capacity SATA Solid State Disk Array(SSD)continuously,steadily and high-speedily,a RAID0 storage array system based on FPGA is designed.This system takes FPGA as the data processing core,which realizes functions such as data receiving,data buffering,data transmission,and data storage.According to the garbage collection characteristic of SATA SSD,logic function modules are designed and optimized.The repeatable tests show that sixteen SATA SSD has the storage capacity up to 32 TB,writing bandwidth up to 5.5 GB/s,and the ability to work steadily for a long time in the industrial environment.Key words:memory switch;FPGA;solid state disk;sequential storage;RAID0 array0 引言随着雷达、航天、通信、工业等各种电子系统性能日趋复杂,数据传输、处理和分析的容量和速度要求越来越高,为了研制调试、外场打靶、实战演习等方面提供数据分析的依据,需要将海量及高速数据实时、长时间稳定存储。目前,SATA 固态盘存储阵列传统采用 CPU 作为数据存储核心,读写控制 SATA 固态盘阵列,虽避免 FPGA逻辑控制的复杂性,但受 CPU 的内存读写带宽、实时数据处理等方面性能限制,难以满足高速数据存储要求。此外,采用 FPGA 作为逻辑控制核心,直接读写 SATA 固态盘存储阵列,虽在存储带宽要求不高、持续存储时间短等场合取得一定应用13,但在写盘过程中,SATA 固态盘会不定期启动垃圾回收等操作,极大影响存储阵列中各个固态盘性能,难以保证存储阵列长期稳定地高速写盘。本 文 设 计 一 种 基 于 FPGA 的 SATA 固 态 盘 组 成 的RAID0 存储阵列系统,对 FPGA 的主要功能模块进行逻辑优化设计,克服多路 SATA 固态盘的性能难以预测等不利因素,解决数据吞吐量不够、存储带宽不稳定等问题,在大容量、高带宽、持续稳定的存储阵列系统应用领域具有很好的参考和使用价值。1 系统总体设计1.1 系统设计架构本系统设计架构如图 1 所示,该系统由上位机部分、下位机部分、SATA 固态盘(Solid State Disk,SSD)存储111Circuits and Systems电路与系统www.ChinaAET.com阵列部分和被测电子系统设备部分组成。其中,下位机部分和磁盘阵列部分以 SATA 3.0 高速总线互连4,组成一个存储设备。存储设备对外以光纤和以太网分别与被测电子系统设备、上位机进行数据交互和控制管理。上位机提供人机交互界面、下发存储及转储模式选择、开始、结束等控制指令、显示存储设备状态及文件列表等功能;下位机部分的嵌入式 CPU 主要完成文件和状态信息上报、上位机的控制指令解析、PCIe 总线数据交互、文件系统管理等功能;FPGA 采用 Xilinx 公司的Virtex7 系 列 的 XC7VX690TFFG1927 作 为 数 据 处 理 的核心器件,主要实现 PCIe DMA 数据传输模块、内存管理 模 块、RAID0 阵 列 模 块、Aurora 数 据 接 收 模 块 等功能。1.2 系统工作原理系统上电,上位机进入等待连接状态。当下位机的FPGA 和嵌入式 CPU 初始化完成后,上位机显示 SATA固态盘阵列、Aurora 总线、PCIe 总线等链路状态,待系统状态没问题时,通过界面下发相关命令参数。嵌入式CPU 接收、解析并传输,待一次存储完成后,创建文件,同时,CPU 回传相应的文件信息给上位机进行列表显示。FPGA 通过 PCIe 获取 CPU 传递过来的相关控制命令和 SATA SSD 的逻辑块寻址5(Logical Block Addressing,LBA)等信息,将外挂两组内存缓存的 Aurora 总线数据并行写入存储阵列,完成 RAID0 写盘操作。文件转储时,FPGA 进行相应的逆操作,以 RAID0 方式并行读取存储阵列的数据,通过 CPU 上传给上位机,形成文件。2 逻辑设计和实现2.1 内存管理模块本系统要求存储带宽不低于 5.5 GB/s,内存读写带宽则至少需要 5.5 GB/s2=11 GB/s。每组内存的数据位宽为 64 bit,速率为 1 600 MT/s,顺序写内存效率6约为80%,每组内存的写带宽约为 64 bit1600 MT/s80%8=10.24 GB/s11 GB/s。为了提高前端数据的缓存时间,保证 SSD 有足够时间 写 盘,需 要 大 容 量 内 存,本 系 统 单 组 内 存 容 量 为4 GB,缓存数据时间约为 4 GB5.5 GB/s0.7 s。内存管理模块提供两种内存读取方案:方案一:第 1 组内存数据缓存容量达 4 GB,从该组内存读取数据,每次轮询从 SATA SSD 对应的内存地址空间读取 64 KB 数据量,提供给对应的 SSD 写盘,每路SSD 从内存获取数据达 1 MB 时,等待其他路均达到1 MB 后再启动下一轮内存数据读取。每组内存读取完4 GB,16 路 SSD 同步等待 256 次,如果下一组内存数据缓存容量已达 4 GB,切换至该组内存数据读取,读取方式与上一组内存相同,两组内存循环切换。读取完成后,如果收到结束命令,就结束内存读写。经过多次测试,发现前端数据溢出,有时掉速很严重,最低约 2 GB/s,并维持一段时间,内存读取带宽出现起伏大等不稳定现象,分析是由于每次写盘 1 MB 过程中,每路 SSD 执行垃圾回收(Garbage Collection,GC)的启动时间和完成时间有差异,会引起各个 SSD 写入性能差异,同时,各路 SSD 从单组内存读取数据需同步等待次数过多,不能及时获取数据,写盘性能整体下降。方案二:在方案一的基础上,对内存读取流程进行优化,每路 SSD 从内存获取数据达 256 MB 时,等待其他路均达到 256 MB 后启动下一轮内存数据读取。每组内存读取完 4 GB,16 路 SSD 只需同步等待 1 次,如果下一组内存数据缓存容量达 4 GB,切换至该组内存数据读取,读取方式与上一组内存相同,两组内存循环切换。每组内存读取完成后,如果收到结束命令,就结束内存读写。经过多次测试,内存读取带宽稳定,每路 SSD 从内存获取数据相互独立,等待时间减少,写盘带宽较方案一提高。优化后的内存切换读写流程如图 3 所示。2.2 RAID0 阵列模块本系统 RAID0 阵列模块实现 16 路 SSD 的并行读写盘,逻辑框图如图 4 所示。在写盘阶段,结合内存管理模块处理过程,采用两组 FIFO 分别缓存数据位宽为 512 bit 的两组内存数据流。读取一组 FIFO 的数据量累计达 4 GB 后,切换读取另一组 FIFO 数据量累计达 4 GB,依此循环。读取的FIFO 数据分配给 16 路 SSD 的 FIFO 组,SATA 控制器的用户层逻辑根据每路 SSD 写盘的吞吐量,分别从 16 个FIFO 获 取 16 路 写 盘 数 据;同 时,采 用 一 组 FIFO 缓 存CPU 下发的数据位宽为 48 bit 的 LBA,读取的 LBA 分配给 16 路 SSD 的地址 FIFO 组。用户层逻辑根据时序关系产生控制命令、32 bit 位宽的数据、48 bit 位宽的地址,分别与 16 路 SATA 控制器交互。在 RAID0 设计中,SATA 控制器读或写的最小数据单元(逻辑块)为 512 B;条带宽度为 16(SSD 总数量);条带深度为每路 SSD 的条带数据块大小7,数据块越小,用户逻辑启动 SATA 控制器的读写操作的次数越多,存储形成的最小文件就越小。SATA 控制器每次启动读或写的数据块大小为 2 048 个逻辑块,条带深度 512 B2 048=1 MB,RAID0 阵 列 的 条 带 大 小 为 1 MB16=16 MB,文件系统管理的最小文件可达 16 MB。理论上,单个容量为 2 TB 的 SATA SSD 顺序存储的速度约为 400 MB/s,16 路 SSD 顺序存储速度可达 400 图 3优化后的内存切换读写流程图 4RAID0 阵列模块逻辑框图113Circuits and Systems电路与系统www.ChinaAET.comMB/s16=6.4 GB/s,这种写入速度一般是按照整盘顺序存储而言的,在实际应用中,往往存在写入多个文件,会删除部分文件,再写入新文件等应用场景,顺序写入往往也是 SSD 的一段连续地址。RAID0 阵列模块获取的LBA 是顺序的,尽量保证 SATA SSD 的顺序存储性能。SSD 读盘过程是写盘的逆操作,但不存在 GC 情况,读盘性能稳定。2.3 PCIe DMA 传输模