用LZO压缩在BTRFS下寻找文件性能

我打算在50TB的RAID6arrays上使用btrfs,我想启用lzo压缩

这是生物信息学设置,大量(1 TB – 20 TB)文件中的大量search。 (该软件只获取分散在文件中的小块数据)。

我担心的是,我不明白如何寻找像btrfs这样的压缩文件系统。 文件是否需要从头开始解压缩到最先find的位置? 这会对我的设置产生巨大的负面影响。

或者一个更普遍的问题是:寻道时间的缩放文件大小与非压缩文件系统一样,或者变得更糟,例如O(file_length)

随机查找时间大致类似于未压缩文件系统O(1),但是要注意的是,高达128 KiB的数据被压缩在一起,所以只读取一个字节,128 KiB块中的所有数据将不得不被读取和解压。 根据访问模式的不同,这可能会对性能产生较大的影响,但您需要将其与您的特定应用程序和数据集进行基准比较。

( 来源 )

在互联网上有很多关于FS压缩的错误信息,这里在Stackoverflow上。 文件系统压缩是在块级完成的(或块级别,取决于设备),而不是在文件抽象级,所以表面上的查找是相同的 – 文件查找是以块的方式完成的,而不是以压缩比特的方式进行的。 这意味着压缩本身不会暴露给用户级别的程序。 所以你不必考虑或担心。

一个“超级过于简单”的方式来可视化:x / 0是块,文件中的块组。 未压缩的文件和块:[xxx] [xxx] [xxx] [xxx]压缩文件和块:[xx] 0 [xx] 0 [xx] 0 [xx] 000事实上,它不是那样的,文件inode将指向压缩块,并透明地留出文件不需要的空间。

原则上,不存在不启用fs压缩的当前理由。 除了一些偏离的情况之外,fs压缩的性能严格优于未压缩的读取。 对于我也使用过的生物信息数据,有时候您希望最大限度地提高读取带宽,而压缩将达到这一目的 – 即未压缩的数据读取速度将超过控制器+接口限制。 (sata III / raid中的N个压缩比特成为N *压缩比特比特)。 不要关注人们所说的关于延迟,减慢处理器速度等等的胡说.CPU比磁盘读取速度快1000倍。

对于一些性能基准,请访问http://www.phoronix.com/scan.php?page=article&item=btrfs_lzo_2638&num=2

如果我们将文件级压缩(即gzip或xz等)与文件系统级压缩混合,会出现另一个混淆。 在这些情况下,是的,文件查找是非确定性的,并且文件中的绝对数据位置不是严格可用的,而不解压缩前一个字节stream只是为了定位文件内的字典定义偏移量。 所以在fs级的压缩下,你可以保留一些可压缩性。

另外,block level / fs压缩通常(和历史上)被禁用的原因是因为它可以增加文件内的碎片,尤其是在中间文件写入的情况下。 对于旧的驱动器或带有数据库文件的驱动器,碎片本身可能会导致性能损失(ssd仍然如此,但由于重写/擦除块周期,而不是因为线性移动读取头)。 如果这是一个巨大的生物信息stream,那么中型企业可能不成问题。

一般来说,寻找时间尺度是inode和文件系统布局的函数。 没有文件大小。 例如,如果你有两个文件,大尺寸的X和更大的尺寸Y,这两个文件都不适合磁盘读取和caching,也不能读取单个inode读取,那么到达x中位置X的时间大约等于时间到达y的位置y,其中x <y。 在某些情况下,它们可能看起来不同,但是这些情况是出于其他不受控制的因素,例如旋转盘上的旋转位置。 或者文件X和Y正在打开并作为stream读取。 那么所有的X到X都必须被读取,Y也是一样的。但这不是文件系统的function。 一个fseek()命令直接进入不同的文件位置会显示类似的search时间。 (再次依赖于拼盘上的位置)。

HTH。