文档章节

KVM影子页表

jeffxiemo
 jeffxiemo
发布于 2019/01/08 14:13
字数 923
阅读 7
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

    2019年是崭新的一年,Linux kernel 5.0 低调发布了,给我的感觉就是,牛人不断在飞跃,我们也要策马奔腾赶紧追赶才有些许出路。

     内核子系统众多,我发现KVM是个非常有意思的子系统,对cpu,内核,IO的虚拟化玩的太溜了,一些技巧真是令人折服,简直就是一个超级魔法师,也可以成为"骗术”,而且还是里因外和。话不多说,进入主题。

     

VM虚拟化,对虚拟cpu很好理解,cpu采用两种模式,一种是root模式下的0 – 3特权级,另一种是非root模式下的0 - 3特权级别。在root模式下,cpu有真实的寄存器,一切都是真实,但是在非root模式下,cpu要使用的寄存器都放在与cpu绑定的一块物理内存上,绑定的过程有cpu新增的指令支持,cpu收到中断,或者访问piommio等会陷入到vmm(虚拟机监控机,在宿主端内核态特权级),,陷入以后vmm可以选择自己处理或者交给应用层处理。(此篇文章针对的是x86平台)

但是对于内存的虚拟化就更麻烦了,一般的思路是,客户端虚拟地址经过客户端的页表转化为客户端的物理地址,然后把客户端的物理地址经过转换,变为宿主端的虚拟地址,kvm中有一个数据结构kvm_memory_slot记录了此映射关系,再经过页表的转换变为真实可用的物理地址。然而这样的转换路径也太长,影响了性能,kvm有了硬件的支持以后提出了影子页表的概念。

影子页表简单来说就是,可以直接把客户端的虚拟地址映射成宿主端的物理地址。客户端想把客户端的页表基地址写入cr3寄存器的时候,由于读写cr3寄存器的指令都是特权指令,在读写 cr3的过程中都会陷入到VMM,VMM会首先截获到此指令。在客户端写cr3寄存器的时候,vmm首先保存好写入的值,然后填入的是主机端针对客户端生成的一张页表(也就是影子页表)的基地址,当客户端读cr3值的时候,vmm会把之前保存的cr3的值返回给客户端。

这样做的目的是,在客户端内核态中虽然有一张页表,但是客户端在访问内存的时候,MMU不会走这张页表,MMU走的是以填入到cr3寄存器上的真实的值为基地址(这个值是vmm写的主机端的物理地址)的影子页表,经过影子页表找到真实的物理地址.影子页表时刻与客户端的页表保持同步。

影子页表也有缺陷,KVM需要对客户端的每一个进程维护一张表,后面又有了EPT页表.暂且不谈。

     

    

本文分享自微信公众号 - 相遇Linux(LinuxJeff)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

jeffxiemo
粉丝 0
博文 49
码字总数 41883
作品 0
深圳
私信 提问
加载中
请先登录后再评论。
HTTPS切换工具--HttpsSwitcher

HttpsSwitcher 是一个帮你进行 HTTPS 切换的 Chrome 插件,本工具可以帮你尝试使用https打开指定的域名,点击本插件的浏览器图标后会自动切换本标 签页的http/https状态,并且会记住你的选择...

leehorsley
2013/01/26
1K
0
JavaScript 服务器页--JSSP

JSSP (JavaScript Server Pages) 可以让你在 Java 的应用服务器上使用 JavaScript 生成网页。支持已有的 Java 包和嵌入式 SQL 命令。包含 Dervish 这个 JavaScript 交互操作包用于简化 Ajax...

匿名
2013/02/11
3.8K
0
StreetPass

StreetPass,最初是想模拟任天堂NDS掌机中的StreetPass开发的(但未完成,大体框架已可行)。适用于记录每天在街上偶遇的纸妹Or帅锅的信息。 原理是想采用Wifi hot技术,由此可以在搜索到附近...

口米巴
2013/03/18
1.6K
0
简单CMS

主要修改: 1)增加文章模块,文章列表显示在首页和单品页中; 2)增加店铺模块,店铺显示在首页和瀑布流页中; 3)增加网站地图模块; 4)增加sitemap模块; 5)增加第三方淘宝登录功能; ...

简单CMS
2012/12/25
4.2K
0
轻量开源社区系统--StartBBS

StartBBS(起点开源社区系统)是一个基于PHP+MySQL开发的新型社区系统,她轻量小巧, 简单易用,强大高效的开源论坛系统。又简称”SB(烧饼)”。 在线演示:http://startbbs.oschina.mopaas....

startbbs
2013/01/07
4.6W
13

没有更多内容

加载失败,请刷新页面

加载更多

这是对我最大的认可和鼓励

这是程序员cxuan的第18篇原创分享 可能一些小伙伴们不太清楚是怎么回事,是这样的。 我最近肝了三本 PDF,分别是 《Java核心技术总结》、《HTTP核心总结》、《程序员必知的硬核知识》、目录如...

osc_nc5ghpm9
22分钟前
0
0
折叠屏丨华为专家深度解读折叠屏连续性和拖拽适配介绍

折叠屏手机的出现,满足了用户对大屏幕的追求,但卓越的用户体验更离不开应用的适配与功能创新。距离Mate X面世已经一年的时间,应用适配情况如何?在适配过程中有哪些经验可以参考?有没有常...

软件绿色联盟
今天
0
0
一个 static 还能难得住我?

这是程序员cxuan的第15期原创分享 static 是我们日常生活中经常用到的关键字,也是 Java 中非常重要的一个关键字,static 可以修饰变量、方法、做静态代码块、静态导包等,下面我们就来具体聊...

osc_p23q7y3z
24分钟前
19
0
高中生写LOL外挂1年狂赚500万,落网前刚买下120万保时捷...

点击“开发者技术前线”,选择“星标🔝” 在看|星标|留言, 真爱 来源:交汇点| 编辑:可可 2020年3月,泰州姜堰警方接到一起特殊的报警:一名游戏玩家向民警反映,自己在玩英雄联盟对战时输...

开发者技术前线
今天
0
0
一次简单的服务器 cpu 占用率高的快速排查实战

前两天,朋友遇到一个线上 cpu 占用率很高的问题,我们俩一起快速定位并解决了这个问题。在征求朋友同意后,特发此文分享整个过程。本文以对话的形式展开,加上我的内心独白。文中对话与实际...

osc_emo7t12i
26分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部