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

第 1 篇 · Xen 内存虚拟化整体框架

发布时间:2026/9/24 17:46:19 来源:云帆数科 栏目:资讯中心
第 1 篇 · Xen 内存虚拟化整体框架
内存虚拟化是虚拟化技术的核心一环如何让 guest 与 host 高效互访、尽量减少数据拷贝直接决定了整体性能。本系列就以「guest ↔ host 内存互访」为主线层层拆解它背后的机制。搞清楚guest 看到的内存和真实内存之间隔了几层、由谁翻译。理解了这一篇后面所有具体的内存类型都只是这张地图上的一块拼图。1. 三层地址整个框架的骨架Xen 内存虚拟化的一切都围绕这三个地址概念缩写全称含义谁管理VAVirtual Addressguest 进程的虚拟地址guest 内核页表GFN / GPFNGuest Frame Numberguest 眼中的物理帧号guest 以为自己在管MFNMachine Frame Number真实机器物理帧号Xen hypervisor 独占管理关键认知guest 看到的物理内存是假的。guest 的 GFN 必须再经过一层翻译才能落到真实的 MFN。这层翻译表就是p2mphysical-to-machine。guest 进程 VA ──(guest 页表)──► GFN ──(Xen 的 p2m 表)──► MFN(真实内存)第一级VA → GFN是 guest自己内核用它自己的页表CR3做的和普通 Linux 完全一样Xen 不掺和。第二级GFN → MFN是虚拟化专属的一层由 Xen 通过 p2m 表控制。设备直通、内存气球等所有花样都发生在这一级。2. p2mGFN→MFN 翻译表p2mphysical-to-machine是每个 guest 一份的映射表记录guest 的每个 GFN 对应哪个真实 MFN以及这段内存是什么类型、什么权限。它有两个物理落地方式取决于虚拟化模式1. HVM / PVH硬件辅助用 CPU 硬件的二级页表Second Level Address Translation SLATIntel 叫EPTExtended Page TableAMD 叫NPT / RVINested Page Table此时p2m 表的物理载体就是 EPT/NPT。CPU 硬件在一次内存访问中自动走两级guest VA ──(guest CR3 页表, 第一级, 硬件走)──► GFN ──(EPT/NPT, 第二级, 硬件走)──► MFNguest 完全无感知性能接近原生。Xen 只负责在必要时修改 EPT 表项建映射、撤映射、改权限。2. PV半虚拟化 —— 了解即可没有二级页表。guest 直接用真实 MFN 建自己的页表但每次改页表都必须通过 hypercall 请求 Xen 审批。这样 guest 本身就知道真实 MFN。现代基本被 PVH 取代本场景用的是 PVH/HVM不走这条。3. 两种模式对比维度PV半虚拟化HVM / PVH硬件辅助GFN→MFN 翻译无二级页表guest 页表直接用 MFNEPT/NPT 二级页表硬件翻译guest 是否感知感知需改造内核基本无感知改页表每次 hypercall 审批硬件自动缺页时才 exit缺页处理入口hypercall / page faultEPT violation → VM exit本场景不用用 PVHdom0 HVM/PVHguest对本系列最重要的一句HVM/PVH 下guest 访问一个 p2m 里没有 MFN 的 GFN会触发 EPT violationCPU 陷入VM exit到 Xen。这正是第 2 篇的主题。4. 一个具体例子guest 访问 0x7f1234567890 如何落到 host PFN假设 guest 里一个进程访问虚拟地址0x7f1234567890HVM/PVH 模式。一次访存要连着走两级翻译全部由 CPU 硬件自动完成步骤谁来翻译输入输出① VA → GFNguest 内核页表CR3VA0x7f1234567890GFN0x1A2B3页内偏移0x890② GFN → MFNEPT/NPTXen 维护GFN0x1A2B3MFN0x3F0C4host PFN拼起来看guest 进程 VA 0x7f1234567890 │ ① guest 页表CR3 — guest 自己翻译Xen 不掺和 ▼ guest 物理 GFN 0x1A2B3 : 偏移 0x890 │ ② EPT/NPTXen 维护 — 硬件二级翻译 ▼ 机器物理 MFN 0x3F0C4 : 偏移 0x890 host PFN 0x3F0C4最终落到的真实机器物理地址 MFN(0x3F0C4) 12 | 偏移(0x890)0x3F0C4890对应 host 的PFN0x3F0C4。几个要点页内偏移0x890全程不变两级翻译只换页号VA 页→GFN→MFN偏移直接携带。两级在一次访存里连续完成CPU 做的是二维页表游走2D page walkguest 完全无感知。第 ① 步的 GFN 是假物理guest 以为0x1A2B3就是物理帧实际它只是个编号还得靠第 ② 步才能变成真实的 MFN。如果第 ② 步的 EPT 项是空的GFN 还没对应 MFN就触发EPT violation → VM exit 到 Xen由 Xen 决定填什么——这正是第 2 篇的入口。5. 全景图谁在操作 p2mDom0 (特权域)Xen Hypervisor (Ring -1)Guest (domU, PVH/HVM)guest 页表EPT/NPT 二级翻译维护VM exit普通 RAM 自己填特殊内存转交进程 VAGFN 猜的物理地址p2m 表 / EPTXen 管理MFN 真实机器内存p2m 管理建/撤/改 EPT 表项QEMU Device ModelGFN 无 MFN EPT violation要点Xen是唯一能改 p2m/EPT 的角色它在 Ring -1独占真实内存。dom0里的 device modelQEMU只能通过hypercall请求 Xen 改 p2m自己不能直接动。普通 RAM 由 Xen 自己填而某些特殊内存Xen 会把缺页转交给 dom0QEMU去决定填什么具体有哪些类型见第 3 篇。6. 本篇小结 下一步记住三层地址VA → GFN → MFN以及中间那层翻译表p2m。HVM/PVH 下 p2m EPT/NPT硬件二级页表页内偏移全程不变。guest 访问无 MFN 的 GFN →EPT violation → VM exit 到 Xen这是所有按需映射/设备模拟的共同入口。Xen 独占改 p2mdom0 只能发 hypercall 请求。下一篇02 · EPT violation:二级缺页路径 —— 顺着这条二级缺页走到底看它怎么从 Xen 转交到 qemu、再把真实页填进 p2m。关联阅读附录A xen 虚拟化术语表

相关推荐

CodeBlock 安装之后,断点调试不生效
CodeBlock 安装之后,断点调试不生效

CodeBlock 安装之后,断点调试不生效 本文标题:CodeBlock 安装之后,断点调试不生效更新时间:2026年9月23日14:47:45 内容介绍 问题原因 安装目录使用自定义目录,导致编译器和调试找不到(这个是看下方状态… · 2026/9/24 17:46:19

【Dify】图文批量处理智能理解应用
【Dify】图文批量处理智能理解应用

大模型正在重塑图文资料的处理方式,自动化、批量化成为主流需求。面对多文档、多图片的高效理解和整理场景,智能工作流为资料处理带来全新可能。 本文介绍一个基于Dify平台,结合GPT-4o-mini模型实现的图文理解批量处理工作流。案例涵盖多文件上传、内容抽取、语义理解和智能… · 2026/9/24 17:46:13

手撕Transformer⑥【终章】:100%原版完整模型整合(输出层+全链路训练+自回归推理+系列终极复盘)
手撕Transformer⑥【终章】:100%原版完整模型整合(输出层+全链路训练+自回归推理+系列终极复盘)

手撕Transformer⑥【终章】:100%原版完整模型整合(输出层全链路训练自回归推理系列终极复盘)摘要:这是本系列最终完结篇。前五章我们逐一拆解了Transformer所有原子模块:词嵌入、位置编码、多头注意力、残差归一、FFN、… · 2026/9/24 17:46:07

放弃Figma转开源设计工具?Penpot与OpenPencil迁移实操与避坑指南
放弃Figma转开源设计工具?Penpot与OpenPencil迁移实操与避坑指南

1. 设计工具选型的十字路口最近半年,我所在的几个设计群、前端群、产品群里,关于"要不要从 Figma 迁走"的讨论明显变多了。起因很杂:有人抱怨订阅费又涨了,有人担心设计资产放在别人的云上不踏实,有人纯粹是… · 2026/9/24 18:47:11

开源设计工具替代Figma实战:Penpot与OpenPencil迁移成本与能力对比
开源设计工具替代Figma实战:Penpot与OpenPencil迁移成本与能力对比

1. 从一次团队工具链迁移说起去年年底,我所在的团队做了一次设计工具链的评估。起因很直接:设计团队从8人扩到20人,编辑席位费用一下子涨到了一笔需要走专项审批的预算。财务那边问了一句“有没有替代方案”,于是我把市面上主流的… · 2026/9/24 18:47:11

放弃Figma转向开源设计工具:Penpot迁移成本与BYOK实践
放弃Figma转向开源设计工具:Penpot迁移成本与BYOK实践

1. 从一次团队续费争议说起:为什么“放弃Figma”这个话题突然变得真实去年年底,我们团队在续费评审会上第一次认真讨论了“要不要换掉 Figma”。原因很朴素:设计席位又涨了,而团队里真正每天打开 Figma 的人,其实只有三… · 2026/9/24 18:47:11

Java封装MooseFS CLI构建企业级文件系统客户端
Java封装MooseFS CLI构建企业级文件系统客户端

简介:本资源是一套基于Java与MooseFS架构的分布式文件系统完整实现方案,面向Java后端开发者、分布式系统学习者及课程设计/毕业设计实践者,聚焦于分布式存储核心机制的理解与工程落地。资源包含200个文件,涵盖53个可读性高的Java源… · 2026/9/24 18:47:11

基于PyTorch的持续学习图像分类:EWC算法与大作业实战
基于PyTorch的持续学习图像分类:EWC算法与大作业实战

简介:一套面向计算机相关专业学生及初学者的持续学习图像分类Python项目,可直接用于机器学习课程大作业、毕业设计或初期项目立项。项目基于CIFAR100数据集,通过--dataset、--start、--increment、--rehearsal等命令行参数灵活配置初始任务类… · 2026/9/24 18:47:11

Xcode体积太占空间?KXApp轻量方案与完整工具链如何选
Xcode体积太占空间?KXApp轻量方案与完整工具链如何选

打开“关于本机”看一眼存储空间,再看看那个躺在应用程序文件夹里的Xcode,很多人第一反应都是同一个问题:它怎么又变大了?这不是错觉。从早期几个GB的安装包,到如今本体加缓存、模拟器、设备支持文件随随便便吃下几十个… · 2026/9/24 18:47:04

基于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

了解更多?预约专属演示

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

企业微信二维码