存储 频道

研究如何在SSD运行时实现数据高速压缩

  【IT168 专稿】我已经写了一段时间关于SSD的文章,它的确是一个很酷,非常有潜力的技术,但SSD在设计上仍然有瑕疵,为了解决这些问题,最好的办法是增强SSD控制器的功能。

  增强SSD控制器的功能后,设计人员可以从多方面改进SSD,如减少写放大系数,提高SSD的使用寿命,但这样做势必会使控制器变得更加复杂,成本也会因此上升。

  也许你会问,是否能在成本增加不多的情况下,让控制器变得更智能,功能更强大?或是否能将控制器现有的功能移花接木到其它控制器?你会在控制器上嵌入iSCSI或在SSD上植入网络连接吗?可以从SSD创建一个OSD(对象存储设备)吗?你会增强内部RAID-0以提高吞吐量吗?以及其它一些问题。

  SandForce SF-1200看似一个普通的SSD控制器,但它给我们带来了一些非常有趣的设计,包括一些少有的功能,可以让你的SSD性能大幅提升。

  性能结果迥异的两次测试

  我的一位好友叫做Joe Landman,它办了一家名叫Scalable Informatics的公司,他做了一次基于SandForce SF-1200的SSD测试,并在他的博客上发表了测试报告,我不想模仿他的做法,但他的测试结果值得参考。

  Joe是一名优秀的基准测试员和系统管理员,他的测试结果显示这款基于SF-1200的SSD读取速度和写入速度均为260MB/s(这些数字一般都是连续读和连续写测试结果),Joe使用了一个非常棒的基准测试代码fio测试这块硬盘,他运行了一个简单的流写入测试,得到的结果是约65MB/s(未缓存的值,这通常意味着文件比测试系统的内存容量更大,以减少操作系统缓存效果的影响),他然后又运行了流读取测试,得到的测试结果是约200MB/s。

  读取性能看起来与列举(list)性能接近,但写入性能与列举性能相比就相差甚远,也许它是一个基准测试?因此Joe尝试简单地使用dd用0作为输入,他在博客中写道:

  “我尝试使用dd命令进行测试,用0作为输入,我获得了标定的速度。”

  为了进一步确定,Joe又用Bonnie++测试了一次,他获得了基于SF-1200的SSD驱动器公开声称的性能。

  至此,Joe有两次测试都获得了控制器声称的速度:Bonnie++和dd(都用0作为输入数据),因此Joe决定用fio再做一次测试,只不过这次不再使用随机数据,而是用0,最终,流读取和写入测试结果也达到了SSD所宣传的速度。

  为了再检查一次,他取了两块硬盘,组成RAID-0,然后重新执行了同样的流测试,他使用相同的基准测试程序,相同的命令行(但使用0代替了随机数据),相同的文件系统,相同的挂载点等,第一个测试他运行了一次新的基本测试,使用0作为io-bm的输入数据。

  [root@localhost ~]# mpirun -np 1 ./io-bm.exe -n 10 -f /data/d1/big.file -b 1 -w -d -Z

  Thread=00000: host=localhost.localdomain time = 24.305 s IO bandwidth = 421.317 MB/s

  Naive linear bandwidth summation = 421.317 MB/s

  More precise calculation of Bandwidth = 421.317 MB/s

  然后,他运行了相同的测试,但使用随机数据作为io-bm的输入。

  [root@localhost ~]# mpirun -np 1 ./io-bm.exe -n 10 -f /data/d1/big.file -b 1 -w -d

  Thread=00000: host=localhost.localdomain time = 88.818 s IO bandwidth = 115.292 MB/s

  Naive linear bandwidth summation = 115.292 MB/s

  More precise calculation of Bandwidth = 115.292 MB/s

  是什么导致性能差异这么大?两次测试唯一的不同点是一个用0作为输入数据,一个用随机数据作为输入数据。

  其实真正不同的地方在于数据压缩,SandForce SF-1200可以在运行期间,数据写入到硬盘前执行数据压缩,在读取数据时再解压(展开)。

0
相关文章