jetson-stats入門

## jetson-statsとは

`jetson-stats`はJetsonデバイスのモニタリング、設定ツールです。

- ドキュメント：<https://rnext.it/jetson_stats/>
- GitHubリポジトリ：<https://github.com/rbonghi/jetson_stats>

以下に<https://github.com/rbonghi/jetson_stats/blob/master/README.md>に紹介されている実行例を示します。CPU、GPU、HW Engineの使用状況などがわかりやすく可視化されていることがわかります。

![jetson-stats](https://github.com/rbonghi/jetson_stats/raw/master/docs/images/jtop.png)

### 類似ツール

類似ツールとして[tegrastats](<https://docs.nvidia.com/jetson/archives/r35.4.1/DeveloperGuide/text/AT/JetsonLinuxDevelopmentTools/TegrastatsUtility.html>)があります。以下に実行結果の例を示します。ただし、ある程度ツールに慣れていないと実行結果が読みにくいという欠点があります。

```shell
$ tegrastats 
10-01-2023 14:41:09 RAM 3006/15523MB (lfb 2436x4MB) SWAP 0/7761MB (cached 0MB) CPU [0%@1984,0%@1984,0%@1984,0%@1984,0%@1984,1%@1984,0%@1984,1%@1984] EMC_FREQ 0% GR3D_FREQ 0%@[0] CV0@53.625C CPU@55.468C iwlwifi@57C SOC2@54.187C SOC0@55.093C CV1@53.812C GPU@54.125C tj@57.718C SOC1@57.718C CV2@53.343C
```

## サポートしているJetsonデバイス

`jetson-stats`がサポートしているJetsonデバイスは<https://rnext.it/jetson_stats/#compatibility>に記載があります。

## インストール

<https://rnext.it/jetson_stats/#installing>にあるように以下のコマンドで`jetson-stats`をインストールします。

```shell
sudo pip3 install -U jetson-stats
```

インストール後、再ログイン or リブートが必要です（`jetson-stats`はサービスを用いているためです）。

## jtop実行

ターミナル上で以下のコマンドを実行します。

```shell
jtop
```

## jtop実行結果の読み方

詳細は<https://rnext.it/jetson_stats/jtop/jtop.html#pages>を参照ください。jtop実行結果はいくつかのページごとにまとめられているため、以降、各ページの読み方について紹介します。

### ALLページ

`jetson-stats`で取得できる各種情報のサマリーを可視化します。

- CPU
- Memory
- System
- GPU
- Disk
- HW Engines
- Temperatures
- Power Status
- etc...

実行結果の例は以下の通りです。

![jtop_all.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31158/bbdabde3-ab29-edbc-c0da-d2cec7727255.png)

この結果からCPU、GPU使用状況だけでなく、

- jetson_clocksが実行されている
- パワーモードはMAXNである
- NVDECが使用されている

などの情報が確認できます。詳細は<https://rnext.it/jetson_stats/jtop/jtop.html#all>を参照ください。

### GPUページ

`jetson-stats`で取得できる下記情報を可視化します。

- 使用メモリ量
- GPU温度
- GPU動作周波数
- GPUを使用しているプロセス
- etc...

実行結果の例を以下に示します。

![jtop_gpu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31158/a478287f-dd79-20be-7649-c56e0271fdf9.png)

詳細は<https://rnext.it/jetson_stats/jtop/jtop.html#gpu>を参照ください。

### CPUページ

`jetson-stats`で取得できるCPUステータスを可視化します。詳細は<https://rnext.it/jetson_stats/jtop/jtop.html#cpu>を参照ください。

### MEMページ

`jetson-stats`で取得できるメモリ、スワップのステータスを可視化します。RAMステータスの色分けは以下の通りです。

|色|意味|
|---|---|
|Cyan|Used memory|
|Green|GPU shared memory|
|Blue|Buffers memory|
|Yellow|Cached memory|

詳細は<https://rnext.it/jetson_stats/jtop/jtop.html#mem>を参照ください。

### ENGページ

Jetsonデバイスに搭載されているHW Engineの使用状況がわかります。実行結果の例を以下に示します。

![jtop_eng.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31158/19f2eb8d-0e5d-9244-9f5e-ffb83e5b053e.png)

この結果からNVDEC、SEのステータスがRUNNINGになっており、これらのHW Engineが使用されていることがわかります。詳細は<https://rnext.it/jetson_stats/jtop/jtop.html#eng>を参照ください。

### CTRLページ

Jetsonデバイスのパワーモード、冷却ファンのプロファイル、回転数などが確認できます。実行結果の例を以下に示します。

![jtop_ctrl.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31158/ebbb0197-5a64-d4f1-9e87-1dcb2ceda200.png)

この結果から、

- 冷却ファンのプロファイルが「Manual」
- 冷却ファン回転速度が100%
- jetson_clocksが実行されている
- パワーモードはMAXNである

ことがわかります。詳細は<https://rnext.it/jetson_stats/jtop/jtop.html#ctrl>を参照ください。

## Python API

<https://rnext.it/jetson_stats/#advanced-usage>にPython APIの使用例があります。Python APIを使うことでJetsonデバイスのモニタリング結果を用いた処理を記述することができるようになります。

```python
from jtop import jtop

with jtop() as jetson:
   # jetson.ok() will provide the proper update frequency
   while jetson.ok():
      # Read tegra stats
      print(jetson.stats)
```

このスクリプトの実行結果例を以下に示します。以下の結果からわかるように前述の`tegrastats`コマンドの実行結果が格納されていることがわかります。

```json
{'time': datetime.datetime(2023, 10, 1, 14, 38, 49, 410056), 'uptime': datetime.timedelta(seconds=539, microseconds=120000), 'CPU1': 10, 'CPU2': 9, 'CPU3': 10, 'CPU4': 9, 'CPU5': 9, 'CPU6': 9, 'CPU7': 9, 'CPU8': 10, 'RAM': 0.19360783151236546, 'SWAP': 0.0, 'EMC': 0, 'GPU': 0.0, 'APE': 'OFF', 'DLA0_CORE': 'OFF', 'DLA0_FALCON': 'OFF', 'DLA1_CORE': 'OFF', 'DLA1_FALCON': 'OFF', 'NVDEC': 'OFF', 'NVENC': 'OFF', 'NVJPG': 'OFF', 'NVJPG1': 'OFF', 'PVA0_CPU_AXI': 'OFF', 'PVA0_VPS': 'OFF', 'SE': 473600, 'VIC': 'OFF', 'Fan pwmfan0': 31.764705882352942, 'Temp CPU': 55.437, 'Temp CV0': 53.625, 'Temp CV1': 54.031, 'Temp CV2': 53.281, 'Temp GPU': 54.125, 'Temp iwlwifi': 57.0, 'Temp SOC0': 54.968, 'Temp SOC1': 57.531, 'Temp SOC2': 54.187, 'Temp tj': 57.531, 'Power tj': 2633, 'Power TOT': 8426, 'jetson_clocks': 'ON', 'nvp model': 'MAXN'}
{'time': datetime.datetime(2023, 10, 1, 14, 38, 50, 407974), 'uptime': datetime.timedelta(seconds=540, microseconds=120000), 'CPU1': 2, 'CPU2': 2, 'CPU3': 9, 'CPU4': 5, 'CPU5': 5, 'CPU6': 7, 'CPU7': 11, 'CPU8': 2, 'RAM': 0.19384890487768422, 'SWAP': 0.0, 'EMC': 0, 'GPU': 0.0, 'APE': 'OFF', 'DLA0_CORE': 'OFF', 'DLA0_FALCON': 'OFF', 'DLA1_CORE': 'OFF', 'DLA1_FALCON': 'OFF', 'NVDEC': 'OFF', 'NVENC': 'OFF', 'NVJPG': 'OFF', 'NVJPG1': 'OFF', 'PVA0_CPU_AXI': 'OFF', 'PVA0_VPS': 'OFF', 'SE': 473600, 'VIC': 'OFF', 'Fan pwmfan0': 31.764705882352942, 'Temp CPU': 55.781, 'Temp CV0': 53.468, 'Temp CV1': 54.062, 'Temp CV2': 53.437, 'Temp GPU': 53.937, 'Temp iwlwifi': 57.0, 'Temp SOC0': 54.937, 'Temp SOC1': 57.687, 'Temp SOC2': 54.062, 'Temp tj': 57.781, 'Power tj': 2633, 'Power TOT': 8304, 'jetson_clocks': 'ON', 'nvp model': 'MAXN'}
```

Python APIの詳細は<https://rnext.it/jetson_stats/reference/index.html>を参照ください。

## その他のユーティリティツール

`jetson-stats`をインストールすることでいくつかのユーティリティツールがインストールされます。そのうち、ここでは`jetson_release`を紹介します。それ以外のツールについては<https://rnext.it/jetson_stats/other-tools/index.html>を参照ください。

### jetson_release

`jetson_release`コマンドを実行することで

- Jetsonデバイスモデル名
- Jetson Linuxバージョン
- パワーモード
- Jetson Linux向けの開発ソフトウェアバージョン

などが確認できます。実行結果例は以下の通りです。環境情報を第三者に共有するときに有用です。

```shell
$ jetson_release 
Software part of jetson-stats 4.2.3 - (c) 2023, Raffaello Bonghi
Model: NVIDIA Orin NX Developer Kit - Jetpack 5.1.2 [L4T 35.4.1]
NV Power Mode[0]: MAXN
Serial Number: [XXX Show with: jetson_release -s XXX]
Hardware:
 - P-Number: p3767-0000
 - Module: NVIDIA Jetson Orin NX (16GB ram)
Platform:
 - Distribution: Ubuntu 20.04 focal
 - Release: 5.10.120-tegra
jtop:
 - Version: 4.2.3
 - Service: Active
Libraries:
 - CUDA: 11.4.315
 - cuDNN: 8.6.0.166
 - TensorRT: 8.5.2.2
 - VPI: 2.3.9
 - Vulkan: 1.3.204
 - OpenCV: 4.5.4 - with CUDA: NO
```

## 動作確認環境

- reComputer J4012(Jetson Orin NX 16GB)
- JetPack 5.1.2
- Python 3.8.10
- jetson-stats 4.2.3

## Appendix：実行オプション

```shell
$ jtop -h
usage: jtop [-h] [--health] [--error-log] [--no-warnings] [--restore] [--loop] [--color-filter] [-r REFRESH] [-p PAGE] [-v]

jtop is system monitoring utility and runs on terminal

optional arguments:
  -h, --help            show this help message and exit
  --health              Status jtop and fix (default: False)
  --error-log           Generate a log for GitHub (default: False)
  --no-warnings         Do not show warnings (default: False)
  --restore             Reset Jetson configuration (default: False)
  --loop                Automatically switch page every 5s (default: False)
  --color-filter        Change jtop base colors, you can use also JTOP_COLOR_FILTER=True (default: False)
  -r REFRESH, --refresh REFRESH
                        refresh interval (default: 1000)
  -p PAGE, --page PAGE  Open fix page (default: 1)
  -v, --version         show program's version number and exit
```