Jetson nanoの消費電力計測と電力制御


はじめに

Jetson nanoはMaxwell世代のGPUと4コアのARM Cortex-A57、4GBのLPDDR4を搭載したシングルボードコンピュータである。Raspberry Pi 3Bと比較するとメモリ容量は4倍であり、GPU性能も優れている。また、Jetson nanoはIoT機器、自律ロボットなどのバッテリーを使用する機器への搭載が想定されており、優れた電源管理機能が搭載さてている点も着目すべき点である。電源管理機能をうまく利用できれば、IoT機器などのバッテリー寿命を伸ばすことができる。そこで、本記事ではJetson nanoの電源管理機能について示し、電源制御を行った際の消費電力計測を行った。

Jetson nanoの電源管理機能

Jetson nanoは4コアCPUとGPUが搭載されており、CPUやGPUの周波数を下げることによって、消費する電力を抑えることができる。CPUやGPUは負荷に応じて自動的に周波数を変更することによって消費電力を抑えている。更に、4つあるCPUコアのうち一部のコアを無効にし、消費電力を抑える機能も搭載されている。これらのCPUやGPUの周波数、有効なCPUコア数は電源を入れた状態でも変更が可能であり、これらの設定を変えた場合の消費電力の計測を行う。また、今回はCPUコアのみに着目する。

外部コネクタからの電源供給

Jetson nanoへの電源供給は、Micro-USBコネクタを利用する方法とDCジャックを利用する方法の2つがある。デフォルトではMicro-USBコネクタを利用するようになっているが、Micro-USB経由では十分に電力供給できない場合がある。そのため、DCジャックから電力供給ができるようにする。DCジャックを利用するためにはJetson nanoの基板上のJ48をショートさせる必要がある。そのため、図に示すように基板の左端のJ48にジャンパーワイヤを取り付けた。さらに、左下のDCジャックに5V4Aのアダプターを接続した。

10Wモードと5Wモードの切り替え

Jetson nanoは予め2つの電力モードを提供している。デフォルトでは10Wモードとなっている。デフォルトの10Wモードでは、4つのCPUコアすべてを有効にし、CPUの動作周波数も高めに設定されている。10WモードのCPUの最大動作周波数1.43GHzである。また、5Wモードでは4つのCPUコアのうち、2つのみを有効にし設定周波数は低めに設定されている。5Wモード時のCPUの最大動作周波数は921.6MHzである。

電力モードの確認や設定にはnvpmodelコマンドを利用する。はじめに、実行中の電力モードを確認する。確認には、

sudo nvpmodel -q
とコマンドを打ち込む。電源制御には特権レベルの操作が必要であるためsudoをつける。
NV Power Mode: MAXN
0
と表示され、10Wモード(=MAXN)であることがわかる。さらに、有効なコア数、動作周波数の確認にはjetson_clocks コマンドを用いる。
sudo jetson_clocks --show
とタイプすると、図のように現在のCPU等の情報が表示される。
4つのすべてのCPUが有効(=Online)であり、MaxFreq=1428000となっていることから最大動作周波数が1.428Ghzであることがわかる。

それでは、5Wモードへの切り替えを行う。切り替えは、

sudo nvpmodel -m 1
とタイプする。-mオプションを利用することで電力モードの指定を行う。5Wモードの際は1を指定し、10Wモードに変更を行う際は0を指定する。5Wモードに変更したので、再度CPUの状態を確認する。すると、図のようにcpu0とcpu1の2つのみがOnlineとなっている。また、MaxFreq=921600となっていることから、最大動作周波数は921.6Mhzとなっていることがわかる。

オリジナル電力プロファイルの追加

これまで述べたようにJetson nanoは10Wモードと5Wモードの2つのモードをサポートしている。そこで、新しくオリジナル電力プロファイルを追加することとする。
“また、本内容はJetson nanoが起動しなくなるだけでなく、Jetson nanoを物理的に破壊する可能性がある。一切の責任を負いかねるので、ご注意願いたい。”
今回は、1コア、最高周波数1.43Ghの1core-highモードを追加する。電力のプロファイル情報は/etc/nvpmodel.confに保存されている。そこで、下記の内容を/etc/nvpmodel.confの109行目に追加する。モードの番号を2, モード名前を1core-highとした。
< POWER_MODEL ID=2 NAME=1core-high >
CPU_ONLINE CORE_0 1
CPU_ONLINE CORE_1 0
CPU_ONLINE CORE_2 0
CPU_ONLINE CORE_3 0
CPU_A57 MIN_FREQ  0
CPU_A57 MAX_FREQ -1
GPU_POWER_CONTROL_ENABLE GPU_PWR_CNTL_EN on
GPU MIN_FREQ 0
GPU MAX_FREQ 640000000
GPU_POWER_CONTROL_DISABLE GPU_PWR_CNTL_DIS auto
EMC MAX_FREQ 1600000000

電力計測

opensshのRSA4096を実行した際の消費電力を計測した。具体的には、

openssl speed rsa4096
とタイプした際の電力を計測した。また、有効なCPUコアの数だけ上記コマンドを同時に実行し、すべての有効なCPUが利用されるようにした。計測時は余計な電力消費を抑えるために、HDMIやDisplay port等の画面出力、USBデバイスをすべて取り外した。有線LANのみ接続し、ssh経由でJetsonへログインし計測を行った。
消費電力
アイドル時 1.33W
10Wモード 4.18W
5Wモード 2.58W
1core-highモード 2.54W
アイドル時の消費電力は1.33Wであり、Linuxが動作し4Kをサポートするシングルボードコンピュータと考えるならば、非常に省電力である。10Wモードでは4.18Wの消費電力となった。5Wモードにすると大きく消費電力が低下した。また、新たに追加を行った1core-highと5Wモードを比較したところ、わずかに1core-highモードが低い消費電力となった。
今回はCPUに注目したが、次回はGPU部分の計測を行う予定である。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です