存储 频道

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

  探究性能差异的原因

  在SandForce SF-1200控制器的设计中,使用了一些数据压缩/展开逻辑和驱动器的直接数据路径,但这些逻辑是否已经添加到典型的控制器尚不明确,不过可以确定一点的是,控制器可以实现在运行时压缩。

  SandForce控制器中使用的技术获得了专利,因此我只能猜测控制器内部是怎么回事,非压缩数据进入硬盘(控制器)后很可能是被存储在一个特殊的缓冲区或高速缓存中,然后,控制器以某种方式压缩数据,也可能是压缩数据块,或在压缩前合并相邻的数据块,如果不是相邻的,可能会先规划数据位置,然后合并数据块,最后压缩它们(也可能完全不是这么回事),不管其实现方法怎么样,在将数据写入存储介质前,控制器必须花掉一些时间和计算能力分析和压缩数据。

  压缩完毕后,控制器将压缩后的数据写入SSD内的存储块,这些存储块极有可能是被擦除(未使用)块池中的块,但是,为了确保驱动器报告正确的数据存储量,未经压缩的数据大小也会以元数据的形式存储在驱动器中,也可能存储在压缩后的数据内,因此,如果数据请求需要获得特定数据块的大小,可以快速报告真实大小。

  一般来说,写入NAND芯片的数据量比原始数据要小(除非数据不能压缩),这意味着写入数据需要的时间更少,写入吞吐量当然也更好,但是,改善水平完全依赖于数据的可压缩性。

  对压缩数据而言,在读操作期间,可能先将其放入一个高速缓存中,解压,再发送给操作系统,再一次强调,读取的数据量更小,花的时间也更少,吞吐量也更好,和写操作一样,性能改善水平完全取决于数据的可压缩性。

  数据在写入SSD之前,数据压缩会对以下几个指标产生影响:

  (1)性能

  如果我们使用Joe单个驱动器的原始数字,数据几乎可以无限制压缩(只有0),读写吞吐量速度均可以达到260MB/s,这样的性能是非常让人满意的,但是,如果数据几乎是不可压缩的(非常随机的),读操作吞吐量性能可以达到200MB/s,但写操作吞吐量性能只有可怜的65MB/s,这意味着写入性能变化了大约4倍,读性能依据数据的可压缩性变化了大约30%。

  由于SSD的低延迟,它的读操作性能表现都很好,因此对SF-1200控制器来说,数据以相当快的速度读取,然后再展开(解压),从逻辑上分析,解压数据和其它关联操作使用的时间降低了性能,但数据量可能比真实的数据量更小,不可压缩数据和可压缩数据在读操作吞吐量性能方面大约相差30%。

  写入吞吐量性能的终极驱动是数据的可压缩性,如果数据可压缩性非常好,那么将只有很小一部分数据被真实地写到存储介质,实际吞吐量将非常高,如果数据可压缩性不好,几乎所有数据必须全部写入存储介质,写入吞吐量势必会下降,因为分析和压缩数据(可能很少,甚至完全没有)需要的时间会比较长。对SandForce SF-1200控制器来说,如果数据几乎是不可压缩的,那么我们将会看到写入性能急剧下降(从260MB/s下降到65MB/s,下降了将近4倍)。

  (2)数据容量

  数据压缩需要考虑的另一个方面是基于SandForce的SSD的空间或数据容量,你可以使用数据压缩功能提高设备的数据容量,但需要注意的是,空间容量取决于数据的可压缩性。

  当你在Linux系统中使用“ls -lsa”命令查看某个文件的属性时,你希望它报告正确的信息,包括字节大小,块数等,但基于SF-1200的设备不能真正利用数据压缩报告比真实容量更大的容量。

  (3)SSD的使用寿命

  SSD中使用的芯片擦除周期都是有限的,因此写入次数也是有限的,达到一定极限后,SSD硬盘将被报废,不可再写入数据,于是诞生了许多减少擦除周期的技术(如减少写放大),以及减少“热点”,SandForce SSD控制器很可能使用了这些技术。

  使用数据压缩技术后,在一个给定的存储块上就可以存储更多的数据,减少存储块擦除的次数,例如,假设我们有一块64GB SandForce SSD和一块64GB使用不同控制器的SSD,如果我们向这两块硬盘写入相同数量的数据,SandForce SSD将比传统的SSD使用更少的存储块,它有效地增长了存储块池的大小,这意味着这些存储块比传统的SSD写入次数更少。关于SandForce SSD非常有趣(且很酷)的事情是,和传统SSD相比,它的寿命要长多久,答案是,这完全取决于你的数据,如果你的数据是高度可压缩的,那么你获得的写入性能会更好(读取性能当然也不耐),驱动器将会“活”得更长。

  这也意味着SandForce SSD可以使用MLC芯片,使$/GB的成本更便宜。

  下面我们仔细介绍一下数据压缩,以及你如何分析你的数据,评估数据的可压缩性。

0
相关文章