首页/新闻资讯/正文详情

第 3 篇 · p2m 内存类型分类

发布时间:2026/9/24 17:46:44 来源:云帆数科 栏目:资讯中心
第 3 篇 · p2m 内存类型分类
p2m 表项不只记对应哪个 MFN还带一个类型标签p2m_type决定访问它时的行为。这一篇把 Xen 的 p2m 类型讲透完整枚举 各自用例以及它们之上两个容易混淆的分组/空间概念——类型组掩码把类型归类和XENMAPSPACE往 physmap 放页时的来源空间。1. p2m_type 是什么Xen 的 p2m 表项 MFN 类型 权限。类型p2m_type_t告诉 Xen当 guest 访问这个 GFN 时该怎么处理缺页/写入/权限。p2m[GFN] { mfn, p2m_type, access_rights }同一个 GFN类型不同行为天差地别有的直接读写真实内存有的一访问就 exit 给 qemu 模拟有的写入时标脏。2. 完整的 p2m 类型枚举x86x86 的p2m_type_t一共 16 种xen/arch/x86/include/asm/p2m.h值类型含义典型用例0p2m_ram_rw普通可读写 RAMguest 绝大多数常规内存1p2m_invalid此处什么都没映射physmap 空洞访问触发缺页2p2m_ram_logdirty临时只读写触发标脏热迁移追踪脏页3p2m_ram_ro只读 RAM写被静默丢弃只读区4p2m_mmio_dm读写都交给 device model模拟设备寄存器转 qemu5p2m_mmio_direct直通真实 MMIOPCI passthrough 的 BAR6p2m_populate_on_demand空内存占位PoD超额分配 / 延迟落地气球7p2m_grant_map_rw读写 grant 映射跨域共享netfront/blkfront8p2m_grant_map_ro只读 grant 映射同上只读9p2m_ram_paging_out正在换出的内存mem paging10p2m_ram_paged已换出mem paging11p2m_ram_paging_in正在换入mem paging12p2m_ram_shared可共享 / 已共享内存去重CoW / mem sharing13p2m_ram_broken坏页硬件故障页访问即崩 domain14p2m_map_foreign映射另一个域的 RAM 页跨域直接映射15p2m_ioreq_server交给 ioreq server 处理用户态设备模型介入的内存如显存脏页跟踪小注ARM 上 foreign 细分成p2m_map_foreign_rw/rox86 只有一个p2m_map_foreign读写权限用访问位区分。3. 类型分组type 之上的region概念Xen 内部几乎不逐个判断具体类型而是把类型按位掩码归成组配一组p2m_is_*谓词来判断。这就是每个 type 归属哪个类别的 region 概念asm/p2m.h组掩码大致包含谓词语义P2M_RAM_TYPESram_rw / ro / logdirty / paging* / shared / ioreq_serverp2m_is_ram映射到真实机器帧P2M_MMIO_TYPESmmio_dm / mmio_directp2m_is_mmio设备内存P2M_GRANT_TYPESgrant_map_rw / rop2m_is_grantgrant 跨域映射P2M_RO_TYPESlogdirty / ram_ro / grant_ro / sharedp2m_is_readonly只读写需特殊处理P2M_SPECIAL_TYPESgrant p2m_map_foreign mmio_directp2m_is_special需专门访问器建立/拆除P2M_PAGING_TYPESpaging_out / paged / paging_inp2m_is_paging换页中P2M_POD_TYPESpopulate_on_demandp2m_is_pod按需填充占位单类p2m_map_foreignp2m_is_foreign别的域的页作用建 EPT/NPT 表项、缺页处理、迁移、CoW、换页……都用这些组统一判断而不是写死某个类型。例如写一个p2m_is_readonly的页会统一走写处理logdirty 标脏、grant_ro 丢弃、shared 破 CoW。新增/调整一个类型时只要把它放进对的组全套逻辑自动适配。4. 另一个空间概念XENMAPSPACE来源空间type 描述的是这个 GFN 现在是什么。而当你要往 guest physmap 里放一个页时XENMEM_add_to_physmap[_batch]还要给一个space参数——告诉 Xen这个页从哪来。space 决定了 Xen 怎么取 MFN、以及最终装成哪种 p2m 类型xen/include/public/memory.hXENMAPSPACE_*值来源落成的 p2m 类型shared_info0Xen 的 shared_info 页p2m_ram_rwgrant_table1grant 表页p2m_ram_rwgmfn2本域已有的一个 GFN重定位类型随源gmfn_range3本域一段 GFN同上批量gmfn_foreign4另一个域的 GFNp2m_map_foreignRAM/p2m_mmio_direct设备页dev_mmio5设备 MMIO 区ARM直通 MMIO还有一个值为 6 的扩展 space留到下一篇结合具体机制讲。要点space 是入口/来源type 是结果/属性。同一段 GFN 经不同 space 放进来会得到不同的 type——例如经gmfn_foreign放进来的 RAM 页落成的就是p2m_map_foreign。所以回答每个 type 下有没有 space 概念它俩是入口→结果的对应关系而非从属关系一张对照表就能把 space 和 type 串起来。type / region / space / class 一图看清把前面几节的四个概念放在一起它们的关系是决定落成哪种按位掩码归类表级与 type/space 正交spaceXENMAPSPACE放页时的『来源』gmfn / gmfn_foreign / grant_table / dev_mmio ...typep2m_type单个表项的『属性』16 种: ram_rw / mmio_* / grant_* / map_foreign ...region类型组P2M_*_TYPES p2m_is_*is_ram / is_mmio / is_grant / is_special ...classp2m_class整张表的『维度』host / nested / altp2mspace → type入口决定结果——同一 GFN 换个 space落成的 type 不同。type → region每个 type 按掩码归入若干组Xen 用组p2m_is_*统一判断而非逐个类型。class是这是哪张 p2m 表的维度和 type / space正交日常用p2m_host。5. 跨域共享的两类 typegrant 与 foreign5.1 为什么单独讲这两类前面的 RAM/MMIO 类型都是本域自己的内存。而有两类 type 专门表示这一页其实属于另一个域——它们让同一块物理页同时出现在两个域里是跨域零拷贝共享的地基也是理解后续机制的关键值得单独讲透。先厘清独占 vs 跨域、所有权 vs 映射这是理解后续所有机制的基石先分清两组概念独占一个 host 物理页MFN只出现在一个domain 的 physmap 里只有它能访问——普通的p2m_ram_rw就是这样每个 guest 的 RAM 都是分配给它私有的 MFN。跨域共享同一个 MFN 同时出现在多个 domain 的 physmap 里于是这块真实物理内存能被多个域同时看到、访问。独占: MFN_X ◄── domA 的某个 GFN 只有一条 跨域: MFN_X ◄── domA 的 GFN ◄── domB 的 GFN 同一个 MFN,多条再区分所有权和映射——这点最容易混所有权owner每个物理页永远只有一个 owner domainpage_get_owner共享不改变所有权。映射mapping跨域做的是——在另一个域的 physmap 里也加一条指向这个 MFN 的项。所以准确的说法是跨域 一个页仍归某一个域所有但被额外映射进了别的域的地址空间。为防止 owner 在别人还用着时回收它跨域映射会对该页get_page加一次引用计数撤映射remove_from_physmap时再put_page释放。下面两类 type就是这种额外映射的两种建立方式区别只在谁是 owner、谁主动、往哪个方向映射。5.2 为什么这是虚拟化能用的性能基石跨域共享看着只是个内存技巧实则决定了虚拟化 I/O 是能跑还是慢到不能用。先把两层分开CPU / 内存虚拟化EPT/NPT 两级翻译——靠硬件本身没有拷贝问题和共享无关解决的是能跑。I/O、设备、GPU 数据通路——这层才是拷贝 vs 共享的战场决定跑得快不快。设想没有共享的 PV 网络guest 发一个包要先拷到 dom0 的 backendbackend 再交给网卡收包反向再来一遍。每个包至少两次内存拷贝 跨域切换10/40Gbps 下光拷贝就吃满 CPU 和内存带宽。grant table 的设计初衷正是干掉这次拷贝——backend 直接读写 guest 那块内存包零拷贝地过去。这也是 Xen PV 驱动能接近裸机的关键。GPU 更极端几十 GB 的显存 blob任何一次拷贝都不可接受所以必须让 host GPU 栈与 guest 共享同一份物理页——没有跨域共享GPU 虚拟化根本无从谈起。但共享有代价它削弱隔离。这正是虚拟化设计的核心张力——拷贝共享性能差好零拷贝隔离强各自独立弱同一页两个域都能碰所以下面 grant/foreign 才要那套授权 引用计数 notifier XSM 校验本质是在尽量不破坏隔离的前提下换取零拷贝的性能。跨域共享机制的全部复杂度都是在这架天平上找平衡。5.3 grant 映射p2m_grant_map_rw/ro谁发起源域内存拥有者主动授权——它在自己的 grant table 里登记一条 grant entry“允许 domX 访问我的第 N 页”拿到一个 grant ref 交给对方。谁映射被授权方拿着 grant ref 发 hypercall把那一页映射进自己的physmap落成p2m_grant_map_rw/ro。方向拥有者 → 授权给使用者。典型是 guest 把自己的收发缓冲授权给后端netfront 授权给 dom0 的 netback。一个细节Xen 认为 grant 项随时可能被源域撤回所以p2m_is_valid特意不把 grant 算作 valid——用它的人必须容忍随时失效。5.4 foreign 映射p2m_map_foreign谁发起有特权的目标域通常 dom0主动把另一个域的某个 GFN塞进自己的physmap落成p2m_map_foreign内部走set_foreign_p2m_entry。不需要源域授权靠发起方的特权配xsm_map_gmfn_foreign做 XSM 校验源域甚至不感知。方向使用者主动去借拥有者的页。典型是 dom0 的工具 / 设备模型要读写某个 guest 的内存。引用计数映射时对源页get_page加引用XENMEM_remove_from_physmap时释放——保证映射期间源页不被回收/搬走。5.5 两者对比grantforeign谁主动源域授权目标域特权直接映射需授权需要grant ref不需要特权 XSM典型方向owner → useruser 主动借 ownerp2m 类型p2m_grant_map_rw/rop2m_map_foreign建立入口grant map hypercallXENMAPSPACE_gmfn_foreign/set_foreign_p2m_entry生命周期源域可随时撤显式 remove 前有效两者本质相同——让同一块物理页同时落在两个域的地址空间里实现跨域零拷贝区别只在谁发起、要不要授权、怎么维护一致性。后面要讲的机制正是选了foreign 这一支来扩展原因也正是上表透露的由特权方主动、不依赖源域配合、适合成片大范围映射。至于它在 foreign 之上具体加了什么留到下一篇。6. 再往上一层p2m 的类host / nested / altp2mtype项属性、space入口都是单张表层面的。整张 p2m 表还分类p2m_class_tp2m_host正常的 guest p2m落到 EPT/NPTp2m_nested嵌套虚拟化里L1 guest 给它的 L2 guest 用的 p2mp2m_alternatealtp2m同一个 guest 的多份 p2m 视图可运行时切换安全监控、写保护等用。这是表级的 region 概念和 type项级、space入口互相正交。日常内存虚拟化主要用p2m_host。7. 本篇小结 下一步p2m 项 MFN 类型 权限类型决定访问行为。x86 共16 种p2m 类型覆盖 RAM / MMIO / grant / foreign / paging / PoD / shared / broken / ioreq_server。跨域共享靠两类 typep2m_grant_map_*源域授权与p2m_map_foreign特权域主动借——它们让同一物理页出现在两个域是后续机制的地基。两个易混的空间/分组概念①类型组掩码P2M_*_TYPESp2m_is_*是对项属性的分类②XENMAPSPACE是往 physmap 放页时的来源空间决定落成哪种类型——space 是入口type 是结果。再往上还有表级的p2m_classhost / nested / altp2m。下一篇04 · 跨域协作全景一张 p2m 表的五种填法 —— 有了这张类型 space地图下一篇把p2m_map_foreign这条主线铺成完整全景p2m 被填充的5 种情形1 种单域基准 4 种跨域协作讲清每种的方向、授权模型、以及用什么标识源页GFN 还是 hva。之后再逐个深入具体机制——hmem 从第 5 篇起。关联阅读附录AXen 虚拟化术语表

相关推荐

计算机毕业设计之基于MySQL的校园二手商城的设计及实现
计算机毕业设计之基于MySQL的校园二手商城的设计及实现

随着新世纪无纸化办公方式的普及,自动化信息处理和基于网络的信息交互方式已被广泛应用。现在很多行业基本上都是交由计算机进行管理和测试,网络与计算机已成为整个线上管理体系中的重要组成部分。虽然信息技术广泛应用和数据存取更加方便,但… · 2026/9/24 17:46:44

检测链接的前端代码
检测链接的前端代码

##任务1:在WEB前端中,提取所有图片URL和图片绑定的响应跳转链接。##任务2:在WEB前端中,提取所有外站链接的地址。##任务3:在WEB前端中,提取所有带文字描述的内部链接及其对应的文字标题。##任务4&#xff1… · 2026/9/24 17:46:44

第10章:常见问题与避坑指南
第10章:常见问题与避坑指南

第10章:常见问题与避坑指南 本章目标 汇总 Git / TortoiseGit 使用中最高频的 30 个问题:症状 → 原因 → 解决。建议遇到问题时用 CtrlF 搜索报错关键字。 1. 中文乱码问题 1.1 git log / git status 中文显示为八进制(\344\275\240&#x… · 2026/9/24 17:46:44

从零手写UserCF与ItemCF:协同过滤推荐算法实战与避坑指南
从零手写UserCF与ItemCF:协同过滤推荐算法实战与避坑指南

简介:这份资源用Python实现了基于物品与基于用户两种协同过滤推荐算法,面向推荐系统入门者、进阶学习者以及需要完成课程设计、大作业或毕设项目的同学,帮助理解协同过滤的核心思路与代码落地方式。压缩包共4个文件,包含2个py脚本… · 2026/9/24 18:16:21

远程3D渲染方案解读:从云GPU到自建算力池
远程3D渲染方案解读:从云GPU到自建算力池

2026年,我把工作室里那台高配渲染工作站拆了。显卡、主板、水冷,整整齐齐装进一个4U机箱,送到机房租来的标准机柜里上架。工位上只留下笔记本、一台校准过的显示器和数位板。日常的建模、材质调试、灯光预览全部通过远程3D渲染方案完成&#… · 2026/9/24 18:16:21

FineReport迁移实战:2026年国产化与JDK17兼容性应对指南
FineReport迁移实战:2026年国产化与JDK17兼容性应对指南

1. 项目概述:为什么2026年必须重新审视FineReport的替代路径FineReport用得越久,越容易陷入一种“稳定假象”——报表跑得稳、用户没投诉、运维没报警,但后台日志里悄悄堆积的JVM内存溢出警告、每年续费时财务部门皱起的眉头、新需求提单后开… · 2026/9/24 18:16:21

远程3D渲染全攻略:GPU算力云、远程桌面与硬件选型实战指南
远程3D渲染全攻略:GPU算力云、远程桌面与硬件选型实战指南

远程3D渲染这个词,这几年被提得越来越频繁。2026年再看这件事,我觉得核心就一句话:把算力留在机房,人回家。过去做三维设计的人,基本被一台高性能工作站绑在工位上,机器在哪,人就得在哪。现在不… · 2026/9/24 18:16:21

2026远程渲染方案全解析:从GPU云服务器到云渲染农场的选型指南
2026远程渲染方案全解析:从GPU云服务器到云渲染农场的选型指南

前两年我一直觉得“远程渲染”是给影视后期大厂准备的,直到自己经历过一次半夜机房跑着灯光测试、人在高铁上改了两版贴图之后就真香了。2026年这个时间节点,远程3D渲染已经不是“能不能用”的问题,而是“怎么选最划算”的问题。所谓“算力留… · 2026/9/24 18:16:20

128QAM与64APSK的PAPR对比:从CCDF到功放回退的量化分析
128QAM与64APSK的PAPR对比:从CCDF到功放回退的量化分析

简介:这份资源面向无线通信、信号处理方向的学习者与研究人员,聚焦128QAM、64APSK及多种QAM/APSK调制方式的峰均功率比(PAPR)对比分析,帮助理解高阶调制在频谱效率与功率效率之间的权衡。压缩包共19个文件,… · 2026/9/24 18:16:07

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码