NXPチームの皆様
弊社のデバイスで、フル HD 画面に 6 つのカメラ フィード (800x600@60fps) が表示される問題が発生しました。私たちのアプリケーションはC++で実装されたGStreamerベースのパイプライン[2]を使用します。このパイプラインを実行すると、約1.5時間の稼働後にエラー[6]が発生しました。このデバイスは i.MX 8M PLUS をベースにしており、Mickledore (カーネル 6.1.36) を実行します。Variscite は GStreamer を変更していないため、皆さんのご意見を伺っています。
カーネル設定は変更されません。デフォルトでは、CmaTotal は 983040 kB に設定されています。私の理解では、VPU の DMA 使用により CMA メモリが動的に再割り当てされます。利用可能なCMAメモリ[3]が徐々に減少し、約531,723秒(約6日間)後、パイプラインが2040ページの連続したブロックを割り当てることができず、エラー[4]が発生し、アプリケーションがクラッシュしました。
当初、この問題は GStreamer vpudec プラグインによる VPU メモリの使用 (デフォルトでは use-vpu-memory=true) に関連しているのではないかと疑ったSO、無効にしました。これにより、cmaFree は一時的に安定したように見えましたが、使用可能なメモリは依然として徐々に減少し、時間の経過とともに変動しました。[5]
静的なモザイク レイアウトを表示しており、パイプラインを再作成することはほとんどありません。この問題は数日間の稼働後にのみ発生するため、CMA メモリを増やすだけでは問題は解決されず、むしろ遅延する可能性があります。
私は /sys/kernel/debug/dma_buf/bufinfo を定期的に監視しています。あるデバイスでは、16 時間 27 分後に次の画面が表示されました。
「合計176オブジェクト、377,487,360バイト」 、
そして18時間41分後:
「合計 184 個のオブジェクト、392,232,960 バイト」 。
16 進数値 01843200 も、全体的なメモリ使用量とともに 83 から 91 に増加しました。[7]
この問題についてのご意見、また長期的な解決策や私が検討すべきさらなる診断について何かアドバイスがあればいただければ幸いです。
よろしくお願いいたします。
シラードB
[1] dmesg_cma_error_device1.txt、dmesg_cma_error_device2.txt、dmesg_cma_error_device3.txt
[2] gst-launch-1.0\
rtspsrc 場所="rtsp://admin:[email protected]/profile2/プレスリリース、製品ニュース.smp"レイテンシ=200!rtph265depay !h265parse 設定間隔 = -1 !ウォッチドッグタイムアウト=2000!vpudec の disable-reorder=true !ビデオミキサー.sink_0\
rtspsrc 場所="rtsp://admin:[email protected]/profile2/プレスリリース、製品ニュース.smp"レイテンシ=200!rtph265depay !h265parse 設定間隔 = -1 !ウォッチドッグタイムアウト=2000!vpudec の disable-reorder=true !ビデオミキサー.sink_1\
rtspsrc 場所="rtsp://admin:[email protected]/profile2/プレスリリース、製品ニュース.smp"レイテンシ=200!rtph265depay !h265parse 設定間隔 = -1 !ウォッチドッグタイムアウト=2000!vpudec の disable-reorder=true !ビデオミキサー.sink_2\
rtspsrc 場所="rtsp://admin:[email protected]/profile2/media.smp"レイテンシ=200!rtph265depay !h265parse 設定間隔 = -1 !ウォッチドッグタイムアウト=2000!vpudec の disable-reorder=true !ビデオミキサー.sink_3\
rtspsrc 場所="rtsp://admin:[email protected]/profile2/プレスリリース、製品ニュース.smp"レイテンシ=200!rtph265depay !h265parse 設定間隔 = -1 !ウォッチドッグタイムアウト=2000!vpudec の disable-reorder=true !ビデオミキサー.sink_4\
rtspsrc 場所="rtsp://admin:[email protected]/profile2/プレスリリース、製品ニュース.smp"レイテンシ=200!rtph265depay !h265parse 設定間隔 = -1 !ウォッチドッグタイムアウト=2000!vpudec の disable-reorder=true !ビデオミキサー.sink_5\
imxcompositor_g2d 名前=ビデオミキサー \
sink_0::xpos=0 sink_0::ypos=0 sink_0::width=600 sink_0::height=480 \
sink_1::xpos=640 sink_1::ypos=0 sink_1::width=600 sink_1::height=480 \
sink_2::xpos=1280 sink_2::ypos=0 sink_2::width=600 sink_2::height=480 \
sink_3::xpos=0 sink_3::ypos=560 sink_3::width=600 sink_3::height=480 \
sink_4::xpos=640 sink_4::ypos=560 sink_4::width=600 sink_4::height=480 \
sink_5::xpos=1280 sink_5::ypos=560 sink_5::width=600 sink_5::height=480 \
!waylandsink sync=false enable-last-sample=false qos=false enable-tile=true
[3] cma-20250709-155500.log
[4] cma: cma_alloc: Linux,cma: alloc 失敗、要求サイズ: 2040 ページ、戻り値: -12
[5] cma-our-ソフトウェア-use-vpu-memory-false.log
[6]
1:25:48.1 / 99:99:99。
(gst-launch-1.0:123309):GStreamer-CRITICAL **: 12:56:03.228:gst_buffer_get_memory_range: アサーション 'GST_IS_BUFFER (buffer)' が失敗しました
(gst-launch-1.0:123309): GStreamer-CRITICAL **: 12:56:03.228:gst_buffer_peek_memory: アサーション 'GST_IS_BUFFER (buffer)' が失敗しました
(gst-launch-1.0:123309): GStreamer-CRITICAL **: 12:56:03.228:gst_mini_object_unref: アサーション 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' が失敗しました
エラー: 要素 /GstPipeline:pipeline0/GstWatchdog:watchdog5 から: ウォッチドッグがトリガーされました
追加のデバッグ情報:
/usr/src/debug/gstreamer1.0-plugins-bad/1.22.0.imx-r0/gst/debugutils/gstwatchdog.c(195):gst_watchdog_trigger(): /GstPipeline:pipeline0/GstWatchdog:watchdog5:
ウォッチドッグが起動
実行は1:25:50.443886000後に終了しました
パイプラインを NULL に設定しています...
合計表示フレーム数(128758)、再生時間(1:25:50.444041500)、fps(24.999)。
パイプラインを解放します...
[7] device2_3x2-mosaic_16h27min.txt、デバイス2_3x2-モザイク_18h41m.txt
こんにちは@szilard_b_cib
お元気でお過ごしのことと思います。
残念ながら、私の側では再現できませんでした。Variscite の BSP を使用していますか?弊社の BSP を試しましたか?
私 の CASE、CmaFree は常に同じです。
よろしくお願いいたします。
サラス。