LINUX.ORG.RU
ФорумAdmin

kcryptd он же dm-crypt - как ускорить?


0

1

Господа!

Подскажите, что можно сделать с производительностью kcryptd? В данный момент провожу почти «чистый» эксперимент. Машина - Intel Core i7-960, память DDR3-1600. Копирую большой файл с зашифрованного тома на этот же том. Midnight commander показывает скорость копирования 58МБайт/сек. То есть суммарный трансфер - 116МБайт/сек. Топ даёт по загрузке CPU для kcryptd величину 98%. То есть одно ядро процессора шифрование «съело». Диск может работать быстрее, потому что это аппаратный RAID с кэшем.

Хочется большего.

В конце-концов даже на более слабом процессоре и памяти, но том же RAID и дисках я получал до 250МБайт/сек. На зашифрованном томе. Но под Windows, с шифрованием с помощью DiskCryptor. При этом загрузка процессора не была такой печальной - там уже в скорость диска упиралось. Хочу примерно сравнимого эффекта под Linux (Centos 5.6 если что). Может какой-нибудь другой алгоритм шифрования указать? Я ничего не указывал при создании тома - всё по-умолчанию, ибо не знаю, что будет лучше, а что хуже.

При наличии программного RAID советуют шифрование делать на каждом диске в отдельности, а уж поверх собирать RAID - тогда шифрование распараллеливается на несколько ядер. Но у меня аппаратный массив на хорошем контроллере, и я не хочу это менять, кроме того, загрузить весь процессор шифрованием - это, конечно, забавно, но он ведь должен ещё и полезную работу выполнять, которой тоже будет немало. В общем, хочу менее процессорожрущую конфигурацию.

Копирование в пределах одного тома, да еще миднайт командером - крайне глупый бенчмарк.

Тем более непонятно как и чем ты шифруешь, какой алгоритм и т.п.

Чтобы проверить скорость шифрования, нужно создать zero-девайс и его уже зашифровать.

Вот например у меня (пароль вбивай любой):

300Гб виртуальный диск
~ # echo "0 629145600 zero" | dmsetup create testzero
Шифруем:
~ # cryptsetup --cipher aes-cbc-essiv:sha256 --hash sha1 create testcrypt /dev/mapper/testzero
Enter passphrase:
Читаем:
~ # dd if=/dev/mapper/testzero of=/dev/null bs=1M count=10240
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB) copied, 5.81351 s, 1.8 GB/s
Пишем:
~ # dd of=/dev/mapper/testzero if=/dev/zero bs=1M count=10240
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB) copied, 5.15752 s, 2.1 GB/s

Скорость шифрования как видно ни разу не маленькая. Проц Xeon E5620, используется AES-NI.

blind_oracle ★★★★★ ()
Ответ на: комментарий от blind_oracle

Ошибся, читал-писал я на testzero вместо testcrypt, вот правильный цифры:

~ # dd of=/dev/mapper/testcrypt if=/dev/zero bs=1M count=10240
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB) copied, 10.0905 s, 1.1 GB/s

~ # dd if=/dev/mapper/testcrypt of=/dev/null bs=1M count=10240
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB) copied, 25.9014 s, 415 MB/s
Помедленнее, но тоже нормально :)

blind_oracle ★★★★★ ()
Ответ на: комментарий от blind_oracle

Intel Core i7-960 не поддерживает AES-NI :-(

Сейчас проверил на виртуальном диске (чего-то сразу не догадался).

  cipher:  aes-cbc-essiv:sha256
  keysize: 128 bits
  device:  /dev/loop0
  offset:  1032 sectors
  size:    25534968 sectors
Скорость, как и предполагалось - порядка 130 МБ/сек при 100%-й загрузке одного ядра.
# dd if=/dev/zero of=/dev/mapper/memvol bs=4096 count=1048576              1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 30.8234 seconds, 139 MB/s

# dd of=/dev/null if=/dev/mapper/memvol bs=4096 count=1048576
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 34.8408 seconds, 123 MB/s

Так что копирование файла с помощью mc - не такой уж плохой бенчмарк. Вопрос остаётся прежний - как это дело можно ускорить?

shamus24 ()
Ответ на: комментарий от berrywizard

> Вот тут какие-то бенчмарки: http://blog.wpkg.org/2009/04/23/cipher-benchmark-for-dm-crypt-luks/

Выбрав самый быстрый из доступных алгоритмов, получил около 200 МБайт/сек. Уже лучше. Криптостойкость при этом снижается, конечно. Однако, не думаю, что в реале, даже при наихудшем раскладе, кто-то будет пытаться что-то ломать. Оно всё же нужно, чтобы «вотнули - не работает». В новых реализациях dm-crypt реализована многопоточность. Буду пробовать. Но у меня Centos 5.6, с коротого не хочется слазить. А на Centos 6 мне пока не удалось поставить VMware Server :-(

Насчёт аппаратной поддержки - оно, конечно, неплохо бы, но где ж её взять? Я хотел купить Core i7-970, но уже не нашёл в продаже :-( Пришлось довольствоваться i7-960.

shamus24 ()
Ответ на: комментарий от shamus24

Многопоточность очень сильно помогает, особенно при записи (см. результаты dd выше), так что я бы советовал таки обновить ядро или ОС если ядро отдельно не получается.

AES-NI еще поддерживают Core i5 с вполне приличными результатами.

Насчёт криптостойкости алгоритмов - выше приведенный режим aes-cbc-essiv:sha256 на мой взгляд является отличным балансом между скоростью и криптостойкостью. Для параноиков есть aes-xts-essiv:sha256, но он раза в два медленнее т.к. для каждого блока вычисляются два ключа по 256 бит.

В общем если хочется скорости - новое ядро и/или AES-NI

blind_oracle ★★★★★ ()
Ответ на: комментарий от shamus24

И да, причем тут /dev/loop0? Проверь как я написал выше скорость. Но скорее всего сильно она не изменится. Кодирование на одном ядре без AES-NI быстрее 130Мбайт/c вряд-ли пойдёт.

blind_oracle ★★★★★ ()
Ответ на: комментарий от blind_oracle

И да, причем тут /dev/loop0? Это виртуальный диск такой был

dd if=/dev/zero of=/dev/shm/testfile size=... count=...
losetup /dev/loop0 /dev/shm/testfile
cryptsetup luksFormat /dev/loop0
shamus24 ()
Ответ на: комментарий от shamus24

tmpfs тоже так себе, оно работает медленнее, чем dm-zero, но в данном случае это вряд-ли играет роль.

blind_oracle ★★★★★ ()

Может на TrueCrypt перейти? Но до DiskCryptor все равно не доплюнуть, он нехило оптимизирован инлайн асмом.

<oftop>Кстати автор DiskCryptor писал линукс-версию, но бросил из-за stable_api_nonsense.txt</offtop>

apprentice ()
Ответ на: комментарий от GotF

Под «нехило» я это подразумевал:

http://diskcryptor.net

Реализация криптоалгоритмов для x86 версии написана на ассемблере и максимально оптимизирована под Intel Core i5–i7, но достаточно быстро работает на любых других процессорах. Использованы практически все возможности оптимизации, в частности для алгоритма AES код генерируется динамически, с оптимизацией под конкретный ключ. На многопроцессорных системах операции шифрования могут распараллеливаться, DiskCryptor автоматически выбирает оптимальный режим распараллеливания исходя из конфигурации системы. DiskCryptor также умеет использовать расширения для аппаратной криптографии, если их поддерживает ваш процессор.

apprentice ()
Ответ на: комментарий от GotF

Что за модуль AES? x86-64 или Generic?

загружены почему-то оба, но используется x86-64

# lsmod | grep aes
aes_generic            59265  0
aes_x86_64             58473  6

shamus24 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.