spin_lock 能否 sleep ? 虚拟化场景
spin_lock 能否 sleep ?
[EXIT_REASON_PAUSE_INSTRUCTION] = handle_pause/** Indicate a busy-waiting vcpu in spinlock. We do not enable the PAUSE* exiting, so only get here on cpu with PAUSE-Loop-Exiting.*/static int handle_pause(struct kvm_vcpu *vcpu){if (ple_gap)grow_ple_window(vcpu);skip_emulated_instruction(vcpu);kvm_vcpu_on_spin(vcpu);return 1;
}
在虚拟化场景在 guest 执行 pasue 指令退出(通常是 guest 在执行 spin_lock, 自旋时使用 pause 指令暂定指令流水的执行,减少 cpu 功耗以及对总线的争用)时, 会让给其他 vcpu 运行
https://git.zx2c4.com/linux-rng/commit/virt?id=217ece6129f2d3b4fdd18d9e79be9e43d8d14a42
