(57)【要約】【課題】トラック・ロックおよびストライド・グループ・ロックを使用してキャッシュ動作を管理するためのコンピュータ・プログラム製品、システム、および方法を提供する。【解決手段】ストレージ・デバイスからのトラックのグループはキャッシュに記憶される。キャッシュ内のグループ内のトラックへの書き込みのために、キャッシュ内のグループ内のトラックへの排他的トラック・ロックが付与され、排他的トラック・ロックは、キャッシュ内の異なるトラックへの書き込みのために同時に保持することができる。キャッシュ内のトラックのグループへの排他的グループ・ロックが付与されて、グループ内のトラックがキャッシュからストレージ・デバイスにデステージされる。キャッシュ内のグループ内のトラックのストレージ・デバイスへのデステージを完了したことに応答して、排他的グループ・ロックが解除される。【選択図】図３
2021517684.tif 000002
【特許請求の範囲】
【請求項１】
複数のストレージ・デバイスへの入力／出力要求を管理するためのコンピュータ・プログラム製品であって、動作を実施するために実行可能なコンピュータ可読プログラム・コードが具現化されたコンピュータ可読記憶媒体を含み、前記動作は、
前記ストレージ・デバイスに記憶されたトラックのグループをキャッシュに記憶することと、
前記キャッシュ内の前記グループ内のトラックへの書き込みのために、前記キャッシュ内の前記グループ内の前記トラックに排他的トラック・ロックを付与することであって、排他的トラック・ロックは、前記キャッシュ内の異なるトラックへの書き込みのために同時に保持することができる、付与することと、
前記グループ内の前記トラックを前記キャッシュから前記ストレージ・デバイスにデステージするために、前記キャッシュ内の前記トラックのグループに排他的グループ・ロックを付与することと、
前記キャッシュ内の前記グループ内の前記トラックの前記ストレージ・デバイスへの前記デステージを完了したことに応答して、前記排他的グループ・ロックを解除することと、
を含む、コンピュータ・プログラム製品。
【請求項２】
前記動作はさらに、
前記グループ内の対象トラックへの書き込みを受け取ることと、
前記グループへの前記排他的グループ・ロックが保持されているか否かを判定することと、
前記排他的グループ・ロックが保持されていないと判定したことに応答して、排他的トラック・ロックを前記対象トラックに付与することと、
前記排他的グループ・ロックが保持されていると判定したことに応答して、前記対象トラックに対する前記排他的トラック・ロックへのアクセスを再試行することと、
を含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
前記動作はさらに、
前記キャッシュ内の前記グループ内の前記トラックへの書き込みのために共有グループ・ロックを付与することと、
前記キャッシュ内のトラックへの書き込みが完了したことに応答して、前記書き込みのための共有グループ・ロックを解除することと、
前記トラックのグループの前記デステージを開始したことに応答して、任意の共有グループ・ロックが保持されているか否かを判定することであって、前記排他的グループ・ロックは、デステージする前記グループに対して保持されている共有グループ・ロックがないと判定したことに応答してのみ付与される、判定することと、
を含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項４】
前記トラックのグループの前記デステージはさらに、
前記キャッシュ内の前記グループ内のトラック内の変更されたデータを特定することと、
前記変更されたデータおよび前記グループの古いパリティ・データに関するデータを示す読み出し要求を生成して、サブミッション・キューに追加することによって、前記ストレージ・デバイスのうちの少なくとも１つから読み出して、前記キャッシュにステージングすることと、
前記キャッシュにステージングされた前記変更されたデータおよび前記古いパリティ・データに関する前記読み出されたデータを使用して、新たなパリティ・データを計算することと、
前記キャッシュ内の前記新たなパリティ・データおよび前記変更されたデータを前記ストレージ・デバイスのうちの前記少なくとも１つに書き込むことであって、前記排他的グループ・ロックは、前記新たなパリティ・データおよび前記変更されたデータの、前記ストレージ・デバイスのうちの前記少なくとも１つへの前記書き込みが完了したことに応答して解除される、書き込むことと、
を含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項５】
前記新たなパリティ・データおよび前記変更されたデータを前記書き込むことは、
前記キャッシュ内の前記変更されたデータおよび前記新たなパリティ・データに関するデータを示す書き込み要求を生成して、前記サブミッション・キューに追加することによって、前記キャッシュから前記ストレージ・デバイスのうちの前記少なくとも１つに転送すること、
を含む、請求項４に記載のコンピュータ・プログラム製品。
【請求項６】
前記コンピュータ可読プログラム・コードは、前記コンピュータ可読記憶媒体を含むシステムによって実行され、前記システムは、前記ストレージ・デバイスとインターフェースするコントローラに結合され、前記動作はさらに、
前記読み出し要求および前記書き込み要求を前記サブミッション・キューに追加する場合に、前記サブミッション・キューのドアベル・レジスタを設定することであって、前記ドアベル・レジスタの前記設定は、前記読み出し要求を処理して、前記ストレージ・デバイスのうちの前記少なくとも１つから前記キャッシュにデータを転送し、前記書き込み要求を処理して、変更されたデータおよび前記新たなパリティ・データを前記キャッシュから前記ストレージ・デバイスのうちの前記少なくとも１つに転送するように前記コントローラにシグナリングする、設定すること、
を含む、請求項５に記載のコンピュータ・プログラム製品。
【請求項７】
前記読み出し要求を前記生成することは、
前記グループ内のトラックの変更されたセグメントを特定することと、
前記キャッシュ内のキャッシュ・セグメントを、前記特定された変更されたセグメントおよび古いパリティ・データのセグメントに割り当てることと、
前記変更されたデータおよび前記パリティ・データの前記セグメントと、前記割り当てられたキャッシュ・セグメントの前記キャッシュ内の宛先位置とを示すリストを生成することであって、前記リストは、前記ストレージ・デバイスのうちの前記少なくとも１つから読み出して前記キャッシュ内の前記宛先位置に書き込む前記データを特定するのに使用するために、前記読み出し要求と共に提供される、生成することと、
を含む、請求項４に記載のコンピュータ・プログラム製品。
【請求項８】
前記トラックを前記デステージすることはさらに、
前記グループの全ての前記トラックが前記キャッシュにあると判定することと、
前記キャッシュ内の前記グループの前記トラックから前記グループの新たなパリティ・データを計算することと、
前記キャッシュ内の前記グループの変更されたトラックおよび前記新たなパリティ・データと、前記変更されたトラックおよび前記新たなパリティ・データを書き込む前記ストレージ・デバイスのうちの少なくとも１つにおける宛先位置とを示すリストを含む書き込み要求を生成して、サブミッション・キューに追加することであって、コントローラは、前記サブミッション・キュー内の前記書き込み要求および前記リストにアクセスし、前記リストに示された前記変更されたトラックの前記データおよび前記新たなパリティ・データにアクセスし、前記リストに宛先位置として示された前記ストレージ・デバイスのうちの前記少なくとも１つにわたって書き込む、追加することと、
を含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項９】
前記動作はさらに、
前記ストレージ・デバイスのうちの少なくとも１つから前記キャッシュにトラックのデータをステージングするための動作を開始することと、
前記キャッシュ内のセグメントをステージングする前記データに割り当てることと、
ステージングする前記データに対する前記キャッシュ内の前記割り当てられたセグメントにロックを付与することと、
前記キャッシュにステージングする前記トラックの前記データを示す読み出し要求をサブミッション・キューに追加することと、
前記読み出し要求からの前記データを前記キャッシュ内の前記割り当てられたセグメントに記憶することと、
前記キャッシュ内の前記セグメントの前記データの前記読み出しを完了したことに応答して、前記キャッシュ内の前記セグメントへの前記ロックを解除することと、
を含む、請求項１に記載のコンピュータ・プログラム製品。
【請求項１０】
複数のストレージ・デバイスに記憶されたキャッシュ内のトラックへの入力／出力要求を管理するためのコンピュータ・プログラム製品であって、複数の処理コアによって実行された場合に動作を実施するコンピュータ可読プログラム・コードが具現化されたコンピュータ可読記憶媒体を含み、前記動作は、
トラックのストライド・グループ内のトラックへの書き込みに対して共有ストライド・ロックを付与することであって、前記共有ストライド・ロックは、前記ストライド・グループ内の異なるトラックに同時に書き込む書き込みに対して付与される、付与することと、
前記トラックのストライド・グループをデステージするためのデステージ要求に応答して、書き込み用の未解除の共有ストライド・ロックがあるか否かを判定することと、
書き込み用の未解除の共有ストライド・ロックがないと判定したことに応答して、前記キャッシュから前記ストレージ・デバイスへのトラックのストライド・グループのデステージのために排他的ストライド・ロックを付与することと、
を含む、コンピュータ・プログラム製品。
【請求項１１】
前記動作はさらに、
ファブリックを介して前記ストレージ・デバイスへのアクセスを管理するコントローラと通信することと、
トラックの読み出し要求に応答するために、前記ストレージ・デバイスから前記キャッシュに前記トラックをステージングするための読み出し要求を少なくとも１つのサブミッション・キューに追加することであって、前記コントローラは、前記ファブリックを介して前記少なくとも１つのサブミッション・キューから前記読み出し要求を取り出して、前記ストレージ・デバイスからデータを読み出して前記キャッシュに書き込む、追加することと、
前記ストライド・グループへの前記排他的ストライド・ロックを受け取ったことに応答して、前記ストライド・グループのデステージする前記トラックを書き込むための書き込み要求を前記少なくとも１つのサブミッション・キューに追加することであって、前記コントローラは、前記ファブリックを介して前記少なくとも１つのサブミッション・キューから前記書き込み要求を取り出して、前記ストレージ・デバイスにデータを書き込む、追加することと、
を含む、請求項１０に記載のコンピュータ・プログラム製品。
【請求項１２】
複数のストレージ・デバイスへの入力／出力要求を管理するためのシステムであって、
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサによって実行された場合に動作を実施するコンピュータ可読プログラム・コードが具現化されたコンピュータ可読記憶媒体と、を備え、前記動作は、
前記ストレージ・デバイスに記憶されたトラックのグループをキャッシュに記憶することと、
前記キャッシュ内の前記グループ内のトラックへの書き込みのために、前記キャッシュ内の前記グループ内の前記トラックに排他的トラック・ロックを付与することであって、排他的トラック・ロックは、前記キャッシュ内の異なるトラックへの書き込みのために同時に保持することができる、付与することと、
前記グループ内の前記トラックを前記キャッシュから前記ストレージ・デバイスにデステージするために、前記キャッシュ内の前記トラックのグループに排他的グループ・ロックを付与することと、
前記キャッシュ内の前記グループ内の前記トラックの前記ストレージ・デバイスへの前記デステージを完了したことに応答して、前記排他的グループ・ロックを解除することと、
を含む、システム。
【請求項１３】
前記動作はさらに、
前記グループ内の対象トラックへの書き込みを受け取ることと、
前記グループへの前記排他的グループ・ロックが保持されているか否かを判定することと、
前記排他的グループ・ロックが保持されていないと判定したことに応答して、排他的トラック・ロックを前記対象トラックに付与することと、
前記排他的グループ・ロックが保持されていると判定したことに応答して、前記対象トラックに対する前記排他的トラック・ロックへのアクセスを再試行することと、
を含む、請求項１２に記載のシステム。
【請求項１４】
前記動作はさらに、
前記キャッシュ内の前記グループ内の前記トラックへの書き込みのために共有グループ・ロックを付与することと、
前記キャッシュ内のトラックへの書き込みが完了したことに応答して、前記書き込みのための共有グループ・ロックを解除することと、
前記トラックのグループの前記デステージを開始したことに応答して、任意の共有グループ・ロックが保持されているか否かを判定することであって、前記排他的グループ・ロックは、デステージする前記グループに対して保持されている共有グループ・ロックがないと判定したことに応答してのみ付与される、判定することと、
を含む、請求項１２に記載のシステム。
【請求項１５】
前記トラックのグループの前記デステージはさらに、
前記キャッシュ内の前記グループ内のトラック内の変更されたデータを特定することと、
前記変更されたデータおよび前記グループの古いパリティ・データに関するデータを示す読み出し要求を生成して、サブミッション・キューに追加することによって、前記ストレージ・デバイスのうちの少なくとも１つから読み出して、前記キャッシュにステージングすることと、
前記キャッシュにステージングされた前記変更されたデータおよび前記古いパリティ・データに関する前記読み出されたデータを使用して、新たなパリティ・データを計算することと、
前記キャッシュ内の前記新たなパリティ・データおよび前記変更されたデータを前記ストレージ・デバイスのうちの前記少なくとも１つに書き込むことであって、前記排他的グループ・ロックは、前記新たなパリティ・データおよび前記変更されたデータの、前記ストレージ・デバイスのうちの前記少なくとも１つへの前記書き込みが完了したことに応答して解除される、書き込むことと、
を含む、請求項１２に記載のシステム。
【請求項１６】
前記新たなパリティ・データおよび前記変更されたデータを前記書き込むことは、
前記キャッシュ内の前記変更されたデータおよび前記新たなパリティ・データに関するデータを示す書き込み要求を生成して、前記サブミッション・キューに追加することによって、前記キャッシュから前記ストレージ・デバイスのうちの前記少なくとも１つに転送すること、
を含む、請求項１５に記載のシステム。
【請求項１７】
前記読み出し要求を前記生成することは、
前記グループ内のトラックの変更されたセグメントを特定することと、
前記キャッシュ内のキャッシュ・セグメントを、前記特定された変更されたセグメントおよび古いパリティ・データのセグメントに割り当てることと、
前記変更されたデータおよび前記パリティ・データの前記セグメントと、前記割り当てられたキャッシュ・セグメントの前記キャッシュ内の宛先位置とを示すリストを生成することであって、前記リストは、前記ストレージ・デバイスのうちの前記少なくとも１つから読み出して前記キャッシュ内の前記宛先位置に書き込む前記データを特定するのに使用するために、前記読み出し要求と共に提供される、生成することと、
を含む、請求項１５に記載のシステム。
【請求項１８】
複数のストレージ・デバイスへの入力／出力要求を管理するためのシステムであって、
複数の処理コアと、
処理コアによって実行された場合に動作を実施するコンピュータ可読プログラム・コードが具現化されたコンピュータ可読記憶媒体と、を備え、前記動作は、
トラックのストライド・グループ内のトラックへの書き込みに対して共有ストライド・ロックを付与することであって、前記共有ストライド・ロックは、前記ストライド・グループ内の異なるトラックに同時に書き込む書き込みに対して付与される、付与することと、
前記トラックのストライド・グループをデステージするためのデステージ要求に応答して、書き込み用の未解除の共有ストライド・ロックがあるか否かを判定することと、
書き込み用の未解除の共有ストライド・ロックがないと判定したことに応答して、キャッシュから前記ストレージ・デバイスへのトラックのストライド・グループのデステージのために排他的ストライド・ロックを付与することと、
を含む、システム。
【請求項１９】
前記動作はさらに、
ファブリックを介して前記ストレージ・デバイスへのアクセスを管理するコントローラと通信することと、
トラックの読み出し要求に応答するために、前記ストレージ・デバイスから前記キャッシュに前記トラックをステージングするための読み出し要求を少なくとも１つのサブミッション・キューに追加することであって、前記コントローラは、前記ファブリックを介して前記少なくとも１つのサブミッション・キューから前記読み出し要求を取り出して、前記ストレージ・デバイスからデータを読み出して前記キャッシュに書き込む、追加することと、
前記ストライド・グループへの前記排他的ストライド・ロックを受け取ったことに応答して、前記ストライド・グループのデステージする前記トラックを書き込むための書き込み要求を前記少なくとも１つのサブミッション・キューに追加することであって、前記コントローラは、前記ファブリックを介して前記少なくとも１つのサブミッション・キューから前記書き込み要求を取り出して、前記ストレージ・デバイスにデータを書き込む、追加することと、
を含む、請求項１８に記載のシステム。
【請求項２０】
複数のストレージ・デバイスへの入力／出力要求を管理するための方法であって、
前記ストレージ・デバイスに記憶されたトラックのグループをキャッシュに記憶することと、
前記キャッシュ内の前記グループ内のトラックへの書き込みのために、前記キャッシュ内の前記グループ内の前記トラックに排他的トラック・ロックを付与することであって、排他的トラック・ロックは、前記キャッシュ内の異なるトラックへの書き込みのために同時に保持することができる、付与することと、
前記グループ内の前記トラックを前記キャッシュから前記ストレージ・デバイスにデステージするために、前記キャッシュ内の前記トラックのグループに排他的グループ・ロックを付与することと、
前記キャッシュ内の前記グループ内の前記トラックの前記ストレージ・デバイスへの前記デステージを完了したことに応答して、前記排他的グループ・ロックを解除することと、
を含む、方法。
【請求項２１】
前記グループ内の対象トラックへの書き込みを受け取ることと、
前記グループへの前記排他的グループ・ロックが保持されているか否かを判定することと、
前記排他的グループ・ロックが保持されていないと判定したことに応答して、排他的トラック・ロックを前記対象トラックに付与することと、
前記排他的グループ・ロックが保持されていると判定したことに応答して、前記対象トラックに対する前記排他的トラック・ロックへのアクセスを再試行することと、
をさらに含む、請求項２０に記載の方法。
【請求項２２】
前記キャッシュ内の前記グループ内の前記トラックへの書き込みのために共有グループ・ロックを付与することと、
前記キャッシュ内のトラックへの書き込みが完了したことに応答して、前記書き込みのための共有グループ・ロックを解除することと、
前記トラックのグループの前記デステージを開始したことに応答して、任意の共有グループ・ロックが保持されているか否かを判定することであって、前記排他的グループ・ロックは、デステージする前記グループに対して保持されている共有グループ・ロックがないと判定したことに応答してのみ付与される、判定することと、
をさらに含む、請求項２０に記載の方法。
【請求項２３】
前記トラックのグループの前記デステージはさらに、
前記キャッシュ内の前記グループ内のトラック内の変更されたデータを特定することと、
前記変更されたデータおよび前記グループの古いパリティ・データに関するデータを示す読み出し要求を生成して、サブミッション・キューに追加することによって、前記ストレージ・デバイスのうちの少なくとも１つから読み出して、前記キャッシュにステージングすることと、
前記キャッシュにステージングされた前記変更されたデータおよび前記古いパリティ・データに関する前記読み出されたデータを使用して、新たなパリティ・データを計算することと、
前記キャッシュ内の前記新たなパリティ・データおよび前記変更されたデータを前記ストレージ・デバイスのうちの前記少なくとも１つに書き込むことであって、前記排他的グループ・ロックは、前記新たなパリティ・データおよび前記変更されたデータの、前記ストレージ・デバイスのうちの前記少なくとも１つへの前記書き込みが完了したことに応答して解除される、書き込むことと、
を含む、請求項２０に記載の方法。
【請求項２４】
前記新たなパリティ・データおよび前記変更されたデータを前記書き込むことは、
前記キャッシュ内の前記変更されたデータおよび前記新たなパリティ・データに関するデータを示す書き込み要求を生成して、前記サブミッション・キューに追加することによって、前記キャッシュから前記ストレージ・デバイスのうちの前記少なくとも１つに転送すること、
を含む、請求項２３に記載の方法。
【請求項２５】
前記読み出し要求を前記生成することは、
前記グループ内のトラックの変更されたセグメントを特定することと、
前記キャッシュ内のキャッシュ・セグメントを、前記特定された変更されたセグメントおよび古いパリティ・データのセグメントに割り当てることと、
前記変更されたデータおよび前記パリティ・データの前記セグメントと、前記割り当てられたキャッシュ・セグメントの前記キャッシュ内の宛先位置とを示すリストを生成することであって、前記リストは、前記ストレージ・デバイスのうちの前記少なくとも１つから読み出して前記キャッシュ内の前記宛先位置に書き込む前記データを特定するのに使用するために、前記読み出し要求と共に提供される、生成することと、
を含む、請求項２３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トラック・ロックおよびストライド・グループ・ロックを使用してキャッシュ動作を管理するためのコンピュータ・プログラム製品、システム、および方法に関する。
【背景技術】
【０００２】
ストレージ・コントローラは、ストレージ・デバイスの独立ディスク冗長アレイ（ＲＡＩＤ：Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）のアレイなどの、ストレージ・デバイスのアレイとインターフェースするための１つまたは複数のデバイス・アダプタを維持する。デバイス・アダプタは、接続されたストレージ・デバイスへの要求を管理し、ストレージ・コントローラに対してＲＡＩＤコントローラおよび機能を実装する。不揮発性メモリ・エクスプレス（ＮＶＭｅ：Ｎｏｎｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ）では、ＮＶＭｅコントローラは、ホスト・システムのサブミッション・キュー内のストレージ・デバイスへの読み出し要求および書き込み要求にアクセスし、ソリッド・ステート・ドライブ（ＳＳＤ：Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などのストレージ・デバイス間にデータをストライピングするＲＡＩＤ機能を含み得る。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
複数のプロセッサ・コアが、ストレージ・デバイスに記憶される、キャッシュ内のストライド・グループのトラックに対して読み書きする環境において、ＲＡＩＤアレイなどのストレージ・デバイスのアレイにわたってデータを読み書きするための改善された技術が当技術分野で必要とされている。
【課題を解決するための手段】
【０００４】
第１の実施形態は、トラック・ロックおよびストライド・グループ・ロックを使用してキャッシュ動作を管理するためのコンピュータ・プログラム製品、システム、および方法を提供する。ストレージ・デバイスからのトラックのグループはキャッシュに記憶される。キャッシュ内のグループ内のトラックへの書き込みのために、キャッシュ内のグループ内のトラックへの排他的トラック・ロックが付与され、排他的トラック・ロックは、キャッシュ内の異なるトラックへの書き込みのために同時に保持することができる。キャッシュ内のトラックのグループへの排他的グループ・ロックが付与されて、グループ内のトラックがキャッシュからストレージ・デバイスにデステージされる。キャッシュ内のグループ内のトラックのストレージ・デバイスへのデステージを完了したことに応答して、排他的グループ・ロックが解除される。
【０００５】
第１の実施形態は、書き込み用の複数の排他的トラック・ロックを同時に保持できるようにして、キャッシュ内の異なるトラックへの書き込みを可能にする、コンピュータ技術への改善を提供する。さらに、トラックのグループのデステージのために、トラックのグループに排他的グループ・ロックが付与される。デステージ・プロセスのために排他的グループ・ロックが保持されている間、デステージ対象のトラックにアクセスしようとする異なるプロセスはブロックされる。デステージのための排他的グループ・ロックを解除すると、グループ内のトラックへの同時書き込みのために排他的トラック・ロックを付与することが可能になる。このように、記載した実施形態は、ストライド・グループなどのトラックのグループ内の異なるトラックへの同時書き込みを管理して可能にすると共に、デステージ動作のためのグループ内の全てのトラックのロックを提供する改善を提供する。
【０００６】
第２の実施形態は任意選択によりさらに、グループ内の対象トラックへの書き込みを受け取ることと、グループへの排他的グループ・ロックが保持されているか否かを判定することと、排他的グループ・ロックが保持されていないと判定したことに応答して、排他的トラック・ロックを対象トラックに付与することと、排他的グループ・ロックが保持されていると判定したことに応答して、対象トラックに対する排他的トラック・ロックへのアクセスを再試行することと、を含み得る。
【０００７】
第２の実施形態では、デステージ動作のための排他的グループ・ロックが保持されていない場合にのみ、対象トラックへの書き込みを許可して、書き込みが、進行中のデステージ動作に関与するトラックに書き込まないようにする。これにより、トラックのグループ内の異なるトラックへの同時書き込みと、グループ内の全てのトラックをデステージするためのトラックのグループへのデステージ動作とを調整するための改善が提供される。
【０００８】
第３の実施形態は任意選択によりさらに、キャッシュ内のグループ内のトラックへの書き込みのために共有グループ・ロックを付与することと、キャッシュ内のトラックへの書き込みが完了したことに応答して、書き込みのための共有グループ・ロックを解除することと、トラックのグループのデステージを開始したことに応答して、任意の共有グループ・ロックが保持されているか否かを判定することであって、排他的グループ・ロックは、デステージするグループに対して保持されている共有グループ・ロックがないと判定したことに応答してのみ付与される、判定することと、を含み得る。
【０００９】
第３の実施形態では、共有グループ・ロックは、共有グループ・ロックが適用されるグループ内のトラックに同時に書き込む書き込みに対して付与される。同時書き込みが発生している間にデステージ動作をさらに調整するために、書き込みによって保持されている共有グループ・ロックにより、全ての書き込みが完了するまでデステージ動作が開始されなくなり、それは、デステージするトラックのグループに対して保持されている共有グループ・ロックがないことによって示される。
【００１０】
第４の実施形態は任意選択によりさらに、トラックのグループのデステージがさらに、キャッシュ内のグループ内のトラック内の変更されたデータを特定することと、変更されたデータおよびグループの古いパリティ・データに関するデータを示す読み出し要求を生成して、サブミッション・キューに追加することによって、ストレージ・デバイスのうちの少なくとも１つから読み出して、キャッシュにステージングすることと、キャッシュにステージングされた変更されたデータおよび古いパリティ・データに関する読み出されたデータを使用して、新たなパリティ・データを計算することと、キャッシュ内の新たなパリティ・データおよび変更されたデータをストレージ・デバイスのうちの少なくとも１つに書き込むことであって、排他的グループ・ロックは、新たなパリティ・データおよび変更されたデータの、ストレージ・デバイスのうちの少なくとも１つへの書き込みが完了したことに応答して解除される、書き込むことと、を含むこと、を含み得る。
【００１１】
第４の実施形態は、ストレージ・デバイスから変更されたデータおよび古いパリティ・データを読み出すための読み出し要求を生成して、キャッシュにステージングし、次いでそのステージングされたデータを使用して新たなパリティ・データを計算することにより、グループ内のトラックのパリティ・データの計算に改善を提供する。新たなパリティ・データを計算している間にデステージ動作によって排他的グループ・ロックが保持され、これは、新たなパリティ・データが計算されてストレージ・デバイスに書き込まれるまで解除されない。これにより、トラックの全ての変更されたデータおよび新たなパリティ・データがデステージされるまで書き込みを防止することによって、デステージ動作とトラックへの書き込みとの調整が改善される。
【００１２】
第５の実施形態は任意選択により、新たなパリティ・データおよび変更されたデータを書き込むことが、キャッシュ内の変更されたデータおよび新たなパリティ・データに関するデータを示す書き込み要求を生成して、サブミッション・キューに追加することによって、キャッシュからストレージ・デバイスのうちの少なくとも１つに転送すること、を含むこと、を含み得る。
【００１３】
第５の実施形態では、キャッシュ内の変更されたデータおよび新たなパリティ・データを書き込むための書き込み要求をサブミッション・キューに追加して、キャッシュからストレージ・デバイスに転送する。この書き込み要求の管理は、ＮＶＭｅコントローラの場合など、サブミッション・キューから読み出し要求および書き込み要求にアクセスするコントローラを配備して、コントローラが、変更されたデータおよび新たなパリティ・データのみをストレージに書き込む部分的グループ・デステージ動作のための、変更されたデータおよびパリティ・データの読み出しおよび書き込みを完了できるようにするシステムにおいて有益である。このように、サブミッション・キューを介して変更されたデータおよび新たなパリティ・データのみを転送することによって、コントローラとシステムとの間の帯域幅が最適化される。
【００１４】
第６の実施形態は任意選択により、読み出し要求を生成することが、グループ内のトラックの変更されたセグメントを特定することと、キャッシュ内のキャッシュ・セグメントを、特定された変更されたセグメントおよび古いパリティ・データのセグメントに割り当てることと、変更されたデータおよびパリティ・データのセグメントと、割り当てられたキャッシュ・セグメントのキャッシュ内の宛先位置とを示すリストを生成することであって、リストは、ストレージ・デバイスのうちの少なくとも１つから読み出してキャッシュ内の宛先位置に書き込むデータを特定するのに使用するために、読み出し要求と共に提供される、生成することと、を含むこと、を含み得る。
【００１５】
第６の実施形態は、サブミッション・キュー内に読み出し要求と共に提供される、変更されたデータおよび古いパリティ・データのセグメントを示すリストを生成することによって、変更されたデータおよびパリティ・データのセグメントをキャッシュにステージングする動作の効率を改善する。コントローラはサブミッション・キューにアクセスして、読み出し要求およびリストを処理し、変更されたデータおよび古いパリティ・データのセグメントをキャッシュにステージングして、新たなパリティ・データの計算に使用し得る。ＮＶＭｅコントローラなどのコントローラは、サブミッション・キューから読み出し要求にアクセスして、新たなパリティ・データの計算に必要なセグメントをステージングする。記載した実施形態は、部分的ストライド・デステージにおいて、変更のないセグメントではなく変更されたデータのセグメントのみをステージングすることによって、ステージング動作を最適化する。
【００１６】
第７の実施形態は、複数のストレージ・デバイスに記憶されたキャッシュ内のトラックへの入力／出力要求を管理するためのコンピュータ・プログラム製品、システム、および方法を提供し、これは、複数の処理コアがコンピュータ可読記憶媒体内のプログラム・コードを実行して、トラックのストライド・グループ内のトラックへの書き込みに対して共有ストライド・ロックを付与することによって行われ、共有ストライド・ロックは、ストライド・グループ内の異なるトラックに同時に書き込む書き込みに対して付与される。トラックのストライド・グループをデステージするためのデステージ要求に応答して、書き込み用の未解除の共有ストライド・ロックがあるか否かについての判定が行われる。書き込み用の未解除の共有ストライド・ロックがないと判定したことに応答して、キャッシュからストレージ・デバイスへのトラックのストライド・グループのデステージのために排他的ストライド・ロックが付与される。
【００１７】
第７の実施形態は、複数の処理コアがストライド・グループ内のトラックに書き込む場合に、ストライド・グループ内の異なるトラックに同時に書き込む処理コアに共有ストライド・ロックを付与することにより、改善されたキャッシング技術を提供する。デステージ要求は、排他的ストライド・グループ・ロックが付与されるまで進行することができず、それは、書き込み用の未解除の共有ストライド・ロックがなくならない限り、付与することができない。このように、記載した実施形態は、ストライド・グループ内のトラックに同時に書き込み得る複数のコアによる書き込みと、ストライド・グループ内の全てのトラックへの排他的アクセスを必要とするストライドのデステージ動作とを調整するための改善された技術を提供する。
【図面の簡単な説明】
【００１８】
【図１】ストレージ・コントローラの一実施形態を示す図である。
【図２】トラック・ロックの一実施形態を示す図である。
【図３】ストライド・グループ内のトラックの読み出し要求を処理するための動作の一実施形態を示す図である。
【図４】ストライド・グループ内のトラックへの書き込み要求を処理するための動作の一実施形態を示す図である。
【図５】ストライド・グループ内のトラックの部分的ストライド・デステージを実行するための動作の一実施形態を示す図である。
【図６】ストライド・グループ内のトラックの完全ストライド・デステージを実行するための動作の一実施形態を示す図である。
【図７】図１のコンポーネントが実装され得るコンピューティング環境を示す図である。
【発明を実施するための形態】
【００１９】
記載した実施形態は、ストレージ・デバイス間にストライピングされるストライド・グループのトラックに対する複数のプロセッサ・コアによる読み出しおよび書き込みの管理を改善するためのキャッシュ・ロック管理技法を提供する。特定の実施形態では、ストレージ・コントローラは、ＲＡＩＤ動作を処理するためのデバイス・アダプタを含まなくてもよく、代わりに、ストレージ・デバイスに対して読み書きするためのコントローラによってアクセスされるサブミッション・キューに読み出しおよび書き込みを置いてもよい。記載した実施形態は、複数のプロセッサ・コアによるキャッシュに対する読み出しおよび書き込みの管理と、ＲＡＩＤアレイ内のストレージ・デバイス間にストライピングされるストライド・グループなどのストレージ・デバイスのアレイに記憶されるグループ内のトラックのデステージとを提供する。記載した実施形態は、独立したコアまたはプロセスがストライド・グループ内の異なるトラックに同時に書き込むことを可能にする排他的トラック・ロックを提供し、ストライド内のトラックのデステージを管理するための排他的および共有グループ・ロックを提供する。デステージ動作は、排他的グループ・ロックを受け取った場合にのみ進行することが許可され得、排他的グループ・ロックは、ストライド・グループ内のトラックへのロックを保持している他のライタが存在しない場合に付与され、付与されると、デステージ動作中に書き込みによってストライド・グループに書き込まれないようにする。
【００２０】
記載した実施形態は、別個のコントローラがキャッシュとストレージ・デバイスとの間の読み出しおよび書き込みを管理する環境におけるキャッシュ管理技術の改善を提供する。記載した実施形態は、ロックが付与された書き込みが、ストライド・グループ内のトラックに書き込み、ストレージ・デバイスにわたって書き込まれるストライド・グループのデステージ中に書き込みが進行しないように調整することを可能にする。
【００２１】
図１は、複数のコア１０２１、１０２２．．．．１０２ｎと、メモリ１０４とを含むストレージ・コントローラ１００または他のタイプのシステムの一実施形態を示しており、メモリ１０４は、ストレージ・アレイ１１０内のストレージ・デバイス１０８からステージングされたトラックをキャッシュして、読み出し要求で利用できるようにするためのキャッシュ１０６を含む。ストレージ・コントローラ１００は、ファブリック１１４を介してサブシステム１１２と通信し、ストレージ・デバイス１０８に対する読み出し要求および書き込み要求は、サブシステム１１２によって管理される。メモリ１０４は、コア１０２１、１０２２．．．．１０２ｎのそれぞれに対して１つずつ、キュー１１６を含み、各コアのキュー１１６は、読み出し要求および書き込み要求が追加される１つまたは複数のサブミッション・キュー（ＳＱ：ｓｕｂｍｉｓｓｉｏｎ  ｑｕｅｕｅｓ）１１８と、完了キュー１２０（ＣＱ：ｃｏｍｐｌｅｔｉｏｎ  ｑｕｅｕｅ）とを含む。キュー１１８、１２０は、キューが処理される場合に、要求がそこからアクセスされるキューの一端を指すヘッド・ポインタと、要求が追加されるキューの一端を指すテール・ポインタと、をそれぞれ有する循環キューを備え得る。コア１０２ｉはＩ／Ｏマネージャ１２２を実行して、コア１０２ｉが、ストレージ・デバイス１０８からキャッシュ１０６にトラックをステージングし、キャッシュ１０６からストレージ・デバイス１０８にトラックをデステージするための要求をサブミッション・キュー１１８に追加する。
【００２２】
Ｉ／Ｏマネージャ１２２がコントローラ１２４内のサブミッション・キュー・ドアベル１２６に書き込んだ場合に、サブシステム１１２内のコントローラ１２４は、Ｉ／Ｏマネージャ１２２によってサブミッション・キュー１１８に追加されたストレージ・デバイス１０８に対する読み出し要求および書き込み要求を取り出す。ストレージ・デバイス１０８に対する取り出された読み出し要求または書き込み要求を完了したことに応答して、コントローラ１２４は、読み出し要求または書き込み要求の完了を完了キュー１２０に返して、読み出し要求または書き込み要求を開始したコア１０２１、１０２２．．．．１０２ｎに完了を知らせる。Ｉ／Ｏマネージャ１２２を実行しているコア１０２ｉは、完了キュー・ドアベル１２８に書き込んで、完了キュー１２０に書き込まれた完了を処理し終わったことを示すことによって、完了を調整し得る。
【００２３】
不揮発性メモリ・エクスプレス（ＮＶＭｅ）の実施形態では、コントローラ１２４はＮＶＭｅコントローラを備え得、Ｉ／Ｏマネージャ１２２は、ＮＶＭｅコントローラ１２４とインターフェースし、キュー１１６を実装するためのＮＶＭｅドライバを含み得る。ＮＶＭｅコントローラ１２４は、コア１０２ｉによって使用される各サブミッション・キューに対して１つずつ、サブミッション・キュー・ドアベル１２６を含み、また、完了キュー・ドアベル１２８を含み得る。要求を自身のサブミッション・キュー１１８に追加するコア１０２ｉは、コントローラ１２４のサブミッション・キュー・ドアベル１２６に書き込んで、コントローラ１２４に、書き込まれたサブミッション・キュー・ドアベル１２６に関連付けられたサブミッション・キュー１１８に追加された読み出し要求または書き込み要求にアクセスさせる。コントローラ１２４は、フェッチしたコマンドを任意の順序で実行し得る。コア１０２１、１０２２．．．．１０２ｎが、完了キュー１２０に示された読み出し／書き込み要求の完了を処理する場合、コア１０２１、１０２２．．．．１０２ｎは、完了キュー１２０の完了キュー・ドアベル１２８に書き込む。コントローラ１２４は、ストレージ・デバイス１０８に実装された不揮発性メモリ空間の各部を含む複数のネームスペース１３０をサポートし得る。ストレージ・コントローラ１００は、読み出し要求および書き込み要求を、ストレージ・デバイス１０８内の不揮発性メモリ空間にマップするネームスペース１３０に向かわせ得る。ストレージ・デバイス１０８は、ＮＶＭｅコントローラ１２４とインターフェースするためのハードウェアおよびソフトウェアをさらに含むであろう。
【００２４】
図１の実施形態は、ファブリックを介してＮＶＭｅを実装し得、ストレージ・コントローラ１００およびサブシステム１１２は、ファブリック１１４を介して通信する。そのような実施形態では、ストレージ・コントローラ１００およびＮＶＭｅサブシステム１１２は、たとえば、リモート・ダイレクト・メモリ・アクセス（ＲＤＭＡ：Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）、ＲＤＭＡオーバー・コンバージド・イーサネット（Ｒ）（ＲｏＣＥ：ＲＤＭＡ  ｏｖｅｒ  Ｃｏｎｖｅｒｇｅｄ  Ｅｔｈｅｒｎｅｔ）、インターネット・ワイドエリアＲＤＭＡプロトコル（ｉＷＡＲＰ：Ｉｎｔｅｒｎｅｔ  Ｗｉｄｅ−ａｒｅａ  ＲＤＭＡ  Ｐｒｏｔｏｃｏｌ）、インフィニバンド、およびファイバ・チャネルなどを使用してネットワーク通信を可能にするトランスポート・レイヤ１３２、１３４をそれぞれ含む。代替実施形態では、ＮＶＭＥサブシステム１１２などのサブシステム１１２は、ストレージ・コントローラ１００内の周辺機器相互接続エクスプレス（ＰＣＩｅ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）カード内に実装され得、ストレージ・コントローラ１００およびＮＶＭｅサブシステム１１２は、ＰＣＩｅインターフェースを介して通信する。
【００２５】
ファブリック１１４は、ローカル・エリア・ネットワーク（ＬＡＮ：Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ストレージ・エリア・ネットワーク（ＳＡＮ：Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ワイド・エリア・ネットワーク（ＷＡＮ：Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ピアツーピア・ネットワーク、ワイヤレス・ネットワーク、インターネットなどを含む１つまたは複数のネットワークを備え得る。
【００２６】
ストレージ・コントローラ１００は、ストレージ・デバイス１０８からキャッシュ１０６にトラックをステージングおよびデステージするために、コア１０２１、１０２２．．．．１０２ｎによって実行される入力／出力（Ｉ／Ｏ：Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）マネージャ・コード１２２を保持する。Ｉ／Ｏマネージャ・コード１２２はさらに、独立ディスク冗長アレイ（ＲＡＩＤ）アルゴリズムまたは他のタイプのストレージ・アレイ管理アルゴリズムを実装して、ストライド・グループ内のトラックをストレージ・デバイス１０８にストライピングし、ストライド・グループ内のトラックのパリティを計算して、トラックと共にストレージ・デバイス１０８間にストライピングし得る。Ｉ／Ｏマネージャ１２２は、ストレージ・デバイス１０８内に構成されるストライド・グループに対してストライド・グループ・ロック２００を維持して、異なるコア１０２１、１０２２．．．．１０２ｎによって実行されているストライド・グループ内のトラックの読み出し、書き込み、ステージング、およびデステージを管理することによって、競合を回避し、キャッシュおよびデステージの一貫性を維持する。
【００２７】
コア１０２１、１０２２．．．．１０２ｎは、同一の中央処理装置（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）／集積回路基板上に複数のコアを備えるか、または別々の処理ユニットを備え得る。各コア１０２１、１０２２．．．．１０２ｎは、Ｉ／Ｏマネージャ１２２のコードを実行して、キャッシュ１０６に保持されている、ストレージ・デバイス１０８にストライドで構成されたトラックに対する読み出しおよび書き込みを送ることによって、ストレージ・デバイス１０８からトラックをステージングし、キャッシュ１０６からトラックのストライド・グループをデステージしてストレージ・デバイス間にストライピングし得る。
【００２８】
Ｉ／Ｏマネージャ１２２は、キャッシュ１０６内のトラックのインデックスを管理ブロック・ディレクトリ内のキャッシュ管理ブロックに提供するトラック・インデックスを保持し得る。管理ブロック・ディレクトリは、キャッシュ管理ブロックを含み、キャッシュ１０６内の各トラックに対して１つのキャッシュ管理ブロックが存在し、これは、キャッシュ内のそのトラックに関するメタデータ、たとえば、そのトラックが保持されるストライド・グループに関するストライド・グループ情報などを提供する。トラック・インデックスは、トラックをキャッシュ管理ブロックに関連付けて、キャッシュ１０６内のトラックに関する情報を提供する。
【００２９】
ストレージ・コントローラ１００は、インターナショナル・ビジネス・マシーンズ社（ＩＢＭ（ＩＢＭ社の登録商標）：Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ）のＤＳ８０００（ＩＢＭ社の登録商標）およびＤＳ８８８０ストレージ・システム、または他のベンダ製のストレージ・コントローラおよびストレージ・システムなどの、ストレージ・システムを備え得る。（ＩＢＭ（ＩＢＭ社の登録商標）およびＤＳ８０００（ＩＢＭ社の登録商標）は、世界中でのインターナショナル・ビジネス・マシーンズ社の商標である。）
【００３０】
ストレージ・アレイ１１０内のストレージ・デバイス１０８は、異なるタイプまたはクラスのストレージ・デバイスを備え得、たとえば、磁気ハード・ディスク・ドライブ、磁気テープ・ストレージ、ソリッド・ステート・エレクトロニクスから構成されるソリッド・ステート・ストレージ・デバイス（ＳＳＤ）、ＥＥＰＲＯＭ（電気的消去可能プログラム可能読み取り専用メモリ：Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュ・メモリ、フラッシュ・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）ドライブ、ストレージクラス・メモリ（ＳＣＭ：ｓｔｏｒａｇｅ−ｃｌａｓｓ  ｍｅｍｏｒｙ）など、相変化メモリ（ＰＣＭ：Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ）、抵抗ランダム・アクセス・メモリ（ＲＲＡＭ：ｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、スピン注入メモリ（ＳＴＭ−ＲＡＭ：ｓｐｉｎ  ｔｒａｎｓｆｅｒ  ｔｏｒｑｕｅ  ｍｅｍｏｒｙ）、導電性ブリッジＲＡＭ（ＣＢＲＡＭ：ｃｏｎｄｕｃｔｉｖｅ  ｂｒｉｄｇｉｎｇ  ＲＡＭ）、磁気ハード・ディスク・ドライブ、光ディスク、テープなどがある。記憶域内のボリュームはさらに、単純ディスク束（ＪＢＯＤ：Ｊｕｓｔ  ａ  Ｂｕｎｃｈ  ｏｆ  Ｄｉｓｋｓ）、ダイレクト・アクセス・ストレージ・デバイス（ＤＡＳＤ：Ｄｉｒｅｃｔ  Ａｃｃｅｓｓ  Ｓｔｏｒａｇｅ  Ｄｅｖｉｃｅ）、独立ディスク冗長アレイ（ＲＡＩＤ）アレイ、仮想化デバイスなどの、デバイスのアレイから構成され得る。さらに、ストレージ・アレイ１１０内のストレージ・デバイス１０８は、異なるベンダ製の異種のストレージ・デバイス、および異なるタイプのストレージ・デバイス、たとえば、ＳＳＤなどの第２のタイプのストレージ・デバイスよりもデータ転送速度が低いハード・ディスク・ドライブなどの第１のタイプのストレージ・デバイスを備え得る。
【００３１】
ＮＶＭｅ実装では、ストレージ・デバイス１０８は、ＮＶＭｅのＳＳＤデバイスなど、ＮＶＭｅサブシステム１１２とインターフェースするためのＮＶＭｅコンポーネントを含むであろう。
【００３２】
メモリ１０４は、当技術分野で知られている適切なシステム・メモリを備え得、これには、揮発性および不揮発性メモリ・デバイス、たとえば、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ：Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、相変化メモリ（ＰＣＭ）、磁気抵抗ランダム・アクセス・メモリ（ＭＲＡＭ：Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ−ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、スピン注入（ＳＴＴ：Ｓｐｉｎ  Ｔｒａｎｓｆｅｒ  Ｔｏｒｑｕｅ）−ＭＲＡＭ、ＳＲＡＭストレージ・デバイス、ＤＲＡＭ、強誘電体ランダム・アクセス・メモリ（ＦｅＴＲＡＭ：ｆｅｒｒｏｅｌｅｃｔｒｉｃ  ｒａｎｄｏｍ−ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、ナノワイヤベースの不揮発性メモリ、およびバイト単位でアドレス指定可能なライトインプレース（ｗｒｉｔｅ−ｉｎ−ｐｌａｃｅ）メモリを有する不揮発性ダイレクト・インライン・メモリ・モジュール（ＤＩＭＭ：Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｄｉｒｅｃｔ  Ｉｎ−Ｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）などが含まれる。
【００３３】
図２に、ストレージ・デバイス１０８において構成されるストライド・グループの１つに対するストライド・グループ・ロック２００ｉのインスタンスの一実施形態を示し、これは、ストライド・グループを識別するストライド・グループ識別子（ＩＤ：ｉｄｅｎｔｉｆｉｅｒ）２０２と、ストライド・グループ２０２内の各トラックに対するトラック・ロック２０４１、２０４２．．．２０４ｎであって、ストライド・グループ２０２内の各トラックへのトラック・ロック２０４ｉが、そのトラックに排他的ロックが付与されているか否かを示す排他的トラック・ロック２０６と、そのトラックに付与されている共有トラック・ロックの数を示す共有トラック・ロック・カウンタ２０８とを含む、トラック・ロック２０４１、２０４２．．．２０４ｎと、ストライド・グループ２０２への排他的ロックが付与されていることを示す排他的ストライド・ロック２１０と、付与されている共有ストライド・ロックの数を示す共有ストライド・ロック・カウンタ２１２と、を含む。ストライド・グループ・ロック２００ｉの情報はさらに、ロック２０４ｉが提供されているストライド・グループ内のトラックを示し得る。
【００３４】
図３に、ストライド・グループ内のトラックの読み出し要求を処理するためにコア１０２１、１０２２．．．．１０２ｎによって実行されるＩ／Ｏマネージャ１２２によって実施される動作の一実施形態を示す。（ブロック３００で）プロセッサ／コア１０２１、１０２２．．．．１０２ｎからストライド・グループ内のトラックの読み出しを受け取ると、（ブロック３０２で）要求されたトラックがキャッシュ１０６にある場合、Ｉ／Ｏマネージャ１２２は、（ブロック３０４で）トラックまたはトラックを含むストライド２１０に対して排他的トラック・ロック２０６が保持されているか否かを判定する。保持されている場合、トラックは書き込み中またはデステージ中であり、トラックへの共有ロックを取得するために、（ブロック３０６で）読み出し要求がキューイングまたは再試行される。（ブロック３０４で）排他的トラック・ロック２０６または排他的ストライド・ロック２１０が保持されていない場合、（ブロック３０８で）トラックの共有トラック・ロック・カウンタ２０８をインクリメントして、要求コア１０２１、１０２２．．．．１０２ｎに共有トラック・ロックが付与される。（ブロック３１０で）読み出しが完了した場合に共有トラック・ロック・カウンタ２０８がデクリメントされる。
【００３５】
（ブロック３０２で）要求されたトラックがキャッシュ１０６にない場合、Ｉ／Ｏマネージャ１２２は、（ブロック３１２で）キャッシュ１０６内で要求されたトラックにセグメントを割り当て、（ブロック３１４で）要求されたトラックに排他的トラック・ロック２０６を付与し、共有ストライド・ロック・カウンタ２１２をインクリメントして、ステージングするトラックを含むストライドに共有ストライド・ロックを付与する。（ブロック３１６で）要求されたトラックのセグメントを読み出すための読み出し要求が、サブミッション・キュー１１８にキューイングされる。ＮＶＭｅ実装では、ストレージ・コントローラ１００のＮＶＭｅドライバは、ファブリック１１４またはバス・インターフェースを介してサブミッション・キュー・ドアベル１２６に書き込んで、読み出し要求を開始したコア１０２ｉのサブミッション・キュー１１８に処理すべきＩ／Ｏ要求があることをコントローラ１２４にシグナリングし得る。コントローラ１２４は、（ブロック３１８で）トラックのセグメントを、キャッシュ１０６内でトラックに割り当てられたセグメントに書き込み得る。コントローラ１２４はまた、要求を開始したコア１０２ｉの完了キュー１２０に完了を書き込んで、読み出しが完了したことをシグナリングする。次に、Ｉ／Ｏマネージャ１２２は、（ブロック３２０で）要求されたトラックへのトラック・ロック２０６を解除し、共有ストライド・ロック・カウンタ２１２をデクリメントして、ステージングするトラックを含むストライドへの共有ストライド・ロックを解除することにより、ステージングするトラックに対して保持されているロックを解除し得る。ステージング・プロセスのために保持されたロックを解除した後、制御はブロック３０８に進んで、開始コア１０２ｉにキャッシュ１０６からトラックを読み出すことを許可し得る。
【００３６】
図３の実施形態では、読み出し要求のためにキャッシュにステージングするトラックおよびそのトラックを含むストライド・グループに対して、そのトラックに書き込みまたはデステージできるようにする前に、排他的トラック・ロック２０６および共有ストライド・ロックが保持される。記載した実施形態は、異なるコアがストライド・グループ内の異なるトラックに同時に書き込み得る間に、またはトラックがデステージされているストライド・グループ内のものである間に、トラックの読み出しが発生することを可能にして、コンピュータ技術への改善を提供する。さらに、特定の実施形態では、ストライド・グループ内のトラックに対する保留中の読み出しがある間に、ストライド・グループへのデステージは進行することが許可され得る。記載した実施形態は、キャッシュ内のトラックに対する動作と、キャッシュへのトラックのステージングとを調整するためのロック、データ構造、および機能を提供する。
【００３７】
図４に、ストライド・グループ内のトラックへの書き込み要求を処理するためにコア１０２１、１０２２．．．．１０２ｎによって実行されるＩ／Ｏマネージャ１２２によって実施される動作の一実施形態を示す。（ブロック４００で）プロセッサ／コア１０２１、１０２２．．．．１０２ｎからストライド・グループ内のトラックへの書き込みを受け取ると、Ｉ／Ｏマネージャ１２２は、（ブロック４０２で）排他的２０６または共有２０８トラック・ロックがトラックに対して保持されているか否か、あるいは書き込むトラックを含むストライド・グループ２００ｉに対して保持されている排他的ストライド・ロック２１０があるか否かを判定する。保持されている場合、トラックは読み出し、書き込み、またはデステージ中であり、トラックへの排他的ロック２０６を取得するために（ブロック４０４で）書き込み要求がキューイングまたは再試行される。（ブロック４０２で）排他的２０６／共有２０８トラック・ロックまたは排他的ストライド・ロック２１０が保持されていない場合、（ブロック４０６で）排他的トラック・ロック２０６が要求コア１０２１、１０２２．．．．１０２ｎに付与され、（ブロック４０８で）共有ストライド・ロック・カウンタ２１２をインクリメントして、書き込むトラックを含むストライド・グループに共有ストライド・ロックが付与される。次に、（ブロック４１０で）キャッシュ１０６内で割り当てられたトラックに対して書き込みが実行される。書き込みが完了すると、（ブロック４１２で）排他的トラック・ロック２０６が解除され、共有ストライド・ロック・カウンタ２１２をデクリメントして、共有ストライド・ロックが解除される。
【００３８】
図４の実施形態では、書き込むトラックおよびそのトラックを含むストライド・グループに対して、排他的トラック・ロックおよび共有ストライド・ロックを保持することによって、トラックがキャッシュ１０６に書き込まれている間に、トラックが読み出されないようにし、またはトラックを含むストライド・グループがデステージされないようにする。記載した実施形態は、異なるコアがストライド・グループ内のトラックに同時に書き込みを行っている間に、トラックへの書き込みが同時に発生することを可能にし、保留中の書き込みの対象となるトラック、またはデステージされているストライド・グループ内のトラックへの書き込みを開始しないことにより、ストライド・グループのデステージと、書き込み動作とを調整することを可能にして、コンピュータ技術への改善を提供する。さらに、記載したロックの実施形態は、共有ストライド・ロック・カウンタ２１２がゼロより大きいことによって示される、共有ストライド・ロックが保持されていることによって示されるように、ストライド・グループ内のトラックへの保留中の書き込みが存在する間に、デステージが進行しないようにする。
【００３９】
図５に、キャッシュ１０６内にストライド・グループ内の全てではないトラックを有する部分的ストライド・グループをデステージするためにコア１０２１、１０２２．．．．１０２ｎによって実行されるＩ／Ｏマネージャ１２２によって実施される動作の一実施形態を示す。Ｉ／Ｏマネージャ１２２は（ブロック５００で）、デステージするストライド・グループを選択するための選択アルゴリズム、たとえば、ワイズ・オーダー・ライティング（ＷＯＷ：Ｗｉｓｅ  Ｏｒｄｅｒ  Ｗｒｉｔｉｎｇ）、または当技術分野で知られている他の適切なストライド・グループ選択技法などを使用して、デステージ動作を開始し得る。（ブロック５０２で）共有ストライド・ロック・カウンタ２１２がゼロより大きいことによって示されるように、共有ストライド・ロックがストライド・グループに対して保持されている場合、排他的ストライド・ロック２１０を付与できるようになるまで、（ブロック５０４で）デステージ要求がキューイングまたは再試行される。（ブロック５０２で）ストライド・グループがデステージする共有ストライド・ロックに対して保持されていない場合、すなわち、共有ストライド・ロック・カウンタ２１２がゼロである場合、Ｉ／Ｏマネージャ１２２は、（ブロック５０６で）デステージするストライド・グループに排他的ストライド・ロック２１０を付与する。（ブロック５０８で）キャッシュ１０６内のストライド・グループの変更されたトラックの特定が行われる。（ブロック５１０で）キャッシュ１０６内でキャッシュ・セグメントが特定された変更されたトラックおよび古いパリティ・データに割り当てられて、ストレージ・デバイス１０８から変更されたトラックの変更前バージョンおよび古いパリティ・データをステージングするのに利用可能になる。Ｉ／Ｏマネージャは（ブロック５１２で）、割り当てられたキャッシュ・セグメントにステージングする、ストレージ・デバイス１０８内の変更されたトラックのセグメントと、古いパリティ・データを有するセグメントとの読み出しリストを生成し得る。ＮＶＭｅ実装では、読み出しリストは、ストレージ・デバイス１０８からキャッシュ１０６に読み出すセグメントを示す分散収集リスト（ＳＧＬ：ｓｃａｔｔｅｒ  ｇａｔｈｅｒ  ｌｉｓｔ）または物理領域スペース（ＰＲＰ：Ｐｈｙｓｉｃａｌ  Ｒｅｇｉｏｎ  Ｓｐａｃｅ）リストを含み得る。Ｉ／Ｏマネージャ１２２は（ブロック５１４で）、読み出す変更されたトラックおよび古いパリティ・データのセグメントと、読み出されたセグメントを記憶するための割り当てられたキャッシュ・セグメントのキャッシュ１０６内の宛先位置とを識別する読み出しリストを有する読み出し要求（または複数の読み出し要求）を、デステージ動作を実行しているコア１０２のサブミッション・キュー１１８に追加する。Ｉ／Ｏマネージャ１２２は、（ブロック５１６で）ドアベル・レジスタ、すなわち、サブミッション・キュー・ドアベル１２６に書き込んで、読み出し要求が追加されたサブミッション・キュー１１８を読み出すようにコントローラ１２４にシグナリングする。
【００４０】
コントローラ１２４が読み出しリスト内のセグメントをストレージ・デバイス１０８からキャッシュ１０６内の割り当てられたキャッシュ・セグメントに書き込んだ後に、コントローラ１２４が（ブロック５１８で）デステージを実行しているコア１０２ｉの完了キュー１２０に完了を追加すると、Ｉ／Ｏマネージャ１２２は（ブロック５２０で）、変更されたトラック、変更されたトラックの古いデータ、および古いパリティを使用して、読み出し−変更−書き込み中に実行されるデータに対するＸＯＲ計算などにより、新たなパリティを計算して、パリティを更新する。パリティを更新した後、Ｉ／Ｏマネージャ１２２は（ブロック５２４で）、デステージするストライド・グループの変更されたトラックと、計算された新たなパリティとを有するキャッシュ１０６セグメントを示す書き込みリスト、たとえば、ＮＶＭｅ実装の場合は分散収集リストまたはＰＲＰリストを生成する。Ｉ／Ｏマネージャ１２２は（ブロック５２６で）、ストレージ・デバイス１０８内のネームスペース１３０に書き込む変更されたトラックおよび新たなパリティ・データのキャッシュ・セグメントを識別する書き込みリストを有する書き込み要求（または複数の書き込み要求）をサブミッション・キュー１１８に追加する。Ｉ／Ｏマネージャ１２２は、（ブロック５２８で）ドアベル・レジスタ、すなわち、サブミッション・キュー・ドアベル１２６に書き込んで、書き込み要求が追加されたサブミッション・キュー１１８を読み出すようにコントローラ１２４にシグナリングする。
【００４１】
コントローラ１２４が、書き込みリストに示されたキャッシュ１０６内のセグメントをストレージ・デバイス１０８の宛先位置に書き込んだ後に、コントローラ１２４が（ブロック５３０で）デステージを実行しているコア１０２ｉの完了キュー１２０に完了を追加すると、Ｉ／Ｏマネージャ１２２は（ブロック５３２で）デステージされたストライドへの排他的ストライド・ロック２１０を解除する。
【００４２】
図５の実施形態では、デステージするストライド・グループに対して排他的ストライド・ロックを保持することによって、トラックがデステージされている間にトラックが読み書きされないようにするが、デステージ動作中に、読み出しの保留は継続し得る。記載した実施形態は、デステージ動作中に読み書きが開始されないようにし、デステージするストライド・グループの全てのトラックがキャッシュにない場合に、パリティの更新に使用する変更されたトラックの変更前バージョンのセグメントをステージングすることによって、部分的ストライド・グループをデステージするためのコンピュータ技術への改善を提供する。一方、共有ストライド・ロック・カウンタ２１２がゼロより大きいことによって示される、共有ストライド・ロックが保持されていることによって示されるように、ストライド・グループ内のトラックへの保留中の書き込みが存在する。
【００４３】
図６に、変更されたトラックを含むストライド・グループの全てのトラックがキャッシュ１０６にある場合に、完全ストライド・グループをデステージするためにコア１０２１、１０２２．．．．１０２ｎによって実行されるＩ／Ｏマネージャ１２２によって実施される動作の一実施形態を示す。Ｉ／Ｏマネージャ１２２は（ブロック６００で）、デステージするストライド・グループを選択するための選択アルゴリズム、たとえば、ワイズ・オーダー・ライティング（ＷＯＷ）または当技術分野で知られている他の適切なストライド・グループ選択技法などを使用して、デステージ動作を開始し得る。（ブロック６０２で）共有ストライド・ロック・カウンタ２１２がゼロより大きいことによって示されるように、ストライド・グループに対して共有ストライド・ロックが保持されている場合、排他的ストライド・ロック２１０を付与できるようになるまで、（ブロック６０４で）デステージ要求がキューイングまたは再試行される。（ブロック６０２で）ストライド・グループがデステージする共有ストライド・ロックに対して保持されていない場合、すなわち、共有ストライド・ロック・カウンタ２１２がゼロである場合、Ｉ／Ｏマネージャ１２２は、（ブロック６０６で）デステージするストライド・グループに排他的ストライド・ロック２１０を付与する。次に、Ｉ／Ｏマネージャ１２２は、（ブロック６０８で）キャッシュ１０６内のストライドの全てのトラックからパリティを計算し、パリティを新たなパリティで更新する。
【００４４】
Ｉ／Ｏマネージャ１２２は、（ブロック６１０で）ストライドの変更されたトラックのセグメントと、計算された新たなパリティとを示す書き込みリストを生成する。Ｉ／Ｏマネージャ１２２は、（ブロック６１２で）ストレージ・デバイス１０８内のネームスペースに書き込む、変更されたトラックおよび新たなパリティ・データのキャッシュ・セグメントを識別する書き込みリストを有する書き込み要求をサブミッション・キュー１１８に追加する。Ｉ／Ｏマネージャ１２２は、（ブロック６１４で）サブミッション・キュー・ドアベル１２６に書き込んで、書き込み要求が追加されたサブミッション・キュー１１８を読み出すようにコントローラ１２４にシグナリングする。
【００４５】
コントローラ１２４が書き込みリストに示されたキャッシュ１０６内のセグメントをストレージ・デバイス１０８の宛先位置に書き込んだ後に、コントローラ１２４が（ブロック６１６で）デステージを実行しているコア１０２ｉの完了キュー１２０に完了を追加すると、Ｉ／Ｏマネージャ１２２は（ブロック６１８で）デステージされたストライドへの排他的ストライド・ロック２１０を解除する。
【００４６】
図５および図６の実施形態では、デステージするストライド・グループに対して排他的ストライド・ロックを保持することによって、トラックがデステージされている間にトラックが読み書きされないようにするが、デステージ動作中に、読み出しの保留は継続し得る。記載した実施形態は、デステージ動作中に読み書きが開始されないようにし、デステージするストライド・グループの全てのトラックがキャッシュにない場合に、パリティの更新に使用する変更されたトラックの変更前バージョンのセグメントをステージングすることによって、部分的または完全ストライド・グループをデステージするためのコンピュータ技術への改善を提供する。
【００４７】
本発明は、システム、方法、またはコンピュータ・プログラム製品あるいはそれらの組み合わせとして実装され得る。コンピュータ・プログラム製品は、本発明の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体（または複数の媒体）を含み得る。
【００４８】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のために命令を保持および記憶可能な有形のデバイスとすることができる。コンピュータ可読記憶媒体は、たとえば、限定はしないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、または前述の任意の適切な組み合わせであり得る。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストには、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｐｏｒｔａｂｌｅ  ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、デジタル多用途ディスク（ＤＶＤ：ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋ）、メモリー・スティック（Ｒ）、フロッピー・ディスク（Ｒ）、命令が記録されたパンチ・カードまたは溝の隆起構造などの機械的にコード化されたデバイス、および前述の任意の適切な組み合わせが含まれる。コンピュータ可読記憶媒体は、本明細書で使用する場合、たとえば、電波またはその他の自由に伝搬する電磁波、導波管もしくはその他の伝送媒体を伝搬する電磁波（たとえば、光ファイバ・ケーブルを通過する光パルス）、または有線で伝送される電気信号など、一過性の信号自体であると解釈されるべきではない。
【００４９】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれの計算／処理デバイスに、あるいは、たとえばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、またはワイヤレス・ネットワーク、あるいはそれらの組み合わせなどのネットワークを介して外部コンピュータまたは外部ストレージ・デバイスにダウンロードすることができる。ネットワークは、銅線伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはそれらの組み合わせを含み得る。各計算／処理デバイスのネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、コンピュータ可読プログラム命令を転送して、それぞれの計算／処理デバイス内のコンピュータ可読記憶媒体に記憶する。
【００５０】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：ｉｎｓｔｒｕｃｔｉｏｎ−ｓｅｔ−ａｒｃｈｉｔｅｃｔｕｒｅ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいはＪａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または類似のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つまたは複数のプログラミング言語の任意の組み合わせで書かれたソース・コードまたはオブジェクト・コードであり得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上かつ部分的にリモート・コンピュータ上で、あるいは完全にリモート・コンピュータまたはサーバ上で実行し得る。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続され得、または（たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに接続され得る。一部の実施形態では、たとえば、プログラマブル論理回路、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ：ｆｉｅｌｄ−ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙｓ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ａｒｒａｙｓ）を含む電子回路は、本発明の態様を実行するために、電子回路を個人向けにするためのコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行し得る。
【００５１】
本発明の態様は、本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して本明細書で説明している。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方におけるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装できることは理解されよう。
【００５２】
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供して、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行された命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定された機能／行為を実施するための手段を生成するようなマシンを生成し得る。また、これらのコンピュータ可読プログラム命令は、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定された機能／行為の態様を実施する命令を含む製造品を含むような特定の方法で機能するように、コンピュータ、プログラム可能データ処理装置、または他のデバイスあるいはそれらの組み合わせに指示することが可能なコンピュータ可読記憶媒体に記憶され得る。
【００５３】
また、コンピュータ可読プログラム命令をコンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードして、コンピュータ、他のプログラム可能装置または他のデバイス上で一連の演算ステップを実行させることによって、コンピュータ、他のプログラム可能装置、または他のデバイス上で実行された命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定された機能／行為を実施するようなコンピュータ実装処理を生成し得る。
【００５４】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示している。これに関して、フローチャートまたはブロック図の各ブロックは、指定された論理的機能（複数可）を実施するための１つまたは複数の実行可能命令を含むモジュール、セグメント、または命令の一部を表し得る。一部の代替的実装形態では、ブロックに示す機能は、図に示す順序以外で発生し得る。たとえば、関与する機能性に応じて、連続して示す２つのブロックは、実際には実質的に同時に実行され得、またはそれらのブロックは、場合により逆の順序で実行され得る。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせは、指定された機能または行為を実行するか、または専用ハードウェアおよびコンピュータ命令の組み合わせを実行する専用のハードウェア・ベースのシステムによって実装できることにも留意されたい。
【００５５】
ストレージ・コントローラ１００およびサブシステム１１２を含む図１の計算コンポーネントは、図７に示すコンピュータ・システム７０２などの１つまたは複数のコンピュータ・システムで実装され得る。コンピュータ・システム／サーバ７０２は、コンピュータ・システムによって実行されるプログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的なコンテキストで記述され得る。一般に、プログラム・モジュールは、特定のタスクを実行するかまたは特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含み得る。コンピュータ・システム／サーバ７０２は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散型クラウド・コンピューティング環境で実施され得る。分散型クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカルおよびリモート両方のコンピュータ・システム記憶媒体に配置され得る。
【００５６】
図７に示すように、コンピュータ・システム／サーバ７０２は、汎用コンピューティング・デバイスの形で示している。コンピュータ・システム／サーバ７０２のコンポーネントは、１つまたは複数のプロセッサまたは処理ユニット７０４と、システム・メモリ７０６と、システム・メモリ７０６を含む様々なシステム・コンポーネントをプロセッサ７０４に結合するバス７０８と、を含み得るが、これらに限定されない。バス７０８は、メモリバスまたはメモリ・コントローラ、ペリフェラル・バス、加速グラフィックス・ポート、および様々なバス・アーキテクチャのいずれかを使用するプロセッサまたはローカル・バスを含む、いくつかのタイプのバス構造のうちのいずれかの１つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャには、業界標準アーキテクチャ（ＩＳＡ：Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、マイクロ・チャネル・アーキテクチャ（ＭＣＡ：Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、拡張ＩＳＡ（ＥＩＳＡ：Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ビデオ・エレクトロニクス規格協会（ＶＥＳＡ：Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカル・バス、および周辺機器相互接続（ＰＣＩ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔｓ）バスが含まれる。
【００５７】
コンピュータ・システム／サーバ７０２は、典型的には様々なコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム／サーバ７０２によってアクセス可能な任意の利用可能な媒体であり得、揮発性および不揮発性の媒体、取り外し可能および取り外し不可能な媒体の両方を含む。
【００５８】
システム・メモリ７０６は、ランダム・アクセス・メモリ（ＲＡＭ）７１０またはキャッシュメモリ７１２あるいはその両方などの、揮発性メモリの形態のコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム／サーバ７０２は、他の取り外し可能／取り外し不可能な、揮発性／不揮発性のコンピュータ・システム記憶媒体をさらに含み得る。ほんの一例として、ストレージ・システム７１３は、取り外し不可能な不揮発性の磁気媒体（非図示、通常「ハードドライブ」と呼ばれるもの）に読み書きするために設けることができる。図示していないが、取り外し可能な不揮発性の磁気ディスク（たとえば、「フレキシブル・ディスク」）に読み書きするための磁気ディスク・ドライブ、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、またはその他の光学メディアなどの取り外し可能な不揮発性の光学ディスクに読み書きするための光学ディスク・ドライブを設けることができる。そのような場合、それぞれを、１つまたは複数のデータ・メディア・インターフェースによってバス７０８に接続することができる。以下にさらに図示および説明するように、メモリ７０６は、本発明の実施形態の機能を実行するように構成されるプログラム・モジュールのセット（たとえば、少なくとも１つ）を有する少なくとも１つのプログラム製品を含み得る。
【００５９】
プログラム・モジュール７１６のセット（少なくとも１つ）を有するプログラム／ユーティリティ７１４は、限定ではなく例として、オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様に、メモリ７０６に記憶され得る。オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データまたはそれらの何らかの組み合わせはそれぞれ、ネットワーキング環境の実装を含み得る。コンピュータ７０２のコンポーネントは、本明細書に記載の本発明の実施形態の機能または方法論あるいはその両方を一般的に実行するプログラム・モジュール７１６として実装され得る。図１のシステムは、１つまたは複数のコンピュータ・システム７０２で実装され得、複数のコンピュータ・システム７０２で実装される場合、コンピュータ・システムはネットワークを介して通信し得る。
【００６０】
コンピュータ・システム／サーバ７０２はまた、キーボード、ポインティング・デバイス、ディスプレイ７２０などの１つまたは複数の外部デバイス７１８、ユーザとコンピュータ・システム／サーバ７０２とのインタラクションを可能にする１つまたは複数のデバイス、またはコンピュータ・システム／サーバ７０２が１つまたは複数の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス（たとえば、ネットワーク・カード、モデムなど）、あるいはそれらの組み合わせと通信し得る。そのような通信は、入力／出力（Ｉ／Ｏ）インターフェース７２２を介して行うことができる。またさらに、コンピュータ・システム／サーバ７０２は、ネットワーク・アダプタ７２４を介して、ローカル・エリア・ネットワーク（ＬＡＮ）、一般的なワイド・エリア・ネットワーク（ＷＡＮ）、またはパブリック・ネットワーク（たとえば、インターネット）、あるいはそれらの組み合わせなどの、１つまたは複数のネットワークと通信することができる。図示のように、ネットワーク・アダプタ７２４は、バス７０８を介してコンピュータ・システム／サーバ７０２の他のコンポーネントと通信する。図示していないが、他のハードウェアまたはソフトウェアあるいはその両方のコンポーネントが、コンピュータ・システム／サーバ７０２と共に使用され得ることを理解されたい。例には、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが含まれるが、これらに限定されない。
【００６１】
「一実施形態（ａｎ  ｅｍｂｏｄｉｍｅｎｔ）」、「実施形態（ｅｍｂｏｄｉｍｅｎｔ）」、「複数の実施形態（ｅｍｂｏｄｉｍｅｎｔｓ）」、「その実施形態（ｔｈｅ  ｅｍｂｏｄｉｍｅｎｔ）」、「それらの実施形態（ｔｈｅ  ｅｍｂｏｄｉｍｅｎｔｓ）」、「１つまたは複数の実施形態（ｏｎｅ  ｏｒ  ｍｏｒｅ  ｅｍｂｏｄｉｍｅｎｔｓ）」、「いくつかの実施形態（ｓｏｍｅ  ｅｍｂｏｄｉｍｅｎｔｓ）」、および「１つの実施形態（ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ）」という用語は、特に明記しない限り、「本発明（複数可）の１つまたは複数の（全てではない）実施形態」を意味する。
【００６２】
「含む（ｉｎｃｌｕｄｉｎｇ）」、「備える（ｃｏｍｐｒｉｓｉｎｇ）」、「有する（ｈａｖｉｎｇ）」という用語およびそれらの変形は、特に明記しない限り、「含むが限定されない（ｉｎｃｌｕｄｉｎｇ  ｂｕｔ  ｎｏｔ  ｌｉｍｉｔｅｄ  ｔｏ）」ことを意味する。
【００６３】
列挙された項目のリストは、特に明記しない限り、項目のいずれかまたは全てが相互に排他的であることを意味するものではない。
【００６４】
「ａ」、「ａｎ」、および「ｔｈｅ」という語は、特に明記しない限り、「１つまたは複数（ｏｎｅ  ｏｒ  ｍｏｒｅ）」を意味する。
【００６５】
互いに通信するデバイスは、特に明記しない限り、互いに継続的に通信する必要はない。さらに、互いに通信するデバイスは、１つまたは複数の仲介物を介して直接的または間接的に通信し得る。
【００６６】
互いに通信するいくつかのコンポーネントを有する一実施形態の説明は、そのようなコンポーネントの全てが必要であることを意味するものではない。むしろ、本発明の多種多様な可能な実施形態を例示するために、多様な任意選択のコンポーネントを説明している。
【００６７】
単一のデバイスまたは物品を本明細書で説明している場合、単一のデバイス／物品の代わりに、２つ以上のデバイス／物品が（協働の有無に関係なく）使用され得ることは容易に明らかであろう。同様に、（協働の有無に関係なく）２つ以上のデバイスまたは物品を本明細書に記載している場合、２つ以上のデバイスまたは物品の代わりに単一のデバイス／物品が使用され得、または図示した数のデバイスまたはプログラムの代わりに異なる数のデバイス／物品が使用され得ることは容易に明らかであろう。デバイスの機能性または特徴あるいはその両方は、代替的には、そのような機能性／特徴を有するものとして明示的に説明していない１つまたは複数の他のデバイスによって具現化され得る。このように、本発明の他の実施形態は、デバイス自体を含む必要はない。
【００６８】
本発明の様々な実施形態の前述の説明は、例示および説明の目的で提示してきた。網羅的であることも、本発明を開示した正確な形態に限定することも意図していない。上記の教示に照らして、多くの修正および変形が可能である。本発明の範囲は、この詳細な説明によってではなく、それに添付した特許請求の範囲によって限定されるものとする。上記の明細、例、およびデータは、本発明の構成の製造および使用の完全な説明を提供している。本発明の範囲から逸脱することなく、本発明の多くの実施形態を作成することができるので、本発明は添付後の本明細書の特許請求の範囲に存在する。
【図１】
2021517684.tif 000003
【図２】
2021517684.tif 000004
【図３】
2021517684.tif 000005
【図４】
2021517684.tif 000006
【図５】
2021517684.tif 000007
【図６】
2021517684.tif 000008
【図７】
2021517684.tif 000009
【国際調査報告】
2021517684.tif 000010
2021517684.tif 000011