2023-03-05

Linux Mint で Smart Access Memory が有効になっていなかった

UEFI BIOS で設定し、Linux Mint の OS が起動できれば Smart Access Memory が働いていると思っていたのですが、もう一段の設定が必要であったことが判明しました。

Smart Access Memory は CPU と VRAM とのアクセスを改善することでパフォーマンスの向上を図る技術です。未設定だと 256MB 単位でのアクセスですが、これを VRAM 容量の全体と同じ単位(4GB とか 8GB とか)に拡張できます。例えば、1GB のデータをアクセスしたい場合、256MB 単位だと 4回のアクセスが必要ですが、4GB 単位だと 1回のアクセスで済んでしまう、というイメージかと思います。

AMD Smart Access Memory | AMD

さて、以前は Ryzen 3 3100 + B450 チップセット + Radeon RX 570 4GB という構成で Smart Access Memory の有効化設定をしていました。

kernel: [drm] Detected VRAM RAM=2048M, BAR=2048M

これは現在の Ryzen 5 5600G + B450 チップセット + VRAM 2GB の構成のシステムログですが、こんな風に RAM= と BAR= が同じサイズを示していると BIOS レベルでは Smart Access Memory が有効になっています。

ええ、これを見て「お、有効になってるじゃん」と喜んでいたのです、ワタシは。

さらに glxinfo コマンドでもサイズが認識できているのでもう何も迷いはなかったんです。

$ AMD_DEBUG=info glxinfo -B | grep -i vram_
    vram_size = 2048 MB
    vram_vis_size = 2048 MB
    vram_type = 8
    all_vram_visible = 1

 

ところが、事件は起きたのです。

 

Mesa の DRI 設定ファイルをいじると OpenGL の glthread 機能を有効化できたりするというのを発見し、その中で Smart Access Memory の on/off も制御可能で「デフォルトでは無効である」ということを知ったのです。

なんと、Linux Mint というか Mesa では BIOS 設定だけではなく、ソフトウェア側でも有効化操作が必要だったんですね・・・・。

AMD_DEBUG=info glxinfo -B

Memory info:
    pte_fragment_size = 2097152
    gart_page_size = 4096
    gart_size = 6926 MB
    vram_size = 2048 MB
    vram_vis_size = 2048 MB
    vram_type = 8
    max_heap_size_kb = 6926 MB
    min_alloc_size = 256
    address32_hi = 0xffff8000
    has_dedicated_vram = 0
    all_vram_visible = 1
    smart_access_memory = 0
    max_tcc_blocks = 4
    tcc_cache_line_size = 64
    tcc_rb_non_coherent = 0
    pc_lines = 1024
    lds_size_per_workgroup = 65536
    lds_alloc_granularity = 512
    lds_encode_granularity = 512
    max_memory_clock = 1333 MHz

glxinfo コマンドに grep を付けずに全量を出力してみたところ、Memory info: というブロックに「smart_access_memory = 0」の表示が確かにありました・・・・。


というわけで、さっそく試してみたのですが、わが家の Firefox + 「艦これ」では効果ありでした。なんか体感でシャキシャキ感が上がったのがわかりました。

Linux Mint だと /usr/share/drirc.d にデフォルト値を定めた設定ファイルが置かれています。00-mesa-defaults.conf などです。

しかし、ここはシステム全体で共通の定義であるため、一般的には ~/.drirc で調整するようです。

また、drirc を作成するための支援ツールが用意されており、今回は Flathub から adriconf というツールをインストールして利用しました。

左上の「Default」を押す

「Performace」の一番上にあるのが glthread を有効化する項目

Smart Access Memory は「Debugging」の下の方にある

緑色の「Save」を押すと ~/.drirc に書き出される

 

adriconf はあくまでも設定ファイルを書き出すだけで、動作を変更するわけではありません。

<driconf>
  <device screen="0" driver="radeonsi">
    <application name="Default">
      <option name="force_glsl_extensions_warn" value="false" />
      <option name="radeonsi_enable_sam" value="true" />
    </application>
  </device>
</driconf>

こんな定義内容をファイルに書き出すだけです。

ここまで準備ができれば設定を反映させます。具体的には Linux Mint から一旦ログアウトし、再度ログインするだけです。


体感で向上が感じられたので、ベンチマークツールで具体的な数値も測ってみました。

設定MotionMark 1.0
BaseMark WEB 3.0
SAM=off GLT=off918.61721.7
SAM=on GLT=off987.90793.27
SAM=on GLT=on984.99775.29

SAM は Smart Access Memory、GLT は OpenGL glthread を示しています。数値でも 10% ほど向上していますね。
(10% 向上すると体感できる、ということを発見しました)

GLT=on はあまり体感でも変化がなかったので、最終的には SAM=on GLT=off で使っています。Linux ユーザーの方は本当に Smart Access Memory が有効になっているか確認してみた方が良いと思います。

 

glthread は Mesa 22.3 でデフォルト値が有効に変わるみたいですね。

Mesa 22.3 RadeonSI Enables OpenGL Threading By Default To Enhance Performance 

 



SAM=off GLT=off

SAM=on GLT=off

SAM=on GLT=on

SAM=off GLT=off

SAM=on GLT=off

SAM=on GLT=on