nns779 / px4_drv

Unofficial Linux driver for PLEX PX4/PX5/PX-MLT series ISDB-T/S receivers (not V4L-DVB)
GNU General Public License v2.0
308 stars 49 forks source link

PX-MLT8PEでトラブル発生 #14

Closed simplelife0530 closed 3 years ago

simplelife0530 commented 3 years ago

トラブルが発生していますが、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ドライバのどちらかに原因があるように考えられますが、 切り分ける何か方法はありますか?

nns779 commented 3 years ago

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

考察

まず前提として、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 システムを再起動する

simplelife0530 commented 3 years ago

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

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

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

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

simplelife0530 commented 3 years ago

パケット除去、実行してみました。 いくらか改善されたように見えましたが、午前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の作者に、情報を入れてみます。