memory virtualization: shadow page & nest page

系列文章目录



前言

虚拟化是一个比较复杂的概念,包括硬件抽象层级别的虚拟化,操作系统层面的虚拟化,以及库函数的虚拟化,还有编程语言层面的虚拟化。java virual machine就是编程语言层面的虚拟化,可以实现跨平台的运行。

本文指的虚拟化是在系统层面,一个host 系统上运行多个guest系统。当然这也是一个比较大的话题,先介绍最近学习的页表虚拟化。


一、标准page walk

在这里插入图片描述
标准table walk 如上图所示,程序使用的虚拟地址通过页表,得到实际的物理地址。其中Page Table Base Address,指向table1的基地址。假设地址为48bit,PTE为8B。则8B*2^9 = 4KB.

使用虚拟地址[47:39],索引L1级页表,得到L2级页表的页基地址。使用[38:30]索引L2级页表,得到L2级页表的页基址。最终,在L4级页表得到实际物理页面地址,加上页内偏移,可以得到物理地址。


二、软件页表虚拟化 shadow page


上图a)为硬件页表虚拟化,b)为软件页表虚拟化。

软件页表虚拟化为VMM使用的shadow page技术。

在软件页表虚拟化中,host系统将会维护一套shadow page,称为影子页表。这份影子页表维护了从gVA→sPA的映射,这份页表直接通过物理MMU进行访问,因此在tlb miss时,可以按照正常的访问,即4次即可得到va对应的pa。
在这里插入图片描述
但是,软件维护这份影子页表,消耗很大。

首先,对应每一个用户的每一个进程,都需要维护一份影子页表。此外,host VMM是通过guest发出异常来维护影子页表的:每次guest对guest的页表的属性,地址分配等进行更改,host系统为了能够同步到shadow page,都需要guest发出异常,进入host,host改动shadow page。考虑每个进程又都有自己的影子页表,这样做的性能损失代价很大。


三、硬件页表虚拟化 nested page

nested-paging是目前通用的页表虚拟化技术,Intel,AMD,ARM都有使用。

guest系统中的页表维护的地址映射是guest VA→guest PA,缩写为gVA→gPA。但是此时的gPA,只是在guest系统的角度,是物理地址。实际上因为多个guest运行在host/hypervisor上,所以host会维护一份host页表,将gPA映射为sPA。即将gPA映射为真实的PA。因此实际上gPA也是一个虚拟地址。

当然,TLB中维护的映射仍为guest VA→host PA,这样才能保证系统性能。不过,既然guest的页表最终输出的结果仍是虚拟地址,那么当guest发生TLB miss时,就需要进行特殊的处理,才能访问真正的物理地址。这就是本片要讲的内容。

Nested Paging地址转换
如上图所示,guest使用gCR3,指向guest系统的页表基地址。host系统使用nCR3,指向host系统的页表基地址。因为gCR3指向的地址也是gPA,并且guest内部每次翻译得到的L2/L3/L4页表基地址也是gPA(上文讲过,gPA本质上也是虚拟地址),因此这些gPA都需要经过host address translation,才能得到L2/L3/L4页表基地址的真实的sPA。
经典地址转换与nested paging地址转换的流程图
如上图所示,b)中即为nested paging 发生tlb miss时,需要进行的页表查询次数。因为每次都需要对页基地址进行翻译,所以如果查询guest页表结构为n级,host页表结构为m级,那么翻译页表的gPA就需要n * m次 ,又因为最终获得的gPA还需要通过host页表进行查询,因此最后又需要m次,总计需要:

  1. n(guest page walk)
  2. n * m(翻译所有的页表对应的sPA)
  3. m (最后一轮翻译gPA)

即为n+n*m+m。图中,guest和host都是4级页表,因此就需要24次查询。

相比于经典的4次,还是增加了很多的访问时间。

但是相比于shadow page,nested page可以通过一份host页表,支持多个guest,多个进程;并且guest对页表的更改,不需要进入host的介入,因此减少了系统状态的切换和维护页表的数目。此外,通过引入page walk cache,将页表的内容进行缓存,虽然相对于shadow page访问页表的次数增加,但是如果cache命中率足够高,相对于shadow page,仍然更具优势。


四、对比

在这里插入图片描述
如图所示:

  1. nested page tlb miss时访问memory次数增加到24,并且nested page walk需要硬件支持
  2. shadow page的page table更新代价大,需要VMM的支持。

——————欢迎关注我的公众号《处理器与AI芯片》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值