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

我有以下问题:我在HD上的一个纯分区上的lvm上有一个encryption的分区。 现在我制作了一个RAIDarrays来提高性能。 这意味着,我有以下堆栈:HD(s) – 分区 – RAID – LVM – Cryptsetup / LUKS。 现在性能差不多和没有RAID(下面的一些测量)是一样的。

有谁能给我一个提示,为什么performance没有得到提升?

测量:首先输出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和encryption的分区。 /dev/mapper/pics通过luks /dev/mapper/pics分区opend。 /dev/server_raid/pics基于RAID的encryption分区和/dev/mapper/pics_test是基于RAID的分区。

我们可以看到,对于普通的分区,我们根本没有多less松动。 在基于RAID的分区似乎有一个非常糟糕的performance。

testing运行时,我也检查了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是瓶颈吗?

这看起来像你有一个4核心的CPU(或者至lessLinux把它当作4),dm-crypt只需要一个核心而不能使用其他核心。 如果CPU不允许超过70 MiB / s,那么增加I / O速度当然不会有什么区别。

不过,我很惊讶。 从内核2.6.38(即2011年3月)开始,dm-crypt应该是multithreading的。 也许你可以通过configuration不同的密码来增加吞吐量。 或者你得到一个AES-NI的CPU(硬件encryption,速度无限…)。 你的密码是什么( cryptsetup luksDump /dev/... | grep Cipher )?

编辑1

我刚刚在http://code.google.com/p/cryptsetup/wiki/FrequentlyAskedQuestions上发现了这一点:

由于版本1.60 cryptsetup支持“基准”命令。 只需以root身份运行: cryptsetup benchmark

我有1.4.2(内核3.4.33),所以我不能试一试。

最有可能的LUKS是这里的限制,因为AFAIK每个encryption块设备只使用一个线程,看起来kcryptd使用几乎100%的CPU功率(我猜测,有一个0.25的负载,你有4个核心)。

所以现在,我更新了我的机器。 结果是提高了性能。 我得到约110 MB /秒的跛行。 所以看来,encryption是一个问题的CPU。