LWN:保证可以分到连续内存的分配器!

解决Linux下Questasim中代码字体非常小 Questasim的source窗口里代码字体非常小 你是不是也遇到这样的问题,在使用Vmware时,Questasim的代码字体非常小,小到完全看不见,连断点都没办法标记。 下面我给出我摸索好久的解决办法,分享给大家。 1.首先,版本是Questasim 10.7c,在Vmware16中打开,情况如下: 不多逼逼,直接上图开搞: 给textFontV2设置值:monospace 12 normal roman 这里一定要注意啦,点完apply之后,不要点ok,直接关闭窗口。 ... 阅读详情

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

The guaranteed contiguous memory allocator

By Jonathan Corbet
March 21, 2025
Gemini-1.5-flash translation
https://lwn.net/Articles/1015000/

随着系统运行和内存碎片化,分配大片的物理连续的内存区域变得越来越困难。多年来,人们付出了许多努力来避免对这种分配的需求,但在某些时候,它们是不可避免的。内核的 contiguous memory allocator (CMA,连续内存分配器) 子系统试图使这种分配成为可能,但它从来都不是一个完美的解决方案。Suren Baghdasaryan 正在尝试改善这种情况,他提交了 guaranteed contiguous memory allocator (保证连续内存分配器) 补丁集,其中包括 Minchan Kim 的工作。

在遥远的过去,Dan Magenheimer 引入了 transcendent memory (超越内存) 的概念——这是一种不能直接寻址的内存,但内核可以机会主义地将其用于缓存或其他目的。此后,大多数超越内存的工作都未被使用并已从内核中删除,但这个想法仍然存在,并且此补丁系列利用它来提供有保证的 CMA。

具体来说,该补丁集包含一个名为 “cleancache” 的子系统,这是 Magenheimer 在 2012 年 提出 的一个概念。如果内核必须转储一个数据页,但希望尽可能保留该数据,它可以将其放入 cleancache,cleancache 会将其隐藏在某个地方。如果需要该数据,内核可以将其从 cleancache 中复制回来——如果它仍然存在的话。与此同时,最初包含该数据的页面可以被回收以供其他用途。

保证 CMA 建立在 cleancache 之上,方法是在启动时分配一个物理上连续的内存区域,此时这种分配相对容易。然后,该内存被转换为 cleancache 并提供给内核使用。每当内存管理系统回收文件支持内存页面时,它可以选择将这些页面的数据放入 cleancache 中。如果需要该数据,将尝试从 cleancache 中检索它,然后再从磁盘重新读取它。因此,保留用于 CMA 的内存可以在未分配给 CMA 用户时供内核使用,但受到限制。

在某个时候,某些内核子系统将需要一个大的、物理上连续的缓冲区。从保证 CMA 子系统请求该缓冲区将导致从保留内存中分配,之后会删除分配区域中可能存在的任何缓存数据。由于该数据已被缓存,并明确规定可以随时删除,因此可以快速进行此分配。Seongjae Park 和 Kim 在 2014 年 提出 了这种方法。

这个新的子系统与现有的 CMA API 集成,因此 CMA 用户无需更改即可使用它。保留区域通过显式请求 “guaranteed” 行为的 device tree 属性进行设置。

最终的结果是一个 CMA 版本,它可以保证成功,只要总分配不超过保留区域的大小;现有的 CMA 更有可能失败。由于 CMA 的使用通常仅限于一两个有已知需求的问题设备,因此为特定系统调整保留区域的大小应该很简单。

保证 CMA 的另一个优点是延迟;如果内存可用,则可以快速分配。当前内核中的 CMA 可能必须首先将数据移出分配区域,这需要时间。缺点是保留用于保证 CMA 的内存只能用于可以随意删除的数据;这将增加系统其余内存的压力。

此补丁系列发布于 2025 Linux Storage, Filesystem, Memory-Management, and BPF Summit (2025 年 Linux 存储、文件系统、内存管理和 BPF 峰会) 之前,目前计划在内存管理 track 中进行讨论。在讨论之前可能不会有很多评论。不过,这些补丁相对较小,并且不会侵入未使用 CMA 的系统上的内存管理子系统,因此我们可能会看到超越内存应用程序在首次提出该想法大约 15 年后真正向前发展。

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

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

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

相关推荐

EPLAN Electric P8 2025安装避坑指南:硬件、.NET 6与VM配置全解析

EPLAN Electric P8 是面向工业自动化电气设计的工程级CAD平台,其核心依赖于.NET运行时、DirectX硬件加速与本地许可证验证机制。随着2025版升级至.NET 6.0 Runtime、DirectX 12渲染引擎及双模授权校验,安装失败率显著上升——尤其在显卡驱动陈旧、虚拟机环境或企业离线场景下。技术价值在于保障PLC柜体布局、端子排自动生成、电缆清册输出等产线级功能稳定运行;典型应用场景包括高校电赛控制系统设计、包装线电控图纸交付及集成商多版本协同部署。本文聚焦EPLAN 2025安

weixin_30897079的博客 550

LWN:slab 分配器的sheaves以及任意上下文的分配功能!

总而言之,他说,来自 sheaves 层的初步结果是 promising(很有希望的),但它与 slab 调试的交互需要改进。(它是 slab 分配器的一部分)实现的工作会议,该版本期望可以从任何上下文中的 BPF 程序中调用。Hoang Nhat Pham 同意,他说他工作的系统具有大量的 CPU,但只有一个 NUMA 节点,从而导致大量的锁竞争,而 per-CPU 缓存可以改善这种情况。最后一个特性几乎是没有额外代价的,因为幸运的是,当请求到达时,分配器会有一个具有足够对象的 sheaf 存在。

Linux News搬运工 1708

containerd镜像加速配置全解析:从host.toml到config.toml的演进与实践

本文全面解析了containerd镜像加速的配置方法,重点对比了传统的config.toml集中式配置与现代的host.toml模块化配置的演进与优劣。文章通过实战演示,详细指导如何为docker.io、registry.k8s.io等常见仓库配置host.toml加速,并提供了生产环境下的最佳实践、故障排查与性能优化建议,帮助用户显著提升镜像拉取效率与系统稳定性。

jenkins8butler的博客 698

Linux内存管理之CMA简介

在linux驱动开发过程中经常需要使用到连续大块物理内存,尤其是DMA设备。而实际在系统经过长时间的允许之后,物理内存会出现比较严重的碎片化现象,虽然通过内存规整,内存回收等手动可以清理出一段连续的物理内存,但是并不能保证一定能够申请较大连续物理块。

Muggle的博客 3468

手把手教你用Simulink+CANoe+Carsim搭建硬件在环仿真环境(避坑指南)

本文是一份详细的硬件在环仿真环境搭建指南,重点讲解如何将Simulink、CANoe和CarSim三大工具进行实战融合。内容涵盖软件版本兼容性、授权避坑、环境配置,并分步演示了从离线联合仿真到实现软实时同步的完整流程,旨在帮助汽车电子工程师高效构建稳定的HIL测试平台。

weixin_29092579的博客 403

【CTF-misc】java盲水印BlindWatermark工具使用

​ 盲水印是一种肉眼不可见的水印方式,对图片资源使用图片盲水印或者文字水印,借此避免数字媒体未经授权的复制和拷贝,可通过对原图进行解码操作,得到水印图来证明版权归属。 题目来源:NewStarCTF 2023 公开赛道 WEEK2|MISC:Jvav

qq_39972370的博客 6445

LWN: 确保kmalloc()分配是对齐的

Implementing alignment guarantees for kmalloc()October 18, 2019This article was contributed by Marta Rybczyńskakmalloc()是kernel中经常用到的针对小块目标进行内存分配的函数。在2019 Linux Storage, Filesystem, and Memory Managem...

Linux News搬运工 855

第二十七届华东杯数学建模A 题 跳台滑雪问题 完整思路模型及代码

考虑到滑行过程中的空气阻力和摩擦力对速度的影响,我们引入了不同姿态下运动员迎风面积和空气阻力系数的变化,利用牛顿第二定律建立加速度表达式,并通过数值模拟比较常见姿态下的终端速度。针对问题二,我们构建了二维空中飞行动力学模型,结合起跳速度、身体迎角、滑雪板倾角等因素,模拟运动员在空中飞行的轨迹与姿态变化,采用欧拉法对运动过程进行仿真,优化飞行路径和稳定性。仿真结果表明,运动员应在起跳后保持滑雪板与身体成“V”字形打开、重心略后倾的姿态,以增强升力、延长飞行距离并提高姿态得分。,并模拟出跳跃的轨迹和最终得分。

lichensun的博客 3209

nohup 不指定内存_深入理解连续地址内存分配(CMA)

嵌入式linux QQ交流群:175159209,欢迎爱好者加入交流技术问题!连续内存分配(简称CMA) 是一种用于申请大量的,并且物理上连续的内存块的方法,在LWN上可以追溯到2011年6月。原理虽简单,但是其实现起来却相当复杂,因为需要许多子系统之间相互协作。基于不同人的视角,有很多不同的事需要完成和注意。在本文中,我会描述如何使用CMA并且如何将其集成到一个特定平台。从设备驱动作者...

weixin_39531992的博客 707

Spring AI从入门到精通:构建智能Spring应用的全面指南

随着人工智能技术的快速发展,将大语言模型(LLM)与企业应用集成已成为趋势。Spring AI作为Spring官方推出的AI集成框架,为开发者提供了便捷、标准化的方式来构建智能应用。本文将从基础概念到高级应用,全面介绍Spring AI的核心功能与实践技巧。Spring AI 是 VMware 于 2023 年推出的开源框架,旨在简化大语言模型(LLM)与 Spring 应用的集成。它提供了统一的 API 抽象,支持多种 LLM 供应商,包括 OpenAI、Azure OpenAI、Hugging Face

qq_36929638的博客 1067

GD32F130之USART多机通信

简介 在多机通信中,一个从机应该只接收它需要接收的数据,且只应该在它需要接收数据时才检测串口。而始终接收RX线上的数据对从机来说是一种负担。 多机通信硬件设计 远距离方案:RS485 板级方案: 静默模式 静默模式有什么作用? 答:如果 USART 处于静默模式,所有的接收状态标志位将不会被置位。 如何进入静默模式? 答:软件可以通过将 USART_CMD 寄存器中MMCMD 位置 1 使 USART 进入静默模式。 如何从静默模式中唤醒? 答:有两种方式可选,①检测到总线

luliplus的博客 299

LWN: kmalloc( )确保对齐

点击上方蓝色字关注我们~Alignment guarantees for kmalloc()ByJonathan CorbetMay 8, 2019LSFMMkmall...

Linux News搬运工 1622

《网络安全自学教程》- OSI七层模型分层及作用,数据封装与解封过程,数据传输过程。

OSI分哪七层,每层的作用是什么,解释数据在七层模型中是怎样传输的,封包和解封过程,数据包在每一层是怎么封装和解封的。

wangyuxiang946的博客 1万+

Linux内存管理 CMA大段设备

在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,对于内核如果申请一块连续的内存空间该怎么处理呢? 首先向到的是利用内核提供的kmalloc申请,尽管kmalloc可以申请连续的内存空间,但是在长时间的测试中,会出现内存空间可能申请失败的情况,无法保证能成功分配。 使用memblock分配器中提供的方法,称为预留内存,但这么预留的内存只能被特定的Device驱动所使用,System不能分配这部分内容,会导致内存浪费 因此,内核设计者设计了

生活需要深度 2214

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

linux内存管理笔记(十一)---CMA

在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,对于内核如果申请一块连续的内存空间该怎么处理呢? 首先向到的是利用内核提供的kmalloc申请,尽管kmalloc可以申请连续的内存空间,但是在长时间的测试中,会出现内存空间可能申请失败的情况,无法保证能成功分配。 使用memblock分配器中提供的方法,称为预留内存,但这么预留...

奇小葩 4963

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LWN:利用 __GFP_UNMAPPED 减少direct-map 碎片化!

关注了就能看到更多这么棒的文章哦~Reducing direct-map fragmentation with __GFP_UNMAPPEDBy Jonathan CorbetMarch 20, 2023DeepL assisted translationhttps://lwn.net/Articles/926020/内核的直接映射(direct map)使得 kernel 可以在自己的地址空间内...

Linux News搬运工 1035

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

深入理解CMA

LinuxKernelMemoryManagement 摘要:连续内存分配(简称CMA) 是一种用于申请大量的,并且物理上连续的内存块的方法,在LWN上可以追溯到2011年6月。原理虽简单,但是其实现起来却相当复杂,因为需要许多子系统之间相互协作。基于不同人的视角,有很多不同的事需要完成和注意。在本文中,我会描述如何使用CMA并且如何将其集成到一个特... 连续内存分配(简称CMA)

gnnulzy的博客 2059

极客时间-左耳听风-程序员攻略-Linux系统、内存和网络

另外,本书针对当前网络应用中日益突出的安全问题,用了一整章的篇幅对计算机网络的安全性进行了深入讨论,而且把相关内容与最新网络技术结合起来阐述。,这是 HTTP 的一个比较新的协议,它于 2015 年被批准通过,现在基本上所有的主流浏览器都默认启用这个协议。下面是相关的学习资源。读 RFC 有几个好处,一方面可以学习技术,另一方面,你可以通过 RFC 学习到一个好的技术文档是怎么写的,还能看到各种解决问题的方案和思路。这本书中没有提到 HTTP/2 的事,但是可以让你了解到 HTTP 协议的绝大多数特性。

2401_88755455的博客 827

深入理解CMA【转】

转自:https://www.youkuaiyun.com/article/a/2016-07-07/15839383 摘要:连续内存分配(简称CMA) 是一种用于申请大量的,并且物理上连续的内存块的方法,在LWN上可以追溯到2011年6月。原理虽简单,但是其实现起来却相当复杂,因为需要许多子系统之间相互协作。基于不同人的视角,有很多不同的事需要完成和注意。在本文中,我会描述如何使用CMA并且如何将其集成到...

weixin_33875564的博客 358

C语言为何仍是操作系统内核开发的首选?内存管理与硬件交互的绝对优势

在计算机系统编程领域,内存管理和硬件交互是两大核心基础概念。内存管理涉及程序如何分配、使用和释放内存资源,直接关系到程序的性能和稳定性;硬件交互则决定了软件能否直接、高效地控制底层硬件设备。这些底层技术原理构成了操作系统、驱动程序和嵌入式系统等关键基础设施的基石,其技术价值在于实现对计算资源的极致控制和高效利用。在操作系统内核、嵌入式固件、高性能中间件等对性能、资源消耗和确定性要求极高的应用场景中,开发者需要一种能够提供直接内存访问、最小运行时开销和高效硬件抽象的语言。C语言凭借其指针操作、内存布局控制和贴

android_mylove的专栏 442

Linux系统编程入门:从基础到实践

Linux系统编程是深入操作系统底层的核心技术,涉及系统调用、进程管理和文件操作等基础概念。通过直接与内核交互,开发者能够高效控制硬件资源和系统功能,这在开发高性能服务器、嵌入式系统等场景中尤为重要。文章以文件复制工具为例,展示了如何使用open()、read()和write()等系统调用实现基础功能,同时强调了错误处理和内存管理的重要性。对于想要提升系统级编程能力的开发者,理解这些原理并掌握GCC、GDB等工具链的使用是必经之路。

weixin_34279246的博客 380

Linux DMA-BUF 软件框架分析

DMA-BUF 是 Linux 内核中跨设备、跨子系统共享缓冲区的通用框架。它解决的问题不是“如何分配一块内存”,而是“当一块内存已经由某个子系统拥有时,如何把它安全地交给其他设备或驱动访问”。在多媒体、显示、GPU、摄像头、视频编解码等场景中,同一帧图像或同一块数据经常需要在多个硬件模块之间流转。如果每个模块都复制一份,性能和内存占用都会很差。DMA-BUF 通过 fd 作为用户态句柄,通过作为内核对象,把 buffer 的所有权、映射、同步和生命周期统一起来。避免跨设备数据复制。

非专业业余程序员 534
上一篇: LWN:改进CPU漏洞防护措施的配置方式!
下一篇: LWN:MM 的多重奏(huge page, page promotion, KSM, BPF)!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值