ファイルシステムの基本概念(コンセプト)
理解のために小咄形式でまとめました。
システムパフォーマンス関連記事の目次
登場人物
- 太郎(後輩):入社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 でテストしてみます!」
参考リンク
システムパフォーマンス関連記事の目次
システムパフォーマンス関連記事は、以下の書籍を参考に記述しています。