はじめに
GPUのメモリが故障しているかどうか気になることがあると思いますが、そうした場合Direct 3DやVulkan、CUDAやOpenCL経由では見ることができるメモリは一部にすぎないのでちょっとしたテストプログラムを用意しても不安になるかもしれません。そこで、より広いメモリ領域を検査する方法を拾ってきたので紹介したいと思います。
注意
GPUやその使われ方によりますが、メモリの末尾部分がコンソール表示に用いられていたりしてエラーが集中して出る場合があります。不良部分を末尾に固めてマップしている場合もあるかもしれません。具体的にはRX 580では末尾8MiB、RX Vega 56では末尾28MiBのみにエラーが出ていました。
方法
How To Test AMD Radeon GPU RAM memory using Linux ScriptsというYouTubeにある動画にあるのですが、Englishという見慣れない聞きなれない言語でよくわからないので訳すことなく日本語で書いてみることにします。
用意するもの
- Windows
- Rufus
- Arch Linux
- 検査用スクリプト
- USBマスストレージデバイス(USBメモリ)など
メモリを検査する手順など
-
Rufusを管理者として実行し、Arch Linuxを起動可能になるようUSBメモリに書き込み、そこに検査用スクリプトをコピーします。
-
USBメモリからArch Linuxを起動できるようにするためにUEFI設定でセキュアブートを無効にします。Smart Access MemoryやClever Access Memory、或いはResizable BARと呼ばれるものは無効のままでもメモリ全域が現れるようです。
-
検査対象のGPUにモニタを繋げたままでも問題ないと思います。
-
USBメモリからArch Linuxを起動します。
選択項目が表示されますが、一番上のArch Linux install medium (x86_64, x64 UEFI)のようなものを選びます。 -
検査用スクリプトを読めるようにするため、スクリプト保存先のパーティションをマウントします。
マウント先を作ります。
mkdir /hoge
などでいいでしょう。スクリプト保存先のパーティションを表すファイル名を見つけ出します。
fdisk -l
として見つけます。ここでは/dev/sdc1がそのファイル名だとします。マウントします。
mount /dev/sdc1 /hoge
といった感じになると思います。 -
検査対象のアドレスを探します。
lspci -v | less
とタイプして探します。大抵の日本語キーボードの場合『|』は、Shiftを押しながらEnterのすぐ左の『む』を押すと出せるはずです。
lessでの表示中は、jキーで進み、kキーで戻り、qキーでlessを終了できます。
対象デバイスのところに
Memory at 6000000000 (64-Bit, prefetchable) (size=8G)
といった感じでGPUのデバイスメモリの先頭アドレスとサイズが出ているはずです。 -
検査用スクリプトを実行します。
python3 /hoge/memtest.py (検査開始アドレスを十六進数で) (テストサイズをメガバイト単位の十進数で)
たとえば、
python3 /hoge/memtest.py 6000000000 8192
といった感じです。 -
環境にもよりますが数分間から十数分間ほど検査に要するので、まずは64MiBなど小さめのテストサイズで実行してから検査時間を見積もるとよいかもしれません。