У меня следующая проблема: у меня есть зашифрованный раздел на lvm на простом разделе на жестком диске. Теперь я создал RAID-массив для увеличения производительности. Это означает, что у меня есть следующий стек: HD (s) - раздел (ы) - 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
это раздел без рейда и шифрования. /dev/mapper/pics
перегородка открыта люкс. /dev/server_raid/pics
зашифрованный раздел на основе рейдов и /dev/mapper/pics_test
это открываемый с помощью luks раздел на основе рейдов.
Мы видим, что в случае простого раздела мы ничего не теряем. Там, где раздел на основе рейдов, кажется, имеет очень плохую производительность.
Я также проверил состояние процессора во время выполнения теста. Сначала с простой перегородкой:
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
Я вижу довольно высокую загрузку процессора. Но в верхних строчках большую часть времени кажется, что процессоры ничего не делают (около 90% простоя). Ну и что? Мой процессор - горлышко бутылки?
Похоже, у вас есть ЦП с 4 ядрами (или, по крайней мере, Linux рассматривает его как 4), а dm-crypt полностью занимает одно ядро, не имея возможности использовать другие. Если ЦП не позволяет превышать 70 МБ / с, то увеличение скорости ввода-вывода, конечно, не имеет значения.
Но я удивлен. dm-crypt должен быть многопоточным, начиная с ядра 2.6.38 (это был март 2011 г.). Возможно, вы сможете увеличить пропускную способность, настроив другой шифр. Или вы получаете ЦП с AES-NI (аппаратное шифрование, неограниченная скорость ...). Какой у тебя шифр (cryptsetup luksDump /dev/... | grep Cipher
)?
Редактировать 1
Я только что нашел это на http://code.google.com/p/cryptsetup/wiki/FrequentAskedQuestions:
Начиная с версии 1.60 cryptsetup поддерживает команду "benchmark". Просто запустите как root:
cryptsetup benchmark
У меня 1.4.2 (ядро 3.4.33), поэтому я не мог попробовать.
Итак, теперь я обновляю свою машину. Результат - повышенная производительность. Я получаю около 110 МБ / сек. Похоже, что шифрование было проблемой для процессора.
Скорее всего, LUKS - это предел здесь, поскольку AFAIK использует только один поток на зашифрованное блочное устройство, и похоже, что kcryptd использует почти 100% мощности процессора (и я предполагаю, что при нагрузке ~ 0,25 у вас есть 4 ядра).