7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Proxmox8 を試してみる その14 vGPU (VT-d) Passthrough with Intel Alder Lake

Last updated at Posted at 2023-11-10

Proxmox8 で GPU Passthrough がやりたかったが・・・

Proxmox8 で GPUパススルーを使用したかったのですが、AMDだとどう頑張ってもできなく諦めていたのですが、話題の「Intel N100」を購入したので試してみました。

とりあえずどのN100製品でも vGPU (VT-d) Passthrough ができると思いますが私が使用したPCや環境は以下とおりです。

 ・商品:Beelink N100 MINI-S12 Pro
  ・CPU:Intel N100(Alder Lake-N)
  ・memory:DDR4 SDRAM 16GB(32GBでも使えましたYO)
 ・ホスト
  ・Proxmox VE 8.0.4 / kernel 6.2.16-19-pve ※2023/11/09時点
 ・ゲスト
  ・Windows 11 Enterprise Evaluation

 ※ちなみに、使用できる kernel バージョンがシビアだそうです。

Beelink N100 MINI-S12 Pro

少しだけ Beelink N100 MINI-S12 Pro を紹介してみます。
少し話題的には遅いかもですが、N100 マシンを購入してみました。Amazon みると2万台ですがフリマで1.3万で売っていたのでぽちっってみました。今のとこ(2023/11)N100搭載しているミニPCは、中華メーカしか出ていないみたいですが割と色々なメーカから出しているので選択肢はかなり多いです。

image.png

Beelink N100 MINI-S12 Pro ですが拡張性もあるし性能もIntel Core i5 6500相当というので遊ぶにはいいと思います(もちろん普段使いできる性能です)。ですので安いの見つけたらぽちるのがいいと思います。

良い点
 ・HDMIポート/USB3.1/ギガビットLANポート ふつうーにある
 ・TDP 6W(高負荷時 20W)で省電力
 ・静穏ファンで非常に静か
 ・N100 のパフォーマンスが良すぎる!
 ・NVMe/メモリを換装できる ※メモリ32GBまでいけました
悪い点
 ・メモリー、NVMe が・・怪しい(私は、即交換しました)
 ・Windows11 Pro VL ライセンスが不安

買いってことでw

ようするに見かけたら買いましょう!!

N100ミニPCを購入するときに気をつける点
 ・メモリが直付けでないこと!(メモリ換装したいですよね)
 ・NVMe と明記されているのに SSDかも (NVMeがいいですよね)
 ・ファンがしょぼい (そういう製品もあるようです)
 ・Windows11 Pro ついているけど、あれかもしれない (詳しくはググってください)

とりあえず普通に GPUパススルーが出来できない(ここから本題)

Intelの場合(vt-d必須) GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off" を記述することで割と簡単にできる・・みたいな記事があり他のサイトをみても Windows 側のディスプレイアダプタとして認識するもドライバが コード43 を返しどうしようもありませんでした。

コード43 を回避するためにintelドライバを入れても解決せず・・・むむむ

image.png

vGPU (VT-d) Passthrough で設定してみる

NVIDIA の技術で ホストサーバーに搭載したGPU仮想的に分割して使用することを "vGPU" と言うらしいです。N100 でも vGPU (VT-d) Passthrough ができるというので設定してみます。

SR-IOV (シングル ルート I/O 仮想化) に関連する、Intel VT-d (Intel Virtualization Technology for Directed I/O) と呼ばれる新しいテクノロジがあります。これにより、互換性のあるデバイスは、GPU などのデバイスを複数の VF (仮想機能) に仮想化できます。

i915-sriov-dkms を設定する

i915-sriov-dkms するために、Gitから最新の Dynamic Kernel Module System (DKMS) リポジトリからソースを取得しコンパイル~導入という手順を踏みます。Proxmox UI でホストシェルを起動してもよいしSSHで接続してもよいのでまず黒い画面で操作します。

# apt-get install git
# mkdir repo
# cd repo
# git clone https://github.com/strongtz/i915-sriov-dkms.git
# cd i915-sriov-dkms/

dkms.conf ファイルを編集します。PACKAGE_VERSION には、カーネルバージョンを指定します(コンパイルにはあまり影響がないです)。

# cat dkms.conf 
PACKAGE_NAME="i915-sriov-dkms"
PACKAGE_VERSION="6.2"

コンパイルに必要な情報を更新するコマンドを実行し・・・

# cd ..
# cp -rp i915-sriov-dkms/ /usr/src/i915-sriov-dkms-6.2
# apt update && apt install pve-headers-$(uname -r)
# apt install git dkms build-* unzip -y

コンパイルします。

# dkms install --force -m i915-sriov-dkms -v 6.2

Building module:
Cleaning build area...
make -j4 KERNELRELEASE=6.2.16-19-pve -j4 -C /lib/modules/6.2.16-19-pve/build M=/var/lib/dkms/i915-sriov-dkms/6.2/build KVER=6.2.16-19-pve..........................(bad exit status: 2)
Error! Bad return status for module build on kernel: 6.2.16-19-pve (x86_64)
Consult /var/lib/dkms/i915-sriov-dkms/6.2/build/make.log for more information.

なんだかエラーが発生しているのでログファイルを見てみます。

# cat /var/lib/dkms/i915-sriov-dkms/6.2/build/make.log
/var/lib/dkms/i915-sriov-dkms/6.2/build/drivers/gpu/drm/i915/display/intel_dp.c:3890:9: error: implicit declaration of function ‘drm_dp_mst_hpd_irq’; did you mean ‘intel_dp_mst_hpd_irq’? [-Werror=implicit-function-declaration]
 3890 |         drm_dp_mst_hpd_irq(&intel_dp->mst_mgr, esi, &handled);
      |         ^~~~~~~~~~~~~~~~~~
      |         intel_dp_mst_hpd_irq

intel_dp.c のコンパイルでエラーが発生しています。調べると issues にもありました。

エラー部分を修正しましょう。念のため intel_dp.c ファイルの場所を調べておきます。

# cd /usr/src/i915-sriov-dkms-6.2
# find . -name intel_dp.c
./i915-sriov-dkms/drivers/gpu/drm/i915/display/intel_dp.c
./drivers/gpu/drm/i915/display/intel_dp.c

i915-sriov-dkms/drivers.... のファイルだけ修正してもコンパイルエラーが発生していたので、2つのファイルを下記のように修正します。

-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,40) && LINUX_VERSION_CODE <= KERNEL_VERSION(6,1,99)) || LINUX_VERSION_CODE > KERNEL_VERSION(6,4,5)
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,40) && LINUX_VERSION_CODE <= KERNEL_VERSION(6,1,99)) || LINUX_VERSION_CODE >= KERNEL_VERSION(6,2,0)

再度コンパイルします。下記のようになればOKです。

# dkms install --force -m i915-sriov-dkms -v 6.2
Sign command: /lib/modules/6.2.16-19-pve/build/scripts/sign-file
Signing key: /var/lib/dkms/mok.key
Public certificate (MOK): /var/lib/dkms/mok.pub

Building module:
Cleaning build area...
make -j4 KERNELRELEASE=6.2.16-19-pve -j4 -C /lib/modules/6.2.16-19-pve/build M=/var/lib/dkms/i915-sriov-dkms/6.2/build KVER=6.2.16-19-pve..............................
Signing module /var/lib/dkms/i915-sriov-dkms/6.2/build/i915.ko
Cleaning build area...

i915.ko:
Running module version sanity check.
 - Original module
 - Installation
   - Installing to /lib/modules/6.2.16-19-pve/updates/dkms/
depmod...

DKMS ステータスを確認してみましょう。

# dkms status
i915-sriov-dkms/6.2, 6.2.16-19-pve, x86_64: installed

GRUBオプションの編集と設定

とりあえず i915-sriov-dkms のモジュールが作成できたので、やっとパススルーの設定ができます。

/etc/default/grub を下記のように編集します。vfs の数値は、GPU仮想で使用する個数を設定しますが、使用するたびに 2GB? 使用されるようですので注意が必要です。

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=2"

grub を更新し、sysfsutils をインストールします。※ZFS のときはコマンド違います!!

# update-grub
# update-initramfs -u
# apt install sysfsutils -y

とりあえず VGA カードと PCIe バスの状態を見てみます。通常は 00:02.0 らしいです。

# lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Alder Lake-N [UHD Graphics]

PCIe バス番号を設定します。これ設定しないとだめでした。

# echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 2" > /etc/sysfs.conf

この段階でいったん Proxmox を再起動します。
再起動後に下記のコマンドで VF が有効(Enabled 2 VFs)になっているか確認します。

# dmesg | grep i915
[    4.329179] i915 0000:00:02.0: Running in SR-IOV PF mode
[    4.971234] i915 0000:00:02.0: Enabled 2 VFs

Windows の VM に PCIデバイスを追加

ここまでくればPCIデバイスを追加するだけです。念のため複数のGPUが存在するのかを確認します。赤枠部分が VF化されたGPUとなります。

image.png

あとは、PCIデバイスを追加します。プライマリGPUにチェックをいれておきます。

image.png

複数のVMでGPUを使うことできるか、、確認します。
こういうとき評価版windows使うと便利ですね。

image.png

カーネルのバージョンを固定する

システムアップデートしたときカーネルのバージョンが変更されると動かなくなるので、今のカーネルバージョンで固定化しておきます。

# uname -r
6.2.16-19-pve

# proxmox-boot-tool kernel pin 6.2.16-19-pve
Setting '6.2.16-19-pve' as grub default entry and running update-grub.
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.2.16-19-pve
Found initrd image: /boot/initrd.img-6.2.16-19-pve
Found linux image: /boot/vmlinuz-6.2.16-3-pve
Found initrd image: /boot/initrd.img-6.2.16-3-pve
Found memtest86+ 64bit EFI image: /boot/memtest86+x64.efi
Adding boot menu entry for UEFI Firmware Settings ...
done

最後に

N100は遊べますね。というか1台のProxmoxだと壊したとき(色々いじって)面倒なのでサブで遊べるProxmoxがあるといいですね。あと当然ながらIntel Core i5 6500相当といっても省電力設計なのか少しでも負荷をかけるとすぐにCPU使用率が顕著に上がるので気にする人いるかな?。そうは言ってもパワーあるし低電力でファンも静か(PL1/PL2 もう少しいじってもいいかも)なので気に入りました。

image.png

参考にさせて頂いたサイト様

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?