CPU绑定操作

使用virsh vcpuinfp命令查看虚拟机VCPU和物理CPU的对应关系

[root@svn ~]# virsh vcpuinfo 16
VCPU:           0
CPU:            3
状态:       running
CPU 时间:   12581.6s
CPU关系:      yyyy

#可以看到VCPU0被调度到物理机CPU3上,目前是使用状态,使用时间是12581.6s。

使用emulatorpin命令可以查看虚拟机可以使用哪些物理逻辑CPU

virsh  #进入虚拟化的交互式终端
virsh # emulatorpin 16
模拟器: CPU 亲和性
----------------------------------
       *: 0-3

可以看到0-3都可以使用,意味着可以强制将VCPU调度到任何物理CPU核上

在线绑定虚拟机的CPU

可以强制虚拟机只能在部分物理CPU之间调度。例如,使编号为16的虚拟机CPU在26-31之间调度

virsh emulatorpin 16 26-31 --live

通过以下命令查看绑定是否生效
virsh emulatorpin 21
emulator: CPU Affinity
-----------------------------------------------------------
      *: 26-31

强制VCPU和物理机CPU-对一绑定

强制VCPU和物理机CPU-对一地绑定,例如强制VCPU 0和物理机CPU 28绑定,强制VCPU 1和物理机CPU 29绑定,强制VCPU 2和物理机CPU 30绑定,强制VCPU 3和物理机CPU 31绑定,命令如下:

virsh vcpupin 21 0 28

virsh vcpupin 21 1 29

virsh vcpuin 21 2 30

virsh vcpuin 21 3 31

CPU绑定技术的原理:CPU绑定实际上是Libvirt通过CGROUP来实现的,通过CGROUP直接去绑定KVM虚拟机进程也可以。CGROUP不仅可以做CPU绑定,还可以限制虚拟机磁盘、网络资源控制。

CPU绑定技术适用的应用场景:

  • 系统的CPU压力比较大
  • 多核CPU压力不平衡,可以通过cpu pinning技术人工进行调配

补充:

NUMA在虚拟机话应用之外的提示:

某些应用,比如数据库,为了保证性能,需要尽量适用更多的内存,如果使用系统默认的NUMA自动平衡策略,有可能一个CPU的内存消耗光,另外一个CPU还有大量的内存可以使用,但是系统却去调用swap来使用,造成性能严重降低。使用这些内存消耗型的应用时,可以考虑直接将系统的NUMA自动平衡策略关闭。

未完断续。。。。

原文地址:https://www.cnblogs.com/uglyliu/p/6066209.html