使用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自动平衡策略关闭。
未完断续。。。。