SDカードに一定の速度でjpeg画像を書き込む小さなアプリケーションを書いています。EXT3 ファイルシステムを選択しましたが、EXT2 ファイルシステムでも同じ動作が観察されました。
私の書き込みループは次のようになります。
get_image()
fwrite()
fsync()
またはこのように:
get_image()
fopen()
fwrite()
fsync()
fclose()
また、いくつかのタイミング統計を表示すると、プログラムが数秒間ブロックされていることがわかります。受信画像を fifo に保持すると、そのようなストールの後に短時間で多くの画像を書き込むため、平均レートはまだ良好です。OSの問題なのかSDカード自体の問題なのか分かりますか?どうすればリアルタイムに近づくことができますか? 強力なリアルタイムは必要ありませんが、数秒間停止することは受け入れられません。
ある程度の精度:はい、すべてのファイルの後にfsyncする必要があります。これは、イメージをユーザーまたはカーネルバッファーではなくディスクに配置したいためです。fsync を使用しないと、スルー出力が大幅に改善されますが、それでも許容できないほどのストールが発生します。最初のストールは 50M バイトが書き込まれた後に発生するため、バッファの問題ではないと思います。また、man ページによると、fsync は正確にここにあり、データがバッファリングされていないことを確認します。
平均書き込み速度に関する精度 : 使用しているカードで維持できる速度で書き込みを行っています。fsync が完了するのを待っている間に着信イメージをパイルすると、この失速後に書き込み転送速度が上昇し、すぐに平均速度に戻ります。平均転送速度は約 1.4 MBytes/s です。
システムは、ストックキー(2.6.24.19)を備えたubuntu 8.04を実行する最新のラップトップです