Coelacanth's Dream

AMDGPUドライバーにて RDNA 2 アーキテクチャの GFX Async Ring が 2年越しに有効化

Linux Kernel の次回バージョンアップ、5.20/6.0 に向けた AMDGPUドライバーの更新では、RDNA 2/GFX10.3 アーキテクチャ の GFX Async Ring (MicroEngine1, Pipe1) を有効化するパッチが取り込まれる。

 Arunpravin Paneer Selvam (3):
       drm/amd/amdgpu: Enable high priority gfx queue
       drm/amd/amdgpu: add pipe1 hardware support
       drm/amd/amdgpu: Fix alignment issue

GFX Async Ring

GFX Ring/ME は AMD GPU に搭載されているマイクロコントローラの一種であり、GFX エンジンへのグラフィクスキューをコントロールする役割を持つ。
Compute エンジン、コンピュートキュー用のマイクロコントローラは MEC (MicroEngine Compute) とされている。
ME と MEC はハードウェアブロックとしては GFX/Compute パイプラインのフロントエンドに位置する。

GFX9/Vega 世代までは GFX Ring/ME は通常 1基の構成となっており、RDNA 1/GFX10.1 世代からは優先度が高く設定されたグラフィクスキュー向けに GFX Async Ring が追加された。
しかし RDNA 1/GFX10.1 世代では GFX Async Ring は無効化されており1、これはその後に AMDGPUドライバーへのパッチが公開された Sienna Cichlid/Navi21RDNA 2/GFX10.3 世代においても同様だった。2

そうした状態だったのが、RDNA 2/GFX10.3 世代の GFX Async Ring が Linux Kernel 5.20/6.0 では有効化される。RDNA 1/GFX10.1 世代では有効化されず、通常の GFX Ring、GFX Primary Ring 1基構成のままとなる。
RDNA 1/GFX10.1 世代の GFX Async Ring を無効化するパッチは 2020/03/02、Sienna Cichlid/Navi21 へのパッチは 2020/06/01 に投稿されたため、RDNA 2/GFX10.3 アーキテクチャ では約 2年越しの有効化となる。

GFX Async Ring 自体は、グラフィクス処理において高い優先度が設定されたキューを専用の GFX Ring から発行可能になったということから、リアルタイム性の向上を目的とした機能と考えられる。

 Starting from SIENNA CICHLID asic supports two gfx pipes, enabling
 two graphics queues, 1 on each pipe, pipe0 queue0 would be the normal
 piority queue and pipe1 queue0 would be the high priority queue
	
 Only one queue per pipe is visble to SPI, SPI looks at the priority
 value assigned to CP_GFX_HQD_QUEUE_PRIORITY from each of the queue's
 HQD/MQD.
	
 Create contexts applying AMDGPU_CTX_PRIORITY_HIGH which submits job
 to the high priority queue on GFX pipe1. There would be starvation
 of LP workload if HP workload is always available.

User Mode Driver 側では RadeonSI (OpenGL) ドライバーに EGL_IMG_context_priority のサポートを追加し、優先度の高いコンテキストの作成を可能にするパッチ、マージリクエストが公開されているが、これも GFX Async Ring の有効化と関係しているのではないかと思われる。
パッチはすでに main ブランチに取り込まれている。

RadeonSI へのパッチを投稿した Vlad Zahorodnii 氏は、高い優先度を設定する主な対象として、Wayland コンポジターのようなレンダリングコマンドをできる限り早くに処理する必要のアプリケーションを挙げている。

しかし AMD の Michel Dänzer 氏により、GFX Async Ring を有効化した Sienna Cichlid/Navi21 GPU と AMDGPUドライバー、EGL_IMG_context_priority をサポートした RadeonSI ドライバーの組み合わせで GPU がハングアップする問題が報告されており、GFX Async Ring サポートの安定化まではまだ時間が必要と見られる。3
その後に当該コミットを Revert するパッチが Michel Dänzer 氏によって投稿され、Linux Kernel 6.0-rc2 でマージされている。4

参考リンク