2023年1月10日火曜日

SurfaceBook 初代で dGPU を使ってみた

悲願達成…なのですが。
はい、ごらんの通り LMDE5 の文字がありません。
昨年の8月に Nvidia がドライバーソースをオープンにして初の Ubuntu である 22.04.1 が11月に出まして、その後12月20日に Ubuntu ベースの Linux Mint 21.1 が出た訳です。
で、LMDE5 もろともアップデートが来たわけですが…。

…なんとアップデートした所、LMDE5 であれだけ苦労してインストールした Nvidia ドライバーが吹っ飛びました。(どうもカーネルアップデートで飛ぶらしい)
入れ直す為、最新の NVIDIA-Linux-x86_64-525.78.01.run をインストールしようと試みましたが、どうしてもエラーが出る為インストールは無理でした…。

が、しかし、Nvidia は Ubuntu 相手には手厚いサポートをしています…という事は…。

そんな訳で、Linux Mint 21.1 Mate にインストールしていきます。
…素直に Ubuntu にしろとか言うのは禁止です。

この後に書いていく内容はよそ様に書かれていた内容のほぼベタコピーです。本来必要があるのか…という話ですが個人用の備忘録なのでご容赦を。

  • 1.linux-surface 導入
linux-surface の GitHub に linux-image-6.1.3-surface_6.1.3-surface-1_amd64.deb 等のファイルが有りますが、コレを使ってインストールするとスクリーンタッチセンサのドライバ等が入らなかったのでコマンドラインでインストールして行きます。

$ sudo wget -qO - https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/keys/surface.asc | gpg --dearmor | sudo dd of=/etc/apt/trusted.gpg.d/linux-surface.gpg
$ echo "deb [arch=amd64] https://pkg.surfacelinux.com/debian release main" | sudo tee /etc/apt/sources.list.d/linux-surface.list
$ sudo apt update
$ sudo apt install linux-image-surface linux-headers-surface iptsd libwacom-surface
$ sudo systemctl enable iptsd
$ sudo update-grub

正味の話、私も良く解っていないのですが、要するに専用ドライバの入ったカーネルをインストールした上で grub を設定し直したようです。
この時点で再起動して

1.スクリーンをタッチしてカーソルが動く
2.uname -a コマンドでカーネルが変わっている

以上が確認できれば第一関門突破


  • 2.MX940 を認識させる
/usr/local/bin/dgpu.sh 作成

内容は以下の通り

#!/bin/sh

echo 1 | tee /sys/bus/platform/devices/MSHW0041:00/dgpu_power
echo 1 > /sys/bus/pci/rescan
setpci -H1 -s 01:00.0 6a.b=81
setpci -H1 -s 01:00.0 4.w=0407
echo 1 > /sys/bus/pci/rescan
setpci -s 01:00.0 4.w
setpci -s 01:00.0 6a.b

作ったら実行可能属性にしておく


/etc/systemd/system/dgpu.service 作成

内容は以下の通り

[Unit]
Description=Nvidia GPU initialization
Before=display-manager.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/dgpu.sh
ExecStartPre=/bin/sleep 10

[Install]
WantedBy=multi-user.target


起動時に認識用スクリプトを読み込ませるサービスを作ったので、サービスの登録を行う

$ systemctl daemon-reload
$ systemctl start dgpu.service
$ systemctl enable dgpu.service

再起動後 lspci で MX940 が認識されているかを確認


  • 3.grub の起動設定を追加
/etc/default/grub の GRUB_CMDLINE_LINUX_DEFAULT 項目を

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nouveau.modeset=0 pci=realloc nvidia-drm.modeset=1 pcie_port_pm=off pcie_aspm=off"

へ変更


  • 4.カーネルに nouveau 等が混入しないように塞ぐ
実は見た限り Linux Mint 21.1 には nouveau が入っていなかったようなのですが念のため…

/etc/modprobe.d/blacklist.conf
ファイルの末尾に

blacklist nouveau
blacklist nvidiafb

と追記

$ sudo update-initramfs -u

で反映


  • 5.ドライバー導入
ドライバーマネージャーを起動する
…今までの苦労はなんだったのかと。
Ubuntu 系にプレインストールされているアプリなのですが…なんというか、コレは…。
インストール後、再起動して

$ nvidia-smi

が起動するかを確認。

  • 6.起動実験をしてみる
以前、盛大に勘違いしていたのですが、GPU を使用して起動したいソフト xxxx があった場合、コマンドラインで

$ __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia xxxx

と呼び出すのが正解なようです。
で、さっそく Blender を呼び出してみた結果がこちら
相変わらず Persistence-M が OFF と表示されていますが…
Processes 欄に Blender が入り、432MB の VRAM を使っています。又、GPU 温度も51度と表示されているので駆動はしているようです。

  • 7.解像度を下げる
まあ、このままでも良いのですが、Blender を起動しただけで 1GB しかない VRAM の4割強を持っていかれては直ぐに作業ができなくなるのは明白です。
なぜこんなにVRAMをドカ食いするのかと言えば解像度が高すぎるからなんですね…
なんと3000x2000もあるのですよ。私のメインのデスクトップ1920x1080なんですが…。
という訳で、1/4の解像度である1500x1000にしてみます。

/etc/profile
末端に

xrandr --newmode "1504x1000_60.00"  124.25  1504 1600 1752 2000  1000 1003 1013 1038 -hsync +vsyn
xrandr --addmode eDP-1 1504x1000_60.00
xrandr --output eDP-1 --mode 1504x1000_60.00

を追加

…なんだか150x1000という謎の4ドットが付いた解像度になっていますが…
これは解像度を追加する際に調査するコマンドの cvt で

$ cvt 1500 1000

と打った返り値がこうだったので仕方が無いデス。
ちなみにデフォルトでは cvt はインストールされていないので xcvt をインストールする必要がありますし、上記の値は私個人の環境なのでコレを参考にする方は自分でも cvt コマンドを打って正確な値を求めてください。

さて、改めて1504x1000の解像度で実行してみると…
はい、VRAMの使用量が減っていますね。
若干画面がぼんやりしてしまうのが難ですがひとまずコレで使っていける環境が整いました。


  • で、実際使ってみてどうよ?
正直に言えば、GPUの有無で実感できるほどの差は今の所無いです。むしろ、一瞬画面が灰色になったりと dGPU を使った時の方が動作は不安定です。
まあ、それでもフルパワーには違いが無いのでひとまずこれにて一区切りとしたいと思います。

0 件のコメント:

コメントを投稿