1

У меня есть машина с 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.

Когда я выполняю команду grep dmesg в гостевой системе 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 ответ1

3

Вы должны указать "модель" процессора, которую libvirt/qemu использует для виртуальной машины.

Самый простой способ - использовать модель "хоста", которая будет выставлять все флаги, поддерживаемые libvirt/qemu, от хоста до виртуальной машины.

В разделе libvirt XML:

<cpu mode='host-model'/>

Полный документ здесь: https://libvirt.org/formatdomain.html#elementsCPU

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .