EPT和VPID简介
EPT(Extended Page Tables,扩展页表),属于Intel的第二代硬件虚拟化技术,它是针对内存管理单元(MMU)的虚拟化扩展。EPT降低了内存虚拟化的难度(与影子页表相比),也提升了内存虚拟化的性能。
从基于Intel的Nehalem架构的平台开始,EPT就作为CPU的一个特性加入到CPU硬件中去了。
和运行在真实物理硬件上的操作系统一样,在客户机操作系统看来,客户机可用的内存空间也是一个从零地址开始的连续的物理内存空间。为了达到这个目的,Hypervisor(即KVM)引入了一层新的地址空间,即客户机物理地址空间,这个地址空间不是真正的硬件上的地址空间,它们之间还有一层映射。所以,在虚拟化环境下,内存使用就需要两层的地址转换:
即客户机应用程序可见的客户机虚拟地址(Guest Virtual Address, GVA)到客户机物理地址(Guest Physical Address, GPA)的转换(第一次转换,由客户机系统完成)
再从客户机物理地址(GPA)到宿主机物理地址(Host Physical Address, HPA)的转换(第二次转换,由Hypervisor来负责)。
GVA——GPA——HPA
客户机虚拟地址——客户机物理地址——宿主机物理地址
在硬件EPT特性加入之前,影子页表(Shadow Page Tables)是从软件上维护了从客户机虚拟地址(GVA)到宿主机物理地址(HPA)之间的映射(没有中间的GPA),每一份客户机操作系统的页表也对应一份影子页表。有了影子页表,在普通的内存访问时都可实现从GVA到HPA的直接转换,从而避免了上面前面提到的两次地址转换。Hypervisor将影子页表载入到物理上的内存管理单元(Memory Management Unit, MMU)中进行地址翻译。图4-3展示了,GVA、GPA、HPA之间的转换,以及影子页表的作用。
尽管影子页表提供了在物理MMU硬件中能使用的页表,但是其缺点也是比较明显的:
首先影子页表实现非常复杂,导致其开发、调试和维护都比较闲难。
其次,影子页表的内存开销也比较大,因为需要为每个客户机的进程对应的页表的都维护一个影子页表。
为了解决影子页表存在的问题,Intel的CPU提供了EPT技术(AMD提供的类似技术叫做NPT, 即Nested Page Tables),直接在硬件上支持GVA-->GPA-->HPA的两次地址转换,从而降低内存虚拟化实现的复杂度,也进一步提升了内存虚拟化的性能
CR3(控制寄存器3)将客户机程序所见的客户机虚拟地址(GVA)转化为客户机物理地址(GPA),然后在通过EPT将客户机物理地址(GPA)转化为宿主机物理地址(HPA)。这两次转换地址转换都是由CPU硬件来自动完成的,其转换效率非常高。
在使用EPT的情况下,客户机内部的Page Fault、INVLPG(使TLB项目失效)指令、CR3寄存器的访问等都不会引起VM-Exit,因此大大减少了VM-Exit的数量,从而提高了性能。另外,EPT只需要维护一张EPT页表,而不需要像“影子页表“那样为每个客户机进程的页表维护一张影子页表,从而也减少了内存的开销。
TLB(Translation Lookaside Buffer)转换检测缓冲区是一个内存管理单元,用于改进虚拟地址到物理地址转换速度的缓存。
TLB是一个小的,虚拟寻址的缓存,其中每一行都保存着一个由单个PTE(Page Table Entry,页表项)组成的块。如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址和取数据。
VPID(Virtual Processor Identifiers, 虚拟处理器标识),是在硬件上对TLB资源管理的优化,通过在硬件上为每个TLB项增加一个标识,用于不同的虚拟处理器的地址空间,从而能够区分开Hypervisor和不同处理器的TLB。
硬件区分了不同的TLB项分别属于不同虚拟处理器,因此可以避免每次进行VM-Entry和VM-Exit时都让TLB全部失效,提高了VM切换的效率。由于有了这些在VM切换后仍然继续存在的TLB项,硬件减少了一些不必要的页表访问,减少了内存访问次数,从而提高了Hypervisor 和客户机的运行速度。
VPID也会对客户机的实时迁移(Live Migration)有很好的效率提升,会节省实时迁移的开销,会提升实时迁移的速度,降低迁移的延迟(Latency)。VPID与EPT是一起加入到CPU中的特性,也是Intel公司在2009年推出Nehalem系列处理器上新增的与虚拟化相关的重要功能。
在Linux操作系统中,可以通过如下命令查看/proc/cpuinfo中的CPU标志来确定当前系统是否支持EPT 和VPID 功能。
grep -E "ept|vpid" /proc/cpuinfo #intel的cpu
grep npt /proc/cpuinfo #amd
在宿主机中,可以根据sysfs文件系统中kvm_intel模块的当前参数值来确定KVM是否打开EPT和VPID特性。
在默认情况下,如果硬件支持了EPT、VPID,则kvm_intel模块加载时默认开启EPT和VPlD特性,这样KVM会默认使用它们。
cat /sys/module/kvm_intel/parameters/ept
cat /sys/module/kvm_intel/parameters/vpid
如果结果是Y表示开启
在加载kvm_intel模块时,可以通过设置上述的ept和vpid参数的值来打开或关闭EPT和VPID。
如果kvm_intel模块已经处于加载状态,则需要先卸载这个模块,在重新加载之时加入所需的参数设置。
当然,一般不要手动关闭EPT和VPID功能,否则会导致客户机中内存访问的性能下降。
EPT和VPID简介的更多相关文章
- Intel虚拟化技术——EPT、VPID
背景 内存用于暂存CPU将要执行的指令和数据,所有程序的运行都必须先载入到内存中才可以,内存的大小及其访问速度也直接影响整个系统性能.在平台虚拟化技术中,Guest的运行也需要依赖内存.和运行在真实物 ...
- ybc云计算思维
YBC的云计算思维 计算机基础 一 计算机由5大单元组成 输入单元(鼠标 键盘) 存储单元(硬盘 内存) 逻辑单元(CPU) 控制单元(主板) 输出单元(显示器 音响 打印机) CPU CPU主要 ...
- openstack-KVM-Memory
一.Memory 1.查看memory信息 free -g cat /proc/meminfo dmesg | grep Memory 2.xml文件中的内存信息: vim /etc/libvirt/ ...
- intel vt
EPT和VPID技术是内存虚拟化技术, 是页表扩充技术Extended Page Table (EPT) 的缩写, 是VT-x技术的一部分. 内存虚拟化的主要任务是实现地址空间的虚拟化,内存虚拟化是通 ...
- Linux 内核引导选项简介
Linux 内核引导选项简介 作者:金步国 连接地址:http://www.jinbuguo.com/kernel/boot_parameters.html 参考参数:https://www.cnbl ...
- Linux简介和安装
Andrew S. Tanenbaum参考Unix,写了Minix,并开源,Linus Torvalds以其为模板写了Linux. Linux包含内核版本和发行版本. Linux内核版本 Linux内 ...
- 虚拟化之Xen简介
1>相关知识简介: 1>常用的磁盘IO调度器: CFQ:完全公平队列算法: deadline:最后期限算法: anticipatory:顺序读写队列算法/预期算法: NOOP:no op ...
- KVM简介,安装及常见使用详解
KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machine的缩写,即基于内核的虚拟机),是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hype ...
- Linux 内核引导参数简介
概述 内核引导参数大体上可以分为两类:一类与设备无关.另一类与设备有关.与设备有关的引导参数多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导参数.比如,如果你想知道可以向 AHA ...
随机推荐
- IDEA设置取消自动显示参数提示
IDEA设置取消自动显示参数提示 最近在使用IDEA的过程中,发现方法中一直显示形参名的提示,无法选中,也无法删除,基于不同人的使用习惯不同,有的人不喜欢这种提示,我也在网上寻找各种解决方案,由于搜索 ...
- redis的安装(图文详解)
我这里,搭建在 继续
- Git如何克隆Gitlab?Git本地仓库如何上传Gitlab?
首先确保本机已经安装上Git,其次确认可以正常访问Gitlab服务器 环境: Git:Centos 7.x 192.168.126.138 Gitlab: Centos7.x 192.168.126 ...
- Centos 6.8安装 SVN
SVN SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subver ...
- python之使用request模块发送post和get请求
import requestsimport json #发送get请求并得到结果# url = 'http://api.nnzhp.cn/api/user/stu_info?stu_name=小黑马 ...
- Hdu 3652 B-number (同余数位DP)
题目链接: Hdu 3652 B-number 题目描述: 给出一个数n,问 [1, n]区间内有几个数能被13整除并且还有13这个子串? 解题思路: 能整除的数位DP,确定好状态随便搞搞就能过了.d ...
- 关于在@Controller所返回的视图的css,js文件404问题
本人在使用layui打开一个请求后台的页面时,页面成功由controller重定向到了正确的位置,然而几乎所有的js文件和css文件都报404,并且确定这些css文件还有js文件的引入的路径都是正确的 ...
- 真tm无聊,这几天。。。
临近期末了,每天都要和学霸一起上自习. 很不喜欢学习和自己未来没多大用的东西 老师画的那些重点是对我们好吗~ 每天感觉都在折磨自己,不想学,学不进去,心里很烦躁,浮躁. 人生苦短->_-> ...
- android开发学习 ------- Error:Failed to open zip file.
我们用Android Studio Sync Project项目的时候,会出现如下的错误: 解决方案: Project视图下, 这块 https 改为 http 就可以了.
- Java-注解(不包含元注解)
@SuppressWarnings:抑制警告 package java.lang; import java.lang.annotation.*; import static java.lang.ann ...