由前面的分析,我们了解到drm中有两种地址空间管理器:drm_mm和drm_buddy。本篇从AMDGPU驱动的实现中具体对比下两者的应用方法和场景。
概述
在 AMDGPU 驱动中,内存管理是核心功能之一。驱动使用了两种不同的 DRM 空间管理器来管理不同类型的内存资源:
drm_buddy:用于管理VRAM(显存)的物理内存drm_mm:用于管理GTT(Graphics Translation Table)的虚拟地址空间
本文档从驱动开发者的角度,通过 AMDGPU 的实际代码,深入分析这两种管理器的设计差异、使用场景和实现细节。
1. 架构概览
1.1 在 AMDGPU 中的位置
amdgpu_device └── mman (amdgpu_mman) ├── vram_mgr (amdgpu_vram_mgr) │ └── mm: struct drm_buddy ← 管理 VRAM 物理内存 │ └── gtt_mgr (amdgpu_gtt_mgr) └── mm: struct drm_mm ← 管理 GTT 虚拟地址