KVM的vMMU相关数据结构及其影子页表关系分析

阅读本文前,请先参阅文章 《tdp_page_fault 函数解析之level,gfn变量的含义


依然感谢Intel OTC的 wufeng、OenHan、chenhe、ruanshuai给予的帮助和支持 微笑


本文将会对KVM中虚拟MMU的的几个关键成员含义进行分析。

这系数据结构和影子页表(spt)的关系如下图所示



a、 kvm结构

每个虚拟机一个,代表一个虚拟机

  • arch成员是虚拟机级别的arch特性,其中通过hash和链表会将kvm_mmu_page结构管理起来,以后通过gfn就可以快速索引到一个gfn地址所用的页表页(kvm_mmu_page)
  • vcpus成员指向一组虚拟机内的VCPU结构


b、 kvm_vcpu结构

对应一个VCPU

  • arch成员是架构特性部分,如x86特性部分,arm特定部分等

c、kvm_vcpu_arch结构

VCPU中架构相关部分

  • mmu成员指向vMMU结构,可以看出vMMU是每VCPU一个
  • walk_mmu成员指向mmu

d. kvm_mmu结构

vMMU的数据结构

  • root_hpa : 影子页表level4页表页物理地址,EPT情况下,该值就是VMCS的EPT_pointer
  • root_level: guest中页表的级别,根据VCPU特性不同而不同,如开启long mode就是4,开启PAE的就是3等等
  • shadow_root_level:就是影子页表的级数,EPT情况下这个是4
  • root_level: guest中页表的级别,根据VCPU特性不同而不同,如开启long mode就是4,开启PAE的就是3等等
  • base_role:里面设置了vMMU角色所代表的一些硬件特性,如是否开启了NX,是否开启了SMEP等

e. kvm_mmu_page结构

影子页表页的管理结构。

  • spt:指向影子页表页,页中被分为多个spte。影子页表用的页面成为shadow page,一个页面中分为多个表项,每个表项成为spte,注意不论哪个级别,表项都成为spte
  • role.level: kvm_mmu_page结构管理的页面可以作为影子页表中任何一个level的页表。也就是影子页表所代表的角色不同,有时候是level1 有时候是level4。其所管理的页面被用作哪个界别是靠role.level区分的。
  • gfn: 每级的页表页都会管理GUEST物理地址空间的一部分,这段GUEST物理地址空间的起止地址对应的GFN就在这个成员中被记录下来。当通过gaddr遍历影子页表页的时候,就会根据gaddr算出gfn,然后看gfn落在每级中的哪个spte内,从而确定使用哪个spte,然后用spte来定位出下一级页表地址或pfn

f. 影子页表页

影子页表页,shadow page,就是装载影子页表的页面,每个页面中分为多个表项,每个表项成为spte,注意不论哪个级别,表项都成为spte。


好了,到此我们应该已经分析清楚KVM 中vMMU相关的数据结构及其影子页的表关了




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值