2021-11-03

Apple Silicon M1シリーズmasOSのCPUコアやGPUの使用率/使用電力を詳しく見るには powermetrics コマンドと、ちょっとした工夫で見やすく

本記事の最後に、何ができるかを掲載しましたので、お急ぎの方はそちらへどうぞ
Apple SiliconがM1/M1 PRO/M1 MAXとシリーズ化されてきました。
パーソナルコンピュータとしては画期的なSoCになって、たくさんのCPUやGPUを積んでいます。
それにもかかわらずアイドリングじの電力消費はスマホ並です。

macOSはLinux系のOSなので、システム稼働状態を見るのに一番有名で手っ取り早いのはtopコマンドです。
ターミナルアプリを開いて次のコマンドを打ちます。

% top

OS全体およびプロセス毎のCPU使用率、メモリ使用量が動的に表示されます。
1秒毎の表示間隔で書き換えられますが、これが早過ぎる場合にはキーボードから s5<Return> と打つとたとえば5秒毎に変更できます。

次に、macOSでもっと有名で老舗なのが Menu Meters です(Menu Metersの最新版の公式サイト)。
ダウンロードしたzipファイルを展開して、/Applications フォルダにコピーして使用します。
Menu Metersではコア毎のCPU使用率、メモリ使用率、ネットワーク使用量をメニューバーに常駐したグラフで見ることができて便利です。

でも、高性能コアと高効率コアにそれぞれどれくらいの負荷がかかっているのか、動作周波数がどうなっているのか、消費電力がどうなっているのか、もっと詳しく知りたくなりますよね。
はい、そんな場合には、macOS専用のコマンドの powermetrics があります。

powermetrics も top と同じように、ターミナルアプリです。
次のコマンドで起動します。

% sudo powermetrics

powermetrics は管理者向けの特権コマンドなので、前に sudo というおまじないを付けて、(私は管理者ですよ、と宣言するために)パスワードを入力して起動します。
他にコマンドオプションを何も指定しないと5秒毎の状態が繰り返し表示されます。
止めるには Ctrl/C を打ちます。
もっと手早く1度だけ表示したい場合は、次のようにします(-i 1000 の部分は表示間隔のミリ秒指定、-n 1 は繰り返し回数です)。

% sudo powermetrics -i 1000 -n 1

このままでは情報量が多すぎて追っかけられないですよね。
内容をCPUとGPUの情報に限定するには次のようにします。

% sudo powermetrics -i 1000 -n 1 --samplers cpu_power,gpu_power

これでなんとなくわかるレベルになったと思います(最後に出力を加工した実際の表示結果を掲載しています)。
E -Clusterのところが(省電力の)高効率コア、P-Clusterのところが高性能コア、それとGPUの、それぞれの動作クロック数、使用率%、使用電力が表示されます。

少し長いですが、次のようにすると繰り返し表示でも一目瞭然の内容に絞り込んだ表示になります。

% sudo powermetrics -i 5000 | \
sed -u 's/(\(.*\) \([0-9]\{1,\}\) MHz:[ 0-9.]\{2,\}%)/<max \2 MHz>/' | \
grep -E 'active freq|[0-9] active resi|GPU active resi|Power:|Sampled|Machine model|OS version'

<> の中のMHzには、それぞれのコアの最大クロック数が表示されるようにしています。
最大クロックに対して、現在の動作周波数はactive frequencyのところのMHzなので、コアの使用率%はこの動作周波数に対する%と考える必要があります。

何度もこのコマンドを入力するのは大変(もちろんコピペでOKなのですが)なので、次のように定義しておけば p5 と打つだけで同じことが実行できるようになります。

% alias p5="sudo powermetrics -i 5000 | \
sed -u 's/(\(.*\) \([0-9]\{1,\}\) MHz:[ 0-9.]\{2,\}%)/<max \2 MHz>/' | \
grep -E 'active freq|[0-9] active resi|GPU active resi|Power:|Sampled|Machine model|OS version'"
% p5 

この定義は、次のように .zprofile ファイルに入れておけば、ターミナルを次回以降起動したときにすぐに使えるようになります。

% touch ~/.zprofile   # 以下の手順がエラーしないようにおまじない
% less ~/.zprofile # 事前の内容確認
% cp ~/.zprofile /tmp/.zprofile.backup # 念のためにバックアップコピーを作成
% # 次のコマンドで .zprofile ファイルにaliasコマンドを追記します
% cat >> ~/.zprofile
alias p5="sudo powermetrics -i 5000 | \
sed -u 's/(\(.*\) \([0-9]\{1,\}\) MHz:[ 0-9.]\{2,\}%)/<max \2 MHz>/' | \
grep -E 'active freq|[0-9] active resi|GPU active resi|Power:|Sampled|Machine model|OS version'"
ここで Ctrl/D を入力
% less ~/.zprofile # 追加内容の確認

最後に、p5コマンド(powermetrics コマンド+上記のα)の実際の表示内容を付けておきますM1 MacBook AirでIntel Windows 10を動かして最大負荷をかけた状態です)。

% p5
Machine model: MacBookAir10,1
OS version: 21A559
*** Sampled system activity (Wed Nov 3 11:22:25 2021 +0900) (5019.73ms elapsed) ***
E-Cluster Power: 1221 mW
E-Cluster HW active frequency: 2064 MHz
cpu 0 active residency: 98.32% <max 2064 MHz>
cpu 1 active residency: 97.68% <max 2064 MHz>
cpu 2 active residency: 97.23% <max 2064 MHz>
cpu 3 active residency: 97.12% <max 2064 MHz>
P-Cluster Power: 11246 mW
P-Cluster HW active frequency: 2988 MHz
cpu 4 active residency: 99.72% <max 3204 MHz>
cpu 5 active residency: 99.62% <max 3204 MHz>
cpu 6 active residency: 99.64% <max 3204 MHz>
cpu 7 active residency: 99.41% <max 3204 MHz>
ANE Power: 0 mW
DRAM Power: 435 mW
CPU Power: 12468 mW
GPU Power: 409 mW
Package Power: 13620 mW
GPU active frequency: 396 MHz
GPU active residency: 40.17% <max 1278 MHz: 0%>
GPU Power: 409 mW
%

ほんの少しマニアックですが、Apple Silicon M1シリーズの動作状態がよく分かるようになると思います(M1の最大クロック数(E-Core/P-Core/GPU)が、2.06GHz、3.20GHz、1.28GHzであることもこれでハッキリしますね)。
自分が普段使っているアプリの中のどの操作がどういう負荷になるのか、色々調べてみると面白いと思います。
M1 PRO、M1 MAXをお持ちの方は、表示結果をコメント欄で共有していただけるとありがたいです(匿名可能です)。

[2021-11-03] 初出に追加して、機種名とmacOSバージョンも表示されるようにしました。

No comments:

Post a Comment