見出し画像

jtop コマンドがエラーになる問題を修正

Jetson Nano には GPU の使用状況を確認する tegrastats という標準コマンドがありますが、CLI ベースで直感的に把握できないので、CUI ベースで視覚的に確認できる jetson_stats ( jtop コマンド) が便利です。

$ tegrastats
RAM 1446/3957MB (lfb 458x4MB) IRAM 0/252kB(lfb 252kB) CPU [17%@1428,11%@1428,21%@1428,12%@1428] EMC_FREQ 2%@1600 GR3D_FREQ 0%@76 APE 25 PLL@20.5C CPU@24.5C PMIC@100C GPU@21C AO@29.5C thermal@22.25C POM_5V_IN 2830/1483 POM_5V_GPU 41/31 POM_5V_CPU 943/206
RAM 1462/3957MB (lfb 457x4MB) IRAM 0/252kB(lfb 252kB) CPU [43%@1036,44%@1036,36%@1036,34%@1036] EMC_FREQ 6%@1600 GR3D_FREQ 51%@307 NVDEC 192 APE 25 PLL@20.5C CPU@24.5C PMIC@100C GPU@22C AO@29.5C thermal@22.75C POM_5V_IN 3353/1616 POM_5V_GPU 450/61 POM_5V_CPU 613/235

JetPack4.2 のデモを動かして GPU がどのくらい使用されるかを確認していたところ、VisionWorks の feature tracker デモを動かすとエラーが出力された。

エラーの内容は Python で一般的なリスト (配列) に対して存在しないインデックを指定した際に発生する例外。

volt[‘average’].append(float(value[1])) IndexError: list index out of range

調査していくと feature tracker デモを動かす前後で、tegrastats コマンドの出力内容が変化することに気がつき、具体的には NVDEC というデータが出力される。NVDEC のパラメータ仕様を調べるとビデオハードウェアデコード / エンコードエンジンが使用される時だけ出力されると記載されているので、これが原因だと確信した。

原因が分かればコードを修正して対応完了です。

$ diff jtop.py jtop.py_org 
495,501d494
<             elif 'NVDEC' in data:
<                 # NVDEC Y
<                 # NVDEC is the video hardware decoding engine.
<                 # Shown only when hardware decoder / encoder engine is used.
<                 # NDVEC frequency in MHz
<                 jetsonstats['NVDEC'] = float(other_values[idx+1])
<                 idx += 1

本家にも Pull Request を送っておきましたので、そのうち Merge されるでしょう。

(追記)
2019/6/10 2:25 (@JST) に Merge されました。(仕事、早っ!


この記事が気に入ったらサポートをしてみませんか?