请教KVM虚拟化对应CPU的控制

305 views
Skip to first unread message

kevinzhang

unread,
Mar 11, 2012, 10:40:39 AM3/11/12
to sh...@googlegroups.com
大家好,
      现在遇到一个问题,采用Linux的KVM虚拟化以后对应CPU资源的控制可以实现。例如有一个用户申请了一个虚拟机,只需要一个奔腾3处理器计算能力, 我在分配虚拟机的时候如何指定虚拟机的计算资源的能力。VMware中直接可以精确到Hz级的控制,KVM中如何去实现。我研究了一下KVM创建 时候的某些参数,目前好像有一个-cpu的参数:
kevin@kevin:~/ISO$ kvm -cpu ?
x86       Opteron_G3
x86       Opteron_G2
x86       Opteron_G1
x86          Nehalem
x86           Penryn
x86           Conroe
x86           [n270]
x86         [athlon]
x86       [pentium3]
x86       [pentium2]
x86        [pentium]
x86            [486]
x86        [coreduo]
x86          [kvm32]
x86         [qemu32]
x86          [kvm64]
x86       [core2duo]
x86         [phenom]
x86         [qemu64]
x86           [host]

如果我使用-cpu这个参数可以指定相应型号的CPU,是否这样就可以,我用tinyLinux做了测试,目前看上去可以。想请教一下群里的大 牛,这样是否就真的能做到CPU频率的控制,具体到CPU调度的时候是如何实现的,谢谢!

下图是我在tinyLinux测试的结果:
kevin@kevin:~/ISO$ kvm -cpu pentium3 -cdrom Core.iso
kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin"



kevinzhang

unread,
Mar 11, 2012, 9:43:10 PM3/11/12
to sh...@googlegroups.com
On 03/11/2012 10:40 PM, kevinzhang wrote:
大家好,
      现在遇到一个问题,采用Linux的KVM虚拟化以后对应CPU资源的控制可以实现。例如有一个用户申请了一个虚拟机,只需要一个奔腾3处理器计算能力, 我在分配虚拟机的时候如何指定虚拟机的计算资源的能力。VMware中直接可以精确到Hz级的控制,KVM中如何去实现。我研究了一下KVM 创建 时候的某些参数,目前好像有一个-cpu的参数:

kevin@kevin:~/ISO$ kvm -cpu ?
x86       Opteron_G3
x86       Opteron_G2
x86       Opteron_G1
x86          Nehalem
x86           Penryn
x86           Conroe
x86           [n270]
x86         [athlon]
x86       [pentium3]
x86       [pentium2]
x86        [pentium]
x86            [486]
x86        [coreduo]
x86          [kvm32]
x86         [qemu32]
x86          [kvm64]
x86       [core2duo]
x86         [phenom]
x86         [qemu64]
x86           [host]

如果我使用-cpu这个参数可以指定相应型号的CPU,是否这样就可以,我用tinyLinux做了测试,目前看上去可以。想请教一下群里的 大 牛,这样是否就真的能做到CPU频率的控制,具体到CPU调度的时候是如何实现的,谢谢!


下图是我在tinyLinux测试的结果:
kevin@kevin:~/ISO$ kvm -cpu pentium3 -cdrom Core.iso
kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin"




早上研究了一下,也可以通过-smp参数来绑定vcpu和物理cpu的关系:
http://wiki.libvirt.org/page/QEMUSwitchToLibvirt#-smp

-smp

The number of virtual CPUs to create, as per the 'vcpu' XML element:

  <vcpu cpuset='1'>1</vcpu>


If the 'cpuset' parameter is given, libvirt will call 'sched_setaffinity' to map the virtual CPU threads onto the requested physical CPUs.


群里的朋友,有人能再给出一些建议不?谢谢鸟!

Shell Xu

unread,
Mar 11, 2012, 10:37:22 PM3/11/12
to sh...@googlegroups.com
我觉得你在折腾这个之前,先测试一下性能损失。一般来说使用KVM是因为KVM相对QEMU,性能相当高。我测试下来可以达到原始系统八成的性能,具体要看应用的形态。凡是频繁涉及内核态切换的应用会比较慢,如果是纯计算几乎是100%的性能。
而KVM会让guest的CPU和host一致。如果你更换CPU,很可能导致(只是可能)性能下降。这个就得不偿失了,把KVM退化成了QEMU来用。
--
无能者无所求,饱食而遨游,泛若不系之舟
blog: http://shell909090.com/blog/
twitter: http://twitter.com/shell909090

kevinzhang

unread,
Mar 11, 2012, 11:19:53 PM3/11/12
to sh...@googlegroups.com
的确向您说的那样,性能需要考虑。但有时候需要考虑更小分的CPU资源(1个都用不完如何考虑这种场景)。如何分配这种方面的调度,目前还没有比 较好的解决方案。我也看到libvirt也有对应CPU进行shares的方式,是否这种方式会更好些,对应性能影响小?
http://libvirt.org/formatdomain.html#elementsCPUTuning



On 03/12/2012 10:37 AM, Shell Xu wrote:
我觉得你在折腾这个之前,先测试一下性能损失。一般来说使用KVM是因为KVM相对QEMU,性能相当高。我测试下 来可以达到原始系统八成的性能,具体要看应用的形态。凡是频繁涉及内核态切换的应用会比较慢,如果是纯计算几乎是100%的性能。
而KVM会让guest的CPU和host一致。如果你更换CPU,很可能导致(只是可能)性能下降。这个就得不偿失了,把KVM 退化成了QEMU来用。

在 2012年3月12日 上午9:43,kevinzhang <zhangj...@gmail.com>写 道:
On 03/11/2012 10:40 PM, kevinzhang wrote:
大家好,
      现在遇到一个问题,采用Linux的KVM虚拟化以后对应CPU资源的控制可以实现。例如有一个用户申请了一个虚拟机,只需要一个奔腾3处理器计算能力, 我在分配虚拟机的时候如何指定虚拟机的计算资源的能力。VMware中直接可以精确到Hz级的控制,KVM中如何去实 现。我研究了一下KVM 创建 时候的某些参数,目前好像有一个-cpu的参数:

kevin@kevin:~/ISO$ kvm -cpu ?
x86       Opteron_G3
x86       Opteron_G2
x86       Opteron_G1
x86          Nehalem
x86           Penryn
x86           Conroe
x86           [n270]
x86         [athlon]
x86       [pentium3]
x86       [pentium2]
x86        [pentium]
x86            [486]
x86        [coreduo]
x86          [kvm32]
x86         [qemu32]
x86          [kvm64]
x86       [core2duo]
x86         [phenom]
x86         [qemu64]
x86           [host]

如果我使用-cpu这个参数可以指定相应型号的CPU,是否这样就可以,我用tinyLinux做了测试,目前看上去可 以。想请教一下群里的 大 牛,这样是否就真的能做到CPU频率的控制,具体到CPU调度的时候是如何实现的,谢谢!


下图是我在tinyLinux测试的结果:
kevin@kevin:~/ISO$ kvm -cpu pentium3 -cdrom Core.iso
kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin"




早上研究了一下,也可以通过-smp参数来绑定vcpu和物理cpu的关系:
http://wiki.libvirt.org/page/QEMUSwitchToLibvirt#-smp

-smp

The number of virtual CPUs to create, as per the 'vcpu' XML element:

  <vcpu cpuset='1'>1</vcpu>


If the 'cpuset' parameter is given, libvirt will call 'sched_setaffinity' to map the virtual CPU threads onto the requested physical CPUs.


群里的朋友,有人能再给出一些建议不?谢谢鸟!

Shaohua Li

unread,
Mar 12, 2012, 10:12:24 AM3/12/12
to sh...@googlegroups.com
在 2012年3月11日 下午10:40,kevinzhang <zhangj...@gmail.com>写道:
大家好,
      现在遇到一个问题,采用Linux的KVM虚拟化以后对应CPU资源的控制可以实现。例如有一个用户申请了一个虚拟机,只需要一个奔腾3处理器计算能力, 我在分配虚拟机的时候如何指定虚拟机的计算资源的能力。VMware中直接可以精确到Hz级的控制,KVM中如何去实现。我研究了一下KVM创建 时候的某些参数,目前好像有一个-cpu的参数:
KVM  每个vcpu是一个线程,我估摸着用renice这个线程可以
Reply all
Reply to author
Forward
0 new messages