1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Intel MacBook Pro のサーマルスロットリングの状況を Mackerel で見てみる

Posted at

これは Mackerel Advent Calendar 2021 の16日目の記事です。

Mackerel チームでアプリケーションエンジニアをやっている inommm です。

この記事では Intel MacBook Pro がサーマルスロットリングしている状況を Mackerel へ投稿し可視化した様子を紹介します。

サーマルスロットリングとは

昨今の CPU は動作周波数を動的に調整できるようになっています。
過度な発熱を防ぎ、システムを守るために動作周波数を落とすことを、サーマルスロットリング (Thermal Throttling) と呼ぶようです。

先日の @tatsuru さんの 記事 によると M1 チップはあまり発熱しないとのことですが、手元の Intel な MacBook Pro ではどの程度サーマルスロットリングが発生しているのかふと気になったので確認してみることにしました。

サーマルスロットリングの確認方法

確認するためのツールがいろいろとありそうです。

1. Intel Power Gadget を使う

動作周波数や消費電力、温度をグラフで細かく確認することができます。ログに出力したりもできるようです。

IPG.png

2. Hot を使う

「Hot」はメニューバーに常時スロットリングの状況を表示するので、作業中すぐに把握できるようになっています。

Hot.png

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 へ投稿され、可視化されたスロットリングの様子です。

スクリーンショット 2021-12-16 0.08.20.png

午前中から昼過ぎにかけて一人で作業をしていたり、ビデオ会議に参加している間は特に大きなスロットリングは起きていないようです。しかし15時頃からビデオ会議で画面共有をしつつ、VS Code の Live Share でホストとして共同編集作業を始めたあたりから様子が激変しています。

実際にこの時間に作業相手と動作が遅いねというやりとりをしていました。17時前に休憩をいれたタイミングで一旦収まり、作業を再開したタイミングから19時過ぎまで再びスロットリングが続いている様子も確認できます。

一番スロットリングされている部分では40%近くまで下がってしまっていますね...
まさかここまでとは...

最後に

MacBook Pro が高負荷時に発熱を抑えるため、スロットリングしている様子を Mackerel で確認できるようにしてみました。自分の MacBook Pro でここまでスロットリングが起きていたことに驚いています。ひとまずは USB ファンなどで冷やしつつ状況が改善されるか様子をみてみたいと思います。「いずれは M1」ですね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?