[VMM]现代 CPU 中用于加速多级页表查找的Page‐Table Entry原理

news2025/6/3 20:37:33

 现代 CPU 中用于加速多级页表查找的Page‐Table Entry原理

       摘要:以下从背景、结构、查找流程、一致性与性能影响等方面,详细介绍现代 CPU 中用于加速多级页表查找的 Page-Walk Cache(也称 Walker Cache 或 Page‐Table Entry Cache)。


1. 背景:为何需要 Page‐Walk Cache

  • 多级页表查找成本高
    以 x86-64 为例,4 级页表走完一次要依次访问 PML4、PDPT、PD、PT,每级都要一次内存读(若不命中 L1/L2/L3 缓存),最糟糕可能要 4 次 LLC Miss → DRAM 访问,延迟数百纳秒。

  • TLB 只能缓存最终映射
    TLB(Translation Lookaside Buffer)存的是虚拟页→物理页的最终映射,一旦 TLB miss,仍需重新走页表。Page-Walk Cache 介于 TLB 与内存之间,缓存中间级页表项,减少每次 page-walk 的内存访问数。


2. Page-Walk Cache 的总体结构

  1. 独立或共享
    • 有的 CPU 为每级页表各设一个小缓存(L0 for PML4E, L1 for PDPTE, L2 for PDE, L3 for PTE),也有合并成一个统一 Walker Cache。
  2. Entry 内容
    • Tag:〈CR3 或 ASID/PCID, 虚拟页号中对应级别的索引位〉
    • Data:对应级别的页表项完整 64 bit(含 PFN + control bits)。
  3. 容量与关联度
    • 极小,一般几十到几百条;全相联或 4-way/8-way set-assoc;足够缓冲热点上下文,但远小于 TLB。

3. 查找与填充流程

  1. TLB Miss → 触发 Walker
    硬件页表行走器(Page‐Walker)启动,将 CR3(携带 ASID/PCID)与 VA 分解成 4 个 9-bit 索引字段。

  2. 各级查 Page-Walk Cache
    对第一级(PML4)索引:

    • 在 PML4‐Cache 中查 Tag;
    • Hit → 直接拿到对应 PML4E;
    • Miss → 按常规:从内存(LLC)读取 PML4E 后填 Cache。
      再对第二级(PDPT)、第三级(PD)、第四级(PT)重复相同动作。
  3. 汇聚获得最终 PTE

    • 若中途某级 PDE.Mark-PS=1,且映射大页,则后续级别跳过;Walker Cache 同样可命中大页级别的 PDE entry。
    • 最终得出 PTE,更新 TLB,并返回物理页基址。

4. 一致性与失效

  • 软件修改页表
    操作系统写入或无效化页表后,需执行 invlpgCR3 重载,隐含触发 Walker Cache 对应条目失效。CPU 内部会:

    • 按 ASID/PCID 精确清除相关 Tag,或
    • 在全局 CR3 切换时一并失效。
  • Page-Walk Cache 可与 PCID 协同
    支持 Process-Context ID (PCID) 时,Tag 包含 PCID,切换地址空间无需全表失效,只失效对应新 CR3/PCID 下不可见的条目。


5. 嵌套/二级页表(EPT/NPT)支持

在虚拟化场景中,需同时走 二级页表(Guest)和 一级页表(Host/EPT)。现代 CPU 会:

  • 分阶段 Walker:先走 Guest 页表(用 Guest CR3),再走 Host EPT(用 EPTP),两套 Walker Cache 可复用;
  • 双重 Tag:Tag 中加上两级 CR3/EPTP 标识,保证隔离。

6. 性能效果

  • 减少内存访问次数
    典型热点工作集下,Walker Cache 命中率可达 80–90%,平均每次 Page‐Walk 只需 1–2 次 LLC 访问,而非最差的 4 次。
  • 降低延迟与功耗
    减少 DRAM 访问,Page-Walk 延迟可从数百纳秒降到几十纳秒;同时降低系统总功耗。
  • 提升 TLB miss 下的 IPC
    对于大量随机地址访问(如数据库、VMware),Page-Walk Cache 极大提升穿页性能。

7. 硬件设计考量

  • 容量 vs 并发
    • 容量太小命中率低,太大又占硅片面积。常见设计:每级 32–128 条;4 级共 128–256 条。
  • 关联度
    • 全相联提高命中,硬件实现复杂;4-way set-assoc 更折中。
  • 替换策略
    • LRU 或近似 LRU;与 TLB 类似。
  • 与缓存系统协同
    • Walker Cache miss 后读内存,优先走 L1/L2/L3 Cache,若最终 LLC Miss 再到 DRAM。

小结

       Page-Walk Cache 是现代 CPU 在 TLB miss 时,为缓存页表中间级别条目的专用小型高速缓存。它通过给每级页表查找加速,减少 Page-Walk 对内存的压力,显著降低 TLB miss 的延迟和功耗,对操作系统的页表结构透明、自动协同 PCID 与虚拟化二级页表,从而大幅提升系统的整体性能。


Page-Walk Cache的替换策略具体是如何实现的?

       摘要:在硬件上,Page-Walk Cache(PWC)通常是一个小容量、多路组相联的缓存;其替换策略需要在极度受限的时序和面积下,既能提供较高命中率,又要保证硬件实现简单。主流做法是用 伪 LRU(Pseudo-LRU),具体流程如下。


1. 组织形式

假设 PWC 是一个 S-way 组相联缓存,共有 N 组(set),每组 S 条 entry,每条 entry 存储一个页表项和若干 tag 比特。

– S 常见取值:2, 4, 8。
– N 也不大,可能几十到上百。

每组都要维护一组替换状态位,用来选择下一次 miss 时的 victim way。


2. 伪-LRU (Tree-based PLRU)

最经典也最常见的是 树形 PLRU

  1. 结构
    – 对 S=4:使用 3 个二叉树节点位 b0,b1,b2。
    • b0 根节点,控制左子树(ways 0–1) vs 右子树(ways 2–3)
    • b1 左子树内部,控制 way 0 vs way 1
    • b2 右子树内部,控制 way 2 vs way 3

  2. 选替换行(Victim Selection)
    – 从根开始:若 b0==0 → 走左子树,否则走右;
    – 在子树内部再按 b1/b2 决定更“冷”的那条路。

  3. 命中更新(MRU 更新)
    – 若访问到 way k:
    • 根节点 b0 = (k ∈ {0,1}) ? 1 : 0
    • 如果 k ∈ 左子树,则 b1 = (k==0?1:0);如果 ∈ 右子树,则 b2 = (k==2?1:0)。

  4. Miss 时:
    – 用上面算法找出“最老”way 作替换;
    – 用新的 tag + data 覆盖它;
    – 把对应的 b0/b1/b2 更新成 MRU,与命中时相同。

这种做法只需要 S–1 位状态、硬件逻辑简单,能近似逼近 LRU。


3. 其他简化/优化策略

  1. 2-way:
    – 只需 1 位 MRU bit,0/1 表示上次命中的是 way0 还是 way1,miss 时替换另一路。

  2. 8-way:
    – 可用 7 位树型 PLRU(3 层)
    – 或分成两级:先选出 “四路组” 再内部二分。

  3. 真 LRU(只对 very small S=2,4)
    – 用 2-bit 或 4-entry 阶梯式计数器记录使用顺序。
    – 面积和延迟稍大,一般只在关键路径足够宽松时采用。

  4. “Insertion Policy” 调整
    – MISS 时不总插入 MRU,可以插入到某中间位置 (e.g., “MRU-1”),以防热不热点数据迅速污染缓存。
    – “Bypass” 流水线/预取产生的低重用数据,不分配到 PWC,保留空间给真正的页表热点。


4. 一致性与失效

  • CR3/ASID 切换:PWC 的每条 entry tag 中带有地址空间 ID;CR3 切换会使得所有“前地址空间” entry 视为 miss,无需显式清空。
  • 软件写页表:OS 在修改页表后执行 invlpg,微架构会检测到对应 Virtual‐Page tag 并失效相关 PWC entry(通过比对 CR3+VPN)。

5. 性能权衡

  • 容量 vs 命中率:PWC 容量通常几百条即可将 Page-Walk 的内存访问次数从最坏 4 次下探至平均 1–2 次。
  • 替换开销:树型 PLRU 的状态更新仅几路 MUX+D-FF,远低于“真 LRU”的多位加法/比较器。
  • 侵入延迟:PWC 查找与更新与深度流水线并行,通常不影响 TLB-Miss 触发的页表行走器 (PTW) 的主时序。

小结

Page-Walk Cache 几乎通用地采用 树型 Pseudo-LRU 替换策略:

  • 每组用 S−1 个位记录最近访问方向;
  • 命中时更新这些位以标记 MRU 路径;
  • Miss 时用它们快速定位“最冷”那一路进行替换。

       这种策略硬件开销小、速度快,可在极短周期内完成替换决策,并且配合 ASID/PCID 等 tag 机制实现高效一致性管理。

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

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

相关文章

javaweb-maven以及http协议

1.maven坐标: 坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置; 2.坐标的组成: groupId:定义当前项目隶书的组织名称; artifactId:定义当前maven项目名称 version:定义项目版本 3.依…

华为OD机试真题—— 最少数量线段覆盖/多线段数据压缩(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《最少数量线段覆盖/多线段数…

C语言创意编程:用趣味实例玩转基础语法(2)

文章目录 0. 前言1. 📊 动态条形图1.1 程序效果展示1.2 完整代码解析1.3 关键技术详解1.3.1 Unicode字符应用1.3.2 函数封装思想1.3.3 输入处理1.3.4 跨平台考虑 2. 🔤 字母金字塔2.1 程序效果展示2.2 完整代码解析2.3 关键技术详解2.3.1 嵌套循环结构2.…

OpenCV CUDA模块图像处理------颜色空间处理之GPU 上对两张带有 Alpha 通道的图像进行合成操作函数alphaComp()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于在 GPU 上对两张带有 Alpha 通道的图像进行合成操作。支持多种常见的 Alpha 合成模式(Porter-Duff 合成规则)&…

OpenWebUI(1)源码学习构建

1. 前言 通过docker镜像拉取安装就不介绍了,官方的命令很多。本节主要撸一撸源码,所以,本地构建 2. 技术框架和启动环境 后端python,前端svelte 环境要求:python > 3.11 ,Node.js > 20.10 3. 源…

npm error Cannot find module ‘negotiator‘ 的处理

本想运行npm create vuelatest,但提示: npm error code MODULE_NOT_FOUND npm error Cannot find module negotiator npm error Require stack: npm error - C:\Users\Administrator\AppData\Roaming\nvm\v18.16.1\node_modules\npm\node_modules\tuf-j…

爬虫入门指南-某专利网站的专利数据查询并存储

免责声明 本教程仅用于教育目的,演示如何合法获取公开专利数据。在实际操作前,请务必: 1. 仔细阅读目标网站的robots.txt文件和服务条款 2. 控制请求频率,避免对服务器造成负担 3. 仅获取和使用公开数据 4. 不用于商业用途或…

SQL(Database Modifications)

目录 Insertion Specifying Attributes in INSERT Adding Default Values(缺省值) Inserting Many Tuples Creating a Table Using the SELECT INTO Statement Deletion Example: Deletion Semantics of Deletion Updates Example: Update Sev…

【android bluetooth 案例分析 04】【Carplay 详解 2】【Carplay 连接之手机主动连车机】

1. 背景 在【android bluetooth 案例分析 04】【Carplay 详解 1】【CarPlay 在车机侧的蓝牙通信原理与角色划分详解】中我们从整理上介绍了车机中 carplay 相关基础概念。 本节 将详细分析 iphone手机主动 连接 车机carplay 这一过程。 先回顾一下 上一节, carpla…

【仿muduo库实现并发服务器】实现时间轮定时器

实现时间轮定时器 1.时间轮定时器原理2.项目中实现目的3.实现功能3.1构造定时任务类3.2构造时间轮定时器每秒钟往后移动添加定时任务刷新定时任务取消定时任务 4.完整代码 1.时间轮定时器原理 时间轮定时器的原理类似于时钟,比如现在12点,定一个3点的闹…

day15 leetcode-hot100-28(链表7)

2. 两数相加 - 力扣(LeetCode) 1.模拟 思路 最核心的一点就是将两个链表模拟为等长,不足的假设为0; (1)设置一个新链表newl来代表相加结果。 (2)链表1与链表2相加,具…

​​知识图谱:重构认知的智能革命​

在数字经济的浪潮中,知识图谱正悄然掀起一场认知革命。它不仅是技术的迭代,更是人类从“数据依赖”迈向“知识驱动”的里程碑。当谷歌用知识图谱优化搜索引擎、银行用它穿透复杂的金融欺诈网络、医院用它辅助癌症诊疗时,这项技术已悄然渗透到…

【计算机网络】4网络层①

这篇笔记讲IPv4和IPv6。 为了解决“IP地址耗尽”问题,有三种措施: ①CIDR(延长IPv4使用寿命) ②NAT(延长IPv4使用寿命) ③IPv6(从根本上解决IP地址耗尽问题) IPv6 在考研中考查频率较低,但需掌握基础概念以防冷门考点,重点结合数据报格式和与 IPv4 的对比记忆。…

MATLAB中的table数据类型:高效数据管理的利器

MATLAB中的table数据类型:高效数据管理的利器 什么是table数据类型? MATLAB中的table是一种用于存储列向数据的数据类型,它将不同类型的数据组织在一个表格结构中,类似于电子表格或数据库表。自R2013b版本引入以来,t…

Dropout 在大语言模型中的应用:以 GPT 和 BERT 为例

引言 大型语言模型(LLMs)如 GPT(生成式预训练 Transformer)和 BERT(双向编码器表示 Transformer)通过其强大的语言理解和生成能力,彻底改变了自然语言处理(NLP)领域。然…

gitLab 切换中文模式

点击【头像】--选择settings 选择【language】,选择中文,点击【保存】即可。

133.在 Vue3 中使用 OpenLayers 实现画多边形、任意编辑、遮罩与剪切处理功能

🎬 效果演示截图(先睹为快) ✨ 功能概览: ✅ 鼠标画任意形状多边形; ✏️ 点击“修改边界”可拖动顶点; 🟥 点击“遮罩”后地图除多边形区域外变红; ✂️ 点击“剪切”后仅显示选…

4.8.4 利用Spark SQL实现分组排行榜

在本次实战中,我们的目标是利用Spark SQL实现分组排行榜,特别是计算每个学生分数最高的前3个成绩。任务的原始数据由一组学生成绩组成,每个学生可能有多个成绩记录。我们首先将这些数据读入Spark DataFrame,然后按学生姓名分组&am…

【五子棋在线对战】一.前置知识的了解

前置知识的了解 前言1.Websocketpp1.1 使用Websocketpp的原因1.2 Websocket常用接口1.3 Websocket搭建服务器流程 2.JsonCpp2.1 Json 数据对象类的表示2.2序列化和反序列化的接口2.3 演示代码 3.Mysql![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/93305f423b544fc1…

历年中国科学技术大学计算机保研上机真题

2025中国科学技术大学计算机保研上机真题 2024中国科学技术大学计算机保研上机真题 2023中国科学技术大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school?classification1 拆分数字 题目描述 给定一个数字,拆分成若干个数字之和&#xff…