kvm 虚拟化技术 进阶与实战 笔记_KVM的内存虚拟化

0014eade3c722b27dfa66c96bc6e5817.png

内容转自 https://www.ibm.com/developerworks/cn/linux/l-cn-kvm-mem/

为了实现内存虚拟化,让客户机使用一个隔离的、从零开始且具有连续的内存空间,KVM 引入一层新的地址空间,即客户机物理地址空间 (Guest Physical Address, GPA),这个地址空间并不是真正的物理地址空间,它只是宿主机虚拟地址空间在客户机地址空间的一个映射。对客户机来说,客户机物理地址空间都是从零开始的连续地址空间,但对于宿主机来说,客户机的物理地址空间并不一定是连续的,客户机物理地址空间有可能映射在若干个不连续的宿主机地址区间,如下图 1 所示:

805f6c34992184507bcedf3325ce0ce4.png
图1. 客户机物理地址到宿主机虚拟地址的转换

客户机(Guest)无法直接使用宿主机(Host)的MMU进行地址转换。客户机的寻址需要经历一系列繁杂的转换:客户机虚拟地址(GVA)->客户机物理地址(GPA)->kvm_memory_slot(数据结构)->宿主机虚拟地址(HVA)->宿主机物理地址(HPA)。kvm_memory_slot 数据结构来记录每一个地址区间的映射关系,此数据结构包含了对应此映射区间的起始客户机页帧号 (Guest Frame Number, GFN),映射的内存页数目以及起始宿主机虚拟地址。

为了简化这一步骤,往往有硬件和软件两种方式。

一. 影子页表

影子页表(Shadow Page Table)是由软件维护的,实现客户机虚拟地址到宿主机物理地址间的直接转换。

d544f3be98ef6e57e52cebe6ad6465e3.png
图2. 影子页表

影子页表简化了地址转换,但对于每个客户机进程页表都需要维护一个影子页表。在客户机访存时,影子页表会被装入宿主机MMU,而且,在TLB和CPU缓存中缓存的时客户机虚拟地址和宿主机物理地址间的映射,提高了缓存效率。

dd0af42005456887a970750fe90d12f7.png
图3. 客户机页表与影子页表是由hash表映射

为了快速检索客户机页表对应的影子页表,KVM为每个客户机维护了一个hash表来进行客户机页表到影子页表之间的映射。

缺点:

影子页表的引入也意味着 KVM 需要为每个客户机的每个进程的页表都要维护一套相应的影子页表,这会带来较大内存上的额外开销,此外,客户机页表和和影子页表的同步也比较复杂。

二. EPT页表

EPT 技术在原有客户机页表对客户机虚拟地址客户机物理地址映射的基础上,又引入了 EPT 页表来实现客户机物理地址宿主机物理地址的另一次映射,这两次地址映射都是由硬件自动完成。客户机运行时,客户机页表被载入 CR3,而 EPT 页表被载入专门的 EPT 页表指针寄存器 EPTP。EPT 页表对地址的映射机理与客户机页表对地址的映射机理相同。KVM 只需为每个客户机维护一套 EPT 页表,也大大减少了内存的额外开销。

535d28bc49b871384a6668126845cc3c.png
图4. EPT页表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值