ネットワーク・ファイル・システム チューニング

Introduction

複数の計算機が何らかの形で通信できるようにする、 と言うテーマはそのままそれらの計算機間でデータを転送する、 という問題を意味する。 計算機間の通信ができるようになるとすぐ出てくる問題が どのようなデータを、どのような単位で転送するのか、 という問いだった。 これに対する回答の1つが ファイル 丸ごと 転送する FTP のような方針だった。

FTP は A という計算機が持つファイルのコピー(レプリカ)を B という計算機に作り上げる能力を提供する。 しかしこれでは一旦レプリカを作った後、 しばらくしてから B が持っているレプリカが、 今もなお A が持っているファイルと同じ内容を保持しているのか、 確認する術がない。 この問題を解決するもっとも安易な手段は 毎回レプリカを取り直す というものだ。 通信速度が十分早く安くなれば、 この方法を用いても特に問題は発生しない。 たしかに問題は発生しないのだが、 今度は明示的にコピーするという煩雑さが問題になる。

ようするに ファイルにアクセスする度にコピーを持ってくる のだ。 ならばファイルに対するシステムコールに細工して、 特定のファイル名でアクセスされるファイルに対して、 遠隔地にある計算機上のファイルとして認識し、 そのコピーを持ってきて、 それにアクセスできるようにすれば良い。

このような発想の元作られたのが ネットワーク・ファイル・システム である。


ここ20年ほどでネットワークは長足の進歩を遂げた。 昔は、隣に置いてある計算機と通信するにさえ 9600bps のシリアル線を使うしかなかった。 今では半径数キロの範囲内であれば光ファイバーを用いて 10Gbps で通信することができる。 シリアル線は数百個のパケットを転送する場合でさえエラーを発生させたが、 10Gbps の光ファイバーでは10億パケットに1bit のエラーさえ生じないし、 生じることを許さない規格で作られている。

計算機の計算能力も長足の進歩を遂げている。 1Mips なかった計算能力は 3Gips を越えるものが10万円を切る時代になった。 数十kbyte あれば「大量」だったメモリも 数十Gbyte ないと「大量」とは見なされなくなってきている。

ハードディスクなどの記録メディアも進歩は急激だ。 10年前、10Mbyte の HDD は高値の花だった。 今、100Gbyte の HDD は数万円で手に入り、 サーバーは 1Raid 数十T(テラ)byte、 ノード全体では数P(ペタ)byte もの容量を提供するようになってきている。

インターネットの発展は、 旧来であれば大学の研究室内部を繋ぐのがせいぜいだったネットワークを 地球の裏側とさえ通信できるようにした。 その一方で、計算機の急激な速度向上は、 同じ箱の中にあるパーツ 同士でさえ、ネットワークを介してでないと通信できないほどの 論理的遠距離 にしてしまった。

これらの計算機環境の急激な変化に伴って、 ネットワーク・ファイル・システムも様々なものが提唱され、 実際に利用されたり、研究対象にされている。

古典的な Sun NFS は v2, v3, v4 が存在し、 Wide Area Network (WAN)での ファイル共有を可能にしている。 これらの機能をさらに押し進め、 多少の サーバー・クライアント・ネットワークの故障に 耐えられるようにした AFS, DFS, Coda などのファイルシステムもある。 これらは、使い勝手において HDD 上のファイルほどの自由さはないが、 広域なネットワークでファイルを透過的に共有する能力を提供してくれる。

一方で、 Local Area Network(LAN)の特徴である、 高速で、時間的遅れが少なく、滅多に故障しないネットワークを前提として、 ローカルな HDD 上のファイルシステムとほぼ等価な機能を提供する DAFS のようなファイルシステムも存在する。 このようなファイルシステムは、 マルチノードシステムのような 複数の隣接する計算機を結合して、 あたかも1台の計算機であるかのように利用する システムを構築する上で、必要不可欠なものである。


しかし、ネットワーク・ファイル・システムがどのように変化しようとも、 サービスを受ける Client があり、 サービスを提供する Server があって、 それらの間をネットワークが接続していて、 提供しているサービスは「ファイルシステム」だ、 という構造は変わらない。 この構造が変わらないということは、 チューニングに必要な基本的ノウハウも大差ない、 ということだ。 もちろん、最後の一絞りをかけるのに必要なノウハウは システムに強く依存するだろうが、 それでさえ基本理論というものがあるはずだ 。

このドキュメントでは、 このネットワーク・ファイル・システムをチューンする 基本的な知識に関して、 私の知っている事を書いておく。


このドキュメントは全部で4つの章からなる。

1章は 概論 ここでは実はネットワーク・ファイル・システムをチューンする場合、 対象が3つの領域に分割できること、 それぞれに対する最適化は比較的独立しており、 別々にチューンできることを示す。

2章から4章は 概論 で述べた3つの領域それぞれに関する詳細について述べる。 2章は Application → Client File Cache

3章は Client File Cache → Server File Cache

4章は Server File Cache → Storage となっている。


このドキュメントでは、 ネットワーク・ファイル・システムをこれ以降 nfs (行頭の場合に限り Nfs) とすべて小文字で記す。 Sun Microsystems がデザインし広めた Network File System は NFS とすべて大文字で記す。

目次
1. 概論
2. Application → Client File Cache
3. Client File Cache → Server File Cache
4. Server File Cache → Storage
4.1 Local File System の性能
4.1.1 Robust File System
4.1.1.1 Softupdate
4.1.1.2 Log Structured File System
4.1.1.3 Journalized File System
4.1.2 IO Performance
4.1.2.1 Connectivity
4.1.2.2 Granuality (IO の最小単位)
4.1.2.3 Connection Protocol
4.1.2.4 Media Cache
4.1.3 Functionality
4.1.3.1 Storage Snap Shot
4.1.3.2 File System Snap Shot
4.1.3.3 Storage Level Logical Volume Extension
4.1.3.4 File System Level Volume Extension
4.1.3.5 Storage Mirroring
4.1.3.6 File System Mirroring
4.1.4 What we can't get....WAFL