LWN: 使用DAMON调整LRU-list!

unity 腾讯地图sdk移动和缩放代码 unity 腾讯地图sdk 实现移动端 缩放 和 移动 阅读详情

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

LRU-list manipulation with DAMON

By Jonathan Corbet
August 22, 2022
DeepL assisted translation
https://lwn.net/Articles/905370/

DAMON 子系统在 5.15 发布周期中进入了内核,它使用了一些启发式方法来确定哪些内存 page 正在被使用。从一开始,它的目的就是要利用这些信息来参与到内存管理中。6.0 内核中包含了这个方向的另一个步骤,那就是让 DAMON 有能力在内核的 least-recently-used(LRU)列表中主动对 page 进行重新排列。

内核的内存管理开发者最希望的是能够知道哪些内存 page 的内容会在后续很快需要被访问;然后内核可以确保把这些 page 驻留在 RAM 中。不幸的是,目前的硬件无法提供这种信息,所以内存管理代码必须进行一些猜测。通常情况下,一个相对最合理的猜测是,最近被使用过的 page 可能很快会被再次使用,而那些已经有一段时间没有被访问过的 page 可能不再需要了。

LRU lists

这种方法效果很好,但仍有一个问题:内核对每个 page 的使用情况的追踪无法非常细致。如果记下每一次访问的话,就会使系统变慢,所以必须要采取其他一些措施。LRU list 是内存管理子系统试图以有效方式来回答这个问题的一个方案。

详细一点来说的话,每个内存区(memory zone)以及每个 memory cgroup 都有两个 LRU list。如果更简化来看的话,系统中有两个 LRU list,称为 "active" 和 "inactive" list。正常使用的 page 会被放在 active list 的头部。随着时间的推移,它们会随着其他 page 加入头部而向下移,尽管有些情况下某个 page 也是可以回到头部的。到达了 active list 尾部的 page 相对来说更有可能在最近一段时间内是没有被使用的,但这种判断并不是完全精确的。

内核有些时候会把一组 page 从 active list 的尾部取出来,把它们放在 inactive list 的头部。当这种情况发生时,这些 page 就被 "deactivated "了,这意味着它们在 page list 中被标记为 "不存在"。如果某个进程试图访问这样的 page,就会产生一个 soft page fault;然后内核会观察到这个 page 仍然在使用,并将其移回 active list。而留在 inactive list 中的 page,则会不断移动到这个 list 的尾部,在内核需要回收内存用于其他用途时,会对它们进行回收。

因此,LRU list 是决定哪些 page 留在 RAM 中、哪些 page 被回收的机制中的一个关键部分。尽管它们的名字是这样起的,但这些 list 充其量只是对最近使用最少(或最多)的 page 的粗略估计而已。更好的描述可能是 "最近注意到被使用的最少的(least recently noticed to be used)"。如果有一个更好的机制来理解哪些 page 是真正被大量使用的,那么就有可能使用这些信息来改进当前的 LRU list。

Reordering the lists

DAMON("Data Access MONitor")就是希望成为这种机制。通过一些聪明的算法(在 https://lwn.net/Articles/812707/ 文章中有描述),DAMON 试图更清晰地了解内存使用的实际情况,同时又不至于耗费太多 CPU 资源。DAMON 被设计成在要在生产系统(production system)中也要足够高效,同时又足够精确,从而可以改善内存管理决策。

5.16 内核中增加了 DAMOS("DAMON operation schemes"),它增加了一个基于 rule 的机制,只要满足相应的标准,就可以触发相应的动作。例如,DAMOS 可以被配置为将一个在过去 N 秒内没有被访问的区域传递给一个 madvise(MADV_COLD) 类似功能的函数调用。还有其他多种选项,都在 Documentation/admin-guide/mm/damon/usage.rst 中进行了详细描述。

在 6.0 合并的这部分工作给 DAMOS 增加了两个新的操作:lru_prio 和 lru_deprio。第一个操作将导致指定的 page 被移到 active list 的头部,使它们成为内核试图 deactivate 或 reclaim 回收的最后一个 page;而第二个操作就会 deactivate 指定的 page,使它们被移到 inactive list 中。换句话说,有了这个改动之后,DAMOS 就深入到了内存管理子系统中,使用其(可能是)更加具有优势的信息来对 LRU list 进行排序,使其更接近于未来的真实情况。如果系统遇到突如其来的内存压力,必须要迅速开始回收内存,那么这些排序就可能会变的非常有用。

作者 SeongJae Park 称这种机制为 "proactive LRU-list sorting" 或 PLRUS。他在 patch 的说明邮件中声称,如果调整得好的话,这种机制可以得到一些不错的结果。"简而言之,PLRUS 减少了 10%的 memory PSI(some),major page fault 数量减少了 14%,以及在内存压力下得到了 3.74%的速度提升"。这里的术语 "PSI(some)"是指由内核产生的 pressure-stall 信息,它是衡量进程在等待内存时被 delay 程度有多严重。

不过,他说的 "如果调整得好的话" 这句提醒很重要;DAMOS 有一套复杂的参数来描述触发动作的阈值,并限制 DAMOS 本身使用多少 CPU 时间。调整这些参数可能会导致内存管理子系统核心代码的工作方式发生重大变动。DAMOS 为一个了解内存管理如何工作并能准确测量变动效果的全职管理人员提供了很大的灵活性。它也让彻底破坏系统的性能变得更加容易。

为了帮助那些没有时间或能力来为他们的工作场景提出最佳 DAMOS 设置的管理员,Park 还增加了一个新的内核 module,叫做 damon_lru_sort。它使用 DAMOS 在一组 "保守" (旨在安全地提高性能同时最大限度地减少开销)的参数下执行 proactive LRU-list 排序。这个 module 可以让 LRU list 排序功能变得更容易使用,但它仍然有一些主要的 tuning 开关;文档中对它们进行了详细描述。

这个机制旨在解决一个类似于 multi-generational LRU 这个工作所解决的问题,目前看来后者有望在 6.1 中合并。multi-generational LRU 也试图能更准确地确定哪些 page 正在被使用,从而可以做出更好的 page 替换决策。关于如何处理 page 在各个 generation 之间的移动,有一些尚未确定的问题;有人说可以允许加载 BPF 程序来控制这些决策,但是 DAMOS 可能也可以提供帮助。这两种机制之间的目前还没有整合,但可能是一个值得增加的好功能。

这种调整内存管理的能力的出现,显然是一个信号,说明人们总是希望有更好的性能。它也可能表明,创建一个对所有工作场景都能发挥最佳性能的内存管理子系统已经超出了我们目前的能力。内核开发者倾向于不增加新的配置开关,其理论是内核应该能够很好地完成自我配置。但是,在这个领域中还在大量地增加新的开关。有些问题对于内核来说似乎还是太难了,不得不寻求 user space 的帮助来解决。

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

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

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

format,png

Spring AI Alibaba实战训练营-28 手把手教你用SAA+ Nacos 构建分布式 MCP 应用 本文介绍如何使用Spring AI Alibaba和Nacos构建分布式MCP应用,实现AI模型与工具服务的动态发现和调用。主要内容包括:1) 项目架构设计,包含MCP Server、Nacos注册中心和MCP Client三个核心组件;2) 环境准备要求,如Java 17+、Maven 3.6+、Nacos 3.1.0+等;3) 详细实施步骤:启动Nacos服务、注册MCP服务端、配置MCP网关聚合服务、设置MCP客户端发现机制。通过这种架构,开发者可以轻松扩展新工具服务,无需修改客户端代码,实现服务动态 阅读详情

相关推荐

关于旋转矩阵的左乘与右乘问题

最近在阅读框架源码时被旋转矩阵左乘右乘绕的云里雾里,故写下一篇记录一下,以防自己不长记性。

菜鸡正在学习 1万+

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

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

Linux News搬运工 1412

【MediaPipe实战】从零构建实时人脸关键点检测与表情分析系统

本文详细介绍了如何使用MediaPipe框架从零构建实时人脸关键点检测与表情分析系统。通过Python代码实现,系统能够精准检测468个3D人脸关键点,并实时分析用户表情,适用于智能交互应用。文章包含环境配置、核心实现、可视化技巧及性能优化等实战内容,帮助开发者快速掌握深度学习在计算机视觉中的应用。

weixin_30836759的博客 73

LWN:5.16 合并窗口,第二部分!

关注了就能看到更多这么棒的文章哦~5.16 Merge window, part 2By Jonathan CorbetNovember 15, 2021DeepL assisted tr...

Linux News搬运工 457

Python抓取摄像头图像,进行AI识别(一)

本文介绍了如何用Python获取海康威视摄像头的图像并进行AI识别。主要内容包括:1)准备工作,包括摄像头IP设置和密码重置方法;2)使用Python的Requests库通过ISAPI接口获取实时图像;3)示例代码展示如何保存摄像头图像。整个过程为后续AI图像识别提供了基础,通过简单的Python代码即可实现专业监控设备的图像采集功能。

Hahafantuan的博客 1513

一文搞定3D卷积

在讨论卷积核的时候,是不把channel维加进去的 核 = 一个可以滑动的窗口 窗口内不同位置数据之间的权值共享 3D卷积,卷积核会在3个方向上运动,那么卷积核的运动需要有三个自由度(一小块立方体,在一个大面包块内3个方向上滑动 2D卷积,卷积核只在2个方向上运动,因此只有两个自由度(一小片纸,在一大张纸内2个方向上滑动 1D卷积,卷积核只在1个方向上运动,因此只有一个自由度(一条滑窗,在一大长线上1个方向上滑动 一个卷积核运算一次 得到一个输出值 以上讨论了单个卷积核,接下来考虑多通道,一个卷积核对应一

njuptalex的博客 3万+

LWN:用DAMON来优化memory-management!

关注了就能看到更多这么棒的文章哦~Memory-management optimization with DAMONByJonathan CorbetFebruary 20, 2020...

Linux News搬运工 1028

MarkDown简介(深度解析MarkDown用法)

欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I...

酷酷的旭 7341

Linux kernel damon实现

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

py199122的博客 2581

使用Google Earth Engine(GEE)的Python API,您可以将经纬度坐标转换为Landsat影像的路径/行号

使用Google Earth Engine(GEE)的Python API,您可以将经纬度坐标转换为Landsat影像的路径/行号。在这个示例中,我们选择了一个位于加利福尼亚州旧金山市附近的点,其经度为-122.084,纬度为37.421998。首先,我们需要导入必要的库和模块。接下来,我们定义一个函数,该函数将接收经度和纬度作为输入,并返回对应的Landsat路径/行号。最后,我们提取路径和行号的值,并将它们作为结果返回。现在,我们可以使用这个函数来获取特定点的Landsat路径/行号。

VwajAlgorithm的博客 348

11、牛转录组分析的实用生物信息学流程

本文详细介绍了一套实用的牛转录组分析生物信息学流程,涵盖从数据提取、基因组索引生成、读取比对到单样本表达分析及差异表达分析的完整步骤。使用Angus和Brahman牛的RNA-seq数据作为示例,介绍了HTSEQ、featureCounts和StringTie等工具在基因表达计数中的应用,并结合edgeR和limma进行差异表达分析。文中提供了详细的命令行与R代码示例,包含常见问题解答与关键注意事项,帮助研究人员高效、准确地完成转录组数据分析。

ios99的博客 111

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的专栏 2076

【HALCON工业视觉应用探索】10. C#+Halcon 3D视觉实战:点云处理与三维测量工业指南(附完整代码与实操案例)

摘要:本文聚焦C#+Halcon在3D视觉领域的工业应用,从新手友好的“基础3D检测系统”切入,逐步深入“汽车铸件三维测量”等工业级场景。内容涵盖核心概念(点云数据结构、3D采集原理、坐标系统)、完整技术流程(数据采集→预处理→特征提取→三维测量→结果可视化)、工业级代码实现(多视角点云融合、微缺陷检测、高精度尺寸测量),以及现场落地关键技巧(硬件选型、标定流程、抗干扰优化)。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2004

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

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

望获实时Linux系统 1140

pscad IEEE标准系统搭建说明

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

怀旧版电脑GBC模拟器

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

Linux 认识系统服务(daemon)

文件:/usr/lib/systemd/system /安装软件后,默认的启动脚本都在这个目录下,这里的数据最好不要修改。文件:/run/systemd/system/系统执行过程中产生的服务脚本,这些脚本的优先级比文件目录:/usr/lib/systemd/system要高。文件:/etc/systemd/system/根据需求编写的执行脚本,就比如自己写的一些服务。文件:/etc/sysconfig/*所有服务的初始化的一些选项设置都在这个文件目录下面。文件:/var/lib。

weixin_53064820的博客 4803

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

linux下damon的实现

参考http://zxuhong.blog.51cto.com/368977/99283/ 注:Linux下可以直接调用damon函数来实现daemon进程,没必要重新实现,理解其原理即可。 在Linux中专门提供了一个函数来完成这个daemon化的过程,这个函数的原型如下 int daemon (int __nochdir, int __noclose); 如果__noc

wclin88的专栏 3673

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

基于 DAMON 的主动式内存回收(DAMON_RECLAIM)内核模块完全指南

DAMON-based Reclamation(DAMON_RECLAIM)是 Linux 内核中一个面向"轻度内存压力下的主动式、轻量级回收"的静态内核模块:它利用 DAMON(Data Access MONitor)监测物理内存的访问模式,找出长期未被访问的冷内存区域并主动换出(page out)。本文以 [reclaim.rst](https://link.gitcode.com/i/5c1

gitblog_00364的博客 889

linux daemon简介

一、什么是daemon?我们先来简单介绍下什么是服务(service)。Linux系统可以提供很多系统或网络功能(例如http,ftp,mysql等),提供这些功能当然需要运行一些程序,这些运行的程序我们称为进程,也就是说系统中运行的进程提供了功能,这些进程就是服务。例如:提供了http功能的进程就是http服务。 服务可以说是某一进程,而进程是需要程序去运行产生,也就是说程序运行提供某种服务,这些

Lvnux的专栏 1万+

linux daemon 进程

daemon 进程说明

bzbaiyanchao的博客 2408

浅析Linux中的Daemon

学Redis的过程中看到教程里说Redis服务端程序是以非daemon形式启动的,联想到Docker教程中docker服务端是以daemon形式启动的,于是想搞明白这个daemon到底是个啥玩意儿。

m0_50867847的博客 1786

Linux下Daemon的实现

注:Linux下可以直接调用damon函数来实现daemon进程,没必要重新实现,理解其原理即可。 在Linux中专门提供了一个函数来完成这个daemon化的过程,这个函数的原型如下 int daemon ( int __nochdir, int __noclose) ; 如果__nochdir的值为0,则将切换工作目录为根目录;如果__noclose为0,则将标准输入,输

木木 5799

Linux 守护进程daemon

Daemon程序简介         Daemon是长时间运行的进程,通常在系统启动后就运行,在系统关闭时才结束。一般说Daemon程序在后台运行,是因为它没有控制终端,无法和前台的用户交互。Daemon程序一般都作为服务程序使用,等待客户端程序与它通信。我们也把运行的Daemon程序称作守护进程。       比如,我们的网络服务程序,可以在完成创建套接口,绑定套接口,设置套接口为监听模式后

少想多做 1984

linux服务deamon

1、分两类:stand alone,super daemon(由xinetd这个deamon来负责) 2、相关目录: /etc/init.d/* :启动脚本放置处 /etc/sysconfig/* :各服务的初始化环境设定档 /etc/xinetd.conf, /etc/xinetd.d/* :super daemon 设定档 /etc/* :各服务各自的设定档 /var/lib/*

垃圾桶丁 1710

Linux 文件权限chmod命令

概述Android开发的过程中,经常需要从手机中导出文件(非存储卡中的,比如/data/data/包名/databases/下的数据库文件,手机需要root),会出现permission denied或remote object “*” does not exist的错误,如下图所示: permission denied错误,有些时候,是由于手机没有root导致的,手机如何root,还请自行去百度

wlwh90的专栏 2万+

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 389

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 219
上一篇: LWN:采用 per-VMA锁进行并发page-fault处理!
下一篇: LWN:让 i_version 更好!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值