在 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:伙伴系統中定義內存塊大小的階數。
這些層級結構共同實現高效、靈活的內存管理,平衡性能、碎片控制和硬件兼容性。