nns779/px4_drv

PX-MLT8PEでトラブル発生

simplelife0530 opened this issue · 3 comments

トラブルが発生していますが、PX-MLT8PEが原因かMirakurunが原因かわかりません。

1.トラブル内容
PX-MLT8PE、Mirakurun、EPGStation、Ubuntu20.04の構成で録画サーバーを運用。
地上波6チャンネルの全録を行うと、12~24時間でMirakurunのメモリ利用が600MBを越え、
エンコード処理が8倍速から4倍速へ低下。
PX-Q3PE4で同じ構成のマシンでは、地上波4チャンネル、BS2チャンネルで全録を行っても
メモリ利用は180MB程度で安定しています。エンコード処理は、6倍速以上で安定。

2.原因
何らかのメモリーリークが発生している。Mirakurun 3.5.0で共通であるにも関わらず、
挙動が大きく異なっている。PX-MLT8PEのドライバの可能性はないか。
同時に6チャンネルで行わない場合は、特に問題なく動作していたように思う。

MirakurunかPX-MLT8PEドライバのどちらかに原因があるように考えられますが、
切り分ける何か方法はありますか?

切り分け方法というよりも改善案になってしまいますが、考えてみました。

考察

まず前提として、PX-MLT5PEやPX-MLT8PEなどのデバイスが出力するTSには、PX-Q3PE4などと比較してNULLパケットが多く含まれるため、ビットレートが高くなります。(MLT系の地上波は30Mbps程度, U4・PE4系の地上波は16~18Mbps程度)
恐らく、この高ビットレートなTSをMirakurunが処理するとNode.jsのGCが消極的になり、メモリ使用量が増加するのではないかと思います。
(そして、ドライバにおけるTS受信処理や受信後のTSデータなどに関して、NULLパケット以外に両者の差異が思い当たりませんでした。)

改善案

この問題はTSをMirakurunへ渡す前にNULLパケットを除去することによって改善する可能性がございます。
以下の手順にて、px4_drvへNULLパケット除去の設定が可能ですので、お試しください。

  1. 以下の1行を記述したファイルを「/etc/modprobe.d/px4_drv.conf」へ保存する

    options px4_drv discard_null_packets=Y

  2. px4_drv.koを再ロードする or システムを再起動する

回答ありがとうございます。
毎日録画するたびに、nns779さんへ感謝して使わせていただいています。

以下の改善案、試してみます。

  1. 以下の1行を記述したファイルを「/etc/modprobe.d/px4_drv.conf」へ保存する
    options px4_drv discard_null_packets=Y
  2. px4_drv.koを再ロードする or システムを再起動する

2日ほどで結果は出ると思いますので、また報告させていただきます。

パケット除去、実行してみました。
いくらか改善されたように見えましたが、午前1時頃にはエンコード速度が1倍まで低下しました。
Mirakurunは、最初メモリ使用量100MB程度でしたが、6チャンネル全録予約で、280MBになりました。
そして、午前1時には、4.7GBで、スワップが2GBと100%になってしまいました。
この時iowaitは、45%でした。
朝8時には、エンコード待ちが30番組くらいになりました。そこで、予約を全部取り消すと
エンコード速度は7倍程度になり、Mirakurunのメモリ使用量は、3.1GBになりました。

やはり、PX-MLT8PEとPX-Q3PE4では、Mirakurunの動作がかなり違います。

まずは、Mirakurunの作者に、情報を入れてみます。