AMD KFD的BO设计分析系列5: 虚拟地址部分-VM - 详解
通过从本文起,我们聚焦 amdgpu_bo 虚拟地址部分的构建细节。此部分设计依赖若干关键结构体及其交互关系,现将这些核心概念与关联逻辑先行明确:一方面可为后续分析建立认知框架,另一方面也方便读者灵活选择理解方式 —— 既能够在读完后续分析内容后回头深化认知,也能在阅读后文时同步对照此处梳理的信息辅助理解。
amdgpu_bo_va_mapping、amdgpu_bo_va、amdgpu_vm是核心的三个数据结构。以下从 “结构关联 - 功能定义 - 简化逻辑” 三层,清晰拆解三者的层级关系与交互机制,为理解 GPU 虚拟地址管理提供核心框架。
1. 关系示意图
+-------------------+ +-------------------+ +-------------------+
| amdgpu_vm | 1 <-> | amdgpu_bo_va | 1 <-> N | amdgpu_bo_va_mapping|
+-------------------+ +-------------------+ +-------------------+
| ... | | base (vm, bo) | | bo_va |
| va (interval tree)|---------| invalids/valids |---------| start/last/offset |
| ... | | ... | | flags |
+-------------------+ +-------------------+ +-------------------+
2. 核心关系说明(功能视角)
amdgpu_vm:GPU 虚拟地址空间 “总管理器”代表一个独立的 GPU 虚拟地址空间,依据 “va 区间树” 统一管理该空间下所有 BO(Buffer Object)的虚拟地址映射,是三者的顶层管理结构。
amdgpu_bo_va:BO 与 VM 的 “关联中介”作为单个 BO 在特定 amdgpu_vm 中的 “映射描述体”,一头关联对应的 amdgpu_vm 和 BO,另一头通过
invalids(无效映射)、valids(有效映射)链表,管理该 BO 在 VM 中的多段虚拟地址映射,实现 “1 个 BO 对应 N 段映射” 的灵活管理。amdgpu_bo_va_mapping:虚拟地址映射 “最小单元”具体描述 BO 在 VM 中的某一段虚拟地址映射细节:通过
bo_va指针绑定到所属的 amdgpu_bo_va,再通过 amdgpu_vm 的 “va 区间树” 插入到全局地址管理中,是实现 “地址分配、权限控制、区间查询” 的底层载体。
3.简化逻辑(层级关系)
顶层:amdgpu_vm(1 个) → 管理多个 amdgpu_bo_va(1:N)
中层:amdgpu_bo_va(1 个) → 具备多个 amdgpu_bo_va_mapping(1:N)
底层:amdgpu_bo_va_mapping(1 个) → 描述 1 段具体虚拟地址映射
专文列表:
AMD KFD的BO设计分析系列5-2:VM-amdgpu_vm_bo
浙公网安备 33010602011771号