šifrování pomocí AES-NI - jak zapnout / ověřit že funguje?

Tomas Vondra tv na fuzzy.cz
Pátek Srpen 17 16:09:17 CEST 2012


Ahoj,

potřebuji šifrovat část disku, plánuji na to použít standardní dm-crypt
(resp. LUKS). V mašině je Xeon E5645 @ 2.4 GHz, který má podporu AES-NI,
nicméně ať dělám co dělám tak nevidím žádný výkonnostní rozdíl mezi
aes_x86_64 a aesni_intel.

Když zkusím změřit výkon přes SSH:

-------------------------------------------
dd if=/dev/zero count=2000 bs=1M | pv | ssh -c aes256-cbc localhost "cat
>/dev/null"
-------------------------------------------

tak dostanu ~145 MB/s bez ohledu na to zda aesni-intel modul je nebo není
načtený. Ale je možné že SSH používá AES-NI bez ohledu na načtení
jaderného modulu - alespoň openssl hlásí podporu AES-NI bez ohledu na to
zda je "aesni-intel" naloadován nebo ne:

-------------------------------------------
# openssl engine -c -tt
(aesni) Intel AES-NI engine
 [AES-128-ECB, AES-128-CBC, AES-128-CFB, AES-128-OFB, AES-192-ECB,
AES-192-CBC, AES-192-CFB, AES-192-OFB, AES-256-ECB, AES-256-CBC,
AES-256-CFB, AES-256-OFB]
     [ available ]
(dynamic) Dynamic engine loading support
     [ unavailable ]
-------------------------------------------

Bohužel 150 MB/s je dost nepřijatelné - chceme to nasadit na stroj který
umí bez problémů >600 MB/s zápis i čtení, a tímhle bychom si to
degradovali. Ten limit platí "per volume" (pro každý volume je samostatný
cryptd proces), ale na více volumes to rozdělit nemůžeme.

Když si během šifrování pustím profiles (perf top), tak nahoře jsou pořád
metody z aes_x86_64 a žádnou metodu z aesni-intel tam nevidím.

Ve výstupu lsmod vidím tohle:

-----------------------------------------------------
[root na machine ~]# lsmod | grep aes
aesni_intel            12915  0
cryptd                  8006  1 aesni_intel
aes_x86_64              7914  1 aesni_intel
aes_generic            27609  2 aesni_intel,aes_x86_64
-----------------------------------------------------

z čehož usuzuji že se AES-NI používá (při načtení aesni-intel se
automaticky načte i aes-x86-64).

Otázky:

Jak ověřit že se skutečně používá AES-NI?
Jak zajistit aby se používal?
Pokud se používá, má skutečně tak špatný výkon ve srovnání s ne-AES-NI
implementací?
Existuje nějaký HW který by to urychlil (např. šifrovací karta apod.)?

díky za rady
Tomáš



Další informace o konferenci Linux