Buddy分配器

Buddy分配器

1. 内核在基本的伙伴分配器基础改进扩展

支持内存节点和区域,称为分区的伙伴分配器(zoned buddy allocator)。
为了预防内存碎片,把物理页框通过移动性分组。
针对分配单页做了性能优化,为了减少处理器锁的竞争,在内存区域增加了1个每处理器页集合。

2. 分区的伙伴分配器源码分析

2.1 数据结构

#defineMAX_ORDER11// MAX_ORDER是最大阶数,实际上最大可分配的是最大阶数加1,默认值是11,意味着伙伴分配器一次最多可以分配2^10页。structfree_area{structlist_headfree_list[MIGRATE_TYPES];// 不同类型的空闲区域unsignedlongnr_free;};structzone{/* ... */structfree_areafree_area[MAX_ORDER];/* ... */};

2.2 根据分配标志获取首选区域类型

内核使用GFP_ZONE_TABLE定义了标志组合到区域类型的映射表。其中GFP_ZONES_SHIFT是区域类型占用的位数。GFP_ZONE_TABLE把每种标志组合映射到32位整数的某个位置,偏移是(标志组合 * 区域类型位数),从这个偏移开始的GFP_ZONES_SHIFT个二进制位存放区域类型。

3. 备用区域列表 (Zonelist)

借用必须遵守规则:
一个内存节点的某个区域类型可以从另一个内存节点的相同区域类型借用物理页,比如节点0的普通区域可以从节点1的普通区域借用物理页。
高区域类型可以从低区域类型借用物理页,比如普通区域可以从DMA区域借用物理页。
低区域类型不能从高区域类型借用物理页,比如DMA区域不能从普通区域借用物理页。

包含所有内存节点的备用区域列表有两种排序方法:

  1. 节点优先顺序:先根据节点距离从小到大排序,然后在每个节点里面根据区域类型从高到低排序。优点是优先选择距离近的内存,缺点是在高区域耗尽以后使用低区域。
  2. 区域优先顺序:先根据区域类型从高到低排序,然后在每个区域类型里面根据节点距离从小到大排序。优点是减少低区域耗尽的几率,缺点是不能保证优先选择距离近的内存。

默认的排序方法就是自动选择最优的排序方法:比如是64位系统,因为需要DMA和DMA32区域的备用相对少,所以选择节点优先顺序;如果是32位系统,选择区域优先顺序。

4. 区域水位 (Watermarks)

数据结构如下:

enumzone_watermarks{WMARK_MIN,WMARK_LOW,WMARK_HIGH,NR_WMARK};structzone{/* ... */unsignedlongwatermark[NR_WMARK];// 该区域各种水线/* ... */};

最低水位以下的内存称为紧急保留内存,在内存严重不足的紧急情况下,给承诺“分给我们少量的紧急保留内存使用,我可以释放更多的内存”的进程使用。

Watermark水位控制内核选用了几个重要参数:

  • managed_pages: 伙伴分配器管理的物理页的数量
  • spanned_pages: 当前区域跨越的总页数,包括空洞
  • present_pages: 当前区域可用的所有物理页的数量,包括空洞

它们三者之间的关系:spanned_pages > present_pages > managed_pages

min_free_kbytes的计算:
min_free_kbytes代表的是系统保留空闲内存的最低限度。watermark[WMARK_MIN]的值是通过min_free_kbytes计算出来的。

5. 分区的伙伴分配器核心函数

入口函数:__alloc_pages_nodemask

参数说明:

  • gfp_mask: 分配标志(掩码)
  • order: 阶数
  • zonelist: 首选内存节点的备用区域列表
  • nodemask: 允许从哪些节点分配。如果是NULL,表示允许从所有节点分配。

5.1 快速路径分配页框

函数get_page_from_freelist用于尝试从备用区域列表的区域中分配页框。

它会遍历zonelist,对于每个zone,检查是否满足水位要求(zone_watermark_ok)。如果满足,则尝试从该zone分配。

5.2 慢速路径调用和遇到内存紧缺时的分析

如果在快速路径中分配失败,则会进入慢速路径(__alloc_pages_slowpath)。
慢速路径包含了更复杂的逻辑,例如:

  • 唤醒页回收线程(kswapd)。
  • 忽略水位限制进行分配(如果是紧急分配)。
  • 直接内存回收(Direct Reclaim)。
  • 调用 OOM Killer(如果配置允许)。
  • 重试分配等。

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

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

相关文章

AI模型容器化部署实战

💓 博客主页:借口的CSDN主页 ⏩ 文章专栏:《热点资讯》 AI模型容器化部署:实战指南与未来展望目录AI模型容器化部署:实战指南与未来展望 引言 一、容器化部署的必要性与当前挑战 为什么需要容器化? 现存挑战…

Slab,不连续页,buddy分配器与内存映射

Slab分配器分析 一、Slab分配器概述 1.1 Slab分配器的作用 Slab分配器是Linux内核中用于管理小对象内存分配的高效机制。它主要解决以下问题: 频繁分配/释放小对象的性能问题:内核中大量使用固定大小的对象(如task_struct、inode、dentry等&a…

物理内存组织架构与Buddy分配器关系分析

物理内存组织架构与Buddy分配器关系分析 在Linux内核中,物理内存的管理是一个分层级的复杂系统。为了高效地应对不同硬件架构(如NUMA)和不同的内存需求(如DMA访问限制),Linux建立了严密的物理内存组织架构…

【数据分享】2025年全国范围各城市的公交路线及站点数据(分省/分城市)

本文分享一份2025年全国范围各城市的路线及站点数据。包含:安徽省、澳门、北京市、重庆市、福建省、甘肃省、广东省、广西省、贵州省、海南省、河北省、河南省、黑龙江、湖北省、湖南省、吉林省、江苏省、江西省、辽宁省、内蒙古、宁夏省、青海省、山东省、山西省、…

Agent2Agent (A2A) Protocol( A2A 协议)简介、组件

Agent2Agent (A2A) Protocol(简称 A2A 协议)是旨在让不同 AI 代理(agents)之间互联互通、协作的开放标准。内容包括协议的主要组件(building blocks)、各组件作用,以及这些组件在一个典型流程中…

期货反向跟单—从小白到高手进阶历程 六十三(研究人性不是重点)

在期货反向跟单领域,“研究人性” 似乎成了多数团队的共识性动作。不少团队投入大量人力、物力搭建心理干预体系,从资金奖惩机制到每日口头引导,试图通过干预盘手的心理状态来优化跟单效果。然而现实往往事与愿违,多数团队耗费数月…

系列教程十三 | 探索阿里云 Wan 2.1:零基础入门文本生成视频教程

一.背景介绍近年来,人工智能内容生成(AIGC)在视频创作领域取得了突破性进展,其中文本到视频(Text-to-Video)生成技术因其在内容创作、广告营销和教育可视化等方面的巨大潜力而备受关注。Wan 2.1作为阿里云推…

系列教程十四 | 基于CosyVoice 2.0实现语音风格迁移

一.背景介绍 随着生成式人工智能的快速发展,语音合成(Text-to-Speech, TTS)技术正在迈向更自然、更智能、更具情感表达的新时代。过去的 TTS 模型虽然已在音质和语义准确度方面取得显著进步,但在跨语言、情感表达、个性化模拟等方…

外包开发三年

外包开发的三年:困在代码牢笼里的日子这三年就像被困在一座没有出口的迷宫,每天重复着同样的路线,却永远走不到尽头。刚入行时还带着点期待,想着好歹能攒点经验,可现实像一盆冷水,从头顶浇到脚底。外包公司…

解析ASTM D4169:运输包装性能测试的核心标准有哪些

ASTM D4169 是国际公认的运输集装箱和系统性能测试标准,通过模拟真实分销环境中的各类危险元素,为包装运输性提供统一评估依据。该标准包含多个分配周期(DC),其中 DC4、DC6、DC12、DC13 是医疗行业界最常选用的周期&am…

提示工程的认知架构设计:架构师的深度思考

提示工程的认知架构设计:架构师的深度思考 引言:AI时代的认知革命 在人工智能技术迅猛发展的今天,提示工程(Prompt Engineering)已经从一项简单的交互技巧演变为一门系统的工程学科。作为架构师,我们需要超越表面的指令编写,深入思考提示工程背后的认知架构设计。这不仅…

Java Web 企业客户管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着信息技术的快速发展,企业客户管理系统的需求日益增长,传统的手工管理模式已无法满足现代企业对高效、精准客户管理的需求。企业客户管理系统能够有效整合客户信息,优化业务流程,提升客户满意度和企业竞争力。当前&#x…

网上超市设计与实现信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

摘要 随着互联网技术的快速发展和电子商务的普及,网上超市逐渐成为消费者购物的主要渠道之一。传统的线下超市面临着租金成本高、管理效率低、客户覆盖面有限等问题,而网上超市能够突破时间和空间的限制,为消费者提供更加便捷的购物体验。同时…

Java SpringBoot+Vue3+MyBatis 在线文档管理系统系统源码|前后端分离+MySQL数据库

摘要 随着信息技术的快速发展,文档管理已成为企业和个人高效工作的核心需求。传统的文档管理方式依赖本地存储或简单的文件共享工具,存在版本混乱、协作效率低、安全性不足等问题。在线文档管理系统通过云端存储和实时协作功能,能够有效解决这…

大数据诊断性分析:从入门到精通的完整指南

大数据诊断性分析:从入门到精通的完整指南 一、引言:为什么你做了一堆报表,却还是找不到问题的根因? 你有没有过这样的经历? 月底盯着复购率下降20%的报表抓耳挠腮,翻了几十张用户行为折线图,…

【2025最新】基于SpringBoot+Vue的甘肃非物质文化网站管理系统源码+MyBatis+MySQL

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 非物质文化遗产作为中华…

快速排序 - 原理、时空分析、优化

过程 快速排序分为三个过程: 将数列根据划分值 mmm 划分为两部分;递归到两个子序列中分别进行快速排序;不用合并,因为此时数列已经完全有序。 具体来说,第一步要是要把数列分成两个部分,然后保证前一个子…

Java SpringBoot+Vue3+MyBatis 教师工作量管理系统系统源码|前后端分离+MySQL数据库

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 随着教育信息化的快速发…

企业级企业客户管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 随着信息技术的快速发展…