KubeVirtのGPUスケジューリングの検証のためにTesla P100のほかTesla T4も用意してもらったのですが、Tesla T4はKubernetesクラスターには認識されているものの、そのリソースを要求してVMIを作ろうとすると次のようなイベントログが発生してVMIが作成できないという問題が発生しており、現在調査中です。
server error. command SyncVMI failed: "LibvirtError(Code=1, Domain=0, Message='internal error: Unknown PCI header type '127' for device '0000:04:00.0'')"
一方、同様にKubernetesクラスターに認識されているP100の方はLinux VMでもWindows VMでも、GPUを割り当ててVMの中で問題なく利用できました。
エラーメッセージを一部抜き出して検索したところ、いくつか有益な情報を見つけられました。
可能性の一つとして、LibVirtの修正が必要という可能性。
https://bugzilla.redhat.com/show_bug.cgi?id=1542494
KubeVirtにおいてLibVirtはホスト上で動いているわけではないため、この場合はKubeVirt側の修正が必要になります。このパターンはすぐには試せそうにないですね。
Linuxカーネルを5.10以上にするとそのようなエラーが出なくなったという声もありました。
ただ、KubeVirtでの事象が同じ理由によるものなのかは現時点でわかっていません。 またエラーはちょっと違いますが、カーネルが古いためにうまくKubeVirtでVMIを作れないというIssueが報告されていました。
今利用しているカーネルより新しいバージョンにあげるのは容易にできそうなので、試してみようと思います。 Linuxディストリビューションを変えてみるのもありですね。
その結果はこちらの記事に追記予定です。
5/18追記
サーバーのファームウェアを更新
GPUサーバーのBIOS,Firmwareを更新。更新方法はサーバーベンダーの手順に従いました。 Firmwareはブラウザーからアップデート可能だったため、最新のバージョンをダウンロードして適用しました。BIOSはブラウザーからのパッチ適用は無理だったため、USBメモリーにBIOSアップデータを焼いてもらって作業してもらいました。
サーバーの設定変更
拡張カードのFirmwareモードをBIOSからUEFIに変更しました。 (無効化した覚えはないが)SR-IOVが無効化されていたので有効化しました。
ここら辺はBIOSもしくはFirmwareのアップデート時に初期化されてしまった可能性があります。
ホスト設定の変更
以下の情報をもとに設定を再確認、足りない設定(pci-stub.idsとrdblacklistオプション)を追加しました。
GRUBへの設定追加
ホストOSから初期化させないようにするため、 pci-stub.idsとオプションで両方のNVIDIA GPUを除外しました。レスキューモードでnouveauドライバーを読み込まないようにシステムに設定しました。
GRUB_CMDLINE_LINUX="... intel_iommu=on iommu=pt pci-stub.ids=10de:15f8,10de:1eb8 rdblacklist=nouveau modprobe.blacklist=nouveau"
nouveauドライバーを使わないように設定
NVIDIA GPUをnouveauドライバーで利用しないように設定しました。
# echo "blacklist nouveau" >> /etc/modprobe.d/blacklist-nouveau.conf
GRUBを再生成して再起動
# grub2-mkconfig -o /etc/grub2.cfg # reboot
以上の設定変更で安定してTesla T4の利用が問題なく利用可能になりました。
ホストにはオンボードのグラフィックを割り当てていたし、VMにはQXLのグラフィックを別途割り当てていたので問題ないと思っていたのですが、pci-stub.idsの設定追加が足りていなかったのが今回の事象の原因なのかなと考えています。