(2025年)fps・描画遅延を改善する現代的タイマー最適化(Rock)
ちゃんとした日本語内容はディスコード鯖のプライベートカテゴリ(条件アリ)---------🎟️3 Register PRIVATE--------にあります。(ワンタッチで4パターンの設定を変えれるスクリプトもディスコ内でダウンロードできます)
現在相性問題が確認されています。まとまり次第追記致します。設定を適用される方は必ず復元オプションの作成を行ってください。
2025-11/20追記【重要】▼
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel] "DisableLowQosTimerResolution"=dword:00000001の項目がエラーコード: 0x139を発生させています。安全の為DisableLowQosTimerResolutionは適用しないでください。
ディスコードサーバーに詳細な情報を追記しています。
気になる方はそちらをご覧の上、設定を行ってください。
この記事はロックな感じで冗談ぽくカジュアルに書いてます&思想強めです。
下の画像のように皆さんが協力してくれました。(一部抜粋)




オーケー、ブラザー!堅苦しい能書きはもうウンザリだろ? お前のPC、なんかカクつかねぇか?「今のは絶対当たってた!」って、モニターをぶん殴る寸前みたいな顔してないか?
わかるぜ。お前はハードのせいだとか、ゲーム会社のクソ最適化のせいだとか思ってる。だがな、ブッブー!大間違いだ。 真犯人は、お前のWindowsさ。あいつは「時間の管理」が絶望的にヘタクソなんだよ!
PCの中じゃ、CPUだのGPUだのが猛烈なスピードで働いてる。
だが、そいつらを束ねるOSっていう指揮者が、壊れたメトロノームを振り回してたらどうなる? そりゃカクつきもするし、弾も当たらねぇってワケだ!
巷の専門家サマたちは、10年前から同じこと言ってる。「HPETは切れ!あんなモンは老害だ!オーバーヘッドの塊だ!」ってな。 ハッ!笑わせるぜ。そいつらは、いまだに「ブラウン管は目に優しい」とか信じてるタイプだ。
今日は、そのカビの生えた神話を、俺がバールでこじ開けてやる。
「HPETこそONにしろ!」 これこそが、お前の撃ち合い体験を天国にブチ上げる、唯一の真実だ。
お前のPC、時差ボケだった
まず、なぜお前のPCがポンコツなのか、その根本原因からだ。
Windowsってのは、オーケストラの指揮者みてぇなもんだ。CPU、GPU、メモリっていう個性バラバラの演奏者どもに「今だ、音を出せ!」「そこで入るな!」って指示を出すのが仕事さ。
で、その「タイミング」を計るメトロノームが「タイマー」だ。
フレーム描画「GPU!次の絵、さっさと描け!」
入力処理「マウスがクリックされたぞ!ゲームに伝えろ!」
ネットワーク「敵の位置データだ!急いで送受信しろ!」
CPUタスク「ゲームとDiscord、一瞬で切り替えろ!」
これ全部、タイマー基準なんだよ。 もしそのメトロノームが「不正確」で、しかも「クソ重い」代物だったら? オーケストラがグダグダになるみてぇに、お前のPCもグダグダになる。それがスタッターとラグの正体だ。
PCに内蔵された複数の時計と、たった一人の独裁者
ここが一番笑えるポイントなんだが、お前のPCには、時計が1個じゃねぇ。何個もあんのさ。
HPET マザーボードにいる、超マジメだけどクソ堅物なおじいちゃん時計。
TSC CPUの中にいる、超速いけど自己中な若造時計。
LAPIC Timer CPUのコアごとにいる、まぁまぁな時計。
ACPI PMTIMER 電源管理用の、ぶっちゃけどうでもいい時計。
で、Windowsのイカれた設計はこうだ。 起動するたびに、この中から「たった一つだけ」を"公式時計"として選ぶ。
ゲームも、Discordも、ブラウザも、OS自身も、全員がそのたった一つの時計を共有させられるんだ。狂ってるだろ?
「ゲームは速いTSC使って、裏のDiscordはHPETで」なんて、そんな器用なマネは不可能なのさ。 だから、「どの時計が公式に選ばれるか」、そして「OSがそいつをどう使うか」が、お前のゲーム人生を左右するってワケ。
定説への挑戦 ― なぜネットの神様たちは間違っていたのか?
オーケー、ここからが本題だ。なぜ「HPET ON」なのか。
一般的な定説「HPETは精密だが重い過去の遺物」
まず、なんでHPETが嫌われてるかを知っとけ。 こいつは元々、科学計算とか金融取引とか、そういうプロ向けのヤバい世界のために作られた、超高精度な時計だ。
だが、こいつにはデカい欠点があるとされてきた。
「オーバーヘッド(頭痛のタネ)が大きい」ってな。
時間を知らせる(割り込み)たびに、CPUにクソ面倒な仕事を押し付けるんだ。例えるなら、時間を知らせるのに毎回、重厚な鉄の扉をギギギ…ってノックするようなもんだ。
高FPSになればなるほど、この「重いノック」がCPUのリソースを食いつぶして、カクつきやFPS低下を引き起こす。
だから「HPETはOFFにしろ!」ってのが、今までの常識だった(ゲーマーなら今もOFFが常識さ)
対抗馬「TSC」― 超高速・低負荷な現代の覇者
そこで登場したのが、HPETの対抗馬、TSCだ。
こいつはCPUコアに内蔵されてて、メチャクチャ速い。オーバーヘッドはほぼゼロ。 昔は「省電力機能でクロックが変わると、こいつも狂う」っていうポンコツだったが、「Invariant TSC」って技術でその欠点も克服した。
だから、ネットの"神様"たちは、今もナウで「TSCこそ最適解!HPETは今すぐ窓から捨てろ!」って叫んでるワケさ。
体感が語る真実
撃ち合いを制するのは「HPET ON」という逆説
理論上はな。 だが、FPSで一番大事なのは、数字上のFPSじゃねぇだろ? 「入力と画面とサーバー判定が、寸分の狂いもなく一致すること」 つまり、「ヒットレジストレーションの信頼性」と「操作との一体感」だ。
ここで、俺たちのおじいちゃん時計、HPETを再評価する時が来た。
いいか?TSCは所詮、「CPUの時計」でしかないんだ。 一方、HPETはマザーボードにいて、システム全体(GPU、ネットワーク、サウンド)と、より厳密に同期が取れるプラットフォームタイマーなんだよ。
TSC(若造)だけが爆走してても、他の仲間(GPUとか)が別の時計見てたら、連携が取れるワケねぇだろ? これが、「入力」から「描画」、「ネットワーク通信」までの一連の処理にズレを生む。 お前の「当たってるはずなのに当たらない弾」の正体は、これさ。
俺が散々試した結論はこうだ。 TSC優先(HPET OFF)だと、確かに平均FPSは数字の上ではちょっぴり高いかもしれねぇ。だが、なんかヌルつく。弾が当たらねぇ。敵の動きがキモい。 これだよ、これ。数値じゃ測れねぇストレスだ。
HPETとの共存 ― カーネル最適化術
ォーケー、「HPETをONにする」と決めたな。
だがな、ただONにするだけじゃダメだ。OSに「その時計の賢い使い方」を叩き込んでやらなきゃ意味がねぇ。 これから、PCの心臓部(カーネル)を調律する。場所はここだ。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel
DisableLowQosTimerResolution (値: 1)→この値は2025-11/20より廃止になりました。エラーコード: 0x139を発生させるためです。
OSの無駄なせっかち"を止める。 Windowsってのは、一部のアプリのために、タイマー精度を過剰に(1msとかに)引き上げようとするお節介なクセがある。これがCPUへの割り込みを無駄に増やし、DPCレイテンシ(応答の遅れ)を悪化させる。 これを「1」にすると、カーネルが「そんなに急がなくていい」と落ち着きを取り戻す。システムの安定化に必須だ。
CoalescingTimerInterval (値: 5)
割り込みを賢くまとめる。 ゲーム中、CPUには「アレやれ!」「コレやれ!」って割り込み要求が嵐のように殺到する。 この設定は、「いちいち電話してくんな! 5ミリ秒待って、まとめて報告しろ!」っていう賢いバッチ処理だ。 HPET ON環境だと割り込みが重めだから、こいつが超重要になる。長くしすぎると遅延するが、試した結果、「5ms」が応答性を殺さず負荷を減らす黄金比だ。
CacheAwareScheduling (値: 1 または 0)
CPUの記憶力をブーストする。 OSに「さっき使ったデータが残ってるコアに、優先的に仕事(タスク)を回せ」と賢くさせる設定だ。キャッシュミスが減ってパフォーマンスが安定する。 ただし! お前が使ってるCPUが第12世代より古いとか、ミドル以下のザコCPUなら、余計なことさせると逆に不安定になる。その場合は「0」にしとけ。自分のマシンと相談しろよ。
TimerRebaseThreshold (値: 300 または 500)
時計のズレを、いちいち直すのをやめさせる。 OSは「時計、ちょっとズレたかも?」って定期的に補正(リベース)するんだが、これが頻繁すぎると、それ自体がカクつきの原因になる。 この設定で「そんな神経質になるな」閾値を決めてやる。「500」が一番安定する。 もしお前が「俺は安定よりコンマ1%のFPSが欲しい」って言うなら「300」を試せ。
SerializeTimerExpiration (値: 1)
タイマー処理の渋滞を防ぐ。 これは上級テクだ。複数のタイマーが「時間切れだ!」って同時に叫んだ時、「うるせぇ!一列に並べ!」と処理を直列化させる。 処理の競合(ケンカ)による予測不能な遅延をブッ殺す。
特にHPETみたいな厳密な時計を使う環境下で、全体の安定性を保つための切り札だ。
魔法の呪文: bcdedit(CMD)
最後に、OSの"根本的な考え方"を、この2つの呪文で書き換える。
bcdedit /set tscsyncpolicy enhanced
bcdedit /set useplatformclock No
これは、「おいWindows!メインの時計はTSC(若造)でいい。だが、あいつがサボったり狂ったりしてねぇか、HPET(おじいちゃん)が常に見張って補正しろ!(enhanced)」 そして、「HPETをメインにすんじゃねぇぞ(No)!あくまでTSCをメインにしろ!」 っていう、最強のハイブリッド設定だ(この設定のメイン)
実践!チューニング・マニュアル
理屈はもういいな?さっさと手を動かせ。
【最重要!】始める前の誓約書 いいか、これはお前のPCの心臓に手を突っ込むオペだ。しくじっても俺は知らねぇ。 必ず「システムの復元ポイント」を作れ。すべて自己責任だ。文句は受け付けねぇ。
【Step 1】ボスの部屋(BIOS)へ挨拶に行く
(※昔いじって無効にしてなきゃ、大抵は最初から有効だ。自信がねぇヤツだけやれ)
まず、HPETっていうおじいちゃんをOSに紹介してやる。
PC再起動。メーカーロゴが出たら Del か F2 を連打してBIOS画面に入れ。
「Advanced」とか「PCH Configuration」とか、それっぽい場所を探せ。
「High Precision Event Timer」または「HPET」を見つけて「Enabled」に変えろ。
F10 押して保存、再起動だ。(最近のメーカーだと項目がない場合もあるぜ)
【Step 1 補足】死体安置所(デバイス マネージャー)での生存確認
(※こっちはOFFにしてるバカが結構いるから、全員チェックしろ)
BIOSで有効にしても、Windowsが「知らねぇよ」ってシカトしてることがある。
スタートボタン右クリック → 「デバイス マネージャー」を選べ。
リストから「システム デバイス」を探して、矢印をクリックして中身をぶちまけろ。
その内臓リストの中に「高精度イベント タイマー」様がいらっしゃるか確認しろ。
もしいたら、そいつを右クリックして「デバイスを有効にする」を押せ。(すでに有効ならそのままでいい)
ここにヤツがいるなら、OSは「ああ、確かにソイツ、いますね」と認識した証拠だ。
【Step 2】OSへの調教(bcdeditコマンド)
次に、Windowsの頭の固いルールを、俺たちのルールに書き換える。
スタートボタン右クリック → 「Windows PowerShell (管理者)」を選べ。
黒い画面が出たら、まず古いマニュアルを破り捨てる。これをコピペして Enter だ。 bcdedit /deletevalue useplatformclock (「そんなもんねーよ!」って怒られても気にするな。無いなら無いでいい)
続いて、核心の呪文2つを、1行ずつコピペして Enter だ。
bcdedit /set tscsyncpolicy enhanced
bcdedit /set useplatformclock No
「成功しました」って出たらOK。これでOSの調教は完了だ。
【Step 3】心臓部(レジストリ)の手術
最後だ。カーネルに俺たちのルールを刻み込む。
Windowsキー + R を押して、「regedit」と入力して Enter。
左のツリーで、この住所まで行け。(上のアドレスバーにコピペが一番早い) HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel
kernel フォルダを選んだら、右の何もない空間で右クリック → 「新規」 → 「DWORD (32ビット) 値」を選ぶ。
以下の5つのルールを、名前を間違えずに作成し、値を設定しろ。(すでにあるなら値を変えるだけだ)
名前: DisableLowQosTimerResolution→この値は2025-11/20より廃止になりました。エラーコード: 0x139を発生させるためです。
値をダブルクリックして、「値のデータ」に 1 と入力。(表記は16進数でOK)
名前: CoalescingTimerInterval
値をダブルクリックして、「値のデータ」に 5 と入力。(16進数)
名前: CacheAwareScheduling
値をダブルクリックして、「値のデータ」に 1 と入力。(16進数)
※忘れるな!お前のCPUがザコなら 0 だ!
名前: TimerRebaseThreshold
値をダブルクリックして、右側の「10進数」にチェックを入れろ。
「値のデータ」に 300 または 500 と入力。(安定の500がオススメだ)
名前: SerializeTimerExpiration
値をダブルクリックして、「値のデータ」に 1 と入力。(16進数)
全部終わったか?よし、PCを再起動しろ。 すべての変更が適用される。
おめでとう。お前のPCは、もう昨日までの時差ボケ野郎じゃねぇ。
戦場に戻って、違いをその魂で感じやがれ!
x2apicpolicyなどの追記はディスコード鯖にあります
