news 2026/3/6 6:57:37

附录A:AMDGPU SVM 属性类型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
附录A:AMDGPU SVM 属性类型

概述

kfd_ioctl_svm_attr_type枚举定义了 SVM(Shared Virtual Memory)的所有属性类型,用于控制 GPU 对共享虚拟内存的访问行为、数据位置偏好、以及一致性模式。

enumkfd_ioctl_svm_attr_type{KFD_IOCTL_SVM_ATTR_PREFERRED_LOC,// 首选位置KFD_IOCTL_SVM_ATTR_PREFETCH_LOC,// 预取位置(触发迁移)KFD_IOCTL_SVM_ATTR_ACCESS,// GPU 访问权限(可迁移)KFD_IOCTL_SVM_ATTR_ACCESS_IN_PLACE,// GPU 访问权限(不迁移)KFD_IOCTL_SVM_ATTR_NO_ACCESS,// 移除 GPU 访问权限KFD_IOCTL_SVM_ATTR_SET_FLAGS,// 设置标志位KFD_IOCTL_SVM_ATTR_CLR_FLAGS,// 清除标志位KFD_IOCTL_SVM_ATTR_GRANULARITY// 迁移粒度};

1. KFD_IOCTL_SVM_ATTR_PREFERRED_LOC

1.1 功能

设置内存的首选位置(preferred location),决定数据在空闲时应该驻留的位置。

1.2 Value 取值

含义
0(KFD_IOCTL_SVM_LOCATION_SYSMEM)系统内存(CPU)
GPU_ID特定 GPU 的显存
0xffffffff(UNDEFINED)未定义,由系统决定

1.3 内核处理

caseKFD_IOCTL_SVM_ATTR_PREFERRED_LOC:prange->preferred_loc=attrs[i].value;break;

1.4 作用

  • 当 GPU 发生 page fault 时,svm_range_best_restore_location()会优先考虑preferred_loc
  • 如果preferred_loc是一个 GPU,且该 GPU 可以访问,数据会迁移到该 GPU
  • 影响 page fault 恢复时的数据放置策略

1.5 使用示例

// 设置首选位置为 GPU 0attrs[0].type=KFD_IOCTL_SVM_ATTR_PREFERRED_LOC;attrs[0].value=gpu_id_0;

2. KFD_IOCTL_SVM_ATTR_PREFETCH_LOC

2.1 功能

设置预取位置立即触发数据迁移

2.2 Value 取值

与 PREFERRED_LOC 相同。

2.3 内核处理

caseKFD_IOCTL_SVM_ATTR_PREFETCH_LOC:prange->prefetch_loc=attrs[i].value;break;

svm_range_set_attr()中,设置 prefetch_loc 后会触发:

r=svm_range_trigger_migration(mm,prange,&migrated);

2.4 与 PREFERRED_LOC 的区别

属性行为
PREFERRED_LOC设置偏好,不立即迁移,等 page fault 时生效
PREFETCH_LOC设置位置并立即迁移数据

2.5 使用场景

  • 在 GPU 计算前,预先将数据迁移到目标 GPU 显存
  • 避免运行时 page fault 导致的性能抖动

2.6 使用示例

// 立即将数据迁移到 GPU 0attrs[0].type=KFD_IOCTL_SVM_ATTR_PREFETCH_LOC;attrs[0].value=gpu_id_0;

3. KFD_IOCTL_SVM_ATTR_ACCESS

3.1 功能

授予指定 GPU 对内存的访问权限,数据可以被迁移到该 GPU。

3.2 Value 取值

GPU ID(指定哪个 GPU 获得访问权限)。

3.3 内核处理

caseKFD_IOCTL_SVM_ATTR_ACCESS:gpuidx=kfd_process_gpuidx_from_gpuid(p,attrs[i].value);bitmap_set(prange->bitmap_access,gpuidx,1);// 设置访问位bitmap_clear(prange->bitmap_aip,gpuidx,1);// 清除 in-place 位break;

3.4 作用

  • 设置bitmap_access位图中对应 GPU 的位
  • 当 GPU 访问该内存时,数据可能被迁移到该 GPU 的显存
  • page fault 恢复时,svm_range_best_restore_location()检查此位图

3.5 迁移行为

GPU 访问 → Page Fault → 检查 bitmap_access ↓ 如果 GPU 在 bitmap_access 中 ↓ 数据可迁移到该 GPU 显存

4. KFD_IOCTL_SVM_ATTR_ACCESS_IN_PLACE

4.1 功能

授予指定 GPU 对内存的访问权限,但数据保持原地不迁移

4.2 Value 取值

GPU ID。

4.3 内核处理

caseKFD_IOCTL_SVM_ATTR_ACCESS_IN_PLACE:gpuidx=kfd_process_gpuidx_from_gpuid(p,attrs[i].value);bitmap_clear(prange->bitmap_access,gpuidx,1);// 清除访问位bitmap_set(prange->bitmap_aip,gpuidx,1);// 设置 in-place 位break;

4.4 与 ACCESS 的区别

属性bitmap_accessbitmap_aip数据迁移
ACCESS✅ 设置❌ 清除可迁移到 GPU
ACCESS_IN_PLACE❌ 清除✅ 设置不迁移,远程访问

4.5 适用场景

  • 多 GPU 共享访问同一内存
  • 避免数据在 GPU 间来回迁移(ping-pong)
  • CPU 内存被多个 GPU 远程访问

4.6 性能考虑

ACCESS: 数据迁移到 GPU 显存,带宽高,延迟低 ACCESS_IN_PLACE: 远程访问(PCIe/XGMI),带宽受限,但避免迁移开销

5. KFD_IOCTL_SVM_ATTR_NO_ACCESS

5.1 功能

移除指定 GPU 对内存的访问权限。

5.2 Value 取值

GPU ID。

5.3 内核处理

caseKFD_IOCTL_SVM_ATTR_NO_ACCESS:gpuidx=kfd_process_gpuidx_from_gpuid(p,attrs[i].value);bitmap_clear(prange->bitmap_access,gpuidx,1);// 清除访问位bitmap_clear(prange->bitmap_aip,gpuidx,1);// 清除 in-place 位break;

5.4 作用

  • 同时清除bitmap_accessbitmap_aip
  • GPU 尝试访问时会触发 page fault,且无法恢复(返回 -EACCES)

5.5 使用场景

  • 安全性:限制特定 GPU 访问敏感数据
  • 资源管理:在 GPU 不再需要访问时释放权限

6. KFD_IOCTL_SVM_ATTR_SET_FLAGS

6.1 功能

设置(OR)指定的标志位。

6.2 Value 取值

标志位掩码,可以是以下值的组合:

标志说明
KFD_IOCTL_SVM_FLAG_HOST_ACCESS0x01保证 CPU 可访问
KFD_IOCTL_SVM_FLAG_COHERENT0x02细粒度一致性
KFD_IOCTL_SVM_FLAG_HIVE_LOCAL0x04使用同 hive 的任意 GPU
KFD_IOCTL_SVM_FLAG_GPU_RO0x08GPU 只读,允许复制
KFD_IOCTL_SVM_FLAG_GPU_EXEC0x10允许 GPU 执行
KFD_IOCTL_SVM_FLAG_GPU_READ_MOSTLY0x20GPU 主要读取
KFD_IOCTL_SVM_FLAG_GPU_ALWAYS_MAPPED0x40保持 GPU 映射始终有效
KFD_IOCTL_SVM_FLAG_EXT_COHERENT0x80扩展一致性(device-scope atomics)

6.3 内核处理

caseKFD_IOCTL_SVM_ATTR_SET_FLAGS:*update_mapping=true;prange->flags|=attrs[i].value;// OR 操作break;

6.4 标志详解

FLAG_COHERENT (0x02)
  • 启用细粒度一致性
  • CPU 和 GPU 看到一致的内存视图
  • 性能开销较高
FLAG_EXT_COHERENT (0x80)
  • 扩展一致性,使用 device-scope atomics
  • 比 COHERENT 更强的一致性保证
  • 用于跨设备原子操作
FLAG_GPU_ALWAYS_MAPPED (0x40)
  • 即使 XNACK 开启,也保持 GPU 页表映射有效
  • 避免 page fault 开销
  • 类似于 XNACK 关闭的行为
FLAG_GPU_RO (0x08)
  • GPU 只读访问
  • 允许数据复制到多个 GPU(replication)
  • 优化多 GPU 读取同一数据的场景

7. KFD_IOCTL_SVM_ATTR_CLR_FLAGS

7.1 功能

清除(AND NOT)指定的标志位。

7.2 Value 取值

与 SET_FLAGS 相同的标志位掩码。

7.3 内核处理

caseKFD_IOCTL_SVM_ATTR_CLR_FLAGS:*update_mapping=true;prange->flags&=~attrs[i].value;// AND NOT 操作break;

7.4 使用示例

// 设置细粒度一致性attrs[0].type=KFD_IOCTL_SVM_ATTR_SET_FLAGS;attrs[0].value=KFD_IOCTL_SVM_FLAG_COHERENT;// 清除细粒度一致性(改为粗粒度)attrs[0].type=KFD_IOCTL_SVM_ATTR_CLR_FLAGS;attrs[0].value=KFD_IOCTL_SVM_FLAG_COHERENT;

8. KFD_IOCTL_SVM_ATTR_GRANULARITY

8.1 功能

设置迁移粒度,控制 page fault 时迁移的内存块大小。

8.2 Value 取值

log2(页数),范围 0-63(实际限制为 0x3F)。

Value迁移大小
01 页 = 4KB
12 页 = 8KB
416 页 = 64KB
9512 页 = 2MB

8.3 内核处理

caseKFD_IOCTL_SVM_ATTR_GRANULARITY:prange->granularity=min_t(uint32_t,attrs[i].value,0x3F);break;

8.4 作用

在 page fault 处理中:

size=1UL<<prange->granularity;start=ALIGN_DOWN(addr,size);last=ALIGN(addr+1,size)-1;

8.5 权衡

粒度优点缺点
精确,避免不必要迁移频繁 fault,开销大
减少 fault 次数,预取效果好可能迁移不需要的数据

9. 属性总结表

属性类型存储位置作用触发迁移
PREFERRED_LOCprange->preferred_loc设置首选位置❌ 延迟
PREFETCH_LOCprange->prefetch_loc设置位置并迁移✅ 立即
ACCESSprange->bitmap_access授权 GPU 访问,可迁移按需
ACCESS_IN_PLACEprange->bitmap_aip授权 GPU 访问,不迁移
NO_ACCESS清除两个 bitmap移除 GPU 访问权限N/A
SET_FLAGSprange->flags设置标志N/A
CLR_FLAGSprange->flags清除标志N/A
GRANULARITYprange->granularity迁移粒度N/A

10. 典型使用场景

10.1 单 GPU 计算

// 1. 设置首选位置为 GPUattrs[0].type=KFD_IOCTL_SVM_ATTR_PREFERRED_LOC;attrs[0].value=gpu_id;// 2. 授权 GPU 访问attrs[1].type=KFD_IOCTL_SVM_ATTR_ACCESS;attrs[1].value=gpu_id;// 3. 预取数据到 GPUattrs[2].type=KFD_IOCTL_SVM_ATTR_PREFETCH_LOC;attrs[2].value=gpu_id;

10.2 多 GPU 共享读取

// 所有 GPU 就地访问,数据保持在 CPUfor(inti=0;i<num_gpus;i++){attrs[i].type=KFD_IOCTL_SVM_ATTR_ACCESS_IN_PLACE;attrs[i].value=gpu_ids[i];}

10.3 细粒度一致性

// 设置细粒度一致性attrs[0].type=KFD_IOCTL_SVM_ATTR_SET_FLAGS;attrs[0].value=KFD_IOCTL_SVM_FLAG_COHERENT;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/1 6:28:30

盲盒小程序热门玩法分析(附开发者落地要点)

随着潮玩经济持续升温&#xff0c;盲盒小程序凭借轻量化、高裂变、低门槛的优势&#xff0c;成为开发者入局潮玩赛道的核心载体。其核心竞争力不在于界面设计&#xff0c;而在于“惊喜感可落地玩法技术适配”&#xff0c;热门玩法均围绕“未知性、社交性、收藏性”三大核心展开…

作者头像 李华
网站建设 2026/3/2 15:35:18

J2000与WGS84坐标及转换

摘要在遥感卫星、航天器轨道计算、导航等领域&#xff0c;WGS84 和 J2000&#xff08;J2000.0 惯性坐标系&#xff09; 是两个最常用的坐标系。它们分别属于 地固坐标系&#xff08;Earth-Fixed&#xff09; 和 惯性坐标系&#xff08;Inertial&#xff09;&#xff0c;适用于不…

作者头像 李华
网站建设 2026/2/28 21:43:29

桌面运维不想做了,还能干什么?

这是某红书平台网友分享的自己找运维工作难的从业经历&#xff01; 这两年&#xff0c;IT行业面临经济周期波动与AI产业结构调整的双重压力&#xff0c;确实有很多运维与网络工程师因企业缩编或技术迭代而暂时失业。 很多人都在提运维网工失业后就只能去跑滴滴送外卖了&#…

作者头像 李华
网站建设 2026/3/4 5:04:00

开题报告 springboot和vue家校联系管理系统

目录系统背景与需求技术选型与优势核心功能模块系统特色预期成果项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统背景与需求 随着教育信息化的发展&#xff0c;家校沟通需求日益增多。传统沟通方式&am…

作者头像 李华
网站建设 2026/2/14 8:03:08

如何正确使用AI辅助写作并通过AIGC检测?合规使用的建议

如何正确使用AI辅助写作并通过AIGC检测合规使用的建议的核心问题是什么&#xff1f;关于如何正确使用AI辅助写作并通过AIGC检测这个问题&#xff0c;我们需要从基础概念开始理解。AIGC检测技术是近年来随着AI写作工具普及而快速发展的领域&#xff0c;它的出现改变了学术界和内…

作者头像 李华
网站建设 2026/3/3 16:16:16

AIGC检测的假阳性率是多少?误判风险的客观评估

AIGC检测的假阳性率是多少误判风险的客观评估的核心问题是什么&#xff1f;关于AIGC检测的假阳性率是多少这个问题&#xff0c;我们需要从基础概念开始理解。AIGC检测技术是近年来随着AI写作工具普及而快速发展的领域&#xff0c;它的出现改变了学术界和内容创作领域对原创性的…

作者头像 李华