RYZEN 3400G購入でシングルスレッドなゲームの性能低下を危惧していたのだが、やはりユーザー側でちゃんと設定しないとダメみたい。

最近MODを入れてプレイしていたTitanQuestAEだと3200Gからだいたいfps1〜2割減。酷い場面でも30fps以下にはあまりならないのだが、体感ではもっと酷く感じる。たぶん仮想スレッドに処理を邪魔されてガクガクとfpsが落ちているのだろう。これじゃあコンスタントに30fpsのほうがまだマシだ。

SMTを無効化

とりあえずターミナルからコマンドでLinux側から無効化。
echo off > /sys/devices/system/cpu/smt/control
→4コア4スレッド動作になってはいるようだが、ゲーム中では効果が見られない??

onでまたSMTを有効化できるが再起動推奨だそうで。一応、自分が試した感じでは特に問題はなかった。
https://access.redhat.com/solutions/rhel-smt

BIOSから無効化はサスペンドが使えなくなるので、できるなら避けたい。

kernelブートパラメータにnosmtを追加は有効・無効を切り替えるのにいちいちgrub updateと再起動が必要なので面倒。
しかも、なぜかCPUクロックと電圧が固定化され、idle消費電力が10W以上増加。普通にOCするよりもidle消費電力が高い? 偶々なにかが裏で動いている時にチェックしたのだろうか? というか省電力機能が無効化されてるような?

色々やってはみたのだがSMT無効化は手間の割に効果を感じられない。使う前はバカにしていたSMTだが、あればあったで利く場面ではかなりの差が出る。なのでSMTそのものを無効化するのはもったいない。

別の手段を探すべきだ。

CPUコア数を指定してSteamを起動

ゲーム側でコア指定してもSteam本体のプロセスなどが仮想スレッドで動作して邪魔をするらしい?
そこでSteamそのものをtasksetでコア数指定する。steamがデフォルトでゲームに割り振るスレッド数は3なので3コアを指定。

taskset -c 0-2 steam-runtimeでsteam起動。そしてそのままTQAEを起動。
敵3倍MOD適用でやたらに敵が多くCPU負荷の高くなったパルナッソス周辺でうろちょろしてみる……見事にSMTなしの3200Gとほぼ同じ挙動になった。

試しにtaskset -c 0-3で4コアを指定したが、こちらはダメでSMT有効と同じ挙動にしかならない。1コアや2コアでも同様。
ゲーム側でも起動オプション-threadでスレッド数を増減してみたが、それだとゲームが起動しないようだ。(steam本体のtasksetがなければ起動するがSMT ONと同じ動作なので意味がない)

しかしこれじゃあ6コアや8コアだとどうすれば良いのやら?