Pelo menos com o pacote Fedora 20 qemu-img (1.6.2, 10.fc20) não usa AES-NI para criptografia AES.
Confirmando
Pode-se verificar da seguinte forma:
-
A CPU tem AES-NI?
$ grep aes /proc/cpuinfo -iPor exemplo, meu Intel Core 7 tem essa extensão.
-
Instale os pacotes de depuração necessários:
# debuginfo-install qemu-img -
Executar
qemu-imgem um depurador:$ gdb --args qemu-img convert -o encryption -O qcow2 disk1.img enc1.qcow2 -
Defina um ponto de interrupção em uma função de criptografia qemu bem conhecida que não seja otimizada para AES-NI:
(gdb) b AES_encrypt Breakpoint 1 at 0x794b0: file util/aes.c, line 881. -
Execute o programa:
(gdb) r Starting program: /usr/bin/qemu-img convert -o encryption -O qcow2 disk1.img enc1.qcow2
Resultados
No meu teste, ele pára aí:
Breakpoint 1, AES_encrypt (in=0x7ffff7fabd60 "...", key=0x555555c1b510) at util/aes.c:881
881 const AES_KEY *key) {
(gdb) n
889 assert(in && out && key);
(gdb) n
881 const AES_KEY *key) {
(gdb) n
889 assert(in && out && key);
(gdb) n
896 s0 = GETU32(in ) ^ rk[0];
(gdb) n
897 s1 = GETU32(in + 4) ^ rk[1];
Significa que, de fato, as instruções do Intel AES não são usadas.
Meu primeiro pensamento foi que qemu-img talvez apenas use libcrypto de forma que o AES-NI seja usado automaticamente, quando disponível. qemu-img até vincula contra libcrypto (cf ldd $(which qemu-img) ) - mas não parece usá-lo para criptografia AES. Hmm.
Eu derivado a localização do ponto de interrupção via grepping o código-fonte do QEMU. No Fedora você pode fazer assim:
$ fedpkg clone -a qemu
$ cd qemu
$ fedpkg source
$ tar xfv qemu-2.2.0-rc1.tar.bz2
$ cd qemu-2.2.0-rc1
OBSERVAÇÃO: gdb pode ser encerrado pelo comando q uit.