私はLinux 2.6カーネルでext4を使用しています。私は数百から16メガバイトの範囲であることができるバイト配列でレコードを持っています。アプリケーションには、X MBのバッファリングとX MBのwrite()の使用とを対比して、すべてのレコードに対してwrite()を使用する利点がありますか?Linux ext4ファイルシステムにデータを書き込むためにバッファリングを使用していますか?
バッファリングにメリットがある場合、ext4にはどのような価値がありますか。この質問は、ext4のマルチブロックアロケータの動作をプロファイリングした人のためのものです。
私の理解では、ファイルシステムはページサイズの倍数でバッファし、ディスク上でそれらをフラッシュしようとします。 write()に提供されたバッファがファイルシステムバッファよりも大きければどうなりますか?これは、ファイルシステムをディスクに強制的にフラッシュするための粗末な方法ですか?
2
A
答えて
0
"正しい"答えは、実際にデータで何をしたいかによって決まります。
write(2)は、カーネル空間へのシングルトリップとして設計されており、I/Oを適切に制御します。ただし、ファイルがO_SYNCで開かれていない限り、データはカーネルのキャッシュにのみ格納され、ディスクには格納されません。 O_SYNCはファイルをディスクに同期させるためにそれを変更します。ディスクへの実際の書き込みはカーネルキャッシュによって発行され、ext4はフラグメンテーションを最小化するための書き込み用の大きなバッファiircを割り当てようとします。一般に、write(2)は、データをカーネルに送るかアプリケーションのキャッシュに残すかを制御するのに適しています。
しかし、多くのレコードを書き込む場合は、writev(2)に興味があり、バッファのリストからデータを書き込みます。 write(2)と同様に、それはアトミックな呼び出しです(もちろん、直接的な入出力が使用されていない限り、実際にはディスク上ではなく、OSのセマンティクスにのみあります)。
関連する問題
- 1. binutilsをLinuxで使用して、シンプルなブートローダを書き込むために
- 2. Linuxを使用してeventfdに書き込むAIO
- 3. ASP.NETファイルシステムにPDFを書き込む
- 4. EXT4ファイルシステムをC言語で記述していますか?
- 5. stdoutをメモリにバッファリングして専用スレッドから書き込む方法
- 6. 古い日付のためにinfluxDBにデータを書き込む
- 7. INSERT INTOを使用してアクセスデータベースにデータを書き込む
- 8. Spark 2.0.1を使用してRedshiftにデータを書き込む
- 9. ウェブスクリプトアプリを使用してGoogleシートにデータを書き込む
- 10. csv.DictWriterを使用してCSVにデータを書き込む
- 11. Pythonを使用してavafデータをkafkaに書き込む
- 12. mirth connectを使用してmogoDBにデータを書き込む
- 13. Python For Loopsを使用してExcelにデータを書き込む
- 14. JavaScriptを使用してローカルテキストファイルにデータを書き込む
- 15. Apache Flink MapRファイルシステムに書き込む
- 16. バッファリングされたイメージにdouble値を書き込む方法
- 17. JSONファイルにAJAXまたはPHPを使用してJavaScriptデータを書き込む
- 18. ホストのファイルシステムを書き込むためにドッカーのコンテナを拒否する
- 19. ChromeファイルシステムAPIを使用してファイルを書き込むときにファイルエンコードに適合しない
- 20. DMAを使用してLinuxデバイスドライバからハードドライブに書き込む方法
- 21. QextSerialPortを使用してデータを書き込むと、常に0バイトが書き込まれます
- 22. Linuxカーネルモジュールからdebugfsに書き込む
- 23. Linux上でPythonを使ってusbにファイルを書き込む
- 24. リアクティブプログラミングを使用してFileStreamを開くために書き込む
- 25. ファイルシステムを破損させずにディスクにrawデータ "署名"を書き込む
- 26. mapreduceのコンテキストに書き込むために値としてTextを使用できますか?
- 27. Linuxカーネルモジュールの同じセクションにコードとデータを書き込む
- 28. Pythonを使用して2つのファイルからExcelにデータを書き込む
- 29. 処理を使用してArduinoからテキストファイルにデータを書き込む
- 30. バッチファイルを使用してデータを書き込む
バッファリングされていても、カーネルコールの数が異なることがあります。ここで問題になる可能性は低いですが、1k×1byteの書き込みは、一般に1×1kbytesより悪くなります...もちろん、極端なものを選んだのです。 –