なろぐ2

PC関連のメモ帳

win32priorityseparation 再考

前に書いた気がするのですが大分昔の事だったからか
残っていませんね。書いてアップしなかったかな。

 

win32priorityseparationというのはWindowsにて
CPUのスケジューリングを調整する項目です。
フォアグラウンドで動いているプログラムとバックグラウンドで
動いているプログラムの比率を変更します。

 

Windows11ですと
設定→システム→バージョン情報→システムの詳細設定と
辿り、パフォーマンス項目からの設定で
『プログラム』と『バックグラウンドサービス』
で簡単に切り替えられる項目の事です。

 

 

ちなみにプログラムにすると38(26)に
バックグラウンドサービスにすると24(18)
になります。
※実は初期設定値は『2』なのですがその説明は最下段に。

Windows上からでは2項目ですが、レジストリを弄ることで
細かく設定できます。

 

****************************************************************

とてもとても長いので結論から。
下に解説をしますが環境によって最適な設定が異なります。
なので全て試すのが正解です。
全然分からないとか、面倒なんだよねという方は設定を

弄らないでいきましょう。

どうしても触ってみたいという方はゲームメインなら

『プログラム』を。

ゲーム以外もいっぱい動いてるよというのであれば

『バックグラウンドサービス』

選んで試すというのだけでもありです。

****************************************************************

 

 

※注意
今回の項目を弄るだけではPCが壊れる事はほぼありませんが、
レジストリを弄る際、他の項目を削除、変更等してしまうと
OSが起動しなくなる事もあります。ご注意を。
また、今回の項目はネットで調べた事がある方は分かると
思いますが10進数と16進数の両方が出ております。混合しない
ようにお気をつけください。
ちなみにうちでは10進数をメインに表記し、括弧内の数値を
16進数とします。入力は10進数の方が分かりやすいと思います。

 

レジストリのキーはここにあります
コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PriorityControl
ここのwin32priorityseparationの数値を変更することで
フォアグラウンドのアプリとバックグラウンドのアプリへの
CPUの割り振りが変更できます。

 

入力した数値を2進数に変換してAABBCCという感じに
6bit表記した際のAA、BB、CCの数値で設定項目が異なります。
プログラムにすると38(26)は2進数ですと
100110
となり、最初の10がAA、次の01がBB、最後の10がCCとなります。

一応設定するならこの辺かなという一覧です。

 



ちなみにこちらはRyzen5 5600(6コア12スレッド)でテストした数値。

素でベンチ(ブループロトコルベンチ)を回したスコアと、ベンチを

回しつつバックグラウンドで4K動画を二つ回した際のスコアです。

 

 

AAの説明
CPUの切り替え時間の設定
・00-デフォルト
・01-Long
・10-Short

00:デフォルトの値 ← 最下段で説明します
01:Longはフォアグラウンドアプリ(ゲーム)へCPUの割り当て
  時間を長くする
10:Shortはフォアグラウンドアプリ(ゲーム)へCPUの割り当て
  割り当て時間を短くする

 

これらはコンテキストスイッチ(CPUの切り替え)を長くするか
短くするかの設定です。フォアグラウンドアプリを使用中に
切り替えが多いと遅延が発生するので可能な限り切り替えは起こしたく
無いものです。
ただし通常のデスクトップ作業などメールを見て、Webも閲覧して、
音楽も聞いて等複数の作業が同時に行われる状況ではCPUの切り替えが
速い方がレスポンスが良くなります。

 

レースゲームで例えるならLongは最速で走れる車
直線(ゲーム)は速いもののカーブ(応答速度)は苦手
逆にShortは最高速度こそそこまで出ないもののカーブは
得意といった感じ。

 


BB
フォアグラウンドアプリ(ゲーム)のブースト設定
・00-デフォルトの値
・01-可変
・10-固定

00:デフォルトの値 ← こちらも上と同じく最下段で説明
ゲームへの負荷が高くなった際にCPUへの割り当てを
増やすかどうかの設定で01が可変、10は固定。


ちなみに10の固定にすると次のCCの項目は無効化されるそうなのですが
下にあるCCの00、01、10で内部的な設定は異なるそうです。
実際上に貼ったベンチでも結果が違いますね。

 


CC
上記の可変設定にした際のフォアグラウンドとバック
グラウンドのアプリへの割り当て比率
・00-1:1
・01-2:1
・10-3:1

00はブーストせず。01は二倍、10は三倍のブーストとなります。

 

 

という事で単純にゲームに全力振り!と考えると
AA-01(Long)
BB-01(可変)
CC-10(3:1)

で010110というのが一見最適に見えます。
ちなみに入力する値は22(16)となります。

上に貼った結果でもベンチ単体、ベンチ+負荷でも高いスコアが

出ております。

 


が。
あくまでもフォアグラウンドのゲームはブーストされますが
Windowsでは様々なプログラムがバックグラウンドで動いています。
入力(コントローラー、マウス、キーボード)を司るプロセス
CSRSS、サウンド、ネットワーク等々。これらの処理に遅延が

発生する可能性があります。

通常でも沢山のプロセスが動いている所にゲーム配信者はOBS等も

ありますし、友人等と連絡を取る為にDiscordやSkypeが動いている

という人もいるでしょう。

 

ちなみに海外にあったwin32priorityseparationの記事

www.xbitlabs.com


記事中では遅延(レイテンシ)を重視する為BBの値を固定し、

ブーストを行わない24(18)もしくは40(28)をやんわりと推して

いるのですが、24(18)設定はバックグラウンド設定をした時の

数値なんですね。実際これで暫く使っていた事があったのですが、

プログラム設定と比較すると体感ではプログラムの方がサクサク感が

強かったり。まぁ結構前の話ですが。
なのでやはり各自それぞれ試してみるのが良いかと。

 

 

長々読んで頂いた方向けの結論

コア数の少ない古いPCであればフォアグラウンドのブーストは

効果的かもしれません。しかし最近売られているゲーミングPCだと

普通に6コア以上ありますし、素でフルHD程度では100FPS以上

出るモデルが多いですから下手に数値を弄ると入力遅延等々を

発生させるだけな気もします。

そういう意味で面倒だったり、よく分からない人は触らない方が

良い項目という結論になりますね。

 

ちなみにこれを書いているセカンドPCはゲームをやりませんし、
あれこれ動いているので41(29)〈Short-固定-2:1〉です。

 

 

 

補足
初期設定値2とAAの設定値00、BBの設定値00の説明


デフォルトの値はデスクトップOS、サーバーOS共に『2』と
なっております。

 

では2ってなんだい、上に挙げた数値に無いじゃないか

となるのですが、デスクトップOSとサーバーOSで値が

変化します。
ちなみに6bit表記『AABBCC』の2進数で2を表すとこう
なります。
000010

 

で。
デスクトップOSの場合最初の2bitAAに該当する00は
10と同等と扱われる為、10つまりShortとなります。

真ん中の2bitBBに該当する00は今度は01と同等と扱われる
為、01つまり可変となります。
最後の2bitCCに該当する10はそのまま10で3:1の
ブースト設定です。

 

という事でデスクトップOSにおける『2』は
100110(Short-可変-3:1)という事になります。
おー、上にありますね。100110は10進数で『38』
16進数で『26』つまりプログラム設定を選んだ時と
同じ数値になります。

 


さて今度はサーバーOSの場合
こちらも2は000010となるのですが扱いがサーバーでは

異なります。
最初の2bitAAに該当する00は10と同等に扱われ、
10つまりLongになります。

真ん中の2bitBBに該当する00は01と扱われる為、固定と
なります。
さて、最後の2bitCCに当たる10ですが、真ん中の2bitBBが
固定となりますのでブースト無効、つまり1:1となる為
00扱いになります。

 

という事でサーバーOSの2は011000(Long-固定-1:1)
となります。
こちらも上にありますね011000は10進数で『24』
16進数で『18』つまりバックグラウンドサービス設定を

選んだ時と同じ数値になります。