4

かなり遅い速度(50バイト/秒程度)でファイルに書き込む組み込みLinuxアプリがあります。このファイルは、ハードドライブのXFSファイルシステムにあります。write()ファイルは、ではなく、を呼び出すことによって書き込まれますfwrite()

システムの電源を入れ直してファイルを確認すると、1分以上のデータが失われています。Linuxのデフォルトの動作は、 5秒ごとにディスクキャッシュを同期することだと思いました( 5秒分のデータの欠落を許容できるので、これで問題はありません)。長い間同期されない理由を確認するには、何を確認する必要がありますか?500/proc/sys/vm/dirty_writeback_centisecsです。私がチェックすべき他の変更可能なものはありますか?それは間違いなくディスクキャッシュの問題のように見えます-ファイルの場合、サイズは予想どおりであり、電源を入れ直した後は以前よりも小さくなります。ls -l

4

3 に答える 3

1

5秒の動作は、ext3 / ext4ファイルシステムの場合のみです。これは、コミットマウントオプション(デフォルトはcommit = 5)で制御できます。XFSがどのように動作するかわかりません。

おそらく、VMサブシステムで30秒の制限を意味します。デフォルトでは、Linuxはデータの書き込みを最大30秒待つことができます。以下を使用して制限を取得/設定できます。

# cat /proc/sys/vm/dirty_expire_centiseconds
3000

数百秒を表示します。

于 2013-01-28T14:12:19.053 に答える
0

うーん、「Linuxのデフォルト」としての5Sについてはよくわかりません。私の知る限り、遅延はファイルシステムに依存しますが、私は間違っているかもしれません。XFSでのキャッシュ同期の最大遅延は30秒(または少なくとも少し前)だと思います。この5秒という数字は、一部の古いファイルシステム(私が信じているext2とext3)には当てはまり、正しく思い出せば、ext4には当てはまりません。

結論として、あなたに起こっていることは期待される行動です。

キャッシュを超えたい場合は、fsync、O_SYNC、またはO_DIRECTを使用する必要があると思います。または、ファイルシステムをマウントするときに「sync」オプションを適用します。これにより、問題がグローバルに解決されます。

于 2012-08-09T14:09:04.383 に答える
0

そうですね、XFSはそのような「失敗」で知られています。問題は書き込みキャッシュに関連しています。XFSFAQの詳細。

于 2012-08-09T14:18:29.567 に答える