我遇到了以下问题:我在硬盘上的普通分区上的 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 的问题。