AMDGPU 程序隔離

AMDGPU 驅動程式包含一項功能,可在圖形引擎上啟用自動程序隔離。此功能將圖形引擎的訪問序列化,並新增一個清理著色器(cleaner shader),用於在作業之間清除本地資料儲存 (LDS) 和通用暫存器 (GPR)。啟用此功能後,所有使用 GPU 的程序,包括圖形和計算工作負載,都將被序列化。在支援可分割槽圖形引擎的 GPU 上,此功能可以按分割槽啟用。

此外,還提供一個介面,可在 GPU 使用完成後手動執行清理著色器。在某些使用場景中,例如單使用者系統在使用者登出時由登入管理器觸發清理著色器,這種方式可能更受青睞。

程序隔離

透過 run_cleaner_shaderenforce_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

輸出表明,強制隔離在第零和第二分割槽上已啟用,在第一和第四分割槽上已停用。

對於只有一個分割槽或不支援分割槽的裝置,將只有一個元素

$ echo 1 > /sys/class/drm/card0/device/enforce_isolation
$ cat /sys/class/drm/card0/device/enforce_isolation
1

清理著色器執行

驅動程式可以觸發清理著色器來清理圖形引擎上的 LDS 和 GPR 狀態。啟用程序隔離時,這會在程序之間自動發生。此外,還有一個 sysfs 檔案用於手動觸發清理著色器執行。

要手動觸發清理著色器的執行,請將 0 寫入 run_cleaner_shader sysfs 檔案

$ 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 上排程任何新任務之前執行並完成。