node_nr_slabs()是 SLUB 调试里用于读取一个 NUMA 节点上该缓存的 slab 页总数的访问器封装了atomic_long_read()。一、函数签名static inline unsigned long node_nr_slabs(struct kmem_cache_node *n) { return atomic_long_read(n-nr_slabs); }参数含义nper-NUMA-node 的struct kmem_cache_node返回该节点上该缓存的 slab 页总数unsigned long。二、n-nr_slabs回顾struct kmem_cache_nodestruct kmem_cache_node { spinlock_t list_lock; unsigned long nr_partial; struct list_head partial; #ifdef CONFIG_SLUB_DEBUG atomic_long_t nr_slabs; // ← 这里 atomic_long_t total_objects; struct list_head full; #endif };仅在CONFIG_SLUB_DEBUG下存在。记录该节点上该缓存的所有 slab 页数量partial full 其他。用atomic_long_t而非普通unsigned long因为可能在不加list_lock的路径被读取或更新如统计输出、validate_slab_cache需要原子性。三、为什么用atomic_long_read()return atomic_long_read(n-nr_slabs);atomic_long_read()原子读取保证不会读到撕裂值如 64 位变量在 32 位系统上被部分更新。虽然写入通常也在锁内但读取可能发生在sysfs/debugfs 统计输出。kmem_cache_shrink()计算。内存热插拔回调。这些路径不一定持有list_lock所以用原子读保证一致性。四、配套的写操作nr_slabs的更新通常用原子加减// slab 加入 static inline void inc_slabs_node(struct kmem_cache *s, int node, int objects) { struct kmem_cache_node *n get_node(s, node); atomic_long_inc(n-nr_slabs); atomic_long_add(objects, n-total_objects); } // slab 移除 static inline void dec_slabs_node(struct kmem_cache *s, int node, int objects) { struct kmem_cache_node *n get_node(s, node); atomic_long_dec(n-nr_slabs); atomic_long_sub(objects, n-total_objects); }调用时机allocate_slab()新 slab 从伙伴系统分配后inc_slabs_node()。discard_slab()slab 归还伙伴系统时dec_slabs_node()。五、与total_objects的配套static inline unsigned long node_nr_objs(struct kmem_cache_node *n) { return atomic_long_read(n-total_objects); }node_nr_slabs()和node_nr_objs()成对分别读函数字段含义node_nr_slabsnr_slabsslab 页数node_nr_objstotal_objects对象总数nr_slabs × objects_per_slab用于计算使用率、空闲率、内存占用等。六、使用场景node_nr_slabs()在以下路径被调用1. sysfs / debugfs 统计/sys/kernel/slab/cache/slabs输出该缓存所有节点的nr_slabs之和。2.kmem_cache_shrink()static unsigned long count_partial(struct kmem_cache_node *n, ...) { ... return node_nr_slabs(n); // 或遍历 partial 计算 }判断是否需要收缩。3.validate_slab_cache()static void validate_slab_cache(struct kmem_cache *s) { int node; struct kmem_cache_node *n; for_each_kmem_cache_node(s, node, n) { pr_info(Node %d, slabs %lu, objects %lu\n, node, node_nr_slabs(n), node_nr_objs(n)); } }调试时汇总每个节点的 slab 和对象数。4. 内存热插拔节点上线/下线时更新和检查这些计数。七、知识呼应相关函数这里体现struct kmem_cache_noden-nr_slabs字段atomic_long_t原子读写避免锁外撕裂inc_slabs_node/dec_slabs_node写侧操作get_node()获取n的方式for_each_kmem_cache_node遍历所有节点读取计数CONFIG_SLUB_DEBUG字段和函数的存在条件八、总结node_nr_slabs(n)用atomic_long_read(n-nr_slabs)原子读取一个 NUMA 节点上该缓存的 slab 页总数仅在CONFIG_SLUB_DEBUG下存在。它与node_nr_objs()配套用于 sysfs 统计、kmem_cache_shrink()判断和validate_slab_cache()汇总写侧由inc_slabs_node()/dec_slabs_node()维护。
企业数字化 ERP 产品动态
相关推荐
FDC2214——电容信号转换芯片 这几天又要捡起之前帮师兄做的双模式传感器了,之前电容传感器部分用的是FDC2214方案,一年过去了,觉得有必要还是写一下这个芯片的配置过程.(之前换硬盘工程丢了....)
——ai时代多review,多自己看懂驱动&a… · 2026/11/3 11:02:13
CTF²-[NewStarCTF 公开赛赛道]Whats HTTP /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 12:13:59
WIFI图标消失或无法打开 引言(着急的朋友们这段可以直接跳过)在电脑上,时常会出现系统更新的字样。对于我自己的电脑来说,一更新就会卡,甚至出现各种各样的小问题,为了防止这种情况的发生,我彻底让它不再更新࿰… · 2026/11/3 2:17:10
轮船电工需要电工证不 电工证多少钱才够用 轮船电工需要电工证不 电工证多少钱才够用 你是不是正为找工作发愁?特种作业证成了门槛,尤其是轮船电工,能不能干这行, 轮船电工需要电工证不 成了最关心的问题。别急,听我这十年在应急管理一线的实操经验,告诉你电工证到底值不值, 多少钱… · 2026/11/8 6:59:50
家装报装也要电工证吗?全国通用证书是刚需 家装报装也要电工证吗?全国通用证书是刚需 你是不是正准备找电工相关的工作,但不知道 家装报装也要电工证吗 ?更别提现在找工作动不动就要看证件, 全国通用… · 2026/11/8 6:59:50
深圳电工证培训石岩内部消息:外省证书怎么转?实操干货全在这 深圳电工证培训石岩内部消息:外省证书怎么转?实操干货全在这 之前考的证在外省能不能转过来?这几乎是每个想在深圳发展、从事电工行业的人都会问的问题。别急, 深圳电工证培训石岩 内部消息来了,我来给你讲讲怎么操作,别再走弯路了。… · 2026/11/8 6:59:50
静宁县在哪考高压电工证电子证书怎么查 静宁县在哪考高压电工证电子证书怎么查 证书过期了不知道怎么复审延期,别慌,静宁县考高压电工证的电子证书流程其实并不复杂,但很多人因为不了解最新政策,错过了关键操作窗口。特别是像你这样在开封房建工程干的电工,手里的高压电工证要是过期了,不仅影… · 2026/11/8 6:58:50
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/8 0:00:20
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/8 0:00:20
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/8 0:00:20
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/8 0:00:20
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/8 0:00:20
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/8 0:00:20
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 11:25:08
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 12:02:18
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/8 1:18:25