OKI「AE2100」上での各種リソースの確認方法

# 要約
この記事では、OKI AI エッジコンピューター「AE2100」向けのリソース確認方法を紹介します。

# はじめに
AE2100では様々なAIを用いたアプリケーションを動作させることが可能です。
AIを用いたアプリケーションを動作させるには、各種リソースをうまく活用する必要があります。
各種リソースを確認するのに、一般的なコマンド使用した方法とAE2100独自の方法があります。 
そこで、この記事ではAE2100上での各種リソースの確認方法をご紹介します。

対象とするリソースは以下になります。

* CPU
  * CPU使用率
  * CPU温度
  * CPU周波数
* GPU
  * GPU使用率
  * GPU周波数
* VPU(MyriadX)
  * VPU使用率
* メモリ
  * メモリ使用率
* ディスク
  * ディスク容量
  * ディスクI/O

また、CPU使用率等の一部リソースは自動的に過去の使用状況を記録しているものもあります。
最後に記録されている過去のリソース使用状況の確認方法についても説明します。

# CPU
## CPU使用率
### top

```
root@ae2100:~# top
top - 07:43:00 up 10 min,  1 user,  load average: 7.11, 6.50, 3.58
Tasks: 173 total,   1 running, 120 sleeping,   0 stopped,   0 zombie
%Cpu(s): 53.6 us, 13.5 sy,  0.0 ni,  8.9 id, 23.3 wa,  0.0 hi,  0.7 si,  0.0 st
KiB Mem :  3619136 total,   927208 free,  1720272 used,   971656 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1726080 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
10626 root      20   0 2814488 1.229g  93796 S 294.1 35.6   0:55.02 benchmark_app
  269 root      20   0 2497996 133092   4544 S  17.6  3.7   1:55.36 4.3BOOT
```

`top`コマンドではシステム全体だけでなく個々のプロセスのCPU使用率やメモリの使用量についても表示します。
ここではCPUに関する内容について説明します。メモリに関する内容は[こちら](#top-1)を参照してください。

`top`コマンドの表示は自動更新されて、リアルタイムな状況を確認することができます。
表示間隔はデフォルトで3秒になっています。

CPU使用率に関する情報を得るために注目すべき箇所のみ抽出して説明します。

システム全体のCPU使用率に関する情報は`%Cpu(s)`の行に表示されています。

```
%Cpu(s): 53.6 us, 13.5 sy,  0.0 ni,  8.9 id, 23.3 wa,  0.0 hi,  0.7 si,  0.0 st
```

各項目の説明については以下の通りです。  

|項目|説明|
|:---|:---|
|us|ユーザプロセス(OS上で動作するプロセス)のCPU使用時間の割合|
|sy|システムプロセス(OSを実現するために動作するプロセス)のCPU使用時間の割合|
|ni|nice値(プロセス実行の優先度)が変更されたユーザプロセスのCPU使用時間の割合|
|id|idle状態（待ち状態）のCPU使用時間の割合|
|wa|ディスクのI/O終了待ちをしているプロセスのCPU使用時間の割合|
|hi|ハードウェアの割り込み要求のCPU使用時間の割合|
|si|ソフトウェアの割り込み要求のCPU使用時間の割合|
|st|ハイパーバイザ(仮想マシンを実行しているソフトウェア)のCPU使用時間の割合|


個々のプロセスの情報に関しては、CPU使用率が高いものが上から表示されるようになっています。

```
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
10626 root      20   0 2814488 1.229g  93796 S 294.1 35.6   0:55.02 benchmark_app
  269 root      20   0 2497996 133092   4544 S  17.6  3.7   1:55.36 4.3BOOT
```

個々のプロセスのCPU使用率は`%CPU`列に表示されています。

上記の例の`benchmark_app`プロセスであればCPU使用率は294.1%になります。
システム全体のCPU使用率はCPU全体を100%としたときの表記でしたが、
プロセスごとのCPU使用率はコア数×100%として表記します。
AE2100は全部で4コアなので400%を最大とした表記になります。

`top`コマンドの詳細は`man top`を参照してください。

## CPU周波数
## CPU温度
### /var/log/ae2100/ae2100_rsc.log

```
root@ae2100:~# cat /var/log/ae2100/ae2100_rsc.log
DATE,CPU0_FREQ,CPU1_FREQ,CPU2_FREQ,CPU3_FREQ,GPU_FREQ,CPU_TEMP,CPU0_TEMP,CPU1_TEMP,CPU2_TEMP,CPU3_TEMP,SOC_TEMP,GPU_FREQ_ACT
20200702073302,1593646,1593664,1593642,1593644,100,32000,30000,32000,31000,31000,31000,200
20200702073401,1590604,1591054,1590971,1591325,650,43000,41000,42000,42000,43000,44000,650
20200702073501,1588371,1589465,1588111,1589503,650,43000,42000,42000,44000,44000,44000,650
20200702073601,1591553,1588800,1592494,1592096,650,44000,43000,43000,44000,44000,44000,650
```

AE2100ではCPUやGPUの周波数や温度等の統計情報を`/var/log/ae2100/ae2100_rsc.log`に記録しています。
統計情報は1分ごとに記録されています。

`/var/log/ae2100/`ディレクトリには`ae2100_rsc.log-YYYYMMDD`または
`ae2100_rsc.log-YYYYMMDD.gz`として過去の記録を保存しています。
より過去の統計情報を知りたい場合は、ローテートされたファイルを参照するようにしてください。

各項目の説明については以下の通りです。

|項目名|説明|単位|
|:---|:---|:---|
|DATE|統計情報収集日時|YYYYMMDDHHMMSS|
|CPU0_FREQ|CPU0の動作周波数|KHz|
|CPU1_FREQ|CPU1の動作周波数|KHz|
|CPU2_FREQ|CPU2の動作周波数|KHz|
|CPU3_FREQ|CPU3の動作周波数|KHz|
|GPU_FREQ|GPUの動作周波数|MHz|
|CPU_TEMP|CPU全体の温度|℃×1000|
|CPU0_TEMP|CPU0の動作周波数|℃×1000|
|CPU1_TEMP|CPU1の動作周波数|℃×1000|
|CPU2_TEMP|CPU2の動作周波数|℃×1000|
|CPU3_TEMP|CPU3の動作周波数|℃×1000|
|SOC_TEMP|SoCの温度|℃×1000|
|GPU_FREQ_ACT|GPUのアクト動作周波数|MHz|

※ CPUXはCPUのコア0～3のことを指しています。

CPUのクロックが期待通り出ているか、負荷が一部のコアに偏っていないかなどを見ることで、
アプリケーションが正しく動作しているかの確認に使用できます。

# GPU
## GPU使用率
### intel_gpu_top
```
root@ae2100:~# intel_gpu_top
                   render busy: 97%: ???????????????????? render space: 160/16384
                          task  percent busy
                            CS:  99%: ???????????????????? vert fetch: 0 (0/sec)
                           GAM:  95%: ??????????????????? prim fetch: 0 (0/sec)
                           TSG:  86%: ?????????????????? VS invocations: 0 (0/sec)
                           VFE:  71%: ??????????????? GS invocations: 0 (0/sec)
                          GAFS:   4%: ? GS prims: 0 (0/sec)
                           TDG:   1%: ? CL invocations: 0 (0/sec)
                          GAFM:   0%: CL prims: 0 (0/sec)
                           SVG:   0%: PS invocations: 0 (0/sec)
                           SOL:   0%: PS depth pass: 0 (0/sec)
                            RS:   0%:
                            SF:   0%:
                            VS:   0%:
                            CL:   0%:
                            VF:   0%:
```

`intel_gpu_top`コマンドでは今現在のGPUの使用率をリアルタイムに表示します。
表示は1秒ごとに更新されて`render busy`の行にGPUの使用率を表示しています。
また、実行するコマンドを`intel_gpu_top -o <出力先ファイルパス>`とすることで、
GPU使用率ファイル出力することが可能です。

```
# time  render% ops     bitstr% ops     bitstr% ops     blitte% ops     vert f  prim f  VS inv  GS inv  GS pri  CL inv  CL pri  PS inv  PS dep
1.00    100     167     -1      -1      -1      -1      -1      -1      0       0       0       0       0       0       0       0       0
2.00    100     164     -1      -1      -1      -1      -1      -1      0       0       0       0       0       0       0       0       0
3.00    100     166     -1      -1      -1      -1      -1      -1      0       0       0       0       0       0       0       0       0
4.00     99     159     -1      -1      -1      -1      -1      -1      0       0       0       0       0       0       0       0       0
5.00    100     161     -1      -1      -1      -1      -1      -1      0       0       0       0       0       0       0       0       0
```

ファイル出力した場合も1秒おきに記録されていて、GPU使用率は`render%`列に記載されています。
注意点として、時刻情報`time`が記録開始からの経過時間(秒)になっているので、
GPU使用率の推移を見たい場合は、記録開始時刻を別途記録しておく必要があります。

## GPU周波数
### /var/log/ae2100/ae2100_rsc.log

CPUの周波数及び温度で説明した`/var/log/ae2100/ae2100_rsc.log`にGPUの周波数についても記録されています。
詳細は [こちら](#varlogae2100ae2100_rsclog) を参照してください。

# VPU
## VPU(MyriadX)使用率
### jounalctl(/var/log/syslog)

HDDLDaemonのコンフィグを変更することでVPU関連の統計情報が定期的にsyslogに出力されるようになります。
ただし、膨大な量の統計情報がsyslogへ出力されることになるため、一時的な使用を推奨します。
統計情報を確認する場合は`jounalctl`コマンドを使用するか、`/var/log/syslog`を直接参照してください。

HDDLDaemonのコンフィグは`/usr/local/hddl/config/hddl_service.config`に配置されています。
ファイル形式はjsonになっています。

以下の項目を変更後の設定値へ変更することで、統計情報をsyslogへ出力するようになります。

|項目|変更前<br>(デフォルト)|変更後|説明|
|:---|:---|:---|:---|
|debug_settings.debug_process.info_printer|off|on|統計情報の出力有無の設定|
|debug_settings.info_printer.device_snapshot_mode|none|full|device snapshotの表示モードの切替設定|
|debug_settings.info_printer.client_snapshot_mode|none|base|client snapshotの表示モードの切替設定|
|debug_settings.info_printer.graph_snapshot_mode|none|base|graph snapshotの表示モードの切替設定|

※ 上記はOpenVINOバージョン2020.3での情報になります。

各snapshotの表示モードを変更後は設定の反映が必要になります。
設定の反映には`systemctl restart hddldaemon.service`コマンドを使用してください。

以下はそれぞれ有効にした場合の統計情報の出力例になります。

#### device snapshot

```
Jul 15 15:56:06 ae2100 hddldaemon[7738]: [15:56:06.4217][7880]I[DeviceManager.cpp:916] DeviceSnapshot(subclass=0):
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | deviceId    | 1(0x1)            | 0(00)             |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | device      | 4.3               | 4.1               |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | util%       | 100.00 %          | 100.00 %          |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | thermal     | 62.10(0)          | 62.10(0)          |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | scheduler   | squeeze           | squeeze           |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | comment     |                   |                   |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | resetTimes  | 0                 | 1                 |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | cacheNum    | 1                 | 1                 |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | cacheGraph0 | AlexNet           | AlexNet           |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | cacheGraph1 |                   |                   |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | cacheGraph2 |                   |                   |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | cacheGraph3 |                   |                   |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: +-------------+-------------------+-------------------+
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | status      | RUNNING           | RUNNING           |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | fps         | 60.85             | 60.79             |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | curGraph    | AlexNet           | AlexNet           |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | rPriority   | 0                 | 0                 |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | loadTime    | 20210715 15:55:37 | 20210715 15:55:37 |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | runTime     | 00:00:29          | 00:00:29          |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | inference   | 650               | 651               |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | prevGraph   |                   |                   |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | loadTime    |                   |                   |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | unloadTime  |                   |                   |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | runTime     |                   |                   |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: | inference   |                   |                   |
Jul 15 15:56:11 ae2100 hddldaemon[7738]: +-------------+-------------------+-------------------+
```

#### client snapshot

```
Jul 15 15:56:06 ae2100 hddldaemon[7738]: [15:56:01.4211][7880]I[ClientManager.cpp:417] ClientSnapshot(RegularPrint):
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | clientId     | 7                 |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | clientName   | HDDLPlugin        |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | clientFps    | 121.51            |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | inferTimes   | 0                 |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: | waitNum      | 0                 |
Jul 15 15:56:06 ae2100 hddldaemon[7738]: +--------------+-------------------+
```

#### graph snapshot

```
Jul 15 15:55:25 ae2100 hddldaemon[7738]: [15:55:20.0743][7880]I[GraphManager.cpp:828] GraphSnapshot(RegularPrint):
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | graphId      | 6                 |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | graphName    | AlexNet           |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | fpsIn        | 121.79            |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | fpsOut       | 121.79            |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | inferTimes   | 1300              |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | waitTaskNum  | 0                 |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | isPending    | False             |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | pendingTime  | 00:00:00          |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | outCycleNum  | 0                 |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | avgInferTime | 32.81             |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | devReqNum    | 2.00              |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | deviceNum    | 2 / 2             |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | graphTag     |                   |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: | streamId     |                   |
Jul 15 15:55:25 ae2100 hddldaemon[7738]: +--------------+-------------------+
```

HDDLDaemonのコンフィグについては2019年9月の古い情報ですが、ドキュメントも存在します。
古い情報なので参考程度になりますが、こちらも参照してください。
https://docs.openvinotoolkit.org/downloads/595850_Intel_Vision_Accelerator_Design_with_Intel_Movidius%E2%84%A2_VPUs-HAL%20Configuration%20Guide_rev1.3.pdf

# メモリ
## メモリ使用率
### top

```
root@ae2100:~# top
top - 07:43:00 up 10 min,  1 user,  load average: 7.11, 6.50, 3.58
Tasks: 173 total,   1 running, 120 sleeping,   0 stopped,   0 zombie
%Cpu(s): 53.6 us, 13.5 sy,  0.0 ni,  8.9 id, 23.3 wa,  0.0 hi,  0.7 si,  0.0 st
KiB Mem :  3619136 total,   927208 free,  1720272 used,   971656 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1726080 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
10626 root      20   0 2814488 1.229g  93796 S 294.1 35.6   0:55.02 benchmark_app
  269 root      20   0 2497996 133092   4544 S  17.6  3.7   1:55.36 4.3BOOT
```

CPU使用率の確認に使用した`top`コマンドでもメモリに関する情報を確認可能です。
システム全体のメモリ使用量に関する情報については`KiB Mem`と`KiB Swap`の行に表示されています。

```
KiB Mem :  3619136 total,   927208 free,  1720272 used,   971656 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1726080 avail Mem
```

`KiB Mem`行は物理メモリに関する表示です。

各項目の説明については以下の通りです。全て単位はKiBになります。

|項目|説明|
|:---|:---|
|total|システムに搭載されたメモリの総量|
|free|空きメモリ量|
|used|OSや各種プロセスに割り当てているメモリ量|
|buff/cache|バッファやキャッシュへ割り当てているメモリ量|

`KiB Swap`行は`avail Mem`を除いてスワップに関する表示です。
各項目の説明については以下の通りです。こちらも全て単位はKiBになります。

|項目|説明|
|:---|:---|
|total|システムで使用できるスワップの総量|
|free|空きスワップ量|
|used|OSや各種プロセスに割り当てているスワップ量|
|avail Mem|すぐに割り当て可能なメモリ量|

AE2100ではスワップが無効になっているので`total`、`free`、`used`は全て0になります。
`KiB Swap`行の最後の`avail Mem`のみ物理メモリについて表示しています。
`avail Mem`は物理メモリの`free`全てと`buff/cache`のうち開放可能なメモリ量を足した値になっています。
そのため、実質的な空きメモリ量を確認したいときは`avail Mem`を見る必要があります。

個々のプロセスについてもメモリに関する情報が表示されています。

```
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
10626 root      20   0 2814488 1.229g  93796 S 294.1 35.6   0:55.02 benchmark_app
  269 root      20   0 2497996 133092   4544 S  17.6  3.7   1:55.36 4.3BOOT
```

メモリに関する各項目の説明については以下の通りです。

|項目|説明|単位|
|:---|:---|:---|
|VIRT|割当て済みの仮想メモリ量|KiB|
|RES|物理メモリのうち実際に使用されているメモリ量|KiB ※数値の後にgが付いている場合はGiB|
|SHR|RESのうち共有メモリとして使用されているメモリ量|KiB|
|%MEM|物理メモリ総量に対する使用中のメモリ量(=RES)の割合|%|

# ディスク
## ディスク容量
### df

```
root@ae2100:~# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       27510816 9818348  16271924  38% /
devtmpfs         1807352       4   1807348   1% /dev
tmpfs            1809568       0   1809568   0% /dev/shm
tmpfs            1809568    1084   1808484   1% /run
tmpfs            1809568       0   1809568   0% /sys/fs/cgroup
tmpfs            1809568    3412   1806156   1% /tmp
/dev/mmcblk1p1   1004608  534648    469960  54% /boot
tmpfs             361912       0    361912   0% /run/user/0
tmpfs             361912       0    361912   0% /run/user/15581
```

`df`コマンドはディスク関連の情報をファイルシステムごとに表示します。

各項目の説明については以下の通りです。

|項目|説明|
|:---|:---|
|Filesystem|対象ファイルシステム(ディスク)名|
|1K-blocks|ディスク総容量|
|Used|使用中ディスク容量|
|Available|空きディスク容量|
|Use%|ディスク総容量に対する使用中ディスク容量の割合|
|Mounted on|ファイルシステムのマウント先ディレクトリ|

オプション無しで`df`コマンドを実行した場合、1K-blocks、Used、Availableの単位はKBになります。
`-m`オプションを指定すると単位をMBとして表示することが可能です。
また、`-h`オプションを指定すると読みやすくなるよう自動で単位を選択して表示します。

`df`コマンドは`-i`オプションを付与することでiノードに関する情報を取得することもできます。

```
root@ae2100:~# df -i
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/root      1757840 256133 1501707   15% /
devtmpfs        451837    523  451314    1% /dev
tmpfs           452390      1  452389    1% /dev/shm
tmpfs           452390    777  451613    1% /run
tmpfs           452390     18  452372    1% /sys/fs/cgroup
tmpfs           452390     32  452358    1% /tmp
/dev/mmcblk1p1       0      0       0     - /boot
tmpfs           452390      4  452386    1% /run/user/0
```

各項目の説明については以下の通りです。

|項目|説明|
|:---|:---|
|Filesystem|対象ファイルシステム(ディスク)名|
|Inodes|iノード総数|
|IUsed|使用中iノード数|
|IFree|空きiノード数|
|IUse%|ディスク総容量に対する使用中ディスク容量の割合|
|Mounted on|ファイルシステムのマウント先ディレクトリ|

空き容量はあるにもかかわらずファイルが作成できないというような場合に、
対象のファイルシステムの空きiノード数が枯渇しているというケースも考えられます。

## ディスクI/O
### iostat

```
root@ae2100:~# iostat -d 3 2
Linux 4.14.67-intel-pk-standard (ae2100)        07/16/21        _x86_64_        (4 CPU)

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
mmcblk1           3.67        18.50        46.54    4917752   12371401
mmcblk1rpmb       0.00         0.00         0.00         68          0
mmcblk1boot1      0.00         0.00         0.00        288          0
mmcblk1boot0      0.00         0.00         0.00        276          0

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
mmcblk1           0.33         0.00        12.00          0         36
mmcblk1rpmb       0.00         0.00         0.00          0          0
mmcblk1boot1      0.00         0.00         0.00          0          0
mmcblk1boot0      0.00         0.00         0.00          0          0
```

`iostat`コマンドではI/Oデバイスの使用状況について表示します。
上記の例では`-d 3 2`オプションを付与しています。
`-d`はCPU使用率の表示をしないオプションで、デフォルトではCPU使用率についても表示します。
`3 2`はそれぞれ使用状況の取得間隔秒数と回数を指定しており、ここでは3秒間隔で2回表示するということになります。
取得間隔秒数のみ指定することも可能で、その場合はCtrl+C等で停止するまで表示され続けます。
取得間隔秒数と回数を指定しない場合は一度のみ出力して終了します。

各項目の説明については以下の通りです。

|項目|説明|単位|
|:---|:---|:---|
|Device|I/Oデバイス名|-|
|tps|1秒当たりのI/Oリクエスト数|回|
|kB_read/s|1秒当たりの読み出したデータ量|KB|
|kB_wrtn/s|1秒当たりの書き込んだデータ量|KB|
|kB_read|読み出したデータ総量|KB|
|kB_wrtn|書き込んだデータ総量|KB|

初回の表示は各項目でシステムが起動してからの平均値を表示します。
2回目以降は前回の表示からの差分を表示します。上記の例であれば3秒間での変化について表示します。
そのため、取得間隔と回数を指定しない場合はシステムが起動してからの平均値のみ表示されることになります。
リアルタイムなI/Oデバイスの使用状況を取得したい場合は、取得間隔や回数の指定が必要となります。

AE2100ではSDカード等を使用していなければ本体eMMCのデバイスについてのみ表示されます。
そのため、eMMCへのI/Oを確認したい場合は`mmcblk1`の行を参照します。

詳細は`man iostat`を参照してください。


# 過去のリソース使用状況
## sar

一部リソースに関しては自動的に過去の使用状況を記録しています。
過去の使用状況を確認するには`sar`コマンドを使用します。

ここでは以下のリソースについて説明します。

* CPU使用率
* メモリ使用率

### CPU使用率

```
root@ae2100:~# sar
Linux 4.14.67-intel-pk-standard (ae2100)        07/02/20        _x86_64_        (4 CPU)

07:33:02        CPU     %user     %nice   %system   %iowait   %steal      %idle
07:34:01        all     58.26      0.00     14.89     18.96     0.00       7.90
07:35:01        all     62.03      0.00     13.31     18.89     0.00       5.77
07:36:01        all     57.07      0.00     15.89     20.62     0.00       6.42
07:37:01        all     53.95      0.00     15.55     22.67     0.00       7.84
```

`sar`コマンドを使用すると過去のCPUの使用状況を確認することができます。
使用状況の情報は1分ごとに記録されていて、コマンド実行した当日の00:00からの情報を表示します。

`sar`コマンドの情報源になる記録は`/var/log/sa`ディレクトリにsaXXやsarXXの名前で保存されています。
XXには日付の数字が入ります。(1日ならばsa01となります。)
当日以前の記録を参照したい場合は`sar -f /var/log/sa/saXX`と参照するファイル名を指定して実行してください。

各項目の説明については以下の通りです。

|項目|説明|
|:---|:---|
|%usr|ユーザプロセスのCPU使用時間の割合|
|%nice|nice値が変更されたユーザプロセスのCPU使用時間の割合|
|%system|システムプロセスのCPU使用時間の割合|
|%iowait|ディスクのI/O終了待ちをしているプロセスのCPU使用時間の割合|
|%steal|ハイパーバイザのCPU使用時間の割合|
|%idle|idle状態のCPU使用時間の割合|

### メモリ使用率

```
root@ae2100:~# sar -r
Linux 4.14.67-intel-pk-standard (ae2100)        07/15/21        _x86_64_        (4 CPU)

00:00:01    kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
00:01:01      2871028   3318432    748108     20.67     68556    399684   2383388     65.86    361424    265140       140
00:02:01      2870976   3318400    748160     20.67     68568    399668   2387048     65.96    361920    265148         0
00:03:01      2871592   3319044    747544     20.66     68584    399716   2387092     65.96    361460    265156       124
00:04:01      2870468   3317968    748668     20.69     68596    399756   2386148     65.93    362152    265156       248
```

`sar`コマンドに`-r`オプションを付与することでメモリに関する使用状況を出力します。

CPUと同様で使用状況の情報は1分ごとに記録されており、当日の00:00からの情報を表示します。
当日以前の記録を参照する方法もCPU使用率と同様で、ファイル名を指定して実行します。

各項目の説明については以下の通りです。

|項目|説明|単位|
|:---|:---|:---|
|kbmemfree|空きメモリ量|KB|
|kbavail|スワップ無しで割り当て可能なメモリ量（実質的な空きメモリ量）|KB|
|kbmemused|カーネル以外で使用中のメモリ量|KB|
|%memused|総メモリ量に対してkbmemusedが占めるメモリの割合|%|
|kbbuffers|カーネルがバッファとして使用しているメモリ量|KB|
|kbcached|カーネルがキャッシュとして使用しているメモリ量|KB|
|kbcommit|システム動作に必要な事前に確保されているメモリ量|KB|
|%commit|総メモリ量に対してkbcommitが占めるメモリの割合|%|
|kbactive|直近で使用されており、必要が無ければ解放されないメモリ量|KB|
|kbinact|直近で使用されておらず、必要に応じて開放可能なメモリ量|KB|
|kbdirty|ディスクへの書き戻しを待っているメモリ量|KB|

詳細は`man sar`を参照してください。

# まとめ
今回はAE2100で使用できる各種リソースの確認方法について説明しました。
一部はAE2100でのみ使用できる方法ですが、多くはLinuxのコマンドをベースとした確認方法となっています。
AE2100以外のシステムでリソースを確認したい場合にも参考にしていただければと思います。