何もしてないのにパソコン壊れた的なメソッド
■はじめに
beatorajaが一部環境でプレイ中にスタッターを起こすという問題はよく知られている。
最大FPSをリフレッシュレートの4倍にしてみる、それでもダメなので1000にしてみる、/affinityやtaskmgrで物理コアへプロセスを割り振る、優先度を高くする、といった小手先の対策をとっても、緩和こそすれど中々直ってくれないのが実情だ。
以下、「カクつく」という単語を「プレイ中に時々動作が重くなったり、スタッタリングを起こす」という意味で使用する。
■偶然
先日、使用しているLR2スキンのcsvの中身をいじった。
(詳しい内容は以下の記事に書いたが、かなり読みにくいのでタイトルだけで察してくれれば良い)
W-MIXで判定文字を点滅させないようにする(メモ書き) - 雷撃の記憶
要するに判定文字の点滅や点灯のアニメーションを無効化したのだ。
-----
分かる人向け:
SRC_NOWCOMBO_1PとSRC_NOWJUDGE_1Pのcycleの値を0にした
-----
何故かこれを行ってからカクつかなくなった。
具体的に言うと、11/09の夜にcsvをいじり、11/11~11/12で30万ノーツ近く叩いたのだが、一度もカクついていない。
■本当にcsvの改変が原因なのか?
OSやドライバの更新、その他のPC環境の変化があった可能性も捨てきれないため、状況を整理する。
カクついていた頃に書いた記事は
beatoraja AMD製CPUで時々カクつく問題への対処法(緩和する程度) - 雷撃の記憶
なので、この頃から何が変化したか、あるいはしていないのかを考える。
とにかく全て挙げるので、頓珍漢な内容も含まれるかもしれないが、ご容赦頂きたい。
・Windows
23H2への更新はまだ来ていない。
10/04以降にインストールされた更新プログラムは
KB5031354,KB5031455,KB4023057
の3つだが、任意のアプリケーション動作に関する不具合や修正の情報は特に無いように見受けられる。
・GPUドライバ
RTX3060Tiを使用しているが、物理的破損の噂が流れた頃からドライバは更新しておらず、531.68のままである。
・Javaの環境
変わっている。
JREを同梱のLibericaからAmazon Correto 21+JavaFX SDK 21.0.1へ変更した。
しかしこれが原因ではないと思われる。
理由として、10/28にこの環境を導入したのだが、その日はいつも通りカクつきが発生し「JREが原因ではなかったのか」と落胆したのを覚えているし、それからスキンの処理を変更するまで直ったという記憶もない。
・beatoraja.batの内容
変わっている。
具体的には0,2,4,6,8,10,12,14の8コアだった割り振りを0,2,4,6の4コアにした。
-----
分かる人向け:
以前「物理コアにプロセスを割り振るとカクつきにくくなる」という旨の記事を投稿し、それからずっと8コアに割り振っていた。
JRE環境を変えた時に外部からではなくバッチファイルの/affinity 5555で指定するようにしたものの、変わらず物理の8コアのままだった。
あるとき、beatorajaのオートプレイ中にtaskmgrのCPUグラフを眺めていたところ、8コアだと妙な挙動をしていることに気がついた。
確かに8コア割り振っているはずなのに、メインで動作していると思われるスレッドが4つしかなく、時々他のコアに処理を回しているのか使用率が大きく下がる瞬間があるのだ。
もしかしてこれが原因なのではないかと思い、/affinity 5555の数字を55(0,2,4,6の4コアにのみ割り振る)へ変更し、今日に至る。
-----
なお、こちらもJRE環境を移行したのと同じで、変更した日は相変わらずカクついていたことを覚えている。
だが性能不足で困ったことはなく、スレッド辺りのCPU使用率も80~90%で推移して下がったりはしないため、そのままにしている。
・cimを使わないようにした
判定文字を自作した際に、起動中のbeatorajaで変更が即座に反映されるように、cimファイルの生成を無効にした。
そのまま戻さずに遊んでいるのだが、これも以前とは違う条件の1つ。
しかし個人的には関係無いと思う。
pngにしろcimにしろ、メモリに格納する→参照してパーツを描画するという処理を行っているはずで、元のファイルの違いでそこまで処理負荷が変わるのだろうか。
・Windowsの「ウィンドウゲームの最適化」を無効にする
Windowsの設定→システム→ディスプレイ→グラフィックを開き、beatorajaの為に使用しているJREの実行ファイルを追加、クリックしてオプション→「ウィンドウゲームに最適化を使用しないでください」にチェック
これはいつ変更したか記憶が定かではないものの、つい最近だったようなので一応メモしておく。
ウィンドウモードにおけるグラフィックの最適化処理で横槍が入ったら嫌だなと思って無効化したという経緯だったと思う。
このオプションはWindowsに追加された当時から知っており、他のゲームでパフォーマンスに問題があった時も度々触っているので、これで直るならもっと前に気づいて解決しているような気がする。
・Windowsセキュリティの「メモリ整合性」を無効にする。
※この項目を無効にすると、悪意のあるコードに対してシステムが脆弱になるので、自己責任で行うこと
私は普段FPSゲームなども遊ぶので、レンダリング遅延が増えることを嫌ってメモリ整合性を無効にしている。
少し前、急にbeatorajaがカクつき始めたので、設定を眺めていたら、いつの間にかこの項目がオンになっていた。
オフにして再起動したら以前の動作に戻ったので、この項目は何らかの悪影響を与えている可能性がある。
■結論
謎。
そもそもW-MIX HDはFullHDではなくHDであり、(lr2skinとluaという違いはあるが)TYPE-MやModernChicといった他のFullHDスキンと比べて当然動作は軽い部類に入る。
加えて、数枚の小さなpngをメモリに格納し、80ms~100msの間隔で交互に表示させるだけの処理がそんなに重くなるのだろうか。
原因を解明するのは難しそうだ。
■更新履歴
2023/12/13
メモリ整合性をオンにしているとカクつくという話を追加。