リンク:CPU使用率は間違っている

https://yakst.com/ja/posts/4575
記事の更新日:2017-06-17
Netflixのパフォーマンスエンジニアである筆者からの、topコマンドなどで表示されるCPU使用率(%CPU)は、いまや本当の使用率を表しておらず、チューニングなどのための指標として使えないという指摘。なぜそうなってしまったのか、何を見れば本当のCPU使用率がわかるのかをわかりやすく解説した記事。
登録日時:2017/06/20 12:05:12
サイト:Yakst
著者:doublemarket

はてなブックマークでのコメント

  • gayou2018/06/20 07:55
    いつもtopコマンド見てた。
  • yuyakko2018/06/15 06:27
    どのプロセスがCPUを占有しているか知りたいだけなんだからこれでいいのに
  • yaaamaaaguuu2018/03/26 02:20
    “perf stat -a -- sleep 10”
  • fake-jizo2017/07/22 22:49
    私たちみんながCPU使用率として使っている指標は非常に誤解を招くもので、この状況は毎年悪化しています。CPU使用率とは何でしょうか?プロセッサーがどのくらい忙しいか?違います。CPU使用率が表しているのはそれでは
  • worpe2017/06/26 01:04
    どういうこと?
  • snicmakino2017/06/21 13:11
    これは知らなかった、勉強になる
  • moccos_info2017/06/19 14:45
    ソフトウェア自分で書くより使うだけ人の方が圧倒的に多いだろうから、どちらかというと正しい、でいいんじゃないかなあ
  • kairusyu2017/06/18 19:03
    ストールされてるときって演算発生しないからCPU温度上がらない、でいいの?(わかってない
  • taro-r2017/06/18 14:03
    なるほど,勉強になった。
  • pmint2017/06/17 14:51
    アプリレベルで考慮すると「オブジェクトを作るな、破棄もするな」となって今日の分かりやすいコーディングを根本から否定することになるのかな。
  • mogmognya2017/06/17 12:21
    CPU使用率はボトルネックがCPUではなくてメモリの場合が多いですよということだけ理解したが、あとは「よし!わからん!」って感じである。はてなは詳しい人が多いのだなあ。
  • zou3dazou2017/06/17 09:45
    あとで
  • Iridium2017/06/17 08:53
    え、でもメモリにアクセスしないコーティングって可能なの?どうやって?具体的に方法を知りたい
  • lenore2017/06/17 08:49
    %cpuはstalledを含むのでipc など他の指標と共に計測する。"IPCが1.0より小さければメモリーバウンド、IPCが1.0より大きければ命令バウンドである可能性が高い"
  • REV2017/06/17 08:16
    内部には重要、外部からは「それもまた使用率」
  • ragey2017/06/17 07:15
    mac だとどうなるのか?
  • tkmoteki2017/06/17 02:39
    面白い。スピンロックなんて、何だか悲しいメモリロック久しぶりに聞いた。今はどんな事情なのか。 CPU使用率は間違っている - Yakst via @nuzzel
  • shotakame2017/06/17 02:28
    知らなかった
  • tettekete375642017/06/17 02:07
    まあ確かにCPU使用率ってなんだよと思っていたけど。CPUはレジスタに乗ってる値しか計算できないのでメモリからレジスタにコピーする命令がブロックしてても使用率は上がるって話。ですよねって感じではある
  • blueribbon2017/06/17 01:19
    「サイクル毎の命令数(IPC)のような他の指標を使うことで、%CPUが実際何を意味しているかを知ることができます。IPCが1.0より小さければメモリーバウンド、IPCが1.0より大きければ命令バウンドである可能性が高い…」
  • takayaman2017/06/17 00:04
    メモリのI/Oをまつストールも含んでいる。
  • mamezou_plus22017/06/16 23:53
    CPUの発展にわくわくしてた人間なら解ってる話で、誰向けに書いたんだろう?
  • denilava2017/06/16 23:21
    この記事が1000超えブクマってはてぶ民の偏りなのか高レベなのか。IPC>1は、おおよそパイプラインの命令が維持されてる=命令の最適化がいる。IPC<1は、パイプラインがストールしてる=命令が実行されてないと。
  • dowhile2017/06/16 22:53
    ほとんどの演算はメモリバウンドなんだよなあ
  • rryu2017/06/16 22:42
    CPU使用率とロードアベレージはシステム全体の「暇じゃない度」だから、確かに個々のプログラムがCPUを使い切っているかを計るのには向いてはいない。
  • iR32017/06/16 22:37
    ふむふむ
  • nisisinjuku2017/06/16 22:15
    想定していない状況になってきたなら新しい指標を使うようにOSなのか評価する側が変わっていくといいよな。
  • ya--mada2017/06/16 21:15
    ワークロードはシステムごとに異なるから、、全体を見て、何を重視するかはじっくり見定めて監視設定してるねぇ。Voiceやってたときはcpu 使用率とコンテクストスイッチとNIC 割り込みを指標にリソース調整だった。
  • macj_jp2017/06/16 21:15
    ソフトウェアの品質判断にはそのまま使えるというブクマになるほどと思う一方、サーバーの増設判断にはこの記事通りにボトルネックを探した方がいいように思う。
  • dekasasaki2017/06/16 21:00
    あとでよまないとだめなきなする。
  • kniphofia2017/06/16 20:40
    cpuの使用率をもう少し細かく表示しましょうってだけなのにこのブコメ
  • hogetahogeko2017/06/16 20:26
    メモリを待つこともいまだに「CPU使用率」と呼ぶ
  • chintaro32017/06/16 20:22
    最初 core-iが出てきた時に早く感じたのはこの辺のF/Wレベルでの改善が大きかったんだと思う。DDR4で良くなるかと思ったけど、まだそうでもないね。
  • junmk22017/06/16 20:16
    タスクマネージャーで見るとCPUにもメモリにも余裕があるのに、頻繁に固まるブラウザの解決策的な事が書いてあるかと思ったらよくわからなかった。
  • IGA-OS2017/06/16 19:48
    指標の一つだけど、チューニングには使いづらい指標なのか。
  • kitaj2017/06/16 19:42
    なるほど
  • joyan09302017/06/16 19:42
    Brendan Greggの解説。インフラエンジニアなら、Linux Pefomance toolは壁紙にすべき。http://www.brendangregg.com/Perf/linux_perf_tools_full.png
  • ewq2017/06/16 19:41
    すごく分かりやすく書いてくれてるんだろうけど何言ってるか全然わからん。
  • tsz2017/06/16 19:38
    メモリもIOなんだよね〜
  • dirtjapan2017/06/16 19:33
    まずはCPU使用率みながらチューニングして、その先はストールとかみながらチューニング、って基本どおりだな。
  • tengo19852017/06/16 19:31
    原文でかなりブクマ付いてるけど、こっちにもこれだけ付くということは読んでなかった人がいっぱいなのだろう。この人のドキュメントはだいたい読んでおいたほうがいい。ツールの分類図が素敵。
  • alastor9142017/06/16 19:10
    フ-('.'o)-ン
  • kabacsharp2017/06/16 19:05
    え?topって、I/O待ちを考慮してなかったの?
  • enicalpha2017/06/16 19:02
    ハードよりのことはホントいつになっても身につくことが難しいとおもう。
  • kitadon2017/06/16 19:00
    頭の片隅においておく。
  • uzuki-first2017/06/16 18:56
    知らなかった
  • inumax212017/06/16 18:56
    (´・ω・`)
  • ata000002017/06/16 18:52
    あるプロセスのボトルネックを調べるのにCPU使用率を使うのは不適切という話で、他の用途でまで否定されるものなのかなー。例えばサーバをスケールアウトするかの判断には使えそうだと思うけど…
  • rAdio2017/06/16 18:51
    CPU使用率は確かに「指標」というより「目安」って感じだし、よく理解もしてなかったので、「高負荷の時には上昇してることもある」という結果としての値としてしか活用できてない。
  • chinshufu2017/06/16 18:46
    素人VPSユーザーには有り難い記事
  • kei_10102017/06/16 18:31
    CPUやメモリやストレージやネットワーク上をデータがどのぐらいの速度差で流れるのか可視化しつつ、プログラムやハードウェアの構成を見直してパフォーマンスチューニングするパズルゲーム、誰か作って。
  • gkom2017/06/16 18:30
    社会
  • n3142017/06/16 18:25
    プログラムでループしすぎて遅いとか変なSQLで遅いとか言ってるレベルでは関係ないよね…。
  • t-murachi2017/06/16 18:12
    humm...
  • nezuku2017/06/16 17:52
    ある程度プロセッサアーキテクチャの理解が前提のエントリかもしれない。処理が終わるまでの時間と、CPUパイプラインがストールせずかつどれぐらい埋まっているか、の違いな感じかな
  • Nilfs2017/06/16 17:45
    日本語訳出てたのか、もっかい見直すかな
  • mukaken2017/06/16 17:44
    “非常に誤解を招く指標になりつつあります。最近の負荷の多くを占める、メインメモリを待っているサイクルを含んだ値になっているため”
  • s_shibano2017/06/16 17:38
    CPUの話
  • sorakazetan2017/06/16 17:31
    専門用語ばかりでわからなかった(;^_^Aさすがに難しい
  • Andrion2017/06/16 17:29
    翻訳あざーっす!
  • lyiase2017/06/16 17:24
    ストール率(I/O待ち)、これ以外と厄介なんだよね…。現実、B/F比が高いマシンに変更可能ならいいんだけど、特に最近多いマルチコアやGPUではかなり小さいので計算量が小さくデータがでかい時は大変。
  • xevra2017/06/16 17:04
    別に間違ってないが、盲信して満足する事無いように内容をよく知っておけって話。社畜の言う「忙しい」も同様で中身を見たらどうでもいい事ばかりやっているからちゃんと中見ようよと言う話
  • zakusun2017/06/16 17:01
    io待ちでは主にディスクしか気にしていなかったな。何らかの資源を確保できずに命令実行待ちで、実質的にcpuが空いているのに仕事が出来ていないことはロードアベレージで見ていた。古いな、考えが。
  • yutam72017/06/16 16:49
    うーん
  • topiyama2017/06/16 16:38
    せやな。これをもとにした消費電力計算もやめて欲しい
  • reoring2017/06/16 16:26
    なるほどー
  • xr00382017/06/16 16:24
    メモ的/『詳解 システム・パフォーマンス』 http://amzn.to/2swac9s に書かれているそうなのでチェックしておきたい
  • takc9232017/06/16 16:20
    頑張って英語で読んだ記事が翻訳されると損した気分になる
  • mEGGrim2017/06/16 16:11
    “Netflixのパフォーマンスエンジニアである筆者からの、topコマンドなどで表示されるCPU使用率(%CPU)は、いまや本当の使用率を表しておらず、チューニングなどのための指標として使えないという指摘”
  • Error4012017/06/16 16:05
    コメ欄の、わかってた人の「俺そんなの知ってた」感がすごい
  • deep_one2017/06/16 16:05
    まぁ待ち時間もユーザーにとっては使用率かな…でも別になってないと開発側はチューニングしづらい。
  • masfj2017/06/16 16:05
    そうですね。
  • joker10072017/06/16 16:03
    勉強になる。
  • kenzy_n2017/06/16 16:02
    エンジン
  • xact72017/06/16 15:55
    知ってた。
  • hiromo22017/06/16 15:50
    自分が正しいことを確認した。
  • yamadar2017/06/16 15:49
    "IPCが1.0より小さければメモリーバウンド、IPCが1.0より大きければ命令バウンドである可能性が高い"
  • mehori2017/06/16 15:38
    「CPUがアイドルでない時間」うんうんそれもまた(ry
  • yorkfield2017/06/16 15:20
    CPUを異常に食ってるプロセスをKillしたいとかの目的なら別に良いんじゃ無いかなあ。冒頭に書いて有るとおり、あくまでチューニングを想定してるんだろうけど。
  • otihateten35102017/06/16 15:19
    あとで読む。Macの使用率はたまに400%とか出てウケる
  • s-tomo2017/06/16 15:19
    メモリ使用率の間違われっぷりと比べたらこれくらいどうということはないな。
  • tsutsumi1542017/06/16 15:05
    uptimeでたいてい見てるけど別にCPU負荷だなんて思ったこと無いし
  • ayakanishino82017/06/16 15:02
    なんとなくは知っている
  • hyoshiok2017/06/16 14:59
    360 低レベルのチューニングは測定してボトルネックを発見する。間違った道具を使うと間違う。
  • tmtms2017/06/16 14:51
    勉強になる
  • umisama2017/06/16 14:41
    CPU使用率がパフォーマンス・チューニングのために必要なすべての要素を含んでいるわけではないのは理解できるけど、"間違っている"とは思わないかなあ。
  • six132017/06/16 14:36
    むかしmpstatの読み方で大変シゴかれたので、この辺の認識は正しいことがわかって安心した。
  • dagama2017/06/16 13:54
    普段topとか監視で見てるのはパフォーマンスじゃなくて異常が発生してないかだよね?チューニングの文脈でこんな荒い情報見ててもしょうがないし
  • junglejungle2017/06/16 13:53
    ARMだとPMUEVENTで取れるんだが使い方がよくわからない
  • tincast2017/06/16 13:53
    だろうねー… CPU使用率が高いのに涼しいままなパターンって、やっぱコレなんかしらね。また、メモリの応答が速ければハイパースレッディングの効率も上がったりするのかしら?
  • shozzy2017/06/16 13:53
    じっくり読み返そう
  • iww2017/06/16 13:48
    『しかし実はボトルネックはDRAMのバンクなのです。』
  • masatomo-m2017/06/16 13:40
    %CPUは処理のボトルネックがどこにありそうかを最初にざっくり区分けするときに見るものでしかないし、ボトルネック調査のアタリを付ける段階ではそれなりに有用かと思う
  • rindenlab2017/06/16 13:25
    "サイクル毎の命令数(IPC)のような他の指標を使うことで、%CPUが実際何を意味しているかを知ることができます。IPCが1.0より小さければメモリーバウンド、IPCが1.0より大きければ命令バウンドである可能性が高い"
  • kenichiice2017/06/16 13:02
    「Linux perfなどを使って読み出せるハードウェアカウンターであるPerformance Monitoring Counters (PMC)を使います」「top(1)に対しては、Linuxではtiptop(1)があり、プロセス毎のIPCを表示してくれます。」
  • tmatsuu2017/06/16 12:58
    おーあの記事の翻訳ありがとうございます。素晴らしい
  • ahomakotom2017/06/16 12:53
    ストールしようがウェイトしようが、Softwareの品質評価の基準としてCPU使用率を用いるのは間違えじゃないでしょ。その時間が短縮可能であっても他のプロセスに譲らないことに変わりはないのだから。
  • ryun_ryun2017/06/16 12:23
    興味深い。
  • fire_02182017/06/16 12:18
    [] CPU使用率は間違っている | Yakst
  • akiramaz2017/06/16 12:16
    “あらゆるパフォーマンスツールは、%CPUと一緒にIPCを表示するべきです。あるいは%CPUを、命令の完了サイクルとストールのサイクル、例えば%INSと%STLの対比にブレークダウンするべきでしょう。”
  • hobbling2017/06/16 12:13
    仮想マシンチューニングのためにstall値に関しては調べまくったな。
  • sonots2017/06/16 11:45
    詳解システムパフォーマンスの著者の記事。CPUの章に載ってる内容。
  • codehex2017/06/16 11:42
    おお
  • SigmaG22017/06/16 11:39
    これは読んでおこう
  • the482017/06/16 11:37
    クロックも変動するしな
  • yoku_08252017/06/16 11:31
    ほわー、面白い!
  • tanakh2017/06/16 11:17
    いや逆にストール率考慮せずにチューニングなんてしてる人おるん・・・?(´・_・`)
  • Ehren2017/06/16 11:07
    “CPU Utilization is Wrong”
  • NOV19752017/06/16 11:00
    この手の話だと昔AIXでメモリ使用率をファイルページが専有するからPIをみないと意味ないってのはあったな
  • lesamoureuses2017/06/16 10:59
    なるほどわからん
  • atsuizo2017/06/16 10:33
    メモリバウンドの場合、多重処理が近しいメモリ空間をアクセスしてセマフォ・ラッチ競合起こしてるだろうから、そこを分散しろって理解でOK?
  • shodai2017/06/16 10:29
    IO waitと同じようにmemory waitが分かるようにしろってこと?
  • pipehead2017/06/16 00:00
    /* http://www.brendangregg.com/blog/2017-05-09/cpu-utilization-is-wrong.html の和訳 */ > サイクル毎の命令数(IPC)のような他の指標を使うことで、%CPUが実際何を意味しているかを知ることができます。