Linuxシステムはダーティページを1つずつディスクにフラッシュしますか?

Linuxシステムはダーティページを1つずつディスクにフラッシュしますか?

私が知る限り、Linuxシステムでは、ファイルの内容が変更されると、ファイルの内容を含むページがページキャッシュにダーティとして表示され、最終的にディスクにフラッシュされます。

私が知りたいのは、これらのページがディスクにフラッシュされるとブロック単位でフラッシュされますか?

たとえば、ブロックサイズが4kBで1024kBをフラッシュする必要がある場合、ディスクの書き込み回数は1024/4 = 256回になりますか?

ベストアンサー1

これは非常に複雑なトピックで、ディスク、ディスクコントローラ、カーネルの設定によって異なります。

通常、カーネルはできるだけ効率的にしようとします。たとえば、調整可能な時間範囲(通常約30秒)内に同じブロックを複数回更新し、毎回ディスクへの同期を明示的に強制しない場合、ほとんどの書き込みは単にデータキャッシュを更新します。最終結果のみ実際にはディスクに書き込まれます。

連続したブロックの長いシーケンスを作成する場合、カーネルはストレージコントローラとディスク自体が許可するのと同じくらい少ないブロックと大きなブロックでこれを実行しようとします。

カーネルのI / Oスケジューラは、最も効率的なディスクアクセスを達成するためにディスクの操作順序を最適化することもできます。この最適化は、仮想マシンやSSDではほとんど重要ではないため、オフにすることができます。 (SSDはショットガン方式で任意のブロックにアクセスしても十分に高速です。エネルギーの無駄です。

一部のディスクには、I/O ジョブ・サイズに関する制限または推奨事項がある場合があります。

# fdisk -l /dev/sdb
Disk /dev/sdb: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

たとえば、HDDは既存の512バイトディスクセクタをエミュレートしますが、内部的には4kセクタサイズを使用します。したがって、指定された最小I / Oサイズは4kです。

おすすめ記事