Linux 回收内存到底怎么计算anon/file回收比例,只是swappiness这么简单?
概述
Linux内核为了区分冷热内存,将page以链表的形式保存,主要分为5个链表,除去evictable,我们主要关注另外四个链表:active file/inactive file,active anon和inactive anon链表,可以看到这主要分为两类,file和anon page,内存紧张的时候,内核开始从inactive tail定量回收page,那么这里面就有个很重要的选择:inactive file和inactive anon lru链表的回收比例到底怎么确定?稍微了解mm的肯定都知道内核有个回收倾向可以设置:swappiness,值越大代表更多的回收anon内存,相反,更倾向于回收非anon内存,但是内核控制两者回收比例仅仅是swappiness控制这么简单吗?在阅读v6.1内核发现,随着内核的不断发展和优化,两者回收比例不断的迭代,逐步考虑到更多的情况,本文将以v6.1源码,逐步揭开内核对于两种page回收比例控制的神秘面纱。
比例计算的核心源码

ap和fp分别表示 anon和file扫描回收的比重,其计算主要是涉及几个重要的元素:swappiness,file_cost和anon_cost。为了更好的理解这几个控制变量的意义,我们需要从内核回收两种页面的涉及思想上来考虑。
1. 回收file-backed page和anon page的IO成本不同,故引入swappiness。
比如内核在引入zram内存压缩技术之前,回收anon page的成本比较高,因为需要将内存通过IO写入磁盘,而file-backed文件页有可能遇到clean page不需要IO回写,而比如嵌入式往往都存在zram内存压缩技术,anon匿名内存得回收成本可能比file-backed page要低得,因为内存操作性能比IO性能更好,所以swappiness这个控制选项从另外一个角度理解:代表两种类型得IO成本。
swappiness的具体函数参见内核文档:

翻译:swappiness用于粗略得表示swap或者file-back page回收得IO成本,取值范围是0-200,如果是100代表内核得mm子系统认为内存回收两种page得IO成本是相当得。内核默认将该值设置60,这种情况内核认为swap的IO成本更高,但是对于存在内存swap的(比如zram或者zswap技术),超过100的值是值得考虑的,因为这种情况下swap是内存操作,性能更好,IO成本更低。
2. 内存回收要考虑refault概率和两种类型page pageout的数量
refault次数:
内核引入workingset算法后,可以精准的评估出来两种page的refault次数;如果refault次数越多,认为file-cost或者anon-cost数值越大(意味者要减少回收比例,否则频繁发生了refault影响性能)。
pageout数量:
内核也要避免某一种类型的page在疯狂的进行回收,尽量做到均衡,内核实现的时候pageout的page数量也作为一种参考变量,如果某一种类型的页面回收的过多也需要进行一定程度的抑制。
源码解析
源码分析部分我们主要关注file-cost和anon-cost数值的计算逻辑,根据上面分析refault次数和pageout次数都会影响cost数值的计算,下面我们
相关文章:
Linux 回收内存到底怎么计算anon/file回收比例,只是swappiness这么简单?
概述 Linux内核为了区分冷热内存,将page以链表的形式保存,主要分为5个链表,除去evictable,我们主要关注另外四个链表:active file/inactive file,active anon和inactive anon链表,可以看到这主要分为两类,file和anon page,内存紧张的时候,内核开始从inactive tail定…...
软件测试中的测试工具和自动化测试
1. 测试工具 测试工具也分为不同人员使用的 开发人员:测试框架,编写测试用例;各类线上dump分析工具如windgb;开发时的集成IDE工具如Visual Studio,idea等等 面向不同测试需求的测试工具 软件测试是软件开发生命周期…...
个人博客系统测试报告
个人博客系统测试报告 一.项目背景二.项目功能三.测试用例3.1 功能测试3.2 自动化测试(部分测试)3.2.1登陆页面3.2.2博客详情页3.2.3博客编辑页3.2.4个人列表页3.2.5测试结果 3.3 性能测试 一.项目背景 当学习完一项技能后,我们总会习惯通过博…...
高效搜索,提升编程效率
一、搜索效率 1.1魔法上网 网址: 一个很变态但可以让你快速学会计算机的方法…………_哔哩哔哩_bilibili 谷歌镜像: https://search.fuyeor.com/zh-cn/Google 谷歌学术: https://link.zhihu.com/?targethttps%3A//scholar.lanfanshu.cn/…...
Java编程技巧:文件上传、下载、预览
目录 1、上传文件1.1、代码1.2、postman测试截图 2、下载resources目录中的模板文件2.1、项目结构2.2、代码2.3、使用场景 3、预览文件3.1、项目结构3.2、代码3.3、使用场景 1、上传文件 1.1、代码 PostMapping("/uploadFile") public String uploadFile(Multipart…...
【蓝桥杯选拔赛真题63】Scratch云朵降雨 少儿编程scratch图形化编程 蓝桥杯选拔赛真题解析
目录 scratch云朵降雨 一、题目要求 编程实现 二、案例分析 1、角色分析...
【新版】系统架构设计师 - 软件架构的演化与维护
个人总结,仅供参考,欢迎加好友一起讨论 文章目录 架构 - 软件架构的演化与维护考点摘要软件架构演化和定义面向对象软件架构演化对象演化消息演化复合片段演化约束演化 软件架构演化方式静态演化动态演化 软件架构演化原则软件架构演化评估方法大型网站架…...
安卓循环遍历计时器
计时器循环遍历 计时器的使用 我习惯两种方式如下: 第一种使用 handler: 1,初始化 声明 public static final int REGULAR_TIME 1000; //1秒 时间间隔private Handler mUiHandler;private int index0;Runnable runnable new Runnable()…...
Docker-基本了解
Docker-基本了解 一、基本概念1、镜像2、容器 二、执行流程三、体系结构 一、基本概念 Docker是容器化平台,提供应用打包,部署与运行应用的容器化平台,应用程序通过docker engine(Docker 引擎获取可用资源)࿰…...
Leetcode383. 赎金信
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每…...
overleaf杂谈-Springer文献格式问题
目录 overleaf写作问题记录1.Latex中的%问题(文本变成灰色)2.Springer文献格式问题2.1 新建reference.bib2.2 谷歌学术搜索文章并引用2.3 复制BibTex2.4 复制进reference.bib2.5 在sn-article.tex的\end{document}前添加语句2.6 引用文献2.7 Springer模板…...
No148.精选前端面试题,享受每天的挑战和学习
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...
BASH shell脚本篇4——函数
这篇文章介绍下BASH shell中的函数。之前有介绍过shell的其它命令,请参考: BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 BASH shell脚本篇3——字符串处理 函数是代码重用的最重要方式。Bash函数可以定义为一组命令,在b…...
VisualStudio配置OpenCV环境
VS2022配置OpenCV环境 记录一下Windows上VS配置OpenCV环境的过程。(VS2022 OpenCV4.8) 一、下载OpenCV 从官网或者镜像网站下载Windows版OpenCV。4.8版本的文件为opencv-4.8.0-windows.exe 双击解压到自定义目录,我这边是:E:…...
C++手写NMS
文章目录 前言一、NMS是什么?二、代码展示三、代码实现思路总结 前言 目标检测模型推理后,一般都需要进行NMS操作进行多余框去重,板端部署一般不用opencv自带的NMS,所以记录下手写NMS的代码。 一、NMS是什么? 非极大…...
第9讲:VUE中监听器WATCH使用详解
目录 监听器介绍 监听普通属性 监听对象属性 监听路由属性监听器watch 监听器:它是侦听属性值或者计算属性的变化,一旦发生变化可以在函数中进行相应的操作,从而达到change事件监听的效果!监听器是一个对象,以 key-value 的形式表示。key 是需要监听的表达式,value 是对…...
微信小程序开发基础(一)认识小程序
微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。微信小程序是一种不用下载就能使用的应用,也是…...
LeetCode 1049. 最后一块石头的重量 II
1049. 最后一块石头的重量 II - 力扣(LeetCode) 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y&am…...
Golang中的类型转换介绍
Golang中存在4种类型转换,分别是:断言、显式、隐式、强制。下面我将一一介绍每种转换使用场景和方法 一、断言类型转换 主要是判断变量是否可以转换成某一类型。断言主要用于变量是interface{}类型(接口类型)的情况,…...
本人碰到的RN项目的坑
1.路径问题 路径不能含有中文 2.下载jar\aar包超时问题 手动下载:任意位置新建个文件夹,然后点击超时的jar包链接跳转到浏览器后下载到这个文件夹内,返回报错的地方找到报错的包名(com或者org开头的),然后去这个路径下找到对应的包名 C:\Users\22560\.gradle\caches\module…...
自感作为界面:哲学与自然科学的共同研究对象
自感作为界面:哲学与自然科学的共同研究对象——兼论“AI元人文”框架中的知识分工摘要在《AI元人文》所建构的理论框架中,“自感”(Selbstgefhl)被确立为前反思的、非对象化的存在元点。这一概念同时涉及两个截然不同却相互关联的…...
ViGEmBus技术指南:构建跨平台游戏控制器兼容解决方案
ViGEmBus技术指南:构建跨平台游戏控制器兼容解决方案 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 如何解决游戏控制器的跨平台兼容性难题&…...
2025豆包AI高阶视频教程精准提示词合集大模型通用附教程资料大全
📂 资源包含哪些硬核内容?(部分展示) 资源下载地址:https://pan.quark.cn/s/fdeeee266e5b 主要涵盖但不限于以下核心模块: 📖 【AI阅读大师】法! 🎨 【文生图魔方…...
高效部署Kafka Connect集群:AKHQ的5个进阶实战策略
高效部署Kafka Connect集群:AKHQ的5个进阶实战策略 【免费下载链接】akhq Kafka GUI for Apache Kafka to manage topics, topics data, consumers group, schema registry, connect and more... 项目地址: https://gitcode.com/gh_mirrors/ak/akhq Apache K…...
hiSHtory 配置管理完全指南:从基础设置到高级调优
hiSHtory 配置管理完全指南:从基础设置到高级调优 【免费下载链接】hishtory Your shell history: synced, queryable, and in context 项目地址: https://gitcode.com/gh_mirrors/hi/hishtory hiSHtory 是一款革命性的 shell 历史记录工具,它不仅…...
Python数据标准化全攻略:从原理到实践
在机器学习和数据分析领域,数据标准化是一项至关重要的预处理步骤。它能够将不同尺度的特征统一到相同的范围内,帮助模型更好地学习数据特征,提高训练效率和模型性能。本文将详细介绍数据标准化的概念、常用方法以及在Python中的实现方式。一…...
02-LangChain简单介绍、RAG开发
一、LangCain1、介绍LangChain由Harrison Chase创建于2022年10月,它是围绕LLMs(大语言模型)建立的一个框架。LangChain自身并不开发LLMs,它的核心理念是为各种LLMs实现通用的接口,把LLMs相关的组件“链接”在一起&…...
安规标准考核题库-1(IEC 62477-1:2012+AMD1:2022 )
本题库严格对标 IEC 62477-1:2012《电力电子变换器系统和设备安全要求 第 1 部分:总则》AMD1:2022 修订版,贴合储能双向 PCS 的设计、测试、认证全流程场景,分为判断题、单选题、多选题三类,所有题目均附标准条款依据与详细解答。…...
BetterNCM安装器终极指南:3分钟搞定网易云音乐插件管理
BetterNCM安装器终极指南:3分钟搞定网易云音乐插件管理 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM安装器是一款专为PC版网易云音乐用户设计的强大插件管理器…...
为什么要学习大模型?从新手到专家:AI大模型学习与实践完全指南
一、初聊大模型 1、什么是大模型? 大模型,通常指的是在人工智能领域中的大型预训练模型。你可以把它们想象成非常聪明的大脑,这些大脑通过阅读大量的文本、图片、声音等信息,学习到了世界的知识。这些大脑(模型&…...
