linux kernel物理内存概述(五)

目录

概述

一、快速路径分配

1、get_page_from_freelist

2、rmqueue()函数

二、慢速路径分配

1、分配流程

三、direct_compact


概述

物理内存分配步骤

1、初始化,参数初始化

2、内存充足,快速分配 get_page_from_freelist

3、内存压力大,慢速分配 __alloc_pages_slowpath

4、内存紧张,内存规整,direct_compact

一、快速路径分配

快速主要在WMARK_LOW水线上快速扫描各个内存区域是否有足够的内存空间,如果有则从伙伴系统中申请,如果没有则返回

1、get_page_from_freelist
  • 遍历zonelist中的zone,扫描zone的方向从高端到低端
  • 大部分从首选的zone扫描,而不是遍历所有;首选的计算,通过gfp_mask换算,参考gfp_zone()宏和first_zones_zonelist()宏
  • alloc_context 函数,确定了从哪个zone开始扫描和分配内存的迁移类型等信息;
  • 在分配之前判断zone的水位情况以及是否满足分配连续大小内存块的需求。函数zone_watermark_ok检查水位,即使函数判断成功,最终也可能分配失败,原因1,内存外碎片化严重,2、可能无法借用其他迁移类型的内存,__requeue_fallback函数有处理过程

如果满足水线要求,则调用rmqueue进入伙伴系统分配

2、rmqueue()函数
  • 从伙伴系统中取出内存,若需要的内存块不能满足,从大内存块中取。如order=5内存不足,则向6中取,6中取出来从空闲链表中取出,把其中一块分配出去,把剩余的添加到order空闲链表中。
  • 处理器分配单个物理页面(order=0),调用rmqueue_pcplist函数从Per-CPU变量per_cpu_pages中分配。这个数据结构有单页面列表,分配效率高,减少对zone相关锁的操作。每个zone里有一个这样的Per-CPU变量

分配成功后prep_new_page初始化分配的page

二、慢速路径分配

非常复杂,包含异常处理,GFP_  ALLOC_掩码处理;内存回收 内存规整 OOM 等

__alloc_pages_slowpath

分配流程如下:

        慢速路径初始化参数

 retry_cpuset:

        调整内存分配策略alloc_flags,采用更加激进方式

        内存分配主要在允许的CPU相关联的NUMA节点上

        内存水位线下调至WMARK_LOW

        唤醒所有kswapd进程进行异步内存回收

        触发直接内存整理direct_compact获取更多内存

 retry:

        进一步调整内存分配aloc_flags,使用更加激进的内存分配手段

        在内存分配时忽略水位线

        直接触发内存回收direct_reclaim

        再次触发直接内存整理direct_compact

OOM机制

 nopage:

        以上仍然不能分配,如果设置__GFP_NOFAIL不允许失败,则不停重试以上分配过程

 fail:

        分配失败,输出经过信息。

 got_pg

        内存分配成功,返回新申请的内存块

return page;

三、direct_compact

在页面回收时,把可移动的聚在一起,不可以移动的聚在一起,去碎片化,然后进行成块回收。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/430877.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DxO PhotoLab 7:影像之美,源于细节之魅 mac/win激活版

DxO PhotoLab 7是一款功能强大的专业摄影后期处理软件,专为摄影师设计,以帮助他们实现卓越的图像质量和效果。该软件以其卓越的算法和用户友好的界面,为摄影师提供了一个全面而灵活的解决方案,让每一张照片都能发挥出其最大的潜力…

HCIA-HarmonyOS设备开发V2.0证书

目录 一、不墨迹,上证书二、考试总结三、习题四、知识点五、坚持就有收获 HCIA-HarmonyOS Device Developer V2.0 开发者能力认证考试已通过。 一、不墨迹,上证书 一个多月的努力,验证了自己的学习成果,也认识到自己有待提升之处…

D-ID Studio:数字身份认证的新纪元

随着科技的飞速发展,数字身份认证已逐渐成为我们日常生活中不可或缺的一部分。在这个背景下,D-ID Studio以其前沿的技术和创新的解决方案,正引领着数字身份认证的新纪元。 D-ID Studio是一个功能强大的在线平台,专注于提供全面的…

区间dp-

间dp就是在区间上进行动态规划,求解一段区间上的最优解。主要是通过合并小区间的最优解进而得出整个大区间上最优解的 dp 算法。 既然让我求解在一个区间上的最优解,那么我把这个区间分割成一个个小区间,求解每个小区间的最优解,…

在 Rust 中实现 TCP : 3. TCP连接四元组

连接四元组 我们的项目已经取得了很大的进展——接下来能够开始解决 TCP 协议的实现问题。下面将讨论 TCP 的一些行为及其各种状态。 在多任务操作系统中,各种应用程序(例如 Web 服务器、电子邮件客户端等)需要同时进行网络访问。为了区分这…

openGauss学习笔记-236 openGauss性能调优-SQL调优-Query执行流程

文章目录 openGauss学习笔记-236 openGauss性能调优-SQL调优-Query执行流程236.1 Query执行流程236.1.1 调优手段之统计信息236.1.2 调优手段之GUC参数236.1.3 调优手段之底层存储236.1.4 调优手段之SQL重写 openGauss学习笔记-236 openGauss性能调优-SQL调优-Query执行流程 S…

如何选择程序员职业赛道

目录 前言1 个人技能分析1.1 技术栈评估1.2 经验积累1.3 数据科学能力 2 兴趣与价值观2.1 用户交互与界面设计2.2 复杂问题解决与系统优化 3 长期目标规划4 市场需求分析4.1 人工智能和云计算4.2 前沿技术趋势 5 就业前景5.1 前端在创意性公司中的应用5.2 后端在大型企业中的广…

全面分析vcruntime140_1.dll无法继续执行代码的处理方法,3分钟修复vcruntime140_1.dll

如果系统弹出一个错误警告,指出“vcruntime140_1.dll无法继续执行代码”,这通常意味着您的Windows系统中缺失了一个关键的文件,或者该文件已损坏。​vcruntime140_1.dll​是随Visual C Redistributable for Visual Studio 2015, 2017和2019提…

【更新2022】各省数字经济水平测算 原始数据+结果 2011-2022

数据说明:参照赵涛等(2020)的文章,利用熵值法和主成分对省市数字经济水平进行测算,原始数据来自第五期北大数字普惠金融指数,含原始数据,以及熵值法、主成分两种测算结果。一、数据介绍 数据名…

无人机/飞控--ArduPilot、PX4学习历程记录(1)

本篇博客用来记录个人学习记录,存放各种文章链接、视频链接、学习历程、实验过程和结果等等.... 最近在整无人机项目,接触一下从来没有接触过的飞控...(听着就头晕),本人纯小白。 目录 PX4、Pixhawk、APM、ArduPilot、Dronecode Dronekit…

Linux 设置快捷命令

以ll命令为例: 在 Linux 系统上,ll 命令通常不是一个独立的程序,而是 ls 命令的一个别名。 这个别名通常在用户的 shell 配置文件中定义,比如 .bashrc 或 .bash_aliases 文件中。 要在 Debian 上启用 ll 命令,你可以按…

鸿蒙 Stage模型-AbilityStage、Context、Want

前提:基于官网3.1/4.0文档。参考官网文档 基于Android开发体系来进行比较和思考。(或有偏颇,自行斟酌) 一、 AbilityStage 1.概念 AbilityStage是一个Module级别的组件容器,应用的HAP在首次加载时会创建一个AbilitySt…

怎么写苹果群控核心功能的源代码!

随着移动设备的普及和技术的不断发展,苹果设备群控技术成为了许多开发者关注的焦点,苹果群控技术允许开发者通过编写源代码,实现对多台苹果设备的集中管理和控制。 一、了解苹果群控技术的基本原理 在编写苹果群控核心功能的源代码之前&…

书生浦语全链路开源体系

推荐阅读论文 A Survey Of Large Language Models 书生浦语开源的模型 从模型到应用 书生浦语开源体系 书生万卷开源数据集 除此之外还有OpenDataLab国内数据集下载网站。 预训练框架InterLM-Train 微调框架XTuner 评测工具体系 国内外常见的大语言模型评测基准&#xff1a…

YOLOv8独家原创改进:特征融合涨点篇 | 广义高效层聚合网络(GELAN) | YOLOv9

💡💡💡本文独家改进:即结合用梯度路径规划(CSPNet)和(ELAN)设计了一种广义的高效层聚合网络(GELAN),高效结合YOLOv8,实现涨点。 将GELAN添加在backbone和head处,提供多个yaml改进方法 💡💡💡在多个私有数据集和公开数据集VisDrone2019、PASCAL VOC实现…

基于华为atlas的unet分割模型探索

Unet模型使用官方基于kaggle Carvana Image Masking Challenge数据集训练的模型。 模型输入为572*572*3,输出为572*572*2。分割目标分别为,0:背景,1:汽车。 Pytorch的pth模型转化onnx模型: import torchf…

bun 单元测试

bun test Bun 附带了一个快速、内置、兼容 Jest 的测试运行程序。测试使用 Bun 运行时执行,并支持以下功能。 TypeScript 和 JSX生命周期 hooks快照测试UI 和 DOM 测试使用 --watch 的监视模式使用 --preload 预加载脚本 Bun 旨在与 Jest 兼容,但并非所…

北京Excel表格线下培训班

Excel培训目标 熟练掌握职场中Excel所需的公式函数计算,数据处理分析,各种商务图表制作、动态仪表盘的制作、熟练使用Excel进行数据分析,处理,从复杂的数据表中把数据进行提取汇总 Excel培训形式 线下面授5人以内小班&#xff…

分享Web.dev.cn中国开发者可以正常访问

谷歌开发者很高兴地宣布,web.dev 和 Chrome for Developers 现在都可以通过 .cn 域名访问,这将帮助中国的开发者更加容易获取我们的内容。 在 .cn 域名上,我们已向您提供所有镜像后的内容,并提供支持的语言版本。 Web.dev 中国开…

uipath调用js代码

1,调用js代码,不带参数,没有返回值 为了去掉按钮的disabled属性 function(){ document.getElementsByClassName(submitBtn)[0].removeAttribute(disabled); } 2,调用js代码,带参数,没有返回值 输入参数&a…
最新文章