linux kernel物理内存概述(五)

news2024/11/18 4:28:20

目录

概述

一、快速路径分配

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.coloradmin.cn/o/1492430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从一个word里面复制表格到另一个word时,表格变形的问题

复制过来保留源格式,检查段落、页边距里面的格式都和原始word一致后,仍然表格变形。 这时点页边距-自定义页边距-文档网格 看字符数是不是一致的

结合大象机器人六轴协作机械臂myCobot 280 ,解决特定的自动化任务和挑战!(下)

Limo Pro 小车建图导航 引言 前景提要:我们在上文介绍了使用LIMO cobot 实现一个能够执行复杂任务的复合机器人系统的应用场景的项目,从以下三个方面:概念设计、系统架构以及关键组件。 本文主要深入项目内核的主要部分,同样也主要…

【每日一题】1976. 到达目的地的方案数-2024.3.5

题目: 1976. 到达目的地的方案数 你在一个城市里,城市由 n 个路口组成,路口编号为 0 到 n - 1 ,某些路口之间有 双向 道路。输入保证你可以从任意路口出发到达其他任意路口,且任意两个路口之间最多有一条路。 给你一个整数 n 和二维整数数组 roads ,其中 roads[i] = […

[BUG]vscode插件live server无法自动打开浏览器

问题描述: 点了open with live server但是浏览器没有自动跳出来 http://127.0.0.1:5500/里面是有东西的 解决方法: 配置环境变量,在path中添加program files

MCU最小系统电路设计(以STM32F103C8T6为例)

目录 一、何为最小系统? 二、最小系统电路设计 1.电源 (1)各种名词解释 (2)为什么会有VDD_1 _2 _3区分? (3)Mirco USB (4)5v->3.3v滤波电路 &#…

Unity编辑器功能Inspector快捷自动填充数据和可视化调试

我们有时候可能需要在面板增加一些引用,可能添加脚本后要手动拖动,这样如果有大量的脚本拖动也是不小的工作量 实例 例如:我的脚本需要添加一个Bone的列表,一个个拖动很麻烦。 实现脚本 我们可以用这样的脚本来实现。 public…

浅谈结构化数据、非结构化数据,关系数据库、非关系数据库

结构化数据和非结构化数据两者之间存在一定的区别。以下是具体分析: - **结构化数据**:通常指的是那些组织严谨、格式规范统一的数据,它们存储在关系数据库中,可以通过二维表的形式进行逻辑表达。这类数据有明确的数据模型&#…

微信小程序开发系列(十三)·如何使用iconfont、微信小程序中如何使用字体图标

目录 1. 如何使用iconfont 2. 微信小程序中如何使用字体图标 3. 背景图的使用 1. 如何使用iconfont 在项目中使用到的小图标,一般由公司设计师进行设计,设计好以后上传到阿里巴巴矢量图标库,然后方便程序员来进行使用。 小程序中的字体…

最简单 导航栏 html css

dhl.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>导航栏</title><link type"text/css" rel"stylesheet" href"css/dhl.css"></head><div class"dhl&quo…

2024.3.5 网络编程

思维导图 复习课堂作业&#xff1a;IO多路复用 select 实现服务端 #include<myhead.h> #define SER_IP "192.168.68.154" #define SER_PORT 1234int main(int argc, const char *argv[]) {//1、创建用于监听的套接字int sfd -1;sfdsocket(AF_INET, SOCK_STR…

【笔记】ArkTS 语言(OpenHarmony系统)

一、官方简介和文档 介绍&#xff1a;aArkTS 语言 | 华为开发者联盟 (huawei.com) 学习指南&#xff08;文档&#xff09;&#xff1a;初识ArkTS语言-学习ArkTS语言-入门 | 华为开发者联盟 (huawei.com) 二、ArkTS语言知识 &#xff08;一&#xff09;编程语言介绍 Mozilla创…

ASUS华硕天选2锐龙版笔记本电脑FA506ICB/FA706IC原装出厂Windows11系统,预装OEM系统恢复安装开箱状态

链接&#xff1a;https://pan.baidu.com/s/122iHHEOtNUu4azhVPnxNuA?pwdsqk7 提取码&#xff1a;sqk7 适用型号&#xff1a; FA506IM、FA506IE、FA506IC、FA506IHR FA506IR、FA506IHRB、FA506ICB、FA506IEB FA706IM、FA706IE、FA706IC、FA706IHR FA706IR、FA706IHRB、F…

DxO PureRAW:赋予RAW图像生命,打造非凡视觉体验 mac/win版

DxO PureRAW 是一款专为RAW图像处理而设计的软件&#xff0c;旨在帮助摄影师充分利用RAW格式的优势&#xff0c;实现更加纯净、细腻的图像效果。该软件凭借其强大的功能和易于使用的界面&#xff0c;成为了RAW图像处理领域的佼佼者。 DxO PureRAW 软件获取 首先&#xff0c;Dx…

python 操作 minio

座右铭&#xff1a;怎么简单怎么来&#xff0c;以实现功能为主。 欢迎大家关注公众号与我交流 环境安装 pip install -U minio 示例代码 import os from minio import Minio from loguru import logger from datetime import timedeltaclass Client:endpoint: ip:portaccess…

【笔记】Android 漫游定制SPN定制有关字段

一、SPN模块简介 【笔记】SPN和PLMN 运营商网络名称显示 Android U 配置 WiFiCalling 场景下PLMN/SPN 显示的代码逻辑介绍 【笔记】Android Telephony 漫游SPN显示定制&#xff08;Roaming Alpha Tag&#xff09; 二、相关配置字段 non_roaming_operator_string_array 是否…

Nginx使用—http基础知识

web访问流程 当我们在客户端通过浏览器输入网址的时候&#xff0c;这时候是访问不到服务器的&#xff0c; 先会去找到DNS解析服务器&#xff0c;DNS解析服务器返回IP地址&#xff0c; 客户端通过http协议向服务端发送请求&#xff0c;服务器响应请求并返回对应的资源给客户端&a…

【排序】详解冒泡排序

一、思想 冒泡排序的基本思想是利用两两比较相邻记录的方式&#xff0c;通过一系列的比较和交换操作&#xff0c;使得较大或较小的元素逐渐移动到数列的一端。在每一轮的排序过程中&#xff0c;都会从数列的起始位置开始&#xff0c;对相邻的元素进行比较&#xff0c;如果它们…

【论文笔记】Language Models are Unsupervised Multitask Learners

Language Models are Unsupervised Multitask Learners 回顾一下第一代 GPT-1 &#xff1a; 设计思路是 “海量无标记文本进行无监督预训练少量有标签文本有监督微调” 范式&#xff1b;模型架构是基于 Transformer 的叠加解码器&#xff08;掩码自注意力机制、残差、Layernorm…

linux系统---LNMP架构下部署社区论坛与博客

一.编译安装Nginx&#xff08;web服务器&#xff09; 1.关闭防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 0 2、安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make 3、创建运行用户 nginx 服务程序默认 以 nobody 身份运行&a…

upload-Labs靶场“11-15”关通关教程

君衍. 一、第十一关 %00截断GET上传1、源码分析2、%00截断GET上传 二、第十二关 %00截断POST上传1、源码分析2、%00截断POST上传 三、第十三关 文件头检测绕过1、源码分析2、文件头检测绕过 四、第十四关 图片检测绕过上传1、源码分析2、图片马绕过上传 五、第十五关 图片检测绕…