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

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

[复制链接]
发表于 2012-10-30 15:23:04 | 显示全部楼层 |阅读模式
Nested Paging
作为纯粹用软件方法实现的解决虚拟机使用物理内存的技术,“Shadow Paging”明显的缺点是在传统操作系统分页处理的基础上增加了额外的开销,影响虚拟化解决的性能linux。 这种额外的开销包括 VMM 对客操作系统页表修改的截取以及相关的同步操作,对 CR3 切换的截取以及相关的 Shadow 页表上下文切换操作, 这些操作通常是相当频繁的。为了解决 “ShadowPaging”的性能问题,AMD为其 AMD-V 扩展增加了一个新的特征,称之为 NPT 或 “Nested Paging”。NPT是采用二维分页的技术,即运行的客操作系统会使用二个体系的页表来执行虚拟地址到物理地址的映射,第一个页表映射从 gva 到 gpa,完全由客操作系统的页表来控制,第二个页表映射从 gpa 到 hpa, 由 VMM 上的页表来控制linux
为实现”Nested Paging”,AMD-V提供了如下硬件特征 :
(1)提供了一个 nCR3 寄存器用来存放虚拟机运行时第二维页表的物理地址,该寄存器的值由 VMCB.CONTROL 的 N_CR3 字段在 VMRUN 时进行设定,软件无法直接读取该寄存器的值。
(2)提供了一个gPAT寄存器用来影子虚拟机的 PAT MSR 寄存器,gPAT 的值由 VMCB.SAVE 的 G_PAT字段在linuxVMRUN 时进行设定,VMM 软件无法读取该寄存器的值。显然,用 gPAT 来对客操作系统的 PAT 进行影子,是必要的硬件支持, 因为一方面客操作系统的页表需要运行时参考 PAT,所以 PAT 不可能象其他MSR 一样通过截取来仿真,另一方面也不能直接开放物理的 PAT 寄存器给客操作系统,因为 Host 层进程的页表也需要使用它。
(3)CR0, CR4, EFER 寄存器具有复制的硬件状态。也就是说当 NPT 功能激活时linux,VMRUN 从 VMCB.SAVE 加载的这三个客操作系统的寄存器不会破坏 VMRUN 运行前该 CPU 的CR0,CR4,EFER. 虚拟机和主机有二套分开的 CR0,CR4,EFER 来分别控制其各自层次的分页行为。
(4)提供了一个无名的 NPT 状态控制位,该位的值由 VMCB.CONTROL 的 NP_ENABLE 字段来初始化。当该 NPT 状态控制位为 1 时,运行在该CPU 上的客操作系统才能使用二维分页。详细:http://www.51rhca.com/archives/565

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

本版积分规则

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

GMT+8, 2025-3-11 03:28 , Processed in 0.102428 second(s), 25 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

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