(57)【特許請求の範囲】
【請求項１】
マルチデバイス複合データ記憶システムへのアクセスを管理する方法であって、
第１の不揮発性データ記憶装置上の第１のユニットセット内の各ユニットに関する状態及び最近アクセス数を示す第１のデータ構造を管理するステップであって、前記マルチデバイス複合データ記憶システム上の第１のブロックへのアクセス要求を受け取ること、前記第１の不揮発性データ記憶装置上の第１のユニットセット内の第１ユニットからの前記第１のブロックにアクセスすること、前記第１ユニットに対する最近アクセス数を更新すること、を含む前記管理するステップと、
第２の不揮発性データ記憶装置上の第２ユニットが、最近参照されたか否かを、確率論的に示す第２のデータ構造を管理するステップと、を含み、
前記第２のデータ構造は、１つ以上のブルームフィルタのキューである、方法。
【請求項２】
前記第２のデータ構造を管理するステップは、 
前記マルチデバイス複合データ記憶システム上の第２のブロックへのアクセス要求を受け取るステップと、
前記第２のデータ構造に対して、前記第２の不揮発性データ記憶装置上の第２ユニットの識別子を表すデータを追加するステップであって、前記第２ユニットは前記マルチデバイス複合データ記憶システムの前記第２のブロックを含む当該ステップと、
前記第２ユニットを前記第１の不揮発性データ記憶装置に移行するステップと、を含む請求項１に記載の方法。
【請求項３】
前記第２の不揮発性データ記憶装置上の前記第２ユニットの前記識別子を表すデータを、前記第２のデータ構造に追加するステップは、
前記第２ユニットの前記識別子のハッシュを計算するステップと、
前記第２ユニットの前記識別子の前記ハッシュにより定義されたインデックスに、前記第２ユニットが参照されたことを示す値を設定するステップと、を含む請求項２に記載の方法。
【請求項４】
前記第２ユニットの識別子の複数のハッシュ値を計算するために、複数のハッシュ関数が使用される、請求項３に記載の方法。
【請求項５】
前記第２の不揮発性データ記憶装置から前記第２ユニットを前記第１の不揮発性データ記憶装置に移行するステップは、
前記第２ユニットが参照されたことを示す前記値を求めて、各ハッシュにより定義されたインデックスで、前記第２のデータ構造を検索するステップと、
検索したインデックス各々が、前記第２ユニットが参照されたことを示す前記値を含む場合、前記第２の不揮発性データ記憶装置から前記第１のデータ記憶装置へ、前記第２ユニットを移動させるステップと、を含む請求項４に記載の方法。
【請求項６】
前記第２の不揮発性データ記憶装置から前記第１の不揮発性データ記憶装置へ、前記第２ユニットを移動させるステップは、多数のデータブロックを単一のユニットとして移動させるステップを含む、請求項５に記載の方法。
【請求項７】
マルチデバイス複合データ記憶装置へのアクセスを管理するためのシステムであって、
第１のユニットセット内にデータを記憶する第１の不揮発データ記憶装置と、
前記第１の不揮発データ記憶装置上の前記第１のユニットセット内の各ユニットへのアクセスのリセンシーを示す第１のデータ構造であって、第１のデータ構造は、クロックアルゴリズムを使用して保守される環状キューであり、前記環状キューは、前記第１の不揮発データ記憶装置上の第１のユニットセット内のユニットに関する状態及び最近アクセス数を示す、当該第１のデータ構造と、
第２のユニットセット内にデータを記憶するため、前記第１の不揮発性データ記憶装置に結合された第２の不揮発性データ記憶装置と、
前記第２の不揮発性データ記憶装置上のユニットが最近参照されたか否かを確率論的に示す第２のデータ構造と、を備え、
前記第２のデータ構造が、前記第１の不揮発性データ記憶装置に移行する前記第２のユニットセット内のユニットを示すブルームフィルタのキューであり、前記第１及び第２のユニットセット内の各ユニットが、１以上の論理ブロックを含む、システム。
【請求項８】
前記第１の不揮発性データ記憶装置が半導体ドライブであり、前記第２の不揮発性データ記憶装置が磁気ハードディスクドライブであり、
前記第１の不揮発性データ記憶装置及び前記第２の不揮発性データ記憶装置は、ファイルシステムによって単一論理ボリュームとしてアドレスされる、請求項７に記載のシステム。
【請求項９】
前記第２のデータ構造のサイズが、
前記第１の不揮発性データ記憶装置上のユニットの数と、
前記キュー内で許可された前記ブルームフィルタの数と、
前記ブルームフィルタ内に記憶されるユニットの最大数と、
前記ブルームフィルタ各々のサイズと、を含むパラメータにより前記第２のデータ構造が定義された、請求項７に記載のシステム。
【請求項１０】
各ユニットがマルチ論理ブロックを含み、前記第１のデータ構造は、前記第１の不揮発性データ記憶装置上の各ユニットに対し１つの要素を含み、前記第１のデータ構造の要素が、前記第１の不揮発性データ記憶装置上のユニットがフリーであることを示す、請求項７に記載のシステム。
【請求項１１】
マシーンにマルチデバイス複合データ記憶システムへのアクセスを管理するための動作を行わせる命令を記憶した不揮発性のマシーン読み取り可能な記憶媒体であって、前記動作は、
第１の不揮発性データ記憶装置上の第１のユニットセット内の各ユニットに関する状態及び最近アクセス数を示し、且つクロックアルゴリズムを介して管理される、第１のデータ構造を初期化するステップと、
第２の不揮発データ記憶装置上のユニットが、最近参照されたことを確率論的に示し、ブルームフィルタのキューである、第２のデータ構造を初期化するステップと、
前記マルチデバイス複合データ記憶システムの論理ブロックへのアクセス要求を受け取るステップと、
前記論理ブロックが前記第１の不揮発性データ記憶装置上に含まれている場合、要求された前記論理ブロックを前記第１の不揮発性データ記憶装置上のユニットからアクセスするステップ、及び前記ユニットが前記第１の不揮発性データ記憶装置に固定されていない限り、前記マルチデバイス複合データ記憶システムの要求された前記論理ブロックが、前記第１の不揮発性データ記憶装置上のユニットから最近アクセスされたことを示すように、前記第１のデータ構造を更新するステップと、
要求された前記論理ブロックが前記第１の不揮発性データ記憶装置上のユニットで見つからない場合、要求された前記論理ブロックを求めて前記第２のデータ構造を検索するステップと、
要求された前記論理ブロックが前記第２のデータ構造内で見つからない場合、要求された前記論理ブロックを含む前記ユニットの識別子を前記第２のデータ構造に追加するステップと、
要求された前記論理ブロックを含むユニットが前記第２のデータ構造内で見つかった場合、要求された前記論理ブロックを含む前記ユニットを、前記第２の不揮発性データ記憶装置から前記第１の不揮発性データ記憶装置へ移行させるステップと、を含む、記憶媒体。
【請求項１２】
要求された前記論理ブロックを含む前記ユニットの識別子を追加するステップは、
前記ユニットの前記識別子に対して、ハッシュ値のセットを計算するステップと、ハッシュ値の前記セット内のハッシュにより定義されたインデックス各々に、前記ユニットが参照されたことを示す値を設定するステップと、を更に備える請求項１１に記載のマシーン可読記憶媒体。
【請求項１３】
ハッシュ値の前記セットの計算は複数のハッシュ関数を使用する、請求項１２に記載のマシーン読み取り可能な記憶媒体。
【請求項１４】
前記第２のデータ構造内のブルームフィルタをリセットするステップを更に備える、請求項１３に記載のマシーン読み取り可能な記憶媒体。
【請求項１５】
前記第２のデータ構造に、追加のブルームフィルタを追加するステップを更に備える、請求項１３に記載のマシーン読み取り可能な記憶媒体。
【請求項１６】
前記第２のデータ構造からブルームフィルタを除去するステップを更に備える、請求項１５に記載のマシーン読み取り可能な記憶媒体。
【請求項１７】
データ処理システムに、請求項１又は請求項２〜６に記載のどれか１つの方法を行わせる命令を有する、マシーン読み取り可能な記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
本出願は、２０１２年２月１６日に出願した仮出願第６１／５９９，９３０号の優位性を主張するものであり、この仮出願は、参照により本明細書に組み込まれている。本出願はまた、２０１２年２月１６日に出願した、同時係属出願である第６１／５９９，９２７号にも関連しており、これも参照により本明細書に組み込まれている。
【０００２】
本発明は、低速メモリ装置と高速メモリ装置とを複合した、複合不揮発性メモリ内の、データの記憶の管理方法に関する。複合ディスクシステムでは、大容量だが、アクセススピードは遅く、低価格である磁気ハードドライブと、半導体ドライブのような小型で、アクセススピードは速いが、高価な記憶装置とを組合せて論理ボリュームを形成することができる。これにより、磁気ハードディスクドライブ（ＨＤＤ）の大容量が提供される一方で、半導体ドライブ（ＳＳＤ）の高速アクセスのメリットも提供することができる。そのような複合ディスクを管理する従来技術は、ＬＲＵ（least recently used）アルゴリズム、ＣＬＯＣＫアルゴリズム、又はＳｏｎｇ  Ｊｉａｎｇが記載しているＣｌｏｃｋＰｒｏアルゴリズムのようなアルゴリズムを使用してきた。これらの従来の技術は、複合ディスクの高速部分と低速部分の間のデータの割り当てを向上させることができる。けれども、複合ディスクの２つの部分間でデータを割り当てるためのこれらの技術で使用されるデータ構造を実装するためには、大容量ＤＲＡＭのような、大容量のメインメモリが必要になるという点で、スペース効率が悪化しやすい。それ故、複合ディスクの２つ以上の構成要素間で、データを割り当てる、又は移行させるのに使用するデータ構造を記憶するのに、あまり大きなメモリを必要としない、改良されたスペース効率の良い技術が必要となる。
【発明の概要】
【０００３】
一実施形態では、半導体装置のような、高速不揮発性記憶装置と、磁気ハードドライブのような、低速不揮発性記憶装置へのアクセスの管理方法は、ＳＳＤ装置のような高速不揮発性記憶装置内のユニットのセット内の各ユニットにアクセスするリセンシーを示す、第１のデータ構造を維持するステップと、ＨＤＤ装置のような低速記憶装置内のユニット、又はブロックが、最近参照されたかどうか（例えば、最近参照されたのが１回だけであるユニット、又はブロック）を示す、第２のデータ構造を維持するステップとを含むことができる。一実施形態では、第２のデータ構造は、メモリオーバヘッドが小さいブルームフィルタのキューであってもよい。ブルームフィルタのキューは、低速の記憶装置内のユニット、又はブロックが最近参照されたかどうかということに関しては、大体の場合は正しいが、正しい解を常に提供するかついては保証はない。
【０００４】
本発明の他の特徴は、添付の図面と、下記の発明の詳細な説明から明らかになるであろう。
【０００５】
上記概要には、本発明の全ての態様の網羅的なリストを挙げてはいない。本発明は、上記で概説した種々の態様、更には、以下の詳細な説明の中で開示されている態様の適切な全ての組み合わせから実施可能とする全てのシステム及び方法も含むことも想定される。
【０００６】
本発明は、添付図面の図の例により説明するが、それに限定されることはない。また同じ参照記号は同じ要素を示している。
【図面の簡単な説明】
【０００７】
【図１】データ処理システムの例であり、本発明の実施形態に用いられている。
【図２】本発明の一実施形態に係る複合不揮発性メモリの例である。
【図３】クロックアルゴリズムと呼んでもよいアルゴリズムのデータ構造の例である。
【図４】本発明の一実施形態に係る本明細書に記載された、１つ以上の方法と共に使用することができるゴーストテーブルのようなデータ構造の例である。
【図５】本発明の少なくとも一実施形態に係る方法を描いたフローチャートである。
【図６】本発明の少なくとも一実施形態に係る方法を描いたフローチャートである。
【図７】本発明の一実施形態に係る方法を描いたフローチャートである。
【図８】本発明の少なくとも一実施形態と共に使用することができるブルームフィルタデータ構造の例である。
【図９】本発明の一実施形態に係る方法を示すフローチャートである。
【図１０】本発明の一実施形態に係る方法を示すフローチャートである。
【発明を実施するための形態】
【０００８】
複合不揮発性データ記憶装置の管理を向上する方法を説明する。本発明の様々な実施形態や態様は、下記で議論する詳細を参照して説明し、添付の図面は、様々な実施形態を図示する。以下の記述や図面は、本発明を説明するものであり、本発明を制限するものと解釈するものではない。本発明の種々の実施形態に関する十分な理解をもたらすために、多くの具体的な詳細について述べる。だが、場合によっては、本発明の実施形態に関する議論を簡潔化するために、公知、または、従来の詳細については、説明しない。
【０００９】
本明細書中における「一実施形態（one embodiment）」又は「一実施形態（an embodiment）」への言及は、その実施形態に関連して説明される特定の機能、構造又は特徴を、本発明の少なくとも１つの実施形態の中に含まれることを意味する。本明細書における様々な箇所での、語句「一実施形態では」の出現は、必ずしも全てが同じ実施形態を言及しているものではない。以下の図面に描かれているプロセスは、ハードウェア（例えば、回路、専用ロジック）、（永続的な機械可読記憶媒体上の命令のような）ソフトウェア、又はその両者の組合せからなる、処理ロジックにより実施される。以下でプロセスについて幾つかの逐次的な操作の観点で述べるが、説明する操作の一部は、異なる順序で実施できることを認識すべきである。更に、一部の操作は、逐次的ではなく並列的に実施可能である。
【００１０】
図１は、データ処理システムの形式で、本明細書に記載された１つ以上の実施形態と共に使用することができる、コンピューティングシステム１０の例を示す。システム１０は、デスクトップコンピュータシステム、ラップトップコンピュータシステム、スマートフォン、又は他の電子装置や消費者電子装置でもよい。システム１０は、当技術分野では周知のように、一実施形態ではＳＲＡＭでもよい、オプションキャッシュ１４に接続された、１つ以上のマイクロプロセッサ、又は他の論理ユニット１２を含むことができる。１つ以上のマイクロプロセッサ１２が、１つ以上のバス１８を介して残りのシステムに接続される。このバスは、１つ以上のマイクロプロセッサ１２を、揮発性ＲＡＭ１６でもよい、メインメモリに接続する。一実施形態では、揮発性ＲＡＭは、コンピュータシステムで使用される従来のＤＲＡＭでもよい。コンピュータシステムでは、ＤＲＡＭはバスを介して、システム１０内の残りの構成要素に接続される。システム１０はまた、１つ以上の入出力装置２２を１つ以上のバス１８を介して残りのシステムに接続する、１つ以上の入出力コントローラ２０を備えることができる。システム１０はまた、ソリッドステートドライブ形式のフラッシュメモリドライブと、従来の磁気ハードドライブの組合せのような複合ディスクでもよい不揮発性メモリ１９を含む。
【００１１】
図２は、一実施形態に係る複合ディスクの一例を示す。不揮発性メモリ１９は、ソリッドステートドライブ５１と磁気ハードドライブ５２を備える。この２つは、ファイルシステムやオペレーティングシステムにより、単一論理ボリューム、又はブロック装置として扱うことが可能であり、ソリッドステートドライブコントローラを有するコントローラ５４、ハードディスクコントローラを有するコントローラ５３のような、１つ以上のコントローラにより制御される。この１つ以上のコントローラは、バス１８を介して、図２に示す複合ドライブをシステム１０の残りの構成要素に接続する。当然のことだが、フラッシュメモリは高速不揮発性記憶装置の１つの形態であり、他の高速記憶装置は、高速記憶装置よりも低速な、従来の磁気ハードドライブ、又は他の不揮発性記憶装置でもよい低速記憶装置と共に、代わりに使用することができる。当然のことだが、この説明ではＳＳＤ、又はＨＤＤといえば、高速、又は低速不揮発性記憶装置を意味するものと解釈されるものであり、限定したり任意の記憶装置技術に特化するとは解釈されない。
【００１２】
図３は、第１のデータ構造の例を示し、本発明の一実施形態に係るクロックアルゴリズムと共に使用される。一実施形態のクロックアルゴリズムは、従来技術で使用されている従来のクロックアルゴリズムに類似している可能性がある。このクロックアルゴリズムは、データ構造３０１を使用することができるが、このデータ構造は、クロックポインタ３０４を持つ環状キューでもよい。このクロックポインタは、クロックアルゴリズムに基づき、キュー内の特定の場所を指す。環状キュー内の各場所は、高速不揮発性メモリ装置内の特定のユニット、例えば、フラッシュメモリシステムを介して実装されたソリッドステートドライブに対応している。ある意味では、第１のデータ構造は、どのブロックがフリーで、どのブロックがハードドライブ上に割り当てられている（フリーでない）か、を示すファイルシステムにより維持されている、ブロック割り当てビットマップに類似している。
【００１３】
例えば、場所３０２は、ＳＳＤ上のユニットゼロに対応し、右側の次のユニットはＳＳＤ上のユニット１に対応し、場所３０３は、ＳＳＤ上の別のユニットに対応する。各場所では、ＳＳＤ内の対応する記憶ユニットの状態を示す値が記憶されている。一実施形態では、２ビット値が使用でき、ゼロという値は、ＳＳＤ上の特定のユニット内の、１つ以上のブロック、又は他の構成要素はフリーだが、ある場所の１という値は、ＳＳＤ上の特定のユニットは最近参照されていない、２という値はＳＳＤ内のそのユニットは最近参照されたということを示すことができる。３という値は、あるユニットがＳＳＤに固定され、ＨＤＤへ移せないことを示すことができる。あるいは、一実施形態では、ユニットへの特定のアクセス回数を追跡することができる、３ビットの値を使用することができる。この実施形態では、ゼロ値はそのユニットが、フリーであることを示すこともできる。つまり、１という値は、そのユニットが最近参照されていないことを示すことができ、最大値である７は、そのユニットが動けないことを示すことができる。他の値は、あるユニットが最近参照された回数を示すことができる。例えば、６という値は、最近５回参照されたことを示す。
【００１４】
一実施形態では、第１のデータ構造３０１は、以下の様に管理することができる。即ち、ＳＳＤからＨＤＤに移す候補をアルゴリズムを見つける必要がある時は、クロックポインタ３０４を使用する。一実施形態では、そのユニットが最近参照されないことを意味する、１という値を持つユニットが見つかるまで、クロックポインタ３０４は、時計方向に１つのユニットから次のユニットへ走査する。一実施形態では、クロックポインタ３０４は反時計回りに走査することができる。もしユニット内の値が最大値に設定されると、そのユニットはＳＳＤに固定され、ＨＤＤに移せなくなる。もしこの数値が１よりも大きいが、最大値ではなければ、クロックポインタが次のユニットに移る前に１だけ減らされ、最小値である１まで減らされる。ＳＳＤ内の特定のユニットがアクセスされると、ＳＳＤ上でそのユニットに対応する場所のカウント値を増やすことができる。この方法を使用すると、ＳＳＤ上の頻繁にアクセスされるユニットは、ＳＳＤ上のそのユニットに対応するデータ構造のユニット内で、予め設定したカウント値の上限に達するまでカウント値が益々大きくなる。けれども、移動する候補が必要となる度に、クロックポインタ３０４がユニットからユニットへ掃引するので、順番に並んだユニット（例えば、３０２と３０３）各々は、クロックポインタ３０４がそのユニットを通過するたびに、カウント値が減らされ、そのユニットは最近アクセスされていないことを示す、１という最小値まで減らされる。第２のデータ構造に関するクロックアルゴリズムの使用に関するさらなる詳細は、次に説明するが、図５，６，７にと共に提示される。
【００１５】
図４は、第２のデータ構造の例を示す。ゴーストテーブルとも呼ぶことができ、1回以上の最近のアクセスを超えるアクセス、又は所定回数以上の最近のアクセスを超えるアクセスのために、ＨＤＤのような低速不揮発性メモリ上のユニットのアクセスを追跡するのに使用される。一実施形態では、第２のデータ構造は、データ構造内の場所の数に関して、ＳＳＤ内のユニット数と同じであってもよいし、又はＳＳＤ内のユニット数の大きさに比例してもよい。一実施形態では、ＨＤＤ内の特定のユニット数のためのシグニチャ値を、第２のデータ構造の各場所に記憶することができる。一実施形態では、ファイルシステムの観点からは、ユニットは磁気ハードドライブ上の論理ブロックでもよい。第２のデータ構造４０１は、他の場所と同様に３つの位置４０２，４０３，４０４を含み、これらの場所各々は、ＨＤＤ内のユニット数のシグニチャを記憶することができる。場所４０４は、ＨＤＤ上のユニット内のデータが、少なくとも１回、又は少なくとも所定の回数（読み出し、又は書き込みによって）最近アクセスされたことを示す、ＨＤＤ内のユニットＸのためのシグニチャ値の例を示す。
【００１６】
図５は、データ構造３０１のような第１のデータ構造と、データ構造４０１のような第２のデータ構造を利用して、ＳＳＤのような高速記憶装置と、ＨＤＤのような低速記憶装置間のデータの移行を制御するための、本発明の一実施形態による方法の例を示す。不揮発性メモリに対する読み出し、又は書き込みアクセス要求をシステムが受け取る、動作５０１にて、図５の方法が開始される。一実施形態では、ファイルシステムが複合ディスクの制御を行い、複合ディスクを単一論理ボリュームとして取り扱う。次いで、データ処理システム内のファイルシステム、又は別の構成要素は、図５に示す方法を使用して、複合ディスクの２つ以上の部分間でデータをどのように割り当てるかを決定する。読み出し、又は書き込みアクセス要求の受け取りに応じて、この方法は動作５０３に進み、要求されたデータが、高速記憶装置内にあるか否かを判定する。もしそのデータが高速記憶装置内にあれば、ＳＳＤ内でヒットする。その場合は、処理は動作５０５に進み、ＳＳＤ上で発見されたユニットのための、データ構造３０１のような環状キュー内のカウントが、１だけ増える。これは、クロックポインタ３０４を動かさずに行われる。このようにして、第１のデータ構造を介して、クロックアルゴリズムは、ＳＳＤ内のユニットへのアクセス回数を追跡する。もし動作５０３で、ＳＳＤ内でミスが起こると、システムは動作５０７へ進み、確率論のハッシュテーブルの形式である、図４に示すゴーストテーブル４０１のような、第２のデータ構造内に、データがあるか否かを判定する。第２のデータ構造内でのデータの探索を図７に示し、以下で説明する。
【００１７】
動作５０７が、ユニットが既に第２のデータ構造内にないと判定すると、動作５０９に進み、ゴーストテーブル４０１でもよい、第２のデータ構造に、ユニット番号又はユニット番号の表示が追加される。動作５０９に関する追加情報を、以下で説明する図６に関連して提供する。動作５０７にて、要求データを含むユニットが、既に第２のデータ構造内にあると判定されると、処理は動作５０７から動作５１１に進み、高速記憶装置が満杯になっているか否かが判定される。もし満杯でなければ、動作５１５に進む。様々な従来のアルゴリズムを使用して、ＳＳＤが満杯ではないか否かを判定することができるので、クロックアルゴリズム、又は第１のデータ構造３０１を使用することに依存する必要はない。
【００１８】
動作５１５では、アクセスされているＨＤＤのユニット内のデータが、当分野で周知の技術を使用して、ＨＤＤからＳＳＤに移行される。更に、移動済み、又はこれから移動するデータのユニットのユニット番号は、ゴーストテーブル４０１のような、第２のデータ構造から除去される。操作５１１にて、ＳＳＤが満杯であるとシステムが判定すると、操作５１５の前に操作５１３が行われる。当然のことながら、ファイルシステムは、操作５１５でのデータの移動に応じた、様々なデータの場所を示す従来のデータ構造を尚も維持している。操作５１３にて、一実施形態ではクロックアルゴリズムを使用して、システムはＳＳＤ上にスペースを作成する。この場合、クロックアルゴリズムは、クロックポインタ３０４を使用して、環状配列を順番に、クロックポインタの現在の位置から始めて、最近参照されていないＳＳＤ内のユニットを示す場所まで移動する。一実施形態では、環状配列内のある場所に記憶された１という値がこのことを示している。クロックポインタ３０４が、環状配列を環状に移動するにつれ、各場所の値は１つ減らされる。クロックポインタ３０４が、各位置での値を減らしながら列を移動するにつれて、最後にはユニットの１つが、利用可能なユニットであるということを示す値を受信する。クロックアルゴリズムが、ＳＳＤ内で次に利用可能なユニットの場所を決定すると、ＳＳＤのそのユニット内のデータを、ＨＤＤにフラッシュすることができるし、操作５１３の後で行うことができる操作５１５にて、ＨＤＤ上でアクセスされたデータは、ＨＤＤからＳＳＤ内の場所、又はユニットに移動させることができる。第２のデータ構造からユニット番号を除去することについて、図７と共に更に説明する。
【００１９】
図６は、第２のデータ構造にデータを追加する方法の例を示す。Ｘは、ハードドライブ上の１つ以上の論理ブロックのような、ＨＤＤ内のユニット番号を表すことができる。当然のことながら、図６，図７の方法は、図４に示すデータ構造４０１でもよい、確率論的なハッシュテーブルの生成を考慮している。ハッシュ及びシグナチャーは第２のデータ構造に記憶される値を生成するために使用され、データ構造内の場所を特定するのに使用されるという事実のために、確率論的なハッシュテーブルは、ＨＤＤ上のユニットのアクセス数については、常には正しくないかもしれない。ハッシュが使用されると、ハッシュ関数への１つ以上の入力が、同じハッシュ値を返すことができる。これは、異なるユニットと同じシグナチャーを共有するユニットは、適切なユニットではなく、ＳＳＤに移してもよいことを意味する。けれども、それが発生する可能性は小さい。従って、ＨＤＤ上の１つのユニットが受け取ったアクセス数に関しては、ハッシュテーブルは常に正しいということはないかもしれないが、データ構造は殆ど常に正しく、消費されたメモリの量に対して大容量の情報を記憶することができるという点で、スペース効率がよい。
【００２０】
図６に示す方法は、図５の動作５０９で実行することができる。動作６０１では、システムは、リード要求、又はライト要求によりアクセスされているＨＤＤ内のユニット番号に対するハッシュ値のセットを計算する。ハッシュ値のセットは、異なるハッシュ関数のセットから得られる。例えば一実施形態では、３つの異なるハッシュ関数ｈ１、ｈ２、ｈ３が使用できるが、１以上の任意の数のハッシュ関数が、使用できる。更に、動作６０１ではＸのシグナチャーが計算される。それはＳ（Ｘ）と表され、ＳはＸの値のシグナチャーを表す。シグナチャーは暗号アルゴリズム、又は他のアルゴリズムから得ることができるが、そのアルゴリズムは、ある入力に対して、相対的に唯一の値を生成しようとするが、Ｘの可能性がある値各々の唯一の値を生成することは保証されない。このように全体的な唯一性がないことは、ハッシュテーブルの確率論的な性質に寄与している。動作６０１にてこの値を計算してから、システムは動作６０３へ進み、ハッシュ値により指定された場所のどれかが、第２データ構造内で空か否かを判定する。換言すれば、ハッシュ値により指定されたこれらの場所は各々、ゴーストテーブル内で調べられ、一実施形態では空であるか否かが判定される。もし、どれか１つが空であれば、動作６０５が行われ、ＨＤＤのユニット番号のＳ（Ｘ）のようなシグナチャーが、ハッシュ値の１つにより指定された空の場所の１つに記憶される。一方、動作６０３がこれらの場所がどれも空でないと判定すると、動作６０７が行われ、第２のデータ構造内のランダムな場所が動作６０７でランダムに選択され、動作６０９でシグナチャーが選択されたランダムな場所に記憶される。ランダムな場所を使用するので、その場所に記憶されている前のシグナチャーが上書きされてしまうことがある。
【００２１】
図７は、データ構造からデータを見つける、又は除去する方法の例を示す。データを見つけるために、図７の方法が使用された場合は、動作７０７は行わない。データを見つけるための図７に示された方法は、図５の動作５０７により行うことができる。図７に示された方法がデータをゴーストテーブルから除去するために使用された時は、動作７０７が行われ、この方法は図５に示す動作５１５の一部として使用される。図７の方法は、動作７０１より開始され、ハッシュ値のセットがＸに対して計算される。このハッシュ値のセットは、以前動作６０１で使用されたのと同じハッシュ関数のセット及び同じハッシュ値のセットに対応する必要がある。同様に、Ｘの値に対してシグナチャーが計算されるが、それは動作６０１で計算したシグナチャーと類似したものである。次いで動作７０３では、システムはゴーストテーブルの場所内でシグナチャーの値を探すが、それは動作７０１で計算されたハッシュ値のセットにより指定されたものである。動作７０５でシグナチャーが見つかれば、ユニット番号のシグナチャーが図７に示すように動作７０７で第２のデータ構造から除去される。一実施形態では、データ構造の寸法は、データ構造の性能と、利用可能なメモリの容量とに基づき倍にしたり、又は半分にしたりすることができる。
【００２２】
本発明の別の実施形態では、ゴーストテーブルとして実装することができる、確率論的なハッシュテーブルよりはむしろ、ブルームフィルタを使用することができる。ブルームフィルタの例を図８に示す。ブルームフィルタは、第２の記憶装置上のユニットが、最近アクセスされたか否かの確実性を判定するテストで使用することができる、確率論的なデータ構造である。ブルームフィルタが確率論的であるのは、誤った肯定的な結果が返される、つまり実際にはそうではないのに、ユニットがデータ構造内にあると判定されてしまうからである。けれども、誤った否定的な結果は返されないので、第２のデータ構造のクエリは、そのユニットは恐らく最近アクセスされた、又はそのユニットは決して最近アクセスされていない、という結果を返されることになる。ブルームフィルタは、ＳＳＤの各ユニットに対応する、又はＳＳＤのユニット数に比例した多数の場所を持つことができる。各場所は、１又はゼロを記憶しており、一実施形態ではＨＤＤ上の特定のユニットのアクセス数の状態を示す。ＨＤＤのユニット番号のハッシュ値は、ブルームフィルタ内の特定の場所にアクセスするためのアドレスとして使用される。図８に示すように、ブルームフィルタ８０１は、場所８０２，８０３，８０４を有する。場所８０３は、この場所を指定する、Ｘのハッシュ関数ｈ１により指定される。１という値は、場所８０３に設定され、更にＸのアドレスｈ２とＸのアドレスｈ３により指定された、他の２つの場所内にも設定される。図８に示すブルームフィルタは、動作５０７でゴーストテーブルをブルームフィルタで置き換え、動作５０９でゴーストテーブルをブルームフィルタで置き換えることにより、図５の方法で使用され得る。けれども、ブルームフィルタからユニットを除去して、ブルームフィルタは誤った否定的な結果を生成しないということを保証するのは不可能なので、ブルームフィルタをゴーストテーブルの代わりに使用する場合は、動作５１５ではブルームフィルタからユニット番号は除去されない。従って一実施形態では第２のデータ構造内のブルームフィルタが満杯になると、環状キュー内にブルームフィルタを追加してもよい。
【００２３】
図９は、ＨＤＤ内のユニットを、ブルームフィルタに追加する方法の例を示す。図９に示す操作は、ブルームフィルタがゴーストテーブルの代わりに使用される場合に、動作５０９で行われる。一実施形態では、図９から明らかなように、一番新しいブルームフィルタが値を記憶するのに使用され、より古いブルームフィルタが環状キューを循環する、環状キュー内に、複数のブルームフィルタが保持されるように、ブルームフィルタの環状キューを使用することができる。動作５０９が開始されると、図５を実装したブルームフィルタの場合、操作９０１は、一番新しいブルームフィルタが満杯か否かを判定する。満杯でなければ、操作９０５が続き、ハッシュ値のセット内で指定された各々の場所を、例えば１のような所定値に設定することにより、ＨＤＤ上の現在アクセス中のユニットを表すデータが、一番新しいブルームフィルタに追加される。一実施形態では、操作１００１のようにハッシュ値のセットが計算され、それらのハッシュ値各々は、ブルームフィルタ内の特定の場所、又はアドレスを指定し、１という値がハッシュ値のセット内で指定されたそれらのアドレス、又は場所各々に書き込まれる。
【００２４】
図１０は、ＨＤＤ内の特定のユニット番号が第２のデータ構造、この場合はブルームフィルタ、内にあるか否かを見つける方法を示す。図５の方法がゴーストテーブルではなく、ブルームフィルタを使用する場合は、図１０は、動作５０７の一部として行うことができる。操作１００１では、システムはＨＤＤ内のユニット番号のハッシュ値のセットを計算する。一実施形態では、３つの異なるハッシュ関数を使用して、３つのハッシュ値を計算することができる。次に操作１００３では、キュー内のブルームフィルタの少なくとも１つで、ハッシュ値のセットにより指定された各場所で、１つのビットが、１のような所定値に設定されているか否かをシステムがチェックする。操作１００５では、ハッシュ値のセット内のハッシュ値により指定された各場所内で、全てのビットが１に設定されているか否かをシステムが判定する。配列内の各ブルームフィルタ内の場所の少なくとも１つが設定されていないと、システムはユニットが見つからないと結論付け、操作１００７に進み、図５の動作５０９に続けさせる。一方、システムが、全てのビットがハッシュ値のセットにより決定された適切な場所内に設定されていると判定すれば、処理は操作１００９に進み、図５の動作５１１に続けさせる。図４内のゴーストテーブルについては、本発明の実施形態のいくつかは、第２のデータ構造の寸法を、必要に応じて、増やしたり減らしたりすることができる。環状キュー内のブルームフィルタが満杯になるにつれて、環状キューにブルームフィルタを追加してもよい。ブルームフィルタの環状キューの寸法が規定値を超えると、一番古いブルームフィルタをリストから除去することができる。
【００２５】
上述の明細書において、本発明はその特定の実施形態に関して記載されている。しかし、本発明のより広い趣旨及び範囲から逸脱することなく種々の修正及び変更がそれになされ得ることは明らかであろう。したがって、明細書及び図面は、限定的でなく、例示的な意味で考慮されるべきである。
【図１】
0005943096.tif 000002
【図２】
0005943096.tif 000003
【図３】
0005943096.tif 000004
【図４】
0005943096.tif 000005
【図５】
0005943096.tif 000006
【図６】
0005943096.tif 000007
【図７】
0005943096.tif 000008
【図８】
0005943096.tif 000009
【図９】
0005943096.tif 000010
【図１０】
0005943096.tif 000011