Fehlende AESNI-, RDRAND- und RDSEED-Funktionen?

1

Ich habe eine Maschine mit einem Core-i5 5200U. Es ist ein Prozessor der 5. Generation, also mit AESNI, RDRAND und RDSEED. Das ist der Grund, warum ich die Maschine gekauft habe.

Auf dem Computer läuft Ubuntu Server 14.04.03. Ubuntu stellt KVM und libvirt bereit. Einer der Gäste ist Debian 8.2, und Debian bietet X32-Unterstützung . X32 unterscheidet sich von X86 und X64. siehe auch Debian x32-Port im Debian-Wiki.

Wenn ich dmesgnach dem Debian-Gast greife, sehe ich, dass die Architektur aktiviert ist:

$ 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

Zwei der drei nativen CPU-Funktionen sind in den Funktionen auf dem Ubuntu-Host aufgeführt, was etwas überraschend ist, da ich AES vor den anderen sehen würde:

$ virsh capabilities | egrep "(aes|rdrand|rdseed)"
      <feature name='rdseed'/>
      <feature name='rdrand'/>

Wenn ich jedoch /proc/cpuinfounter dem Debian-Gast bin , fehlen die drei CPU-Funktionen, die ich unter X32 testen möchte:

$ 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
...

Ich habe geprüft, ob Libvirt den Host-Prozessor als ein anderes Modell als die Hardware-Dokumentation identifiziert , aber mir ist nicht klar, was ich tun soll, um die Anweisungen zu aktivieren, die ich unter der Architektur zu testen versuche.

Wie kann ich AESNI, RDRAND und RDSEED auf der CPU in der Debian-VM aktivieren?


Hier ist das Skript, mit dem ich die VM erstellt habe:

$ 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
jww
quelle

Antworten:

3

Sie müssen das CPU-Modell angeben, das libvirt / qemu für die VM verwendet.

Am einfachsten ist es, das "Host" -Modell zu verwenden, das alle von libvirt / qemu unterstützten Flags vom Host zur VM freigibt.

In der Zeilengruppe libvirt XML:

<cpu mode='host-model'/>

Vollständiges Dokument hier: https://libvirt.org/formatdomain.html#elementsCPU

Cédric Dufour
quelle