存储 频道

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

  数据可压缩性和SF-1200设备的影响

  基于SF-1200的SSD的性能和寿命真正完全依赖于你的数据,如果你的数据可压缩性非常好,你将获得很好的写入性能,如果你的数据可压缩性不好,那么你不可能获得很好的写入性能,因此问题就变成“我的数据可压缩性如何?”了。

  数据压缩(和它的同伴重复数据删除)是计算机科学领域的一项专业技术,你Google一下“数据压缩”就能看到大量的结果(我搜索时返回了11900000条结果),说得简单一点,压缩量取决于你的具体数据和算法。

  有人曾经撰文描述了多种数据压缩方法和压缩率,为了简洁起见,这里列举一些结果:

  • 使用“compact”技术

  o 文本:文件大小减少了38%

  o Pascal源代码:文件大小减少了43%

  o C源代码:文件大小减少了36%

  o 二进制:文件大小减少了19%

  • 使用“compress”技术

  o 文本和英语:文件大小减少了50-60%

  • 算数编码

  o 文件大小减少了12.1%-73.5%

  • 霍夫曼编码

  o 大型学生记录数据库文件大小减少了42.1%

  • 针对特定应用程序的数据压缩例行程序

  o 已经报告的文件大小最大减少了98%

  但是,除了压缩文件外,每个压缩算法都需要一定量的计算工作,通常,压缩的文件越多,需要的计算工作也越多(但并不总是这样,因为这取决于细节,但大体方向是这样的)。

  对SandForce SF-1200控制器来说,它需要一个快速的压缩算法,但也需要一个相当固定的时间,这样在数据可压缩性不好的情况下,写入性能才不至于下降得太利害,但与此同时,可压缩的数据越多,吞吐量性能越好,特别是写吞吐量。

  你怎么知道数据的可压缩性呢?要回答这个问题真的不容易,你可以做的第一件事情是选择有代表性的文件,然后使用gzip以不同压缩水平压缩它,最好再观察压缩文件的压缩率。例如,你可以这样:

  laytonjb@laytonjb-laptop:~$ gzip -6 file

  这里的“-6”就是压缩水平,它是默认值,最大压缩水平是“-9”,多试几个压缩水平,看可以获得的最大压缩率是多少。

  但需要注意的是,gzip会分析文件中的所有数据,而SF-1200控制器只会分析更少的数据块,因此你可以做的第二件事情是,使用strace分析你最常用的应用程序,找出平均系统写入调用大小,然后使用dd命令提取样本数据文件和平均写入大小对应的部分,再使用gzip对这些文件运行不同水平的压缩,例如,提取文件中对应的4KB(4096字节):

  laytonjb@laytonjb-laptop:~$ dd if=file of=data_example_1 bs=4096 skip=13

  这个命令假设你的文件大于14*4KB,因为我跳过了前13个4KB数据块(skip=13),写一个bash脚本,将一个文件分成特定尺寸的n块,针对每块运行不同水平的gzip压缩,记下每块的压缩量和压缩水平,然后就可以计算出所有块得平均压缩水平,于是对数据文件的可压缩性就有一个清晰的认知了。

  看起来要做许多工作,但它确实可以帮助你确定数据的可压缩性,如果你的数据可压缩性非常好,那么基于SF-1200的SSD将非常适合你,如果你的数据可压缩性不好,那么基于SF-1200的SSD可能不是最好的选择。我们定义文件压缩率为“压缩后文件大小/压缩前文件大小”,如果压缩率为1,那么你将获得最低的性能,因为这时的数据实际上是不可压缩的,如果压缩率非常小,你将获得最优异的性能(读/写吞吐量可能会达到260MB/s),你也可以使用这个值确定数据的可压缩性。

  当然,你也可以买一块基于SandForce SF-1200的设备,使用你真实的数据集运行各种测试。

0
相关文章