AMDGPU 进程隔离¶
AMDGPU 驱动程序包含一个功能,可以在图形引擎上启用自动进程隔离。此功能将对图形引擎的访问进行序列化,并在作业之间添加一个更清晰的着色器,该着色器会清除本地数据存储 (LDS) 和通用寄存器 (GPR)。启用此功能后,所有使用 GPU 的进程(包括图形和计算工作负载)都将被序列化。在支持可分区图形引擎的 GPU 上,可以按分区启用此功能。
此外,还有一个接口可以在 GPU 使用完成后手动运行清除着色器。在某些用例中,这可能是首选,例如,在单用户系统中,当用户注销时,登录管理器会触发清除着色器。
进程隔离¶
run_cleaner_shader 和 enforce_isolation sysfs 接口允许用户手动执行清除着色器并分别控制进程隔离功能。
分区处理¶
sysfs 中的 enforce_isolation 文件可用于启用进程隔离和进程之间的自动着色器清理。在支持图形引擎分区的 GPU 上,可以按分区启用此功能。可以从 sysfs 中读取分区及其当前设置(0 禁用,1 启用)。在不支持图形引擎分区的 GPU 上,只会存在一个分区。向分区位置写入 1 会启用强制隔离,写入 0 会禁用它。
在具有多个分区的 GPU 上启用强制隔离的示例
$ echo 1 0 1 0 > /sys/class/drm/card0/device/enforce_isolation
$ cat /sys/class/drm/card0/device/enforce_isolation
1 0 1 0
输出表明,在第 0 个和第 2 个分区上启用了强制隔离,在第 1 个和第 4 个分区上禁用了强制隔离。
对于只有一个分区或不支持分区的设备,将只有一个元素
$ echo 1 > /sys/class/drm/card0/device/enforce_isolation
$ cat /sys/class/drm/card0/device/enforce_isolation
1
清除着色器执行¶
驱动程序可以触发清除着色器以清除图形引擎上的 LDS 和 GPR 状态。启用进程隔离后,这种情况会在进程之间自动发生。此外,还有一个 sysfs 文件可以手动触发清除着色器的执行。
要手动触发清除着色器的执行,请向 run_cleaner_shader sysfs 文件写入 0
$ echo 0 > /sys/class/drm/card0/device/run_cleaner_shader
对于多分区设备,您可以在触发清除着色器时指定分区索引
$ echo 0 > /sys/class/drm/card0/device/run_cleaner_shader # For partition 0
$ echo 1 > /sys/class/drm/card0/device/run_cleaner_shader # For partition 1
$ echo 2 > /sys/class/drm/card0/device/run_cleaner_shader # For partition 2
# ... and so on for each partition
此命令会启动清除着色器,该着色器将在 GPU 上安排任何新任务之前运行并完成。