Linux 7.4 改进早期启动内存分配器:极端碎片化场景下从约 268 秒降到约 50 毫秒
Linux 7.4 合并窗口里,内核早期启动阶段的物理内存分配器 memblock 收到一组改进。Phoronix 10月24日报道了这次合并,其中一个补丁把一处线性查找改成了二分查找,在特定场景下效果非常明显。[1]
memblock 是什么
memblock(代码在 mm/memblock.c)是内核刚启动、完整的页分配器还没就绪时使用的物理内存分配器,负责记录和划分早期可用的内存区域。[1] 页分配器接手之后,它的使命基本就结束了。
改了什么
Google 工程师 Tarun Sahu 发现,memblock_add_range() 和 memblock_isolate_range() 这两个函数在查找候选内存区域时用的是线性查找。[1] 平时内存区域不多,线性查找问题不大;但在内存被切得非常碎的情况下,线性扫描的耗时会急剧上升。
典型例子是 Kernel Handover(KHO)功能:它用于在内核切换时保留内存,Live Update Orchestrator 等功能依赖它,会产生大量不连续的内存块。[1] 补丁把这两处改为二分查找,据 Phoronix 引用的补丁说明,最坏情况复杂度降到 O(N log N)(顺序追加时为 O(N)),把 KHO 的内存恢复时间从约 268 秒缩短到约 50 毫秒。[1]
别误读成“开机快了”
这组数字只对应 KHO 这类极端碎片化的场景,并不意味着普通电脑或服务器的开机时间会缩短几分钟。对大多数常规系统来说,早期启动阶段的内存区域数量不多,这次改动带来的变化很难察觉。Phoronix 作者也提到,这段线性查找存在了这么久让人有些意外,但它只影响早期启动阶段的分配器。[1]
说明:Phoronix 引用的补丁说明为约 268 秒,其正文另一处写作约 238 秒,两处不一致,此处按引用的补丁说明写作 268 秒;补丁原文未核实。
来源
[1] Linux 7.4 memblock(Phoronix,Michael Larabel),2026年10月24日。 [2] Hacker News 讨论,2026年10月25日。
#Linux #Linux内核 #memblock #内存管理 #KHO #Google #开源

成为第一条评论!
Nobody's responded to this post yet. Add your thoughts and get the conversation going.