Linux 软件 RAID5 和 LUKS 加密性能不佳

Phi*_*ler 6 linux software-raid disk-encryption raid-5 luks

我已经在三个硬盘驱动器上设置了 Linux 软件 RAID5,并想用 cryptsetup/LUKS 对其进行加密。我的测试表明加密会导致我无法解释的大量性能下降。

RAID5 无需加密即可写入 187 MB/s [1]。通过加密,写入速度降至约 40 MB/s。

RAID 具有 512K 的块大小和写意图位图。我用作-c aes-xts-plain -s 512 --align-payload=2048的参数cryptsetup luksFormat,因此有效载荷应对齐到 2048 个 512 字节的块(即 1MB)。cryptsetup luksDump显示负载偏移量为 4096。所以我认为对齐是正确的并且适合 RAID 块大小。

CPU 不是瓶颈,因为它具有对 AES (aesni_intel) 的硬件支持。如果我在另一个同样加密的驱动器(带有 LVM 的 SSD)上写入,我的写入速度为 150 MB/s。top显示CPU使用率确实很低,只有RAID5 xor占用14%。

我还尝试将文件系统 (ext4) 直接放在未加密的 RAID 上,以便查看分层是否有问题。文件系统按预期稍微降低了性能,但到目前为止还没有那么多(写入速度不同,但 > 100 MB/s)。

总结:
磁盘+RAID5:好
磁盘+RAID5+ext4:好
磁盘+RAID5+加密:坏
SSD+加密+LVM+ext4:好

读取性能不受加密影响,无加密时为 207 MB/s,加密时为 205 MB/s(也表明 CPU 能力不是问题)。

如何提高加密RAID的写入性能?

[1] 所有速度测量都是通过多次运行完成的dd if=/dev/zero of=DEV bs=100M count=100(即以 100M 的块写入 10G)。

编辑:如果这有帮助:我在 Linux 2.6.38 上使用 Ubuntu 11.04 64 位。

Edit2:如果我将 4KB、1MB 或 10MB 的块大小传递给dd.

Phi*_*ler 6

解决方案是stripe_cache_size为 md raids设置功能。

默认设置为 256,但可以增加到 32768。

这是通过将所需大小写入/sys/block/md0/md/stripe_cache_size(如果raid 是md0)来完成的。在 Ask Ubuntu 上有一个永久设置值解决方案

我在与问题中完全相同的 RAID 上进行了测试,我得到了以下数字:

size   256: 50 MB/s
size  4096: 123 MB/s
size  8192: 142 MB/s
size 16384: 140 MB/s
size 32768: 142 MB/s
Run Code Online (Sandbox Code Playgroud)

这些测试是在 Ubuntu 12.04 (Linux 3.2) 上通过将 10 GB 写入具有 1 MB 块的文件进行的。

背景:条带缓存存储最近写入的块。如果连续写入数据,则可能会发生在第一次写入期间仅写入一个条带的一部分的情况。这意味着,RAID 代码必须从磁盘读取完整的条带,更新它,然后再次完整地写入。如果对同一条带的另一部分进行第二次写入,则必须再次执行所有这些操作。现在,如果使用缓存并且仍然包含第一次写入写入的数据,则可以省略第二次写入之前所需的读取。

通常写入时大的块大小可以防止出现问题(因为一次写入完整条带,因此根本不需要读取)。但是,似乎加密在写入底层设备时仅使用小块,因此增加缓存具有积极作用。