内存虚拟化

现代多任务操作系统设计,一般进程之间使用不同的虚拟地址空间相互隔离, 在实现上:操作系统负责维护进程页表,映射虚拟地址到物理地址的关系;

CPU的内存管理单元(MMU)负责执行地址转换;

CPU提供TLB(Translation lookaside buffer)缓存最近用到的转换结果,加速转换效率;

虚拟化技术引入后,内存地址空间更加复杂了,客户机(Guest)和宿主机(Host)都有自己的地址空间:GVA: Guest虚拟地址

GPA: Guest物理地址

HVA: Host虚拟地址

HPA: Host物理地址

显而易见,Guest负责GVA和GPA之间的转换;Host负责HVA和HPA之间的转换;而GPA和HPA之间的转换,就需要虚拟化层(Hypervisor)辅助了,这个过程一般被称为内存虚拟化。

影子页表

早期的X86 CPU硬件辅助虚拟化能力很不完善,所以Hypervisor需要通过软件实现内存虚拟化。因此,Hypervisor为每个客户机每套页表额外再维护一套页表,通常也称为影子页表。

同时, Hypervisor截获客户机里面任何试图修改客户机页表或者刷新TLB的操作,将GVA到GPA的的修改,转变成GVA到GPA的修改。这些操作包括:写gCR3(Guest CR3)寄存器和原来一样的内容,一般用作刷新TLB;

写gCR3(Guest CR3)寄存器不同的物理地址,一般是发生了进程切换;

修改部分页表,这时候必须调用INVLPG指令失效对应的TLB;

这样,Guest中的页表实际变成了虚拟页表,Hypervisor截获了Guest相关的修改操作并更新到影子页表,而真正装入物理MMU是影子页表; Guest中GVA和GPA之间的转换实际上变成了GVA与HPA的转换,TLB中缓存的也是GVA和HPA的映射,Guest内存访问没有额外的地址转换开销。

当然,影子页表也带来了下面的主要缺点:Hypervisor 需要为每个客户机的每个进程的页表都要维护一套相应的影子页表,这会带来较大内存上的额外开销;

客户在读写CR3、执行INVLPG指令或客户页表不完整等情况下均会导致VM exit,这导致了内存虚拟化效率很低;

客户机页表和和影子页表的同步也比较复杂;

Intel EPT技术

为了简化内存虚拟化的实现,以及提升内存虚拟化的性能,Intel推出了EPT(Enhanced Page Table)技术,即在原有的页表基础上新增了EPT页表实现另一次映射。这样,GVA-GPA-HPA两次地址转换都由CPU硬件自动完成。

通过EPT的GVA和HPA大概翻译的过程:处于非根模式的CPU加载guest进程的gCR3;

gCR3是GPA,cpu需要通过查询EPT页表来实现GPA->HPA;

如果没有,CPU触发EPT Violation, 由Hypervisor截获处理;

假设客户机有m级页表,宿主机EPT有n级,在TLB均miss的最坏情况下,会产生MxN次内存访问,完成一次客户机的地址翻译;

总结

为了解决GVA-GPA-HPA的转换关系,在没有硬件辅助的时代,Hypervisor通过影子页表,很巧妙的将GVA-GPA映射到GVA-HPA, 功能虽然达成,但是在很多实际场景下,如进程频繁切换,内存频繁分配释放等,性能损耗会非常大;

EPT在硬件的帮助下,实现内存虚拟化简单直接,传统页表继续负责GVA-GPA, 而EPT负责GPA-HPA; 虽然内存访问延时可能会增加一些,但是大幅减少了因为页表更新带来的vmexit, 综合性价比提升巨大, 所以现代内存虚拟化,基本都被EPT统一了。

ept技术_速懂X86虚拟化关键概念 - Intel EPT相关推荐

  1. g40-45支持虚拟化技术_速龙II X4 641支持虚拟化技术吗

    速龙II X4 641不支持虚拟化技术. 速龙II X4 641是速龙II X4 631的升级版,与AMD 速龙 II X4 631相比,X4 641主频由2.6GHz升级到2.8GHz,带来总体性能 ...

  2. ofdma技术_数字化领航 | Wi-Fi 6 关键技术剖析

    随着移动终端和移动应用的普及,我们已经习惯了随时随地接入无线网络.由于数量越来越庞大的移动终端的接入,以及高清视频和VR/AR等高带宽消耗业务的兴起,人们对无线网络的容量和可靠性提出了更高要求. Wi ...

  3. java自带的字节码技术_读懂字节码-还原JAVA源码

    已知有两个类: public class Father extends GrandFather { public String name = "father"; public vo ...

  4. 虚拟化原理 内存虚拟化 Intel EPT

    目录 内存虚拟化 影子页表 Intel EPT技术 总结 内存虚拟化 现代多任务操作系统设计,一般进程之间使用不同的虚拟地址空间相互隔离, 在实现上: 操作系统负责维护进程页表,映射虚拟地址到物理地址 ...

  5. 【学习笔记】云计算关键技术_虚拟化

    文章目录 1.虚拟化 1.1虚拟化技术是什么? 1.2虚拟化技术的核心思想 1.3采用虚拟化技术的云计算数据中心的物理拓扑结构 1.4虚拟化的好处 1.5虚拟化技术的应用 --12306使用阿里云避免 ...

  6. 内存虚拟化EPT技术简介

    1. 内存虚拟化 现代多任务操作系统设计,一般进程之间使用不同的虚拟地址空间相互隔离, 在实现上: 操作系统负责维护进程页表,映射虚拟地址到物理地址的关系 CPU的内存管理单元(MMU)负责执行地址转 ...

  7. 剖析系统虚拟化(2)- X86虚拟化技术

    系列目录 漫谈虚拟化技术 剖析系统虚拟化(1)- 简介 剖析系统虚拟化(2)- X86虚拟化技术 剖析系统虚拟化(3)- VMware vSphere 的简介 剖析系统虚拟化(4)- VMware E ...

  8. 云计算之基,一文带你速懂虚拟化KVM和XEN

    戳蓝字"CSDN云计算"关注我们哦! 技术头条:干货.简洁.多维全面.更多云计算精华知识尽在眼前,get要点.solve难题,统统不在话下! 作者 :Pasca 来源 :蛋蛋团 正 ...

  9. 虚拟化关键技术及解决方案

    试题二 虚拟化关键技术及解决方案 虚拟化是一种资源管理技术,是将计算机的各种实体资源,如服务器.网络.内存及存储等,予以抽象.转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好 ...

  10. 服务器虚拟化技术实现,服务器虚拟化关键技术及其系统实现

    <服务器虚拟化关键技术及其系统实现>由会员分享,可在线阅读,更多相关<服务器虚拟化关键技术及其系统实现(9页珍藏版)>请在人人文库网上搜索. 1.服务器虚拟化关键技术及其系统实 ...

最新文章

  1. 针对MySQL数据库主从延迟的问题
  2. 聊一聊Java字符串的不可变
  3. chrome下的img.onload
  4. 基于Nexys4 DDR的温度数码管实时显示
  5. wordpress functions.php 在哪,在functions.php中定义变量并在WordPress中的函数钩子中访问它们...
  6. cordova+vue 项目打包成Android(apk)应用
  7. SQL SERVER 2014 安装图解(含 SQL SERVER 2014 安装程序共享)
  8. python function terminated un_Python: 僵尸进程的产生和清除方法
  9. 统计学习方法读书笔记16-SVM支持向量机
  10. 用java判断x奇或偶_改善java程序——用偶判断,不用奇判断
  11. 版本管理工具git的使用总结
  12. 【C语言】新手入门的C语言经典实例(持续更新)
  13. 【深度学习】图像超分实验:SRCNN/FSRCNN
  14. 常微分二阶线性齐次微分方程的通解推导
  15. Floyd最短路径算法(来自微信公众号“算法爱好者”改编)
  16. PO:更改数组与对象的配置
  17. 利用百度地图API获取地理编码
  18. [RelativeNAS] Relative Neural Architecture Search via Slow-Fast Learning
  19. 64位windows无法正常安装dnw的解决方案
  20. 《Hexo: 从零开始编写自己的主题》1. Hexo概述以及Hexo工作原理

热门文章

  1. 毕业设计So Easy:基于Java Web学生选课系统
  2. 三种设计满足需求 网吧网络解决方案(转)
  3. 一种基于XGBOOST的企业员工稳定性(员工离职)预测方法
  4. java并发编程第七课 集合类并发处理
  5. 基于MATLAB的三重积分与曲线积分
  6. VIO_FUSION
  7. 公司注销代理合同模板
  8. 荣耀路由器w831刷linux,华为荣耀WS831路由器如何设置
  9. 在 Linux 平台及 IPv4 环境中构建 IPv6 测试环境
  10. CodeForces - 407C C - Curious Array 高阶差分序列