page_alloc zone_statistics

发布时间:2026/10/12 4:50:01

page_alloc zone_statistics zone_statistics()是页面分配路径上用于更新 NUMA 命中/未命中统计的辅助函数。它追踪分配请求的“首选 zone”与实际分配到的 zone 之间的关系为/proc/vmstat提供numa_hit、numa_miss、numa_foreign等计数。核心作用它的职责是当一次分配发生在zzone而调用者“期望”的是preferred_zone时根据两者是否一致来更新统计一致z preferred_zoneNUMA_HIT递增表示分配成功落在期望节点。不一致z ! preferred_zonez上NUMA_MISS递增preferred_zone上NUMA_FOREIGN递增。这三个计数器共同反映了 NUMA 本地性策略的效果。典型实现static inline void zone_statistics(struct zone *preferred_zone, struct zone *z, long nr_account) { #ifdef CONFIG_NUMA enum numa_stat_item local_stat NUMA_LOCAL; /* 如果启用了 NUMA 统计 */ if (!static_branch_unlikely(vm_numa_stat_key)) return; if (z preferred_zone) local_stat NUMA_HIT; else local_stat NUMA_MISS; __count_numa_event(z, local_stat); if (local_stat NUMA_MISS) __count_numa_event(preferred_zone, NUMA_FOREIGN); #endif }具体实现随版本早期版本还区分NUMA_LOCAL/NUMA_OTHER。关键点解析1.static_branch_unlikely(vm_numa_stat_key)静态键控制 NUMA 统计是否启用。未启用时函数直接返回零开销——这是热路径上的关键优化。只有启用统计默认开启可通过 sysfs 关闭时才走真实逻辑。2.preferred_zone与zpreferred_zone调用者期望的 zone通常由numa_node_id()决定本地节点。z实际分配到的 zone。分配可能因本地内存不足而“降级”到其他节点的 zone此时产生 miss/foreign。3. 三种计数事件含义NUMA_HIT分配落在首选 zone本地性好NUMA_MISS分配落在非首选 zone本节点“错过”NUMA_FOREIGN本节点被其他节点“借用”了内存4.nr_account传入的页数1 order供按页数加权统计的版本使用。在分配路径中的位置它被buffered_rmqueue()调用位于页面从 PCP 或伙伴系统取出之后buffered_rmqueue(preferred_zone, zone, order, gfp_flags, ...) ├── 从 PCP 或伙伴系统取页 └── zone_statistics(preferred_zone, zone, 1 order) // ← 这里历史演进zone_statistics()在 2025 年经历了一次重构。旧实现使用enum numa_stat_item local_stat并区分NUMA_LOCAL/NUMA_OTHER逻辑较复杂。新实现在启用统计时直接用NUMA_HIT初始化并简化了分支/* old */ enum numa_stat_item local_stat NUMA_LOCAL; if (z preferred_zone) local_stat NUMA_HIT; else if (z-node ! preferred_zone-node) local_stat NUMA_OTHER; else goto out; /* 同一节点无需统计 */ __count_numa_event(z, local_stat); /* new */ if (z preferred_zone) __count_numa_event(z, NUMA_HIT); else { __count_numa_event(z, NUMA_MISS); __count_numa_event(preferred_zone, NUMA_FOREIGN); }新逻辑更直观且移除了对NUMA_LOCAL/NUMA_OTHER的依赖这两个计数器在早期版本中用于区分“同节点不同 zone”与“不同节点”的情况。总结zone_statistics()是 NUMA 分配路径上的统计记录器它通过静态键vm_numa_stat_key实现零开销开关在启用时根据“实际分配 zone”与“首选 zone”是否一致分别递增NUMA_HIT或NUMA_MISSNUMA_FOREIGN为/proc/vmstat提供 NUMA 本地性数据。它由buffered_rmqueue()在每次成功分配后调用。
延伸阅读

更多相关文章

2026/10/12 4:50:01

Python爬虫实战:WebSocket协议解析与B站直播弹幕实时采集

看直播的时候,弹幕总是一行一行飘过去,拦都拦不住。要是想把直播间里的弹幕攒下来做分析,比如看看主播在哪个节点弹幕最密集、观众都爱刷什么高频词,手头就需要一个稳定采集的 Python 爬虫。最近我就折腾了一个小项目,…

2026/10/12 4:50:01

page_alloc nr_pcp_free

nr_pcp_free() 是 PCP(Per-CPU Pages)缓存批量释放策略的核心计算函数,它决定了当 pcp->count 超过高水位时,一次性应该释放多少页归还给伙伴系统。这个返回值直接影响 free_pcppages_bulk() 的行为,是平衡“锁竞争…

2026/10/12 4:50:01

弱电网下LCL型VSC阻抗建模与次同步/超同步谐振稳定性分析

你遇到过这种情况吗?变流器并网之后一切正常,但只要电网侧合上一条较长馈线,或者投切一组无功补偿设备,输出电流就出现十几赫兹的连续振荡,直流母线跟着抖动,保护还没来得及动作系统就先跳了。早几年我做并…

2026/10/12 6:00:05

DB2花店管理系统数据库课程设计:从E-R图到触发器完整实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 6:00:05

JavaWeb一对一聊天系统:WebSocket会话路由与分布式扩展

简介:这是一套基于JavaWeb技术栈实现的一对一网页聊天系统,面向Java初学者与Web开发入门者,帮助其掌握AJAX异步通信、Servlet请求处理、JSP页面交互及MySQL数据持久化等核心技能,适用于课程设计、小型项目实训或Web基础能力强化训…

2026/10/12 6:00:05

JavaWeb原生WebSocket一对一聊天系统实战

简介:这是一套基于JavaWeb技术栈实现的一对一网页聊天系统,面向Java初学者与Web开发入门者,帮助其掌握AJAX异步通信、Servlet请求处理、JSP页面交互及MySQL数据持久化等核心技能,适用于课程设计、小型项目实训或Web基础能力强化训…

2026/10/12 6:00:05

系统集成商如何借力TIM孪生信息模型实现数字孪生项目降本增效

最近在梳理系统集成业务的技术选型,正好拿到了孪图科技发布的《TIM产品与服务合作白皮书2026》,前后翻了两遍,又结合自己过去在智慧园区、工业数据采集类项目里的落地经历想了想,觉得这份材料里有些内容确实值得做系统集成的同行认…

2026/10/12 5:55:05

Java+Vue房产租赁管理系统:从业务建模到前后端部署全解析

做这个东西之前,我其实已经看过不少毕业设计和课设选题,十个人里至少有六七个会选管理系统类。但真正上手去写一个发布出来、能跑通、能提交的完整项目时,很多人卡壳的点根本不是"不会写代码",而是不知道一个像样的系统…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/12 0:04:22

绝缘子缺陷检测数据集清洗与工业级训练实战指南

简介:本资源是面向电力AI研发人员、工业视觉工程师及智能巡检系统开发者的绝缘子缺陷检测专用YOLO格式数据集,解决无人机航拍场景下绝缘子破损、污闪、积雪等9类典型缺陷的精准识别与定位难题。数据集共2139张真实巡检图像(含训练/验证/测试集…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑