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()在每次成功分配后调用。

相关新闻

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

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

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

2026/10/12 4:49:51 阅读更多 →
page_alloc nr_pcp_free

page_alloc nr_pcp_free

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

2026/10/12 4:49:51 阅读更多 →
弱电网下LCL型VSC阻抗建模与次同步/超同步谐振稳定性分析

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

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

2026/10/12 4:49:51 阅读更多 →

最新新闻

实验室数据自动备份:科研狗的数据保险方案

实验室数据自动备份:科研狗的数据保险方案

一、科研数据丢失的五种「死法」 每个科研人都听过一个传说:隔壁实验室的师兄,实验跑了三个月,数据存在移动硬盘里,硬盘摔了一下——三个月白干。 这不是传说,这是科研圈的日常。科研数据丢失的方式比你想象的更多&…

2026/10/12 5:33:16 阅读更多 →
问道1.4服务端数据库搭建:从空库到登录存档全流程

问道1.4服务端数据库搭建:从空库到登录存档全流程

简介:这份资源是《问道1.4》服务端数据库的SQL脚本包,面向游戏私服架设者、服务端运维人员及回合制网游后端学习者,用于快速搭建或恢复服务端数据库环境。压缩包为rar格式,仅含1个sql文件,体积约174KB,即al…

2026/10/12 5:33:16 阅读更多 →
算法优化量化评估体系:从指标设计到A/B测试的完整实践指南

算法优化量化评估体系:从指标设计到A/B测试的完整实践指南

算法优化如果不能被量化,那就只能算“自我感觉良好”。我在实际项目里见过太多次这样的情况:模型上线前拍着胸脯说效果提升明显,结果灰度一跑,业务指标纹丝不动,甚至还有回退;或者某个启发式算法调了几个参…

2026/10/12 5:33:16 阅读更多 →
SQL Server+Quartz集群高可用实战:持久化、双机热备与故障恢复

SQL Server+Quartz集群高可用实战:持久化、双机热备与故障恢复

1. 项目概述:为什么SQL Server Quartz集群不是“配个连接字符串”就完事?“第十节:利用SQLServer实现Quartz的持久化和双机热备的集群模式”——这个标题乍看是数据库与调度框架的常规组合,但真正动手做过的人心里都清楚&#xf…

2026/10/12 5:33:16 阅读更多 →
C++哈希表容器实战:unordered_set与unordered_map性能优化指南

C++哈希表容器实战:unordered_set与unordered_map性能优化指南

做C开发这几年,我有个很深的体会:凡是性能报告里出现“查找慢”三个字,十有八九问题都出在数据结构选型上。前阵子帮一个同事排查日志去重的性能瓶颈,他用std::map做字符串查重,处理百万级数据时耗时明显偏高。我让他把…

2026/10/12 5:33:16 阅读更多 →
EmbeddingGemma 2:740M多模态嵌入模型的本地部署与检索实践

EmbeddingGemma 2:740M多模态嵌入模型的本地部署与检索实践

1. 740M 参数的多模态嵌入模型到底解决了什么痛点第一次看到“EmbeddingGemma 2”这个名称时,我的直觉是:又一个小型化嵌入模型。但仔细拆解 740M 这个参数量和多模态这个定语之后,我发现它瞄准的其实是一个非常具体的场景——在本地设备上完…

2026/10/12 5:32:15 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/11 14:36:54 阅读更多 →