Debian Squeeze 下 LUKS/LVM/RAID 组合的性能非常差

Debian Squeeze 下 LUKS/LVM/RAID 组合的性能非常差

我遇到了以下问题:我在硬盘上的普通分区上的 lvm 上有一个加密分区。现在我创建了一个 RAID 阵列来提高性能。这意味着,我有以下堆栈:硬盘 -- 分区 -- RAID -- LVM -- Cryptsetup/LUKS。现在,有无 RAID 的性能大致相同(下面有一些测量值)。

有人能告诉我为什么性能没有得到提升吗?

测量:首先是输出hdparm -t ...

/dev/server-multimedia/pics:
 Timing buffered disk reads: 208 MB in  3.00 seconds =  69.22 MB/sec

/dev/mapper/pics:
 Timing buffered disk reads: 198 MB in  3.01 seconds =  65.77 MB/sec

/dev/server_raid/pics:
 Timing buffered disk reads: 860 MB in  3.01 seconds = 286.09 MB/sec

/dev/mapper/pics_test:
 Timing buffered disk reads: 204 MB in  3.00 seconds =  67.98 MB/sec

/dev/server-multimedia/pics是没有 raid 和加密的分区。/dev/mapper/pics由 luks 打开的分区。/dev/server_raid/pics基于 raid 的加密分区,/dev/mapper/pics_test是 luks 打开的、基于 raid 的分区。

我们可以看到,对于普通分区,我们并没有损失太多。而基于 RAID 的分区似乎性能很差。

测试运行时我还检查了 CPU 状态。首先是普通分区:

top - 13:07:41 up 5 days,  2:41,  4 users,  load average: 0.22, 0.27, 0.16
Tasks: 287 total,   2 running, 285 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.4%us,  1.2%sy,  0.3%ni, 95.1%id,  2.8%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:    900980k total,   752636k used,   148344k free,   178452k buffers
Swap: 26364332k total,   116044k used, 26248288k free,    95880k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
25592 root      20   0     0    0    0 R   92  0.0   0:24.13 kcryptd
 6159 root      20   0  3824 3820 1492 D   20  0.4   0:00.83 hdparm
25591 root      20   0     0    0    0 S    4  0.0   0:00.38 kcryptd_io
 6168 christia  20   0  2612 1176  796 R    2  0.1   0:00.02 top

现在进行突袭:

top - 13:07:54 up 5 days,  2:41,  4 users,  load average: 0.25, 0.27, 0.16
Tasks: 287 total,   3 running, 284 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.4%us,  1.2%sy,  0.3%ni, 95.1%id,  2.8%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:    900980k total,   619508k used,   281472k free,    86760k buffers
Swap: 26364332k total,   116044k used, 26248288k free,    55952k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
5594 root      20   0     0    0    0 R   84  0.0   0:06.76 kcryptd
6159 root      20   0  3824 3820 1492 D   18  0.4   0:02.94 hdparm
 404 root      20   0     0    0    0 R    4  0.0 102:20.06 md1_raid5
5593 root      20   0     0    0    0 S    4  0.0   0:00.39 kcryptd_io
6170 christia  20   0  2612 1180  796 R    2  0.1   0:00.01 top

我可以看到 CPU 负载相当高。但在顶部行中,大多数时候 CPU 似乎什么都不做(大约 90% 处于空闲状态)。那又怎么样?我的 CPU 是瓶颈吗?

答案1

看起来您的 CPU 有 4 个内核(或者至少 Linux 将其视为 4 个内核),而 dm-crypt 完全占用了一个内核,无法使用其他内核。如果 CPU 不允许超过 70 MiB/s,那么增加 I/O 速度当然不会有什么不同。

不过,我很惊讶。自内核 2.6.38(即 2011 年 3 月)以来,dm-crypt 应该是多线程的。也许您可以通过配置不同的密码来增加吞吐量。或者您获得带有 AES-NI 的 CPU(硬件加密,速度无限……)。您的密码是什么(cryptsetup luksDump /dev/... | grep Cipher)?

编辑1

我刚刚发现这个http://code.google.com/p/cryptsetup/wiki/FrequentlyAskedQuestions

从 1.60 版开始 cryptsetup 支持“benchmark”命令。只需以 root 身份运行:cryptsetup benchmark

我有 1.4.2(内核 3.4.33),所以我无法尝试。

答案2

最有可能的是 LUKS 是这里的极限,因为据我所知它每个加密块设备只使用一个线程,而 kcryptd 似乎使用了接近 100% 的 CPU 能力(我猜测在负载约为 0.25 时你有 4 个核心)。

答案3

所以现在,我更新了我的计算机。结果是性能提高了。我得到的值约为 110 MB/秒。因此,加密似乎是 CPU 的问题。

相关内容