新闻详情

新闻详情

首页 / 资讯中心 / 详情

init probe_memory_block_size、memory_block_size_bytes

发布时间:2026/9/30 7:18:57来源:尧图网络
init probe_memory_block_size、memory_block_size_bytes
probe_memory_block_size()是 x86-64 架构中用于在启动时动态决定内存热插拔块大小的探测函数位于arch/x86/mm/init_64.c。它的核心目标是平衡热插拔粒度与管理开销。核心目标该函数通过分析系统物理内存总量和末尾地址选择一个能整除内存末尾且尽可能大的 2 的幂次块大小以减少/sys/devices/system/memory/下memory_block设备的数量。决策逻辑现代内核现代内核的逻辑包含几个关键判断1. 命令行覆盖如果用户通过set_memory_block_size参数指定了块大小则直接使用该值。2. 小内存系统如果物理内存总量小于MEM_SIZE_FOR_LARGE_BLOCK64GB则直接返回MIN_MEMORY_BLOCK_SIZE通常 128MB无需复杂探测。3. 裸机优化如果系统是裸机非虚拟化环境由于内存末尾对齐通常不是热插拔的硬性要求直接使用MAX_BLOCK_SIZE2GB以最小化管理开销。4. 虚拟化/对齐场景对于虚拟化环境或有热插拔建议值的系统代码会从MAX_BLOCK_SIZE开始循环右移寻找第一个能整除boot_mem_end的大小。这确保了块大小与内存末尾对齐同时尽可能大。历史演进该函数最初由 Yinghai Lu 于 2012 年引入目的是解决大内存系统如 2TB 内存上/sys/devices/system/memory/目录下出现 16400 个条目的性能问题。通过匹配 MMIO 重映射大小来增大块尺寸可将 6TB 系统的启动时间缩短 35 秒。后续补丁增加了裸机场景直接使用最大块的优化以及更近期的热插拔建议值支持。调用关系该函数是memory_block_size_bytes()的内部实现后者是通用内存热插拔子系统调用的接口仅在首次调用时执行探测并缓存结果。memory_block_size_bytes()是 Linux 内存热插拔子系统中的核心查询接口用于获取当前系统内存块的字节大小。它由通用内存管理代码调用而具体的块大小决策则由各架构通过probe_memory_block_size()等函数实现。函数定义与返回值该函数在include/linux/memory.h中声明其默认弱符号实现位于drivers/base/memory.c仅返回MIN_MEMORY_BLOCK_SIZE。在 x86 等架构上它被覆盖以实现更复杂的逻辑。核心调用关系该函数在内存热插拔的多个关键路径中被调用确保所有操作都按块大小对齐添加内存在add_memory()中按memory_block_size_bytes()分块处理。注册热插拔内存在hotplug_memory_register()中用于对齐验证。范围校验在check_hotplug_memory_range()中验证起始地址和大小是否对齐。移除内存在offline_and_remove_memory()中用于处理跨块范围。x86 架构的实现逻辑在 x86 上该函数的实际工作由probe_memory_block_size()完成其决策依据包括用户配置是否已通过set_memory_block_size_order()设定。内存大小根据物理 RAM 大小判断。运行环境裸机环境下通常直接使用最大块尺寸虚拟化环境则需寻找能对齐内存末端且尽可能大的块。架构限制块大小必须是 2 的幂且不小于MIN_MEMORY_BLOCK_SIZE。设计要点memory_block_size_bytes()是架构相关实现与通用内存热插拔框架之间的桥梁。x86 通过probe_memory_block_size()在首次调用时完成探测并缓存结果后续调用直接返回缓存值避免重复计算。这种设计使得通用代码无需关心底层架构如何决策块大小只需通过该接口获取结果即可。
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

Android无操作超时自动返回登录页:从触摸监听到生命周期管理全解析 2026/9/30 8:14:19

Android无操作超时自动返回登录页:从触摸监听到生命周期管理全解析

做Android开发这些年,接到过不少业务上“奇怪”的需求,其中“Android无操作超时返回登录界面”算是一个看似简单、实则细节很多的典型。最开始接到这个需求时,我心里想的是“定时器加跳转页面,不就完事了?”等真把代码…

阅读更多 →
HarmonyOS文本转语音多实例冲突:串音丢句根因与单例队列根治 2026/9/30 8:14:19

HarmonyOS文本转语音多实例冲突:串音丢句根因与单例队列根治

1. 一次线上事故:串音、丢句与回调错乱的完整现场 前阵子我在做一款HarmonyOS端的听书类应用,核心场景就一句话:用户点开一本书,边看边听,翻页的时候要快速朗读当前页,章节切换时要有淡出淡入,后…

阅读更多 →
推理引擎与推理系统:大模型推理架构、KV Cache与调度优化 2026/9/30 8:14:19

推理引擎与推理系统:大模型推理架构、KV Cache与调度优化

把模型权重下载下来、用一段几十行的脚本跑通一次生成,这件事的难度大概等于把车打着火;但要让这台车在满载、连续跑长途、还要控制油耗和到达时间的情况下稳定运行,那就是完全另一回事了。推理系统和推理引擎的区别,本质上就是&q…

阅读更多 →
Packet Tracer 实验手册:从拓扑搭建到 VLAN 配置的完整实践指南 2026/9/30 8:14:19

Packet Tracer 实验手册:从拓扑搭建到 VLAN 配置的完整实践指南

简介:这份PDF面向计算机网络课程的初学者与备考CCNA的学习者,围绕Cisco Packet Tracer展开三个递进式实验,帮助读者从零掌握网络仿真软件的使用与基础组网配置。资源包内仅含1个PDF文件,大小约1.67MB,内容以图文步骤、…

阅读更多 →
Keil MDK 生成 LIB 静态库:工程配置、接口设计与链接排错 2026/9/30 8:14:19

Keil MDK 生成 LIB 静态库:工程配置、接口设计与链接排错

1. 从一堆源码到两个文件:LIB库到底解决了什么麻烦我在做嵌入式项目的时候,最烦的不是写代码,而是每次交付都要把一堆.c和.h文件打包发给客户或者同事。发少了编译报错,发多了核心算法就暴露了。后来我把这部分代码编译成.lib静态…

阅读更多 →
PostgreSQL LIKE 模糊查询详解:通配符、索引优化与排坑实践 2026/9/30 8:14:13

PostgreSQL LIKE 模糊查询详解:通配符、索引优化与排坑实践

PostgreSQL 的 LIKE 语句,看起来是数据库里最容易写的一行 SQL,真正较真起来却到处都是细节。等值查询大家都会,一旦产品经理提"模糊搜索""包含匹配",第一反应就是 where name like %关键词% ,但…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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