私は4.4.12-rt19 RTLinuxカーネルパッチを扱っています。リアルタイムLinuxアプリケーションでデータを記録する方法は?
私は、ネットワークからデータを取り込み、そのデータを計算し、結果を記録する別々のコアで動作する別々のプロセスを持つ、Cで書かれたリアルタイムアプリケーションを持っています。私は、データのmsティックごとに10KBのオーダーをファイルに記録しようとしています。
ロギングプロセスは、共有メモリ内のすべての着信データにアクセスできます。今は、sqlite3とsqlite3asyncを使用して、データベースをロギングプロセスの1つのスレッドのメモリにバッファリングし、sqlite3async_run()の呼び出しで1秒ごとにファイルにメモリ内インスタンスをコミットします。
sqlite3async_run()の実行中に、メモリ内のデータベースバッファに書き込むsqlite3_step()コマンドがハングし、1msのタイミング保証に違反するという問題があります。
リアルタイムプロセス環境でスレッドプロセスがどのように動作するのか、sqlite3asyncがどのように動作するのかによってエラーが発生するのかどうかはわかりません。 sqlite3asyncは、sqlite3仮想ファイルシステムを使用してメモリ内のデータベースをバッファし、実際のファイル書き込みをバックグラウンドスレッド(詳細はhere)で処理できるようになっています。私はスケジューリングの優先順位と各スレッドのニーネスを無駄に変更しようとしました。
ご意見やご提案は大変ありがとうございます。
WALモードは遅すぎると思われたので、ジャーナリングモードをMEMORYに設定しました。ジャーナルがコミットごとにファイルに書き込まれることなく、私のアプリケーションは問題ありません。助けてくれてありがとう! – Sabar