アンドロイドTVでCPU負荷をリアルタイム可視化するsysfsツール活用ガイド
更新日 2026-10-27
なぜ今、sysfsを用いたCPU可視化が必要なのか
最近のAndroid TVでは、バックグラウンドでの不意なスリープや、チャンネル切替時のフリーズが「動作が重い」と感じるユーザーが増えています。従来のアプリ内プロファイリングは起動に数秒かかり、テレビ画面上で直接見えるわけではありません。そこで、Linux系組み込み環境で標準的に提供されているsysfsインターフェースを活用し、CPU使用率をリアルタイムにグラフ化する手法が有効です。この方法なら、電源ボタンを押さずに、テレビ上にプログレスバーを常時表示できるようになります。
sysfsは /proc と /sys に跨る仮想ファイルシステムで、/sys/devices 以下に配置されたデバイスごとのメトリクスをテキストで読めたり書けたりします。CPU負荷を測る場合は、/proc/stat のサンプリング値や、/sys/class/thermal/... の温度情報、および /proc/acpi/ 直下にある製品識別ファイルを参照しながら、複合的な画像を構築します。Android TVのGoogle TV版では、この読み取り用シェアードサービスが既に有効になっており、第三者のユーティリティをインストールする必要はありません。
実装手順:sysfsからCPUデータを読み取る
最初のステップは、TV本体のシェアードサービスで読み取り命令にアクセスできることを確認することです。設定メニューから「システム情報」または「センサー情報を表示」を探し、それが有効になっているか確認してください。有効であれば、/proc/stat を読み取るスクリプト、例えば /system/bin/sh/show_cpu.py のような位置に書き込めます。スクリプトの核となるのは、/proc/stat の最初の1行に表示される cpu0 以降の値を抽出し、100ミリ秒ごとに平均化するループです。
抽出した生データをパイプラインで整形するのが実用的な書き方です。具体的には、bash の awk を使った短い処理で、/proc/stat の最新行を cpu 以下の合計値(idle, iowait, util1, idle1, wait,nice, steal を除く)を取り出し、100ms ごとの移動平均を計算します。その出力を gnuplot や matplotlib が読めるCSV形式で ~/sys/cpu_history.csv に書き出し、テレビ左側のサイドバーに表示するアプリから読み出すだけです。この一連の処理を毎分 1 回、cron に相当する仕組みで走らせると、1 時間単位の CPU 使用率グラフが自動保存されます。
グラフ描画と実行時の注意点
可視化ツールとしての具体例として、sysstats-cpu-graph という名前の軽量Pythonスクリプトを TV 用SDKに同梱するのがおすすめです。このスクリプトは /sys/class/thermal/thermal_zone*/temp から温度読み取り、CPUアイドル率を同時計算して、PIL を使って水平棒グラフを描画します。リアルタイム表示の最大のポイントは、更新間隔の設定です。time.sleep(0.1) で 100 ミリ秒ごとに再取得し、ImageDraw.Rect で棒の幅を使用率に反比例させて描画します。分解能を高めすぎるとCPU負荷自体が増え、逆効果になるため、1 秒おき程度の間隔に抑えるのが実務的な最適解です。
ここでいくつか重要なトレードオフを述べます。まず、sysfs 経由でデバイス情報を読み取ることで発生する I/O 負荷は、古い ARM11 ベースの TV では数百 mA の節電につながります。一方、最新の Cortex-A55 搭載モデルでは、測定オーバーヘッドは無視できるレベルです。次に、グラフをテレビの UI に常駐させる場合、スクリーンスペースを占有するので、サイドバーに小さく表示するか、タップでオンオフ切り替えできる設計が好ましいです。最後に、CSV ログは外部ストレージにエクスポートする手順を忘れずに入れてください。これがないと、深夜に自動生成されたパフォーマンス記録を後から確認できなくなります。
結論:可視化で見えないボトルネックを特定する
sysfs ツールを用いた CPU 可視化は、テレビ本体の内部ログだけでは発見できないプロセス遅延を浮き彫りにします。例えば、特定のアプリが起動時に無視できない CPU スパイクを、リアルタイムグラフのピークで直接確認できるようになります。これにより、不用意なバックグラウンドサービスの再起動を無効化したり、不要なウォッチドッグをオフしたりといった具体的な改善が可能になります。Android TV で快適な視聴体験を維持するには、目に見えない負荷を「見える化」することが、次の一歩として最も効果的なステップです。
関連記事:Android TV の他の記事