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

Linux 软件 RAID5 和 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)。

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

编辑2:如果我将 4KB、1MB 或 10MB 的块大小传递给 ,性能大致保持相同dd

答案1

解决方案是设置stripe_cache_sizemd 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

这些测试是使用 Ubuntu 12.04(Linux 3.2)进行的,将 10 GB 写入一个 1 MB 块的文件。

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

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

答案2

LUKS 有一个瓶颈,即它每个块设备只产生一个线程。

您是否将加密置于 RAID 5 之上?那么从操作系统的角度来看,您只有一个设备,然后它只对所有这些磁盘使用一个线程,这意味着磁盘以串行方式而不是并行方式工作。

您是否将 LVM 置于加密设备之上?然后,您将为每个设备生成一个线程,使它们并行工作。

有解决方案吗?如果您使用的是 Linux,则无论 CPU 速度、功率或核心数如何,请使用软件 raid,然后在加密磁盘上创建卷。这样,您的操作系统将看到多个设备并为每个设备生成一个线程。

缺点是必须多次输入密钥,但为了避免这种情况,您可以选择此设置。一个磁盘或磁盘的一部分具有启动和根分区,启动未加密,根已加密并保存密钥文件,该密钥文件用于解密其他设备(可能是同一磁盘的其余部分)。

我发现这个问题不是使用 RAID,而是处理一个减慢主机操作系统速度的虚拟机,直到我意识到猜测操作系统垄断了 luks 线程,我决定在同一设备上创建不同的分区,并将一个分区用于虚拟磁盘,这样它们就不能垄断线程,两个操作系统的性能都得到了很大的提高。

我认为您还可以从使用软件 RAID 中受益,最终不再依赖硬件。

相关内容