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. 核心关系说明(功能视角)

  1. amdgpu_vm:GPU 虚拟地址空间 “总管理器”代表一个独立的 GPU 虚拟地址空间,依据 “va 区间树” 统一管理该空间下所有 BO(Buffer Object)的虚拟地址映射,是三者的顶层管理结构。

  2. amdgpu_bo_va:BO 与 VM 的 “关联中介”作为单个 BO 在特定 amdgpu_vm 中的 “映射描述体”,一头关联对应的 amdgpu_vm 和 BO,另一头通过invalids(无效映射)、valids(有效映射)链表,管理该 BO 在 VM 中的多段虚拟地址映射,实现 “1 个 BO 对应 N 段映射” 的灵活管理。

  3. 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-1:VM-GPU VM

AMD KFD的BO设计分析系列5-2:VM-amdgpu_vm_bo

AMD KFD的BO设计分析系列5-3:VM-amdgpu_bo_va_mapping

AMD KFD的BO设计分析系列5-4:VM-amdgpu_vm_bo_map的实现详解

posted on 2025-10-30 18:14  wgwyanfs  阅读(2)  评论(0)    收藏  举报

导航