物理内存组织与分配的核心概念
在 Linux 内核内存管理(尤其是 Buddy System 伙伴系统)中,node
、zone
、type
和 order
是描述物理内存组织与分配的核心概念。以下是它们的详细解释:
1. Node(NUMA 节点)
- 定义:
在 NUMA(Non-Uniform Memory Access)架构中,物理内存和 CPU 被划分为多个节点(Node),每个节点包含一部分本地内存和 CPU。访问本地内存速度快于远程内存。 - 作用:
- 优化内存访问延迟:优先从当前 CPU 所在 Node 分配内存。
- 管理本地内存资源:每个 Node 独立维护自己的内存区域(Zones)和空闲列表。
- 示例:
服务器中可能存在多个 NUMA Node(如Node 0
和Node 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]
)快速分配和释放内存。 - 高阶内存块不足时,可拆分更高阶的块;释放时合并相邻块以形成更大块。
- 伙伴系统通过维护不同 Order 的空闲列表(如
内存分配流程示例
- 选择 Node:根据 NUMA 策略(如当前 CPU 的本地 Node)确定目标 Node。
- 选择 Zone:根据内存用途(如 DMA 请求必须从
ZONE_DMA
分配)。 - 选择 Type:根据页框迁移类型(如分配用户内存优先选择
MIGRATE_MOVABLE
)。 - 选择 Order:根据请求的大小找到最小满足的 Order。
总结
- Node:NUMA 架构中的内存节点,优化访问局部性。
- Zone:处理硬件限制,隔离不同用途的内存。
- Type:对抗碎片,按页框迁移能力分类。
- Order:伙伴系统中定义内存块大小的阶数。
这些层级结构共同实现高效、灵活的内存管理,平衡性能、碎片控制和硬件兼容性。