これは Mackerel Advent Calendar 2021 の16日目の記事です。
Mackerel チームでアプリケーションエンジニアをやっている inommm です。
この記事では Intel MacBook Pro がサーマルスロットリングしている状況を Mackerel へ投稿し可視化した様子を紹介します。
サーマルスロットリングとは
昨今の CPU は動作周波数を動的に調整できるようになっています。
過度な発熱を防ぎ、システムを守るために動作周波数を落とすことを、サーマルスロットリング (Thermal Throttling) と呼ぶようです。
先日の @tatsuru さんの 記事 によると M1 チップはあまり発熱しないとのことですが、手元の Intel な MacBook Pro ではどの程度サーマルスロットリングが発生しているのかふと気になったので確認してみることにしました。
サーマルスロットリングの確認方法
確認するためのツールがいろいろとありそうです。
1. Intel Power Gadget を使う
動作周波数や消費電力、温度をグラフで細かく確認することができます。ログに出力したりもできるようです。
2. Hot を使う
「Hot」はメニューバーに常時スロットリングの状況を表示するので、作業中すぐに把握できるようになっています。
3. pmset コマンドを使う
pmset コマンドを使用して、CLI でスロットリングの状況を確認することもできます。
$ pmset -g therm
Note: No thermal warning level has been recorded
Note: No performance warning level has been recorded
2021-12-15 19:57:37 +0900 CPU Power notify
CPU_Scheduler_Limit = 100
CPU_Available_CPUs = 8
CPU_Speed_Limit = 100
pmset の結果を Mackerel へ投稿し可視化する
今回はより長期間のスロットリングの状態を保存し、時系列で振り返って確認できるように、pmset コマンドの結果を Mackerel へサービスメトリックとして投稿する簡単な Ruby スクリプトを組んでみました。
#!/usr/bin/env ruby
require 'mackerel/client'
API_KEY = "MACKEREL_API_KEY"
service_name = "thermal_throttling"
mackerel = Mackerel::Client.new(mackerel_api_key: API_KEY)
pmset_command = "/usr/bin/pmset -g therm"
sleep_sec = 60
loop do
now = Time.now
pmset_results = `#{pmset_command}`.split("\n")
.select { |line| line.match(/\A\s+.+=.+/) }
.map { |line| line.split("=").map(&:strip) }
.to_h
metrics = pmset_results.map do |key, value|
{
"name" => "mbp.pmset.therm.#{key.downcase}",
"time" => now.to_i,
"value" => value.to_i
}
end
pp metrics
mackerel.post_service_metrics(service_name, metrics)
sleep sleep_sec
end
毎分 pmset コマンドを実行して結果をパースし、各値を POST しています。
このスクリプトをしばらく動かしてみました。
見てみる
これが実際に Mackerel へ投稿され、可視化されたスロットリングの様子です。
午前中から昼過ぎにかけて一人で作業をしていたり、ビデオ会議に参加している間は特に大きなスロットリングは起きていないようです。しかし15時頃からビデオ会議で画面共有をしつつ、VS Code の Live Share でホストとして共同編集作業を始めたあたりから様子が激変しています。
実際にこの時間に作業相手と動作が遅いねというやりとりをしていました。17時前に休憩をいれたタイミングで一旦収まり、作業を再開したタイミングから19時過ぎまで再びスロットリングが続いている様子も確認できます。
一番スロットリングされている部分では40%近くまで下がってしまっていますね...
まさかここまでとは...
最後に
MacBook Pro が高負荷時に発熱を抑えるため、スロットリングしている様子を Mackerel で確認できるようにしてみました。自分の MacBook Pro でここまでスロットリングが起きていたことに驚いています。ひとまずは USB ファンなどで冷やしつつ状況が改善されるか様子をみてみたいと思います。「いずれは M1」ですね。