在加密卷上使用压缩文件系统是否可以提高性能?

彼得

加密/解密通常是访问加密卷时的主要瓶颈。使用具有快速透明压缩的文件系统(例如BTRFS + LZO)会有所帮助吗?这个想法是要加密的数据更少,并且如果压缩比加密算法快得多,则总的处理时间将更少。

更新:正如Mat指出的,这取决于实际数据的可压缩性。当然,我假设它是可压缩的,如源代码或文档。当然,将它用于媒体文件没有任何意义(但是我想它不会带来太大的伤害,因为BTRFS试图检测不可压缩的文件。)

由于测试此想法是一个非常耗时的过程,因此我想问是否有人已经对此有所了解。我只测试了一个非常简单的设置,它似乎显示出不同:

$ touch BIG_EMPTY
$ chattr +c BIG_EMPTY
$ sync ; time ( dd if=/dev/zero of=BIG_EMPTY bs=$(( 1024*1024 )) count=1024 ; sync )
...
real    0m26.748s
user    0m0.008s
sys 0m2.632s

$ touch BIG_EMPTY-n
$ sync ; time ( dd if=/dev/zero of=BIG_EMPTY-n bs=$(( 1024*1024 )) count=1024 ; sync )
...
real    1m31.882s
user    0m0.004s
sys 0m2.916s
防冻

我做了一个小的基准测试。它只是测试写。

测试数据是一个Linux内核源树(linux-3.8),已经解压缩到内存(/ dev / shm / tmpfs)中,因此数据源的影响应尽可能小。我使用可压缩数据进行此测试,因为无论加密如何,使用不可压缩文件进行压缩都是毫无意义的。

在4块LVM卷上的LUKS [aes,xts-plain,sha256]的RAID-5上的3tr磁盘上使用btrfs文件系统,块大小为64kb。CPU是没有AES-NI的Intel E8400 2x3Ghz。内核是3.8.2 x86_64。

剧本:

#!/bin/bash

PARTITION="/dev/lvm/btrfs"
MOUNTPOINT="/mnt/btrfs"

umount "$MOUNTPOINT" >& /dev/null

for method in no lzo zlib
do
    for iter in {1..3}
    do
        echo Prepare compress="$method", iter "$iter"
        mkfs.btrfs "$PARTITION" >& /dev/null
        mount -o compress="$method",compress-force="$method" "$PARTITION" "$MOUNTPOINT"
        sync
        time (cp -a /dev/shm/linux-3.8 "$MOUNTPOINT"/linux-3.8 ; umount "$MOUNTPOINT")
        echo Done compress="$method", iter "$iter"
    done
done

因此,在每次迭代中,它都会创建一个新的文件系统,并测量从内存和umount复制linux内核源代码所花费的时间。因此,这是一个纯写测试,零读取。

结果:

Prepare compress=no, iter 1

real 0m12.790s
user 0m0.127s
sys 0m2.033s
Done compress=no, iter 1
Prepare compress=no, iter 2

real 0m15.314s
user 0m0.132s
sys 0m2.027s
Done compress=no, iter 2
Prepare compress=no, iter 3

real 0m14.764s
user 0m0.130s
sys 0m2.039s
Done compress=no, iter 3
Prepare compress=lzo, iter 1

real 0m11.611s
user 0m0.146s
sys 0m1.890s
Done compress=lzo, iter 1
Prepare compress=lzo, iter 2

real 0m11.764s
user 0m0.127s
sys 0m1.928s
Done compress=lzo, iter 2
Prepare compress=lzo, iter 3

real 0m12.065s
user 0m0.132s
sys 0m1.897s
Done compress=lzo, iter 3
Prepare compress=zlib, iter 1

real 0m16.492s
user 0m0.116s
sys 0m1.886s
Done compress=zlib, iter 1
Prepare compress=zlib, iter 2

real 0m16.937s
user 0m0.144s
sys 0m1.871s
Done compress=zlib, iter 2
Prepare compress=zlib, iter 3

real 0m15.954s
user 0m0.124s
sys 0m1.889s
Done compress=zlib, iter 3

随着zlib它的速度慢了很多,用lzo快一点,一般,不值得费心(不同的是对我的口味太小了,考虑到我以前容易压缩的数据本次测试)。

我也会进行一次读取测试,但由于您必须处理缓存,因此它更加复杂。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

HDD速度较慢的系统上的交换交换是否可以提高性能?

使用可为空的结构是否可以提高性能?

在一个核心系统上拥有多个线程是否还能提高性能?

是否可以使用AWS Athena查询压缩文件?

Kotlin/Java 在迭代数组时是否使用缓存系统来提高性能?

在隐式类上扩展AnyVal是否可以提高性能?

在Java中使用final关键字是否可以提高性能?

Java crypto,是否可以重设IV以提高性能?

更具体的异常处理是否可以提高性能?

连接池是否总是可以提高性能?

压缩程序文件是否可以节省空间,并且*可以大大提高SSD的性能?

我可以使用FileReader来读取包含图像和视频(例如epub文件)和文本的文件吗,是否建议这样做以提高性能?

如何使用存储卷(/ StorageAccessFramework)解压缩文件?

使用C ++ 11的“自动”可以提高性能吗?

使用SQLite提高性能

是否可以在Linux上压缩完整文件系统?

使用jq处理大文件时提高性能

如何使用大型Excel文件提高性能

压缩文件使用什么加密算法?

使用Perl在Windows系统上测试许多压缩文件的有效性

压缩文件和卷影复制

是否可以使用Dojo webjars SourceMaps使用未压缩文件?

在一对零/一的关系中,(MySQL,InnoDB)通过使用外键作为主键是否可以提高性能?

我什么时候应该在常规线程上使用asyncio,为什么?它可以提高性能吗?

是否可以使用C#在FTP中压缩文件夹?

慢速压缩文件夹是否可以撤消?

NSCoding 是否等于 Mac 上的“压缩文件”?

渲染沉重的SVG文件(提高性能)

与标准I / O系统调用相比,内存映射文件如何显着提高性能?