Discrepância inesperada entre o desempenho de gravação e leitura usando o cryptsetup 1.4.3 e 1.6.6 no Debian Wheezy (7.9) e no Debian Jessie (8.2)

2

Eu tenho configurado uma matriz raid1 e configurei uma mídia criptografada usando cryptsetup com opções padrão. As raid arrays devem usar 2 drives, mas no momento, eu só tenho 1 drive em cada array raid1, para comparar o desempenho entre eles.

Desempenho

A matriz não criptografada

Desempenho de gravação

dd if=/dev/zero of=/media/storage/Temp/test.img bs=100M count=10 10+0 records in 10+0 records out 1048576000 bytes (1.0 GB) copied, 7.35153 s, 143 MB/s

Saída principal:

top - 10:30:02 up 2 days, 19:18,  2 users,  load average: 0.00, 0.16, 0.72
Tasks: 147 total,   3 running, 144 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us, 21.4 sy,  0.0 ni, 75.0 id,  0.9 wa,  0.0 hi,  2.7 si,  0.0 st
KiB Mem:   4044256 total,  1135880 used,  2908376 free,   224624 buffers
KiB Swap:  7812496 total,   123488 used,  7689008 free,   470796 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
11591 root      20   0  109m 100m  572 R  98.5  2.5   0:03.12 dd
11592 root      20   0     0    0    0 R  98.5  0.0   0:00.24 flush-9:1
  203 root      20   0     0    0    0 S  52.1  0.0   0:15.59 md1_raid1

Tudo aqui parece esperado

Desempenho de leitura

hdparm -t /dev/md1

/dev/md1:
 Timing buffered disk reads: 574 MB in  3.01 seconds = 190.95 MB/sec

A matriz criptografada

Desempenho de gravação

dd if=/dev/zero of=/dev/mapper/galerkin_storage bs=100M count=100
100+0 records in
100+0 records out
10485760000 bytes (10 GB) copied, 209.058 s, 50.2 MB/s

Saída principal:

top - 10:12:20 up 2 days, 19:00,  2 users,  load average: 5.65, 2.92, 1.60
Tasks: 149 total,   6 running, 143 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us, 21.4 sy,  0.0 ni, 74.9 id,  0.9 wa,  0.0 hi,  2.7 si,  0.0 st
KiB Mem:   4044256 total,  3749816 used,   294440 free,  3155712 buffers
KiB Swap:  7812496 total,   132464 used,  7680032 free,    40892 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
10940 root      20   0     0    0    0 R  99.0  0.0   1:49.99 kworker/2:1
11538 root      20   0     0    0    0 R  94.5  0.0   1:28.32 kworker/3:1
11486 root      20   0     0    0    0 R  63.0  0.0   2:13.37 kworker/1:2
11489 root      20   0     0    0    0 R  27.0  0.0   0:52.80 flush-253:0
10910 root      20   0     0    0    0 R  22.5  0.0   2:06.59 kworker/0:2
 1305 root      20   0     0    0    0 S  18.0  0.0 338:40.46 md3_raid1
11490 root      20   0     0    0    0 S  13.5  0.0   1:31.37 kworker/0:1
11539 root      20   0  109m 100m  572 D  13.5  2.5   0:23.25 dd

Desempenho de leitura

hdparm -t /dev/mapper/galerkin_storage 

/dev/mapper/galerkin_storage:
 Timing buffered disk reads:  84 MB in  3.03 seconds =  27.73 MB/sec

usando dd

dd if=/dev/mapper/galerkin_storage of=/dev/null bs=100M count=100
100+0 records in
100+0 records out
10485760000 bytes (10 GB) copied, 369.272 s, 28.4 MB/s

saída principal

top - 10:29:49 up 3 days, 19:18,  2 users,  load average: 2.14, 2.69, 1.69
Tasks: 148 total,   2 running, 146 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us, 15.8 sy,  0.0 ni, 81.4 id,  0.8 wa,  0.0 hi,  2.0 si,  0.0 st
KiB Mem:   4044256 total,  1586852 used,  2457404 free,  1070080 buffers
KiB Swap:  7812496 total,   115916 used,  7696580 free,    67056 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
13963 root      20   0     0    0    0 R  84.9  0.0   3:55.93 kworker/2:0
13773 root      20   0     0    0    0 S  30.3  0.0   2:38.38 kworker/3:2
14158 root      20   0  109m 100m  572 D  18.2  2.5   0:08.50 dd
14170 robert    20   0 23168 1448 1076 R   6.1  0.0   0:00.02 top
    1 root      20   0 10648  708  704 S   0.0  0.0   0:05.26 init
    2 root      20   0     0    0    0 S   0.0  0.0   0:00.17 kthreadd
    3 root      20   0     0    0    0 S   0.0  0.0   1:05.31 ksoftirqd/0
    5 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kworker/u:0
    6 root      rt   0     0    0    0 S   0.0  0.0   0:00.14 migration/0

Minha conclusão

O desempenho de gravação parece ser limitado pelo desempenho do meu processador, já que o topo relata que o kworker usa 60-98% de CPU. Eu posso aceitar que o meu Intel Atom dual core é para o desempenho. O que me surpreende é que o desempenho de leitura é (1) menor que o desempenho de gravação e (2) não parece estar limitado pelo desempenho da CPU.

A minha ideia é que o desempenho de leitura deve ser aproximadamente igual ao desempenho de gravação? Devo simplesmente atualizar para a versão mais recente do debian e não fazer arqueologia? A versão do cryptsetup que estou usando (1.4.3) para leitura não é tão multithread quanto a escrita? A escrita parece usar 4 threads diferentes, enquanto a escrita usa 4?

Eu olhei para a questão Very fraco desempenho na combinação LUKS / LVM / RAID sob o Debian Squeeze mas eu não pareço ter o mesmo problema, já que minha saída principal exibe 4 processos para o kryptd, sugerindo que meu cryptsetup é realmente multithreading.

Informações de plano de fundo

Os arrays raid1 incluem apenas 1 unidade no momento, porque eu queria compará-los uns com os outros. luksDump do meu meio criptografado

LUKS header information for /dev/md3

Version:        1
Cipher name:    aes
Cipher mode:    cbc-essiv:sha256
Hash spec:      sha1
Payload offset: 4096
MK bits:        256
MK digest:      
MK salt:       

MK iterations:  12250
UUID:           022e94a0-9dce-45c1-806b-9fb54cfabf9b

Key Slot 0: ENABLED
    Iterations:             49360
    Salt: 

    Key material offset:    8
    AF stripes:             4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

kernel

uname -ra
Linux galerkin 3.2.0-4-amd64 #1 SMP Debian 3.2.73-2+deb7u2 x86_64 GNU/Linux

Versão do Debian

cat /etc/debian_version 
7.9

Versão do Cryptsetup

cryptsetup --version
cryptsetup 1.4.3

A matriz criptografada foi configurada com

cryptsetup -v luksFormat /dev/md3 --key-file=/root/key-file

A matriz de ataque foi configurada com

mdadm --create /dev/md3 --level=1 --raid-devices=2 /dev/sda4 missing

Cpuinfo

cat /proc/cpuinfo 
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 28
model name  : Intel(R) Atom(TM) CPU D525   @ 1.80GHz
stepping    : 10
microcode   : 0x107
cpu MHz     : 1800.136
cache size  : 512 KB

A CPU é relatada como 4 das opções acima.

Editar: versão incorreta dada no título. Correto é 7.9 (Wheezy).

Editar: Atualizado para cryptsetup 1.6.6

cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       204800 iterations per second
PBKDF2-sha256     151703 iterations per second
PBKDF2-sha512      79824 iterations per second
PBKDF2-ripemd160  169562 iterations per second
PBKDF2-whirlpool   30913 iterations per second
#  Algorithm | Key |  Encryption |  Decryption
     aes-cbc   128b    39.5 MiB/s    43.5 MiB/s
 serpent-cbc   128b    29.3 MiB/s    32.0 MiB/s
 twofish-cbc   128b    34.0 MiB/s    46.4 MiB/s
     aes-cbc   256b    30.6 MiB/s    32.8 MiB/s
 serpent-cbc   256b    29.8 MiB/s    32.0 MiB/s
 twofish-cbc   256b    34.4 MiB/s    46.5 MiB/s
     aes-xts   256b    43.0 MiB/s    44.2 MiB/s
 serpent-xts   256b    31.5 MiB/s    32.3 MiB/s
 twofish-xts   256b    33.1 MiB/s    34.2 MiB/s
     aes-xts   512b    32.7 MiB/s    33.2 MiB/s
 serpent-xts   512b    31.8 MiB/s    32.3 MiB/s
 twofish-xts   512b    33.4 MiB/s    34.1 MiB/s

Novas medições de desempenho para o array criptografado com cryptsetup 1.6.6

Desempenho de gravação

dd if=/dev/zero of=/dev/mapper/galerkin_storage bs=100M count=100
100+0 records in
100+0 records out
10485760000 bytes (10 GB) copied, 207.493 s, 50.5 MB/s

registro superior durante a gravação

top - 21:42:48 up 22 min,  2 users,  load average: 2.96, 1.07, 0.69
Tasks: 142 total,   7 running, 135 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us, 12.6 sy,  0.0 ni, 82.6 id,  4.2 wa,  0.0 hi,  0.4 si,  0.0 st
KiB Mem:   4044256 total,  3252544 used,   791712 free,  2721776 buffers
KiB Swap:  7812496 total,       44 used,  7812452 free,    65520 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
 4379 root      20   0     0    0    0 R  93.5  0.0   0:24.72 kworker/1:2
 4377 root      20   0     0    0    0 R  82.5  0.0   0:03.55 kworker/2:0
 4378 root      20   0     0    0    0 R  82.5  0.0   0:31.93 kworker/3:1
 4336 root      20   0     0    0    0 R  55.0  0.0   0:33.53 kworker/0:0
  189 root      20   0     0    0    0 S  44.0  0.0   0:13.94 md3_raid1
 4380 root      20   0  105m 100m  540 R  11.0  2.5   0:09.26 dd
 4396 robert    20   0 23348 1396 1032 R  11.0  0.0   0:00.03 top
    1 root      20   0 15468  900  740 S   0.0  0.0   0:01.15 init

Desempenho de leitura

dd if=/dev/mapper/galerkin_storage of=/dev/null bs=100M count=100
100+0 records in
100+0 records out
10485760000 bytes (10 GB) copied, 368.387 s, 28.5 MB/s

registro superior durante a leitura:

top - 21:25:17 up 4 min,  2 users,  load average: 0.57, 0.20, 0.09
Tasks: 141 total,   2 running, 139 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.8 us,  3.7 sy,  0.0 ni, 91.9 id,  3.6 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem:   4044256 total,  1055628 used,  2988628 free,   611612 buffers
KiB Swap:  7812496 total,        0 used,  7812496 free,   130004 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
   11 root      20   0     0    0    0 R  54.5  0.0   0:07.55 kworker/0:1
   30 root      20   0     0    0    0 S  30.3  0.0   0:10.40 kworker/2:1
    9 root      20   0     0    0    0 S  24.2  0.0   0:02.59 kworker/1:0
 4287 root      20   0  105m 100m  540 D  24.2  2.5   0:04.63 dd
 4288 root      20   0     0    0    0 S  12.1  0.0   0:04.24 kworker/3:2
 4306 robert    20   0 23348 1404 1032 R   6.1  0.0   0:00.02 top
    1 root      20   0 15468  900  740 S   0.0  0.0   0:01.13 init

com o hdparm

hdparm -t /dev/mapper/galerkin_storage 

/dev/mapper/galerkin_storage:
 Timing buffered disk reads:  84 MB in  3.06 seconds =  27.44 MB/sec

Portanto, o desempenho de leitura ainda é consideravelmente menor do que o desempenho de gravação. Se eu interpretar o luksDump corretamente, eu tenho um 256-ae-cbc. O comando benchmark sugere que ele tenha um desempenho de leitura na região do meu benchmark dd. O desempenho de gravação, no entanto, é inesperadamente alto. Uma coisa que acabou de me impressionar. Eu já preenchei a partição criptografada com / dev / zero, então seria possível que as gravações não precisassem ser executadas, uma vez que os dados já são zero?

    
por Hestben 15.01.2016 / 10:55

0 respostas