当前位置: 首页 > article >正文

物理内存组织与分配的核心概念

在 Linux 内核内存管理(尤其是 Buddy System 伙伴系统)中,nodezonetypeorder 是描述物理内存组织与分配的核心概念。以下是它们的详细解释:


1. Node(NUMA 节点)

  • 定义
    NUMA(Non-Uniform Memory Access)架构中,物理内存和 CPU 被划分为多个节点(Node),每个节点包含一部分本地内存和 CPU。访问本地内存速度快于远程内存。
  • 作用
    • 优化内存访问延迟:优先从当前 CPU 所在 Node 分配内存。
    • 管理本地内存资源:每个 Node 独立维护自己的内存区域(Zones)和空闲列表。
  • 示例
    服务器中可能存在多个 NUMA Node(如 Node 0Node 1),每个 Node 服务一组 CPU 核。
    手机一般只有一个Node 0
    在这里插入图片描述

2. Zone(内存区域)

  • 定义
    每个 Node 中的物理内存被划分为多个 Zone,用于处理硬件限制或特殊用途的内存分配。
  • 常见 Zone 类型
    • ZONE_DMA:供 DMA(Direct Memory Access)设备使用的低端内存(通常 ≤16MB)。
    • ZONE_DMA32(64位系统):支持 32 位地址的 DMA 内存(≤4GB)。
    • ZONE_NORMAL:可直接映射到内核虚拟地址空间的内存(通常 16MB~896MB)。
    • ZONE_HIGHMEM(32位系统):高端内存,需动态映射到内核虚拟地址空间(>896MB)。
    • ZONE_MOVABLE:可迁移内存,用于减少内存碎片。
  • 作用
    根据内存用途(如 DMA、内核映射)隔离管理,确保特定类型的内存请求得到满足。
    在这里插入图片描述

3. Type(迁移类型)

  • 定义
    在 Zone 内部,内存页框(Page)按 迁移类型(Migrate Type) 分类,用于对抗内存碎片。
  • 常见类型
    • MIGRATE_UNMOVABLE:不可移动(如内核数据结构)。
    • MIGRATE_MOVABLE:可移动(如用户态进程内存)。
    • MIGRATE_RECLAIMABLE:可回收(如文件缓存)。
    • MIGRATE_CMA:连续内存分配专用类型。
  • 作用
    • 将相同迁移类型的页框分组,减少内存碎片。
    • 提高大块连续内存分配的可靠性(如 order > 0 的分配)。
      在这里插入图片描述

4. Order(分配阶数)

  • 定义
    Order 表示伙伴系统中内存块的大小,计算公式为 2^order 个连续页框。
    • order=0 → 1 页(4KB)。
    • order=1 → 2 页(8KB)。
    • order=10 → 1024 页(4MB)。
  • 作用
    • 伙伴系统通过维护不同 Order 的空闲列表(如 free_area[order])快速分配和释放内存。
    • 高阶内存块不足时,可拆分更高阶的块;释放时合并相邻块以形成更大块。

内存分配流程示例

  1. 选择 Node:根据 NUMA 策略(如当前 CPU 的本地 Node)确定目标 Node。
  2. 选择 Zone:根据内存用途(如 DMA 请求必须从 ZONE_DMA 分配)。
  3. 选择 Type:根据页框迁移类型(如分配用户内存优先选择 MIGRATE_MOVABLE)。
  4. 选择 Order:根据请求的大小找到最小满足的 Order。

总结

  • Node:NUMA 架构中的内存节点,优化访问局部性。
  • Zone:处理硬件限制,隔离不同用途的内存。
  • Type:对抗碎片,按页框迁移能力分类。
  • Order:伙伴系统中定义内存块大小的阶数。

这些层级结构共同实现高效、灵活的内存管理,平衡性能、碎片控制和硬件兼容性。


http://www.kler.cn/a/565948.html

相关文章:

  • tidb集群基于多副本容灾
  • DS32编译优化问题【deepseek的功劳】
  • Spring MVC 的执行流程
  • Python基于Django和人脸识别的在线票务系统设计与实现
  • 【Docker】Linux部署web版Firefox
  • 【AIGC系列】4:Stable Diffusion应用实践和代码分析
  • DeepSeek开源周Day4:三连发!突破 AI 训练瓶颈的立体解决方案,并行计算三剑客DualPipe、EPLB与Profile-data
  • 【Java学习】内部类
  • python-leetcode-第 N 个泰波那契数
  • Debian系统关闭休眠模式
  • 2025年2月28日全球科技信息差:技术革新、市场震荡与认知重构
  • 硬件交互之蓝牙耳机交互操作
  • 【算法方法总结·一】二分法的一些技巧和注意事项
  • Python--内置模块和开发规范(上)
  • 深度学习-11.用于自然语言处理的循环神经网络
  • CES Asia 2025聚焦量子计算,多领域进展引关注
  • Pycharm中怎么加快下载三方包速度
  • 如何在一台服务器上搭建 mongodb副本集1主2从节点
  • [选修课]
  • SPM - Coregistered整理