Linuxファイルシステム(ext4)は、同じディスク上の他のファイルへの書き込みを同期しますか?

Linuxファイルシステム(ext4)は、同じディスク上の他のファイルへの書き込みを同期しますか?

私は複数のスレッドでファイルに追加の専用書き込みを含むLinuxアプリケーションを開発しています。現在、各スレッドからミューテックスを取得し、ファイルに追加しています。私はアプリケーションのパフォーマンスを最適化し、複数のファイルを生成することを検討しました(セグメントを呼び出すと)、各スレッドは独自のセグメントに書き込むことができました。このファイルは事前書き込みログに似ており、アプリケーションの起動中にのみ使用されます。

上記がIO最適化のための良い戦略かどうか疑問に思います。
書き込み用に同じローカルディスクに複数のファイルを作成するためのオーバーヘッドはありますか?

ベストアンサー1

からman 2 write

POSIX.1-2008/SUSv4セクションXSI 2.9.7(「一般的なファイル操作とスレッドの相互作用」)によると:

通常のファイルまたはシンボリックリンクで機能する場合、次の関数はすべてPOSIX.1-2008で指定された効果に対して互いにアトミックでなければなりません。

後にリストされる API には write() および writev(2) が含まれます。スレッド(およびプロセス)全体でアトミックでなければならない効果の1つは、ファイルオフセットの更新です。しかし、Linux 3.14より前のバージョンではそうではありませんでした。開かれたファイル記述(open(2)を参照)を共有する2つのプロセスが同時にwrite()(またはwritev(2))を実行した場合、I / O操作は更新中でした。ファイルオフセットの側面はアトミック操作ではないため、両方のプロセスで出力されるデータブロックが(不正確に)重複する可能性があります。この問題はLinux 3.14で修正されました。

つまり、プロセスが複数のスレッドの場合、カーネルが3.14より大きい場合、実際のファイルシステムとは関係ありません。

おすすめ記事