设为首页收藏本站language 语言切换
查看: 2079|回复: 1
收起左侧

[分享] 在AMD平台上实现KVM虚拟化技术 (33)

[复制链接]
发表于 2012-10-31 17:47:27 | 显示全部楼层 |阅读模式
PauseFilter Detect
PAUSE指令在 Linux内核等代码中广泛被用于自旋锁的 SPIN 循环中,用于标识一个CPU 的代码处于自旋锁等待状态。
在虚拟化环境中存在一个问题是,我们并不希望一个虚拟机的 CPU 太长时间处于自旋锁等待状态,因为在主机上有其他的虚拟机或计算任务可以利用该CPU 的计算资源。 解决该问题的一个比较好的思想是计算某虚拟 CPU 连续调用 PAUSE 指令的次数,当超过了规定的值,就截取该虚拟 CPU,调度其他 VMM 上的进程,或想法加快持有自旋锁的 VCPU 线程的调度执行。
为了实现这一思想,较近的 AMD-V 处理器的 VMCB.CONTROL 中增加了一 PAUSE_FILTER_COUNT 字段及一个 INTERCEPT_PAUSE 控制位,用于设定对 PAUSE 的截取,即当 INTERCEPT_PAUSE 为 1 时,用 PAUSE_FILTER_COUNT 初始化 CPU 内某寄存器,每次 PAUSE 执行时,该寄存器的值减 1,当减到 0 时产生截取。
PAUSE_FILTER_COUNT完全按 PAUSE的次数控制是否截取 PAUSE 指令,没有考虑不同 PAUSE指令之间的执行间隔,如俩个 PAUSE 指令属于不同代码或PAUSE 指令间有中断的情况,这些情况不应该被误判为自旋锁 SPIN 循环的存在。为弥补 PAUSE_FILTER_COUNT 机制的不足,更新的 AMD-V 处理器在 VMCB.CONTROL 中增加了一个 PAUSE_FILTER_THRESHOLD 字段,新的字段用来规定一个 CPU Cycles 的长度,当最近一次 PAUSE 过去的 CPU Cycles 超过了该字段规定的值时,PAUSE_FILTER_COUNT 对应的 CPU 内部计数器会重新设置为 PAUSE_FILTER_COUNT;如果过去的CPU Cycles 没超过 PAUSE_FILTER_THRESHOLD 字段规定的值,则内部计数器按正常的方式递减,直到其值为 0,产生截取。 目前 RHEL6.2 上 KVM 的实现已经支持 PAUSE_FILTER_COUNT,但尚不支持 PAUSE_FILTER_THRESHOLD。详细:http://www.51rhca.com/archives/595

 楼主| 发表于 2012-11-1 18:36:13 | 显示全部楼层
{:soso_e128:}嘿嘿嘿,以后都多多学习,知识大家共同分享
沙发 2012-11-1 18:36:13 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-2-9 11:16 , Processed in 0.060485 second(s), 13 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表