2017-02-28 5 views
2

私たちは、cffiインターフェイスを介してフレームグラバーカードからデータを取得するPythonフレームワークを構築しています。いくらか操作した後、RAWイメージ(tofileメソッドを使ってnumpy配列)を約120 MB/sの速度でディスクに書き込もうとします。我々は、ディスクがこのスループットを処理できることをよく認識しています。pythonのプロセス書き込みを、ダーティとマークされずに即時に書き戻すようにスケジュールする

私たちが経験していた問題は、フレームが落ちてしまい、多くの場合、フレームグラバーの出力から完全に欠落したデータが1秒間消えてしまいました。私たちが見つけたのは、Debianシステムがsysctlのdirty_background_ratioにヒットしたときに、これらのフレームドロップが発生していたことです。システムは、フレームグラバーを詰まらせ、フレームをスキップさせるようなフラッシュバックグラウンドギャングを呼び出していました。

驚くことではないが、0%にdirty_background_ratioを設定すると、完全に問題を取り除くことに成功しそう

(1%と2%のようにも小さな数字はまだ〜40%のフレーム損失をもたらしたことは注目に値します)私の質問は、このPythonのプロセスを書き込むために即座にスケジュールされ、ダーティなバッファを完全にバイパスするような方法で書き込む方法はありますか?だから、HERESに

おかげ

答えて

0

私はそれを行うことができた一つの方法。

numpy memmapオブジェクトを使用すると、ディスクの一部に直接対応する配列をインスタンス化できます。メソッドflush()またはpythonのdelを呼び出すと、配列がディスクに同期し、OSのバッファを完全にバイパスします。私は、この方法を使って最大スループットで〜280GBをディスクに書き込みました。

調査を継続します。

関連する問題