由于 LUKS/软件 RAID/LVM 订购导致 IO 不佳?

Fms*_*rat 6 linux software-raid io encryption luks

由于 IO 性能不佳,我正在尝试确定是否应该重新设置我的 RAID 阵列。先说系统:

  • i7 920
  • 4 个 4TB WD 5400 绿色硬盘
  • CentOS 6.3 主机

其次,磁盘设置:

  • /dev/sda2,b2,c2,d2 分别经过 LUKS 加密
  • /dev/mapper/a2,b2,c2,d2 都是软件 RAID5 /dev/md1 的一部分
  • /dev/md1 上面有 LVM
  • LVM 用于分隔 /、/storage 和 swap

我选择这种结构来允许 kcryptd 的多个实例,认为通过这样做,我将获得加密的多线程支持,因为每个驱动器运行一个实例。然而,我开始怀疑这是否是个好主意。

例如,如果我对随机数据的 RAR 文件运行大量解压缩例程,我的 IO 等待会上升到 25% 左右,这会降低整个系统的速度。我想知道是否所有指令集都因所有 kcryptd 进程而以某种方式得到备份。

因此,我正在考虑更改为:

  • /dev/sda2,b2,c2,d2 放入 /dev/md1
  • /dev/md1 被加密并映射到 /dev/mapper/1
  • 位于 /dev/mapper/1 之上的 LVM

这将下降到单个 kcrpytd 进程,这本身也可能成为瓶颈。有人认为这对我的 IO 问题有帮助吗?

max*_*zig 4

您的分层不是最理想的,因为将 raid 5 放在加密之上意味着您将加密/解密操作的数量增加 25% - 因为 4 * 4 TB 已加密。

当将加密置于 raid 5 之上时,仅加密 3 * 4 TB。

其背后的原因是:您不必对加密数据的奇偶校验数据(在您的示例中占用 4 TB)进行加密,因为它不会提高您的安全性。

您对多个 kcrypt 进程的假设就是这样。当以此为基础做出决策时,这是一种过早的优化,可能会产生完全相反的效果。你的 i7 非常强大,甚至可能包括一些有助于加速 AES 的特殊指令 - 并且 Linux 内核包括在启动期间自动选择的加密原语的几个优化变体。

您可以通过查看/proc/cpuinfo(例如那里的标志aes)、/proc/cryptolsmod除非 aes 模块被编译到内核中)和内核日志来验证是否使用了针对您的 CPU 的优化例程。

您应该在不涉及任何慢速磁盘的情况下对 kryptd 的吞吐量进行基准测试,以查看实际上限是多少(即在使用 iozone 的 RAM 磁盘上)。

为了能够在以后诊断潜在的性能问题,在没有任何加密的情况下对您选择的 RAID 设置进行基准测试以获得最终的上限也很有用。

除了加密主题之外,RAID 5 还比 RAID 1 或 10 涉及更多的 IO 操作。由于存储有点便宜,也许可以选择购买更多硬盘并使用另一个 RAID 级别。