英创Linux工控主板的高速大容量存储方案

 2018-9-3     作者:黄志超    [nemail]    
[lablebox]

  英创公司针对目前销售的工控主板,都推出了一些扩展存储的方案,比如所有型号的板卡都可以通过usb外接存储器件(U盘、移动硬盘等),还有大部分的主板都可以支持TF卡,所以也可以根据实际需求使用相应大小的TF卡。同时i.MX6系列的主板ESM6800H、ESM6800V、ESM6802和ESM7000系列主板都已经板载了4GB大小的EMMC,而ESM8000和ESM6400系列主板最高支持到了16GB大小的EMMC。根据实际测试,板载的EMMC存储读盘速度最高可达78MB/s,写盘速度最高为29MB/s,而常用的TF卡(SDHC格式,最大32GB)读盘速度最高约10M/s,写盘速度最高为4.3MB/s,尽管这些存储方式已可以满足大部分常规的应用需求,但对一些对存储容量、存储速度有特殊要求的应用,就显得不够了。


  本文将介绍一种基于英创主板的PCIe接口的高速大容量存储方案。经过实际的评估和测试,本方案可完全满足客户对于存储大小和速度有特殊要求的应用。目前能够支持PCIe接口的主板为ESM6802G(ESM6802带有PCIe接口的版本)、ESM7100、ESM8100以及即将推出的ESM6400主板。主板如下图所示:


7000 + 6802g.png

ESM7100                                                                           ESM6802G

        

        本方案使用的是符合NVMe规范的M.2接口固态硬盘。M.2接口前身为Next Generation Form Factor (NGFF),是一种计算机内部扩展卡及相关连接器规范,M.2有两种接口定义:Socket 2和Socket 3。Socket 2支持SATA、PCI-EX2通道的SSD,Socket 3专为高性能存储设计,支持PCI-EX4,而主板支持的是Socket3类型。NVMe(NVM express)为易失性内存主机控制器接口规范,该规范依托于PCIe总线,比起SATA3的AHCI规范性能有着较大的提升,所以使用主板的PCIe总线配合Socket3类型的M.2接口就能够和符合NVMe规范的固态硬盘链接。


  为了方便客户评估,ESMARC通用评估底板(V9.0及以上版本)上将增加支持NVME协议的M.2接口,用户可以将固态硬盘直接连上方便的进行测试。固态硬盘的尺寸比较常见的有两种,宽度都为统一的22mm,长度一种是42mm规格称为2242,另一种为80mm规格称为2280,在这次的测试中就选择了一款三星2280的固态硬盘进行测试。另外,在选择固态硬盘的时候需要注意,主板支持的M.2的Socket3接口类型都是M-key,有一些固态硬盘是B-key类型的接口,这种类型是不能在英创的板卡上使用的,可以参考下图:


20180903-M.2-keys.jpg

M key和B key的区别


  ESM6802G主板上的PCIe总线为1.0版本,理论最高传输速度为250 MB/s,ESM7100主板的PCIe总线为2.0标准,理论最高速度为500MB/s。本次测试选择ESM6802G作为平台,而固态硬盘选用了一款128GB大小的SSD,硬件连接非常简单,如下图:


6802G+ssd.png


  固定好后即可进行上电,一旦PCIe总线识别到M.2存储设备,系统会自动加载驱动模块,如果没有自动加载输入命令modprobe nvme即可。进入系统后可以使用lspci命令查看PCIe总线下的设备,这时在终端应该能看到有固态硬盘的设备信息,同时驱动加载后在/dev目录下应该会生成相应的设备节点,因为是使用的nvme驱动,所以设备节点会以nvme开头:


20180903-console-1.png

SSD设备信息


  如果是新的硬盘没有分区,只会看到nvme0和nvme0n1两个设备节点,可以使用fdisk或者sfdisk命令操作nvme0n1设备节点进行分区操作,具体的分区操作可以查询这两个命令的详细使用方法。如果只有一个分区,就会和上图一样,多出现一个nvme0n1p1节点,多个分区的话就会有多个设备节点,即nvme0n1pn1~nvme0n1pn。对于存储容量较大的设备,建议客户使用ext4格式的文件系统,ext4为日志型的文件系统,在每次文件系统操作的时候都会生成相应的日志,一旦出现实际内容和日志不匹配,就会通过日志内容进行恢复,安全性很高,是目前Linux系统中使用最广泛的文件系统。格式化ext4文件系统可以使用mkfs.ext4命令,参数为对应的分区设备节点,比如要把上图中的分区格式化为ext4,输入命令mkfs.ext4 /dev/ nvme0n1p1即可:


20180903-console-2.png

制作ext4分区


  文件系统格式制作好之后,可以通过mount命令挂载到需要的目录下,这样就能通过访问这个目录来访问主板连接的固态硬盘了,mount会自动识别ext4格式,所以不需要修改文件系统格式,只需要对应的设备节点和挂载目录即可,以这次的测试为例,把固态硬盘挂载到/mnt/nvme这个目录下,使用命令mount /dev/nvme0n1p1 /mnt/nvme,挂载好之后,可以使用df –h命令查看空间大小:


20180903-console-3.png

挂载SSD


  可以看到硬盘总的大小为118GB,这个时候在/mnt/nvme这个目录中读取或者写入文件,就相当于在固态硬盘中读取和写入文件了。接下来测试ESM6802G上连接固态硬盘的读写速度,使用的测试工具为fio,这是一款专业测试固态硬盘的工具,因为fio的使用较为灵活需要设置的参数较多,这里就不一一介绍了,有兴趣的客户可以查询fio命令的详细资料来了解。首先测试读取速度,设置读取块大小为64K,队列深度为32,测试大小为5GB,采用顺序读取的方式,并且绕过系统缓存,测试结果如下:


20180903-console-4.png

测试顺序读


  可以看到顺序读的速度为160MB/s,这应该是可达到的最高读取速度,接下来测试随机读取的速度,其他的参数都不改变:


20180903-console-5.png

测试随机读取


  根据上图的结果,随机读取的速度大约为140MB/s,对于随机读写还有个指标iops是比较重要的,这个参数代表了每秒的读取次数,但是这个参数仅仅是用来衡量硬盘本身的性能,所以在这里就不做参考了。然后是测试写盘速度,采用顺序写的方式,其他参数不变:


20180903-console-6.png

顺序写盘测试


  根据上图结果,顺序写盘的速度大约为165MB/s,这也应该是可达到的最高写盘速度,最后测试随机写的性能,同样其他参数不变:


20180903-console-7.png

随机写盘测试


  根据上图结果,随机写盘的速度大约为158MB/s。


  最后总结一下测试结果,ESM6802G外接NVMe规范的M.2接口固态硬盘读写速度如下表:


测试平台读写操作测试文件读写方式测试结果

ESM6802G

读盘5GB顺序160MB/s
ESM6802G读盘5GB随机140MB/s
ESM6802G写盘5GB顺序165MB/s
ESM6802G写盘5GB随机158MB/s

ESM7100

读盘5GB顺序262MB/s
ESM7100读盘5GB随机262MB/s
ESM7100写盘5GB顺序284MB/s
ESM7100写盘5GB随机307MB/s

ESM8100

读盘5GB顺序239MB/s
ESM8100读盘5GB随机238MB/s
ESM8100写盘5GB顺序390MB/s
ESM8100写盘5GB随机320MB/s

ESM6400

读盘5GB顺序174MB/s
ESM6400读盘5GB随机175MB/s
ESM6400写盘5GB顺序185MB/s
ESM6400写盘5GB随机159MB/s


  这个结果应该能够满足对读写速度要求很高的客户了,并且对于存储空间也没有太大的限制,从128GB到1TB的存储空间都有很多硬盘模块可以选择。在体积上采用NVMe规范的硬盘比SATA接口的硬盘要小很多,可以通过固定孔方便的固定在底板上,非常适合作为嵌入式设备,目前我们也已经测试过了一些硬盘,下图是测试通过的硬盘,供客户在购买硬盘的时候参考:


ssd-1.png


ssd-2.png


ssd-3.png20180903-sata-vs-M.2.jpg


  有兴趣的客户可以和英创公司的工程师联系,了解更详细的情况。

[lablebox]