ProxmoxでGPUをPCI Passthroughしていて、そのオーディオ機能を利用している場合に関連する。
ハードウェアの割り込み処理がうまく機能せず、遅延のため音割れ発生した(Message-Signaled Interrupts)。対策方法を試し、効果があったのでまとめてみた。オーディオ側だけでなくグラフィック側のパフォーマンス向上に効果があると思うので試してみてほしい。
PCIデバイスの特定
CUIでも確認できるが、仮想マシンのPCIデバイス画面がわかりやすい。
以下の場合、今回の場合では0000:26:00.0がGPUのグラフィック、0000:26:00.1がオーディオとなる。
Proxmoxのホスト側のコンソール画面でMSIの現在の利用状況を確認する。
先程の最後の枝番「.0」を除いた「0000:26:00」でlspciを行い「26:00」でgrepすると1行目が「VGA compatible controller」、2行目が「Audio device」と表示されていることがわかる。
lspci -vs 0000:26:00 | grep 26:00
26:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1) (prog-if 00 [VGA controller])
26:00.1 Audio device: NVIDIA Corporation GP107GL High Definition Audio Controller (rev a1)
MSIが有効かどうかの確認
次にMSIの利用状況を表示する。MSIが有効化されていない状況であれば以下のように表示される。Enable-ならば無効、+ならば有効。この場合無効とわかる。
lspci -vs 0000:26:00 | grep MSI:
Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
Windows側での設定
デバイスマネージャーでデバイスを特定する。まずはグラフィック側を特定。「ディスプレイアダプター」「詳細」**「デバイスインスタンスパス」**を選択。「値」の欄を控える。右クリックでコピーできる。
今回の場合では「PCI¥VEN_10DE&DEV_1C82&SUBSYS_1C8210DE&REV_A1¥4&36c6fbf2&0&00E0」とかいてある。
レジストリエディタを管理者権限で起動し、以下のパスを開く
「HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Enum¥〜さっきのパス」
今回の例では「HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Enum¥PCI¥VEN_10DE&DEV_1C82&SUBSYS_1C8210DE&REV_A1¥4&36c6fbf2&0&00E0」となる
「新規」→「キー」で「Interrupt Management」、「MessageSignaledInterruptProperties」を追加と以下の画像のようなツリーになる。
「新規」→「DWARD(32bit)」で「MSISupported」を追加、値に「1」を入力。
最後にWindowsを再起動する。
Proxmoxホスト側での動作確認
もう一度、コマンドを入力。
lspci -vs 0000:26:00 | grep MSI:
Capabilities: [68] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
1行目がグラフィック、「Enable+」と有効化されていることがわかる。
オーディオの方の設定
オーディオは「サウンド、ビデオ、およびゲームコントローラ」の「NVIDIA High Definition Audio」で確認する。
オーディオは**「親」**という項目で確認する。今回の場合では以下のとおり。「PCI¥VEN_10DE&DEV_0FB9&SUBSYS_1C8210DE&REV_A1¥4&36c6fbf2&0&01E0」
再起動。
オーディオについてMSIが有効になったか確認
lspci -vs 0000:26:00 | grep MSI:
Capabilities: [68] MSI: Enable+ Count=1/1 Maskable- 64bit+
Capabilities: [68] MSI: Enable+ Count=1/1 Maskable- 64bit+
2行目がオーディオだった。そちらについても「Enable+」と有効になっていることがわかる。
2回に分けて説明しているが、グラフィックとオーディオを同時に設定してしまっても問題ない。