新闻详情

新闻详情

首页 / 资讯中心 / 详情

hotplug MEM_SIZE_FOR_LARGE_BLOCK

发布时间:2026/9/30 11:25:34来源:尧图网络
hotplug MEM_SIZE_FOR_LARGE_BLOCK
内存热插拔机制中启用“大块”large blocks模式所需的最小内存容量阈值。核心含义#define MEM_SIZE_FOR_LARGE_BLOCK (64UL 30) // 64GBMEM_SIZE_FOR_LARGE_BLOCK被定义为64GB。当系统的物理内存总量达到或超过 64GB时内核在启动时会倾向于使用更大的内存块粒度如 2GB以减少memory_block设备数量和管理开销。与MAX_BLOCK_SIZE的配合这个宏与MAX_BLOCK_SIZE紧密配合使用。在probe_memory_block_size()中典型的逻辑是/* * If the system has more than 64GB of RAM, use large blocks * to reduce the number of memory block devices. */ if (boot_mem_end MEM_SIZE_FOR_LARGE_BLOCK) return MAX_BLOCK_SIZE; // 2GB当内存达到 64GB 阈值时内核会选择MAX_BLOCK_SIZE2GB作为块大小。这样64GB 内存只需要 32 个memory_block设备而如果使用 128MB 的小块则需要 512 个设备——sysfs 节点的数量相差 16 倍启动速度和内存开销差异显著。设计意图这个阈值的设定是为了在大内存系统上避免管理开销的爆炸。内存热插拔的块大小是一个权衡小块如 128MB热插拔粒度精细但设备数量多管理开销大。大块如 2GB管理开销小但热插拔粒度粗。64GB 这个阈值是一个经验值。低于 64GB 的系统即使使用较小的块如 128MB 或 256MB设备数量也在可接受范围内而超过 64GB 的系统如果继续使用小块设备数量会迅速增长到数千个导致 sysfs 遍历和内存管理效率严重下降。与MAX_BLOCK_SIZE的协同这两个宏共同构成了 x86 内存热插拔块大小的决策框架宏值作用MIN_MEMORY_BLOCK_SIZE通常 128MB块大小的下限MEM_SIZE_FOR_LARGE_BLOCK64GB启用大块的阈值MAX_BLOCK_SIZE2GB块大小的上限probe_memory_block_size()会根据系统内存总量是否达到MEM_SIZE_FOR_LARGE_BLOCK来决定是否将块大小提升到MAX_BLOCK_SIZE从而在精细度和开销之间取得平衡。唯一的直接调用点这个宏在probe_memory_block_size()中用于判断是否应该启用大内存块。典型的判断逻辑如下static unsigned long probe_memory_block_size(void) { unsigned long boot_mem_end max_pfn PAGE_SHIFT; unsigned long bz; /* ... */ /* * If RAM is smaller than MEM_SIZE_FOR_LARGE_BLOCK (64GB), * use the regular (smaller) block size. */ if (boot_mem_end MEM_SIZE_FOR_LARGE_BLOCK) { bz MIN_MEMORY_BLOCK_SIZE; goto done; } /* RAM 64GB, use the larger block size (MAX_BLOCK_SIZE, 2GB) */ bz MAX_BLOCK_SIZE; done: return bz; }调用关系链这个宏的调用路径非常清晰memory_block_size_bytes() ← 通用内存热插拔代码调用 ↓ probe_memory_block_size() ← x86 架构实现启动时执行一次 ↓ MEM_SIZE_FOR_LARGE_BLOCK ← 用于阈值判断memory_block_size_bytes()是通用内存热插拔子系统drivers/base/memory.c调用的接口用来获取当前系统的内存块大小。x86 架构通过probe_memory_block_size()来实现它而MEM_SIZE_FOR_LARGE_BLOCK就是这个实现中用来判断“内存是否足够大值得使用大块”的阈值。上下文中的用途在邮件列表讨论中开发者明确指出“只在系统物理地址末端至少达到MEM_SIZE_FOR_LARGE_BLOCK64G时才会进行这个检查”。这意味着对于内存小于 64GB 的系统内核根本不会考虑使用MAX_BLOCK_SIZE直接使用较小的默认块大小如MIN_MEMORY_BLOCK_SIZE通常为 128MB。这个设计背后的逻辑很直接内存块越大热插拔的粒度就越粗但管理开销sysfs 设备数量越小。64GB 是一个平衡点——低于此值时小块的精细度更有利超过此值时使用 2GB 大块来避免设备数量爆炸。
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

SVM与SVR的本质区别:损失函数、支持向量与调参实战 2026/9/30 12:00:49

SVM与SVR的本质区别:损失函数、支持向量与调参实战

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

阅读更多 →
SRC 挖洞:Apache Tomcat 加密拦截器绕过深度复盘,CVE-2026-34486 fail-open 一行代码怎么打穿集群通信 2026/9/30 12:00:49

SRC 挖洞:Apache Tomcat 加密拦截器绕过深度复盘,CVE-2026-34486 fail-open 一行代码怎么打穿集群通信

作者 akihi(白帽攻防录讲师),某甲方网络安全工程师,合合 SRC 年度第一、腾讯 SRC 连续三年前十,单漏洞赏金 4w,擅长 Web/App/PC 客户端漏洞挖掘。专注中间件安全、反序列化漏洞、代码审计。本文基于公开 CV…

阅读更多 →
架构演进路径:从单机分库到微服务容器编排实战指南 2026/9/30 12:00:42

架构演进路径:从单机分库到微服务容器编排实战指南

读写分离、垂直分库、微服务、容器编排——这些词单独拿出来都能讲半小时,但真正让人头疼的是把它们串成一条演进路径时,每一步该怎么做、为什么要这么做。我经历过一个项目从单机部署一路走到容器编排的完整过程,途中踩了不少坑,…

阅读更多 →
TyHGB复合指标:基于CHARLS的胰岛素抵抗新标志物构建与验证 2026/9/30 12:00:42

TyHGB复合指标:基于CHARLS的胰岛素抵抗新标志物构建与验证

最近在CHARLS数据里折腾胰岛素抵抗相关指标的时候,我顺手去医院统计了一下PubMed上TyG类复合指标的发文量。坦白说,TyG-BMI、TyG-WC、TyG-WHtR这类组合已经被很多人做过了,CHARLS数据库上的相关论文一年比一年多,肉眼可见地卷起来…

阅读更多 →
Vue3 从入门到熟练:响应式、组件通信与工程化避坑指南 2026/9/30 12:00:42

Vue3 从入门到熟练:响应式、组件通信与工程化避坑指南

三年前我第一次把线上项目从 Vue2 迁到 Vue3, setup 里满屏的 ref 和 .value 让我一度怀疑这是不是同一个框架。后来陆续带过几个刚入行的同学,发现大家卡住的位置出奇地一致:不是语法写不出来,而是脑子里还留着 Vue2 那套 …

阅读更多 →
部门考核待处理模块全解析:流程逻辑、操作场景与清待技巧 2026/9/30 12:00:42

部门考核待处理模块全解析:流程逻辑、操作场景与清待技巧

部门考核页面上挂了几十条待办,点进去不知道先处理哪条;考核周期结束了,系统里还有一堆“待处理”没人管;明明已经评分了,流程却卡在“待处理”里不动。如果你也在被这些问题折腾,那这篇内容就是写给你的。…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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