(57)【要約】本発明は、ストレージサーバのプロセスに対して複数のドメインを作成する方法を提供する。該プロセスはストレージサーバ内の複数のプロセッサ上で実行可能である。ドメインは第１のドメインを含み、該ドメインは第１のドメイン内の複数のプロセスを並行して実行し、データアクセス要求にサービスを提供することができる複数のスレッドを含む。ストレージサーバにより管理されるデータセットは論理的に複数のサブセットに分割され、データセットに対するデータアクセス要求を処理するために、サブセットはそれぞれ第１のドメイン内のスレッドのうちの１つに正確に割り当てられる。
2009512948.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサ上で実行可能なプロセスに対する複数のドメインを作成するステップであって、前記複数のドメインは複数のスレッドを含む第１のドメインを含み、前記複数のスレッドは前記第１のドメイン内の複数のプロセスを並行して実行し、要求にサービスを提供することができるステップと、
前記プロセッサにより管理されるデータセットを、論理的に複数のサブセットに分割するステップと、
前記データセットに関する要求を処理するために、前記データデットの前記サブセットのそれぞれを、前記第１のドメイン内の前記複数のスレッドのうちの１つに正確に割り当てるステップと
を含むことを特徴とする方法。
【請求項２】
前記第１のドメイン内の前記スレッドのそれぞれは、前記第１のドメイン内の任意のプロセスを実行可能であり、前記第１のドメイン内の１つまたは複数の他のスレッドも前記プロセスを実行することを特徴とする、請求項１に記載の方法。
【請求項３】
前記複数のドメインを作成するステップは、
前記第１のドメイン内のプロセス以外の処理装置のプロセスを含む第２のドメインを作成し、前記第１のドメイン内のプロセスで、前記第２のドメイン内の任意のプロセスが実行中に実行してもよいプロセスはなく、前記第２のドメイン内のプロセスで、前記第１のドメイン内の任意のプロセスが実行中に実行してもよいプロセスはないようにするステップ
をさらに含むことを特徴とする、請求項１に記載の方法。
【請求項４】
前記第２のドメイン内で、一回に１つのプロセスのみが実行可能であることを特徴とする、請求項３に記載の方法。
【請求項５】
前記複数のプロセッサは、ストレージサーバ内部で実装されることを特徴とする、請求項３に記載の方法。
【請求項６】
前記第１のドメインおよび前記第２のドメインは、それぞれ前記ストレージサーバのファイルシステムプロセスを含むことを特徴とする、請求項５に記載の方法。
【請求項７】
前記第２のドメイン内で、一回に１つのプロセスのみが実行可能であることを特徴とする、請求項６に記載の方法。
【請求項８】
前記データセットはファイルであることを特徴とする、請求項１に記載の方法。
【請求項９】
前記第１のドメインおよび前記第２のドメイン内のプロセス以外のプロセスに対する第３のドメインを作成し、前記第３のドメイン内のプロセスで、前記第１および前記第２のドメイン内の任意のプロセスが実行中に実行してもよいプロセスはなく、前記第１および前記第２のドメイン内のプロセスで、前記第３のドメイン内の任意のプロセスが実行中に実行してもよいプロセスはないようにするステップ
をさらに含むことを特徴とする、請求項１に記載の方法。
【請求項１０】
前記割り当ては、サブセットを前記スレッドに割り当てる所定のスキームに従って行うことを特徴とする、請求項１に記載の方法。
【請求項１１】
前記割り当ては、ランタイムの間に評価した基準に基づいて動的に判断される割り当てスキームに従って行うことを特徴とする、請求項１に記載の方法。
【請求項１２】
前記データセットの前記サブセットのうちの１つを異なるスレッドに再び割り当てるステップをさらに含むことを特徴とする、請求項１に記載の方法。
【請求項１３】
要求を受信して、前記データセットに関する動作を実行するステップと、
前記動作が関連する前記データセットの第１のサブセットを識別するステップと、
前記データセットの前記第１のサブセットに対応する前記第１のドメイン内の第１のスレッドに前記動作を割り当てるステップと、
前記動作はまた前記データセットの第２のサブセットにも関連することを判断するステップと、
前記動作の実行を開始した後、前記動作が前記第２のサブセットにも関連するとの前記判断に応答して、前記第２のサブセットに対応する前記第１のドメイン内の第２のスレッドに前記動作を転送するステップと
をさらに含むことを特徴とする、請求項１に記載の方法。
【請求項１４】
前記動作は、読み出しディレクトリ動作であることを特徴とする、請求項１３に記載の方法。
【請求項１５】
クライアントシステムにより開始された第１の読み出し要求を受信するステップと、
前記データセットの第１のサブセットを前記第１の読み出し要求のターゲットとして識別するステップと、
前記第１の読み出し要求に応答して、前記データセットの前記第１のサブセットに対応する前記第１のドメイン内の第１のスレッドに読み出し動作を割り当てるステップと、
前記第１の読み出し要求に応答して、先読み動作を実行するステップと
をさらに含み、前記先読み動作を実行するステップは、
前記第１の読み出し要求に基づいて、前記データセットの第２のサブセットを将来期待される読み出し要求のターゲットとして自動的に識別すること、および
前記データセットの前記第２のサブセットに対応する前記第１のドメイン内の第２のスレッドに前記先読み動作を割り当てることにより達成される
ことを特徴とする、請求項１に記載の方法。
【請求項１６】
ストレージサブシステム内に格納されたデータに対するアクセスをクライアントのセットに提供するストレージサーバを動作する方法であって、
前記ストレージサーバ内の複数のプロセッサ上で実行可能なファイルシステムプロセスに対する第１のドメインを作成するステップであって、前記第１のドメインは前記クライアントからの読み出しおよび書き込み要求にサービスを提供するファイルシステムプロセスを含み、前記第１のドメインは同時に実行可能な複数のスレッドに分割されるステップと、
前記ストレージサーバにより管理されるファイルを複数のストライプに論理的に分割するステップと、
前記ファイルに対する読み出しおよび書き込み要求の処理のために、前記ファイルの前記ストライプのそれぞれを、前記第１のドメインの前記複数のスレッドのうちの１つに正確に割り当てるステップと、
前記ストレージサーバ内の複数のプロセッサ上で実行可能で、前記第１のドメイン内のプロセスを除くファイルシステムプロセスに対する第２のドメインを作成するステップとを含み、この場合、前記第２のドメイン内で一回に１つのプロセスのみが実行可能であり、前記第１のドメイン内のプロセスで、前記第２のドメイン内の任意のプロセスが実行中に実行してもよいプロセスはなく、前記第２のドメイン内のプロセスで、前記第１のドメイン内の任意のプロセスが実行中に実行してもよいプロセスはない
ことを特徴とする前記方法。
【請求項１７】
前記第１のドメイン内の前記スレッドのそれぞれは、前記第１のドメイン内の任意のプロセスを実行可能であり、前記第１のドメイン内の１つまたは複数の他のスレッドも個別のデータ上で前記プロセスを実行することを特徴とする、請求項１６に記載の方法。
【請求項１８】
前記割り当ては、ストライプを前記スレッドに割り当てる所定のスキームに従って行うことを特徴とする、請求項１６に記載の方法。
【請求項１９】
前記割り当ては、ランタイムの間に評価した基準に基づいて動的に判断される割り当てスキームに従って行うことを特徴とする、請求項１６に記載の方法。
【請求項２０】
前記データセットの前記ストライプのうちの１つを異なるスレッドに再び割り当てるステップをさらに含むことを特徴とする、請求項１６に記載の方法。
【請求項２１】
前記ストレージサブシステム内に格納された複数の異なるファイルのそれぞれに対して、前記ファイルの分割と前記各ストライプの割り当てを論理的に行うステップをさらに含むことを特徴とする、請求項１６に記載の方法。
【請求項２２】
ファイルシステムプロセス以外の前記ストレージサーバのプロセスに対する第３のドメインを作成し、前記第３のドメイン内のプロセスで、前記第１および前記第２のドメイン内の任意のプロセスが実行中に実行してもよいプロセスはなく、前記第１および前記第２のドメイン内のプロセスで、前記第３のドメイン内の任意のプロセスが実行中に実行してもよいプロセスはないようにするステップ
をさらに含むことを特徴とする、請求項１６に記載の方法。
【請求項２３】
ストレージサーバであって、
複数のプロセッサと、
クライアントのセットと通信するための通信インタフェースと、
前記クライアントの代わりに、前記ストレージサーバにより格納されたデータを含むストレージサブシステムと通信するためのストレージインタフェースと、
前記ストレージサーバに対するロジックであって、前記ストレージサーバに、前記クライアントからのデータアクセス要求にサービスを提供するためのプロセスに対する第１のドメインを作成させ、前記第１のドメインを個別のデータ上で同時に実行することができる複数のスレッドに分割させ、
前記第１のドメイン内のプロセス以外の前記ストレージサーバのプロセスに対する第２のプロセスを作成させ、前記第１のドメイン内のプロセスで、前記第２のドメイン内の任意のプロセスが実行中に実行してもよいプロセスはなく、前記第２のドメイン内のプロセスで、前記第１のドメイン内の任意のプロセスが実行中に実行してもよいプロセスはないようにするロジックと
を備えることを特徴とするストレージサーバ。
【請求項２４】
前記第１のドメイン内の前記スレッドのそれぞれは、前記第１のドメイン内の任意のプロセスを実行可能であり、前記第１のドメイン内の１つまたは複数の他のスレッドも前記プロセスを実行することを特徴とする、請求項２３に記載のストレージサーバ。
【請求項２５】
前記ストレージサーバに対するロジックであって、前記ストレージサーバに、
前記ストレージサーバにより格納されている複数のデータセットのそれぞれに関して前記データセットを複数のサブセットに論理的に分割させ、
前記データセットに対する読み出しおよび書き込み要求を処理するために、前記サブセットのそれぞれを前記第１のドメインの前記複数のスレッドのうちの１つに正確に割り当てさせるロジックをさらに備えることを特徴とする、請求項２３に記載のストレージサーバ。
【請求項２６】
前記第２のドメイン内で、一回に１つのプロセスのみが実行可能であることを特徴とする、請求項２５に記載のストレージサーバ。
【請求項２７】
前記サブセットの割り当ては、サブセットを前記スレッドに割り当てる所定のスキームに従って行うことを特徴とする、請求項２５に記載のストレージサーバ。
【請求項２８】
前記サブセットの割り当ては、ランタイムの間に評価した基準に基づいて動的に判断される割り当てスキームに従って行うことを特徴とする、請求項２５に記載のストレージサーバ。
【請求項２９】
実行時に、前記ストレージサーバに対して、前記データセットの前記サブセットのうちの１つを異なるスレッドに再び割り当てさせるロジックをさらに備えることを特徴とする、請求項２５に記載のストレージサーバ。
【請求項３０】
前記複数のデータセットは、複数のファイルを含むことを特徴とする、請求項２５に記載のストレージサーバ。
【請求項３１】
前記第１および前記第２のドメイン内のプロセスは、ファイルシステムプロセスであることを特徴とする、請求項２５に記載のストレージサーバ。
【請求項３２】
前記ストレージサーバに対して、ファイルシステムプロセス以外の前記ストレージサーバのプロセスに対する第３のドメインを作成させ、前記第３のドメイン内のプロセスで、前記第１および前記第２のドメイン内の任意のプロセスが実行中に実行してもよいプロセスはなく、前記第１および前記第２のドメイン内のプロセスで、前記第３のドメイン内の任意のプロセスが実行中に実行してもよいプロセスはないようにするロジックをさらに備えることを特徴とする、請求項３１に記載のストレージサーバ。
【請求項３３】
前記ストレージサーバに対するロジックであって、前記ストレージサーバに、
前記ストレージサーバが格納しているデータセットに関する動作を実行する要求を受信させ、
前記動作が関連する前記データセットの第１のサブセットを識別させ、
前記データセットの第１のサブセットに対応する前記第１のドメイン内の第１のスレッドに前記動作を割り当てさせ、
前記動作はまた前記データセットの第２のサブセットにも関連することを判断させ、
前記動作の実行を開始した後、前記動作が前記第２のサブセットにも関連するとの前記判断に応答して、前記第２のサブセットに対応する前記第１のドメイン内の第２のスレッドに前記動作を転送させる
ロジックをさらに備えることを特徴とする、請求項２３に記載のストレージサーバ。
【請求項３４】
前記動作は、読み出しディレクトリ動作であることを特徴とする、請求項３３に記載のストレージサーバ。
【請求項３５】
前記ストレージサーバに対するロジックであって、前記ストレージサーバに、
前記ストレージサーバのクライアントにより開始された第１の読み出し要求を受信させ、
前記データセットの第１のサブセットを前記第１の読み出し要求のターゲットとして識別させ、
前記第１の読み出し要求に応答して、前記データセットの前記第１のサブセットに対応する前記第１のドメイン内の第１のスレッドに読み出し動作を割り当てさせ、
前記読み出し要求に応答して、先読み動作を実行させるロジックをさらに備え、
前記先読み動作を実行させるロジックは、
前記第１の読み出し要求に基づいて、前記データセットの第２のサブセットを将来期待される読み出し要求のターゲットとして自動的に識別すること、および前記データセットの前記第２のサブセットに対応する前記第１のドメイン内の第２のスレッドに前記先読み動作を割り当てることにより達成される
ことを特徴とする、請求項２３に記載のストレージサーバ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の少なくとも一実施形態は、ネットワークストレージシステムに関する。より詳細には、ストレージサーバにおけるスループットを増加させる方法および装置に関する。
【背景技術】
【０００２】
マルチプロセッサコンピューティングシステムは、さまざまなアプリケーションにおいてますます一般的になりつつある。マルチプロセッサシステムは、複数のプロセッサを含むものであり、プロセッサは、物理プロセッサ、論理プロセッサ、またはその組み合わせであることができる。単一の物理プロセッサは、図１に示すように、複数の論理プロセッサを実装することができる。図１において、１つの物理プロセッサ６は２つの論理プロセッサ７を含む。そのような実装においては、論理プロセッサは一般に何らかのプライベート状態を有するが、その状態の一部は共有される。以降、本明細書では、「プロセッサ」の用語は、他の条件が付かない限り、物理プロセッサまたは論理プロセッサのいずれかを意味するものとする。
【０００３】
マルチプロセッサ環境において、確実に命令およびデータが実行に対して安全であるように、オペレーティングシステムにより実装される種々のプロセスを、機能性に従って多数の相互排他ドメインに編成することができる。この場合、「ドメイン」とはプロセスのグルーピングのことである。処理装置により実行可能な各プロセスは正確に１つのドメインに割り当てられる。ドメインは機能性に従って定義されるので、異なるドメインの２つのプロセスが同一のデータ上で同時に動作することはできない。さらに、（本質的にマルチプロセッサセーフの動作に対して若干の例外はあるものの）、各ドメインにおいて１回に１つのプロセスのみが実行可能である。このようにドメインを定義し、使用する技術の詳細は、「スケジューリングドメインの移動を利用した対照型マルチプロセッサの同期化」（「Ｒａｊａｎ」）という名称のもとで、２００１年４月５日付けでＶ．Ｒａｊａｎ等により出願された同時係属米国特許出願第０９／８２８，２７１号（特許文献１）、および「スケジューリングドメインの整合性の自動検証」（「Ｐｅａｋ」）という名称のもとで、２００１年４月５日付けでＣ．Ｐｅａｋ等により出願された米国特許出願第０９／８２８，２８４号（特許文献２）に記載されている。これらは本明細書内に参照として組み込まれる。
【０００４】
上述の技術は、ストレージサーバ内に実装することができる。このストレージサーバとして、たとえば、Ｎｅｔｗｏｒｋ  Ａｐｐｌｉａｎｃｅ（ＮｅｔＡｐｐ（登録商標））社（カリフォルニア州サニーベール）製「Ｆｉｌｅｒ」の種々のモデルの１つがある。ドメインは、ストレージサーバのクリティカルパスのパイプラインに従って編成することができる。たとえば、ストレージサーバがネットワークを介してクライアントからデータアクセス要求（読み出しまたは書き込み）を受信すると、ストレージサーバのネットワークソフトウェア層が適切なメッセージをストレージサーバのファイルシステムに送信する。このファイルシステムは、このメッセージを処理して、対応するデータが格納されている場所を判断し、その後、対応するメッセージをストレージサーバのストレージソフトウェア層（たとえば、ＲＡＩＤ層）に転送する。要求を処理するこれらの段階は、それぞれパイプラインの異なるステージにより達成することができる。つまり、個別のドメインをステージ毎に作成することができる。たとえば、ストレージサーバの全てのネットワーク特有のプロセスに対するドメイン、ストレージサーバの全てのファイルシステム関連のプロセスに対するドメイン、ストレージサーバの全てのストレージ特有のプロセスに対するドメインなどが挙げられる。
【特許文献１】米国特許出願第０９／８２８，２７１号
【特許文献２】米国特許出願第０９／８２８，２８４号
【発明の開示】
【発明が解決しようとする課題】
【０００５】
一部のストレージサーバにおいては、異なるパイプラインステージ（したがって、対応するドメイン）はプロセッサ利用の程度が異なる傾向にあることがわかっている。たとえば、ネットワークドメインおよびストレージドメインのプロセッサ利用率（典型的には２０〜５０％）よりも、ファイルシステム関連のドメインははるかに高いプロセッサ利用率（一部の実装において１００％近い）を有する傾向がある。したがって、ファイルシステムドメインは、ストレージサーバのクリティカルパス上の障害になり、ストレージサーバのスループットを制限してしまう傾向がある。
【課題を解決するための手段】
【０００６】
本発明は、処理装置における複数のプロセッサ上で実行可能な複数のドメインをプロセス毎に作成する方法を含む。複数のドメインは、複数のスレッドを含む第１のドメインを含む。複数のスレッドは、第１のドメインにおける複数のプロセスを並行して実行し、要求にサービスを提供することができる。処理装置により管理されるデータセットは、論理的に複数のサブセットに分割され、データセットの各サブセットは、データセットに関する要求を処理するために、第１のドメインの複数のスレッドのうちの１つに正確に割り当てられる。
【０００７】
本発明は、さらに該方法を実行する装置およびシステムを含む。特定の実施形態において、該方法をデータストレージサーバ内に実装する。
【０００８】
本発明の他の態様は、添付図面および以下の詳述から明らかであろう。
【発明を実施するための最良の形態】
【０００９】
本発明の１つまたは複数の実施形態を一例として説明するが、添付図面の態様に限定するものではない。同一の符号は同一の要素を示すものである。
【００１０】
ストレージサーバ内におけるスループットを増加させる方法および装置を説明する。本明細書内の「ある実施形態」「一実施形態」などの表現は、説明する特定の機能、構造または特徴が本発明の少なくとも１つの実施形態に含まれることを意味するものである。本明細書内で説明する段階は必ずしも全てが同一の実施形態について言えるものとは限らない。
【００１１】
上述の問題を解決するために、読み出しおよび書き込みなどの特定のファイルシステムの動作を並列化することが望ましい。しかし、このことは、潜在的に競合する２つ以上のプロセスが同時に同一のデータ上で動作しないように行わなければならない。さらに以下で詳述するように、本発明の複数の実施形態はこれを達成する。
【００１２】
本発明の特定の実施形態では、複数の相互排他ドメインを作成して、ストレージサーバのプロセスをグループ化し、異なるドメインの２つのプロセスが同時に同一のデータ上で動作しないようにする。ほとんどのドメインに関して、以下の例外はあるものの、一回に１つのプロセスのみが所与のドメイン内で実行可能である。
【００１３】
ドメインは、ファイルシステム関連プロセスの２つのドメインを含む。これら２つのドメインは、相互に排他的である。すなわちこれら２つのドメインのうちの１つにあるプロセスで、他方のドメイン内のプロセスが実行している間に実行してもよいプロセスはない。その逆もまたしかりである。
【００１４】
第１のファイルシステム関連のドメイン、本明細書内では「ＦＳ−Ｅｘｅｍｐｔ」は、並行してＦＳ−Ｅｘｅｍｐｔドメインの複数のプロセスを実行して、データアクセス要求（たとえば、読み出しおよび書き込み）および一部の他の動作にサービスを提供することができる複数のスレッドを含む。潜在的に競合する動作が同時に同一のデータ上で動作することを避けるために、ストレージサーバにより格納されている各ファイル（またはデータコンテナの他のタイプ）は、論理的に複数の「ストライプ」と呼ばれるシーケンシャルなサブセットに分割される。各ストライプは、該データセットに対する動作を処理するために、ＦＳ−Ｅｘｅｍｐｔドメイン内のスレッドのうちの１つに正確に割り当てられる。「ストライプ」は、ファイル（またはＬＵＮ、または他の型のデータコンテナ）などのデータセット内の論理的にシーケンシャルなデータオフセットのセットである。あるストライプが割り当てられた特定のスレッドのみが、ＦＳ−Ｅｘｅｍｐｔドメイン内の該ストライプ上で動作することができる。所与のストライプがＦＳ−Ｅｘｅｍｐｔドメイン内で、一回で２つ以上のスレッドに割り当てられることはない。
【００１５】
他のファイルシステム関連のドメイン、本明細書内では「ＦＳ−Ｍａｉｎ」は、ＦＳ−Ｅｘｅｍｐｔドメイン内のファイルシステム関連のプロセス以外の全てのファイルシステム関連のプロセスを含み、ストレージサーバの一部の他のプロセスをさらに含む。ＦＳ−Ｅｘｅｍｐｔドメインとは違って、ＦＳ−Ｍａｉｎドメインは複数のスレッドに並列化されないので、ＦＳ−Ｍａｉｎドメイン内で一回に１つのプロセスのみが実行可能である。場合によっては、たとえば、実行のためのリソースをほとんど必要としない場合に、１つの動作を最初にＦＳ−Ｅｘｅｍｐｔドメインに割り当て、その次にＦＳ−Ｍａｉｎドメインに再び割り当ててもよい。
【００１６】
本明細書で説明する技術により、ファイルシステムコードの大部分をマルチプロセッサセーフにする必要もなく、また頻繁に低レベルの同期化を行う必要もなく、ファイルシステム動作の選択セットを効率的に並行して実行させることができる。この技術は、以下のような方法で、プロセッサ全体にわたる要求を効率的にストライプする。つまり、（ａ）スプレッドファイル操作でプロセッサ全体にわたる負荷を計算する、（ｂ）データ構造を限定的に共有すること、バッファおよび補助データ構造を明示的にロックする必要性を低減または削減することにより暗黙の同期化を取り入れる、（ｃ）たとえば、不均一メモリアクセス（ＮＵＭＡ）または従来のメモリバスキャッシュメモリ階層を使用して、マルチプロセッサシステムにおけるメモリアフィニティおよびプロセッサアフィニティを一層容易にする。
【００１７】
図２は、本技術を実装できるネットワーク環境の一例を示す。図２の例はネットワーク化ストレージシステムであるが、本発明は種々の他のタイプの環境のいずれかでも実装可能であり、たとえば、必ずしもストレージシステムにおける環境でなくてもよいことは理解されるであろう。図２のシステムは、相互接続３を介して大容量記憶装置４のセット、およびクライアント１のセットにローカルに結合されたストレージサーバ２を含む。本発明による、効率およびスループットを増加させる技術は、ストレージサーバ２内に実装することができる。
【００１８】
ストレージサーバ２は、クライアント１から種々の読み出しおよび書き込み要求を受信し、大容量記憶装置４にアクセスして、これらの要求にサービスを提供する。クライアント１のそれぞれは、たとえば、従来のパーソナルコンピュータ（ＰＣ）、ワークステーションなどであってよい。大容量記憶装置４は、たとえば、従来の磁気テープまたは磁気ディスク、ＣＤ−ＲＯＭまたはＤＶＤベースの記憶装置などの光ディスク、磁気光学（ＭＯ）記憶装置、または大量のデータを格納するのに適した不揮発性記憶装置の任意のタイプ、またはそれらの組み合わせであってよい。大容量記憶装置４は、１または複数のボリュームの独立ディスク冗長アレイ（ＲＡＩＤ）に編成してもよい。
【００１９】
ストレージサーバ２は、たとえば、ネットワーク接続ストレージ（ＮＡＳ）環境で使用できるようなファイルサーバまたは「ファイラ（Ｆｉｌｅｒ）」であってよい。あるいは、ストレージサーバは、ストレージエリアネットワーク（ＳＡＮ）環境などで、クライアントに格納データに対するブロックレベルのアクセスを提供してもよい。または、ストレージサーバ２は、両方のモードで動作可能であってよい。ストレージサーバ２は、種々の異なるプロトコルのうち、１つまたは複数を実装することができる。たとえば、そのプロトコルとしては、共通インターネットファイルシステム（ＣＩＦＳ）、ネットワークファイルシステム（ＮＦＳ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、簡易ネットワーク管理プロトコル（ＳＮＭＰ）、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）などが挙げられるが、これらのプロトコルを必要に応じて、選択的に使用することができる。
【００２０】
ＮＡＳ実装において、相互接続３は、基本的にローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）またはインターネットなどのコンピュータネットワークの任意のタイプであり、インターネットプロトコル（ＩＰ）を実装してもよい。ＳＡＮ実装において、相互接続３は、たとえば、ファイバチャネルプロトコル（ＦＣＰ）を実装するファイバチャネルスイッチングファブリックであってよい。
【００２１】
図３は、本発明の実施形態による、図２のストレージサーバ２のハイレベルブロック図である。本発明には特に重要ではない一部の標準的で既知のコンポーネントについては、図示しない。例示の実施形態におけるストレージサーバ２は、マルチプロセッサシステムであって、内部にバスシステム３３に結合された２つの物理プロセッサ３１を含む。物理プロセッサ３１のそれぞれは、２つの論理プロセッサ３４を実装する。一方の物理プロセッサ３１は、論理プロセッサＡおよびＢを含み、他方の物理プロセッサは、論理プロセッサＣおよびＤを含む。他の実施形態において、ストレージサーバ２は、２つ以外の数の物理プロセッサを含んでもよく、および／または各物理プロセッサは２つ以外の数の論理プロセッサを含んでもよいことに留意されたい。
【００２２】
バスシステム３３は、適切なブリッジ、アダプタおよび／またはコントローラに接続された、１つまたは複数の個別の物理バスおよび／または２地点間接続を表す抽象化システムである。したがって、バスシステム３３は、たとえば、システムバス、周辺コンポーネント相互接続（ＰＣＩ）バス、ハイパートランスポート（ＨｙｐｅｒＴｒａｎｓｐｏｒｔ）または業界標準アーキテクチャ（ＩＳＡ）バス、小型コンピュータ用周辺機器インタフェース（ＳＣＳＩ）バス、ユニバーサルシリアルバス（ＵＳＢ），または米国電気電子技術者協会（ＩＥＥＥ）標準１３９４バス（「ファイアワイヤ（Ｆｉｒｅｗｉｒｅ）」と呼ばれることがある）を含んでもよい。
【００２３】
物理プロセッサ３１は、ストレージサーバ２の中央処理ユニット（ＣＰＵ）であり、ストレージサーバ２の全体の動作を制御する。特定の実施形態において、物理プロセッサ３１は、メモリ３２に格納されたソフトウェアを実行することで、制御を行う。物理プロセッサ３１は、１つまたは複数のプログラム可能な汎用または特殊目的マイクロプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、プログラム可能なコントローラ、アプリケーション特定集積回路（ＡＳＩＣ）、プログラム可能な論理デバイス（ＰＬＤ）などであってよく、またはそれら装置の組み合わせを含んでもよい。
【００２４】
ストレージサーバ２は、さらにバスシステム３３に結合したメモリ３２を含む。メモリ３２は、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、フラッシュメモリ、またはこれらの組み合わせの任意の形態を示す。メモリ３２は、特にストレージサーバ２のオペレーティングシステム３５を格納する。オペレーティングシステム３５には、本明細書で説明する技術を実装することができる。
【００２５】
また、バスシステム３３を介してプロセッサ３１に接続されるのは、大容量記憶装置３６、ストレージアダプタ３７、およびネットワークアダプタ３８である。大容量記憶装置３６は、１つまたは複数のディスクなどの不揮発性の形で大量のデータを格納する、任意の従来の媒体であってよく、または任意の従来の媒体を含んでもよい。ストレージアダプタ３７は、ストレージサーバ２が外部の大容量記憶装置４にアクセスすることを可能にするもので、たとえば、ファイバチャネルアダプタまたはＳＣＳＩアダプタであってよい。ネットワークアダプタ３８は、ストレージサーバ２にネットワークを介してクライアント１などの遠隔装置と通信する能力を提供するもので、たとえば、イーサネット（登録商標）アダプタまたはファイバチャネルアダプタであってよい。
【００２６】
メモリ３２はソフトウェアの命令および／またはデータ３５を格納し、大容量記憶装置３６はソフトウェアの命令および／またはデータ３９を格納するもので、本明細書で説明する技術を実装するのに使用する命令および／またはデータを含んでもよい。これらの命令および／データは、ストレージサーバ２のオペレーティングシステム３５の一部として実装してもよい。
【００２７】
図４に示すように、ストレージサーバ２のオペレーティングシステム３５は複数のモジュールまたは層を含む。この層にファイルシステム４１を含む。ファイルシステム４１は、アプリケーションレベルのプログラマチックエンティティである。このプログラマチックエンティティは、ファイル、ディレクトリおよび／またはストレージサーバにより格納および／または管理される他のデータコンテナに、構造（たとえば階層構造）を課し、ストレージサーバのクライアントからの読み出し／書き込み要求にサービスを提供する。該ファイルシステムの例として、Ｗｒｉｔｅ  Ａｎｙｗｈｅｒｅ  Ｆｉｌｅ  Ｌａｙｏｕｔ（ＷＡＦＬ（登録商標）ファイルシステムがあり、これは、ＮｅｔＡｐｐ（登録商標）社製ファイラで使用されるＤａｔａ  ＯＮＴＡＰ（商標）オペレーティングシステムの一部である。
【００２８】
オペレーティングシステム３５はさらに、論理的にファイルシステム４１の下に、ネットワーク層４２および関連ネットワーク媒体アクセス層４３を含み、ストレージサーバがネットワークを介して（たとえば、クライアント１と）通信できるようにする。ネットワーク層４２は、ＮＦＳ、ＣＩＦＳ、ＨＴＴＰ、ＳＮＭＰおよびＴＣＰ／ＩＰなどの種々のプロトコルを実装する。ネットワーク媒体アクセス層４３は、イーサネット（登録商標）またはファイバチャネルなどのネットワーク３を介して通信するための１つまたは複数のプロトコルを実装する、１つまたは複数のドライバを含む。さらに、オペレーティングシステム３５は、論理的にファイルシステム４１の下に、ＲＡＩＤ層４４および関連するストレージドライバ層４５を含み、ストレージサーバ２が外部の大容量記憶装置４と通信できるようにする。ＲＡＩＤ層４４は、ＲＡＩＤ−４またはＲＡＩＤ−５などのＲＡＩＤプロトコルを実装し、ストレージドライバ層４５は、ファイバチャネルまたはＳＣＳＩなどの低レベルの記憶装置アクセスプロトコルを実装する。
【００２９】
オペレーティングシステム３５は、さらにユーザインタフェース層４９を含む。ユーザインタフェース層４９は、たとえば、ストレージサーバ２に対する管理アクセスの目的で、グラフィカルユーザインタフェース（ＧＵＩ）および／またはコマンドラインインタフェース（ＣＬＩ）を実装する。
【００３０】
ストレージサーバ２のマルチプロセッサ環境において、確実に命令およびデータが実行に対して安全であるように、オペレーティングシステム３５は、いくつかの他のシステムに見られる細粒度の対照型マルチプロセッシングではなく、典型的に明示的ロック機構により実装された、極めて粗粒度の対照型マルチプロセッシング（ＣＳＭＰ）を実装することができる。したがって、オペレーティングシステム３５は、図５に示すように、機能性に従って多数の相互排他ドメイン５１に編成することができる。この場合、「ドメイン」とはプロセスのグルーピングのことである。ストレージサーバ２により実行可能な各プロセスは１つの特定のドメイン５１に割り当てられる。ドメイン５１は機能性に従って定義されるので、異なるドメインの２つのプロセスが同一のデータ上で同時に動作することはできない。さらに、ここで説明する若干の例外はあるものの、各ドメイン５１において１回に１つのプロセスのみが実行可能である。
【００３１】
図５に示すように、ストレージサーバ２内に以下のドメイン５１を実装することができる。それは、Ｎｅｔｗｏｒｋ、Ｆｉｌｅ  Ｓｙｓｔｅｍ、ＲＡＩＤ、Ｓｔｏｒａｇｅ、Ｉｄｌｅ、Ｅｘｅｍｐｔのドメインである。Ｎｅｔｗｏｒｋ、Ｆｉｌｅ  Ｓｙｓｔｅｍ、ＲＡＩＤ、Ｓｔｏｒａｇｅのドメインは、クライアント要求を処理するためにパイプラインのクリティカルパスを形成する。Ｎｅｔｗｏｒｋドメインは、ストレージサーバ２の全てのネットワーク固有のプロセスを含む。Ｓｔｏｒａｇｅドメインは、ストレージサーバ２の全てのストレージ固有のプロセスを含む。ＲＡＩＤドメインは、ストレージサーバ２の全てのＲＡＩＤ固有のプロセスを含む。Ｆｉｌｅ  Ｓｙｓｔｅｍドメインは、ファイルシステムプロセスと、機能性から他のドメインに属さない全ての他のプロセスとを含む。オペレーティングシステム３５内のスケジューラアルゴリズムにより、各ドメイン５１において一回に１つのプロセスのみが実行可能である。ただし、２つの例外はある。ＩｄｌｅドメインおよびＥｘｅｍｐｔドメインである。Ｉｄｌｅドメインは、内部でプロセッサがアイドルループを実行するドメインである。複数のプロセッサからのＩｄｌｅスレッドは、Ｉｄｌｅドメイン内で同時に実行してもよい。Ｅｘｅｍｐｔドメインは、一部のプロセスを含む。このプロセスは、（たとえば、ＲＡＩＤのＸＯＲ計算、圧縮／解凍など）入力データ上で動作するのみであるから、本質的にマルチプロセッサセーフである。すなわち、状態のグローバルシェアリングがないのである。
【００３２】
本発明の実施形態に従って、本技術を図６に示すように変更して、ストレージサーバ２内の効率およびスループットを向上させることができる。具体的には、図５のＦｉｌｅ  Ｓｙｓｔｅｍドメインは、ＦＳ−ＭａｉｎおよびＦＳ−Ｅｘｅｍｐｔと呼ばれる２つのドメインの組み合わせに置き換えられる。したがって、ファイルシステム関連プロセス６１を含む、ＦＳ−ＥｘｅｍｐｔおよびＦＳ−Ｍａｉｎの２つのドメインがある。これら２つのドメインは、相互に排他的である、つまりＦＳ−Ｍａｉｎ内の任意のプロセスが実行中に、ＦＳ−Ｅｘｅｍｐｔ内のプロセスで実行できるものはない。その逆もまたしかりである。
【００３３】
ＦＳ−Ｅｘｅｍｐｔドメインは、ＦＳ−Ｅｘｅｍｐｔドメインの複数のプロセスを並行して実行して、データアクセス要求（たとえば、読み出しおよび書き込み）および一部の他の動作にサービスを提供することができる複数のスレッド６２を含む。この点においては、ＦＳ−Ｅｘｅｍｐｔドメインは上述のＥｘｅｍｐｔドメインと同様であるが、Ｅｘｅｍｐｔドメインとは違って、ＦＳ−ＥｘｅｍｐｔドメインはＦＳ−Ｍａｉｎドメインと相互に排他的である。
【００３４】
潜在的に競合する動作がＦＳ−Ｅｘｅｍｐｔドメイン内で同時に同一のデータ上で動作することを避けるために、ストレージサーバにより管理および格納されている各ファイル（またはデータコンテナの他のタイプ）は、論理的に複数の「ストライプ」と呼ばれるサブセットに分割され、各ストライプは、該データセットに関する要求を処理するために、ＦＳ−Ｅｘｅｍｐｔドメイン内のスレッド６２のうちの１つに正確に割り当られる。所与のストライプに対して、ＦＳ−Ｅｘｅｍｐｔの各動作が、同一のＦＳ−Ｅｘｅｍｐｔスレッドにより処理されることになる。ＦＳ−Ｅｘｅｍｐｔドメイン内のスレッド６２は、それぞれオペレーティングシステム３５内で一意に識別されるが、また別の面では置き換え可能である。したがって、ＦＳ−Ｅｘｅｍｐｔドメインは本質的にスレッドプールである。あるストライプが割り当てられたスレッドは、そのスレッドのみがＦＳ−Ｅｘｅｍｐｔドメイン内の該ストライプ上で動作可能である。本発明の特定の実施形態において、ＦＳ−Ｅｘｅｍｐｔスレッド６２に対するストライプの割り当ては、動的に変更することができる。しかし、所与のストライプは、ＦＳ−Ｅｘｅｍｐｔドメイン内で一回に２つ以上のスレッドに割り当てられることはない。したがって、スレッド６２はＦＳ−Ｅｘｅｍｐｔドメイン内で並行して動作できるが、競合する動作を並行して行うことができる２つのスレッド６２はない。
【００３５】
図６に示すように、ＦＳ−Ｍａｉｎドメインは、ＦＳ−Ｅｘｅｍｐｔドメイン内のファイルシステム関連プロセス以外の全てのファイルシステム関連プロセスを含み、また遠隔シェルプロセス６３、ファイルシステムに対する管理アクセスのプロセス６４、種々のコマンドを実装するプロセス６５および他のプロセス６６などのストレージサーバの一部の他のプロセスを含む。ＦＳ−Ｅｘｅｍｐｔドメインとは違って、ＦＳ−Ｍａｉｎドメインは、複数のスレッドに並列化することはできないので、ＦＳ−Ｍａｉｎドメイン内で一回に１つのスレッドのみが実行可能である。
【００３６】
必要であれば、ＦＳ−Ｅｘｅｍｐｔドメイン内の任意のスレッドは、ロックの取得やシリアル化などにより、明示的に動作を同期化することができる。場合によっては、たとえば、処理がリソース利用の観点からあまり「高価」でないと示される場合に、１つの動作を最初にＦＳ−Ｅｘｅｍｐｔドメインに割り当て、その次にＦＳ−Ｍａｉｎドメインに再び割り当ててもよい。たとえば、潜在的に他のスレッドと競合するという点で疑わしいと思われる動作は、その影響を受けたデータがストレージサーバの内部メモリ内で実質的に変更される前に、いつでもＦＳ−Ｍａｉｎに送信することができる。
【００３７】
ＦＳ−ＥｘｅｍｐｔドメインとＦＳ−Ｍａｉｎドメインがどのように動作するのかをさらに説明するために、図７では、本発明の実施形態による、要求を処理するときに、オペレーティングシステム３５が実行する手順の関連部分を示す。７０１において、クライアントが要求（ＮＦＳ要求であってもよいが、必然ではない）をストレージサーバ２に送信するとき、最初にストレージサーバ２内のＮｅｔｗｏｒｋドメインが要求を受信する。７０２において、Ｎｅｔｗｏｒｋドメインは、要求をファイルシステム４１が承認する内部フォーマットに変換する。次にＮｅｔｗｏｒｋドメインは、７０３において、要求された動作がマルチプロセッサセーフ（「ＭＰセーフ」）であるか否か、すなわち、ＦＳ−Ｅｘｅｍｐｔスレッドで実行できる動作であるか否かを判断する。一般に、オペレーティングシステム３５は、どの動作が含まれるかを識別するように、あらかじめ構成されている。これらの動作には、たとえば、読み出しおよび書き込みを含んでもよい。
【００３８】
要求された動作がＭＰセーフでない場合、プロセスは７０８に進み、メッセージをＦＳ−Ｍａｉｎドメイン内の適切なファイルシステムスレッドに送信し、要求の追加処理をトリガする。特定のタイプのスレッドおよび追加処理の性質は、該要求の性質に依存するもので、本発明には特に重要なものではない。
【００３９】
動作がＭＰセーフである場合、プロセスは７０３から７０４に進む。７０４において、要求された動作が読み出し、書き込みまたは読み出しディレクトリの要求（「ｒｅａｄ−ｄｉｒ」）として識別された場合、プロセスは７０５に進む。７０５において、要求された動作がターゲットファイルの複数のストライプにわたるか否かを判断する。要求された動作が複数のストライプにわたる場合、ＦＳ−Ｅｘｅｍｐｔドメインにおける並行処理は適切ではない。この場合、プロセスは７０８に分岐し、メッセージはＦＳ−Ｍａｉｎドメイン内の適切なファイルシステムスレッドに送信され、要求の追加処理をトリガする。
【００４０】
７０４に戻って、要求された動作が読み出し、書き込みまたはｒｅａｄ−ｄｉｒの要求でない場合、プロセスは７０９に分岐し、要求された動作がデータ属性（「ｇｅｔ−ａｔｔｒ」）要求であるか、または検索要求であるか否かを判断する。要求がこれら２つのタイプのいずれかである場合、プロセスは７１０に進み、メッセージがＦＳ−Ｅｘｅｍｐｔドメイン内の所定スレッド、たとえば、スレッド０に送信され、要求の追加処理をトリガする。スレッド０は、ここではファイル内の第１のストライプに対応する所定スレッドの一例として使用されており、ここで、ファイルのメタデータが格納されると仮定される。しかし、他のいずれのＦＳ−Ｅｘｅｍｐｔスレッドもこの目的で割り当てることができる。７０９において、要求された動作がｇｅｔ−ａｔｔｒ要求または検索要求でない場合、プロセスは上述の７０５に進む。
【００４１】
７０５に戻って、要求された動作が複数のストライプにわたらない場合（すなわち、動作が単一のストライプにのみ影響を与える場合）、プロセスは７０６に進む。７０６において、どのＦＳ−Ｅｘｅｍｐｔスレッドが該要求により参照されるストライプ（「ターゲットストライプ」）に対応するかを判断する。任意の適切なアルゴリズムを使用して、ターゲットストライプを的確なスレッドにマップしてもよい。たとえば、ラウンドロビン手法を使用することができる。これは、アクセスされるファイルのファイルＩＤおよび｛ターゲットストライプ−モジュロＦＳ−Ｅｘｅｍｐｔスレッドの数｝をハッシュ化することによりスレッドを識別するものである。的確なＦＳ−Ｅｘｅｍｐｔスレッドを識別すると、７０７においてメッセージが該スレッドに送信され、要求の追加処理をトリガする。
【００４２】
ファイルストライプのサイズは、ある程度任意であることができる。しかし、この点に関して、ある要因を考慮すべきである。たとえば、バッファツリーを使用して、ファイルシステム４１がファイル（または他のデータ単位）を見つけ、格納すると仮定する。図８に、ファイルのバッファツリーの簡単な例を示す。この場合、バッファツリーとは、ファイルのデータブロックの位置を追跡するためにファイルシステム４１により使用される階層構造（たとえば、Ｎ分木）である。バッファツリー８１のルート８２は、ファイルのｉｎｏｄｅである。ｉｎｏｄｅは、ファイルの所有権、ファイルのアクセス許可、ファイルのサイズ、ファイルタイプ、およびファイルのデータブロックの位置を示すポインタなどのファイルに関するメタデータを格納するために使用されるメタデータ構造である。バッファツリー８１は、１つまたは複数のレベルの間接ブロック８３を含み、それぞれ「レベル１（Ｌ１）ブロック」「レベル２（Ｌ２）ブロック」などと呼ばれる。最上位の間接ブロック８３は、ｉｎｏｄｅ８２内のポインタ８６が指し示す。各間接ブロック８３は、ファイルの下位レベルの間接ブロックまたは直接ブロック８４（「レベル０（Ｌ０）ブロック」）に対する、１つまたは複数のポインタ８５を含む。直接（Ｌ０）ブロック８４は、（ポインタまたはメタデータだけでなく）ファイルの実データを含むブロックである。
【００４３】
上述のバッファツリー手法を使用すれば、ファイル（または他のデータコンテナ）のストライプサイズは最小でも、直接ブロックを並行してロードし、ほとんど常にストライプ間のアクセスを避けるのに十分である。ストライプは直接（Ｌ０）ブロックにのみ適用する。所与のＦＳ−Ｅｘｅｍｐｔスレッドは、（複数のファイルであっても）常に同一の直接ブロック上で動作し、直接ブロックバッファを共有する２つのＦＳ−Ｅｘｅｍｐｔスレッドはない。大きなファイルに関しては、入念にほとんど読み出しのアクセスを行うことで、ＦＳ−Ｅｘｅｍｐｔスレッドは間接ブロック（Ｌ１ブロック、Ｌ２ブロックなど）およびバッファツリー内のｉｎｏｄｅを共有してもよい。ストライプサイズは、Ｌ１ブロックのアドレス範囲に等しいので、２つのＦＳ−Ｅｘｅｍｐｔスレッドに共有される２つのＬ１ブロックはなくなる。しかし、代替の実施形態においては、ストライプサイズは異なってもよいことに留意されたい。
【００４４】
ここまでの説明は、概して、ＦＳ−Ｅｘｅｍｐｔスレッドに対するストライプのマッピングを固定すると仮定したものである。しかし、代替の実施形態においては、効率、負荷バランシングなどの適切な基準に基づいて、複数のストライプを動的にスレッドに割り当てることができる。たとえば、作業負荷をスレッド全体にわたって公平に分散しない状況または動作そのものが非常に可変的である状況で、スレッドの動的な割り当てを可能にして、いくつかのスレッドは利用頻度が高い期間を有し、一方で他のスレッドは利用頻度が低い期間を有することができる。
【００４５】
そのような実施形態においては、図９に示すように、オペレーティングシステム３５はスケジューラ９１を含んでもよい。スケジューラ９１は、１つまたは複数の適切な基準に基づいて、複数のストライプを動的に適切なＦＳ−Ｅｘｅｍｐｔスレッド６２に割り当てる一方、確実に一回に２つ以上のＦＳ−Ｅｘｅｍｐｔスレッドに割り当てられるストライプがないようにする。したがって、特定のストライプは、第１の要求に応答して１つのＦＳ−Ｅｘｅｍｐｔスレッドに割り当てられ、第２の要求に応答して異なるＦＳ−Ｅｘｅｍｐｔスレッドに割り当てられる。
【００４６】
基本技術から逸脱することなく、前述のプロセスの種々の変更および拡張を行うことが可能である。以下、そのような拡張の一例として、「読み出しディレクトリ（「ｒｅａｄ−ｄｉｒ」）要求にサービスを提供することに関して、説明する。
【００４７】
この例のバックグラウンドとして、ディレクトリデータを名前とエントリとが含まれるブロックに編成すると仮定する。エントリは名前をその関連ファイルＩＤにマップする。エントリは「割り当て」または「フリー」とマークされる。ディレクトリエントリを割り当てるときに、第１のフリーエントリおよびファイルの名前記憶のためのスペースに対して、ディレクトリをスキャンし、その後割り当てる。ディレクトリエントリを解放するとき、エントリをフリーにマークし、対応する名前記憶を割り当て解除する。どのエントリを解放するのかに対しての明示的な制御はないので、ディレクトリブロック内が疎になってもよい。たとえば、クライアントからの一連のＲＥＭＯＶＥ動作は、ディレクトリブロックは全てがフリーエントリになることもある。次のｒｅａｄ−ｄｉｒ動作は、割り当てられたファイル名のセットをクライアントに返すために、フリーエントリの複数のブロックをスキップする必要があるかもしれない。
【００４８】
さらに、ｒｅａｄ−ｄｉｒ要求が開始オフセットと（ＮＦＳ  ＲＥＡＤ−ＤＩＲ要求の場合のように）読み出すいくつかのディレクトリエントリとを特定すると仮定する。したがって、ｒｅａｄ−ｄｉｒ要求に応答して、動作は最初に、ｒｅａｄ−ｄｉｒ動作の範囲の第１のオフセットを所有するＦＳ−Ｅｘｅｍｐｔスレッドに送信される。ｒｅａｄ−ｄｉｒ動作が複数のファイルストライプにわたらなければならない場合、たとえば、ディレクトリ内が（たとえば、フラグメント化のために）相対的に疎である場合、動作は一時停止され、次のファイルストライプを所有するＦＳ−Ｅｘｅｍｐｔスレッド上で再開することができる。この手法は、少なくともｒｅａｄ−ｄｉｒがディレクトリ内を直線的に進み、動作がアトミックである必要がない場合に有効である。このように、一部のストライプ間の動作（たとえば、この例においてはｒｅａｄ−ｄｉｒ）は、指定のストライプを所有するスレッド間で、動作を前後して実行することにより実装してもよい。もちろん、代替の手法として、ストライプ境界が生じる場合に、ＦＳ−Ｅｘｅｍｐｔ内のスレッドに最初にｒｅａｄ−ｄｉｒ要求を簡単に割り当てて、その後ＦＳ−Ｍａｉｎに動作を再び割り当てることもできる。
【００４９】
基本技術を変更または拡張することが可能な他の例は、投機的な先読み動作に関する。上述のようなストレージサーバにおいて、投機的な先読みは、クライアントは予測可能なパターン（たとえば、シーケンシャルなファイルオフセットの一連の短い読み出し要求）に従って読み出し中であるとファイルシステムが認識するときに行うことができる。その場合、ファイルシステムは、次のクライアント要求より先にディスクからブロックを読み出すことにより効率を向上しようと試みる。たとえ、単一の読み出し要求が１つのストライプにきれいに分類される場合であっても、投機的な先読みは複数のファイルストライプにわたる場合がある。したがって、１つのＦＳ−Ｅｘｅｍｐｔスレッド上で読み出し動作を処理するが、先読み動作を内部作成して、それを次のシーケンシャルなファイルストライプを所有するＦＳ−Ｅｘｅｍｐｔスレッドに送信することができる。一実施形態においては、該システムは、ＦＳ−Ｅｘｅｍｐｔドメイン内で先読みを維持し、リソースが利用可能でないときにＦＳ−Ｍａｉｎに切り替えのみを行うよう試みる。同一のファイルストライプ内にある先読みであれば、ＦＳ−Ｅｘｅｍｐｔドメイン内の１つの対応するスレッド内で行うことになる。しかし、先読みが複数のファイルストライプにわたるときは、ストライプと交差する先読みの一部は別個の先読み動作に分割される。次に、この別個の先読み動作は、適切なＦＳ−Ｅｘｅｍｐｔスレッドストライプに送信され、該ストライプに対処する。このことにより、先読みは、ＦＳ−Ｍａｉｎに切り替えないで、ＦＳ−Ｅｘｅｍｐｔドメイン内で行うことが可能になる。もちろん、上述以外の他の基本技術の変更／拡張も可能である。
【００５０】
ストレージサーバにおけるスループットを増加させる方法および装置について説明してきた。本明細書で説明した技術は、代替としてストレージサーバ以外の処理装置にも適用できることに留意されたい。一例として、本技術をネットワーク装置（たとえば、スイッチ、ルータまたはゲートウェイ）内で実装するために簡単に変更することができる。ネットワーク装置のデータ面は、上述のＦＳ−Ｅｘｅｍｐｔドメインと同様の並列化したドメイン内で実行し、制御面をＦＳ−Ｍａｉｎドメインと同様の非並列化ドメイン内に残す（すなわち、「古い」Ｎｅｔｗｏｒｋドメインと新しいＮｅｔｗｏｒｋ−ｅｘｅｍｐｔドメインとの間の連動関係を作成する）ことができる。ファイルをファイルストライプに分割し、それらをスレッドに割り当てる代わりに、ネットワーク装置は、たとえばネットワークインタフェースを分割し、個々のインタフェースをスレッドに割り当て、たとえばデータパケット処理をＮｅｔｗｏｒｋ−ｅｘｅｍｐｔドメインに送信することができる。しかし全ての他の制御動作はＮｅｔｗｏｒｋドメイン内に残す。
【００５１】
さらに、上述の原理は、必ずしも単一の（マルチプロセッサ）処理装置への適用に限定されるわけではない。つまり、上述の原理を分散システムに適用して、２つ以上の処理装置（たとえば、２つ以上のストレージサーバであって、それぞれが１つまたは複数のプロセッサを含むストレージサーバ）が同一データに安全にアクセスするのを促進することが可能である。
【００５２】
本明細書で説明した技術を実装するソフトウェアは、マシン読み出し可能な媒体に格納してもよい。本明細書で使用する用語「マシンアクセス可能な媒体」は、マシン（たとえば、コンピュータ、ネットワーク装置、携帯情報端末（ＰＤＡ）、製造ツール、１つまたは複数のプロセッサのセットを備えた任意の装置など）によりアクセス可能な形式で情報を提供（すなわち、格納および／または送信）する任意の機構を含む。たとえば、マシンアクセス可能な媒体は、記録可能／記録不可である媒体（たとえば、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリ素子など）を含む。
【００５３】
本明細書内で使用する「論理」は、たとえば、ソフトウェア、ハードウェアおよび／またはハードウェアとソフトウェアとの組み合わせを含んでもよい。
【００５４】
本発明を特定の例示的な実施形態を参照して説明してきたが、本発明は上述の実施形態に限定されず、添付の請求項の精神と範囲を逸脱しなければ変更および修正をして実施することが可能であることが理解されよう。したがって、本明細書および図面は制限的な意味ではなく例示的な意味として捉えるべきである。
【図面の簡単な説明】
【００５５】
【図１】複数の論理プロセッサを含む物理プロセッサを示す図である。
【図２】ストレージサーバおよびクライアントを含むネットワーク環境を示す図である。
【図３】ストレージサーバのブロック図である。
【図４】ストレージサーバのオペレーティングシステムを示す図である。
【図５】ストレージサーバ内で実装できる複数のドメインを示す図である。
【図６】ＦＳ−Ｍａｉｎドメイン、ＦＳ−Ｅｘｅｍｐｔドメインとファイルシステムとの間の関係を示す図である。
【図７】要求を処理するときに、ストレージサーバのオペレーティングシステムが実行する手順の一部を示す図である。
【図８】ファイルのバッファツリーを示す図である。
【図９】ストライプをＦＳ−Ｅｘｅｍｐｔスレッドに動的に割り当てるのに使用するスケジューラを示す図である。
【符号の説明】
【００５６】
１・・・クライアント、２・・・ストレージサーバ、３・・・相互接続、４・・・大容量記憶装置。
【図１】
2009512948.tif 000003
【図２】
2009512948.tif 000004
【図３】
2009512948.tif 000005
【図４】
2009512948.tif 000006
【図５】
2009512948.tif 000007
【図６】
2009512948.tif 000008
【図７】
2009512948.tif 000009
【図８】
2009512948.tif 000010
【図９】
2009512948.tif 000011
【国際調査報告】
2009512948.tif 000012
2009512948.tif 000013
2009512948.tif 000014