У меня есть машина с Core-i5 5200U. Это процессор 5-го поколения, поэтому у него есть AESNI, RDRAND и RDSEED. Это причина, по которой я купил машину.
Машина работает под управлением Ubuntu Server 14.04.03. Ubuntu предоставляет KVM и libvirt. Один из гостей — Debian 8.2, а Debian предоставляетПоддержка X32. X32 отличается от X86 и X64; см. такжеПорт Debian x32на вики Debian.
Когда я выполняю команду grepdmesg
В гостевой системе Debian я вижу, что архитектура включена:
$ dmesg | grep -i x32
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-amd64 root=UUID=69773d98-b9fa-4695-8392-92759d8e6094 ro syscall.x32=y syscall.x32=y quiet
[ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-amd64 root=UUID=69773d98-b9fa-4695-8392-92759d8e6094 ro syscall.x32=y syscall.x32=y quiet
[ 0.328179] Enabled x32 syscalls
Две из трех собственных функций ЦП перечислены в возможностях хоста Ubuntu, что несколько удивительно, поскольку я ожидал увидеть AES раньше остальных:
$ virsh capabilities | egrep "(aes|rdrand|rdseed)"
<feature name='rdseed'/>
<feature name='rdrand'/>
Однако, когда я ем/proc/cpuinfo
в гостевой ОС Debian отсутствуют три функции ЦП, которые я хочу протестировать под X32:
$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 6
model name : QEMU Virtual CPU version 2.0.0
...
flags : fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx
fxsr sse sse2 syscall nx lm rep_good nopl pni vmx cx16 x2apic popcnt
hypervisor lahf_lm abm tpr_shadow vnmi flexpriority ept
...
Я просмотрелLibvirt определяет хост-процессор как модель, отличную от указанной в документации к оборудованию, но мне не ясно, что мне следует сделать, чтобы включить инструкции, которые я пытаюсь протестировать в рамках этой архитектуры.
Как включить AESNI, RDRAND и RDSEED на ЦП в виртуальной машине Debian?
Вот скрипт, который я использовал для создания виртуальной машины:
$ cat mk-vm.sh
#!/bin/bash
NAME=Debian_8_x64
ISO_PATH=/opt/libvirt/images/debian-8.2.0-amd64-netinst.iso
DISK_PATH="/opt/libvirt/machines/$NAME/$NAME.img"
mkdir -p "/opt/libvirt/machines/$NAME"
virt-install \
--connect qemu:///system \
--virt-type kvm \
--name "$NAME" \
--ram 2048 \
--disk path=$DISK_PATH,size=8 \
--vnc \
--cdrom $ISO_PATH \
--livecd \
--network network=host-bridge \
--os-type linux
решение1
Необходимо указать «модель» ЦП, которую libvirt/qemu использует для виртуальной машины.
Самый простой способ — использовать модель «хост», которая предоставит все поддерживаемые libvirt/qemu флаги от хоста к виртуальной машине.
В XML-строфе libvirt:
<cpu mode='host-model'/>
Полный документ здесь:https://libvirt.org/formatdomain.html#elementsCPU