ARM64内存虚拟化分析(6)向KVM注册内存更新

news2024/10/2 22:30:58

1 KVM memory listener的注册

        在KVM初始化kvm_init()中会通过函数km_memory_listener_regiter()注册KVM所对应的memory listener,其中设置KVM region_add回调,KVM region_del回调以及KVM log_start/log_stop的回调。

 2 region_add回调

        当添加内存区域时,会调用注册的memory_listener对应的region_add回调函数。对于KVM memory listener,region_add回调函数为kvm_region_add()。

        该回调函数会将内存区域所对应的虚拟机物理地址gpa和host上虚拟内存hva之间的关系通过mem结构体,通过系统调用KVM_SET_USER_MEMORY_REGION通知KVM。

3 系统调用KVM_SET_USER_MEMORY_REGION

        系统调用KVM_SET_USER_MEMORY_REGION最终向KVM提交虚拟机物理地址gpa和host上虚拟地址hva之间的对应关系,以便在产生stage2缺页时根据gpa找到对应的hva,最终建立起gpa到hpa之间的映射。

        在KVM中,内存相关的结构体以及之间的关系如下图所示:

        KVM结构体中成员__memslots[1][2]表示每个地址空间存在active和inactive memslot组。正常情况下两组memslots指向一组相同的memslots。但在通过memslot管理操作将copy替代memslot时这两组memslots出现不同。当完成这些操作后,这两组memslots又指向相同的memslots。暂不分析两者差异(待分析)。

        Kvm_memslots结构体为一组memslot组,将包含GPA和HVA映射的memslot组以hva加入到hva_tree红黑树中,以gpa加入到gfn_tree红黑树中。其中成员last_used_slot缓存上一次使用的memslot。

        Kvm_mem_slot结构体体现gpa和hva之间映射关系。其中hva_node用于链入到kvm_memslots中的hva_tree红黑树中,gfn_node用于链入到kvm_memslots中的gfn_tree红黑树中,base_gfn表示虚拟机的物理地址gpa,userspace_addr表示QEMU线程的虚拟地址即hva,npages表示大小。

        系统调用KVM_SET_USER_MEMORY_REGION调用关系如下:

        函数kvm_set_memslot()处理如下,它根据增加MR或删除MR或移动MR等操作执行不同的处理:

        KVM_MR_CREATE针对创建MR情况,将新创建的MR插入到memslots中,同时根据hva值将该MR插入到hva_tree红黑树中(在stage2 unmap中可以快速找到),根据gfn值将该MR插入到gfn_tree红黑树中(在stage2缺页异常中可以从gfn快速找到hva)。

        KM_MR_DELETE针对删除MR情况,将旧的MR从memslots中移除,首先它会将memslot无效化,并unmap stage2映射(函数kvm_invalidate_memslot()实现),然后通过kvm_delete_memslot()移除旧的memslot。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Wireshark抓到的H264帧

H264文件解析 NALU size, NALU start code size, NALU type 0, 0 0 UNSPECIFIED NALU size, NALU start code size, NALU type 26, 4 7 SPS NALU size, NALU start code size, NALU type 4, 4 8 PPS NALU size, NALU start code…

浅谈数据孤岛和数据分析的发展

大数据时代,企业对数据的重视力度逐步增强,数据分析、数据治理、数据管理、数据资产,已经被人们熟知,在数据的统计汇总和挖掘分析下,管理者的决策有了强有力的支撑和依据,同时也产生了新的问题,…

CSS 奇技淫巧Box-shadow实现圆环进度条

CSS 奇技淫巧Box-shadow实现圆环进度条 文章目录CSS 奇技淫巧Box-shadow实现圆环进度条一、Box-shadow圆环进度条二、效果预览三、原理刨析四、实际应用五、总结六、参考资料💘七、推荐博文🍗一、Box-shadow圆环进度条 实现圆环进度条的方法用很多种&am…

figma和sketch应该选择哪个?

设计行业的工具层出不穷,在我看来sketch它在一定程度上被颠覆了PS,如今sketch已经成为许多设计团队的设计工具。 那么Figma相对于Sketch自身优势是什么?有什么不便?让我们从几个方面来了解。 两个软件都很适合创建UI和组件库。Sk…

图形查看器丨IrfanView功能简介

IrfanView 是一款快速、紧凑和创新的图形查看器,适用于Windows XP、Vista、7、8、10和11。 IrfanView寻求创建独特、新颖和有趣的功能,与其他一些图形查看器不同,它们的全部“创造力”是基于功能克隆、窃取想法和来自ACDSee和/或IrfanView的整…

mac vscode安装dart

1.安装Dart 1.安装下载Dart的工具 官网:https://brew.sh/ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"如果遇到 zsh: command not found: brew /bin/zsh -c "$(curl -fsSL https://gite…

Vue.js

文章目录1、vue核心基础1.1、安装1.2、Hello Vue1.3、模板语法1.4、数据绑定1.5、el与data的两种写法1.6、理解MVVM模型1.7、Object.defineProperty方法1.8、数据代理1.9、事件处理2.0、事件修饰符2.1、键盘事件2.2、计算属性2.3、监视属性2.4、绑定样式2.5、条件渲染2.6、列表…

《计算机网络》——第五章知识点

可靠 保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一样的。 确认重传不分家,TCP的发送方在规定的时间内没有收到确认就要重传已发送的报文段。 流量控制:让发送方慢点,要让接收方来得及接收。 TCP利用滑动窗口机制实现流量控制。 …

PCB电磁兼容设计1

PCB电磁兼容设计 20221229 关键元件 无源器件 模拟、逻辑器件 磁性元件 开关元件 连接器元件 多数情况,电路基本元件满足EMC程度将决定设备满足EMC的程度。 实际元件不是“理想”的,本身可能是干扰源或敏感设备。 选择合适的电子元件的主要准则包…

try/catch捕获不到的异常

try/catch捕获不到的异常捕获不到的异常这种情况finally块会执行吗?spring中的Transactional事务还会会滚吗?该如何捕获这种异常?Throwable可以看做是异常世界中的Object,在Java中所有异常都有一个共同的祖先:Throwabl…

Python 并行加速技巧分享

文章目录一、 使用joblib进行并行计算二、使用Parallel与delayed进行并行加速一、 使用joblib进行并行计算 作为一个被广泛使用的第三方Python库(譬如scikit-learn项框架中就大量使用joblib进行众多机器学习算法的并行加速),我们可以使用pip…

【十天成为红帽工程师】第八天 学习编写playbook

目录 一、playbook编写要素 二、playbook编写前的准备 三、实验要求操作 一、playbook编写要素 (一)playbook位置可这样写:/ansible/chap1/play1.yml 文件后缀为.yml,以yaml格式编写的文本文件 文档开头标记--- 文档结束标…

加解密与HTTPS(2)

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~ 近些天由于完全放开,我也从“杨过”变成了“杨康”,加之家中亲人故去,所以长久未能更新,特此致歉~ 上…

利用python实现热力学地图(保姆式讲解)

一、首先展示最终的效果 对二手房房源的分析,将分析后的结果用热力图显示: 显示效果如下所示&#xff1a; heatMap参考代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <!DOCTYPE html> <head><meta http-equiv&q…

一起看跨年烟花(流行背景音乐+雪花)---- 系列

2023年快要到来啦&#xff0c;很高兴这次我们又能一起度过~ 目录 一、前言 二、跨年烟花 三、效果展示 四、详细介绍 五、编码实现 index.html js 六、获取代码 需要源码&#xff0c;可以私信我(⊙o⊙)&#xff1f;关注我&#xff1f; 一、前言 时光荏苒&#xff0c;白…

数据结构-树

1、树的分类 &#xff08;1&#xff09;满二叉树 一个二叉树&#xff0c;如果每一个层的结点数都达到最大值&#xff0c;则这个二叉树就是满二叉树。也就是说&#xff0c;如果一个二叉树的层数为K&#xff0c;且结点总数是(2^k)-1&#xff0c;则它就是满二叉树。 &#xff08;2…

ThingsKit物联网平台 v1.0.1-Release版本发布

基于ThingsBoard二次开发的物联网平台推荐&#xff1a;ThingsKit物联网平台&#xff0c;开箱即用的物联网低代码平台&#xff0c;提供N1N的产品服务体系&#xff0c;帮助企业快速搭建稳定可靠的物联网系统平台&#xff0c;为企业节省大量时间及人力成本。www.thingskit.com Th…

centos7安装k3s和rancher

文章目录一. 安装k3s1.1 关闭防火墙1.2 修改hostname1.3 安装containerd1.4 containerd安装mysql81.5 安装k3s1.6 卸载k3s二. 安装rancher2.1 安装helm2.1.1 下载2.1.2 安装2.1.3 添加几个repo2.1.4 报错2.2 helm安装ingress-nginx2.3 添加rancher repo2.4 helm安装rancher(自己…

读论文---Clip微调---CLIP Itself is a Strong Fine-tuner

标题 摘要 Recent studies have shown that CLIP has achieved remarkable success in performing zero-shot inference while its fine-tuning performance is not satisfactory. In this paper, we identify that fine-tuning performance is significantly impacted by hyp…

复杂并发场景下的并发调度模型在转转的演进之路

文章目录一、问题背景二、复杂并发场景释义2.1 简单并发场景2.2 复杂并发场景三、分组并发调度模型演进3.1 简单异步并发调度3.2 分组并发调度四、自驱动并发调度模型演进4.1 一个优化耗时的小目标及其实现4.2 下一步的疑惑4.3 对问题的重新思考以及自驱动并发调度模型的诞生4.…