Назад | Перейти на главную страницу

Очень низкая производительность в комбинации LUKS / LVM / RAID под Debian Squeeze

У меня следующая проблема: у меня есть зашифрованный раздел на 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 ядра).