新闻详情

新闻详情

首页 / 资讯中心 / 详情

pgtable pmdp_invalidate_ad

发布时间:2026/9/30 2:46:08来源:尧图网络
pgtable pmdp_invalidate_ad
pmdp_invalidate_ad是 Linux 内核中用于在原子上下文中使一个 PMD 条目失效的函数专门服务于透明大页THP的自动NUMA平衡AutoNUMA场景。核心作用使 PMD 失效而不刷新 TLB这个函数的核心操作是pmdp_establish(vma, address, pmdp, pmd_mkinvalid(*pmdp))它将 PMD 条目标记为“无效”但不执行 TLB 刷新。关键在于注释中的解释“一旦建立了无效的 PTE其访问位和脏位就无法再被更新。”这意味着CPU 在 TLB 中可能还缓存着旧的 PMD 条目但由于新的 PMD 是无效的任何后续的访问都会触发缺页异常而不是通过旧的 TLB 条目静默地更新访问/脏位。因此不需要立即刷新 TLB可以推迟到更合适的时机。参数与调用场景pmd_t pmdp_invalidate_ad(struct vm_area_struct *vma, unsigned long address, pmd_t *pmdp)vma对应的虚拟内存区域。address要失效的虚拟地址PMD 对齐。pmdp指向 PMD 条目的指针。这个函数主要在do_huge_pmd_numa_page()中被调用。当 AutoNUMA 决定将一个 THP 页面从当前 NUMA 节点迁移到另一个节点时需要先使旧的 PMD 映射失效防止在迁移过程中有其他 CPU 通过旧映射访问该页面。与pmdp_invalidate的区别内核中还有一个更通用的pmdp_invalidate()函数。两者的核心区别在于是否刷新 TLB函数TLB 刷新适用场景pmdp_invalidate_ad()不刷新AutoNUMA 迁移依赖“无效 PTE 阻止脏位更新”的硬件特性pmdp_invalidate()刷新通用场景需要立即确保 TLB 一致性_ad后缀正是“AutoNUMA”的缩写表明这个函数是为 AutoNUMA 的特定需求而设计的。设计意图这个函数体现了内核对硬件行为的精细利用。在 AutoNUMA 迁移中如果每次使 PMD 失效都立即刷新 TLB开销会很大。而利用“无效 PTE 无法更新脏位”这一特性内核可以安全地推迟 TLB 刷新将多个失效操作合并处理从而优化性能。调用关系pmdp_invalidate_ad的调用关系很集中它主要是为change_huge_pmd()这个函数服务的。唯一调用者pmdp_invalidate_ad()在代码中只被change_huge_pmd()调用。它的引入本身就是为了替换change_huge_pmd()中原有的pmdp_invalidate()调用以消除不必要的 TLB 刷新。背景与设计意图这个替换源于一个性能优化在 THP透明大页上调用change_protection_range()时x86 架构会触发两次 TLB 刷新——一次在change_huge_pmd()内部立即刷新另一次在change_protection_range()结束时批量刷新。第一次刷新原本是为了防止硬件在 PMD 被修改期间更新脏位/访问位。但 x86 硬件在设置脏位时会原子性地检查 PTE 是否仍然存在因此这个刷新是不必要的Intel Knights Landing 除外。pmdp_invalidate_ad()正是利用这一硬件特性只使 PMD 失效而不刷新 TLB从而让后续的批量刷新可以合并操作。间接依赖pmdp_invalidate_ad()内部调用了pmdp_establish()。在 x86 上pmdp_establish()使用cmpxchg64原子地替换 PMD 条目并返回旧值。如果检测到 CPU 存在X86_BUG_PTE_LEAK即 Knights Landing 的硬件缺陷则会回退到执行一次 TLB 刷新。pmdp_invalidate_ad是change_huge_pmd的专属优化通过利用 x86 硬件的原子性保证省去了 THP 保护变更路径上一次多余的 TLB 刷新。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

运营商取消手机“0元购机”,是良心发现吗? 2026/9/30 4:44:37

运营商取消手机“0元购机”,是良心发现吗?

作者:雍忠玮 明天(2026年9月30日),中国人民银行等八部门在4月份联合发布的《金融产品网络营销管理办法》(简称“办法”)正式实施。 就在前几天,9月24日,三大运营商开展了十多年的“0…

阅读更多 →
Windows文件时间戳修改原理与安全实践 2026/9/30 4:44:30

Windows文件时间戳修改原理与安全实践

1. 为什么你根本不需要“修改日期”——但又不得不懂它Win10和Win11里改文件的“上次修改日期”“创建日期”“上次访问日期”,这事儿听起来像极了修图软件里给照片加个“2023年夏”的水印——看似简单,实则一碰就崩。我见过太多人:有人想伪造…

阅读更多 →
保险核心系统国产化云迁移实战:鲲鹏+华为云Stack落地四步法 2026/9/30 4:44:30

保险核心系统国产化云迁移实战:鲲鹏+华为云Stack落地四步法

简介:本资源是一份深度剖析中科软科技保险科技转型路径的行业案例报告,面向金融科技从业者、保险IT系统架构师、云计算解决方案工程师及高校相关专业研究者,聚焦传统保险信息化企业向云原生与AI驱动模式升级的核心挑战与实践。报告系统梳理了…

阅读更多 →
AWS 核心服务实战:从 Dynamo、S3 到 EC2、SQS 的架构与避坑指南 2026/9/30 4:44:30

AWS 核心服务实战:从 Dynamo、S3 到 EC2、SQS 的架构与避坑指南

简介:这份PPT课件面向云计算初学者、高校学生及需要系统了解AWS服务体系的IT从业者,以《云计算》第三版配套教学章节为蓝本,梳理Amazon云计算的核心服务与典型应用场景,帮助读者建立从存储、计算到数据库、消息队列的完整知识框架…

阅读更多 →
Linux云服务器选型:Ubuntu/Rocky/Debian的稳定性与运维成本对比 2026/9/30 4:44:30

Linux云服务器选型:Ubuntu/Rocky/Debian的稳定性与运维成本对比

从一次踩坑说起:为什么系统选型值得你花半小时认真想昨天有朋友找我,说他的业务跑在云服务器上突然频繁报错,查到最后是内核模块和新驱动冲突,系统已经不维护了,只能重装。他叹气说,当初创建服务器时&#…

阅读更多 →
Go map 底层原理与并发安全:从哈希表到高频避坑指南 2026/9/30 4:44:30

Go map 底层原理与并发安全:从哈希表到高频避坑指南

写Go这几年,map是我用得最多的数据结构,但也是让我翻车最多的一个。平时m[k]v写得顺手,真到线上遇到fatal error: concurrent map writes那次,代码直接崩掉,日志里只有一行红字,排查半天才反应过来是并发写…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉