UNIXでファイルを書き込むよりもファイルを読み取る方が高速ですか?

UNIXでファイルを書き込むよりもファイルを読み取る方が高速ですか?

やや遅いパフォーマンスのボトルネックは、この非常に小さなクエリが原因で発生します。実証的な分析をしてみると、ディスクキャッシュポリシーに影響されないかと思います。デフォルトでは(ディスクキャッシングが無効になっている場合)、ファイルの書き込みはファイルの読み取りより高速ですか、遅いか高速ですか?答えは断片化(およびファイルサイズ)によって異なりますが、ファイルへの書き込みはポインタに従うのではなく、次の利用可能なブロックの場所を追加で見つける必要があります。

答え1

時々違うよねこの質問に対する普遍的な答えはありません。

キャッシュがなければ、通常はディスクファイルへの書き込みは読み込みよりもはるかに遅くなります。これは、オペレーティングシステムではなくハードウェアに関連しています。つまり、ハードドライブとソリッドステートメディアの両方が書き込みよりも読みやすい速度が速くなります。 2番目の要素はファイルシステム構造に関連しています。読み取るには、ディレクトリツリーとブロックリストをデータまで巡回してからデータを読み取る必要がありますが、書き込みは同じ巡回を実行してからデータを書き込んでから、一部のメタデータを更新する必要があります。 。

キャッシュが開始されると、状況が異なります。キャッシュからデータを読み取る速度は非常に高速ですが、キャッシュにないデータを読み取るにはディスクから取得する必要があります。オペレーティングシステムは読み取り予測を試みることができますが、これは非常に特定の場合(主にファイルから順次読み取り)にのみ機能します。一方、データボリュームが大きすぎない場合、データはメモリバッファにのみ書き込まれるため、書き込みはほぼ瞬時に行われる。バッファは最終的にディスクに書き込まれる必要がありますが、それ以降はアプリケーションがすでにより多くの作業を実行し始めました。

答え2

執筆はより速くなければなりません。

利用可能なブロックのリストはメモリに保存されるため、次の利用可能なブロックを見つけるのは非常に高速です。同期モードで作成しない限り、何かを作成しようとすると、データをカーネルバッファにコピーして書き込みをキューに追加するため、I / Oが完了するのを待つ必要はありません。

一方、読み取りは、データが到着するまで呼び出し元が何も実行できないため、I / Oが完了するのを待つ必要があります。

関連情報