背景介绍
在之前的帖子中,我们介绍了一个在PCIe3.0协议下基于FPGA PL的纯逻辑NVMe Host IP(FPGA实现高带宽NVMeSSD读写——纯逻辑实现_ARTBES的博客-CSDN博客),其速度可以达到3GB/s,并进一步将其拓展至双路,从而使系统可以同时对两个NVMe硬盘进行读写,速度达到了6GB/s(基于FPGA纯逻辑的双盘NVMe RAID0存储系统_ARTBES的博客-CSDN博客)。
该NVMe存储系统将用户数据直接写入裸盘的存储空间内,实现以最大的速度将所需数据进行存储。以一个技术工程师的视角,这样的方式就已经完成了NVMe的存取任务。至于文件的管理,应该是由发出读写控制的系统主机(或是上位机)来实现的,合并系统内其他数据的调度任务而做统一的管理。所以我们认为文件系统及文件管理任务是不重要的,应该由系统主机来完成。
然而,不少业界朋友给我们的反馈却是,缺少了文件系统的NVMe读写只是个半成品,很好,但是没法直接单独使用。无法被常用操作系统(如Windows)识别并读取的存储系统是不能直接使用的。即使将裸数据存入了SSD硬盘,其他人也无法使用。因此原NVMe IP使用的时候不够方便。
同时我们最近的一个项目,是将NVMe IP应用到无人机挂载的高速相机上,将高速相机连续拍摄的图片存储于SSD硬盘中。本打算把文件的管理工作扔给系统主机,但是在反复沟通存储方式的交互中不断消耗着时间及耐心。最后索性决定做个IP,在盘上实现文件系统,符合业界标准的格式,使得在SSD上存储的数据能被所有主流系统自动识别及读取。业界标准的东西,总不用去和别人沟通格式及规范了。
对于一个技术工程师来说,让他做个东西也许要比说个(描述)东西容易一些。
文件系统的确定
做出的文件系统希望能被Windows和Linux操作系统自动识别,这样就可以适配绝大多数用户的需求。目前常见的文件系统及其支持平台如下图所示:
由图中我们可以看到EXT4只支持Linux,APFS和HFS Windows均不支持,因此均不作考虑;两个操作系统都能识别的文件系统有FAT32、exFAT及NTFS。FAT32(含FAT16)不支持4GB以上的大文件,因此对于很多镜像文件或大视频文件无法处理;NTFS能够支持大容量文件和超大分区,且集合了很多高级的技术,其中包括长文件名、压缩分区、数据保护和恢复等等的功能,但NTFS格式是针对机械硬盘设计的,它会对硬盘的读写操作做详细的记录,而详细记录对工作速度会产生较大的影响,不适用于大数据量高速存储。综上所述,我们最终选择exFAT作为要实现的文件系统。
系统框架
在原有的NVMe存储系统中,通过传感器采集或高速通信端口传输将用户数据缓存于DDR之中,NVMe IP在用户或系统控制下开始读写。本文系统相比原有NVMe系统,新增了一个exFAT IP文件管理模块,按照业界的标准格式控制NVMe IP将用户数据的写入并同时写入文件的名称、大小、日期、时间、读写属性等的文件目录属性。这些属性或者由系统主机、上位机给出(如文件名、大小等)或者由系统的其他模块(如RTC模块)给出(如文件日期、时间等)。这些文件目录属性在本质上和文件数据是一样的,都缓存于DDR中,与文件数据一样依次写入NVMe SSD中。因为需要按照标准的格式写入数据,所以原来由用户给出的NVMe IP的读写命令以及存储位置的控制信号改变为由exFAT IP发出。exFAT IP由硬件模块实现以最大限度减少文件系统对用户实际数据的写入速度影响。
系统框图如下所示:
测试方案
系统测试主要分为功能性测试和速度测试两个部分。本exFAT IP的功能测试核心规则简单,由FPGA写入,windows下读出测试。FPGA按照exFAT规范写入用户数据,完成后将NVMe SSD移至windows下,检查所写入的文件及文件夹目录结构是否可以被操作系统正确识别,写入的用户文件数据是否正确。为了使文件系统的测试全面且具有代表性,本测试设置了文件夹、文件混合的模式。在NVMe SSD中控制exFAT IP生成10个文件夹,每个文件夹内写入100个文件,合计1000个文件。为了测试数据的正确性,使用DDR中生成的128MB连续递增数模拟用户数据。为了使每个文件中的内容不同,每个文件的数据起始位置在128MB的模拟数据中每次偏移4KB,从而校验数据的准确性。在不同文件夹的文件中,我们也进行了适当偏移。
速度测试与之前类似,在加入exFAT文件系统后对写入NVMe SSD所有文件数据(含文件目录结构数据)的整体速度做一个评估。为了测试不同文件尺寸下系统整体的速度性能,分别设置了32MB,16MB,8MB,4MB,2MB,1MB几种文件大小。其中32MB文件尺寸的上限是来源于本次项目中的每个图片实际尺寸50MB。对于更大尺寸的文件,系统的整体速度性能一定会更好。1MB文件尺寸的下限是对大数据高速存储实际应用中的数据尺寸感受,更小的文件尺寸就不属于这类高速存储应用的范围。不过,越小的文件尺寸确实对文件系统速度性能的考验越高,大量的小文件不仅对exFAT IP是个很大的速度挑战,对NVMe IP也是一个很难的挑战。在NVMe协议中,小文件也会导致每次数据传输命令的效率大幅下降。
在文件系统中,簇(cluster)是windows操作系统中描述存储数据的最小单位,而块(block)是linux文件系统描述存储数据的最小单位,本质上他们是一个逻辑上的同层次的抽象概念。NVMe命令接口是以IO命令/完成方式和上层交互,每一个命令处理都会消耗CPU的计算和访存能力,因此操作的数据块越大,每个命令的效率也就越高。平时大家在使用硬盘时,或多或少会听(接触)过“4K对齐”这个概念。这里的4K就是指文件系统中每个最小的操作块的大小,是一般存储磁盘(含SSD)的通用设置。为了保证系统最大限度的通用及适配性,本系统使用了最小簇(cluster),即4KB的设置。严格说,这个设置对系统性能的纸面数据不太友好,会降低本系统测试出来的性能数据,考虑系统做出来是为了适配更多的应用,而不是吸睛制造个噱头,所以还是按照实际应用中的磁盘设置而最后决定本系统的这个底层参数设置。
测试平台
测试平台与之前的帖子相同(关于IP和硬盘的详细信息可见:FPGA实现高带宽NVMeSSD读写——纯逻辑实现),本次实验仍然基于ZCU106官方开发板和FMC子板,IP的工作流程也没有发生大的变化。测试硬盘使用三星980Pro 2T及至誉PE4 2TB作为测试硬盘(关于IP和硬盘的详细信息可见:FPGA实现高带宽NVMeSSD读写——纯逻辑实现)。为了方便验证在FPGA系统下写入的目录结构及数据是否可以被windows操作系统识别,使用外置硬盘盒的方式接入操作系统。将写入完成后的NVMe硬盘插入外置硬盘盒,接入计算机,查验是否所有文件和文件夹均可以被计算机识别。我们购买的USB接口硬盘盒如下图所示。
测试结果
功能性测试
将SSD硬盘进行格式化后,写入预设的10个文件夹及1000个文件。将其插入硬盘盒后与计算机连接后查看结果。文件夹及每个文件夹内的文件成功被识别,如图所示
由图所示,测试中生成的文件夹及文件可以正确被识别并显示。在创建文件时,因系统中暂无RTC模块,无法提供时间及日期,将每个文件的生成日期设定为2024年11月11日,且每个文件都使用相同的时间。
文件内容如图所示
速度测试
首先使用三星980Pro SSD,测试一次写入5GB及10 GB裸数据,测量所需时间,计算写入该数据量的总平均写入速度。测试结果如图,可以看出硬盘一次性写入两块裸数据的速度均为2893MB/s。
在进一步测试中,每次选择不同文件大小,向NVMe SSD写入全部1000个文件后,测量所需时间,计算测试速度,结果如图所示
同样,使用至誉SSD,分别测试一次写入5GB及10 GB裸数据,测试写入添加了exFAT文件系统后几种不同大小的全部文件,测量所需时间,计算写入所有数据的总平均写入速度。测试结果如下图所示
测试结果分析
以裸数据写入速度为基准,分别计算添加文件系统后的传输效率,得到结果如下图所示:
整体来看,随着文件尺寸的变小,添加文件系统后整体传输效率会降低,这也与我们的预期相符。在4MB尺寸文件及更大的文件时,系统的总效率可以达到99%以上,在文件小于4MB后效率会略低,但均能保持在95%以上。因此我们认为在实际的大数据存储的应用中,使用本文所设计exFAT IP对文件写入NVMe SSD的速度影响可以忽略不计。
随着文件尺寸逐渐变小,对应每MB数据内容需要写入的exFAT目录条目相对增多,NVMe SSD写入速度计算是以文件总大小来进行计算,文件目录实际占比越高导致传输效率越低。此外,由于文件尺寸的变小,exFAT IP与系统中NVMe IP的交互次数也越来越多,也会导致系统整体效率及速度的降低。NVMe IP本身是基于大数据量存储而设计,对于较小数据快,IP的处理时间与实际文件大小的比值也会比较大,使得整体工作效率下降。
在测试结果中,我们观察到一个有意思的现象,至誉SSD写入小尺寸文件(1MB)时,其写入效率高于三星980Pro。至誉SSD的写入速度较三星SSD低一些,传输同样的文件数据所用时间长于三星SSD,但两种盘因exFAT系统处理文件导致产生的延时相差很小,可以认为基本一致。这使得至誉硬盘在添加exFAT系统后产生的时延占总用时的比例更低,从而产生了添加exFAT系统后至誉SSD硬盘效率在小文件尺寸下效率高于三星980Pro的结果。
总结
在本项目中,我们实现了一个基于exFAT文件系统的FPGA NVMe高速读写系统,可以依据标准规范生成自定义的文件夹和文件,生成不同大小的文件。经测试验证,本exFAT IP所生成的文件系统可以被其他操作系统正确识别。对于4M及以上文件尺寸,相较于无文件系统,NVMe高速存储系统整体效率可达99%以上。
如果需要讨论,联系方式如下:
北京市可线下,地址:北京市海淀区中关村南大街5号北京理工大学。
非京可联系:Tel:13810602873(微信同号)
E-mail:liuzhenyu_a_bit.edu.cn
声明
在本文的结尾,我们做如下声明:本次的测试仅仅是作为与该领域感兴趣的朋友交流之用。由于测试环境受限,有的硬盘的速度可能并没有达到该盘的最大值,测试结果仅代表我们在此次实验中的测试结果,不代表盘的最优性能。我们仅对某款型号的某块盘,基于FPGA平台,用自己的测试程序做了统一的、无差别的测试而得到了结果。我们仅对我们的方法及所用的盘负责,保证不出现虚假或是伪造的结果。但不是对市场上所有的该型号或类似的产品性能做出推断或推论。本文的数据发布出来,仅供大家参考。