鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

简介

本文主要介绍虚拟机锁优化特性的优化原理和特性使能的应用场景和环境要求等。

虚拟机锁是一种保护机制,用于管理对虚拟机的访问和操作,确保虚拟机的资源在特定时间内只能被一个用户或进程独占。超分场景下,容易出现多个虚拟机抢占同一个虚拟机锁的情况,导致虚拟机性能下降。

虚拟机锁优化特性对抢占过程中的锁机制进行了优化,以提升虚拟机在超分场景下的性能。虚拟机侧操作系统在申请锁时,可通过共享内存查询对应的vCPU是否已经被其他虚拟机抢占。如果vCPU已经被抢占,则退出锁等待;如果vCPU未抢占,则进入锁等待。

虚拟机锁优化特性通过共享内存的方式,将vCPU是否被抢占的信息通过Hypervisor透传给虚拟机,虚拟机vCPU自旋等待时如果发现持锁的vCPU已经被抢占,则跳出自旋等待,减少因操作冲突导致的系统错误或崩溃,从而提高虚拟机系统稳定性和可靠性。

图1 虚拟机锁优化原理图
  1. 虚拟机内核启动时,通过Hypercall将每个vCPU记录preempted状态的内存地址传递给Hypervisor。
  2. 当Hypervisor调度运行vCPU时,调用kvm_arch_vcpu_load加载对应vCPU上下文,同时将其preempted状态设置为0。
  3. 当Hypervisor调度vCPU停止运行、或切换到另一个vCPU时,将调用kvm_arch_vcpu_put保存对应vCPU上下文,同时将其preempted状态设置为1。
  4. 虚拟机内部vCPU在申请锁时(mutex、rwsem、osq_lock等场景),如果发现持有锁的vCPU已经被调度停止(其preempted状态为1),则申请锁的vCPU跳出自旋等待。

其中,preempted状态值用于记录vCPU在Host上是否被抢占走,0表示Hypervisor正在调度执行该vCPU,1表示该vCPU已被Hypervisor调度停止。