タスクマネージャーCPU使用率の嘘、設計者が語る
初代タスクマネージャーを書いた元Microsoftエンジニアが、CPU使用率表示がなぜ「ちょっと違和感がある」数値を出すのかを自ら解説した。30年間動き続けてきたあの仕組みの内側には、時計・カウンタ・そして電話番号の話まで詰まっている。
初代タスクマネージャーを書いた元Microsoftエンジニアが、CPU使用率表示がなぜ「ちょっと違和感がある」数値を出すのかを自ら解説した。30年間動き続けてきたあの仕組みの内側には、時計・カウンタ・そして電話番号の話まで詰まっている。
今日この話を取り上げる核心
今回の主題はデイヴ・プラマー(Dave Plummer)が動画で語った「オリジナル版タスクマネージャーの設計思想」と、その裏で進行している別の事実──MicrosoftはすでにWindows 11でこのCPU使用率計算を業界標準に置き換え済みだ、という点だ。前者はノスタルジー、後者は現在進行形の話。両方を接続して書く。
タスクマネージャーは何を計っていたのか
「CPU使用率を計るなんて、コンピューティングの中で一番簡単な仕事のひとつに聞こえるだろう。CPUは忙しいか、そうでないかのどちらかだ。シリコンであって、創作ダンスじゃない」
プラマーは動画の冒頭でそう切り出してから、ひっくり返す。Windowsに「どれくらい忙しい?」と聞けば「73%です」と返ってきて全員帰宅できる──そんな世界は存在しない。「忙しいって、何をして忙しいんだ?」という問いが始まった瞬間、CPU使用率はスピードメーターではなく、会計帳簿の分析になる。
1コアだけ忙しいのか、全コアか。今この瞬間か、それとも直近の1秒か2秒か、あるいはUIが気まぐれに起きた瞬間か。ユーザーモードか、カーネルモードか、割り込み時間か、遅延プロシージャ呼び出しか、それともスケジューラが「どこかに請求書を回さなきゃいけなかった」という理由だけで存在する謎の会計バケツか。
タスクマネージャーはCPUの「今」を見ていない。前回覗き込んだ瞬間と、今回覗き込む瞬間の「差分」を見ている。つまり、CPUの速度計ではなく、走行距離計として動いている。
プラマーが選んだ、意外と賢い分母
愚直にやるなら、タイマーが切る間隔(たとえば2秒)でプロセスの消費CPU時間を割ればいい。だがプラマーはこれを採用しなかった。悪路を走るピックアップトラックの荷台に乗ったメトロノームにタイミングを任せるようなものだ、と彼は言う。Windows上のGUIタイマーは精密ではない。
代わりに選んだのは、プロセスごとに「起動してからの累計CPU時間(カーネル時間+ユーザー時間)」をカーネルから取り、前回取得した累計との差分を取る方式。もうひとつ賢いのが分母で、壁時計の経過時間ではなく全プロセスのCPU時間合計を分母にした。これでUIが少し遅れて目覚めても、タイマーが揺れても、比率自体は破綻しない。分子も分母も同じ物差しで測られているからだ。
あるプロセスの使用率は「そのプロセスの差分 ÷ 全プロセスの差分」で決まる。整数演算だけで小数点以下を避け、ホットなUIパスから浮動小数点演算を締め出す。プラマー曰く「90年代のデスクトップユーティリティらしい、マシンの気持ちを完全に読み切って『ぜひこれだけやってくれ』と頼む書き方」だ。
現代のCPUがこの前提を壊した
ここまでは1990年代の話。問題は、この会計方式が前提にしていた「CPU時間と実際の仕事量は比例する」という暗黙の契約が、現代のシリコンでは成立しないことだ。
動的周波数スケーリング、ターボブースト、thermal throttling、深いアイドル状態。コアは仕事がなければクロックを落とし、コーヒーストローで電力をすすり、仕事が来た瞬間にブーストする。タスクマネージャーの会計はあくまで「このプロセスがスケジュールされていた時間」を数えているだけで、その間にサイクルがいくつ回ったかは見ていない。時間と仕事量の契約が静かに壊れた瞬間だ。
プラマーはこれを高速道路の比喩で語る。フェラーリが走る半分埋まった高速道路は、セメントトラックで渋滞した満杯の高速道路よりずっと多くの交通をさばける。ところがタスクマネージャーが見せるのは占有率、ユーザーが体感するのは生産性だ。
25%で軽快に動くマシンと、100%に張り付いてWindowsが糖蜜の中を泳いでいるようなマシンがある。メーターが壊れているわけではない。占有率は測れている。ただ、生産性を測っていないだけなんだ。
自宅電話番号をコードに埋めた男
動画の中で特に面白いのが、99%で値をクランプする1行のコードにまつわる昔話だ。初期のタスクマネージャーで、合計が100%を超える値が時々出ていた。計算が正しければあり得ない。ということは、残る可能性はひとつ──カーネル側のバグ。
ところが90年代のMicrosoftの序列では、プラマーはUI担当の駆け出しで、カーネル側にはデヴィッド・カトラー(Dave Cutler)をはじめとする「シルバーバックたち」がいた。Wikipediaに経歴ページがあるような面々だ。「あなたたちのバグかも」と言いに行っても、相手にしてもらえない。この組織の壁が、これから語られる奇行の理由になる。
アサート(条件が崩れたらデバッガで止まる仕掛け)を仕込んでも、自分のマシンでは再現しない。チームのマシンでも再現しない。そこでプラマーは自宅電話番号をアサートメッセージに埋め込んだ。社内の誰のマシンでも合計が100%を超えた瞬間、彼に電話が来るはずだった。
ベータが数千〜数万人のテスターに配布された。引っ越しとトラック運転手への転身を覚悟した。──そして、電話は一本も来なかった。最終的にラボのデバッガで現象が捕まり、カーネル側の稀な会計異常であることが確認された。
そしてそのアサートは、今もインターネット上に漏洩している全ソースコードリークに残っている。プラマーの自宅番号は30年後の今も同じだという。「コードで見つけても、電話せずにメールにしてくれ」と彼は笑う。
マルチコアで数字が「おかしく」見える本当の理由
ユーザーがタスクマネージャーに「騙されている」と感じる最大のポイントは、マルチコアの扱いだ。プラマーが設計した方式では、マシン全体のキャパシティに対する割合を答える。8コアのマシンで1コアを完全に飽和させたプロセスは、マシン全体から見れば12〜13%しか食っていない。
そのプロセスの視点では100%、マシンの視点では12%。どちらも嘘ではないが、別の質問への答えだ。「頑張ったか」を聞きたい人に、「占めたか」を答えている。この食い違いが、特に最近のメニーコアCPUで違和感として増幅する。プラマー自身が使う192スレッドのDell Precision 7875では、1コアを完全に潰しても全体使用率は1%にも届かない。
もうひとつの罠は、サンプリング窓の平均化だ。100ミリ秒だけ暴れて眠るプロセスは、リフレッシュ間隔の中で希釈されて、ときに0%に丸められる。プラマーはこれを「駐車場から裁判所までのカーチェイスを、平均速度で説明するようなもの」と呼ぶ。技術的には正しい。感情的には役に立たない。
そしてMicrosoftは、すでに直している
ここからが今の話だ。
プラマーの動画は「オリジナルのタスクマネージャーがなぜそう計っていたか」を語る歴史編だが、実はMicrosoftは2025年5月のWindows 11 24H2アップデート(KB5058411)で、タスクマネージャーのCPU使用率計算をすでに業界標準に置き換え済みだ。
新方式の式はシンプルだ。
CPU % = (プロセスCPU時間の差分) ÷ (経過時間の差分 × 論理プロセッサ数)
従来の「Processor Utility」方式は、論理プロセッサ数を考慮せず、ベースクロックを基準にしていたため、ターボブースト中のコアが100%を超えて「クランプ」されたり、8コアで1コア飽和のプロセスが100%と表示されたりしていた。新方式ではPerformanceタブ、Usersタブ、Processesタブすべてが同じ値で揃い、PowerShellのGet-Counterやパフォーマンスモニター、サードパーティ製ツールとも整合する。
旧方式が恋しい人向けには、詳細タブに「CPU Utility」という列が隠しカラムとして残されている。30年続いた「プラマー方式」は、レガシー互換のための予備席に回った。
設計者自身が指し示した方向
動画の中盤、プラマーは画面にひと言メモを添える。「もし私が王なら、CPU使用率は実際に達成された仕事量と、理論上達成可能だった最大仕事量との比であるべきだ」。
皮肉なことに、Windows 11がたどり着いた新方式は、まだ理想形ではない。時間ベースの会計はそのままで、分母に論理プロセッサ数をかけて正規化しただけだ。動的周波数スケーリングと実サイクル数のズレは残っている。それでも、少なくとも「1コア飽和で100%」は消えた。占有率としての誠実さは、ひとつ前に進んだ。
これが語っているのは何か
30年前のUIコードが現代のシリコンと噛み合わなくなる──よくある話だ。だがプラマーの動画が面白いのは、昔のコードがより明示的だった点を照らしていることだ。小さな嘘の作り方が、ソースを読めば見えた。真実とコストと単純さと、リストビューがちらつかない画面幅との妥協が、全部コメントと1行のクランプに刻まれていた。
タスクマネージャーのCPU欄は、シリコンの温度計ではない。会計帳簿だ。累計時間を取り、差分を出し、総消費で正規化し、四捨五入し、醜い端数をクランプし、ユーザーがランチ前に判断を下せる数字として差し出す。これは「大半のシステムプログラミング」そのものだ──完璧な真実を探すのではなく、ランチ前にユーザーが決断できる、一番安くて誠実な要約を探す仕事だ。
プラマーが1995年の火曜日に自分のために書いた99という上限値は、2025年5月のパッチで正式にレガシー互換のための列に退いた。走り続けるには、走り方を変え続けるしかない。
参照元
- Dave's Garage - Task Manager is LYING About Your CPU Usage (Here's the Truth)
- Microsoft Support - July 8, 2025—KB5062553 (OS Build 26100.4652)
関連記事
- 80KBのタスクマネージャー動画に、開発者たちが呻いた理由
- サードパーティのアンチウイルスは不要、Microsoftが明言
- KB5083769がPCを壊す:Windows 11 4月更新で起動不能ループ
- Defenderが悪性ファイルを元の場所に書き戻す奇妙な挙動
- 放置したWindows PCは3時間の更新地獄に叩き込まれる
- Windows 11 24H2偽更新サイト、検出ゼロのマルウェア配布
- Windows Insider刷新、「機能が届かない」問題に公式対応へ
- Clippy引退から25年、Copilotは81個に増えて帰ってきた
- Windows Insider刷新、チャンネル統合と初の機能フラグ
- Windows 11/10のロック画面時計、最大30秒の遅れはMicrosoftが「仕様」と明言