看来我无法将多个核心/CPU 传递给 KVM 客户机。无论我做什么,客户机都只报告一个 CPU/核心。
主机硬件:Supermicro 主板上的 Xeon E5620 主机软件:Ubuntu 11.04 (Natty) 64 位
我已经为 Natty 编译了自己的(较新的)内核 2.6.37(因为如果我使用标准内核,PCI 直通会遇到某些问题)。我没有改变发行版的其他部分;值得注意的是,我使用的是随附的原始 qemu-kvm 包。
由于 virt-manager 和相关工具在尝试第一个基本操作时出现无法理解的错误消息,因此我手动启动虚拟机,而不是使用任何包装器/管理器。我使用如下命令:
/usr/bin/qemu-system-x86_64 -M pc -cpu host -smp cores=2,threads=1,sockets=1 -drive file=/dev/sda6,if=virtio,cache=none,index=0 -drive file=/dev/sdb,if=virtio,cache=none,index=1 -cdrom /dev/cdrom -pidfile ./qemu-garak.pid -boot c -k de -m 4096 -smp 1 -device pci-assign,host=01:05.0 -daemonize -usb -usbdevice "tablet" -name garak -net nic,vlan=0,model=virtio,macaddr=02:01:01:01:01:01 -net tap,vlan=0,ifname=virtnet1,script=/etc/qemu-ifup,downscript=/etc/qemu-ifup -vnc :1
我也尝试过 -cpu host 和 -smp cores=1,threads=1,sockets=2(以及其他东西)。
我正在运行多个 Windows 客户机(Server 2003 R2(32 位)、Server 2008 R2(64 位)、Windows XP Pro(32 位)、Windows 7 Pro(64 位))和 Linux 客户机(Ubuntu 11.10(64 位)、Debian squeeze(32 位)),但所有这些客户机都只报告一个处理器/核心,无论 -smp 设置如何;除此之外,设置运行可靠。
现在,我确实需要在其中一台客户机上增加 CPU 能力,所以我想知道我做错了什么。当然,我已经阅读了有关在 Windows 中更改 HAL 的信息,并尝试了几种方法(单处理器 HAL 与多处理器 HAL),但都没有成功。在花了一整天时间尝试解决问题后,我现在不知道我还能做什么。
有人知道哪里出了问题吗?是否有一些内核编译选项(2.6.37)可能导致无法将多个核心传递给客户机?qemu-kvm 版本是否必须与内核版本相匹配(当我启动客户机时没有出现如上所示的警告消息)?
更新#1:
正如预期的那样,Linux 客户机也没有显示多个 CPU / 核心:
root@baldur:~# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 44
model name : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
stepping : 2
cpu MHz : 2400.400
cache size : 4096 KB
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc up nopl pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes hypervisor lahf_lm
bogomips : 4800.80
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
root@baldur:~#
这个输出是在使用 -cpu host 和 -smp 2 启动的客户机上生成的。
答案1
那么,我感到羞耻:
上面的命令行中间已经有一个选项“-smp 1”。我不记得这个选项了,而且我在测试中也没有看到它。删除它后,它就可以正常工作了。