LWN: 内核 high mem 淘汰时间表!

内核高内存淘汰时间表

关注了就能看到更多这么棒的文章哦~

作者: Jonathan Corbet
 2025年12月23日 

Gemini 辅助翻译
https://lwn.net/Articles/1051010/


Linux Plumbers Conference (LPC)

Arnd Bergmann 在他的 2025 年 Linux Plumbers Conference 关于 Linux 内核中 32 位支持未来发展的会议上表示,这次会议是他 9 月份就同一主题所做演讲 的后续。然而,这次的重点是内核的“高内存”(high memory)抽象,以及何时可以将其移除。尽管对于某些功能,包括在这些系统上支持大量内存的功能,可能会更快地移除,但内核社区似乎还需要在一段时间内继续支持 32 位系统。 

高内存问题

他首先指出,高内存(high memory)是为了支持安装了超过 768MB 物理内存的 32 位系统,并在默认内核配置下启用;它最多可支持 16GB 的物理内存。然而,高内存抽象是一个维护负担,并且“需要被淘汰”。感兴趣的读者可以在 这篇文章 中了解更多关于高内存、为何需要它以及其工作原理的信息。 

一个 32 位系统拥有 4GB 的虚拟地址空间(物理地址空间更大),它在用户空间和内核空间之间进行划分。有各种内核配置选项可以改变这种划分方式;最常见的配置是 VMSPLIT_3G,它将地址空间的底部 3GB 分配给用户空间,同时为内核保留 1GB。问题在于,内核的“线性映射”(linear map)(或“直接映射”,direct map),它映射了所有物理内存,必须能够容纳在内核的地址空间部分中;对于 VMSPLIT_3G,这将内核直接映射的物理内存限制在 768MB。超出此范围的任何内存都作为高内存进行管理,它必须在每次使用前显式映射(并在使用后解除映射)。 

虽然存在增加内核空间大小从而增加线性映射大小的配置选项,但它们以减少应用程序可用地址空间为代价。例如,VMSPLIT_2G 选项在不使用高内存的情况下支持高达近 2GB 的物理内存,但将虚拟地址空间限制为 2GB。 

Bergmann 说,有很多理由希望摆脱高内存。嵌入式开发人员不喜欢它,因为它在更新时往往是回归的来源,并使代码复杂化。虽然 32 位 CPU 仍用于嵌入式应用程序,但它们通常不安装大量内存,因此高内存在那方面并不是特别有用。内存管理维护人员出于同样的原因不喜欢高内存;他们也希望在高内存消失之前,没有人会开始认为 64 位高内存(64-bit high memory)可能是一个好主意。 

当然,也有理由保留高内存。移除它会增加暴露驱动程序 bug 的可能性,并可能强制更改用户空间(user-space)代码。任何安装了超过 2GB 内存的 32 位系统,如果没有高内存抽象,实际上无法使用这些内存。即使是较小量的内存,如果不支持,也会如上所述,通过减小用户空间地址空间的大小来实现,这会破坏使用大量虚拟内存的应用程序。如果从内核中移除高内存,那么支持超过 4GB 内存的 32 位系统将毫无希望;即使是 2GB 系统也会遭受显著限制。相反,对于安装了不足 1GB 内存的系统,则完全没有影响。 

目前仍在生产 32 位系统,但几乎所有这些系统的安装内存都在 1GB 或更少。他说,在新系统中使用 32 位 CPU 的唯一原因是极度的成本敏感性,因此不太可能有预算用于更大的内存量。因此,任何超过 1GB 的系统几乎肯定是旧系统。1GB 系统相对容易支持,只是其中一些具有非连续内存(discontiguous memory),这使得它们无法映射到内核的线性映射中。有变通方法,但其中一些可能需要更改用户空间。 

他说,2GB 的情况越来越少见,但人们仍然拥有这些系统,因此对它们的支持可能需要像对 1GB 系统一样长时间维护。2GB VMSPLIT 选项可能对某些人有效,但它会导致 1.75GB 的虚拟地址空间,这对于运行 Firefox 来说太小了。David Hildenbrand 问“支持”是否意味着新内核必须在这些系统上工作;答案是“是的”,至少对于用户仍希望能够更新的系统而言。 

此外,还有超过 2GB 内存的系统。这可能是旧的 (2007 年以前的) x86 笔记本电脑或 2012 年或 2013 年的 Arm Chromebook。显然,机载娱乐系统、火警系统和数字标牌也属于此类。他说,这些系统的电路板成本只占总成本的一小部分,所以制造商会安装更多内存。Jason Gunthorpe 问人们是否真的会将这些系统升级到当前内核;Bergmann 说他们确实会,Gunthorpe 回应说他听到这个消息很震惊。 

有许多已知的 32 位系统内存超过 4GB;Bergmann 说它们都是“死系统”。其中包括 Amazon Annapurna Alpine 盒子、Calxeda Midway 系统、HiSilicon HiP04 系统等。显然,还有一些 SPARC 系统内存高达 2GB,仍在获得更新。 

提议

那么,高内存问题该如何解决呢?Bergmann 表示,他曾对 VMSPLIT_4G 选项抱有很大希望,该选项将内核和用户空间完全分离,为两者各提供完整的 4GB。这将允许在不使用高内存的情况下支持高达近 4GB 物理内存的系统,并解决许多问题,但此选项从未被推到实际可用的程度,现在也没有人为此工作提供资金。因此,他说,此选项可能永远不会实现,但它也可能不会是必需的。 

可能需要的是一个名为“densemem”的选项,它使用一些映射技巧来弥补物理地址空间中的漏洞。无论如何,densemem 都需要 取代 SPARSEMEM 模型,并且它可以在不使用高内存的情况下支持高达 2GB 的系统。然而,此选项会减少用户空间可用的地址空间。它也尚未工作;Bergmann 正在寻找希望帮助完成它的开发人员。 

另一个可能发生的事情是“精简功能高内存”(reduced-feature high memory),即高内存支持将一次从一个子系统(subsystem)中移除。这将降低系统的复杂性,并且还将减少最终移除高内存的影响。因此,例如,对页表(page tables)、DMA 缓冲区(DMA buffers)、文件系统元数据(filesystem metadata)等在高内存中的支持可能会被移除。其他用户,例如文件支持的内存映射(file-backed memory mappings)和匿名内存映射(anonymous memory mappings),目前仍需要继续使用高内存。 

多年前,低内存(low memory)是一种相对稀缺的资源,因此建议开发人员尽可能提供 __GFP_HIGHMEM 标志(表明请求可以从高内存满足)。Bergmann 建议改变这一策略,以便内存分配仅在真正需要高内存时才包含 __GFP_HIGHMEM。他说,也许可以开始逐步淘汰 32 位桌面使用场景,尽管他承认此举可能存在争议。Gunthorpe 希望确认是否不再生产此类桌面电脑;Bergmann 说确实如此。32 位桌面系统的用户是爱好者和积极寻找旧硬件的人。Dave Hansen 将这些用户描述为“一小部分有发言权的人”,并建议他们最好支持一个计算机历史博物馆。 

Bergmann 说,最终,高内存可以放在 CONFIG_EXPERT 配置选项后面,使其对许多用户不可用。 

Hildenbrand 询问所提出的部分移除对维护的影响;Bergmann 表示影响很小,但这将有助于后续的移除阶段。Gunthorpe 担心暴露驱动程序 bug 的可能性,以及从驱动程序中移除高内存支持可能不值得麻烦。他建议针对高内存造成大量复杂性的领域。Matthew Wilcox 说移除可能会破坏必须映射大型 folios 的内核代码;Bergmann 建议使大型 folio 支持与高内存不兼容。Hansen 说 __GFP_HIGHMEM 标志可以简单地从大型 folio 分配中移除,但 Bergmann 说那会破坏页缓存(page cache)。Gunthorpe 说,当高内存支持被移除时,需要它来缓存页的系统将无法再工作。 

Bergmann 继续说道,建议可以为每个高内存用户创建一个单独的配置选项。这将允许创建每个用法的统计数据。他说,页缓存的高内存支持至少需要保留五年以上。 

时间表

他总结了 32 位支持的未来时间表;看起来如下: 

  • 高内存功能集缩减将于 2026 年开始。 

  • 同样在 2026 年,VMSPLIT_2G_OPT 配置将成为 Arm、PowerPC 和 x86 系统的默认配置。 

  • 2027 年,高内存支持可能会完全从 Arc、Microblaze、MIPS、SPARC 和 xtensa 等较少使用的架构中移除。 

  • 顺利的话,2027 年也将看到 Armv7 系统增加 densemem 支持。 

  • 203x 年,高内存中的页缓存支持将消失。 

  • 204x 年,对最后几个 32 位架构的支持将被移除。 

Hansen 回应说,许多移除可以更快地完成。他还建议了一个配置选项,只使用低内存(low memory),即使在支持高内存的系统上,直到内存不足(out-of-memory)情况迫使也使用高内存。Will Deacon 说,VMSPLIT_4G 可能仍有希望,随着高内存支持的移除,它可能会变得更具吸引力。他问如果有人完成这项工作是否有用;Bergmann 回答说会有用,但这项工作是否会完成尚不清楚。 

会议结束后,Bergmann 发布了 一系列补丁,实现了他 2026 年时间表中的部分项目。 

本次演讲的 幻灯片 和 视频 可供查阅。 

[感谢 Linux 基金会,LWN 的差旅赞助商,支持我参加此次活动。] 

  全文完
 LWN 文章遵循 CC BY-SA 4.0 许可协议。 

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

计及源荷不确定性的综合能源生产单元运行调度与容量配置优化研究(Matlab代码实现)内容概要:本文围绕“计及源荷不确定性的综合能源生产单元运行调度与容量配置优化”展开研究,利用Matlab代码实现相关模型的构建与仿真。研究重点在于综合能源系统中多能耦合特性以及风、光等可再生能源出力和负荷需求的不确定性,通过鲁棒优化、场景生成(如Copula方法)、两阶段优化等手段,实现对能源生产单元的运行调度与容量配置的协同优化,旨在提高系统经济性、可靠性和可再生能源消纳能力。文中提及多种优化算法(如BFO、CPO、PSO等)在调度与预测中的应用,并强调了模型在实际能源系统规划与运行中的参考价值。; 适合人群:具备一定电力系统、能源系统或优化理论基础的研究生、科研人员及工程技术人员,熟悉Matlab编程和基本优化工具(如Yalmip)。; 使用场景及目标:①用于学习和复现综合能源系统中考虑不确定性的优化调度与容量配置方法;②为含高比例可再生能源的微电网、区域能源系统规划设计提供模型参考和技术支持;③开展学术研究,如撰写论文、课题申报时的技术方案借鉴。; 阅读建议:建议结合文中提到的Matlab代码和网盘资料,先理解基础模型(如功率平衡、设备模型),再逐步深入不确定性建模与优化求解过程,注意区分鲁棒优化、随机优化与分布鲁棒优化的适用场景,并尝试复现关键案例以加深理解。
内容概要:本文系统分析了DesignData(设计数据)的存储结构,围绕其形态多元化、版本关联性强、读写特性差异化等核心特性,提出了灵活性、版本化、高效性、一致性和可扩展性五大设计原则。文章深入剖析了三类主流存储方案:关系型数据库适用于结构化元信息存储,具备强一致性与高效查询能力;文档型数据库适配半结构化数据,支持动态字段扩展与嵌套结构;对象存储结合元数据索引则有效应对非结构化大文件的存储需求,具备高扩展性与低成本优势。同时,文章从版本管理、性能优化和数据安全三个关键维度提出设计要点,建议采用全量与增量结合的版本策略、索引与缓存优化性能、并通过权限控制、MD5校验和备份机制保障数据安全。最后提出按数据形态分层存储的核心结论,并针对不同规模团队给出实践建议。; 适合人群:从事工业设计、UI/UX设计、工程设计等领域数字化系统开发的技术人员,以及负责设计数据管理系统架构设计的中高级工程师和系统架构师。; 使用场景及目标:①为设计数据管理系统选型提供依据,合理选择或组合使用关系型数据库、文档型数据库与对象存储;②构建支持版本追溯、高性能访问、安全可控的DesignData存储体系;③解决多用户协作、大文件存储、历史版本管理等实际业务挑战。; 阅读建议:此资源以实际应用场景为导向,结合具体数据库类型和表结构设计进行讲解,建议读者结合自身业务数据特征,对比分析不同存储方案的适用边界,并在系统设计中综合考虑成本、性能与可维护性之间的平衡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值