LINUX.ORG.RU

Медленный dm-crypt, почему?

 , , ,


0

2

Бенчмарк cryptsetup показывает, что скорость шифрования более чем втрое больше скорости записи на диск, то есть вроде как шифрование не должно быть узким местом, но на деле скорость записи на шифрованный раздел вдвое меньше, чем на нешифроанный.
Почему так может быть?

Бнчмарк:

» cryptsetup benchmark    
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1      1236528 iterations per second for 256-bit key
PBKDF2-sha256    1583951 iterations per second for 256-bit key
PBKDF2-sha512    1067796 iterations per second for 256-bit key
PBKDF2-ripemd160  862315 iterations per second for 256-bit key
PBKDF2-whirlpool  633198 iterations per second for 256-bit key
#     Algorithm | Key |  Encryption |  Decryption
        aes-cbc   128b   698,2 MiB/s  2265,7 MiB/s
    serpent-cbc   128b    83,5 MiB/s   340,9 MiB/s
    twofish-cbc   128b   184,6 MiB/s   376,5 MiB/s
        aes-cbc   256b   519,6 MiB/s  1782,3 MiB/s
    serpent-cbc   256b    89,0 MiB/s   344,2 MiB/s
    twofish-cbc   256b   191,6 MiB/s   370,6 MiB/s
        aes-xts   256b  1555,7 MiB/s  1569,8 MiB/s
    serpent-xts   256b   355,3 MiB/s   339,8 MiB/s
    twofish-xts   256b   366,2 MiB/s   364,7 MiB/s
        aes-xts   512b  1288,3 MiB/s  1291,3 MiB/s
    serpent-xts   512b   356,7 MiB/s   339,8 MiB/s
    twofish-xts   512b   368,3 MiB/s   371,0 MiB/s
Контейнер:
» sudo cryptsetup status /dev/mapper/luks-df63558b-b644-435e-8135-72609beb62b7 
/dev/mapper/luks-df63558b-b644-435e-8135-72609beb62b7 is active and is in use.
  type:    LUKS1
  cipher:  aes-xts-plain64
  keysize: 256 bits
  device:  /dev/mapper/intelssd-lvol0
  offset:  4096 sectors
  size:    10481664 sectors
  mode:    read/write
Шифрованный раздел:
» dd if=/dev/zero of=/media/Crypt/null bs=1M count=4000 status=progress oflag=direct
4000+0 записей получено
4000+0 записей отправлено
4194304000 байт (4,2 GB, 3,9 GiB) скопирован, 22,9683 s, 183 MB/s
Обычный раздел:
» dd if=/dev/zero of=$HOME/null bs=1M count=4000 status=progress oflag=direct
4000+0 записей получено
4000+0 записей отправлено
4194304000 байт (4,2 GB, 3,9 GiB) скопирован, 9,26037 s, 453 MB/s
При записи прямо на блочное устройство, а также с другими параметрами шифрования (aes-cbc, 128bit), скорость особо не меняется.

А шифрованный раздел у тебя часом не на этапе загрузки монтируется?

Если я правильно помню, быстрое aes шифрование будет, если загружен модуль ядра aes-ni, который должен быть в initrd, чтобы быть загруженным *перед* модулями dm-crypt, иначе последний будет использовать софтовое (медленное) шифрование.

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

шифрованный раздел у тебя часом не на этапе загрузки монтируется?

Нет, пробую на работающей системе, с отдельным логическим томом lvm.

модуль ядра aes-ni, который должен быть в initrd, чтобы быть загруженным *перед* модулями dm-crypt

А разве в таком случае бенчмарк не будет показывать худшие результаты? И в федоре aes-ni вкомпилен в ядро: CONFIG_CRYPTO_AES_NI_INTEL=y

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

А разве в таком случае бенчмарк не будет показывать худшие результаты?

Ситуация может быть вот какой: если модуля нет в initrd, а система лежит на зашифрованном томе, то модуль dm-crypt будет использовать софтовое шифрование. Естественно всё, что будет загружено с *после* загрузки модулей с зашифрованного тома, уже будет использовать реализацию в aes-ni, т.е. получится такая ситуация, что все бенчмарки будут показывать высокие значения, а чтение с шифрованных томов будет медленным.

CONFIG_CRYPTO_AES_NI_INTEL=y

А чисто интересно, что у тебя выводит

$ lsmod | egrep aes
aesni_intel           188416  8
aes_x86_64             20480  1 aesni_intel
crypto_simd            16384  1 aesni_intel
glue_helper            16384  1 aesni_intel
cryptd                 24576  4 crypto_simd,ghash_clmulni_intel,aesni_intel

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

Оно. У них номинальные скорости указываются для сжимаемых данных. Поскольку правильное шифрование генерирует на диске «мусор», сжимать там нечего. На самом деле не стоит париться из-за линейной скорости.

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

Получилось вот так (/tmp на tmpfs, кеши каждый раз сбрасывал):

dd 'if=/tmp/win10.iso' 'of=/home/gasinvein/win10.iso' 'bs=1M' 'oflag=direct'
4264+1 записей получено
4264+1 записей отправлено
4472150016 байт (4,5 GB, 4,2 GiB) скопирован, 18,8639 s, 237 MB/s
dd 'if=/tmp/win10.iso' 'of=/media/Crypt/win10.iso' 'bs=1M' 'oflag=direct'
4264+1 записей получено
4264+1 записей отправлено
4472150016 байт (4,5 GB, 4,2 GiB) скопирован, 21,7567 s, 206 MB/s
dd 'if=/home/gasinvein/win10.iso' 'of=/dev/null' 'bs=1M'
4264+1 записей получено
4264+1 записей отправлено
4472150016 байт (4,5 GB, 4,2 GiB) скопирован, 11,2861 s, 396 MB/s
dd 'if=/media/Crypt/win10.iso' 'of=/dev/null' 'bs=1M'
4264+1 записей получено
4264+1 записей отправлено
4472150016 байт (4,5 GB, 4,2 GiB) скопирован, 11,9604 s, 374 MB/s
Т.е. шифрованный раздел всё равно примерно на 30 Мб/с медленнее.

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

Разница меньше, но всё равно заметная.

dd 'if=/tmp/random.bin' 'of=/home/gasinvein/random.bin' 'bs=1M' 'oflag=direct'
4000+0 записей получено
4000+0 записей отправлено
4194304000 байт (4,2 GB, 3,9 GiB) скопирован, 18,61 s, 225 MB/s
dd 'if=/tmp/random.bin' 'of=/media/Crypt/random.bin' 'bs=1M' 'oflag=direct'
4000+0 записей получено
4000+0 записей отправлено
4194304000 байт (4,2 GB, 3,9 GiB) скопирован, 20,4377 s, 205 MB/s
dd 'if=/home/gasinvein/random.bin' 'of=/dev/null' 'bs=1M'
4000+0 записей получено
4000+0 записей отправлено
4194304000 байт (4,2 GB, 3,9 GiB) скопирован, 10,6764 s, 393 MB/s
dd 'if=/media/Crypt/random.bin' 'of=/dev/null' 'bs=1M'
4000+0 записей получено
4000+0 записей отправлено
4194304000 байт (4,2 GB, 3,9 GiB) скопирован, 11,0177 s, 381 MB/s

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

Возможно, что это оверхед самого шифрования. Это же дополнительный слой, так что нельзя ожидать, что пропускная способность совсем не уменьшится.

Потом попробую затестить и у себя.

slvrn ★★ ()

У меня разница в скорости чтения шифрованный/нешифрованный примерно 325/400 MB/s на

$ sudo hdparm -I /dev/sda
[sudo] password for ****: 

/dev/sda:

ATA device, with non-removable media
	Model Number:       Samsung SSD 850 PRO 256GB

unanimous ★★★★★ ()