(57)【要約】【課題】  インターフェースアダプタは、不揮発性ランダムアクセスメモリ（ＲＡＭ）を有するストレージモジュールと、ルックアップモジュールとを備える。ストレージモジュールは、不揮発性ＲＡＭにメタデータを格納する。メタデータは、ソリッドステートストレージデバイスにキャッシュされている外部ストレージデバイスからのデータを特定する。ルックアップモジュールは、読出要求を受信する。ルックアップモジュールはさらに、メタデータに基づき、読出要求に応じて、ソリッドステートストレージデバイスからキャッシュされたデータを提供するか、外部ストレージデバイスから取得された第２のデータを提供するかを選択する。【選択図】  図３Ａ
2013530448.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性ランダムアクセスメモリ（ＲＡＭ）を有するストレージモジュールと、
読出要求を受信するルックアップモジュールと
を備え、
前記ストレージモジュールは、前記不揮発性ＲＡＭにメタデータを格納し、前記メタデータは、ソリッドステートストレージデバイスにキャッシュされている外部ストレージデバイスからのデータを特定し、
前記ルックアップモジュールは、前記メタデータに基づき、且つ、前記読出要求に応じて、前記ソリッドステートストレージデバイスからキャッシュされたデータを供給するか、または、前記外部ストレージデバイスから取得した第２のデータを供給するかを選択するインターフェースアダプタ。
【請求項２】
前記ストレージモジュールはさらに、前記不揮発性ＲＡＭ内に書込バッファを維持しており、
前記第２のデータは、前記外部ストレージデバイスから取得されると、前記書込バッファに格納され、
前記第２のデータは、前記書込バッファに格納された後、前記ソリッドステートストレージデバイスに格納される請求項１に記載のインターフェースアダプタ。
【請求項３】
前記ルックアップモジュールは、前記ソリッドステートストレージデバイスからのデータ、または、前記書込バッファからのデータを用いて、前記読出要求に選択的に応答する請求項２に記載のインターフェースアダプタ。
【請求項４】
前記ルックアップモジュールは、前記書込バッファからの前記第２のデータで、前記読出要求に対して応答する請求項３に記載のインターフェースアダプタ。
【請求項５】
前記書込バッファからの前記第２のデータを前記ソリッドステートストレージデバイスに格納するタイミングを判断するバッファ制御モジュールをさらに備える請求項２に記載のインターフェースアダプタ。
【請求項６】
前記バッファ制御モジュールは、前記第２のデータを含めて所定量のデータが、前記ソリッドステートストレージデバイス内の互いに隣接する複数の位置に格納すべく、前記書込バッファ内にあることに基づき、前記第２のデータを前記ソリッドステートストレージデバイスへと格納する請求項５に記載のインターフェースアダプタ。
【請求項７】
前記ルックアップモジュールは、書込要求を受信し、前記書込要求に対応付けられている書込データを前記書込バッファに格納する請求項２に記載のインターフェースアダプタ。
【請求項８】
ライトスルーモードがイネーブルされると、前記書込データはさらに前記外部ストレージデバイスに供給される請求項７に記載のインターフェースアダプタ。
【請求項９】
前記ソリッドステートストレージデバイス内の選択データの上書きを選択的に許可するキャッシュエビクションモジュールをさらに備える請求項１に記載のインターフェースアダプタ。
【請求項１０】
前記キャッシュエビクションモジュールは、前記選択データが上書きされる前に、前記外部ストレージデバイスに前記選択データのうち修正部分を送信する請求項９に記載のインターフェースアダプタ。
【請求項１１】
前記ルックアップモジュールは、前記読出要求に応じて、前記ストレージモジュールにあるデータのヒットリストを作成し、前記ストレージモジュールに無いデータのミスリストを作成し、前記ミスリストに応じて前記外部ストレージデバイスにデータ要求を送信する請求項１に記載のインターフェースアダプタ。
【請求項１２】
第１のバス要求を前記読出要求に変換し、第２のバス要求を書込要求に変換する変換モジュールをさらに備える請求項１に記載のインターフェースアダプタ。
【請求項１３】
コンピュータにインストールされるホストバスアダプタであって、
ソリッドステートストレージデバイスと、
不揮発性ランダムアクセスメモリ（ＲＡＭ）と、
実行モジュールと
を備え、
前記実行モジュールは、
外部ストレージデバイスからのデータを前記ソリッドステートストレージデバイスにキャッシュし、
前記ソリッドステートストレージデバイス内にキャッシュされているデータを示すメタデータを、前記不揮発性ＲＡＭに格納し、
前記コンピュータの中央プロセッサから読出要求を受信し、
前記ソリッドステートストレージデバイスにキャッシュされた前記データを用いて、前記読出要求に選択的に応答するホストバスアダプタ。
【請求項１４】
前記実行モジュールは、
前記不揮発性ＲＡＭの一部分を書込バッファとして利用し、
前記中央プロセッサから書込要求を受信し、
前記書込みデータを前記ソリッドステートストレージデバイスに格納する前に、前記書込要求に対応する書込データを前記書込バッファに格納し、
前記読出要求に応じて、前記書込バッファから選択的にデータを供給し、
前記メタデータが、前記読出要求のうちいずれか１つに対応する第１のデータが前記書込バッファまたは前記ソリッドステートストレージデバイスに格納されていない旨を示す場合、前記外部ストレージデバイスに前記第１のデータを要求し、
前記第１のデータが前記外部ストレージデバイスから受信されると、前記第１のデータを前記ソリッドステートストレージデバイスに格納する前に、前記第１のデータを前記書込バッファに格納する請求項１３に記載のホストバスアダプタ。
【請求項１５】
インターフェースアダプタを動作させる方法であって、
外部ストレージデバイスからのデータであってソリッドステートストレージデバイスにキャッシュされているデータを特定するメタデータを、前記インターフェースアダプタの不揮発性ランダムアクセスメモリ（ＲＡＭ）に格納する段階と、
読出要求を受信する段階と、
前記メタデータに基づき、且つ、前記読出要求に応じて、前記ソリッドステートストレージデバイスからキャッシュされたデータを供給するか、または、前記外部ストレージデバイスから取得した第２のデータを供給するか選択する段階と
を備える方法。
【請求項１６】
前記不揮発性ＲＡＭの内部に書込バッファを維持する段階と、
前記外部ストレージデバイスから前記第２のデータを取得すると、前記書込バッファに前記第２のデータを格納する段階と、
前記第２のデータを前記書込バッファに格納した後に、前記ソリッドステートストレージデバイスに前記第２のデータを格納する段階と、
前記書込バッファから前記第２のデータで前記読出要求に選択的に応答する段階と
をさらに備える請求項１５に記載の方法。
【請求項１７】
前記第２のデータを、前記第２のデータを含めて所定量のデータが、前記ソリッドステートストレージデバイス内の互いに隣接する複数の位置に格納すべく、前記書込バッファ内にあることに基づくタイミングで、前記ソリッドステートストレージデバイスに格納する段階をさらに備える請求項１６に記載の方法。
【請求項１８】
書込要求を受信する段階と、
前記書込要求に対応付けられている書込データを前記書込バッファに格納する段階と
をさらに備え、
ライトスルーモードがイネーブルされると、前記書込データはさらに前記外部ストレージデバイスに供給される請求項１６に記載の方法。
【請求項１９】
前記ソリッドステートストレージデバイス内の選択データの上書きを選択的に許可する段階と、
前記選択データを上書きする前に、前記選択データのうち修正部分を前記外部ストレージデバイスに送信する段階と
をさらに備える請求項１５に記載の方法。
【請求項２０】
前記読出要求に応じて、前記ソリッドステートストレージデバイスにあるデータのヒットリストを作成する段階と、
前記読出要求に応じて、前記ソリッドステートストレージデバイスに無いデータのミスリストを作成する段階と、
前記ミスリストに応じて前記外部ストレージデバイスにデータ要求を送信する段階と、
前記ヒットリストおよび前記ミスリストの組み合わせに基づき、前記読出要求に応答する段階と
をさらに備える請求項１５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、キャッシュホストバスアダプタに関し、具体的には、ソリッドステートストレージおよび不揮発性メモリを利用するキャッシュホストバスアダプタに関する。
【０００２】
［関連技術］
本願は、米国実用特許出願第１３／１０１，５３４号（出願日：２０１１年５月５日）に基づき優先権を主張するとともに米国仮特許出願第６１／３３１，７５９号（出願日：２０１０年５月５日）による恩恵を主張する。上記出願の開示内容は全て、参照により本願に組み込まれる。
【背景技術】
【０００３】
本明細書に記載する背景技術の説明は、本開示がどのような文脈で為されたかの概要を説明する目的で記載するものである。本願の発明者として名前を挙げているものの研究内容は、この背景技術のセクションに記載されている限りにおいて、出願時に先行技術と認められない部分と同様に、本開示に対する先行技術として明示的にも暗示的にも認めるものではない。
【０００４】
図１Ａを参照すると、コンピュータアーキテクチャの一例を示す機能ブロック図が図示されている。プロセッサ１００は、メインメモリ１０２およびグラフィクス処理モジュール１０４との間で、ノースブリッジモジュール１０６を介して通信する。ノースブリッジモジュール１０６は、周辺機器へのアクセスを可能とするサウスブリッジモジュール１０８と接続される。一例に過ぎないが、サウスブリッジモジュール１０８は、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）エクスプレス（Ｅｘｐｒｅｓｓ）スロット１１０と接続される。図１Ａでは、ＰＣＩ  Ｅｘｐｒｅｓｓカード１１２−１および１１２−２がＰＣＩ  Ｅｘｐｒｅｓｓスロット１１０にインストールされる。
【０００５】
図１Ｂを参照すると、別のコンピュータアーキテクチャを図示している。プロセッサ１５０は、プロセッサ１５０が直接メインメモリ１５２およびグラフィクス処理モジュール１５４と通信できるようにする回路を備えている。プロセッサ１５０とグラフィクス処理モジュール１５４との間の通信で利用されるバスは、例えば、アクセラレーテッド・グラフィクス・ポート（ＡＧＰ）またはＰＣＩ  Ｅｘｐｒｅｓｓであってよい。サウスブリッジモジュール１５６により、周辺機器はプロセッサ１５０にアクセスできるようになる。例えば、サウスブリッジモジュール１５６は、ＰＣＩ  Ｅｘｐｒｅｓｓカード１１２−１および１１２−２がインストールされるＰＣＩ  Ｅｘｐｒｅｓｓスロット１１０と接続される。
【０００６】
サウスブリッジモジュール１０８および１５６は、ネットワーク化用のイーサネット（登録商標）、外部周辺機器用のユニバーサル・シリアル・バス（ＵＳＢ）、および、ディスクドライブ用のＳＡＴＡ（シリアル・アドバンスド・テクノロジ・アタッチメント）等の他のバスと接続されるとしてよい。ＰＣＩ  Ｅｘｐｒｅｓｓカード１１２は、他のインターフェースを追加で実装するとしてよい。例えば、ＰＣＩ  Ｅｘｐｒｅｓｓカード１１２−１は、プロセッサ１００によるスモール・コンピュータ・システム・インターフェース（ＳＣＳＩ）、エクスターナルＳＡＴＡ（ｅＳＡＴＡ）、または、ファイバー・チャネル等のインターフェースへのアクセスを可能とするホストバスアダプタであってよい。
【発明の概要】
【課題を解決するための手段】
【０００７】
インターフェースアダプタは、不揮発性ランダムアクセスメモリ（ＲＡＭ）を有するストレージモジュールと、ルックアップモジュールとを備える。ストレージモジュールは、不揮発性ＲＡＭにメタデータを格納する。メタデータは、ソリッドステートストレージデバイスにキャッシュされている外部ストレージデバイスからのデータを特定する。ルックアップモジュールは、読出要求を受信する。ルックアップモジュールはさらに、メタデータに基づき、読出要求に応じて、ソリッドステートストレージデバイスからキャッシュされたデータを提供するか、外部ストレージデバイスから取得された第２のデータを提供するかを選択する。
【０００８】
他の特徴を挙げると、ストレージモジュールはさらに、不揮発性ＲＡＭで書込バッファを維持する。第２のデータは、外部ストレージデバイスから取得されると書込バッファに格納される。第２のデータは、書込バッファに格納された後にソリッドステートストレージデバイスに格納される。別の特徴を挙げると、インターフェースアダプタは、書込バッファからソリッドステートストレージデバイスへと第２のデータを格納するタイミングを決定するバッファ制御モジュールを有する。バッファ制御モジュールは、ソリッドステートストレージデバイス内の互いに隣接した位置に格納される所定量のデータが、第２のデータを含め、書込バッファにあることに基づき、第２のデータをソリッドステートストレージデバイスに格納する。
【０００９】
さらに別の特徴を挙げると、インターフェースアダプタは、ソリッドステートストレージデバイス内にある選択データの上書きを選択的に許可するキャッシュエビクションモジュールを備える。他の特徴を挙げると、ルックアップモジュールは、読出要求に応じて、ストレージモジュールにあるデータのヒットリストを作成し、ストレージモジュール内に無いデータのミスリストを作成し、ミスリストに応じて外部ストレージデバイスにデータ要求を送信する。
【００１０】
ホストバスアダプタは、ソリッドステートストレージデバイスと、不揮発性ランダムアクセスメモリ（ＲＡＭ）と、実行モジュールとを備える。ホストバスアダプタは、コンピュータにインストールされるように構成されている。実行モジュールは、ソリッドステートストレージデバイスに、外部ストレージデバイスからのデータをキャッシュする。実行モジュールはさらに、不揮発性ＲＡＭにメタデータを格納する。メタデータは、ソリッドステートストレージデバイスにキャッシュされているデータを示す。実行モジュールはさらに、コンピュータの中央プロセッサから読出要求を受信し、ソリッドステートストレージデバイスからキャッシュされたデータを用いて読出要求に選択的に応答する。
【００１１】
他の特徴を挙げると、実行モジュールは、不揮発性ＲＡＭの一部分を書込バッファとして利用する。実行モジュールはさらに、中央プロセッサから書込要求を受信する。実行モジュールはさらに、書込データをソリッドステートストレージデバイスに格納する前に、書込バッファに書込要求に対応する書込データを格納する。実行モジュールはさらに、読出要求に応じて、書込バッファからデータを選択的に提供する。実行モジュールはさらに、読出要求のうちいずれか１つに対応する第１のデータが書込バッファまたはソリッドステートストレージデバイスに格納されていないとメタデータが示す場合、外部ストレージデバイスに第１のデータを要求する。実行モジュールはさらに、第１のデータが外部ストレージデバイスから受信されると、第１のデータをソリッドステートストレージデバイスに格納する前に、書込バッファに第１のデータを格納する。
【００１２】
インターフェースアダプタを操作する方法は、インターフェースアダプタの不揮発性ランダムアクセスメモリ（ＲＡＭ）にメタデータを格納する段階を備える。メタデータは、ソリッドステートストレージデバイスにキャッシュされている外部ストレージデバイスからのデータを特定する。当該方法は、読出要求を受信する段階を備え、メタデータに基づき、読出要求に応じて、ソリッドステートストレージデバイスからのキャッシュされたデータを提供するか、または、外部ストレージデバイスから取得された第２のデータを提供するかを選択する段階を備える。
【００１３】
本開示内容を適用するその他の分野については、詳細な説明、請求項および図面から明らかになるであろう。詳細な説明および具体的な例は、説明を目的として紹介されているに過ぎず、本開示の範囲を限定するものではない。
【図面の簡単な説明】
【００１４】
本開示は、詳細な説明および添付図面に基づき理解を深められたい。添付図面は以下の通りである。
【００１５】
【図１Ａ】先行技術に係るコンピュータアーキテクチャを示す機能ブロック図である。
【００１６】
【図１Ｂ】先行技術に係るコンピュータアーキテクチャを示す機能ブロック図である。
【００１７】
【図２Ａ】本開示の原理に係るコンピューティングシステムの一例を示す機能ブロック図である。
【００１８】
【図２Ｂ】本開示の原理に係るコンピューティングシステムの別の例を示す機能ブロック図である。
【００１９】
【図３Ａ】本開示の原理に係るキャッシュストレージアダプタの一例を示す上位の機能ブロック図である。
【００２０】
【図３Ｂ】本開示の原理に係るキャッシュストレージアダプタの一例を示す別の上位のブロック図である。
【００２１】
【図４】本開示の原理に係るキャッシュストレージアダプタの実施例を示す機能ブロック図である。
【００２２】
【図５】本開示の原理に係るキャッシュストレージアダプタの実施例を示す機能ブロック図である。
【００２３】
【図６】本開示の原理に係るキャッシュストレージアダプタの動作例を示すフローチャートである。
【００２４】
【図７】本開示の原理に係るキャッシュストレージアダプタの動作例を示すフローチャートである。
【発明を実施するための形態】
【００２５】
以下に記載する説明は、本質的に説明を目的としたものに過ぎず、本開示、その適用範囲または利用方法を限定するものでは決してない。説明を分かり易くするべく、複数の図面にわたって同様の構成要素を特定する場合には同じ参照番号を利用する。本明細書で用いる場合、「Ａ、ＢおよびＣのうち少なくとも１つ」という表現は、（Ａ  ｏｒ  Ｂ  ｏｒ  Ｃ）の非排他的論理和演算を意味するものと解釈されたい。方法を構成する段階は、本開示の原理を変更することなく、実行順序を変更し得るものと理解されたい。
【００２６】
本明細書で用いる場合、「モジュール」という用語は、特定用途向け集積回路（ＡＳＩＣ）、電子回路、組み合わせ論理回路、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、コードを実行するプロセッサ（共有、専用、群）、本明細書で説明する機能を実現するその他の適切な構成要素、または、上記の一部または全てを組み合わせた、例えば、システム・オン・チップの一部またはこれらを含むものを意味するとしてよい。「モジュール」という用語は、プロセッサが実行するコードを格納するメモリ（共有、専用、または、群）を含むとしてよい。
【００２７】
「コード」という用語は、上記で用いたように、ソフトウェア、ファームウェアおよび／またはマイクロコードを含むとしてよく、プログラム、ルーチン、関数、クラスおよび／またはオブジェクトを意味するとしてよい。「共有」という用語は、上記で用いたように、複数モジュールからのコードの一部または全てが、一の（共有）プロセッサを利用して実行されることを意味する。また、複数のモジュールからの一部または全てのコードは、一の（共有）メモリによって格納されているとしてよい。「群」という用語は、上記で用いたように、一のモジュールからのコードの一部または全てが、一群のプロセッサを利用して実行され得ることを意味する。また、一のモジュールからのコードの一部または全ては、一群のメモリを用いて格納されるとしてよい。
【００２８】
本明細書で説明する装置および方法は、１以上のプロセッサで実行する１以上のコンピュータプログラムで実装されるとしてよい。コンピュータプログラムは、持続性有形コンピュータ可読媒体に格納されているプロセッサで実行可能な命令を含む。コンピュータプログラムはさらに、格納データを含むとしてもよい。持続性有形コンピュータ可読媒体の例を挙げると、これらに限定されないが、不揮発性メモリ、磁気ストレージおよび光学ストレージがある。
【００２９】
図２Ａを参照すると、本開示の原理に係るコンピューティングシステムの一例を図示している。コンピュータ２０２では、プロセッサ２０４が、ノースブリッジモジュール２１０を用いて、メインメモリ２０６およびグラフィクス処理モジュール２０８と接続されている。ノースブリッジモジュール２１０は、サウスブリッジモジュール２１２と接続されており、サウスブリッジモジュール２１２は、プロセッサ２０４が周辺機器にアクセスできるようにする。
【００３０】
サウスブリッジモジュール２１２は、ＰＣＩ  Ｅｘｐｒｅｓｓスロット２２０と接続されている。ＰＣＩ  Ｅｘｐｒｅｓｓカード２２２がＰＣＩ  Ｅｘｐｒｅｓｓスロットのうち１つにインストールされており、キャッシュストレージアダプタ２２４が、ＰＣＩ  Ｅｘｐｒｅｓｓスロット２２０のうち別の１つにインストールされている。キャッシュストレージアダプタ２２４は、ストレージデバイス２３０と接続されており、プロセッサ２０４がストレージデバイス２３０に読み書きアクセスできるようにする。
【００３１】
プロセッサ２０４、メインメモリ２０６、グラフィクス処理モジュール２０８、ノースブリッジモジュール２１０、および、サウスブリッジモジュール２１２は、ホスト２３２と総称する場合がある。キャッシュストレージアダプタ２２４は、ホスト２３２がストレージデバイス２３０にアクセスできるようにする機能を持つものとも言える。ストレージデバイス２３０は、任意の種類の大容量ストレージを含むとしてよい。一例に過ぎないが、ストレージデバイス２３０は、ロジカル・ボリューム・マネジメント（ＬＶＭ）デバイス、仮想ボリューム、ＲＡＩＤ（ｒｕｄｕｎｄａｎｔ  ａｒｒａｙ  ｏｆ  ｉｎｅｘｐｅｎｓｉｖｅ  ｄｉｓｋｓ）、ロジカル・ユニット・ナンバー（ＬＵＮ）で特定されるデバイス、インターネット・スモール・コンピュータ・システム・インターフェース（ｉＳＣＳＩ）ＬＵＮ、ファイバー・チャネル（ＦＣ）ＬＵＮ、ファイバー・チャネル・オーバー・イーサネット（登録商標）（ＦＣｏＥ）ＬＵＮ、ダイレクト・アタッチド・ストレージ（ＤＡＳ）、または、ストレージ・エリア・ネットワーク（ＳＡＮ）のうち１以上を含むとしてよい。
【００３２】
ホスト２３２は、キャッシュストレージアダプタ２２４を介して、ストレージデバイス２３０にコマンドを発行する。読み書き等のアクセス要求は、キャッシュストレージアダプタ２２４によってキャッシュされるとしてよい。制御コマンドは、キャッシュストレージアダプタ２２４によって解釈および実行されるとしてよく、および／または、ストレージデバイス２３０に渡されるとしてよい。さまざまな実施例によると、ホスト２３２からキャッシュストレージアダプタ２２４に送信されるコマンドは、ＳＣＳＩコマンドであってよい。キャッシュストレージアダプタ２２４は、ＳＣＳＩコマンドを、ストレージデバイス２３０に適したコマンドに変換するとしてよい。
【００３３】
キャッシュストレージアダプタ２２４はさらに、ＰＣＩ  Ｅｘｐｒｅｓｓプロトコルと、ストレージデバイス２３０にアクセスするために用いられるプロトコルとの間で変換を行う。一例に過ぎないが、ストレージデバイス２３０は、イーサネット（登録商標）、エクスターナル・シリアル・アドバンスド・テクノロジ・アタッチメント（ｅＳＡＴＡ）、シリアル・アタッチド・ＳＣＳＩ（ＳＡＳ）、スモール・コンピュータ・システムズ・インターフェース（ＳＣＳＩ）、Ｉｎｆｉｎｉｂａｎｄ（インフィニバンド）、または、ファイバーチャネルを用いてアクセスされるとしてよい。キャッシュストレージアダプタ２２４は、ＰＣＩ  Ｅｘｐｒｅｓｓカードとして図示されている。しかし、本開示の原理は他のインターフェースにも適用される。例えば、キャッシュストレージアダプタ２２４は、ＵＳＢ２．０またはＵＳＢ３．０等のＵＳＢ（ユニバーサル・シリアル・バス）インターフェースを用いることができる。これに代えて、キャッシュストレージアダプタ２２４は、ＰＣＩまたはＰＣＩ−Ｘ等のレガシーインターフェースを利用することができる。
【００３４】
キャッシュストレージアダプタ２２４は、さまざまなフォームファクターで実現することができる。例えば、キャッシュストレージアダプタ２２４は、ＥｘｐｒｅｓｓＣａｒｄ／３４またはＥｘｐｒｅｓｓＣａｒｄ／５４といったフォームファクターで実現可能である。ＥｘｐｒｅｓｓＣａｒｄフォームファクターは通常、ポータブルコンピュータについて利用されるものであるとしてよい。キャッシュストレージアダプタ２２４は、ＥｘｐｒｅｓｓＣａｒｄとして実現される場合、ＰＣＩ  ＥｘｐｒｅｓｓまたはＵＳＢを利用するように構成され得る。
【００３５】
図２Ｂを参照すると、本開示の原理に係るコンピューティングシステムの別の例が図示されている。コンピュータ２５０は、メインメモリ２５４およびグラフィクス処理モジュール２５６と接続されるプロセッサ２５２を備える。プロセッサ２５２は、サウスブリッジモジュール２５８を介して、周辺機器と接続される。例えば、サウスブリッジモジュール２５８は、ＰＣＩ  Ｅｘｐｒｅｓｓスロット２７０へのアクセスを可能とする。ＰＣＩ  Ｅｘｐｒｅｓｓカード２２２およびキャッシュストレージアダプタ２２４は、ＰＣＩ  Ｅｘｐｒｅｓｓスロット２７０にインストールされているものとして図示されている。
【００３６】
プロセッサ２５２、メインメモリ２５４、グラフィクス処理モジュール２５６、および、サウスブリッジモジュール２５８は、ホスト２７２と総称することができる。キャッシュストレージアダプタ２２４は、図２Ａに図示したホスト２３２と比較した場合に異なるホスト２７２のアーキテクチャを活用できるように、異なったやり方で実施または構成するとしてよい。ホスト２３２またはホスト２７２は、キャッシュストレージアダプタ２２４と通信するために、ＳＣＳＩターゲットモードドライバ等のターゲットモードドライバ、または、イニシエータモードドライバを実装するとしてよい。
【００３７】
図２Ｂでは、キャッシュストレージアダプタ２２４は、ストレージエリアネットワーク２８０と接続されているものとして図示されている。ストレージエリアネットワーク２８０は、汎用のコンピュータネットワーク化コンポーネントおよび／または特定ストレージ用のネットワーク化コンポーネント等、ネットワーク化コンポーネントを利用して接続されている１以上のストレージデバイスを有している。例えば、ストレージエリアネットワーク２８０は、ファイバーチャネルインターコネクト、Ｉｎｆｉｎｉｂａｎｄインターコネクト、ギガビットまたは１０ギガビットのイーサネット（登録商標）インターコネクト等のイーサネット（登録商標）インターコネクト、ファイバーチャネルオーバーイーサネット（登録商標）インターコネクト、ｉＳＣＳＩインターコネクト、および、ＡＴＡオーバーイーサネット（登録商標）インターコネクトを含むとしてよい。
【００３８】
ストレージエリアネットワーク２８０はさらに、他のコンピュータに対してストレージリソースを提供するとしてよい。一例に過ぎないが、第２のコンピュータ２８２および第３のコンピュータ２８４が、ストレージエリアネットワーク２８０に接続されているものとして図示されている。さまざまな実施例によると、コンピュータ２５０は、第２のコンピュータ２８２および／または第３のコンピュータ２８４によってアクセスされるストレージエリアネットワーク２８０のストレージリソースにデータを書き込むとしてよい。
【００３９】
このような状況において、書込データのコヒーレンシは、キャッシュストレージアダプタ２２４のライトスルーモードをイネーブルすることによって改善されるとしてよい。キャッシュストレージアダプタ２２４は、ライトスルーモードでは、遅延をできる限り短く抑えて、ストレージエリアネットワーク２８０に修正データを提供する。キャッシュストレージアダプタ２２４は、ライトバックモード等の他のモードでは、修正データをストレージエリアネットワーク２８０に送り返す前に、修正データをより長い期間にわたって格納するとしてよい。
【００４０】
図３Ａを参照すると、キャッシュストレージアダプタ３００の一例を示す上位のブロック図が図示されている。一例に過ぎないが、キャッシュストレージアダプタ３００は、ホスト２３２およびストレージデバイス２３０と接続されているものとして図示されている。キャッシュストレージアダプタ３００は、フラッシュメモリまたはリードオンリーメモリ等のファームウェア３１２から命令を実行するプロセッサ３１０を備える。プロセッサ３１０は、内部仮ストレージを備えるとしてよく、仮命令およびデータ情報を揮発性メモリ３１４に格納するとしてよい。
【００４１】
プロセッサ３１０は、不揮発性ＲＡＭ（ランダムアクセスメモリ）３２０と接続されている。不揮発性ＲＡＭ３２０は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、または、シンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）等の揮発性ＲＡＭを含むとしてよい。不揮発性ＲＡＭ３２０は、揮発性ＲＡＭに不揮発性ＲＡＭの特性を与えるためのコンポーネントを含む。
【００４２】
一例に過ぎないが、不揮発性ＲＡＭ３２０は、電池等のバックアップ電源を含むとしてよい。これは、充電式電池であってよい。不揮発性ＲＡＭ３２０はさらに、不揮発性ＲＡＭ３２０の格納内容を維持するための電力を供給するスーパーキャパシタまたは任意の適切な種類の電気二重層キャパシタを含むとしてよい。不揮発性ＲＡＭ３２０はこのため、限られた時間の間のみ、データを維持するとしてよい。このタイムフレーム内では、バックアップ電力がキャッシュストレージアダプタ３００に供給され得る。例えば、中断不可能な電源またはバックアップ発電機によって、キャッシュストレージアダプタ３００に電力を再供給することができる。
【００４３】
プロセッサ３１０はさらに、ソリッドステートドライブ３３０と接続されている。ソリッドステートドライブ３３０は、フラッシュメモリ等の不揮発性メモリを含む。一例に過ぎないが、フラッシュメモリは、シングルレベルセル（ＳＬＣ）ストレージセル、マルチレベルセル（ＭＬＣ）ストレージセル、および／または、標準的なＭＬＣストレージセルよりもエラーレートが低くなるように設計されているエンタープライズＭＬＣストレージセルを含むとしてよい。ストレージセルは、ＮＡＮＤストレージセルであってよい。
【００４４】
プロセッサ３１０は、ストレージデバイス２３０からのデータをソリッドステートドライブ３３０にキャッシュする命令を実行する。ソリッドステートドライブ３３０に格納されているデータに関する情報は、キャッシュメタデータと呼ばれる。キャッシュメタデータは、不揮発性ＲＡＭ３２０に格納されている。キャッシュメタデータはさらに、ソリッドステートドライブに格納されているデータに関連する属性、例えば、最終アクセス時刻、アクセス数、および、データの修正の有無を追加で格納しているとしてよい。
【００４５】
ホスト２３２が提供する書込データは、不揮発性ＲＡＭ３２０に格納される。不揮発性ＲＡＭ３２０のうち書込データを格納するために用いられる一部分は、書込バッファと呼ばれている。プロセッサ３１０は、不揮発性ＲＡＭ３２０の特定の一部分を書込バッファと指定するとしてよい。プロセッサ３１０は、この一部分の量を、書込バッファが必要とするスペースに応じて調整するとしてよい。
【００４６】
さまざまな実施例によると、プロセッサ３１０は、不揮発性ＲＡＭ３２０内において、書込バッファを明示的に指定しない。これに代えて、プロセッサ３１０は、キャッシュメタデータおよび書込バッファデータの両方を不揮発性ＲＡＭ３２０に格納する。不揮発性ＲＡＭ３２０での空きスペースが限定されると、書込バッファデータの量を減らすとしてよい。
【００４７】
さまざまな実施例によると、プロセッサ３１０は、キャッシュメタデータを不揮発性ＲＡＭ３２０のアドレス範囲の一端に格納して、書込バッファが不揮発性ＲＡＭ３２０のアドレス範囲の反対側の端部で始まるように格納するとしてよい。格納されるキャッシュメタデータおよび書込バッファデータが増えるにつれて、不揮発性ＲＡＭ３２０のそれぞれの部分が増加して互いにぶつかることとなる。プロセッサ３１０はこの後、書込バッファデータとキャッシュメタデータとが重複しないようにする責任を持つとしてよい。
【００４８】
ソリッドステートドライブ３３０は、ストレージコントローラと同様にストレージセルを含むとしてよい。ストレージコントローラは、ソリッドステートドライブ３３０の利用可能な寿命を最大限に長くするためにソリッドステートドライブ３３０内のさまざまな位置にデータを動的に割り当てるウェアレベリングアルゴリズムを実装するとしてよい。
【００４９】
ソリッドステートドライブ３３０は、１以上のコントローラ集積回路および１以上のストレージ集積回路によって実現されるとしてよい。こういった集積回路は、キャッシュストレージアダプタ３００の主要回路基板に実装されるとしてよい。これに代えて、ソリッドステートドライブ３３０の集積回路は、別の回路基板上に実現され、この回路基板をドーターボードとしてキャッシュストレージアダプタ３００に差し込むとしてもよい。
【００５０】
他の実施例によると、ソリッドステートドライブ３３０は、完全に筐体内に収容されているドライブであるとしてよく、ラップトップコンピュータの主要ハードドライブ用など、一般的使用を目的として小売店で入手可能なものであってよい。これらの実施例では、ソリッドステートドライブ３３０は、キャッシュストレージアダプタ３００に実装されているとしてもよいし、または、可撓性のケーブルでキャッシュストレージアダプタ３００に接続されているとしてよい。
【００５１】
一例に過ぎないが、ソリッドステートドライブ３３０は、ＳＡＴＡインターフェース、ｅＳＡＴＡインターフェースまたはシリアルアタッチドＳＣＳＩ（ＳＡＳ）インターフェースを介して、ホスト２３２およびキャッシュストレージアダプタ３００が共有している筐体の内部に実装されるとしてよい。キャッシュストレージアダプタ３００は、ソリッドステートドライブ３３０がソリッドステートドライブ３３０のサイズを大きくするために、そして、利用可能な寿命が終わるとソリッドステートドライブを交換するために交換可能となるように構成されているとしてよい。
【００５２】
キャッシュストレージアダプタ３００は、ソリッドステートドライブ３３０を含めた複数のソリッドステートドライブに対して接続され得る。さまざまな実施例によると、複数のソリッドステートドライブの容量および性能特性は、均一である必要はないとしてよい。さまざまな実施例によると、ソリッドステートドライブのうち１つ、例えば、ソリッドステートドライブ３３０は、キャッシュストレージアダプタ３００に実装されている一方、残りのソリッドステートドライブは、ケーブルを介してキャッシュストレージアダプタ３００に接続されているとしてよい。
【００５３】
図３Ｂを参照すると、キャッシュストレージアダプタ３５０の実施例を示す別の上位の機能ブロック図が図示されている。プロセッサ３１０、ファームウェア３１２、揮発性メモリ３１４、および、不揮発性ＲＡＭ３２０は、図３Ａに示したものと同様であるとしてよい。図３Ｂにおいて、ソリッドステートドライブ３６０は、キャッシュストレージアダプタ３５０から独立したものとして図示されている。ソリッドステートドライブ３６０はこのため、キャッシュストレージアダプタ３５０とは別個に実装されるとしてよく、キャッシュストレージアダプタ３５０とは同じコンピュータ筐体の中には位置しないとしてもよい。
【００５４】
図４を参照すると、キャッシュストレージアダプタ４００の実施例を示す機能ブロック図が図示されている。キャッシュストレージアダプタ４００は、実行モジュール４１０およびストレージモジュール４２０を含む。実行モジュール４１０は、プロセッサおよびメモリを含むとしてよく、プロセッサはさまざまな機能を実行するべくメモリから命令を実行する。
【００５５】
例えば、図４の実行モジュール４１０は、要求変換モジュール４２２、ルックアップモジュール４２４、入出力最適化モジュール４２６、キャッシュエビクションモジュール４２８、先読みモジュール４３０、および、キャッシュミスモジュール４３２を含む。要求変換モジュール４２２は、ホスト２３２からのコマンドを、実行モジュール４１０の残りのモジュールによって利用可能な形式に変換する。さらに、要求変換モジュール４２２は、ホスト２３２からのコマンドを、ストレージデバイス２３０に対応する形式に変換するとしてよい。
【００５６】
一例に過ぎないが、ホスト２３２は、ＳＣＳＩコマンドを要求変換モジュール４２２に提供するとしてよい。要求変換モジュール４２２はこの後、これらのコマンドを一般的なアクセスコマンドに変換するとしてもよいし、および／または、これらのコマンドをストレージデバイス２３０に対応する形式、例えば、ファイバーチャネルコマンドに変換するとしてよい。さまざまな実施例によると、要求変換モジュール４２２は、アクセスコマンド、例えば、読出コマンドおよび書込コマンドの処理方法を制御コマンドの処理方法とは異ならせるとしてよい。例えば、制御コマンドは、変換を最小限に抑えるか、または、変換を行わないとしてよく、ストレージデバイス２３０に渡す。
【００５７】
ストレージモジュール４２０は、不揮発性ＲＡＭ４４０を含む。不揮発性ＲＡＭ４４０では、実行モジュール４１０は、キャッシュメタデータ４４２を格納しており、不揮発性ＲＡＭ４４０の一部を書込バッファ４４４として利用する。実行モジュール４１０は、不揮発性ＲＡＭ４４０の一部分を書込バッファ４４４として利用されるように割り当てるとしてよい。この割り当ては、必要に応じて調整されるとしてよい。これに代えて、実行モジュール４１０は、不揮発性ＲＡＭ４４０の一部分を書込バッファ４４４として保留することなく、単に書込バッファデータを不揮発性ＲＡＭ４４０に格納するとしてもよい。
【００５８】
ストレージモジュール４２０もまた、論理的観点から見ると、ソリッドステートドライブ４５０を備える。ソリッドステートドライブ４５０は、より一般的にはソリッドステートストレージデバイスと呼ばれる。ソリッドステートドライブ４５０は、キャッシュストレージアダプタ４００の一部として図示されているが、上述したように取り外し可能にキャッシュストレージアダプタ４００に実装されているとしてもよいし、または、キャッシュストレージアダプタ４００とは別個に構成されておりケーブルを介して接続されているとしてもよい。ソリッドステートドライブ４５０は、キャッシュストレージアダプタ４００と共通の筐体内に収容されているとしてもよいし、または、当該筐体の外部に配置されるとしてもよい。ソリッドステートドライブ４５０は、ＳＡＴＡまたはｅＳＡＴＡを用いてキャッシュストレージアダプタ４００の残りの構成要素と通信を行うとしてよい。
【００５９】
ストレージデバイス２３０は、機能的にも物理的にもキャッシュストレージアダプタ４００とは別個の構成要素であるので、外部ストレージデバイスと呼ぶ。多くの実施例によると、ストレージデバイス２３０は、キャッシュストレージアダプタ４００を収容するコンピュータ筐体とは別個の筐体内に配置されている。実際には、ストレージデバイス２３０は、キャッシュストレージアダプタ４００とは同じサーバーラックにすら配置されていないとしてもよく、または、キャッシュストレージアダプタ４００と同じ部屋にすら配置されていないとしてもよい。
【００６０】
ストレージデバイス２３０が特にストレージエリアネットワーク（ＳＡＮ）として実施される場合、ストレージデバイス２３０は一の位置に限定されるものではないとしてよい。さまざまな実施例によると、ストレージエリアネットワーク（ＳＡＮ）等のストレージデバイス２３０の実施例では内部の複雑さが見えないようになるとしてよい。ストレージデバイス２３０はこのため、一のハードディスクドライブ等、一のハードウェアボリュームであるかのように、キャッシュストレージアダプタ４００に対してインターフェースを提示するとしてよい。
【００６１】
要求変換モジュール４２２が読出要求を受信すると、読出要求の対象であるアドレスをルックアップモジュール４２４に供給する。ルックアップモジュール４２４は、キャッシュメタデータ４４２を検査して、対象となるアドレスが、書込バッファ４４４またはソリッドステートドライブ４５０のいずれかに現在キャッシュされているか否かを判断する。ルックアップモジュール４２４は、キャッシュされている対象アドレスのヒットリストを生成するとともに、キャッシュされていないアドレスのミスリストを生成する。
【００６２】
ルックアップモジュール４２４は、ミスリストをキャッシュミスモジュール４３２に供給する。キャッシュミスモジュール４３２は通常、ストレージデバイス２３０に対して対象アドレスを要求する。ルックアップモジュール４２４は、読出要求のサイズに基づき、読出要求を複数のルックアップ要求に分割するとしてもよい。ルックアップモジュール４２４は、ルックアップ要求毎に、キャッシュメタデータ４４２に基づきヒットリストおよびミスリストを決定する。
【００６３】
ストレージデバイス２３０へのアクセスの粒度は、ホスト２３２から受信するアクセス要求の粒度とは異なるとしてよい。例えば、ホスト２３２は、１バイトまたは１ワードを要求するとしてよいが、ストレージデバイス２３０はブロック単位でアクセスされるとしてもよい。言い換えると、読出または書込は、１以上のブロックとして実行される場合がある。一例に過ぎないが、各ブロックのサイズは４キロバイトであるとしてよい。キャッシュミスモジュール４３２はこのため、ミスリストに記載されている対象アドレスを含むブロックをいずれも、ストレージデバイス２３０に対して要求するとしてもよい。この場合は自動的に、ストレージデバイス２３０から、対象アドレスの前後のデータを含み得る１ブロックを読み出すことによって、空間局所性を利用することになる。
【００６４】
また、キャッシュミスモジュール４３２は、さらに空間局所性を利用するべく、１以上の後続ブロックおよび／または１以上の先行ブロックを同時にストレージデバイス２３０に対して要求するとしてよい。先読みモジュール４３０は、近い将来にアクセスされるであろうブロックの予想を試みるとしてよい。先読みモジュール４３０はこの後、これらのブロックについても読出要求をストレージデバイス２３０に送る。さまざまな実施例によると、先読みモジュール４３０は、ストレージデバイス２３０がキャッシュミスモジュール４３２からの要求への対応を終了するまで、読出要求の発行を待つとしてよい。
【００６５】
入出力最適化モジュール４２６は、ホスト２３２が要求するアクセスおよびストレージデバイス２３０に送信された読出要求の記録を取るとしてよい。入出力最適化モジュール４２６は、ストレージデバイス２３０の温度および局所情報を動的に較正するとしてよい。この較正は、領域毎に行われるとしてよい。各領域は、所定数のブロックであるか、または、入出力最適化モジュール４２６の決定に基づきサイズが可変であるとしてよい。
【００６６】
「温度」という単語は、ストレージデバイス２３０の所定領域での動作の量を意味する。「局所情報」は、所定のブロックがアクセスされた後に周囲のブロックへのアクセスが発生する確率を意味する。入出力最適化モジュール４２６は、あるブロックが近い将来にアクセスされる可能性に基づき、先読みモジュール４３０を呼び出すとしてよい。
【００６７】
ストレージデバイス２３０が供給する読出データは、書込バッファ４４４に格納する。キャッシュメタデータ４４２は、当該データが書込バッファ４４４に格納されたことを示すべく更新される。ルックアップモジュール４２４はこの後、ヒットリストおよびミスリストの両方から得られるデータを用いて、要求変換モジュール４２２を介して、読出要求に応答することができる。
【００６８】
要求変換モジュール４２２がホスト２３２から書込要求を受信すると、書込要求に関連するデータが書込バッファ４４４に格納される。この新しく格納されたデータは、ストレージデバイス２３０に格納されているデータとは異なるので、「汚染」データと呼ばれる。結果として、修正されたデータをストレージデバイス２３０に送信する。しかし、ライトスルーモードでは、書込バッファ４４４が受信したデータを、できる限り遅延を短くして、ストレージデバイス２３０に渡す。上述したように、ライトスルーモードは、他のシステムがストレージデバイス２３０にアクセスしている場合に利用されるので、修正されたデータにアクセスする必要があるとしてよい。
【００６９】
書込バッファ４４４のデータは、ソリッドステートドライブ４５０に比べると書込バッファ４４４の容量が制限されるので、ソリッドステートドライブ４５０に書き込まれる。さまざまな実施例によると、ソリッドステートドライブ４５０への書き込みでは、ソリッドステートドライブ４５０の１ブロック全体の全ての要素への書き込みが必要となる。ソリッドステートドライブ４５０のブロックサイズは、ストレージデバイス２３０のブロックサイズとは、同じであってもよいし、異なるとしてもよい。
【００７０】
ソリッドステートドライブは通常、書込／消去が実行される度に、性能が劣化し、最終的には利用不可能になる。このため、書込バッファ４４４からのデータは、１ブロック全体に対応するデータを書き込むことになってから、ソリッドステートドライブ４５０に書き込まれるとしてよい。これによって、新しいデータがソリッドステートドライブ４５０の一のブロックに追加される度に、同じブロックを書き変える必要がなくなる。また、一のデータの変更は、ソリッドステートドライブ４５０にデモートされる前に、複数回にわたって書込バッファに書き込まれる場合がある。このため、この一のデータについてのソリッドステートドライブ４５０のストレージセルは、当該データが複数回変更されているにも関わらず、書込サイクルが１回のみで済む。
【００７１】
キャッシュエビクションモジュール４２８は、ソリッドステートドライブ４５０内のデータのキャッシュを中止すべきタイミングを判断する。当該データは、ソリッドステートドライブ４５０から実際に削除されるとしてもよいし、または、他の実施例では、当該データが格納されていた領域を空き領域とマーキングするとしてもよい。このため、新しくキャッシュされるデータを、エビクションされたデータに上書きすることができる。エビクションの前に、ストレージデバイス２３０に未送信の汚染データがあれば、ストレージデバイス２３０にフラッシュする。さらに、周期的に、または、さまざまなパラメータによって決まるその他の間隔で、ソリッドステートドライブ４５０に格納されている汚染データをストレージデバイス２３０にフラッシュして、ストレージデバイス２３０が最も新しい修正を反映するようにする。一例に過ぎないが、ソリッドステートドライブ４５０は、ソリッドステートドライブ４５０に格納されている汚染データがしきい値を超えると、ストレージデバイス２３０にデータをフラッシュするとしてよい。
【００７２】
図５を参照すると、キャッシュストレージアダプタ５００の実施例を示す機能ブロック図が図示されている。キャッシュストレージアダプタ５００のうち図４に記載の要素と同様の機能を持つ要素については、同じ参照番号を付与している。図５において、図４では明確に記載していた接続関係について一部は、図示を省略している。
【００７３】
例えば、入出力最適化モジュール４２６は、要求変換モジュール４２２とルックアップモジュール４２４との間でやり取りされる要求を観察する。また、入出力最適化モジュール４２６は、先読みモジュール４３０に、ストレージデバイス２３０に要求すべき対象アドレスを供給する。
【００７４】
アービター５０４は、先読みモジュール４３０およびキャッシュミスモジュール４３２から要求を受信し、これらの要求をストレージデバイス２３０に送信する。アービター５０４は、先読みモジュール４３０からの要求よりも、キャッシュミスモジュール４３２からの要求を優先するとしてよい。アービター５０４はさらに、隣接する要求等の要求を組み合わせて、ストレージデバイス２３０へのアクセスを効率化するとしてよい。
【００７５】
バッファ制御モジュール５０８は、書込バッファ４４４からソリッドステートドライブ４５０へのデータの送信タイミング、または、デモートタイミングを決定する。データがソリッドステートドライブ４５０に送信されると、バッファ制御モジュール５０８はキャッシュメタデータ４４２を更新して新しい格納位置を反映させる。バッファ制御モジュール５０８およびキャッシュエビクションモジュール４２８は、入出力最適化モジュール４２６と通信して、どのデータをソリッドステートドライブ４５０にデモートすべきか、どのデータをソリッドステートドライブ４５０からエビクションすべきかを判断するとしてよい。
【００７６】
ストレージデバイス２３０から読み出されたデータが書込バッファ４４４に格納されているので、このデータ経路が図５に明示されている。ルックアップモジュール４２４が読出要求を処理すると、キャッシュメタデータ４４２が、要求されたデータが格納されている書込バッファ４４４および／またはソリッドステートドライブ４５０内の位置を示す。これらのアドレスは、書込みバッファ４４４および／またはソリッドステートドライブ４５０に供給される。書込バッファ４４４および／またはソリッドステートドライブ４５０はこの後、要求されたデータをルックアップモジュール４２４に供給する。ルックアップモジュール４２４はこの後、データをアセンブルして、要求変換モジュール４２２を介して、ホスト２３２からの要求に応答する。
【００７７】
ルックアップモジュール４２４が書込要求を処理すると、書込要求に関連するデータは、格納のために、書込バッファ４４４に供給される。キャッシュエビクションモジュール４２８は、キャッシュメタデータ４４２を更新して、ソリッドステートドライブ４５０に前に格納されていたデータはエビクションされたのでキャッシュされていない旨を示す。さまざまな実施例によると、キャッシュエビクションモジュール４２８は、書込バッファ４４４がエビクション直前のデータの修正後のバージョンを格納していないことを、バッファ制御モジュール５０８に確認するとしてよい。
【００７８】
図６を参照すると、本開示の原理に係るキャッシュストレージアダプタの動作例を示すフローチャートが図示されている。６０４で開始され、読出要求を受信している場合には６０８に進み、受信していない場合には６１２に進む。６０８において、読出要求を変換して６１６に進む。６１６において、読出要求の対象が書込バッファにある場合には６２０に進み、無い場合には６２４に進む。
【００７９】
６２０において、書込バッファから読出要求が要求するデータを提供し、６１２に進む。６２４において、対象となるデータがソリッドステートドライブに格納されているか否かを判断する。格納されている場合には６２８に進み、格納されていない場合には６３２に進む。６２８において、読出要求に応じてソリッドステートドライブからデータを提供し、６１２に進む。６３２において、ストレージデバイスにデータを要求し、６３６に進む。６３６において、ストレージデバイスからのデータを書込バッファに格納し、６２０に進む。
【００８０】
６１２において、書込要求を受信したか否かを判断する。受信している場合には６４０に進み、受信していない場合には６４４に進む。６４０において、書込要求を変換して、６４８に進む。６４８において、書込要求に対応するデータを書込バッファに書き込んで、６４４に進む。６４４において、ソリッドステートドライブ内の空きスペースがしきい値未満か否かを判断する。しきい値未満である場合には６５２に進み、しきい値以上である場合には６５６に進む。６５２において、ソリッドステートデバイス内の空きスペースを増やすために、どのブロックをエビクションするかを判断して、６６０に進む。
【００８１】
６６０において、エビクションすべきブロックのいずれかが汚染データを含む場合には６６４に進み、含まない場合には６６８に進む。６６４において、汚染データをストレージデバイスに書き込んで、６６８に進む。６６８において、ソリッドステートドライブ内のエビクションされたブロックを空きブロックとマーキングして、新しいデータを上書きできることを示す。さまざまな実施例によると、空きブロックとしてマーキングされているブロックに対する要求が発生すると、当該ブロックは再度利用中とされ、当該データを用いて要求に対応する。６５６に続く。
【００８２】
６５６において、書込バッファからブロックをデモートすべきか否かを判断する。デモートすべきである場合には６７２に進み、すべきでない場合には６７６に進む。６７２において、書込バッファからソリッドステートドライブへとデータを書込み、６８０に進む。６８０において、書込バッファから書き込まれたブロックを空きブロックとマーキングして、他のデータで利用できるようにして、６７６に進む。
【００８３】
６７６において、ストレージデバイスがアイドル状態であるか否かを判断する。アイドル状態である場合には６８４に進み、そうでない場合には６０４に戻る。例えば、ストレージデバイスは、書込要求または読出要求に対応していない場合にはアイドル状態であると見なされるとしてよい。６８４において、ソリッドステートドライブ内のいずれかのブロックが汚染データであるか否かを判断する。汚染データがある場合には６８８に進み、無い場合には６９２に進む。６８８において、汚染ブロックをストレージデバイスに書き込んで、６０４に戻る。６９２において、読出要求および書込要求を分析して、６９４に進む。
【００８４】
６９４において、ストレージデバイスの各領域を、動作レベルおよび所与のブロックが要求された後に隣接するブロックが要求される確率に応じて特徴付けする。６９６に進み、今後の読出アクセスが６９４での特徴付けに基づいて予測可能であるか否かを判断する。予測可能である場合には６９８に進み、そうでない場合には６０４に戻る。６９８において、６９４の特徴付けによって予測されるアドレスでストレージデバイスからデータをプリフェッチする。この後、６０４に戻る。
【００８５】
図７を参照すると、本開示の原理に係るキャッシュストレージアダプタの動作例を示すフローチャートが図示されている。具体的には、図７は、読み書き要求の処理の実施例に注目している。７０４で開始され、読出要求が受信されている場合には７０８に進み、受信されていない場合には７１２に進む。７０８において、読出要求を変換する。７１６に続き、読出要求を読出要求のサイズに基づいて複数のルックアップ要求にパーシングする。
【００８６】
７２０に続き、ルックアップ要求をキャッシュメタデータを用いて処理する。７２４に続き、キャッシュ内で利用可能なデータが書込バッファ内にあるか、または、ソリッドステートドライブ内にあるかに基づいてヒットリストを作成する。７２８に進み、キャッシュ内で利用可能でないデータのミスリストを作成する。７３２に続き、ミスリストが空の場合には７３６に進み、記載がある場合には７４０に進む。
【００８７】
７４０において、キャッシュミスハンドラを呼び出して、ミスリストをキャッシュミスハンドラに供給する。７４４に進み、ミスリストに応じてストレージデバイスからデータをフェッチする。７４８に続き、ストレージデバイスからフェッチされたデータを書込キャッシュに格納する。７５２へと続き、キャッシュメタデータおよびミスリストを更新して、要求されたデータが現在は書込キャッシュに格納されていることを示す。７３６に進み、ヒットリストおよびミスリストに対応する混合結果を含む、読出要求に対する応答を返信する。この後、７１２に進む。
【００８８】
７１２において、書込要求を受信したか否かを判断して、受信した場合には７６０に進み、受信していない場合には７０４に戻る。７６０において、書込要求を変換する。７６４に進み、書込要求に対応するデータを書込バッファに書き込む。７６８に進み、ライトスルーモードがアクティブになっている場合には７７２に進み、アクティブでない場合には７７６に進む。７７２において、データをストレージデバイスに書き込み、７７６に進む。７７６において、キャッシュメタデータを更新して、新しく格納された書込みデータを示し、７０４に戻る。
【００８９】
７０４に戻ると図示されているのは、読出要求および書込要求はそれぞれ独自のループを用いて処理される一方、デモート、エビクション、入出力最適化、および、フラッシュ等のその他の機能は他の制御ループを用いて実行されるためである。他の制御ループは、並行して動作するとしてもよく、読出要求および書込要求の処理よりも優先度が低いとしてよい。
【００９０】
本開示に係る広義の教示内容は、さまざまな形態で実施可能である。このため、本開示には具体例が含まれるが、本開示の真の範囲は、図面、明細書および請求項を参照することにより他にも変形例が明らかになるので、それらに限定されるべきではない。
【図１Ａ】
2013530448.tif 000003
【図１Ｂ】
2013530448.tif 000004
【図２Ａ】
2013530448.tif 000005
【図２Ｂ】
2013530448.tif 000006
【図３Ａ】
2013530448.tif 000007
【図３Ｂ】
2013530448.tif 000008
【図４】
2013530448.tif 000009
【図５】
2013530448.tif 000010
【図６】
2013530448.tif 000011
【図７】
2013530448.tif 000012
【国際調査報告】
2013530448.tif 000013
2013530448.tif 000014