Edited at

jetson_clocks


はじめに

Jetson Nanoの各種記事を読むとコンパイル前にjetson_clocksコマンドでパフォーマンスを最大化してから行っている。そもそもこのコマンドが何をしているのか気になったので調べた。


コマンドラインのヘルプ

ヘルプを見る限り、CPUとGPUとEMC(External Memory Controller)のクロックを変更できるようだ。

yamamo-to@jetson-nano:~$ /usr/bin/jetson_clocks -h

Maximize jetson performance by setting static max frequency to CPU, GPU and EMC clocks.
Usage:
jetson_clocks.sh [options]
options,
--show display current settings
--store [file] store current settings to a file (default: ${HOME}/l4t_dfs.conf)
--restore [file] restore saved settings from a file (default: ${HOME}/l4t_dfs.conf)
run jetson_clocks.sh without any option to set static max frequency to CPU, GPU and EMC clocks.

現在の設定は--showオプションで表示とのことなので、sudoをつけた上で実施した。

yamamo-to@jetson-nano:~$ sudo /usr/bin/jetson_clocks --show

[sudo] password for yamamo-to:
SOC family:tegra210 Machine:jetson-nano
Online CPUs: 0-3
CPU Cluster Switching: Disabled
cpu0: Online=1 Governor=schedutil MinFreq=1428000 MaxFreq=1428000 CurrentFreq=1428000 IdleStates: WFI=0 c7=0
cpu1: Online=1 Governor=schedutil MinFreq=1428000 MaxFreq=1428000 CurrentFreq=1428000 IdleStates: WFI=0 c7=0
cpu2: Online=1 Governor=schedutil MinFreq=1428000 MaxFreq=1428000 CurrentFreq=1428000 IdleStates: WFI=0 c7=0
cpu3: Online=1 Governor=schedutil MinFreq=1428000 MaxFreq=1428000 CurrentFreq=1428000 IdleStates: WFI=0 c7=0
GPU MinFreq=76800000 MaxFreq=921600000 CurrentFreq=76800000
EMC MinFreq=204000000 MaxFreq=1600000000 CurrentFreq=1600000000 FreqOverride=0
Fan: speed=80
NV Power Mode: MAXN


スクリプトの内容

このファイルは単なるシェルスクリプトなので中身を確認できる。およそ402行目から408行目にヒントが書かれている。

do_hotplug

do_clusterswitch
do_cpu
do_gpu
do_emc
do_fan
do_nvpmodel

最初にSOCファミリー(Jetson nanoはtegra210)を環境変数にセットした後、上記項目を一つずつ実行する。


  • hotplugはCPUホットプラグのことで使えるCPUを全部使うようにする

  • clusterswitchはディレクトリ/sys/kernel/cluster/の有無を確認した上でアクティブなクラスタが利用可能ならばEnableにする

  • cpuは動的に変わる周波数の最小値を最大周波数(1.36GHz)に変更する

  • gpuは最初にrail_gate_enableに0を書き込みクロックゲーティングを無効にし1、CPU同様最小駆動周波数を最大値まで引き上げる

  • EMCクロックの最小駆動周波数を最大値まで引き上げる

  • FANスピードを最大(255)にする

  • nvpmodelは何もしない2


まとめ

jetson_clocksコマンドはCPUやクラスタなど使えるものはすべて使える状態にした上で、各種動作周波数を最大まで上げるコマンドのようだ。





  1. GPUの動作を勉強していないがスリープ状態にさせないということか? 



  2. --showオプションが指定された場合のみ動作