読者です 読者をやめる 読者になる 読者になる

今度は kernel_task だよ (4)

リンク: log.utashiro.com: 今度は kernel_task だよ (3).

アップルが「仕様」というのは kernel_task のロードを増やすというのが本来狙った動作だといことでしょう(バグなんかでなく)。想像ですが、kernel_task があのようになるのは、通常のプロセスの動作を減らしてCPUの発熱を減らす手段なんだと思います。
その根拠ですが、あまりシステム熱くないときに負荷の高いプロセス(たとえば、シェルスクリプトで while true ループ)を二つも動かしてやると、瞬間的に CPU の温度は 80 度以上になります。ところが、しばらくして kernel_task が 50% も動くようになると CPU 温度は 65度くらいに下がるんですね。これは、kernel_task が実はダミータスクで、ハードウェア的にはスリープしている証左ではないかと。

設計段階からの仕様で、それが日常的に発生することを想定しているのなら「仕様」と言ってくれてもいいけど、他に言いようがあるよねえ。「苦肉の策ではありますが想定された動作です」くらいにしとけばいいのに。

実は、挙動が微妙に僕のマシンと違います。CPU だけ使うアプリを走らせればもちろん CPU の利用率は 100% (200%) になるのですが、それだけでは kernel_task は出しゃばってきません。CPU の温度も一時期90度近くまで上がり、ヒートシンクやパワーサプライも60度を超えますが、徐々に落ち着いて70度ちょいくらいで安定します。これはべったりした机の上に置いて、吹き出し口も塞ぎがちにした、あまりいいとは言えない条件で実験してみた結果です。

Kernel_task4

あ、でも続けたら再現することもできた。何かのきっかけでスイッチが入っちゃうんだなあ。

Kernel_task5

これに本当に必要な kernel_task の処理が重なると、利用率が 160% を超えるようになってしまうのでしょう。

あとやっぱり USB デバイスとの関係はあるような気がしています。でも、間接的な要因は何であれ、直接的には熱が上がりすぎることが kernel_task の暴走 (事情がわかってみると「暴走」は正しくないような気もするが) の原因になっているのは間違いなさそうです。