Armadilloフォーラム

gstreamerの負荷を下げたい

sirakawa

2022年4月18日 22時35分

お世話になっております。
Armadillo-810にてカメラ動画を外部に出力する機器を開発中です。
基本的に以下の2つのアプリケーションを動作させています。
(a)10ms周期で外部とシリアル通信をするアプリケーション(SCHED_FIFO)
(b)gstreamer(SCHED_OTHER)

(a)のシリアル通信周期を守るため、カッコ内のリアルタイムポリシーとしています。
定常状態であれば(a)の通信は問題無いのですが、
(b)の起動時、停止時に(a)の通信が不安定となって困っています。

(b)のどんな処理が高負荷なのか、確認する方法はありますでしょうか?

コメント

at_akihito.irie

2022年4月19日 14時52分

入江です。

直接的な回答でなく申し訳ございませんが、実行時にnice値を変更して
(a)の優先度を上げてみるとどうなりますでしょうか?

また、ご使用のユーザーランドはAtmark-Distでしょうか、Debianでしょうか。
ご確認よろしくお願いいたします。

sirakawa

2022年4月20日 12時07分

コメントありがとうございます。

> 実行時にnice値を変更して
> (a)の優先度を上げてみるとどうなりますでしょうか?
(a)のnice値を変更しても動作に変化はありませんでした。
カメラ入力などの負荷が重たく、スケジューラ動作に影響があるのだと想定しています。

> また、ご使用のユーザーランドはAtmark-Distでしょうか、Debianでしょうか。
> ご確認よろしくお願いいたします。
Atmark-Distを使用しています。
設定として、Kernel Configの「Kernel HZ (jiffies per second)」を「128」から「1024」に変更して使用しています。

at_mizo

2022年4月20日 12時35分

溝渕です。

> (b)の起動時、停止時に(a)の通信が不安定となって困っています。
>
> (b)のどんな処理が高負荷なのか、確認する方法はありますでしょうか?

pipelineが、

A->B->C

なら、

A->fakesink
A->B->fakesink

のように刻んでいき、何が原因かを調査するのはいかがでしょうか。

sirakawa

2022年4月20日 14時45分

> pipelineが、
> A->B->C
> なら、
> A->fakesink
> A->B->fakesink
> のように刻んでいき、何が原因かを調査するのはいかがでしょうか。

pipeline別の負荷調査を考えられていませんでした。
調査方法のご提案ありがとうございます。

確認結果としては
v4l2src → fakesink だけで高負荷となっているようでした。
以下の想定の動きになっていそうですね。。。
>カメラ入力などの負荷が重たく、スケジューラ動作に影響があるのだと想定しています。

at_mizo

2022年4月20日 15時05分

溝渕です。

> 確認結果としては
> v4l2src → fakesink だけで高負荷となっているようでした。
> 以下の想定の動きになっていそうですね。。。
> >カメラ入力などの負荷が重たく、スケジューラ動作に影響があるのだと想定しています。

負荷にも色々あるので、まず最初に切り分けるのが良いかと思います。

バス/メモリ負荷であれば、取得する画像サイズを小さくすると挙動が変化すると思います。

CPU負荷やソフトウェアのバグであれば、画像サイズを小さくしても挙動に変化は無いはずです。この場合はGstreamer以外のキャプチャアプリケーションを用意して、userland/kernelのどちらが問題かを切り分けるのが良いかと思います。