(57)【要約】  本明細書に開示されるのは、ｉノードのアクセスパターンを追跡する方法、システム及びプロセスであって、メモリ内にｉノードをプリ取り出す先読み命令を発行する。メタデータ記憶領域内のメタデータユニットの位置が判定される。現在のメタデータ読み取り動作に対応するメタデータ記憶領域内の別の位置が判定される。メタデータユニットの位置及び別の位置を使用して、メタデータ先読み動作を実行することができるかどうかが判定される。メタデータ先読み動作が実行され得るという判定に応答して、メタデータ先読み動作が発行される。加えて、ｉノードがアクセスされ、ｉノードのディレクトリが判定される。また、ディレクトリのエントリがグローバルｉノードリスト内に存在するかどうかが判定される。エントリがグローバルｉノードリスト内に存在する場合に、ディレクトリのファイル構造がシーケンシャルであるか非シーケンシャルであるかが判定される。エントリがグローバルｉノードリスト内に存在しない場合に、グローバルｉノードリスト内にディレクトリの新しいエントリが追加される。
2019537097.tif 000002
【特許請求の範囲】
【請求項１】
メタデータ記憶領域内のメタデータユニットの位置を判定することであって、
前記メタデータ記憶領域が不揮発性記憶ユニット内にある、判定することと、
前記メタデータ記憶領域内の別の位置を判定することであって、
前記別の位置が現在のメタデータ読み取り動作に対応する、判定することと、
前記メタデータユニットの前記位置及び前記別の位置を使用して、メタデータ先読み動作を実行することができるかどうかを判定することと、
前記メタデータ先読み動作が実行され得るという判定に応答して、前記メタデータ先読み動作を発行することと、を含む、方法。
【請求項２】
前記メタデータ記憶領域が、複数のディスク上ｉノードを含み、
前記ディスク上ｉノードが、前記メタデータユニットを含み、
前記ディスク上ｉノードが、構造ファイルの一部であり、
前記構造ファイルが、前記不揮発性記憶ユニットに記憶されている、請求項１に記載の方法。
【請求項３】
コア内ｉノードを作成することであって、
前記コア内ｉノードが、前記構造ファイルに対応する、作成することと、
前記コア内ｉノード内に前記メタデータユニットの前記位置を記憶することであって、
前記メタデータユニットが、最後に読み取ったメタデータチャンクであり、
前記メタデータユニットの前記位置が、前記メタデータユニットの終了オフセットを識別する、記憶することと、を更に含む、請求項２に記載の方法。
【請求項４】
前記メタデータ先読み動作が実行され得るかどうかを判定することが、
前記メタデータユニットの前記終了オフセットにアクセスすることと、
前記別の位置が前記終了オフセットに隣接しているかどうかを判定することと、を含む、請求項３に記載の方法。
【請求項５】
前記メタデータ先読み動作を発行することが、
前記終了オフセットを、前記メタデータ先読み動作によって読み取られた別のメタデータユニットの別の終了オフセットと置き換えることによって、前記終了オフセットを更新することを含み、
前記別のメタデータユニットが、別の最後に読み取ったメタデータチャンクである、請求項３に記載の方法。
【請求項６】
前記別の位置が前記終了オフセットに隣接していない場合に、前記終了オフセットを現在のメタデータ読み取り動作の終了オフセットと置き換えることによって前記終了オフセットを更新することを更に含む、請求項３に記載の方法。
【請求項７】
１つ以上のディスク上ｉノードを読み取るコマンドをインターセプトすることであって、
前記１つ以上のディスク上ｉノードが、前記複数のディスク上ｉノードの一部であり、
前記インターセプトが、入出力（Ｉ／Ｏ）動作に応答して実行され、
前記Ｉ／Ｏ動作が、前記コマンドをもたらす、インターセプトすることと、
前記メタデータ先読み動作において発行されたメタデータ先読み値を解析することであって、
前記解析が、前記発行されたメタデータ先読み値と前記コマンド内のチャンク合計とを比較することを含む、解析することと、
前記Ｉ／Ｏ動作が完了するであろうことを前記解析が示す場合に、前記Ｉ／Ｏ動作が完了するのを待つことと、
非同期メタデータ先読み命令が発行され得ることを前記解析が示す場合に、非同期メタデータ先読み命令を発行することと、を更に含む、請求項２に記載の方法。
【請求項８】
前記Ｉ／Ｏ動作が完了しているかどうかを判定することと、
前記Ｉ／Ｏ動作が完了している場合に、待ち行列を生成することであって、
前記待ち行列が、前記チャンク合計のメタデータの１つ以上の残りのチャンクを含み、
前記メタデータの前記１つ以上の残りのチャンクが、前記非同期メタデータ先読み命令に含まれていない、生成することと、
前記Ｉ／Ｏ動作が完了していない場合に、前記チャンク合計を前記メタデータ先読み動作において更新することと、を更に含む、請求項７に記載の方法。
【請求項９】
プログラム命令を含む非一過性コンピュータ可読記憶媒体であって、前記プログラム命令が、
メタデータ記憶領域内のメタデータユニットの位置を判定することであって、
前記メタデータ記憶領域が、不揮発性記憶ユニット内にある、判定することと、
前記メタデータ記憶領域内の別の位置を判定することであって、
前記別の位置が、現在のメタデータ読み取り動作に対応する、判定することと、
前記メタデータユニットの前記位置及び前記別の位置を使用して、メタデータ先読み動作を実行することができるかどうかを判定することと、
前記メタデータ先読み動作が実行され得るという判定に応答して、前記メタデータ先読み動作を発行することと、を実行可能である、非一過性コンピュータ可読記憶媒体。
【請求項１０】
前記メタデータ記憶領域が、複数のディスク上ｉノードを含み、
前記ディスク上ｉノードが、前記メタデータユニットを含み、
前記ディスク上ｉノードが、構造ファイルの一部であり、
前記構造ファイルが、前記不揮発性記憶ユニットに記憶されている、請求項９に記載の非一過性コンピュータ可読記憶媒体。
【請求項１１】
コア内ｉノードを作成することであって、
前記コア内ｉノードが、前記構造ファイルに対応する、作成することと、
前記コア内ｉノード内に前記メタデータユニットの前記位置を記憶することであって、
前記メタデータユニットが、最後に読み取ったメタデータチャンクであり、
前記メタデータユニットの位置が、前記メタデータユニットの終了オフセットを識別する、記憶することと、を更に含む、請求項１０に記載の非一過性コンピュータ可読記憶媒体。
【請求項１２】
前記メタデータ先読み動作が実行され得るかどうかを判定することが、
前記メタデータユニットの前記終了オフセットにアクセスすることと、
前記別の位置が前記終了オフセットに隣接しているかどうかを判定することと、を含む、請求項１１に記載の非一過性コンピュータ可読記憶媒体。
【請求項１３】
前記メタデータ先読み動作を発行することが、
前記別の位置が前記終了オフセットに隣接している場合に、前記終了オフセットを、前記メタデータ先読み動作によって読み取られた別のメタデータユニットの別の終了オフセットと置き換えることによって前記終了オフセットを更新することであって、
前記別のメタデータユニットが、別の最後に読み取ったメタデータチャンクである、更新することと、
前記別の位置が前記終了オフセットに隣接していない場合に、前記終了オフセットを現在のメタデータ読み取り動作の終了オフセットと置き換えることによって前記終了オフセットを更新することと、を含む、請求項１２に記載の非一過性コンピュータ可読記憶媒体。
【請求項１４】
１つ以上のディスク上ｉノードを読み取るコマンドをインターセプトすることであって、
前記１つ以上のディスク上ｉノードが、前記複数のディスク上ｉノードの一部であり、
前記インターセプトが、入出力（Ｉ／Ｏ）動作に応答して実行され、
前記Ｉ／Ｏ動作が、前記コマンドをもたらす、インターセプトすることと、
前記メタデータ先読み動作において発行されたメタデータ先読み値を解析することであって、
前記解析が、前記発行されたメタデータ先読み値と前記コマンド内のチャンク合計とを比較することを含む、解析することと、
前記Ｉ／Ｏ動作が完了するであろうことを前記解析が示す場合に、前記Ｉ／Ｏ動作が完了するのを待つことと、
非同期メタデータ先読み命令が発行され得ることを前記解析が示す場合に、非同期メタデータ先読み命令を発行することと、
前記Ｉ／Ｏ動作が完了しているかどうかを判定することと、
前記Ｉ／Ｏ動作が完了している場合に、待ち行列を生成することであって、
前記待ち行列が、前記チャンク合計のメタデータの１つ以上の残りのチャンクを含み、
前記メタデータの前記１つ以上の残りのチャンクが、前記非同期メタデータ先読み命令に含まれていない、生成することと、
前記Ｉ／Ｏ動作が完了していない場合に、前記チャンク合計を前記メタデータ先読み動作において更新することと、を更に含む、請求項１０に記載の非一過性コンピュータ可読記憶媒体。
【請求項１５】
１つ以上のプロセッサと、
前記１つ以上のプロセッサに結合されたメモリと、を備え、前記メモリが、前記１つ以上のプロセッサによって実行可能なプログラム命令を記憶し、前記プログラム命令が、
メタデータ記憶領域内のメタデータユニットの位置を判定することであって、
前記メタデータ記憶領域が、不揮発性記憶ユニット内にある、判定することと、
前記メタデータ記憶領域内の別の位置を判定することであって、
前記別の位置が、現在のメタデータ読み取り動作に対応する、判定することと、
前記メタデータユニットの前記位置及び前記別の位置を使用して、メタデータ先読み動作を実行することができるかどうかを判定することと、
前記メタデータ先読み動作が実行され得るという判定に応答して、前記メタデータ先読み動作を発行することと、を実行可能である、システム。
【請求項１６】
前記メタデータ記憶領域が、複数のディスク上ｉノードを含み、
前記ディスク上ｉノードが、前記メタデータユニットを含み、
前記ディスク上ｉノードが、構造ファイルの一部であり、
前記構造ファイルが、前記不揮発性記憶ユニットに記憶されている、請求項１５に記載のシステム。
【請求項１７】
コア内ｉノードを作成することであって、
前記コア内ｉノードが、前記構造ファイルに対応する、作成することと、
前記コア内ｉノード内に前記メタデータユニットの前記位置を記憶することであって、
前記メタデータユニットが、最後に読み取ったメタデータチャンクであり、
前記メタデータユニットの位置が、前記メタデータユニットの終了オフセットを識別する、記憶することと、を更に含む、請求項１６に記載のシステム。
【請求項１８】
前記メタデータ先読み動作が実行され得るかどうかを判定することが、
前記メタデータユニットの前記終了オフセットにアクセスすることと、
前記別の位置が前記終了オフセットに隣接しているかどうかを判定することと、を含む、請求項１７に記載のシステム。
【請求項１９】
前記メタデータ先読み動作を発行することが、
前記別の位置が前記終了オフセットに隣接している場合に、前記終了オフセットを、前記メタデータ先読み動作によって読み取られた別のメタデータユニットの別の終了オフセットと置き換えることによって前記終了オフセットを更新することであって、
前記別のメタデータユニットが、別の最後に読み取ったメタデータチャンクである、更新することと、
前記別の位置が前記終了オフセットに隣接していない場合に、前記終了オフセットを現在のメタデータ読み取り動作の終了オフセットと置き換えることによって前記終了オフセットを更新することと、を含む、請求項１８に記載のシステム。
【請求項２０】
１つ以上のディスク上ｉノードを読み取るコマンドをインターセプトすることであって、
前記１つ以上のディスク上ｉノードが、前記複数のディスク上ｉノードの一部であり、
前記インターセプトが、入出力（Ｉ／Ｏ）動作に応答して実行され、
前記Ｉ／Ｏ動作が、前記コマンドをもたらす、インターセプトすることと、
前記メタデータ先読み動作において発行されたメタデータ先読み値を解析することであって、
前記解析が、前記発行されたメタデータ先読み値と前記コマンド内のチャンク合計とを比較することを含む、解析することと、
前記Ｉ／Ｏ動作が完了するであろうことを前記解析が示す場合に前記Ｉ／Ｏ動作が完了するのを待つことと、
非同期メタデータ先読み命令が発行され得ることを前記解析が示す場合に、非同期メタデータ先読み命令を発行することと、
前記Ｉ／Ｏ動作が完了しているかどうかを判定することと、
前記Ｉ／Ｏ動作が完了している場合に、待ち行列を生成することであって、
前記待ち行列が、前記チャンク合計のメタデータの１つ以上の残りのチャンクを含み、
前記メタデータの前記１つ以上の残りのチャンクが、前記非同期メタデータ先読み命令に含まれていない、生成することと、
前記Ｉ／Ｏ動作が完了していない場合に、前記チャンク合計を前記メタデータ先読み動作において更新することと、を更に含む、請求項１６に記載のシステム。
【請求項２１】
ｉノードにアクセスすることと、
前記ｉノードのディレクトリを判定することと、
前記ディレクトリのエントリがグローバルｉノードリスト内に存在するかどうかを判定することと、
前記エントリが前記グローバルｉノードリスト内に存在する場合に、前記ディレクトリのファイル構造がシーケンシャルであるか非シーケンシャルであるかを判定することと、
前記エントリが前記グローバルｉノードリスト内に存在しない場合に、前記グローバルｉノードリスト内に前記ディレクトリの新しいエントリを追加することと、を含む、方法。
【請求項２２】
前記ディレクトリがグローバルｉノードリスト内に存在するかどうかを判定することは、
前記エントリの前記グローバルｉノードリストを探索することを含む、請求項２１に記載の方法。
【請求項２３】
前記ディレクトリの前記ファイル構造がシーケンシャルである場合に、前記ディレクトリがシーケンシャルフラグを含むかどうかを判定することと、
前記ディレクトリが前記シーケンシャルフラグを含む場合に、ｉノードリスト上の複数のｉノードのうちの１つ以上のｉノードに対するメタデータ先読み動作を発行することと、を更に含む、請求項２１に記載の方法。
【請求項２４】
前記親ディレクトリの前記ファイル構造が非シーケンシャルである場合に、前記ディレクトリの前記複数のｉノードの前記ｉノードリストを取り出すことと、
前記ｉノードリスト上の前記１つ以上のｉノードに対する前記メタデータ先読み動作を発行することと、を更に含む、請求項２３に記載の方法。
【請求項２５】
１つ以上のｉノードを読み取るコマンドをインターセプトすることであって、
前記１つ以上のｉノードが、前記複数のｉノードの一部であり、
前記インターセプトが、入出力（Ｉ／Ｏ）動作に応答して実行され、
前記Ｉ／Ｏ動作が、前記コマンドをもたらす、インターセプトすることを更に含む、請求項２４に記載の方法。
【請求項２６】
前記メタデータ先読み動作において発行されたメタデータ先読み値を解析することであって、
前記解析が、前記発行されたメタデータ先読み値と前記コマンド内のチャンク合計とを比較することを含む、解析することと、
前記Ｉ／Ｏ動作が完了するであろうことを前記解析が示す場合に前記Ｉ／Ｏ動作が完了するのを待つことと、
非同期メタデータ先読み命令が発行され得ることを前記解析が示す場合に、非同期メタデータ先読み命令を発行することと、を更に含む、請求項２５に記載の方法。
【請求項２７】
前記Ｉ／Ｏ動作が完了しているかどうかを判定することと、
前記Ｉ／Ｏ動作が完了している場合に、待ち行列を生成することであって、
前記待ち行列が、前記チャンク合計のメタデータの１つ以上の残りのチャンクを含み、
前記メタデータの前記１つ以上の残りのチャンクが、前記非同期メタデータ先読み命令に含まれていない、生成することと、
前記Ｉ／Ｏ動作が完了していない場合に、前記チャンク合計を前記メタデータ先読み動作において更新することと、を更に含む、請求項２６に記載の方法。
【請求項２８】
前記ｉノードが、ディスク上ｉノードである、請求項２１に記載の方法。
【請求項２９】
プログラム命令を備える非一過性コンピュータ可読記憶媒体であって、前記プログラム命令が、
ｉノードにアクセスすることと、
前記ｉノードのディレクトリを判定することと、
前記ディレクトリのエントリがグローバルｉノードリスト内に存在するかどうかを判定することと、
前記エントリが前記グローバルｉノードリスト内に存在する場合に、前記ディレクトリのファイル構造がシーケンシャルであるか非シーケンシャルであるかを判定することと、
前記エントリが前記グローバルｉノードリスト内に存在しない場合に、前記グローバルｉノードリスト内に前記ディレクトリの新しいエントリを追加することと、を実行可能である、非一過性コンピュータ可読記憶媒体。
【請求項３０】
前記ディレクトリがグローバルｉノードリスト内に存在するかどうかを判定することが、
前記エントリの前記グローバルｉノードリストを探索することを含み、
前記ｉノードが、ディスク上ｉノードである、請求項２９に記載の非一過性コンピュータ可読記憶媒体。
【請求項３１】
前記ディレクトリの前記ファイル構造がシーケンシャルである場合に、前記ディレクトリがシーケンシャルフラグを含むかどうかを判定することと、
前記ディレクトリが前記シーケンシャルフラグを含む場合に、前記ディレクトリ内の１つ以上のｉノードに対するメタデータ先読み動作を発行することと、
前記親ディレクトリの前記ファイル構造が非シーケンシャルである場合に、前記ディレクトリの前記複数のｉノードの前記ｉノードリストを取り出すことと、
前記ｉノードリスト上の前記１つ以上のｉノードに対する前記メタデータ先読み動作を発行することと、を更に含む、請求項２９に記載の非一過性コンピュータ可読記憶媒体。
【請求項３２】
１つ以上のｉノードを読み取るコマンドをインターセプトすることであって、
前記１つ以上のｉノードが、前記複数のｉノードの一部であり、
前記インターセプトが、入出力（Ｉ／Ｏ）動作に応答して実行され、
前記Ｉ／Ｏ動作が、前記コマンドもたらす、インターセプトすることを更に含む、請求項３１に記載の非一過性コンピュータ可読記憶媒体。
【請求項３３】
前記メタデータ先読み動作において発行されたメタデータ先読み値を解析することであって、
前記解析が、前記発行されたメタデータ先読み値と前記コマンド内のチャンク合計とを比較することを含む、解析することと、
前記Ｉ／Ｏ動作が完了するであろうことを前記解析が示す場合に前記Ｉ／Ｏ動作が完了するのを待つことと、
非同期メタデータ先読み命令が発行され得ることを前記解析が示す場合に、非同期メタデータ先読み命令を発行することと、を更に含む、請求項３２に記載の非一過性コンピュータ可読記憶媒体。
【請求項３４】
前記Ｉ／Ｏ動作が完了しているかどうかを判定することと、
前記Ｉ／Ｏ動作が完了している場合に、待ち行列を生成することであって、
前記待ち行列が、前記チャンク合計のメタデータの１つ以上の残りのチャンクを含み、
前記メタデータの前記１つ以上の残りのチャンクが、前記非同期メタデータ先読み命令に含まれていない、生成することと、
前記Ｉ／Ｏ動作が完了していない場合に、前記チャンク合計を前記メタデータ先読み動作において更新することと、を更に含む、請求項３３に記載の非一過性コンピュータ可読記憶媒体。
【請求項３５】
１つ以上のプロセッサと、
前記１つ以上のプロセッサに結合されたメモリと、を備え、前記メモリが、前記１つ以上のプロセッサによって実行可能なプログラム命令を記憶し、前記プログラム命令が、
ｉノードにアクセスすることと、
前記ｉノードのディレクトリを判定することと、
前記ディレクトリのエントリがグローバルｉノードリスト内に存在するかどうかを判定することと、
前記エントリが前記グローバルｉノードリスト内に存在する場合に、前記ディレクトリのファイル構造がシーケンシャルであるか非シーケンシャルであるかを判定することと、
前記エントリが前記グローバルｉノードリスト内に存在しない場合に、前記グローバルｉノードリスト内に前記ディレクトリの新しいエントリを追加することと、を実行可能である、システム。
【請求項３６】
前記ディレクトリがグローバルｉノードリスト内に存在するかどうかを判定することが、
前記エントリの前記グローバルｉノードリストを探索することを含み、
前記ｉノードが、ディスク上ｉノードである、請求項３５に記載のシステム。
【請求項３７】
前記ディレクトリの前記ファイル構造がシーケンシャルである場合に、前記ディレクトリがシーケンシャルフラグを含むかどうかを判定することと、
前記ディレクトリが前記シーケンシャルフラグを含む場合に、前記ディレクトリ内の１つ以上のｉノードに対するメタデータ先読み動作を発行することと、
前記親ディレクトリの前記ファイル構造が非シーケンシャルである場合に、前記ディレクトリの前記複数のｉノードの前記ｉノードリストを取り出すことと、
前記ｉノードリスト上の前記１つ以上のｉノードに対する前記メタデータ先読み動作を発行することと、を更に含む、請求項３５に記載のシステム。
【請求項３８】
１つ以上のｉノードを読み取るコマンドをインターセプトすることであって、
前記１つ以上のｉノードが、前記複数のｉノードの一部であり、
前記インターセプトが、入出力（Ｉ／Ｏ）動作に応答して実行され、
前記Ｉ／Ｏ動作が、前記コマンドを、もたらす、インターセプトすることを更に含む、請求項３７に記載のシステム。
【請求項３９】
前記メタデータ先読み動作において発行されたメタデータ先読み値を解析することであって、
前記解析が、前記発行されたメタデータ先読み値と前記コマンド内のチャンク合計とを比較することを含む、解析することと、
前記Ｉ／Ｏ動作が完了するであろうことを前記解析が示す場合に、前記Ｉ／Ｏ動作が完了するのを待つことと、
非同期メタデータ先読み命令が発行され得ることを前記解析が示す場合に、非同期メタデータ先読み命令を発行することと、を更に含む、請求項３８に記載のシステム。
【請求項４０】
前記Ｉ／Ｏ動作が完了しているかどうかを判定することと、
前記Ｉ／Ｏ動作が完了している場合に、待ち行列を生成することであって、
前記待ち行列が、前記チャンク合計のメタデータの１つ以上の残りのチャンクを含み、
前記メタデータの前記１つ以上の残りのチャンクが、前記非同期メタデータ先読み命令に含まれていない、生成することと、
前記Ｉ／Ｏ動作が完了していない場合に、前記チャンク合計を前記メタデータ先読み動作において更新することと、を更に含む、請求項３９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データアクセスに関する。具体的には、本開示は、ｉノードのアクセスパターンを追跡すること、及びｉノードを先取りするｉノード先読み命令を発行することに関する。
【背景技術】
【０００２】
ファイルシステムは、（例えば、アプリケーションを記憶及び実行するための）コンピューティング目的のために、どのようにデータを記憶及び読み出すかを制御するために使用される。ファイルシステム内のデータオブジェクト（例えば、ファイル、ディレクトリなど）は、１つ以上のｉノードを有する。ｉノードは、ファイルシステム内のデータオブジェクトに属するデータを識別するために使用されるデータ構造である。ｉノードは、データオブジェクトのデータの属性（例えば、メタデータ）及びディスクブロック位置（複数可）を記憶する。
【０００３】
ファイルシステム内のファイルにアクセスするには、ディスクから（例えば、不揮発性記憶ユニットから）ファイルのｉノードを読み取る必要がある。バックアップ、周期的スキャン、管理動作などのデータ動作は、典型的にはディスク上の複数のｉノードにアクセスする。ディスクからのこのような「ディスク上」ｉノードを読み取ることにより、アプリケーション性能に悪影響を及ぼす可能性がある。例えば、下にあるディスクが遅い場合、ディスクからディスク上ｉノードを読み取ることにより、アプリケーションが必要なデータをサービスされ得る前に、不適切かつ／又は相当な入力／出力（Ｉ／Ｏ）待ち時間を生じる可能性がある。
【０００４】
ファイルの内容をメモリ（例えば、ランダムアクセスメモリ（Random Access Memory、ＲＡＭ））にロードすることができ、それにより、ファイルがその後アクセスされると、ファイルの内容は、ディスク（例えば、ハードディスクドライブ（Hard Disk Drive、ＨＤＤ））ではなくＲＡＭから読み取られる。しかしながら、ファイルの内容をメモリにロードすることは、ディスクから、アクセスされるファイルの内容に対応するｉノードを必要とする。
【発明の概要】
【０００５】
本明細書に開示されるのは、メモリ内にｉノードを先取りすることによってデータアクセスを加速するための、ｉノードのアクセスパターンを追跡する方法、システム及びプロセスである。１つのそのような方法は、不揮発性記憶ユニット内にあるメタデータ記憶領域内のメタデータユニットの位置を判定することを含む。当該方法は、現在のメタデータ読み取り動作に対応するメタデータ記憶領域内の別の位置を判定し、メタデータユニットの位置及び別の位置を使用して、メタデータ先読み動作を実行することができるかどうかを判定する。メタデータ先読み動作が実行され得るという判定に応答して、当該方法は、メタデータ先読み動作を発行する。
【０００６】
特定の実施形態では、メタデータ記憶領域はディスク上ｉノードを含む。ディスク上ｉノードは、メタデータユニットを含み、構造ファイルの一部である。構造ファイルは不揮発性記憶ユニットに記憶される。当該方法は、構造ファイルに対応するコア内ｉノードを作成し、コア内ｉノード内にメタデータユニットの位置を記憶する。この実施例では、メタデータユニットは、最後に読み取ったメタデータチャンクであり、メタデータユニットの位置は、メタデータユニットの終了オフセットを識別し、それを含む。
【０００７】
いくつかの実施形態では、メタデータ先読み動作が実行され得るかどうかを判定することは、メタデータユニットの終了オフセットにアクセスすることと、別の位置が終了オフセットに隣接しているかどうかを判定することと、を含む。この実施例では、メタデータ先読み動作を発行することは、終了オフセットを、メタデータ先読み動作によって読み取られる別のメタデータユニットの別の終了オフセット（例えば、別の最後に読み取ったメタデータチャンク）と置き換えることによって更新することと、別の位置が終了オフセットに隣接していない場合に、終了オフセットを現在のメタデータ読み取り動作の終了オフセットと置き換えることによって更新することと、を含む。
【０００８】
他の実施形態では、当該方法は、入力／出力（Ｉ／Ｏ）動作に応答して、１つ以上のディスク上ｉノードを読み取るコマンドをインターセプトする。この実施例では、当該方法は、発行された先読み値とコマンド内のチャンク合計とを比較することによって、メタデータ先読み動作において、発行されたメタデータ先読み値を解析する。この方法は、Ｉ／Ｏ動作が完了するのを待ち、かつ／又は非同期メタデータ先読み命令を発行するのを待機する。
【０００９】
特定の実施形態では、Ｉ／Ｏ動作が完了しているかどうかを判定することは、Ｉ／Ｏ動作が完了している場合に待ち行列を生成することを含む。待ち行列は、非同期メタデータ先読み命令に含まれないチャンク合計のメタデータの残りのチャンクを含む。当該方法は、Ｉ／Ｏ動作が完了していない場合に、メタデータ先読み動作においてチャンク合計を更新する。
【００１０】
いくつかの実施形態は、ｉノードにアクセスすることと、ｉノード（例えば、ディスク上ｉノード）のディレクトリを判定することと、ディレクトリのエントリがグローバルｉノードリスト内に存在するかどうかを判定することと、を含む。エントリがグローバルｉノードリスト内に存在する場合、当該方法は、ディレクトリのファイル構造がシーケンシャルであるか非シーケンシャルであるかを判定し、エントリがグローバルｉノードリスト内に存在しない場合、当該方法は、グローバルｉノードリスト内にディレクトリの新たなエントリを追加する。
【００１１】
特定の実施形態では、ディレクトリがグローバルｉノードリスト内に存在するかどうかを判定することは、エントリのグローバルｉノードリストを探索することを含む。当該方法は、ディレクトリのファイル構造がシーケンシャルである場合、ディレクトリがシーケンシャルフラグを含むかどうかを判定する。ディレクトリがシーケンシャルフラグを含む場合、当該方法は、ディレクトリ内のｉノードに対するメタデータ先読み動作を発行する。親ディレクトリのファイル構造が非シーケンシャルである場合、当該方法はディレクトリのｉノードリストを取り出し、ｉノードリスト上のｉノードに対するメタデータ先読み動作を発行する。いくつかの実施形態では、当該方法は、入力／出力（Ｉ／Ｏ）動作に応答して１つ以上のディスク上ｉノードを読み取るコマンドをインターセプトする。この実施例では、当該方法は、発行されたメタデータ先読み値とコマンド内のチャンク合計とを比較することによって、メタデータ先読み動作において、発行されたメタデータ先読み値を解析する。当該方法は、Ｉ／Ｏ動作が非同期メタデータ先読み命令を完了及び／又は発行するのを待機する。
【００１２】
他の実施形態では、Ｉ／Ｏ動作が完了しているかどうかを判定することは、Ｉ／Ｏ動作が完了している場合に待ち行列を生成することを含む。待ち行列は、非同期メタデータ先読み命令に含まれないチャンク合計のメタデータの残りのチャンクを含む。当該方法は、Ｉ／Ｏ動作が完了していない場合に、メタデータ先読み動作においてチャンク合計を更新する。
【００１３】
前述の内容は概要であり、したがって必然的に、簡略化、一般化、及び詳細の省略を含み、その結果として、当業者であれば、その概要が例示的であるにすぎず、なんら限定的ではないことがわかるであろう。請求項によってのみ規定されるような、本開示の他の態様、本発明の機能、及び利点は、下記に示す非限定的な詳細な説明において明瞭になるであろう。
【図面の簡単な説明】
【００１４】
本開示は、添付図面を参照することによってより良く理解され得、そして、それの大半の対象、機能、及び利点が当業者に明らかにされる。
【００１５】
【図１Ａ】本開示の一実施形態に係る、ｉノードのアクセスパターンを追跡してｉノードを先取りするシステムのブロック図である。
【００１６】
【図１Ｂ】本開示の一実施形態に係る、構造ファイルのブロック図である。
【００１７】
【図１Ｃ】本開示の一実施形態に係る、構造ファイル及びコア内ｉノードのブロック図である。
【００１８】
【図２Ａ】本開示の一実施形態に係る、ｉノードのアクセスパターンを追跡してメタデータ先読み命令を発行するシステムのブロック図である。
【００１９】
【図２Ｂ】本開示の一実施形態に係る、ｉノードのオフセットメタデータのブロック図である。
【００２０】
【図２Ｃ】本開示の一実施形態に係る、グローバルｉノードリスト／親ディレクトリリストの内容を示す表である。
【００２１】
【図２Ｄ】本開示の一実施形態に係る、ディレクトリアクセストラッカのブロック図である。
【００２２】
【図２Ｅ】本開示の一実施形態に係る、メタデータ先読み生成器のブロック図である。
【００２３】
【図３Ａ】本開示の一実施形態に係る、シーケンシャルなｉノードを有するディレクトリのブロック図である。
【００２４】
【図３Ｂ】本開示の一実施形態に係る、非シーケンシャルなｉノードを有するディレクトリのブロック図である。
【００２５】
【図３Ｃ】本開示の一実施形態に係る、グローバルｉノードリストを実装するキャッシュのブロック図である。
【００２６】
【図４Ａ】本開示の一実施形態に係る、ｉノード先取りを実行するプロセスを示すフローチャートである。
【００２７】
【図４Ｂ】本開示の一実施形態に係る、ディスク上ｉノードと関連付けられたオフセットメタデータを記憶するプロセスを示すフローチャートである。
【００２８】
【図５Ａ】本開示の一実施形態に係る、ディレクトリのファイル構造を判定するプロセスを示すフローチャートである。
【００２９】
【図５Ｂ】本開示の一実施形態に係る、ディスク上ｉノードに対するメタデータ先読み命令を発行するプロセスを示すフローチャートである。
【００３０】
【図６Ａ】本開示の一実施形態に係る、ｉノード先取りに関連する入力／出力（Ｉ／Ｏ）動作を処理するプロセスを示すフローチャートである。
【００３１】
【図６Ｂ】本開示の一実施形態に係る、ｉノード先取りに関連するＩ／Ｏ動作を処理するプロセスを示すフローチャートである。
【００３２】
【図７Ａ】本開示の一実施形態に係る、ディスク上ｉノードのアクセスを処理するプロセスを示すフローチャートである。
【００３３】
【図７Ｂ】本開示の一実施形態に係る、ディスク上ｉノードにアクセスする要求を処理するプロセスを示すフローチャートである。
【００３４】
【図８】本開示の一実施形態に係る、アクセスパターントラッカ及びメタデータ先読み生成器がソフトウェア内に実装され得る態様を示す、コンピューティングシステムのブロック図である。
【００３５】
【図９】本開示の一実施形態に係る、多様なコンピューティングデバイスがネットワークを介して通信し得る態様を示す、ネットワーク化されたシステムのブロック図である。
【００３６】
本開示は、様々な修正形態及び代替形式に影響を受けるが、本開示の特定の実施形態は、図面及び詳細な説明において例として提供される。図面及び詳細な説明は、開示内容を開示された特定の形式に限定することを意図しないことを理解されたい。その代わりに、添付の請求項によって規定されるような本開示の趣旨及び範囲内にある全ての修正形態、等価物、及び代替形態を包含することが意図される。
【発明を実施するための形態】
【００３７】
序論
ファイルシステム（例えば、Ｕｎｉｘファイルシステム）を使用して、データを整理し、そのデータがどのように記憶され、及び読み出されるかを制御する。ファイルシステムは、ファイル及びディレクトリなどのデータオブジェクトを整理し、かつ記憶デバイス（例えば、ハードディスクドライブ（ＨＤＤ）、ソリッドステートドライブ（Solid State Drive、ＳＳＤ）、及び／又は同様のもの）のどの領域がどのデータオブジェクトに属するかを把握することを担う。典型的には、ファイルシステム（例えば、ファイル、ディレクトリなど）内の各データオブジェクトは、対応するノードを有する。
【００３８】
ｉノードは、ファイルシステム内のデータを位置特定するために使用されるデータ構造である。ｉノードは、データオブジェクトのデータの属性（例えば、メタデータ）及びディスクブロック位置（複数可）を記憶し、整数の数（例えば、ｉノード番号と称する）によって識別され得る。ディレクトリは、ｉノードに割り当てられた名称のリストを含むことができる。ディレクトリは、それ自体のエントリ、ディレクトリの親のエントリ、及びディレクトリの子のそれぞれに対するエントリを含む。
【００３９】
ファイルシステム内のファイルにアクセスすることは、典型的には、例えば、ファイルの内容への変更及び／又は修正を判定するために、またある場合には、所有者及び許可情報（例えば、グループＩＤ、ユーザＩＤ、許可など）を検証するために、ディスクから（例えば、不揮発性記憶ユニットから）読み取るファイルのｉノードを伴う。したがって、ファイルの内容にアクセスすることができる前に、ファイルのｉノード（メタデータ）を最初にディスクから読み取らなければならない。
【００４０】
データ動作（例えば、入力／出力（Ｉ／Ｏ）動作）は、典型的には、ディスクへの複数のｉノードのアクセスを必要とし、ディスクからのこのような「ディスク上」ｉノードを読み取ることは、（例えば、所与のＩ／Ｏ動作を完了することができる前のＩ／Ｏ待ち時間の形態で）アプリケーション性能に悪影響を及ぼす可能性がある。また、前述したように、ファイルの内容を「先読み」してメモリ（例えば、ランダムアクセスメモリ（ＲＡＭ））にロードすることによって、ファイルがその後アクセスされると、ファイルの内容をディスク（例えば、ＨＤＤ）からではなくＲＡＭから読み取るようにすることができる。したがって、このように（例えば、データアクセスを加速するために）データを先取りすることは、これらのｉノードと関連付けられたデータ（例えば、ファイル、ディレクトリなど）をメモリに事前にロードすることができる前に、これらのｉノードを「先読み」するためにｉノードのアクセスパターン（複数可）の追跡を必要とする。
【００４１】
残念ながら、ファイルデータとは異なり、ｉノードメタデータアクセスパターン（複数可）の効率的な追跡は、少なくとも２つの理由から困難である。第一に、（例えば、クラスタ内で実行される複数のアプリケーションからの）複数のＩ／Ｏ動作は、同じｉノードに同時にアクセスすることができる。複数のＩ／Ｏ動作のｉノードアクセスパターン（複数可）を追跡することは、メモリ及び計算リソース集約的であり得るとともに、著しいオーバーヘッドをもたらし得る。第二に、ｉノードアクセスパターン（複数可）の追跡はまた、同時にシステム性能に悪影響を及ぼすことなく、（例えば、先読み命令を発行することによって）そのようなｉノードの効率的な「先読み」を必要とする。
【００４２】
本明細書では、チャンクアクセス、シーケンシャルアクセス、及び非シーケンシャルアクセスに基づいて、ｉノードのアクセスパターンを追跡し、能力の中でもとりわけ、ｉノードに対する先読み命令を発行することが可能な方法、システム及びプロセスが開示される。
ｉノードアクセスパターン（複数可）を追跡して先読みを発行するシステム例
【００４３】
図１Ａは、一実施形態に係る、ｉノードのアクセスパターン（複数可）を追跡してｉノードを先取りするように構成されたコンピューティングシステム１００Ａのブロック図である。図１Ａに示すように、コンピューティングデバイス１０５はプロセッサ１１０及びメモリ１１５を含む。コンピューティングデバイス１０５は、サーバ、デスクトップ、ラップトップ、タブレットなどを含む任意のタイプのコンピューティングシステムであり得るとともに、ネットワーク１８５を介して記憶システム１４５に通信可能に結合されている。ネットワーク１８５は、任意のタイプのネットワーク及び／又は相互接続（例えば、ローカルエリアネットワーク（Local Area Network、ＬＡＮ）、ワイドエリアネットワーク（Wide Area Network、ＷＡＮ）、ストレージエリアネットワーク（Storage Area Network、ＳＡＮ）、インターネットなど）であり得る。
【００４４】
記憶システム１４５は、ハードディスク、コンパクトディスク、デジタル多用途ディスク、フラッシュメモリなどのＳＳＤメモリ、又は１つ以上のそのような物理的記憶デバイス上に実装されたボリュームなどの１つ以上の論理的記憶デバイスを含む、様々な異なる記憶デバイスを含むことができる。記憶システム１４５は、そのような記憶デバイス（例えば、ディスク１５０）のうちの１つ以上を含む。一実施形態では、ディスク１５０は不揮発性記憶ユニットである。他の実施形態では、ディスク１５０はＨＤＤ又はＳＳＤである。ディスク１５０はファイルシステム１５５を含む。ファイルシステム１５５は、任意の種類のファイルシステム（例えば、Ｕｎｉｘファイルシステム、エクステントベースのファイルシステムなど）であり得る。
【００４５】
オペレーティングシステム１２０及びアプリケーション１３５及び１４０は、メモリ１１５に記憶され、オペレーティングシステム１２０によって実行される。オペレーティングシステム１２０は、ディレクトリｉノード１３０（１）〜（Ｎ）を含む、（例えば、複数のコア内ｉノード１２６（１）〜（Ｎ）を有する）コア内ｉノードリスト１２５を更に含む。ディレクトリｉノード１３０（１）〜（Ｎ）は、例えば、コア内ｉノードリスト１２５（ファイル、ディレクトリなどのコア内ｉノードを含む）のディスク上ｉノードの親ディレクトリ表現である。ファイルシステム１５５は、構造ファイル１６０、ディレクトリデータ構造１７０及びデータ１８０を含む。構造ファイル１６０はディスク上ｉノード１６５（１）〜（Ｎ）を含み、ディレクトリデータ構造１７０はｉノードリスト１７５を含む。一実施形態では、構造ファイル１６０はｉＬｉｓｔファイルである。この実施形態では、ｉＬｉｓｔファイルは、ディスク上ｉノード（例えば、ディスク上ｉノード１６５（１）〜（Ｎ））のリスティングを保持するファイルである。
【００４６】
ファイルシステム１５５内のデータオブジェクト（例えば、ファイル、ディレクトリ及び／又は同様のもの）は、対応するｉノード（例えば、ディスク上ｉノード１６５（１）〜（Ｎ））と関連付けられている。各ディスク上ｉノードは、特定のｉノード番号を有し、（例えば、ディスク上ｉノード１６５（１）〜（Ｎ）として、及び構造ファイル１６０の一部として）ディスク１５０上に記憶される。コア内ｉノードリスト１２５は、１つ（以上）のディスク上ｉノードに対するメモリ内データ構造（又はリスト）である。コア内ｉノードリスト１２５は、ディスク上ｉノード１６５（１）〜（Ｎ）の一部として記憶されるメタデータ並びに他の付加的なメタデータを含む。
【００４７】
ファイルシステム１５５はディレクトリデータ構造１７０を含む。ディレクトリデータ構造１７０はｉノードリスト１７５を含む。データオブジェクト（例えば、ファイル、サブディレクトリなど）の親は、所与のデータオブジェクトが一部であるディレクトリである。例えば、所与のディレクトリ（例えば、／ｈｏｍｅ／ｊｏｈｎ）が４つのデータオブジェクト（例えば、それぞれパス名／ｈｏｍｅ／ｊｏｈｎ／ｆｉｌｅ１、／ｈｏｍｅ／ｊｏｈｎ／ｆｉｌｅ２、／ｈｏｍｅ／ｊｏｈｎ／ｆｉｌｅ３及び／ｈｏｍｅ／ｊｏｈｎ／ｄｉｒ１を有するｆｉｌｅ１、ｆｉｌｅ２、ｆｉｌｅ３及びｄｉｒ１）を含む場合には、これらのディレクトリエントリの親ディレクトリ（例えば、ｆｉｌｅ１、ｆｉｌｅ２、ｆｉｌｅ３及びｄｉｒ１）の親ディレクトリは「ｊｏｈｎ」である。各データオブジェクトは、また、対応する、及び／又は関連付けられたディスク上ｉノード（例えば、「ｊｏｈｎ」に対するディスク上ｉノード１６５（１）、「ｆｉｌｅ１」に対するディスク上ｉノード１６５（２）、「ｆｉｌｅ２」に対するディスク上ｉノード１６５（３）」、「ｆｉｌｅ３」に対するディスク上ｉノード１６５（４）及び「ｄｉｒ１」に対するディスク上ｉノード１６５（５）を有する。このシナリオでは、ディスク上ｉノード１６５（２）、１６５（３）、１６５（４）及び１６５（５）の親（ディレクトリ）ｉノード番号は、ディスク上ｉノード１６５（１）である（分かりやすくするために、コア内ｉノードリスト１２５内のディレクトリｉノード１３０（１）として示す）。
【００４８】
いくつかの実施形態によれば、図１Ｂは構造ファイルのブロック図１００Ｂであり、図１Ｃは構造ファイル及びコア内ｉノードのブロック図１００Ｃである。ファイルシステム１５５内のディレクトリは、タプルのリスト（例えば、＜ファイル名，ファイルのｉノード番号＞）を含む。ｉノードリスト１７５は、ファイルシステム１５５内のそのようなタプルのリストの一例である。ディスク上ｉノード１６５（１）のデータ部分は、＜ｆｉｌｅ１，ディスク上ｉノード１６５（２）＞、＜ｆｉｌｅ２，ディスク上ｉノード１６５（３）＞、＜ｆｉｌｅ３，ディスク上ｉノード１６５（４）＞及び＜ｄｉｒ１，ディスク上ｉノード１６５（５）＞を含む。図１Ｂに示すように、これらの「ディスク上」ｉノードは、構造ファイル１６０（例えば、ｉＬｉｓｔファイル）のデータとして保持される。構造ファイル１６０もファイルであるため、構造ファイル１６０はまた、固有のｉノード番号を有する独自のｉノードを有する。図１Ｃに示すように、構造ファイル１６０（１）がコア内に（例えば、メモリ１１５内に）持ち込まれると、コア内ｉノードが、構造ファイル１６０（１）（例えば、コア内ｉノードリスト１２５などのコア内ｉノードリスト内のコア内ｉノード１２６（１））のために作成される。各構造ファイル及びディスク上ｉノードは、関連付けられたコア内ｉノードを有する。
【００４９】
図２Ａは、一実施形態に係る、ｉノードのアクセスパターンを追跡してメタデータ先読み命令を発行するコンピューティングシステム２００Ａのブロック図である。図２Ａに示すように、コンピューティングデバイス１０５はメモリ１１５を含む。メモリ１１５は、キャッシュ２０５、アクセスパターントラッカ２２５及びメタデータ先読み生成器２４０を実装する。キャッシュ２０５は、コア内ｉノードリストからの１つ以上のエントリを含むグローバルｉノードリスト２１５を実装する。コア内ｉノード１２６（１）は、構造ファイル１６０（１）のために作成されるメモリ内データ構造（又はリスト）である。
【００５０】
コア内ｉノード１２６（１）はオフセットメタデータ２１０を含む。グローバルｉノードリスト２１５はグローバルメモリ内ｉノードリストである。オフセットメタデータ２１０は、ディスク上ｉノードアクセスパターンの位置情報を含み、グローバルｉノードリスト２１５（親ディレクトリリストとも称する）は、ディレクトリｉノード１３０（１）〜（Ｎ）（例えば、ディスク上ｉノードのコア内親ディレクトリｉノード番号）及びシーケンシャルフラグ２２０（１）〜（Ｎ）を含む。シーケンシャルフラグ２２０（１）〜（Ｎ）は、親ディレクトリ（例えば、コア内親ディレクトリｉノード番号によってメモリ内で識別され、図２Ａにディレクトリｉノード１３０（１）〜（Ｎ）として示す、親ディレクトリ）に対するコア内ｉノードの一部として記憶され得る。アクセスパターントラッカ２２５は、（例えば、ディスク上ｉノードのチャンクアクセスを追跡する）チャンクアクセストラッカ２３０、及び（例えば、ディレクトリ内のディスク上ｉノードのシーケンシャル及び非シーケンシャルアクセスを追跡する）ディレクトリアクセストラッカを含む。図２Ａの前述の要素を、図２Ｂ〜図２Ｅに関連してより詳細に説明する。
ｉノードのチャンクアクセスパターンの追跡例
【００５１】
図２Ｂは、一実施形態に係る、オフセットメタデータのブロック図２００Ｂである。オフセットメタデータ２１０は、最後に読み取ったメタデータチャンク２４５の終了オフセットと、現在のメタデータ読み取り動作２５０の開始オフセットと、を含む。ファイルシステム１５５はディスク１５０上にコア内ｉノード１６５（１）〜（Ｎ）を永続的に記憶するため、特定のｉノードがコア内（例えば、キャッシュ２０５内）に見つからない場合、アクセスパターントラッカ２２５の一部であるチャンクアクセストラッカ２３０は、チャンク（例えば、１ＫＢ、２ＫＢ、４ＫＢ又は他の適切なサイズ）内のディスク１５０から構造ファイル１６０内のディスク上ｉノードを読み取る。このようにして、チャンクアクセストラッカ２３０は、メタデータ（例えば、ディスク上ｉノード）のチャンクのアクセスパターンを追跡し、アプリケーション（例えば、アプリケーション１３５又はアプリケーション１４０）がシーケンシャル（又はほぼシーケンシャル）にディスク上ｉノードにアクセスしているかどうかに関する判定を容易にするように構成され得る。
【００５２】
一実施形態では、チャンクアクセストラッカ２３０は、（例えば、構造ファイル１６０内の）メタデータ記憶領域内のメタデータユニットの位置（図１Ｂに示すようなディスク上ｉノード１６５（１）〜（４）の１ＫＢチャンクの位置／終了オフセット）を判定する。チャンクアクセストラッカ２３０は、現在のメタデータ読み取り動作に対応するメタデータ記憶領域内（例えば、構造ファイル１６０内）の別の位置（例えば、開始オフセット）を判定する。メタデータ先読み生成器２４０は、次いで、データチャンクの位置と現在のメタデータ読み取り動作に対応する別の位置とを使用して、メタデータ先読み動作が必要であるかどうかを判定する。メタデータ先読み動作が必要である場合、メタデータ先読み生成器２４０はメタデータ先読み動作を発行する。
【００５３】
チャンクアクセストラッカ２３０は、構造ファイル１６０（１）と関連付けられたコア内ｉノード１２６（１）内のディスク１５０からの最後に読み取ったメタデータチャンク２４５の終了オフセット（例えば、構造ファイル１６０（１）内の論理オフセットの末端）を保持する。例えば、アプリケーション１３５及び／又はアプリケーション１４０が、ディスク上ｉノードの１ＫＢチャンクの読み取りを生じさせる（及び必要とする）ディスク１５０内のデータ１８０にアクセスしようとする場合には、チャンクアクセストラッカ２３０は、ディスク上ｉノードの１ＫＢチャンクの終了オフセット（例えば、図１Ｂに示すようなディスク上ｉノード１６５（１）〜（４）の１ＫＢチャンクの終了オフセット）を「格納値」として構造ファイル１６０（１）のコア内ｉノード１２６（１）内に格納する。
【００５４】
いくつかの実施形態では、現在のメタデータ読み取り動作２５０の開始オフセット（例えば、図１Ｂに示すようなディスク上ｉノード１６５（５））が、記憶された値（例えば、ディスク上ｉノード１６５（１）〜（４）の終了オフセット−最後に読み取ったメタデータチャンク２４５の終了オフセット）に隣接しており、メタデータ先読み生成器２４０は、構造ファイル１６０内の１ＫＢ〜２ＫＢのディスク上ｉノード（例えば、図１Ｂに示すようなディスク上ｉノード１６５（５）〜（８））をキャッシュ２０５内に取り出すメタデータ先読み命令を発行する。チャンクアクセストラッカ２３０は、ディスク上ｉノードアクセスがシーケンシャルに起こっていると判定するため、メタデータ先読み生成器２４０は、ディスク１５０からコア内ｉノードリスト１２５へ（例えば、１ＫＢ〜２ＫＢ）のディスク上ｉノードの次の１ＫＢチャンクを取り出す、メタデータ先読み命令を発行する。
【００５５】
上述のメタデータ先読み命令がトリガされた場合（例えば、現在のメタデータ読み取り動作２５０の開始オフセットが最後に読み取ったメタデータチャンク２４５の終了オフセットの隣にある場合）には、アクセスパターントラッカ２２５は、メタデータ先読み動作によって読み取られたキャッシュ２０５内の記憶された値を別の最後に読み取ったメタデータチャンクの別の終了オフセット（例えば、（発行された）メタデータ先読み命令の結果としてメタデータ先読み動作は１ＫＢ〜２ＫＢのディスク上ｉノードを先読みすることから、図１Ｂに示すような（例えば、２ＫＢにおける）ディスク上ｉノード１６５（５）〜（８））と置き換えることによって、コア内ｉノードリスト１２５内の記憶された値（例えば、ディスク上ｉノード１６５（１）〜（４）の終了オフセット−最後に読み取ったメタデータチャンク２４５の終了オフセット）を更新する。一方、現在のメタデータ読み取り動作２５０の開始オフセットが、最後に読み取ったメタデータチャンク２４５の終了オフセットに隣接しておらず、したがってメタデータ先読みがトリガされない場合、アクセスパターントラッカ２２５は、現在のメタデータ読み取り動作の終了オフセットを用いて、記憶された値（例えば、ディスク上ｉノード１６５（１）〜（４）の終了オフセット−最後に読み取ったメタデータチャンク２４５の終了オフセット）をリセットする。
【００５６】
ｉノードのチャンクアクセスパターン（複数可）を追跡することができ、メタデータ先読み命令及び／又はメタデータ先読み動作がディスクからメモリへの適用可能なｉノードを先取りしてこれらのｉノードの後続のアクセスを加速することができることが理解されるであろう。次に、ディレクトリの一部であるノードに対するｉノードに対するアクセスパターンを追跡する方法、システム、及びプロセスについて説明する。
親ディレクトリを用いてｉノードのアクセスパターンを追跡する例
【００５７】
ｉノード割り当てポリシーは、本明細書で近接位置と称する同じディレクトリ内で互いに近接したディスク上ｉノードを保持することができることが理解されよう。例えば、頻繁にアクセスされ、一緒にアクセスされるファイルのディスク上ｉノードは、同じディレクトリ内に保持され得る。ディレクトリ内のディスク上ｉノードのこの近接位置を使用して、ｉノードのディレクトリアクセスを追跡することができる。例えば、グローバルｉノードリスト２１５（又は親ディレクトリリスト）を作成及び保持してディスク上ｉノードのアクセスを追跡することができる。
【００５８】
図２Ｃは、そのようなグローバルｉノードリストの内容を示す表２００Ｃであり、図２Ｄは、特定の実施形態に係る、グローバルｉノードリストを使用するディレクトリアクセストラッカ２３５のブロック図２００Ｄである。グローバルｉノードリスト２１５（ディレクトリ２６５（１）〜（Ｎ）の親ディレクトリリストである）は、ディレクトリｉノードフィールド２５５及びシーケンシャルフラグフィールド２６０を含む。グローバルｉノードリスト２１５は、メモリ内に作成及び保持され、ディレクトリｉノード１３０（１）〜（Ｎ）及びシーケンシャルフラグ２２０（１）〜（Ｎ）を含む。シーケンシャルなフラグは、親ディレクトリに対するコア内ｉノードの一部として記憶され得る。ディレクトリアクセストラッカ２３５は、シーケンシャルディレクトリアクセストラッカ２７０及び非シーケンシャルディレクトリアクセストラッカ２７５を含む。
【００５９】
一実施形態では、アプリケーションは、ｉノード（例えば、ディスク上ｉノード１６５（４））にアクセスする。ディレクトリアクセストラッカ２３５は、ノードの親ディレクトリ（例えば、ディレクトリ２６５（１））を判定し、ディレクトリのエントリがグローバルｉノードリスト２１５内に存在するかどうかを判定する。ディレクトリのエントリがグローバルｉノードリスト２１５に存在する場合、ディレクトリアクセストラッカ２３５は、ディレクトリのファイル構造がシーケンシャルであるか非シーケンシャルであるかを判定する（例えば、そのディレクトリ内のディスク上ｉノードがリストされているかどうか、したがって、シーケンシャル又は非シーケンシャルにアクセスされているかどうかを判定することによって）。ディレクトリのエントリがグローバルｉノードリスト２１５内に存在しない場合、ディレクトリアクセストラッカ２３５は、グローバルｉノードリスト２１５内の親ディレクトリｉノードの新たなエントリを追加する。図１Ａ、２Ａ、２Ｃ及び３Ｃに示すように、ディレクトリｉノード（例えば、ディレクトリｉノード１３０（１）〜（Ｎ））は、（例えば、個々のファイルの代わりに）親ディレクトリを表すディスク上ｉノードの単にディレクトリ特有の表現であることに留意すべきである。例えば、ディレクトリｉノード１３０（１）は、１つ以上のディスク上ｉノードの親ディレクトリを表すメモリ内データ構造である。
【００６０】
ディスク上ｉノードのシーケンシャルディレクトリアクセスを追跡するために、シーケンシャルディレクトリアクセストラッカ２７０は、所与のディスク上ｉノードの親ディレクトリを最初に見つける（例えば、親ディレクトリのｉノード番号を見つける）。例えば、ディスク上ｉノード１６５（４）がディスク１５０から読み取られる場合、シーケンシャルディレクトリアクセストラッカ２７０はディスク上ｉノード１６５（４）（例えば、ディレクトリｉノード１３０（１））の親ディレクトリを見つける。次いで、シーケンシャルディレクトリアクセストラッカ２７０は、所与のディスク上ｉノードの親ディレクトリ（ｉノード）のエントリ（例えば、親ディレクトリｉノード番号がキャッシュ２０５内に存在するかどうか）のグローバルｉノードリスト２１５を探索する。
【００６１】
親ディレクトリ（ｉノード）のエントリがグローバルｉノードリスト２１５に存在する場合、シーケンシャルディレクトリアクセストラッカ２７０は、グローバルｉノードリスト２１５をチェックして、親ディレクトリがシーケンシャルフラグセット（例えば、この場合に、図２Ｃに示すように、親ディレクトリｉノード番号であり、ディレクトリシーケンシャルフラグセットを有するｉノード１３０（１））を有するか否かを判定する。シーケンシャルフラグが設定されている場合、メタデータ先読み生成器２４０はメタデータ先読み命令を発行する（例えば、ディスク上ｉノードアクセスがシーケンシャルであるため、ディレクトリ２６５（１）内の全ての残りのディスク上ｉノードを取り出す）。シーケンシャルディレクトリアクセストラッカ２７０がグローバルｉノードリスト２１５内の親ディレクトリのエントリを見つけない場合、シーケンシャルディレクトリアクセストラッカ２７０は、親ディレクトリのｉノード番号の新たなエントリをグローバルｉノードリスト２１５に追加する。
【００６２】
ディスク上ｉノードの非シーケンシャルディレクトリアクセスを追跡するために、非シーケンシャルディレクトリアクセストラッカ２７５は、所与のディスク上ｉノードの親ディレクトリ（例えば、親ディレクトリのｉノード番号）を最初に見つける。次に、非シーケンシャルディレクトリアクセストラッカ２７５は、親ディレクトリの既存のエントリに対するグローバルｉノードリスト２１５（例えば、親ディレクトリｉノード番号がキャッシュ２０５内に存在するかどうか）を探索する。親ディレクトリのエントリがグローバルｉノードリスト２１５に存在する場合、非シーケンシャルディレクトリアクセストラッカ２７５は、ディスク１５０からキャッシュ２０５へ親ディレクトリのｉノードリスト（例えば、問題の親ディレクトリに適用可能なｉノードリスト１７５の部分又は一部）を取り出し（又は読み出し）、メタデータ先読み生成器２４０は、読み出されたｉノードリスト（例えば、親ディレクトリと関連付けられたかつその一部であるディスク上ｉノード）上にリストされたディスク上ｉノードに対するメタデータ先読み命令を発行する。親ディレクトリのエントリがグローバルｉノードリスト２１５に存在しない場合、非シーケンシャルディレクトリアクセストラッカ２７５は、親ディレクトリのｉノード番号の新たなエントリをグローバルｉノードリスト２１５に追加する。
Ｉノードに対するメタデータ先読み命令の発行例
【００６３】
図２Ｅは、一実施形態に係る、メタデータ先読み生成器のブロック図２００Ｅである。メタデータ先読み生成器２４０は、コンピューティングデバイス１０５によって実装され、発行されたメタデータ先読み値２８０及び非同期メタデータ先読み命令２８５を記憶し、待ち行列生成器２９０を含む。ディレクトリアクセストラッカ２３５は先取りする１つ以上のディスク上ｉノードを識別するが、これらのディスク上ｉノードが先取りされない場合、これらのディスク上ｉノードと関連付けられたＩ／Ｏ動作を完了することができない。
【００６４】
したがって、一実施形態では、メタデータ先読み生成器２４０は、Ｉ／Ｏ動作（例えば、読み出し動作又は書き込み動作）に応答して、ディスク上ｉノードを読み取るコマンドをインターセプトする。データにアクセスするＩ／Ｏ動作は、そのデータと関連付けられたディスク上ｉノード（複数可）（例えば、メタデータ）に、（例えば、要求されたデータが変更されたか、どのように変更されたかなどを判定するなどのために）アクセスし、それを読み出すコマンドを生じる（又は生じさせる）ことができる。メタデータ先読み生成器２４０は、発行されたメタデータ先読み値２８０と、コマンド内のチャンク合計とを比較することによって、メタデータ先読み動作において、発行されたメタデータ先読み値２８０を解析する。
【００６５】
発行されたメタデータ先読み値２８０は、（例えば、シーケンシャル／ほぼシーケンシャルなチャンクアクセス及び／又はディレクトリ内のディスク上ｉノードのシーケンシャル又は非シーケンシャルアクセスに基づいて検出される）先読みされるべき全てのディスク上ｉノードを含む。チャンク合計は、先読みするディスク上ｉノードのチャンクの総数である（例えば、説明目的のために本明細書では整数「Ｎ」として表される）。例えば、チャンクアクセストラッカ２３０及びシーケンシャルディレクトリアクセストラッカ２７０は、ディスク上ｉノードの１ＫＢチャンク（例えば、ディスク上ｉノード１６５（１）〜（４））又はディスク上ｉノードの２ｋチャンク（例えば、ディスク上ｉノード１６５（１）〜（８））は、（例えば、シーケンシャル／ほぼシーケンシャルなチャンクアクセス、及び／又はディレクトリ内のディスク上ｉノードのシーケンシャル又は非シーケンシャルアクセスに基づいて）先読みされなければならないと識別及び判定することができる。しかしながら、上述したように、非シーケンシャルなディレクトリアクセストラッカ２７５は、（例えば、図３Ｂのディレクトリ２６５（２）の場合に示すように）先読みする（例えば、様々な異なるチャンクの一部であり得る）いくつかの非シーケンシャルなディスク上ｉノードを識別することができる。したがって、特定のシナリオでは、発行されたメタデータ先読み値２８０は、Ｎに等しくても等しくなくてもよいことが理解されるであろう。
【００６６】
いくつかの実施形態では、メタデータ先読み生成器２４０は、メタデータ先読み値２８０とコマンド内のチャンク合計とを比較することに基づいて、Ｉ／Ｏ動作が完了するのを待つか、又は非同期メタデータ先読み命令２８５を発行する。Ｉ／Ｏ動作が完了している場合、待ち行列生成器２９０は、待ち行列を生成し、非同期メタデータ先読み命令２８５に含まれないチャンク合計のメタデータの残りのチャンクを含む。一方、Ｉ／Ｏ動作が完了していない場合、待ち行列生成器２９０は、メタデータ先読み動作においてチャンク合計を更新する。
【００６７】
例えば、（例えば、アプリケーション１３０によって）Ｉ／Ｏ動作が発行された後、ディスク１５０に進むディスク上ｉノードを読み取るコマンド（又は要求）がインターセプトされる。このコマンドは、上述のｉノードアクセスパターン検出方法（例えば、シーケンシャル／ほぼシーケンシャルなチャンクアクセス、及び／又はディレクトリ内のディスク上ｉノードのシーケンシャル又は非シーケンシャルアクセス）をトリガする。ｉノードアクセスパターン検出方法がディスク上ｉノードの先読みをトリガしない場合、メタデータ先読み生成器２４０は単にＩ／Ｏ動作が完了するのを待つ。一方、ｉノードアクセスパターン検出方法がディスク上ｉノードの先読みをトリガする場合、メタデータ先読み生成器２４０は、合計の発行されたメタデータ先読み（例えば、発行されたメタデータ先読み値２８０）がＮ（例えば、先読みするディスク上ｉノードのチャンクの総数）以下であるか否かを判定する。
【００６８】
合計の発行されたメタデータ先読みがＮ以下である場合、メタデータ先読み生成器２４０は、非同期メタデータ読み取りの次のチャンク（例えば、Ｎの後の発行されたメタデータ先読み値２８０の次のチャンク）を有する非同期メタデータ先読み命令２８５を発行する。元のＩ／Ｏ動作が完了している場合、待ち行列生成器２９０は、非同期メタデータ読み取りの残りのチャンク（例えば、Ｎの後の発行されたメタデータ先読み値２８０の残りのチャンク）を有する非同期メタデータ先読み命令２８５を発行する別個のスレッドを生成する。元のＩ／Ｏ動作が完了していない場合、メタデータ先読み生成器２４０は、発行されたメタデータ先読み値２８０のカウンタをインクリメントし、発行されたメタデータ先読み値２８０がＮに等しいかどうかを判定し、元のＩ／Ｏ動作が完了するのを待つ。
【００６９】
メタデータ先読み検出と非同期メタデータ先読み命令の発行とはブロックスレッドのコンテキストで実行される一方、元のＩ／Ｏ動作はバックグラウンドで完了するのを待っていることが理解されるであろう。これらの方法は、システム性能上のｉノードアクセスパターン検出オーバーヘッドを減少させ、また、別個のスレッドの作成及びスケジューリングを回避し、これによって後続の読み取りのためのブロックの可用を遅延させることができる。
ｉノードのシーケンシャル及び非シーケンシャルディレクトリアクセスパターンの追跡例
【００７０】
いくつかの実施形態によれば、図３Ａはシーケンシャルなｉノード構造３００Ａを有するディレクトリのブロック図であり、図３Ｂは非シーケンシャルなｉノード構造３００Ｂを有するディレクトリのブロック図であり、図３Ｃはグローバルなｉノードリスト（例えば、親ディレクトリリスト又はグローバルなメモリ内ｉノードリスト）を実装するキャッシュ３００Ｃのブロック図である。ディレクトリのリスティングは、最初に、アプリケーションによって（例えば、アプリケーション１３５、アプリケーション１４０又は何らかの他のアプリケーションによって）実行されることが理解されるであろう。ディレクトリのリスティング中に、各ディレクトリエントリと関連付けられたディスク上ｉノード番号が返される。所与のディレクトリ内のディスク上ｉノード番号がシーケンシャルである場合（例えば、図３Ａに示されるようなディレクトリ２６５（１））には、シーケンシャルディレクトリアクセストラッカ２７０は、そのディレクトリのコア内ｉノード内のその特定のディレクトリのシーケンシャルフラグを設定する（例えば、図２Ｃ及び図３Ｃに示すように、ディレクトリ２６５（１）のシーケンシャルフラグがグローバルｉノードリスト２１５に設定される）。
【００７１】
例えば、ディレクトリ２６５（１）のディスク上ｉノードがシーケンシャルである（例えば、ディスク上ｉノード１６５（４）〜（９）がシーケンシャルにリストされる）ため、シーケンシャルディレクトリアクセストラッカ２７０は、（例えば、図２Ｃ及び図３Ｃにおいてグローバルｉノードリスト２１５のシーケンシャルフラグフィールド２６０内で「１」によって示される）ディレクトリ２６５（１）に対するディレクトリｉノード１３０（１）内（例えば、コア内ｉノード内）にシーケンシャルフラグを設定する。これに対して、ディレクトリ２６５（２）のディスク上ｉノードは非シーケンシャルである（例えば、ディスク上ｉノード１６５（４）、１６５（９）、１６５（１５）、１６５（１１）、１６５（１９）及び１６５（６）は非シーケンシャルにリストされる）ため、非シーケンシャルディレクトリアクセストラッカ２７５は、（例えば、図２Ｃ及び図３Ｃにおいてグローバルｉノードリスト２１５のシーケンシャルフラグフィールド２６０内で「０」によって示される）ディレクトリ２６５（２）のディレクトリｉノード１３０（２）内（例えば、コア内ｉノード内）にシーケンシャルフラグを設定しない。
【００７２】
前述したように、メタデータ先読み動作を実行するメタデータ先読み命令は、ディレクトリのリスティングが実行された後に発行され得る。一実施形態では、アプリケーションはディスク１５０の一部であるディレクトリのリスティングを実行する。例えば、図３Ｂに示すようなディレクトリ２６５（２）のリスティングは、ディスク上ｉノード１６５（４）を有するファイル３１５（１）、ディスク上ｉノード１６５（９）を有するファイル３１５（２）、ディスク上ｉノード１６５（１５）を有するファイル３１５（３）、ディスク上ｉノード１６５（１１）を有するファイル３１５（４）、ディスク上ｉノード１６５（１９）を有するファイル３１５（５）及びディスク上ｉノード１６５（６）を有するファイル３１５（６）を返す。このシナリオでは、ディレクトリアクセストラッカ２３５は、前述のｉノード番号（例えば、ディスク上ｉノード１６５（４）、１６５（９）、１６５（１５）、１６５（１１）、１６５（１９）及び１６５（６））のリストを含むメモリ内データ構造（例えば、メモリ内ｉノードリスト）を作成して保持し、このメモリ内ｉノードリストをディレクトリ２６５（２）のコア内ｉノード（例えば、ディレクトリｉノード１３０（２））と関連付ける。
【００７３】
例えば、アプリケーション１３０がファイル３１５（１）にアクセスし、したがってディスク上ｉノード１６５（４）にアクセスして読み取る必要がある場合、非シーケンシャルディレクトリアクセストラッカ２７５は、ディスク１５０からディスク上ｉノード１６５（４）を読み取り、ディスク上ｉノード１６５（４）の親ディレクトリｉノード番号がディレクトリｉノード１３０（２）であると判定する。次に、非シーケンシャルディレクトリアクセストラッカ２７５は、図３Ｃに示すように、ディレクトリｉノード１３０（２）がキャッシュ２０５内に存在するかどうかをチェックする。ディレクトリｉノード１３０（２）がキャッシュ２０５内に存在しない場合、非シーケンシャルディレクトリアクセストラッカ２７５は、（例えば、図２Ｃ及び図３Ｃに太字で示される）ディレクトリｉノード１３０（２）をキャッシュ２０５に追加する。
【００７４】
次に、アプリケーション１３０が、ファイル３１５（２）にアクセスし、したがってディスク１５０からディスクｉノード１６５（９）にアクセスして読み取る場合、非シーケンシャルディレクトリアクセストラッカ２７５は、ディスク上ｉノード１６５（９）の親ディレクトリｉノード番号もディレクトリｉノード１３０（２）であると判定する。ディレクトリｉノード１３０（２）がキャッシュ２０５に追加されているため、メタデータ先読み生成器２４０は、ディレクトリ２６５（２）下の残りのファイル（例えば、ファイル３１５（３）〜（６））は先読み可能であると判定する。次いで、メタデータ先読み生成器２４０は、メモリ内ｉノードリストにアクセスし、ファイル３１５（３）〜（６）（例えば、ディスク上ｉノード１６５（１５）、１６５（１１）、１６５（１９）及び１６５（６））と関連付けられた残りのディスク上ｉノード番号を識別し、ディスク上ｉノード１６５（１５）、１６５（１１）、１６５（１９）及び１６５（６）をディスク１５０からメモリ１１５へ取り出すようにメタデータ先読み動作を起こすメタデータ先読み命令を生成する。
【００７５】
ディレクトリアクセストラッカ２３５は、ディスク上ｉノードのチャンクアクセスパターン（複数可）、並びに、ディレクトリの一部であるディスク上ｉノードのシーケンシャル及び非シーケンシャルアクセスパターン（複数可）を追跡して、ｉノード及びデータアクセスを加速するメタデータ先読み動作の候補であるディスク上ｉノードを識別することが理解されるであろう。
ｉノードアクセスパターン（複数可）を追跡してメタデータ先読み命令を発行するプロセス
【００７６】
図４Ａは、一実施形態に係る、ディスクからメモリへディスク上ｉノードを先取りする先読み命令を発行するプロセスを示すフローチャート４００Ａである。プロセスは、４０５において、メタデータ記憶領域（例えば、構造ファイル１６０）にアクセスすることによって開始する。４１０において、プロセスは、最後に読み取ったメタデータチャンクの位置（例えば、最後に読み取ったメタデータチャンク２４５の終了オフセット）を判定する。４１５において、プロセスは、（例えば、ディスク上ｉノードを読み取る）コマンド（又は要求）が受信されたかどうかを判定する。コマンドがまだ受信されていない場合、プロセスは４１５にループバックする。一方、コマンドが受信された場合、プロセスは、４２０において、メタデータ記憶領域内のコマンドのオブジェクトの位置（例えば、現在のメタデータ読み取り動作２５０の開始オフセット）を判定する。
【００７７】
４２５において、プロセスは、メタデータ先読みが実行され得るかどうか（又は、メタデータ先読みが必要又は実行可能であるかどうか）を判定する。メタデータ先読みが実行できない場合、プロセスは、４３０において、通常の処理を可能にする（例えば、メタデータ先読み動作は実行されず、ディスク上ｉノードはディスクからメモリへ先取りされない）。一方、メタデータ先読みが実行できる（及び／又は必要及び／又は実行可能である）場合、プロセスは、４３５において、メタデータ先読み動作を発行する（又は、例えばメタデータ先読み生成器２４０を用いてメタデータ先読み命令を発行して、コンピューティングデバイス１０５にメタデータ先読み動作を実行させてディスクからメモリへディスク上ｉノードのチャンク（複数可）を取り出す）。４４０において、プロセスは、（例えば、ディスク上ｉノードにアクセスし、及び／又はこれを読み取る）新たなコマンドが存在するかどうかを判定する。ディスク上ｉノードにアクセスし、及び／又はこれを読み取る新たなコマンドが存在する場合、プロセスは４０５にループバックする。そうでない場合、プロセスは終了する。
【００７８】
図４Ｂは、一実施形態に係る、ディスク上ｉノードと関連付けられたオフセットメタデータを記憶するプロセスを示すフローチャート４００Ｂである。プロセスは、４４５において、メタデータ記憶領域（例えば、構造ファイル１６０）内のメタデータチャンクのオフセット位置（例えば、最後に読み取ったメタデータチャンク２４５の終了オフセット）を判定することによって開始する。４５０において、プロセスは、メモリ（例えば、メモリ１１５）内のコア内ｉノード（例えば、コア内ｉノードリスト１２５）を作成し、４５５において、プロセスは、コア内ｉノード内のメタデータチャンクのオフセット位置を記憶する。
【００７９】
４５５において、プロセスは、現在のメタデータ読み取り動作の位置（例えば、現在のメタデータ読み取り動作２５０の開始オフセット）が、メタデータチャンクのオフセット位置の隣にある（又は隣接している）かどうかを判定する。現在のメタデータ読み取り動作の位置が、メタデータチャンクのオフセット位置の隣にない場合、プロセスは、４６５において、現在のメタデータ読み取り動作によって読み取られたメタデータチャンクのオフセット位置（例えば、現在のメタデータ読み取り動作の終了オフセット）を記憶する。一方、現在のメタデータ読み取り動作の位置がメタデータチャンクのオフセット位置の隣にある場合、プロセスは、４７０において、メタデータ先読み動作を発行し（又はメタデータ先読み命令を発行し）、４７５において、メタデータ先読み動作によって読み取られたメタデータチャンクのオフセット位置を記憶する。４８０において、プロセスは、新たな読み取り要求（例えば、アプリケーションＩ／Ｏ動作によって引き起こされるディスク上ｉノードを読み取るコマンド）が存在するか否かを判定する。ディスク上ｉノードを読み取る新たな読み取り要求がある場合、プロセスは４６０にループバックする。そうでない場合、プロセスは終了する。
【００８０】
図４Ａのフローチャート４００Ａ及び図４Ｂのフローチャート４００Ｂに示されるプロセスは、ディスク上ｉノードのチャンクアクセスパターンを追跡する例であることが理解されるであろう。ディスク上ｉノードはディスク（例えば、ディスク１５０）上に永続的に記憶されているため、チャンクアクセストラッカ２３０は、構造ファイル１６０にアクセスして、最後に読み取ったメタデータチャンクの終了オフセット、並びに現在のメタデータ読み取り動作の開始オフセットを判定することができる。チャンクアクセストラッカ２３０はこの位置情報を保存することができるため、チャンクアクセストラッカ２３０は、ディスク上ｉノードがアプリケーション１３５又はアプリケーション１４０によってシーケンシャル又はほぼシーケンシャルにアクセスされているかどうかを判定することができる。この記憶された位置情報に基づいて、アクセスされる可能性が高いディスク上ｉノードは、先読みされ、ディスクからメモリへと先取りされ、したがって、それらのディスク上ｉノードに対する後続のｉノードアクセスを加速することができる。
【００８１】
図５Ａは、一実施形態に係る、ディレクトリのファイル構造を判定するプロセスを示すフローチャート５００Ａである。当該プロセスは、５０５において、ディレクトリ内のファイル（例えば、図３Ａに示すようなディレクトリ２６５（１）のファイル１３５（１）、又は図３Ｂに示すようなディレクトリ２６５（２）内のファイル１３５（１））にアクセスすることによって開始する。５１０において、プロセスは、ディレクトリのエントリ（例えば、ｉノード番号）のグローバルｉノードリストを探索する。５１５において、プロセスは、ディレクトリがグローバルｉノードリスト内に存在するか否か（例えば、ディレクトリ番号２６５（１）のｉノード番号であるディレクトリｉノード１３０（１）が存在し、グローバルｉノードリスト２１５にリストされているかどうか）を判定する。
【００８２】
ディレクトリがグローバルｉノードリスト内に存在しない場合、プロセスは、５２０において、グローバルｉノードリスト内のディスク上ｉノード（例えば、図２Ｃ及び図３Ｃのディレクトリ２６５（３）に関して示される）の新たなエントリを追加する（例えば、親ディレクトリｉノード番号を追加する）。ディレクトリがグローバルｉノードリスト内に存在する場合、プロセスは、５２５において、ディレクトリのファイル構造（例えば、ディレクトリ内のディスク上ｉノードがシーケンシャルに又は非シーケンシャルにリストされているかどうか）を判定する。５３０において、プロセスは、ディスク上ｉノードの別のアクセスがあるかどうかを判定する。ディスク上ｉノードの別のアクセスがある場合、プロセスは５０５にループバックする。そうでない場合、プロセスは終了する。
【００８３】
図５Ｂは、一実施形態に係る、ディスク上ｉノードのメタデータ先読み命令を発行するプロセスを示すフローチャート５００Ｂである。当該プロセスは、所与のディレクトリ内のエントリのディスク上ｉノード番号がシーケンシャルであるか非シーケンシャルである（例えば、ディレクトリのリスティングを実行した結果としてシーケンシャル又は非シーケンシャルにリストされる）かを判定することによって、５３５において開始する。例えば、図３Ａでは、エントリのディスク上ｉノード番号がシーケンシャルにリストされ、図３Ｂでは、エントリのディスク上ｉノード番号が非シーケンシャルにリストされる。
【００８４】
エントリのディスク上ｉノード番号が非シーケンシャルにリストされる場合、プロセスは、５４０において、グローバルｉノードリスト（例えば、図３Ｃに示すような親ディレクトリリスト）にアクセスする。５４５において、プロセスは、グローバルｉノードリスト上の親ディレクトリノードを、（例えば、ディスク上ｉノードの親ディレクトリｉノード番号を使用して）識別する。５５０において、プロセスは、問題のディレクトリと関連付けられたｉノードリストを、（ｉノードリストがリスティングプロセス中にメモリに記憶及び保持され得るため、ディスク１５０から、又はメモリから）取り出し、５５５において、ｉノードリスト上のディスク上ｉノードに対するメタデータ先読み命令を発行する。
【００８５】
一方、エントリのディスク上ｉノード番号がシーケンシャルにリストされる場合、プロセスは、５６０において、グローバルｉノードリストにアクセスし、５６５において、（例えば、ディスク上ｉノードの親ディレクトリ番号を使用して）グローバルｉノードリスト上でアクセスされるファイルの親ディレクトリのメモリ内ｉノードを識別する。５７０において、プロセスは、ディレクトリがシーケンシャルフラグセットを有することを検証し、５７５において、問題のディレクトリにリストされた残りのディスク上ｉノードに関するメタデータ先読み命令を発行する。５８０において、プロセスは、ディスク上ｉノード（複数可）の別のアクセスがあるかどうかを判定する。ディスク上ｉノード（複数可）の別のアクセスがある場合、プロセスは５３５にループバックする。そうでない場合、プロセスは終了する。
【００８６】
図５Ａのフローチャート５００Ａ及び図５Ｂのフローチャート５００Ｂに示すプロセスは、ディレクトリが関与しているときに、ディスク上ｉノードのアクセスパターン（複数可）を追跡するための親ディレクトリリストを使用する例であることが理解されるであろう。前述のように、アプリケーションは、１つ以上のディレクトリのリスティングを実行して、所与のディレクトリ内のディスク上ｉノードがシーケンシャル又は非シーケンシャルにリストされているかを判定することができる。ディレクトリは典型的にはディスク（例えば、ディスク１５０）上に記憶されているため、所与のディレクトリにファイルがアクセスされるたびにディレクトリのデータ及び／又はファイル構造を判定することは、著しいコンピューティングリソースを消費する可能性がある。しかしながら、アクセスパターントラッカ２２５と親ディレクトリリストとの両方はメモリ１１５の一部であるため、また親ディレクトリリストは複数のディレクトリのデータ及び／又はファイル構造のリスティングを保持するため、アクセスパターントラッカ２２５は、親ディレクトリリストを単に使用して、所与のディレクトリ内のファイルがアクセスされるたびにディスク１５０にアクセスすることなく、所与のディレクトリのコア内ｉノードがシーケンシャルであるか非シーケンシャルであるかを判定することができる。
【００８７】
図６Ａは、一実施形態に係る、入力／出力（Ｉ／Ｏ）動作を処理するプロセスを示すフローチャート６００Ａである。当該プロセスは、６０５において、ディスク上ｉノード（例えば、構造ファイル１６０内のメタデータユニット）と関連付けられたメタデータチャンクに対して発行されたＩ／Ｏ動作を検出することによって開始する。６１０において、プロセスは、Ｉ／Ｏ動作が検出されるかどうかを判定する。Ｉ／Ｏ動作が検出されない場合、プロセスは６０５に戻る。一方、Ｉ／Ｏ動作が検出される場合、プロセスは、６１５において、ディスク上ｉノード（複数可）にアクセスし、及び／又はこれを読み出すコマンド（又は要求）をインターセプトする。
【００８８】
６２０において、プロセスは、メタデータ先読み動作のメタデータ先読み値にアクセスし、６２５において、（発行された合計）メタデータ先読み値と、先読みするメタデータチャンクの総数とを比較することによって、メタデータ先読み値を解析する。６３０において、プロセスは、Ｉ／Ｏ動作が完了するのを待っており、６３５において、非同期メタデータ先読み命令（例えば、メタデータ先読み生成器２４０を使用して）を発行する。６４０において、プロセスは、別のＩ／Ｏ動作が存在するかどうかを判定する。別のＩ／Ｏ動作が存在する場合、プロセスは６０５にループする。そうでない場合、プロセスは終了する。
【００８９】
図６Ｂは、一実施形態による、ｉノードを先取りすることに関連するＩ／Ｏ動作を処理するプロセスを示すフローチャートである。当該プロセスは、６４５において、所与のＩ／Ｏ動作が完了しているかどうかを判定することによって開始する。Ｉ／Ｏ動作が完了していない場合、プロセスは、６５０において、チャンク合計を更新する（例えば、先読みするメタデータチャンクの総数、又は「Ｎ」）を更新し、６２５に進む（図６Ａ）。一方、Ｉ／Ｏ動作が完了している場合、プロセスは、６６０において、待ち行列（例えば、別個のスレッド）を生成し、６６５において、（例えば、図６Ａの）非同期メタデータ先読み命令に含まれないメタデータの残りのチャンクを含むメタデータ先読みを発行する。６７０において、プロセスは、インターセプトされる別のコマンド（例えば、ディスク上ｉノード（複数可）を読み取る要求）が存在するかどうかを判定する。インターセプトされる別のコマンドが存在する場合、プロセスは、（図６Ａ内の）６１５に戻る。そうでない場合、プロセスは終了する。
【００９０】
図６Ａのフローチャート６００Ａ及び図６Ｂのフローチャート６００Ｂに示すプロセスを使用して、発行されたメタデータ先読み値とチャンク合計とを比較することによって、メタデータの様々な異種チャンクの一部であるディスク上ｉノードを識別して先取りすることができることが理解されるであろう。ｉノードリストの全て又は一部をディレクトリリスティングプロセス中にメモリに先取りすることができるため、メタデータ先読み命令の候補であるディスク上ｉノードは、そのようなディスク上がシーケンシャルにアクセスされない場合に識別され得る。また、メタデータ先読み検出と非同期メタデータ先読み命令の発行とはブロックスレッドのコンテキストで実行される一方、元のＩ／Ｏ動作はバックグラウンドで完了するのを待っていることが理解されるであろう。これらの方法は、システム性能上のｉノードアクセスパターン検出オーバーヘッドを減少させ、また、別個のスレッドの作成及びスケジューリングを回避し、これによって後続の読み取りのためのブロックの可用を遅延させることができる。
【００９１】
図７Ａは、特定の実施形態に係る、ディスク上ｉノードのアクセスを処理し、ディレクトリのエントリをグローバルｉノードリストに追加するプロセスを示すフローチャートである。このプロセスは、７０５において、ディスク上ｉノードのアクセス（複数可）（例えば、１つ以上のＩ／Ｏ動作によって引き起こされるディスク上ｉノード（複数可）の読み出しコマンド／要求）が存在するかどうかを判定することによって開始する。ディスク上ｉノード（複数可）のアクセスがない場合、プロセスは７０５にループバックする。一方、ディスク上ｉノード（複数可）のアクセスが存在する場合、プロセスは、７１０において、（例えば、親ディレクトリｉノード番号を使用して）ディスク上ｉノード（複数可）と関連付けられたディレクトリを識別する。７１５において、プロセスは、グローバルｉノードリスト（例えば、グローバルｉノードリスト２１５及び／又は親ディレクトリリスト）にアクセスする。
【００９２】
７２０において、プロセスは、ディレクトリがグローバルｉノードリスト上にあるか否か（例えば、ｉノードの親ディレクトリｉノード番号がグローバルｉノードリスト上に存在するかどうか）を判定する。ディレクトリがグローバルｉノードリスト上にない場合、プロセスは、７２５において、（例えば、ノードの親ディレクトリｉノード番号のエントリをグローバルｉノードリストに追加することによって）グローバルｉノードリストにディレクトリを追加する。一方、ディレクトリがグローバルｉノードリスト上にある場合、プロセスは、７３０において、シーケンシャルフラグがディレクトリに対して設定されていることを検証し、７３５において、（例えば、ディレクトリ（又はディレクトリの一部）にリストされた）メタデータ先読み命令を発行する。７４０において、プロセスは、ディスク上ｉノード（複数可）の別のアクセスが存在するかどうかを判定する。別のアクセスが存在する場合、プロセスは７０５にループバックする。そうでない場合、プロセスは終了する。
【００９３】
図７Ｂは、一実施形態に係る、ディスク上ｉノードにアクセスする要求を処理するプロセスを例示するフローチャートである。プロセスは、７４５において、Ｉ／Ｏ動作を検出することによって開始する。７５０において、プロセスは、ディスク上ｉノード（複数可）にアクセスする（又は読み取る）コマンド（又は要求）をインターセプトする。７５５において、プロセスは、（例えば、方法の中でもとりわけ、チャンクアクセス、及びシーケンシャル又は非シーケンシャルアクセスに基づいて検出された）ディスク上ｉノードアクセスパターンが、ディスク上ｉノード（複数可）のメタデータ先読みをトリガし、引き起こし、又はもたらすかどうかを判定する。ディスク上ｉノードアクセスパターンが、（例えば、チャンクアクセス、シーケンシャルアクセス又は非シーケンシャルアクセスに基づいて）メタデータ先読みをトリガしない場合、プロセスは、７６０において、Ｉ／Ｏ動作が完了するのを待つ。Ｉ／Ｏ動作が完了するのを待つプロセス例が、図６Ｂのフローチャート６００Ｂに示されていることに留意されたい。
【００９４】
一方、ディスク上ｉノードアクセスパターンがメタデータ先読みをトリガする場合、プロセスは、７６５において、チャンク合計（例えば、先読みするディスク上ｉノードメタデータチャンクの総数、又は「Ｎ」）が、メタデータ先読み値（例えば、発行されたメタデータ先読み値２８０又は合計の発行されたメタデータ先読み値）以下であるかどうかを判定する。チャンク合計がメタデータ先読み値以上である場合、プロセスは、７６０において、Ｉ／Ｏ動作が完了するのを待つ。一方、チャンク合計がメタデータ先読み値以下である場合、プロセスは、７７０において、非同期メタデータ先読みの次のチャンクを発行し、７７５において、Ｉ／Ｏ動作が完了しているかどうかを判定する。Ｉ／Ｏ動作が完了していない場合、プロセスは、７８０において、（例えば、発行されたメタデータ先読みに対する）カウンタをインクリメントし、７６５にループバックする。一方、Ｉ／Ｏ動作が完了している場合、プロセスは、７８５において別個のスレッドを生成し、非同期メタデータ先読みの残りのチャンクを発行する。７９０において、プロセスは、別のＩ／Ｏ動作が存在するかどうかを判定する。別のＩ／Ｏ動作が存在する場合、プロセスは７４５にループバックする。そうでない場合、プロセスは終了する。
【００９５】
典型的には、Ｉ／Ｏ動作がブロックされる場合、スレッドはそれ以上進行しない。ｉノードアクセスパターン検出及びメタデータ先読み生成の方法、システム及びプロセスは、ブロックスレッドのコンテキストで実行され（及び元のＩ／Ｏがバックグラウンドで完了するのを待っている間）、システム性能に対するｉノードアクセスパターン検出オーバーヘッドが低減されることが理解されるであろう。加えて、元のＩ／Ｏ動作が完了することを可能にすることは、また、別個のスレッドを作成及びスケジューリングするコストを回避することができる（これにより後続の読み取り動作に対するデータブロックの可用を遅延させることができる）。
【００９６】
また、属性などの他のデータ構造がノードと関連付けられ得ることに留意されたい。本明細書に記載される、ｉノードアクセスパターン検出及び発行メタデータ先読み命令に関連する方法、システム及びプロセスは、メモリ内のこれらの（他の）データ構造をプレポピュレートすることができ、様々なｉノードロックを非同期的に初期化することができる。したがって、本明細書に記載される方法、システム及びプロセスは、能力の中でもとりわけ、チャンクアクセス、シーケンシャルアクセス及び非シーケンシャルアクセスに基づいて、ｉノードのアクセスパターンを追跡することが可能であり、また、能力の中でもとりわけ、ｉノードに対する先読み命令を発行することができることが理解されるであろう。
コンピューティング環境例
【００９７】
図８は、一実施形態による、アクセスパターントラッカ及びメタデータ先読み生成器がソフトウェアに実装され得る方法を示すコンピューティングシステム８００のブロック図である。コンピューティングシステム８００は、コンピュータ可読命令を実行することができる任意のシングル又はマルチプロセッサコンピューティングデバイスあるいはシステムを広く表す。コンピューティングシステム８００の例としては、ワークステーション、パーソナルコンピュータ、ラップトップ、クライアント側端末、サーバ、分散型コンピューティングシステム、携帯用デバイス（例えば、パーソナル携帯情報機器、及び携帯電話）、ネットワークアプライアンス、記憶制御装置（例えば、配列制御装置、テープドライブ制御装置、又はハードディスク制御装置）等を含む任意の１つ以上の様々なデバイスが挙げられるが、これらに限定されない。その最も基本的な構成において、コンピューティングシステム８００は、少なくとも１つのプロセッサ１１０と、メモリ１１５と、を含んでもよい。コンピューティングデバイス１０５を実装するソフトウェアを実行することによって、コンピューティングシステム８００は、ノードに対するアクセスパターン（複数可）を追跡してｉノードに対する先読み命令を発行するように構成された専用コンピューティングデバイスになる。
【００９８】
プロセッサ１１０は、概して、データの処理、又は命令の解釈及び実行ができる任意のタイプ又は形式の処理ユニットを表す。特定の実施形態では、プロセッサ１１０は、ソフトウェアアプリケーション又はモジュールから命令を受信してもよい。これらの命令は、プロセッサ１１０に、本明細書に記載及び／又は例示する実施形態のうちの１つ以上の機能を実施させてもよい。例えば、プロセッサ１１０は、本明細書に記載する動作の全部又は一部を実行してもよく、及び／又は実行するための手段であってもよい。プロセッサ１１０は、また、本明細書に記載又は例示する任意の他の動作、方法、及びプロセスを実行してもよく、及び／又は実行するための手段であってもよい。
【００９９】
メモリ１１５は、データ及び／又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形式の揮発性又は不揮発性記憶デバイス若しくは媒体を概して表す。例としては、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（read only memory、ＲＯＭ）、フラッシュメモリ、又は任意の他の好適なメモリデバイスが挙げられるが、これらに限定されない。必須でないが、特定の実施例では、コンピューティングシステム８００は、揮発性メモリユニット及び不揮発性記憶デバイスの両方を含んでもよい。一実施例では、アクセスパターントラッカ及びメタデータ先読み生成器を実装するプログラム命令は、メモリ１１５にロードされてもよい。
【０１００】
特定の実施形態では、コンピューティングシステム８００は、また、プロセッサ１１０及び／又はメモリ１１５に加えて、１つ以上の構成要素又は要素を含んでもよい。例えば、図８に示すように、コンピューティングシステム８００は、メモリコントローラ８２０、入力／出力（Ｉ／Ｏ）コントローラ８３５、及び通信インターフェース８４５を含んでもよく、これらの各々は、通信インフラストラクチャ８０５を介して相互接続されてもよい。通信インフラストラクチャ８０５は、コンピューティングデバイスの１つ以上の構成要素間の通信を容易にすることが可能な任意のタイプ又は形式のインフラストラクチャを概して表す。通信インフラストラクチャ８０５の例としては、通信バス（業界標準アーキテクチャ（Industry Standard Architecture、ＩＳＡ）、周辺構成要素相互接続（Peripheral Component Interconnect、ＰＣＩ）、ＰＣＩエクスプレス（PCI express、ＰＣＩｅ）、又は類似のバス等）、及びネットワークが挙げられるが、これらに限定されない。
【０１０１】
メモリコントローラ８２０は、メモリ若しくはデータを取り扱うことが可能な、又はコンピューティングシステム８００の１つ以上の構成要素間の通信を制御することが可能な任意のタイプ又は形式のデバイスを概して表す。特定の実施形態では、メモリコントローラ８２０は、通信インフラストラクチャ８０５を介して、プロセッサ１１０、メモリ１１５、及びＩ／Ｏコントローラ８３５間の通信を制御してもよい。特定の実施形態では、メモリコントローラ８２０は、本明細書に記載又は例示する１つ以上の動作又は機能を単独又は他の要素との組み合わせのいずれかで実施してもよく、及び／又は実施するための手段であってもよい。
【０１０２】
Ｉ／Ｏコントローラ８３５は、コンピューティングデバイス１０５などの１つ以上のコンピューティングデバイスの入力及び出力機能を協働させ、及び／又は制御することが可能な任意のタイプ又は形式のモジュールを概して表す。例えば、特定の実施形態では、Ｉ／Ｏコントローラ８３５は、プロセッサ１１０、メモリ１１５、通信インターフェース８４５、表示アダプタ８１５、入力インターフェース８２５及び／又は記憶インターフェース８４０などのコンピューティングシステム８００の１つ以上の要素間のデータの転送を制御してもよく、又はそれを容易にしてもよい。
【０１０３】
通信インターフェース８４５は、コンピューティングシステム８００と、１つ以上の他のデバイスとの間の通信を容易にすることが可能な任意のタイプ又は形式の通信デバイス又はアダプタを広く表す。通信インターフェース８４５は、コンピューティングシステム８００と追加のコンピューティングシステムを含むプライベート又はパブリックネットワークとの間の通信を容易にし得る。通信インターフェース８４５の例としては、有線ネットワークインターフェース（ネットワークインターフェースカードなど）、無線ネットワークインターフェース（無線ネットワークインターフェースカードなど）、モデム、及び任意の他の好適なインターフェースを含むが、これらに限定されない。通信インターフェース８４５は、インターネット等ネットワークへの直接リンクを介してリモートサーバへの直接接続を提供してよく、また、例えば、ローカルエリアネットワーク（例えば、イーサネット（登録商標）ネットワーク）、パーソナルエリアネットワーク、電話若しくはケーブルネットワーク、携帯電話接続、衛星データ接続、又は任意の他の好適な接続を通じて、かかる接続を間接的に提供し得る。
【０１０４】
通信インターフェース８４５はまた、外部バス又は通信チャネルを介して、コンピューティングシステム８００と、１つ以上の追加のネットワーク又は記憶デバイスとの間の通信を容易にするように構成されたホストアダプタを表し得る。ホストアダプタの例としては、スモールコンピュータシステムインターフェース（Small Computer System Interface、ＳＣＳＩ）ホストアダプタ、ユニバーサルシリアルバス（Universal Serial Bus、ＵＳＢ）ホストアダプタ、米国電気電子技術者協会（Electrical and Electronics Engineers、ＩＥＥＥ）１３９４ホストアダプタ、シリアルアドバンストテクノロジーアタッチメント（Serial Advanced Technology Attachment、ＳＡＴＡ）、シリアルアタッチトＳＣＳＩ（Serial Attached SCSI、ＳＡＳ）、及びエクスターナルＳＡＴＡ（external SATA、ｅＳＡＴＡ）ホストアダプタ、アドバンスドテクノロジーアタッチメント（Advanced Technology Attachment、ＡＴＡ）、及びパラレルＡＴＡ（Parallel ATA、ＰＡＴＡ）ホストアダプタ、ファイバチャネルインターフェースアダプタ、イーサネット（登録商標）アダプター等が挙げられるが、これらに限定されない。通信インターフェース８４５はまた、コンピューティングシステム８００が、（例えば、実行するためにリモートデバイスに対して命令を送受信することにより）分散又はリモートコンピューティングに関与できるようにし得る。
【０１０５】
図８に示すように、コンピューティングシステム８００はまた、表示アダプタ８１５を介して、通信インフラストラクチャ８０５に接続されている、少なくとも１つの表示デバイス８１０を含んでもよい。表示デバイス８１０は、表示アダプタ８１５によって転送された情報を視覚的に表示することが可能な任意のタイプ又は形式のデバイスを概して表す。同様に、表示アダプタ８１５は、表示デバイス８１０上に表示するために、通信インフラストラクチャ８０５から（又は当該技術分野において既知のように、フレームバッファから）、グラフィックス、テキスト、及び他のデータを転送するように構成された任意のタイプ又は形式のデバイスを概して表す。コンピューティングシステム８００はまた、入力インターフェース８２５を介して通信インフラストラクチャ８０５に接続されている、少なくとも１つの入力デバイス８３０を含んでもよい。入力デバイス８３０は、コンピュータ又はヒトのいずれかによって生成された入力を、コンピューティングシステム８００に提供することが可能な任意のタイプ又は形式の入力デバイスを概して表す。入力デバイス８３０の例としては、キーボード、ポインティングデバイス、音声認識デバイス、又は任意の他の入力デバイスが挙げられる。
【０１０６】
コンピューティングシステム８００はまた、記憶インターフェース８４０を介して通信インフラストラクチャ８０５に結合されている記憶デバイス８５０（例えば、ディスク１５０）を含んでもよい。記憶デバイス８５０は、データ及び／又は他のコンピュータ可読命令を記憶することが可能な任意のタイプ又は形式の記憶デバイス又は媒体を概して表す。例えば、記憶デバイス８５０は、磁気ディスクドライブ（例えば、いわゆるハードドライブ）、フロッピーディスクドライブ、磁気テープドライブ、光ディスクドライブ、フラッシュドライブなどを含み得る。記憶インターフェース８４０は、コンピューティングシステム８００の記憶デバイス８５０と他の構成要素との間でデータを転送及び／又は送信するための任意のタイプ又は形式のインターフェース又はデバイスを概して表す。記憶デバイス８５０は、コンピュータソフトウェア、データ、又は他のコンピュータ可読情報を記憶するように構成されている、取り外し可能な記憶ユニットから読み取るように、及び／又はそれに書き込むように構成されてもよい。好適な取り外し可能な記憶ユニットの例としては、フロッピーディスク、磁気テープ、光ディスク、フラッシュメモリデバイス等が挙げられるが、これらに限定されない。記憶デバイス８５０は、また、コンピュータソフトウェア、データ、又は他のコンピュータ可読命令が、コンピューティングシステム８００にロードされることを可能にするための他の類似の構造又はデバイスを含んでもよい。例えば、記憶デバイス８５０は、ソフトウェア、データ、又は他のコンピュータ可読情報を読み取り、及び書き込むように構成されてもよい。記憶デバイス８５０は、また、コンピューティングシステム８００の一部であってもよく、又は他のインターフェースシステムによってアクセスされる別個のデバイスであってもよい。
【０１０７】
多くの他のデバイス又はサブシステムは、コンピューティングシステム８００に接続されてもよい。逆に、図８に示す構成要素及びデバイスの全てが、本明細書において説明及び／又は例示される実施形態を実践するために存在する必要があるわけではない。上記で述べたデバイス及びサブシステムはまた、図８に示すものとは異なる様式で相互接続されてもよい。コンピューティングシステム８００はまた、任意の数のソフトウェア、ファームウェア、及び／又はハードウェア構成を採用してもよい。例えば、本明細書において開示される実施形態のうちの１つ以上は、コンピュータ可読記憶媒体上にコンピュータプログラム（コンピュータソフトウェア、ソフトウェアアプリケーション、コンピュータ可読命令、又はコンピュータ制御論理とも称される）としてコード化され得る。コンピュータ可読記憶媒体の例としては、磁気記憶媒体（例えば、ハードディスクドライブ、及びフロッピーディスク）、光学的記憶媒体（例えば、ＣＤ−、又はＤＶＤ−ＲＯＭ）、電子記憶媒体（例えば、ソリッドステートドライブ、及びフラッシュメディア）等が挙げられる。そのようなコンピュータプログラムは、また、インターネットなどのネットワークを介してメモリに又はキャリア媒体に記憶するためにコンピューティングシステム８００に転送されてもよい。
【０１０８】
コンピュータプログラムを含むコンピュータ可読媒体は、コンピューティングシステム８００にロードされてもよい。コンピュータ可読媒体上に記憶されたコンピュータプログラムの全部又は一部分は、次に、メモリ８６０及び／又は記憶デバイス８５０の種々の部分に記憶されてもよい。プロセッサ１１０によって実行されるとき、コンピューティングシステム８００にロードされたコンピュータプログラムは、本明細書において説明及び／又は例示する実施形態のうちの１つ以上の機能をプロセッサ１１０に実施させてもよく、及び／又はそれらを実施するための手段であってもよい。付加的に又は代替的に、本明細書に説明及び／又は例示される例示的な実施形態のうちの１つ以上は、ファームウェア及び／又はハードウェアに実装され得る。例えば、コンピューティングシステム８００は、本明細書において開示される実施形態のうちの１つ以上を実行するように適合された特定用途向け集積回路（application specific integrated circuit、ＡＳＩＣ）として構成されてもよい。
ネットワーキング環境例
【０１０９】
図９は、本開示の一実施形態による、様々なデバイスがネットワークを介して通信し得る態様を例示する、ネットワーク化されたシステム９００のブロック図である。特定の実施形態では、ネットワーク接続型記憶（network-attached storage、ＮＡＳ）デバイスは、ネットワークファイルシステム（Network File System、ＮＦＳ）、サーバメッセージブロック（Server Message Block、ＳＭＢ）、又はコモンインターネットファイルシステム（Common Internet File System、ＣＩＦＳ）などの様々なプロトコルを使用してコンピューティングデバイス１０５及び記憶システム１４５と通信するように構成されてもよい。
【０１１０】
ネットワーク１８５は、コンピューティングデバイス１０５と記憶システム１４５との間での通信を容易にすることができる任意のタイプ又は形式のコンピュータネットワーク又はアーキテクチャを概して表す。特定の実施形態では、図８の通信インターフェース８４５などの通信インターフェースは、コンピューティングノード１０５と、記憶システム１４５と、ネットワーク１５５との間の接続性を提供するために使用され得る。本明細書に記載及び／又は例示する実施形態は、インターネット又は任意の特定のネットワークベース環境に限定されないことに留意されたい。例えば、ネットワーク１８５は、ストレージエリアネットワーク（ＳＡＮ）であってもよい。コンピューティングデバイス１０５及び記憶システム１４５は、統合又は分離され得る。分離される場合、例えば、コンピューティングデバイス１０５及び記憶システム１４５は、（例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）、ペリフェラルコンポーネントインターコネクト（Peripheral Component Interconnect，ＰＣＩ）、スモールコンピュータシステムインターフェース（Small Computer System Interface，ＳＣＳＩ）などを使用する）ローカル接続によって、又はインターネット、ＬＡＮ、若しくはＳＡＮなどの１つ以上のネットワークを介して、結合され得る。
【０１１１】
一実施形態では、開示された実施形態のうちの１つ以上の全て又は一部は、コンピュータプログラムとしてコード化され、コンピューティングデバイス１０５、ｉノードアクセスパターン追跡及びメタデータ先読み命令発行システム９１０、ｉノードアクセスパターン追跡システム９４０及び／又はメタデータ先読み命令生成システム９５０上にロードされ、これによって実行されてもよい。本明細書に開示される実施形態のうちの１つ以上の全て又は一部はまた、コンピュータプログラムとしてコード化され、コンピューティングデバイス１０５、ｉノードアクセスパターン追跡及びメタデータ先読み命令発行システム９１０及び／又はｉノードアクセスパターン追跡システム９４０に記憶され、ネットワーク１８５上に分散されてもよい。
【０１１２】
いくつかの例では、コンピューティングデバイス１０５の全部又は一部分は、クラウドコンピューティング又はネットワークベースの環境の部分を表してもよい。クラウドコンピューティング環境は、インターネットを介して、種々のサービス及びアプリケーションを提供し得る。これらのクラウドベースのサービス（例えば、サービスとしてのソフトウェア、サービスとしてプラットフォーム、サービスとしてのインフラストラクチャなど）は、ウェブブラウザ又は他の遠隔インターフェースを通じて、アクセス可能であり得る。本明細書において説明される種々の機能は、遠隔デスクトップ環境又は任意の他のクラウドベースのコンピューティング環境を通じて提供され得る。
【０１１３】
加えて、本明細書に記載の構成要素のうちの１つ以上は、データ、物理的デバイス、及び／又は物理的デバイスの表現を、ある形態から他の形態に変換し得る。例えば、コンピューティングデバイス１０５及び／又はｉノードアクセスパターン追跡及びメタデータ先読み発行システム９１０は、コンピューティングデバイス１０５及び／又はｉノードアクセスパターン追跡及び／又はメタデータ先読み命令発行システム９１０に、ｉノードのアクセスパターン（複数可）を追跡させて先読み命令を発行させるために、コンピューティングデバイス１０５の挙動を変換してもよい。
【０１１４】
本開示がいくつかの実施形態と関連して説明してきたが、本開示は、本明細書で述べた特定の形式に限定されるように意図されていない。逆に、添付の請求項によって規定されるような本開示の範囲内に合理的に含まれ得るような代替形態、修正形態、及び等価物を包含するように意図されている。
【図１Ａ】
2019537097.tif 000003
【図１Ｂ】
2019537097.tif 000004
【図１Ｃ】
2019537097.tif 000005
【図２Ａ】
2019537097.tif 000006
【図２Ｂ】
2019537097.tif 000007
【図２Ｃ】
2019537097.tif 000008
【図２Ｄ】
2019537097.tif 000009
【図２Ｅ】
2019537097.tif 000010
【図３Ａ】
2019537097.tif 000011
【図３Ｂ】
2019537097.tif 000012
【図３Ｃ】
2019537097.tif 000013
【図４Ａ】
2019537097.tif 000014
【図４Ｂ】
2019537097.tif 000015
【図５Ａ】
2019537097.tif 000016
【図５Ｂ】
2019537097.tif 000017
【図６Ａ】
2019537097.tif 000018
【図６Ｂ】
2019537097.tif 000019
【図７Ａ】
2019537097.tif 000020
【図７Ｂ】
2019537097.tif 000021
【図８】
2019537097.tif 000022
【図９】
2019537097.tif 000023
【国際調査報告】
2019537097.tif 000024
2019537097.tif 000025