ファイルシステムの基本概念(コンセプト)
理解のために小咄形式でまとめました。
システムパフォーマンス関連記事の目次
登場人物
- 太郎(後輩):入社1年目の若手エンジニア。
- 花子(先輩):システムエンジニア歴3年の先輩。
登場人物
- 花子(先輩):システムエンジニア歴10年の経験豊富な技術者。
- 太郎(後輩):入社2年目の若手エンジニア。システムパフォーマンスについて学び中。
場面:オフィスの開発ルーム
太郎が ファイルシステムのコンセプト
に関する資料を見ながら、花子に質問する。
太郎:「花子先輩、ファイルシステムの基本概念
について学んでるんですが、 レイテンシやキャッシング
などの仕組みがいまいち分かりません…。」
花子:「ファイルシステムのパフォーマンスを理解するには、 基本概念
を押さえておくことが重要よ。 ファイルシステムの動作に影響する 7 つの要素
を説明するわね。」
ファイルシステムの基本概念(コンセプト)
花子:「ファイルシステムの 基本概念
には、大きく 7 つのポイントがあるの。」
- ファイルシステムレイテンシ
- キャッシング
- ランダム I/O と シーケンシャル I/O
- プリフェッチ
- 先読み
- ライトバックキャッシング
- 同期書き込み
1. ファイルシステムレイテンシ
花子:「ファイルシステムレイテンシ
とは、 アプリケーションが I/O をリクエストしてから処理が完了するまでの時間
のことよ。」
- レイテンシ(遅延)が高いと、アプリケーションのパフォーマンスに直接影響する。
- OS はレイテンシの影響を抑えるためにキャッシュや非同期 I/O を活用する。
- レイテンシの原因には
ディスク I/O の遅延
やファイルメタデータの処理時間
などがある。
「これを 宅配便の配達時間
に例えると、 注文(I/O リクエスト)してから届くまでの時間
みたいなものね。」
太郎:「なるほど! レイテンシを短くする
ために キャッシュや高速ストレージを使う
ってことですね!」
2. キャッシング
花子:「キャッシング
は 頻繁に使うデータをメモリ上に保存して、高速アクセスを実現する仕組み
のことよ。」
- リードキャッシュ(Read Cache): よくアクセスするデータをキャッシュし、ディスク I/O を減らす。
- ライトキャッシュ(Write Cache): 書き込みデータをキャッシュし、ディスクへの書き込み頻度を減らす。
「これを 冷蔵庫のドリンク
に例えると、 よく飲むジュースを手元に置いておくことで、わざわざスーパーに買いに行く手間を減らせる
のと同じね。」
太郎:「確かに! キャッシュをうまく活用
すれば 無駄な I/O を減らせる
んですね!」
3. ランダム I/O と シーケンシャル I/O
花子:「ランダム I/O
と シーケンシャル I/O
では、ディスクアクセスの特性が違うの。」
-
ランダム I/O →
データがディスク上のバラバラの場所にある
ため、遅い。 -
シーケンシャル I/O →
データが連続して並んでいる
ため、高速。
「例えば、 図書館で本を探す
のと 本棚にある本を順番に読む
の違いに似てるわ。」
太郎:「つまり、 シーケンシャル I/O の方が効率がいい
んですね!」
4. プリフェッチ
花子:「プリフェッチ
とは、 今後使われそうなデータをあらかじめ読み込んでおく技術
のことよ。」
- 予測してデータを先にメモリに読み込むことで、I/O 待ち時間を減らす。
- 動画ストリーミングの
バッファリング
も、プリフェッチの一種。
「例えば 電車の時刻表を事前に確認する
のと同じで、 次に必要なデータを予測して準備する
のがポイントね。」
太郎:「確かに 無駄な待ち時間を減らせる
仕組みですね!」
5. 先読み
花子:「先読み
とは、 シーケンシャル I/O の場合に、次のデータを事前に読み込む技術
ね。」
- HDD では、ディスクの回転に合わせて次のブロックを事前に取得することで、待ち時間を削減できる。
- SSD でも、リードキャッシュを活用して先読みを最適化することが多い。
「例えば 映画の字幕を事前にダウンロードする
のと同じで、 スムーズにデータを取得できる
ようになるわ。」
6. ライトバックキャッシング
花子:「ライトバックキャッシング
は 書き込みデータを一時的にキャッシュし、後でまとめて書き込む手法
ね。」
- 書き込みのたびにディスクにアクセスすると遅くなるため、一時的にキャッシュしてまとめて書き込む。
- データの一貫性を保つため、
一定の条件でキャッシュをフラッシュ
(ディスクに書き出し)する。
「例えば メールの下書きをまとめて送信する
のと同じで、 無駄な作業を減らして効率化する
のが目的よ。」
7. 同期書き込み
花子:「同期書き込み
は データを書き込んだことを OS が確認するまで処理を待つ方式
よ。」
- データの一貫性を重視する場合に重要(例: データベース)。
fsync()
を使うと、書き込みがディスクに反映されるまで待つ。
「例えば 銀行の ATM
みたいなもので、 処理が完了するまで確実にデータを記録する
のと同じね。」
太郎:「ってことは データの整合性を重視する場合
に 同期書き込みを使う
のが重要なんですね!」
まとめ
花子:「ファイルシステムの 基本概念
を理解すると、 パフォーマンスの最適化
や システムのボトルネック解決
に役立つわ。」
太郎:「ありがとうございます! ランダム I/O と シーケンシャル I/O の速度差
を fio
でテストしてみます!」
参考リンク
システムパフォーマンス関連記事の目次
システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。