我有一台配備 Core-i5 5200U 的機器。它是第五代處理器,因此有 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 主機上的功能中列出了三個本機 CPU 功能中的兩個,這有點令人驚訝,因為我希望在其他功能之前看到 AES:
$ virsh capabilities | egrep "(aes|rdrand|rdseed)"
<feature name='rdseed'/>
<feature name='rdrand'/>
然而,當我貓/proc/cpuinfo
在 Debian 客戶機下,它缺少三個我想在 X32 下測試的 CPU 功能:
$ 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 將主機處理器識別為與硬體文件不同的型號,但我不清楚我應該做什麼來啟用我試圖在該架構下測試的指令。
如何在 Debian VM 的 CPU 上啟用 AESNI、RDRAND 和 RDSEED?
這是我用來創建虛擬機器的腳本:
$ 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 用於 VM 的 CPU「型號」。
最簡單的方法是使用「主機」模型,它將從主機向虛擬機器公開所有 libvirt/qemu 支援的標誌。
在 libvirt XML 節:
<cpu mode='host-model'/>