LWN:用DAMON来优化memory-management!

Preparing DAMON for future memory-management problems Park 表示,目前已有多个方案在探讨如何获取这些数据,包括工作集报告、来自 CXL 控制器的热度监测、访问位扫描(当天早些时候曾讨论过)、AMD 的基于指令采样功能提供的数据、多代 LRU 提供的数据等等。他还表示,随着来自多个来源的访问数据越来越细粒度,DAMON 所跟踪的区域将变得更细,整体数据密度更高,DAMON 的跟踪负担也将随之增加。他希望合并自己在生成 NUMA 使用率和空闲空间目标度量方面的工作,并实现一个“开箱即用”的分层模块,适合主线内核集成,能自动识别系统的内存层级。 阅读详情

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

Memory-management optimization with DAMON

By Jonathan Corbet
February 20, 2020

原文来自:https://lwn.net/Articles/812707/

memory management(内存管理)其实在很大程度上是依靠预测来做决策的:哪些memory page会在近期被某个进程访问?可惜,做好预测是非常难的,尤其是这些都是针对未来的一些事件的。既然没有人能从未来传递这些信息给我们,那么memory-management subsystem就只能通过观察过去一小段事件内的行为来假设这种行为模式会保持下去。不过,kernel的memory management决策对user space来说是透明不可见的,因此经常看到这些决策得到的性能表现不是最优的。最近SeongJae Park就提出两个patch set,试图让memory-usage的模式对user space课件,让user space可以相应地调整memory-management决策。

这个新机制的核心就是data access monitor,DAMON。它可以把memory-access pattern暴露给user space。从概念上来说,这个动作非常简单,DAMON会先把一个进程的地址空间分割成许多同等大小的region(区域),然后监控对每个region的访问,输出一个直方图来展示对各个region的访问次数。读取到这个信息的用户(可以是user space也可以是kernel里)就可以要求来优化这个进程对memory的使用。

当然,现实情况总是更加复杂的。目前的硬件能支持非常巨大的地址空间,其中绝大多数是从来用不到的地址。如果简单把这么大的地址空间平分为1000个region,那么肯定会只有少数几个region是真正有访问的。DAMON会先把地址空间分成3个chunks(大块区域),近似于对应着text, heap和stack区域。只有这些区域才会进行访问监测。

每个region里面,DAMON都会记录访问的次数。如果监测某个region里面的全部page的访问,那可就有点浪费资源了。DAMON的一个主要设计目标就是希望能在production workload(生产环境里的真实工作负载)场景下也能高效率的采集到信息。这个目标是通过一个假设来实现的:假设一个region中,所有page都有相同的访问模式,这样的话,只需要监控一个page就够了。这样一来,在每个region里面,会随机选择一个page,在bitmap中把它对应的“accessed(访问过)”bit先清零,然后时不时地检查一下。如果这个page被访问过了,那么就算作这个region都被访问过了。

如果被监控的进程愿意把它自己的memory-access pattern都排好,按照DAMON来选择的region挨个访问,那就太好了。不过实际上当然很少有这么好的事。所以,这些平均分割好的region很可能没法跟真正的memory访问对应上。DAMON会试着在此进程执行的过程中来动态调整这些region的划分,从而来弥补原方案的缺点。那些非常频繁访问到的region,会被分成更小的区域,而那些很少用到的区域则合并成大块的block。一切正常运行的话,随着时间推移,结果就会聚焦在目标进程地址空间里的真正热点区域上。

为了能更好地控制这个过程,DAMON在debugfs文件系统里面创建了一些虚拟文件。DAMON并没有配置访问权限,不过这些文件缺省是只有root权限的用户才可以访问。所有相关的参数——包括目标进程,region的数目,采样和汇聚的周期——都可以通过写这些文件来配置。最终数据也可以通过debugfs读出来。也可以直接让kernel把采样出来的数据直接写入文件,这样后续就可以慢慢处理了。还可以让用户attach到一个tracepoint上,就能随着数据的产生,实时收到这些数据。这样一来perf工具就可以直接利用这个功能了。

不过这个获取的数据本质上是个直方图,每个memory region都有一个数据,记录了访问到这个区域的数量。这个数据可以人工分析,也有一个sample script可以把它送给gnuplot来图形化展示出来。Park认为这类信息会非常有用:“为了评估这些监控数据有多大用处,我们利用DAMON的输出对9种memory intensive(访存密集型) workload在内存紧张的条件下进行了优化。具体来说,我们利用DAMON数据找到了每种workload中经常被访问到的memory region,然后用mlock()系统调用来保护这些区域。优化过的软件基本上在内存紧张时都有性能提升(最高的有2.55倍,平均1.65倍)。”

这种性能提升,已经足够说明花时间分析进程的memory pattern是非常值得的。甚至,如果kernel能自己搞定这个工作的话那就更完美了。毕竟这本来就是memory-management subsystem本来应该解决的问题。作为在这个方向上的尝试,Park又发布了另一个patch set,实现了“data access monitoring-based memory operation schems”。这个机制能让用户告诉DAMON针对某种特殊的access pattern应该采取什么应对措施。这也是通过一个新增的debugfs文件(“schemes”)来配置的,它可以接受这样的输入:

    min-size max-size min-acc max-acc min-age max-age action

针对那些region length在min-size和max-size之间、访问次数在min-acc和max-acc之间的region,就会应用这条规则。这些访问次数统计需要满足积累时间在min-age和max-age之间。region的"age"在每次某个大变动(比如应用了一个action,或者调整了region size)的时候都会被重置。

action,目前来说只是针对此region发起的madvise()系统调用的一个命令,可以是MADV_WILLNEED、MADV_COLD、MADV_PAGEOUT、MADV_HUGEPAGE、MADV_NOHUGEPAGE。举例来说,我们可以利用这种类型的action来明确要求一个很少用到的region被换出(swap out),也可以用它来要求用huge page来存放hot region(热点区域)。对这个patch set进行review时,也有人提出mlock可以作为一个action,不过目前还没有实现进去。

这种机制肯定会对开发者针对自己特有的workload来调试memory-management subsystem有很大帮助。这样也引起了一个有趣的问题:既然kernel可以用来自己tune好参数来达到更好的memory-management效果,那么为什么这不能作为memory-management subsystem本身的一部分呢?像现在这样,把它作为一个单独模块开发出来,对于memory-management开发者来说肯定是很有用的,他们都喜欢尝试各种不同的新想法。不过肯定有人会认为,尽管现在这个调优工作有一个监测系统可以帮助进行了,但是在production system里面,一切应该都一上来就能正常工作,不需要人工参与这些调优工作。所以,DAMON现在看来是个很有用的工具,不过肯定也有不少用户会希望能把DAMON在今后的某一天废弃掉,大家也应该可以理解这些用户的想法吧。

译者注:patch作者sjpark在LWN文后也有回复,一方面提供了更多图片帮助大家理解DAMON的效果,另一方面,针对LWN编辑的问题“为何不能把它放到memory-management subsystem里面去”,他的回答是:“DAMON提供了两种接口,debugfs和tracepoint的接口都是供有root权限的程序,Profiler等使用的。另外还提供了一个kernel代码可编程的接口,用这个接口的话,memory-management subsystem就可以利用DAMON了。”

译者再注:看完全文的朋友的,评一评吧?

全文完

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

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

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

Android 中app内存回收优化(二):S 版本 Android Q 中新增了framework 端app 内存回收优化方案。当app 的 oom adj 发生特定变化时,framework 端会对应用的内存进行处理。随着版本的演变,这部分优化工作也一直在完善,笔者将针对Android R和Android S对该部分的优化流程分别进行详细地剖析。在上一文中,针对Android R版本进行了详细的剖析,本文继续剖析 Android S 版本。 阅读详情

相关推荐

c++内存优化方法 Efficient Memory Management

这篇文章详细说明了c++优化中,进行内存优化的方法

Linux kernel damon实现

一:简介 DAMON :Data access monitor。是Linux kernel新提供的内存访问监控框架。它的核心思想是使用一种采样(sampling)技术来确定哪些内存是正在使用的,哪些是正在闲置的。进程的虚拟地址空间或者全局物理地址被分成不同的区域(region),划分出来的区域的 size 并不相同,而是根据活跃情况来划分的。接下来随着时间的推移会对最繁忙的区域进行更细地划分,从而进行更精细的监控。在每个区域内会随机选择一个 page 进行监控,它的活跃程度就被认为是代表了整个区域的情况。

py199122的博客 2581

Centos7 XFS(dm-0):Internal error XFS_WANT_CORRUPTED_GOTO

在k8s的道路上我们都是小白,每天启动虚机都会遇到各种各样的问题,这不。部署的k8s虚机启动发现操作系统启动异常,提示如下报错信息。进入/dev/mapper目录下,查询目录下路径信息。可以通过对文件系统进行修复操作,操作如下。重启完成后虚机恢复正常登录。

hedao0515的专栏 4583

linux data access monitor(DAMON)

­­­­­­­­DAMON(data access monitor)简介: 第一个版本提交时间为2020/1/10,功能在持续不断的完善。 DAMON是一个用于Linux内核的数据访问监控框架子系统,它的设计核心是与地址空间无关的。DAMON的核心机制称为“Region Based Sampling(基于区域的采样)”和“Adaptive Regions Adjustment(自适应区域调整)”(详情请参考‘mechanisms.rst’补丁集中的第11个补丁)。 特点: -精确:(监控信息对DRAM

zqh1630的专栏 2077

破解雪球网acw_sc__v2加密与无限debugger反爬策略

本文详细解析了雪球网的反爬机制,重点破解了其核心的acw_sc__v2加密参数与无限debugger反调试策略。通过实战案例,从抓包分析、逆向调试到算法还原,提供了完整的Python代码实现,帮助开发者掌握应对类似加密反爬的通用方法。

weixin_29207533的博客 1897

Xilinx FPGA平台DDR3设计保姆式教程(3)MIG IP核使用教程及DDR读写时序

干货来了,用DDR搬砖,只需要会用IP就好,Xilinx官方YYDS! ----------------------------------------------------------------------------------------------------------------- 汇总篇: Xilinx平台DDR3设计保姆式教程(汇总篇)——看这一篇就够了 ----------------------------------------------------------...

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 2万+

LWN: 使用DAMON调整LRU-list!

关注了就能看到更多这么棒的文章哦~LRU-list manipulation with DAMONBy Jonathan CorbetAugust 22, 2022DeepL assisted translationhttps://lwn.net/Articles/905370/DAMON 子系统在 5.15 发布周期中进入了内核,它使用了一些启发式方法来确定哪些内存 page 正在被使用。从一开...

Linux News搬运工 715

Ceres&OpenCV 单目相机标定(论文复现)

Ceres&OpenCV 单目相机标定(论文复现)

dayuhaitang1的博客 370

Linux内核中内存管理相关配置项的详细解析16

Linux内核中内存管理相关配置项的详细解析16

phmatthaus的专栏 995

操作系统实验四 进程运行轨迹的跟踪与统计(哈工大李治军)

实验4 进程运行轨迹的跟踪与统计 实验目的 掌握 Linux 下的多进程编程技术; 通过对进程运行轨迹的跟踪来形象化进程的概念; 在进程运行轨迹跟踪的基础上进行相应的数据统计,从而能对进程调度算法进行实际的量化评价,更进一步加深对调度和调度算法的理解,获得能在实际操作系统上对调度算法进行实验数据对比的直接经验。 实验内容 进程从创建(Linux 下调用 fork())到结束的整个过程就是进程的生命期,进程在其生命期中的运行轨迹实际上就表现为进程状态的多次切换,如进程创建以后会成为就绪态;当该进程被调度以

leoabcd12的博客 4652

【Bug已解决】Codex CLI 报错 You‘ve hit your usage limit 解决方案

Codex CLI 密集使用时触发 You've hit your usage limit 限流报错,本质是订阅套餐额度机制在正常发挥作用。文中给出等待滚动重置、拆分大任务、主动管理上下文、升级套餐、团队排队机制等完整解决方案。

博客 1万+

damo:数据访问监测工具

damo:数据访问监测工具 项目介绍 damo是一款用户空间工具,用于监测和分析系统或工作负载的数据访问模式,以便进行数据访问感知的内存管理优化。damo是DAMON(Data Access Monitoring)项目的一部分,能够帮助开发者和系统管理员更好地理解内存访问行为,进而优化内存使用,提高系统性能。 项目技术分析 damo的核心技术是DAMON,它通过在内核空间运行,捕捉和记录进程对内存...

gitblog_00190的博客 957

【光斑定位】空间激光通信、光斑定位、CCD、光斑定位——13000字

0.完整源码获得方式 订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码 ----------------------------------------------------------------- 空间激光通信是指以光波作为载波进行数据传输的一种通信方式。目前,空间激光通信己成为人们关注的焦点。在空间激光通信系统中,光斑定位是是一项关键技术。 本论文首先对国内外空间激光通信系统的研究现状进行了阐述,论述了空间激光通信的理论只是,并对CCD成像原理,...

FPGA/MATLAB学习教程/源码/项目合作开发 1289

LWN:内核5.4版本合并窗口——第二部分

点击上方蓝色“Linux News搬运工”关注我们~5.4 Merge window, part 2ByJonathan Corbet译者按:本文有两个笑话,看得懂的才...

Linux News搬运工 422

Python学习第32天:Web前端入门

本文介绍了Web前端开发三大核心技术:HTML、CSS和JavaScript。首先概述了HTML的发展历程和HTML5新特性,详细讲解了常用HTML标签如文本、列表、链接、图像、表格、表单等。其次介绍了CSS的基础语法、选择器、颜色字体设置、盒子模型和布局定位方法。最后简要提及JavaScript为网页添加交互功能的作用。文章为Python开发者提供了前端技术的基础知识,帮助理解网页的结构、样式和行为实现原理。

tigerhhzz的博客 1910

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【实时Linux实战系列】利用 DAMON (Data Access MONitor) 优化内存布局

Linux 5.15引入的DAMON框架是一个轻量级内存访问监控工具,通过多粒度采样和自适应区域调控机制,实现高精度冷热页识别。DAMOS引擎支持基于实时访问模式的自适应内存优化,包括冷页回收、大页合并和NUMA热页迁移。安装配置后,可通过sysfs接口启用监控、分析数据,并结合madvise()系统调用优化内存布局。该框架特别适用于数据库、AI推理等内存密集型应用,能显著提升系统性能,但需注意平衡性能与资源消耗。实践建议包括熟悉配置参数、分阶段优化和定期评估效果。

望获实时Linux系统 1140

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

linux memory monitor 详解

内存是Linux内核所管理的最重要的资源之一。内存管理系统是操作系统中最为重要的部分,因为系统的物理内存总是少于系统所需要的内存数量。虚拟内存就是为了克服这个矛盾而采用的策略。系统的虚拟内存通过在各个进程之间共享内存而使系统看起来有多于实际内存的内存容量。Linux支持虚拟内存, 就是使用磁盘作为RAM的扩展,使可用内存相应地有效扩大。核心把当前不用的内存块存到硬盘,腾出内存给其他目的。当原来的内...

weixin_33743661的博客 316

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

解决Memory_manage蓝屏问题

        电脑经常堡Memory_manage蓝屏错误,开始以为是系统的问题,从win10 v1803、v1809、v1903一直换到v1909版本,都报错,把系统改成win7也报错,换了显卡驱动也有该错误,从而开始怀疑是硬件问题。         既然报Memory_manage,从字面上理解就是内存管理出错,...

sanqima的专栏 6704

0x80004005错误代码解决方法_win10待机蓝屏MEMORY_MANGMENT错误代码的解决方法

电脑换完nvme固态硬盘后经常待机蓝屏,报错MEMORY_MANGMENT,查阅了好多网友建议,微软客服也问了,都无法解决。最后仔细想了想,换完固态才有这个报错,且只有待机很长一段时间才会蓝屏,因此判断可能和固态的某个休眠功能有关,综合一个网友的建议,最后修改注册表:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesamdsbsSettingsCAM...

weixin_39753674的博客 619

LWN:PID的复仇!以及process_madvise(), pidfd capabilities

关注了就能看到更多这么棒的文章哦~process_madvise(), pidfd capabilities, and the revenge of the PIDsByJonath...

Linux News搬运工 2116

Linux阅码场 - Linux内核月报(2020年06月)

关于Linux内核月报Linux阅码场Linux阅码场内核月报栏目,是汇总当月Linux内核社区最重要的一线开发动态,方便读者们更容易跟踪Linux内核的最前沿发展动向。限于篇幅,只会对...

宋宝华 1752

LWN: 利用 DAMON 进行内存主动回收!

关注了就能看到更多这么棒的文章哦~Using DAMON for proactive reclaimBy Jonathan CorbetJuly 23, 2021DeepL assiste...

Linux News搬运工 1412

Android内存优化之OOM

Android内存优化之OOM Android的内存优化是性能优化中很重要的一部分,而避免OOM又是内存优化中比较核心的一点,这是一篇关于内存优化中如何避免OOM的总结性概要文章,内容大多都是和OOM有关的实践总结概要。理解错误或是偏差的地方,还请多包涵指正,谢谢! (一)Android的内存管理机制 Google在Android的官网上有这样一篇文章,初步介绍了Andr

util_c的专栏 981

Java Memory Management and Optimization

Java Memory Management and Optimization

1296

内存优化总结:ptmalloc、tcmalloc和jemalloc

转载于:http://www.cnhalo.net/2016/06/13/memory-optimize/ 概述 需求 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越重要,选择合适的内存管理算法会带来明显的性能提升。 比如nginx, 它在每个连接accept后会malloc一块内存,作为整个连接生命周期内的内存池。 当HTTP请求到达

junlon2006的博客 7万+
上一篇: LWN:《BPF Performance Tools》介绍!
下一篇: watch_mount(), watch_sb(), and fsinfo() (again)
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值