硬件辅助虚拟化 之EPT(内存虚拟化)介绍

这篇具有很好参考价值的文章主要介绍了硬件辅助虚拟化 之EPT(内存虚拟化)介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       这篇内容,通过从操作系统的虚拟地址介绍到虚拟机层面的内存虚拟化技术,并介绍这两种技术之间的关联。

       (以下实例都以intel 64位处理器和win10 x64操作系统位例。 )

一、虚拟地址

       在保护模式下,每个进程拥有自己独立的虚拟内存,程序的代码、全局数据、栈空间等使用自己独立的虚拟内存。每个进程可以访问自己独立的以0开始的虚拟地址(VA),即每个进程可以有跟其他进程相同的虚拟地址(VA)起始地址(start address)和结束地址(end address)。

虚拟内存被操作的时候,会分配一块实际的物理内存与它对应。

       这篇内容,通过从操作系统的虚拟地址介绍到虚拟机层面的内存虚拟化技术,并介绍这两种技术之间的关联。

       (以下实例都以intel 64位处理器和win10 x64操作系统位例。 )

一、虚拟地址

       在保护模式下,每个进程拥有自己独立的虚拟内存,程序的代码、全局数据、栈空间等使用自己独立的虚拟内存。每个进程可以访问自己独立的以0开始的虚拟地址(VA),即每个进程可以有跟其他进程相同的虚拟地址(VA)起始地址(start address)和结束地址(end address)。

虚拟内存被操作的时候,会分配一块实际的物理内存与它对应。

硬件辅助虚拟化 之EPT(内存虚拟化)介绍

CPU内部的MMU(内存管理单元)会把虚拟地址(virtual address)翻译为对应的物理地址(physical address),借助于CR3寄存器。CR3寄存器存储该进程的最顶级页目录。

每一个虚拟地址被分成几份,每一份作为一个索引,得到多个索引值和一个页偏移。从最顶级页目录找到索引所在的项。从项取出次顶级页目录的起始物理地址。再用下一个索引从次顶级页目录找到下一个页目录的起始物理地址。直至直到页表的起始物理地址,外加页偏移,计算该虚拟地址对应的实际物理地址。

硬件辅助虚拟化 之EPT(内存虚拟化)介绍

从上面描述的,从虚拟地址到实际的物理地址,需要耗费一定的时间,TLB(translation lookaside buffer)可以省去中间过程。如果从TLB找到虚拟地址对应的物理地址,则跳过从页目录到页表的翻译过程。TLB会维护虚拟地址到物理地址的对应过程一定的时间。

硬件辅助虚拟化 之EPT(内存虚拟化)介绍

完整的过程为:当一个虚拟地址(VA)被访问(access),如果该虚拟地址(VA)对应的物理地址(PA)没有找到或不存在,则触发缺页中断(INT E),由缺页处理程序建立该虚拟地址(VA)的页目录页表(PML4、PDP、PDE、PTE),并把虚拟地址(VA)与物理地址(PA)的对应关系记录在TLB中。

二、内存虚拟化

我们下面描述的是内存虚拟化主要用于CPU支持并提供的硬件辅助虚拟化技术当中。

在一台计算机上安装多个虚拟机(VM)时,每个虚拟机(VM)都认为自己独占使用物理内存,都可以独立的访问以0开始的起始物理地址。如下图:

硬件辅助虚拟化 之EPT(内存虚拟化)介绍

虚拟内存技术用于把虚拟地址VA(virtual Address)转化为物理地址PA(physical address),但有了内存虚拟化技术在原本的虚拟地址翻译为物理地址的过程中又加了一层,把原本的物理地址所(PA)处的位置叫做虚拟机(virtual machine)的物理地址,也叫做GPA(guest physical address)。从而实际的物理地址(PA)叫做VMM(virtual monitor machine)的物理地址,也叫做HPA(host physical address)。

(*注:虚拟机(VM)有的资料上也叫客户机,是一个意思)。

再由VMM(Virtual Machine Monitor)把虚拟机的GPA翻译为HPA。最终达到的效果是VA映射到了HPA。转换过程如下图:

硬件辅助虚拟化 之EPT(内存虚拟化)介绍

三、虚拟内存和内存虚拟化的关系

如果没有内存虚拟化技术,操作系统通过虚拟地址(VA)访问物理地址(PA)的过程如下:操作系统(OS)把一个虚拟地址分成4个索引值(Index)和一个物理内存页偏移(offset)。4个索引值分别是Index4、Index3、Index2、Index1,分别表示L4(第四级页表PML4T)中的索引、L3(第三级页表PDPT)中的索引、L2(第二级页表PDT)中的索引、L1(第一级页表PT)中的索引。

使用索引值在页表中找到下一级页表的起始物理地址,过程如下:利用CR3寄存器找到PML4T(页表)的起始物理地址(PA),用Index4在PML4T中找到PDPT的起始物理地址(PA);再使用Index3从PDPT 找到PDT的起始物理地址(PA);再使用Index2从PDT中找到PT的起始物理地址(PA);再使用Index1从PT中取出PFN的起始物理地址(PA);最后PFN的物理起始地址加上页内偏移(offset)找到虚拟地址对应的物理地址(PA)。

在内存虚拟化技术下,所有上面提到的物理地址(PA)都将作为虚拟机的物理地址(GPA),需要把所有的GPA借助于CPU内部的EPT(Extended Page Table)转化为HPA,才能被CPU给访问。所以,过程变为了下面这样:

虚拟机里面的操作系统使用的CR3寄存器存放的PML4T的起始物理地址(GPA)需要被VMM(Virtual Machine Monitor)转化为HPA,然后才能使用Index4找到PDPT的起始物理地址(GPA)。继续借助于EPT把PDPT的GPA转化为HPA,再利用Index3找到PDT的起始物理地址(GPA)。继续借助于EPT把PDT的GPA转化为HPA,再利用Index2找到PT的起始物理地址(GPA)。继续借助于EPT把PT的GPA转化为HPA,再利用Index1找到PFN的起始物理地址(GPA)。最后借助于EPT把PFN的GPA转化为HPA,加上页内偏移(offset),得到最后的虚拟地址(VA)对应的HPA。

最后说明下,从GPA到HPA的转化过程如下图:

硬件辅助虚拟化 之EPT(内存虚拟化)介绍

一个GPA地址也被分成5部分,L4,L3,L2、L1和页内偏移offset。每一部分作为一个索引,Index4,Index3,Index2,Index1,Offset。从EPT取出PML4 Table的基地址,加上Index4*4找到PML4 Entry;并取出PML4 Entry中存放的PDP Table的基地址,加上Index3*4找到PDP Entry;取出PDP Entry中存放的PD Table的基地址,加上Index2*4找到PD Entry;取出PD Entry中存放的PT Table的基地址,加上Index1*4找到物理页帧号PFN;PFN 加上Offset就是最终的物理地址(HPA)。

四、示例

       下面简单介绍下代码《Part 7 - Using EPT & Page-level Monitoring Features》,用于了解下EPT的一个应用场景。该代码来源于Hypervisor From Scratch – Part 7: Using EPT & Page-Level Monitoring Features | Rayanfam Blog,演示了EPT的从构建到使用的过程。下面代码跟上面介绍过的内容的唯一不同的点是,页目录(PD)的Large Page标记为1,意味着页目录指向PFN,省去了PTE。每一个PDTE指向的2MB大小的物理内存。

硬件辅助虚拟化 之EPT(内存虚拟化)介绍

在不同架构的处理器下,4KB物理页面和2MB的物理内存说明如下图:

硬件辅助虚拟化 之EPT(内存虚拟化)介绍

       该代码演示了多CPU对应一个EPT表,修改完EPT需要调用Invept指令使TLB失效。该代码去除了ExAllocatePoolWithTag函数的可执行权限,从而触发VM Exit,进入VMM的处理例程VmxVmexitHandler,然后再恢复ExAllocatePoolWithTag函数的执行权限,允许其可执行。具体过程如下:

    初始化完成EPT表后,查找函数ExAllocatePoolWithTag所在的PDE,把该PDE转化为一个包含512个PT的表,找到函数ExAllocatePoolWithTag所在的PTE,然后去除函数ExAllocatePoolWithTag所在的PTE的执行权限。

    当调用函数ExAllocatePoolWithTag时,函数ExAllocatePoolWithTag所在PTE标记没有执行权限,触发违例进入VmxVmexitHandler。在处理例程VmxVmexitHandler找到函数ExAllocatePoolWithTag所在的PTE,并恢复可执行权限,最后调用Invept指令刷新TLB。

硬件辅助虚拟化 之EPT(内存虚拟化)介绍

硬件辅助虚拟化 之EPT(内存虚拟化)介绍

四、总结

    以上,从操作系统层面介绍了虚拟地址与物理地址之间的关系及转化过程,又在引入了硬件辅助虚拟化技术后,介绍了从虚拟机(操作系统处于虚拟机内部)层面的物理地址再到虚拟机监视器的实际的物理地址之间的关系及转化过程。并通过一份开源代码,简单介绍了一下以上内容的一个应用场景。

参考资料:

《系统虚拟化——原理与实现》

《虚拟化技术原理与实现》

《Intel手册卷3》

《虚拟化与云计算》

《Windows Internals Seventh Edition Part 2》

《Part 7 - Using EPT & Page-level Monitoring Features》文章来源地址https://www.toymoban.com/news/detail-433048.html

到了这里,关于硬件辅助虚拟化 之EPT(内存虚拟化)介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云计算基础-计算虚拟化-内存虚拟化

    内存在物理上是由内存卡提供的,也就是我们俗称的内存条,内存条提供了物理内存。 在物理内存之上还有虚拟内存,虚拟内存操作系统给程序分配的一段连续的内存,属于逻辑上的概念。 虚拟内存和物理内存之间会有一个映射关系,这个映射关系我们称之为页表,通过页

    2024年02月20日
    浏览(55)
  • 云计算——内存虚拟化与I/O虚拟化

    作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。   座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 目录  前言 一.内存虚拟化  1.内存虚拟化类型 全虚拟化 半虚拟化 硬件辅助内存虚拟化  2.内存复用技术 3.内存复用Qos 4.内存复

    2024年02月16日
    浏览(44)
  • 汽车虚拟ECU和MCU硬件虚拟化,傻傻分不清楚

    目录 1.概述 2.汽车虚拟ECU 3.汽车MCU虚拟化功能 4.小结 近几年,随着智能网联汽车普及,车型的更新迭代速度进一步提升,功能开发工程师希望在能够在硬件成型前验证软件功能,意味着汽车控制器的功能开发也在不断左移。 为此业内出现了对ECU进行虚拟化以加速开发的呼声

    2024年01月25日
    浏览(45)
  • 内存虚拟化、内存复用、大页内存作用及详解

       脏数据 :在内存中发生变化还没有写回磁盘的数据(写数据或者更改数据时都是先将数据写到内存中,并非直接对硬盘进行操作,待刷新周期后内存数据会刷新到硬盘中)当应用程序在写数据到硬盘时,先写入到内存缓存中,默认30S后会写入硬盘。 赃页Dirty 在/proc/men

    2024年02月08日
    浏览(40)
  • 巨页内存与Qemu/KVM虚拟化内存优化

    在虚拟化环境中,需要对虚拟机的优化,其中包括在某些情况下利用巨页内存进行内存的优化以提高虚拟机性能。那么什么是巨页内存?巨页内存有什么好处?Qemu/KVM虚拟化环境下如何使用巨页内存?本文将对这几个问题进行阐述。 对于内存管理,大多数现代操作系统都采用

    2024年02月07日
    浏览(45)
  • 内存虚拟化技术-POD和Ballooning

    在云计算领域,CPU资源一般是被认为可超分资源,而内存是不可超分资源。我们在云厂商上购买虚拟机时可选择CPU超分的实例,但是却很少能选择内存超分实例,这是因为内存的分配在虚拟机发放的时候就分配了用户,但是CPU却是可争抢的。将多个4U8G实例都发放在0-3核区间上

    2024年02月01日
    浏览(33)
  • 【虚拟化qemu】(一)--- qemu 虚拟化软件介绍与安装

    本文主要用于记录关于 qemu 虚拟化软件的介绍和安装。 qemu(quick emulator)是一款可执行硬件虚拟化的(hardware virtualization)开源仿真器(Emulator)。 对于 qemu 的介绍可以查看该关于 qemu 的 wiki 词条链接。 于嵌入式行业 qemu 可以帮助开发者:学习裸机编程,RTOS 的编程,网络协

    2024年02月16日
    浏览(36)
  • 虚拟化介绍及特点

    计算机虚拟化简介 虚拟化: 计算、存储、网络 虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以提高硬件的利用率(让资源在分配和利用上面更加合理),简化软件的重新配置过程。CPU的虚拟化技术可以单

    2024年02月05日
    浏览(44)
  • kvm网络虚拟化介绍

    在QEMU中,主要给出了客户机提供了4种不同的网络配置方案: 1、基于网桥(Bridge)的虚拟化网卡模式 2、基于NAT的虚拟网络模式 3、QEMU内置的用户网络模式 4、直接分配网络设置模式 网桥和NAT是基于linux-bridge实现的软件虚拟网络模式,QEMU是QEMU软件虚拟的网络模式,第四种网络模

    2024年02月14日
    浏览(51)
  • 【HCIA】虚拟化技术介绍

    虚拟化(Virtualization)的含义很广泛。将任何一种形式的资源抽象成另一种形式的技术都是虚拟化,是资源的一种逻辑表示。解除了物理硬件和操作系统之间的紧耦合关系。 •虚拟化是云计算的基础。简单地说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共

    2023年04月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包