(57)【要約】【課題】データの読み書きの性能を向上させる情報処理装置、データ管理プログラム及びデータ管理方法を提供する。【解決手段】ＳＳＤ１２は、自己におけるデータのアクセスの単位領域であるページ及びページを複数含む領域であって格納されたデータの消去単位であるブロックを複数有し、且つ、ブロックに対するデータの送受信経路であるチャネルを複数有する。マッピング部１０３は、予め決められた固定長を有する管理対象に対して、異なるチャネルに接続する複数のブロックを含む論理ブロックを割り当てる。スラブ割当部１０１は、管理対象を分割して生成されるソフトウェアによるデータのアクセス単位である分割管理対象のサイズがページよりも大きい場合、マッピング部１０３により管理対象に割り当てられた論理ブロックに含まれるページのうち接続するチャネルが異なる複数のページに分割管理対象を割り当てる。【選択図】図２
2019194780.tif 000002
【特許請求の範囲】
【請求項１】
自己におけるデータのアクセスの単位領域であるページ及び前記ページを複数含む領域であって格納されたデータの消去単位であるブロックを複数有し、且つ、前記ブロックに対するデータの送受信経路であるチャネルを複数有するＳＳＤと、
予め決められた固定長を有する管理対象に対して、異なる前記チャネルに接続する複数の前記ブロックを含む論理ブロックを割り当てる割当部と、
前記管理対象を分割して生成されるソフトウェアによるデータのアクセス単位である分割管理対象のサイズが前記ページよりも大きい場合、前記割当部により前記管理対象に割り当てられた前記論理ブロックに含まれる前記ページのうち接続する前記チャネルが異なる複数の前記ページに前記分割管理対象を割り当てる管理部と、
を備えたことを特徴とする情報処理装置。
【請求項２】
前記管理部は、前記分割管理対象のサイズが前記ページよりも小さい場合、前記管理対象に割り当てられた前記論理ブロックに含まれる前記ページのうちの１つに前記分割管理対象を割り当てることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
特定の管理対象における有効なデータを他の管理対象に移動して前記特定の管理対象内に前記有効なデータを無くし、前記特定の管理対象内の全てのデータを消去するデータ消去処理を行うことで、前記ＳＳＤにおける前記論理ブロックに含まれる前記ブロックのデータの消去を行う消去制御部をさらに備えたことを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記消去制御部は、一定期間毎に前記データ消去処理を行うことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記ソフトウェアにより前記分割管理対象に対する処理が要求された場合、前記管理部により前記分割管理対象に割り当てられた前記ページに対して処理を行う処理実行部をさらに備えたことを特徴とする請求項１〜４のいずれか一つに記載の情報処理装置。
【請求項６】
前記ＳＳＤは、第１情報に対応する第２情報を格納し、
前記第２情報の格納場所と前記第１情報との対応情報を保持し、前記ソフトウェアからの前記第１情報を用いた前記第２情報の読み出し要求に対して、前記対応情報を基に前記ＳＳＤにおける前記第２情報の格納位置を取得し、取得した格納位置から前記第２情報を読み出す読出部をさらに有する
ことを特徴とする請求項１〜５のいずれか一つに記載の情報処理装置。
【請求項７】
自己におけるデータのアクセスの単位領域であるページ及び前記ページを複数含むデータ格納領域であってデータの消去単位であるブロックを複数有し、且つ、前記ブロックに対するデータの送受信経路であるチャネルを複数有するＳＳＤに対するデータ管理プログラムであって、
予め決められた固定長を有する管理対象に対して、異なる前記チャネルに接続する複数の前記ブロックを含む論理ブロックを割り当て、
前記管理対象を分割して生成されるソフトウェアによるデータのアクセス単位である分割管理対象のサイズが前記ページよりも大きい場合、前記管理対象に割り当てられた前記論理ブロックに含まれる前記ページのうち接続する前記チャネルが異なる複数の前記ページに前記分割管理対象を割り当てる
処理をコンピュータに実行させることを特徴とするデータ管理プログラム。
【請求項８】
自己におけるデータのアクセスの単位領域であるページ及び前記ページを複数含むデータ格納領域であってデータの消去単位であるブロックを複数有し、且つ、前記ブロックに対するデータの送受信経路であるチャネルを複数有するＳＳＤに対するデータ管理方法であって、
予め決められた固定長を有する管理対象に対して、異なる前記チャネルに接続する複数の前記ブロックを含む論理ブロックを割り当て、
前記管理対象を分割して生成されるソフトウェアによるデータのアクセス単位である分割管理対象のサイズが前記ページよりも大きい場合、前記管理対象に割り当てられた前記論理ブロックに含まれる前記ページのうち接続する前記チャネルが異なる複数の前記ページに前記分割管理対象を割り当てる
ことを特徴とするデータ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、データ管理プログラム及びデータ管理方法に関する。
【背景技術】
【０００２】
ＳＮＳ（Social  Networking  Service）などの大規模なシステムでは、データベースに対して大量のアクセスが集中する。そこで、このような大規模なシステムでは、データベースとは別のキャッシュサーバを設置して、アクセスを分散させることが行われる。
【０００３】
キャッシュサーバを使用するシステムは、以下のような動作を行う。例えば、キャッシュヒット時には、システムは、キャッシュサーバから直接アイテムを取得する。これに対して、キャッシュミス時には、システムは、データベースからアイテムを取得してキャッシュ―サーバにセットする。
【０００４】
特に近年、より高速なキャッシュサーバとして、インメモリ型のキャッシュサーバの導入が進んでいる。インメモリ型のキャッシュサーバは、ディスクベースのデータベースに比べてデータへのアクセススピードが高速である。そのため、インメモリ型のキャッシュサーバにアクセス頻度の高いアイテムをキャッシュすることで、システムは、高速にレスポンスを返すことが可能となる。
【０００５】
さらに、ＤＲＡＭ（Direct  Random  Access  Memory）が高価であることから、相対的に安価なＳＳＤ（Solid  State  Drive）が用いられることが多いため、インメモリ型のキャッシュサーバにおいてＳＳＤを使用した容量拡張の開発が重要となっている。
【０００６】
ここで、キャッシュサーバには様々な方式がある。例えば、データ保持形式として、キーとバリューとを一組にして書き込み、キーを指定することで対応するバリューを取り出せるデータ構造を有するキーバリュー型のキャッシュ―サーバがある。また、データの管理形式として、データ管理のための固定長の記憶領域であるスラブを有し、スラブを分割することで生成される実際にキー及びバリューを格納する単位であるチャンクを有するキャッシュサーバがある。このようなスラブ及びチャンクを用いてデータを管理するキャッシュサーバを、ここではスラブチャンク型のキャッシュサーバという。スラブチャンク型のキャッシュサーバでは、異なるサイズのチャンクを取り扱う場合、チャンクのサイズに応じてスラブが分類される。この場合、それぞれのスラブの集まりはスラブクラスと呼ばれる。例えば、数Ｂ〜１ＭＢのサイズを段階的に区切り、各段階順に応じてサイズを増加させてチャンクが決定され、その各チャンクのサイズ毎にスラブクラスが設けられる。各スラブクラスに含まれるスラブの数は、各スラブクラスへのアクセス頻度に応じて決定される。
【０００７】
さらに、インメモリ型のキャッシュサーバには、オープンチャネル（Open  Channel）ＳＳＤと呼ばれる特殊なＳＳＤを用いて容量拡張が行われたキャッシュサーバが存在する。オープンチャネルＳＳＤとは、ＯＳ（Operating  System）やアプリケーションからＳＳＤの物理アドレスに直接アクセス可能なＳＳＤである。オープンチャネルＳＳＤを用いた場合、従来のＳＳＤで行われていた冗長なアドレス変換が回避される。ただし、従来のＳＳＤでは、ＳＳＤが有するＦＬＴ（Flash  Translation  Layer）によりガベージコレクションやウェアレベリングなどの処理が行われていた。これに対して、オープンチャネルＳＳＤでは、ＯＳやアプリケーション側でこれらの処理が行われる。この場合、アプリケーションは、Ｓｌａｂを単位としてガベージコレクションを行う。
【０００８】
従来のメモリキャッシュシステムでは、ＳＳＤがアプリケーションとは独立してガベージコレクションを行う。そのため、従来のメモリキャッシュシステムにオープンチャネルＳＳＤを用いた場合、アプリケーションレベルとＳＳＤレベルの双方でガベージコレクョンが行われる。そこで、２重のガベージコレクションを回避するために、スラブとＮＡＮＤ（Not  AND）型のフラッシュメモリのブロックとを１対１に対応させる従来技術がある。スラブとブロックとを１対１に対応させることで、スラブを単位としたガベージコレクションとブロックを単位としたガベージコレクションとで同じ結果が導かれるため、いずれか一方の実行に制限することができる。
【０００９】
なお、バリューに対応するキーに基づいて生成されるキーアドレスとバリューの物理アドレスとを対応付けて記憶し、入力されたキーのキーアドレスに対応する物理アドレスを用いてバリューを取得する従来技術がある。また、インデックスキーに関連付けて物理パケット位置にマッピングするためにパケット変換テーブルを用いて物理パケットへのアクセスを行う従来技術がある。また、ガベージコレクションの終了時にチップ番号及びブロック番号を記憶し、次回のガベージコレクションの開始位置とする従来技術がある。さらに、受信したファイルをチャンクに分割し、ストレージデバイスのメンテナンス階層を基に分散させる従来技術がある。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０１３−２００８３９号公報
【特許文献２】特開２０１５−１４４０２２号公報
【特許文献３】特開２００９−１０４４３０号公報
【特許文献４】特表２０１６−５４１０６８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、スラブとブロックとを１対１に対応させた場合、ブロック毎に読み書きする１チャネルが１つ決定する。そのため、複数チャネルを用いた並列の読み書きへの対応が難しく、データの読み書きの性能を向上させることが困難である。
【００１２】
また、キーアドレスとバリューの物理アドレスとの対応を用いてバリューを取得する従来技術では、スラブとブロックの対応については考慮されておらず、２重のガベージコレクションを回避しつつデータの読み書きの性能を向上させることは困難である。これは、パケット変換テーブルにより物理パケットへアクセスする技術、ガベージコレクション終了時のチップ番号及びブロック番号を次回開始位置とする技術及びチャンクに分割したファイルをメンテナンス階層を基に分散する技術のいずれの場合も同様である。
【００１３】
開示の技術は、上記に鑑みてなされたものであって、データの読み書きの性能を向上させる情報処理装置、データ管理プログラム及びデータ管理方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本願の開示する情報処理装置、データ管理プログラム及びデータ管理方法の一つの態様において、ＳＳＤは、自己におけるデータのアクセスの単位領域であるページ及び前記ページを複数含む領域であって格納されたデータの消去単位であるブロックを複数有する。さらに、ＳＳＤは、前記ブロックに対するデータの送受信経路であるチャネルを複数有する。割当部は、予め決められた固定長を有する管理対象に対して、異なる前記チャネルに接続する複数の前記ブロックを含む論理ブロックを割り当てる。管理部は、前記管理対象を分割して生成されるソフトウェアによるデータのアクセス単位である分割管理対象のサイズが前記ページよりも大きい場合、前記割当部により前記管理対象に割り当てられた前記論理ブロックに含まれる前記ページのうち接続する前記チャネルが異なる複数の前記ページに前記分割管理対象を割り当てる。
【発明の効果】
【００１５】
１つの側面では、本発明は、データの読み書きの性能を向上させることができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、キャッシュサーバのハードウェア構成図である。
【図２】図２は、キャッシュサーバのブロック図である。
【図３】図３は、スラブ情報の一例を示す図である。
【図４】図４は、ＳＳＤに空きがある場合のページの割り当てを説明するための図である。
【図５】図５は、ＳＳＤに空きがない場合のページの割り当てを説明するための図である。
【図６】図６は、ゲット処理における動作を説明するための図である。
【図７】図７は、セット命令受信時の処理のフローチャートである。
【図８】図８は、ゲット命令受信時の処理のフローチャートである。
【図９】図９は、ガベージコレクションの処理のフローチャートである。
【図１０】図１０は、バックグラウンドでのガベージコレクションの処理のフローチャートである。
【図１１】図１１は、実施例３に係るキャッシュサーバのブロック図である。
【発明を実施するための形態】
【００１７】
以下に、本願の開示する情報処理装置、データ管理プログラム及びデータ管理方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、データ管理プログラム及びデータ管理方法が限定されるものではない。
【実施例１】
【００１８】
図１は、キャッシュサーバのハードウェア構成図である。図１に示すように、情報処理装置であるキャッシュサーバ１は、ＣＰＵ（Central  Processing  Unit）１１、ＳＳＤ１２、ＤＲＡＭ１３、ＤＭＡ（Direct  Memory  Access）コントローラ１４及びＮＩＣ（Network  Interface  Card）１５を有する。
【００１９】
ＮＩＣ１５は、クライアントサーバシステム２に接続される。ＮＩＣ１５は、ＣＰＵ１１やＤＲＡＭ１３とクライアントサーバシステム２とのデータ通信のインタフェースである。
【００２０】
ＳＳＤ１２は、ＮＡＮＤ型のフラッシュメモリを搭載したストレージである。ＳＳＤ１２は、オープンチャネルＳＳＤである。ＳＳＤ１２は、データの書き込み及び読み出しの単位領域であるページを有する。さらに、ＳＳＤ１２は、複数のページを含むデータの消去単位であるブロックを有する。すなわち、ＳＳＤ１２は、ページ単位でデータの読み出し及び書き込みが行われ、ブロック単位でデータの消去が行われる。
【００２１】
ＳＳＤ１２は、データの読み書きを行うチャネルを複数有する。各チャネルは、それぞれ異なるブロックが接続され、且つ、複数のブロックが接続される。ＳＳＤ１２は、複数のチャネルを用いて並行してデータの読み書きが行われる。
【００２２】
ＳＳＤ１２は、クライアントサーバシステム２から送られてきたデータを格納する。また、ＳＳＤ１２は、各種プログラムを格納する。
【００２３】
ＣＰＵ１１は、バスを介してＳＳＤ１２、ＤＲＡＭ１３及びＤＭＡコントローラ１４と接続される。ＣＰＵ１１は、ＳＳＤ１２に格納された各種プログラムをＤＲＡＭ１３上に展開して実行することで、各種プログラムにより規定された機能を実現する。また、ＣＰＵ１１は、クライアントサーバシステム２からのセット処理要求を受けて、ＳＳＤ１２にデータをセットする。また、ＣＰＵ１１は、クライアントサーバシステム２からのゲット処理要求を受けて、ＳＳＤ１２に格納されたデータを読み出す。
【００２４】
ＤＭＡコントローラ１４は、ＤＲＡＭ１３とクライアントサーバシステム２との間でＤＭＡ転送を用いたデータの送受信を行う。
【００２５】
図２は、キャッシュサーバのブロック図である。キャッシュサーバ１は、ここでは、図１におけるクライアントサーバシステム２に設置されたホスト２０に接続される。ホスト２０は、例えば、クライアントマシンやサーバマシンである。
【００２６】
キャッシュサーバ１は、スラブ割当部１０１、スラブメタデータ１０２、マッピング部１０３及びガベージコレクション実行部１０４を有する。さらに、キャッシュサーバ１は、ハッシュ関数計算部１０５、ハッシュテーブル１０６、ＫＶ（Key  Value）メタデータ１０７、データ管理部１０８、バッファ１０９及びＤＭＡ制御部１１０を有する。また、図１でも示したように、キャッシュサーバ１は、ＳＳＤ１２を有する。
【００２７】
スラブ割当部１０１の機能は、例えば、図１におけるＣＰＵ１１により実現される。スラブ割当部１０１は、セット命令をホスト２０から受信する。セット命令を受信した場合、スラブ割当部１０１は、セット命令で指定されたキーバリュー型のデータの１つのデータサイズを取得する。そして、スラブ割当部１０１は、セット命令で指定されたキーバリュー型のデータを格納するチャンクのサイズ及びそのチャンクを有するスラブクラスを、取得したデータサイズから特定する。
【００２８】
ここで、キャッシュサーバ１上で動作するアプリケーションがＳＳＤ１２を用いてデータを管理する際に用いる概念について説明する。スラブは、キャッシュサーバ１上で動作するアプリケーションがＳＳＤ１２を用いてデータを管理する際に用いるアプリケーションにとっての記憶領域の概念である。スラブは、予め決められた固定の大きさを有する。このスラブが、「管理対象」の一例にあたる。さらに、スラブは、キーバリュー型のデータを格納する単位領域であるチャンクに分割される。チャンクも、アプリケーションがＳＳＤ１２を用いてデータを管理する際に用いるアプリケーションにとっての記憶領域の概念である。このチャンクが、「分割管理対象」の一例にあたる。チャンクには、サイズの異なる種類のチャンクが存在する。各チャンクに格納されるデータは、そのチャンクのサイズ以下で且つそれよりも小さいサイズのチャンクよりサイズの大きなデータが格納される。そして、スラブは、チャンクのサイズ毎にスラブクラスと呼ばれるグループに分類される。スラブにＳＳＤ１２の論理ブロックが割り当てられることで、アプリケーション上の管理対象であるスラブが、ＳＳＤ１２に物理的な実体を有するブロックに対応する。
【００２９】
次に、スラブ割当部１０１は、スラブに対応する大きさの空きがＳＳＤ１２に存在するか否かを判定する。スラブに対応する大きさの空きがＳＳＤ１２に存在する場合、スラブ割当部１０１は、新たなスラブへの論理ブロックの割り当てをマッピング部１０３に指示する。その後、スラブ割当部１０１は、新たなスラブに割り当てられた論理ブロックの情報の入力をマッピング部１０３から受ける。
【００３０】
そして、スラブ割当部１０１は、セット命令で指定されたキーバリュー型のデータのスラブクラスに合うように論理ブロックが割り当てられたスラブを分割してチャンクを生成する。次に、スラブ割当部１０１は、そのスラブに割り当てられた論理ブロックに含まれるページを生成した各チャンクに割り当てる。これにより、スラブ割当部１０１は、アプリケーション上の管理対象であるチャンクを、ＳＳＤ１２に物理的な実体を有するページに対応させることができる。
【００３１】
ここで、チャンクのサイズがページのサイズよりも大きい場合、スラブ割当部１０１は、接続するチャネルの異なるブロックからページを１つずつ選択してチャンクに割り当てる。これに対して、チャンクのサイズがページのサイズ以下の場合、スラブ割当部１０１は、１つのブロックに含まれる１つのページをチャンクに割り当てる。そして、スラブ割当部１０１は、チャンク割り当てたページをセット命令で指定されたキーバリュー型のデータの格納先とする。以下では、複数のページがチャンクに割り当てられた場合も、その割り当てられたページ群を「チャンクに割り当てたページ」として説明する。
【００３２】
その後、スラブ割当部１０１は、スラブクラスの情報、スラブの識別情報、スラブに含まれる各チャンクを割り当てたページの情報及び各チャンクの使用状態を表す情報をスラブメタデータ１０２に格納する。
【００３３】
ここで、スラブメタデータ１０２は、例えば、図１に示したＤＲＡＭ１３に格納される。スラブメタデータ１０２は、スラブに関する情報が格納されたデータであり、上述した以外の情報が含まれてもよい。
【００３４】
一方、スラブに対応する大きさの空きがＳＳＤ１２に存在しない場合、スラブ割当部１０１は、特定したスラブクラスにデータの格納が可能な空きチャンクを有するスラブが存在するか否かをスラブメタデータ１０２から判定する。
【００３５】
空きチャンクを有するスラブが存在する場合、スラブ割当部１０１は、そのチャンクに対応するページをセット命令で指定されたキーバリュー型のデータの格納先とする。その後、スラブ割当部１０１は、新たに使用したチャンクの情報をスラブメタデータ１０２に登録する。
【００３６】
これに対して、空きチャンクが存在しない場合、スラブ割当部１０１は、ガベージコレクションの実行をガベージコレクション実行部１０４に指示する。その後、スラブ割当部１０１は、ガベージコレクション実行部１０４からのガベージコレクション完了の通知を受けて、論理ブロックへの新たなスラブの割り当てをマッピング部１０３に指示する。その後、スラブ割当部１０１は、新たにスラブに割り当てられた論理ブロックの情報の入力をマッピング部１０３から受ける。
【００３７】
そして、スラブ割当部１０１は、セット命令で指定されたキーバリュー型のデータのスラブクラスに合うように論理ブロックが割り当てられたスラブを分割しチャンクを生成する。次に、スラブ割当部１０１は、そのスラブに割り当てられた論理ブロックに含まれるページを生成した各チャンクに割り当てる。そして、スラブ割当部１０１は、チャンク割り当てたページをセット命令で指定されたキーバリュー型のデータの格納先とする。その後、スラブ割当部１０１は、新たに作成したスラブに関する情報をスラブメタデータ１０２に格納する。
【００３８】
スラブ割当部１０１は、セット命令で指定されたキーバリュー型のデータの格納先の決定後、セット命令で指定されたキーバリュー型のデータ及び格納先のページの情報をデータ管理部１０８へ出力する。このスラブ割当部１０１が、「管理部」の一例にあたる。
【００３９】
マッピング部１０３の機能は、例えば、図１におけるＣＰＵ１１により実現される。マッピング部１０３は、新たなスラブへの論理ブロックの割り当ての指示をスラブ割当部１０１から受ける。マッピング部１０３は、ＳＳＤ１２の使用状態の情報を有する。
【００４０】
そして、マッピング部１０３は、ＳＳＤ１２においてスラブが未割り当てのブロックの中から、異なるチャネルに接続されるブロックを１つずつ選択し論理ブロックを生成する。ここで、本実施例では、マッピング部１０３は、全てのチャネル分のブロックを用いて１つの論理ブロックを生成する。例えば、１ブロックが２ＭＢであり、ＳＳＤ１２が１６チャネルを有する場合、マッピング部１０３は、１６チャネルのそれぞれから１ブロックずつ選択して３２ＭＢの論理ブロックを生成する。そして、マッピング部１０３は、スラブ割当部１０１から割り当て指示を受けたスラブに生成した論理ブロックを割り当てる。
【００４１】
ここで、本実施例では、全てのチャネルから１つずつブロックを選択して１つの論理ブロックを生成したが、論理ブロックのサイズはスラブの大きさに一致すればよく、論理ブロックの生成方法はこれに限らない。例えば、スラブのサイズが全てのチャネルを使用する場合より小さい場合、マッピング部１０３は、チャネルの中からいくつかを選択し、選択したチャネルから１つずつブロックを選択して１つの論理ブロックとしてもよい。また、スラブのサイズが全てのチャネルから１つずつブロックを使用する場合より大きい場合、マッピング部１０３は、全てのチャネルから選択するとともに、いずれかのチャネルで重複してブロックを選択して１つの論理ブロックとしてもよい。
【００４２】
その後、マッピング部１０３は、図３に示すようなスラブ情報３１を記憶する。図３は、スラブ情報の一例を示す図である。スラブ情報３１におけるスラブＩＤは、スラブ割当部１０１から通知されたスラブの識別情報である。ここで、このスラブ情報３１は、スラブメタデータ１０２と組み合わせて保存されてもよい。そして、マッピング部１０３は、スラブに割り当てた論理ブロックの情報をスラブ割当部１０１に通知する。このマッピング部１０３が、「割当部」の一例にあたる。
【００４３】
ガベージコレクション実行部１０４の機能は、例えば、図１に示したＣＰＵ１１により実現される。ガベージコレクション実行部１０４は、ガベージコレクションの実行指示をスラブ割当部１０１から受ける。そして、ガベージコレクション実行部１０４は、ＳＳＤ１２に対してガベージコレクションを実行し、未使用領域を作成する。その後、ガベージコレクション実行部１０４は、ガベージコレクションの完了をスラブ割当部１０１に通知する。
【００４４】
データ管理部１０８の機能は、例えば、図１に示したＣＰＵ１１により実現される。データ管理部１０８は、セット命令で指定されたキーバリュー型のデータの格納先の決定後、セット命令で指定されたキーバリュー型のデータ及び格納先のページの情報の入力をスラブ割当部１０１から受ける。そして、データ管理部１０８は、セット命令で指定されたキーをハッシュ関数計算部１０５に送信する。その後、データ管理部１０８は、セット命令で指定されたキーのハッシュ値をハッシュ関数計算部１０５から取得する。
【００４５】
次に、データ管理部１０８は、セット命令で指定されたキーバリュー型のデータのサイズやＳＳＤ１２の格納先のページのアドレスをＫＶメタデータ１０７に登録する。ここで、ＫＶメタデータ１０７は、例えば、図１に示したＤＲＡＭ１３に格納される。ＫＶメタデータ１０７は、セット命令で指定されたキーバリュー型のデータを格納するチャンクに割り当てられたページの物理アドレスを保持する。
【００４６】
次に、データ管理部１０８は、取得したハッシュ値をインデックスとして登録したＫＶメタデータ１０７を示す値を出力値とするエントリをハッシュテーブル１０６に登録する。
【００４７】
さらに、データ管理部１０８は、同一キーに対応するバリューがＳＳＤ１２の中に存在するか否かを判定する。同一キーに対応するバリューがＳＳＤ１２に存在する場合、データ管理部１０８は、ＳＳＤ１２の中の同一キーに対応する古いキーバリュー型のデータを無効化する。
【００４８】
その後、データ管理部１０８は、セット命令で指定されたキーバリュー型のデータを、ＳＳＤ１２におけるそのデータの格納先のチャンクに割り当てられたページに格納する。その後、データ管理部１０８は、セット完了の応答をホスト２０に返す。
【００４９】
また、ホスト２０からゲット命令がキャッシュサーバ１に入力された場合、データ管理部１０８は、ゲット命令で指定されたキーから計算されるハッシュ値をインデックスとする出力値をハッシュテーブル１０６から取得する。次に、データ管理部１０８は、取得した出力値が示すＫＶメタデータ１０７を特定し、そのキーに対応するキーバリュー型のデータが格納されたチャンクに割り当てられたページの物理アドレスを特定したＫＶメタデータ１０７から取得する。そして、データ管理部１０８は、ＳＳＤ１２における取得した物理アドレスを有するページに格納されたキーバリュー型のデータのキーがゲット命令で指定されたキーに一致することを確認する。次に、データ管理部１０８は、ＳＳＤ１２における取得した物理アドレスを有するページに格納されたキーバリュー型のデータのバリューを取得する。その後、データ管理部１０８は、取得したバリューをバッファ１０９に格納する。
【００５０】
これに対して、ハッシュ値をインデックスとしたハッシュテーブル１０６からの出力値が示すＫＶメタデータ１０７が存在しない場合、データ管理部１０８は、ミスの通知をホスト２０へ返す。
【００５１】
ハッシュ関数計算部１０５の機能は、例えば、図１に示したＣＰＵ１１により実現される。ハッシュ関数計算部１０５は、ゲット命令をホスト２０から受信する。そして、ハッシュ関数計算部１０５は、ゲット命令で指定されたキーからハッシュ値を計算する。その後、ハッシュ関数計算部１０５は、算出したハッシュ値をハッシュテーブル１０６へ入力する。
【００５２】
ハッシュテーブル１０６は、例えば、図１に示したＤＲＡＭ１３に格納される。ハッシュテーブル１０６は、ハッシュ値の入力をハッシュ関数計算部１０５から受ける。そして、ハッシュテーブル１０６は、入力されたハッシュ値に対応する値をデータ管理部１０８へ出力する。例えば、ハッシュテーブル１０６は、ハッシュ値に対応する値として、ＫＶメタデータ１０７のポインタを出力する。
【００５３】
すなわち、データ管理部１０８は、ハッシュ関数計算部１０５、ハッシュテーブル１０６、ＫＶメタデータ１０７を用いることで、ゲット命令で指定されたキーに対応するバリューのＳＳＤ１２における格納位置を、キーから直接取得することができる。キーから直接取得するとは、論理アドレスからＳＳＤ１２上の物理アドレスへの変換といったアドレス変換を行わずに物理アドレスを取得することを指す。このハッシュ関数計算部１０５、ハッシュテーブル１０６、ＫＶメタデータ１０７及びデータ管理部１０８が、「読出部」の一例にあたる。
【００５４】
ＤＭＡ制御部１１０の機能は、例えば、図１に示したＤＭＡコントローラ１４により実現される。ＤＭＡ制御部１１０は、ＤＭＡ転送によりバッファ１０９に格納されたバリューをホスト２０へ送信する。これにより、ホスト２０は、ゲット命令で指定したキーに対応するバリューをゲット命令の応答として取得する。
【００５５】
次に、図４を参照して、ＳＳＤ１２にスラブに対応するサイズの空きがある場合のチャンクへのページの割り当てについて説明する。図４は、ＳＳＤに空きがある場合のページの割り当てを説明するための図である。図４におけるスラブクラス２２１〜２２２は、それぞれ異なるスラブクラスを表す。さらに、ＳＳＤ１２は、チャネル２０１としてチャネルＣｈ０〜ＣｈＭを有する。また、各チャネルＣｈ０〜ＣｈＭは、それぞれブロックＢ０及びＢ１を含む複数のブロックに接続される。
【００５６】
スラブ割当部１０１は、セット命令で指定されたキーバリュー型のデータを格納先としてスラブクラス２２１を特定する。そして、スラブクラス２２１に含まれるスラブ２１１に対応するサイズの空きがＳＳＤ１２にある場合、スラブ割当部１０１は、スラブ２１１への論理ブロックの割り当てをマッピング部１０３に指示する。
【００５７】
マッピング部１０３は、スラブ割当部１０１からの指示を受けて、各チャネルＣｈ０〜ＣｈＭのそれぞれからブロックＢ０を選択し１つの論理ブロック２０３を生成する。そして、マッピング部１０３は、スラブクラス２２１のスラブ２１１に論理ブロック２０３を割り当てる。その後、マッピング部１０３は、スラブ２１１に論理ブロック２０３を割り当てた旨をスラブ割当部１０１に通知する。
【００５８】
スラブ割当部１０１は、論理ブロック２０３のスラブ２１１への割り当ての通知をマッピング部１０３から受けると、セット命令で指定されたキーバリュー型のデータから決定されるサイズにスラブ２１１を分割してチャンク２１２〜２１５を生成する。次に、スラブ割当部１０１は、セット命令で指定されたキーバリュー型のデータの格納先をチャンク２１２と決定する。そして、スラブ割当部１０１は、チャンクのサイズとなるページの数を算出する。ここでは、２つ分のページのサイズがチャンク２１２のサイズに対応する場合で説明する。
【００５９】
スラブ割当部１０１は、スラブ２１１に割り当てられた論理ブロック２０３の中のチャネルＣｈ０〜ＣｈＭから２つのチャネルＣｈ０及びＣｈ１を選択する。そして、スラブ割当部１０１は、選択したチャネルＣｈ０及びＣｈ１に接続されたブロックＢ０からそれぞれページ＃０を選択してページ２０２とする。そして、スラブ割当部１０１は、チャンク２１２にページ２０２を割り当てる。その後、スラブ割当部１０１は、スラブ２１１の識別情報、スラブ２１１のチャンク２１２〜２１５の情報、チャンク２１２に割り当てたページ２０２の情報をスラブメタデータ１０２に登録する。
【００６０】
これにより、チャンク２１２がページ２０２と対応することになり、アプリケーションによるチャンク２１２に対する処理は、ＳＳＤ１２におけるページ２０２に対する処理となる。すなわち、アプリケーションがスラブ及びチャンクを対象としてガベージコレクションを実行することで、ＳＳＤ１２におけるガベージコレクションを行ったといえる。具体的には、アプリケーションがチャンクに格納されたデータを他のスラブに移動することで、ある論理ブロックのページに格納されたデータが他の論理ブロックのページに移動される。そして、有効なデータが格納されたチャンクを持たないスラブを生成することが、有効ページを有さない論理ブロックを生成することになる。さらに、有効なデータを有さないスラブを削除することで、有効ページを有さない論理ブロックに含まれる各ブロックを削除することができる。すなわち、アプリケーション側でガベージコレクションを行うことで、ＳＳＤ１２側のガベージコレクションも行うことができる。
【００６１】
次に、図５を参照して、ＳＳＤ１２にスラブに対応するサイズの空きがない場合のチャンクへのページの割り当てについて説明する。図５は、ＳＳＤに空きがない場合のページの割り当てを説明するための図である。
【００６２】
スラブ割当部１０１は、ＳＳＤ１２に新たなスラブに対応するサイズの空きがない場合、スラブメタデータ１０２を用いて、セット命令で指定されたキーバリュー型のデータを格納するスラブクラス２２１に、空きチャンクがあるか否かを判定する。ここで、スラブクラス２２１のスラブ２１１のチャンク２１４が空きチャンクであった場合、スラブ割当部１０１は、スラブ２１１に割り当てられた論理ブロック２０３の中のチャネルＣｈ０〜ＣｈＭから２つのチャネルＣｈ０及びＣｈ１を選択する。そして、スラブ割当部１０１は、選択したチャネルＣｈ０及びＣｈ１に接続されたブロックＢ０からそれぞれ空きページであるページ＃ｋを選択してページ２０４とする。そして、スラブ割当部１０１は、チャンク２１４にページ２０４を割り当てる。その後、スラブ割当部１０１は、チャンク２１４に割り当てたページ２０４の情報をスラブメタデータ１０２に登録する。
【００６３】
この場合に、セット命令で指定されたキーバリュー型のデータを格納するスラブクラス２２１に、空きチャンクが無ければ、スラブ割当部１０１は、ガベージコレクションによりスラブに対応するサイズの空きをＳＳＤ１２に作る。そして、スラブ割当部１０１は、ガベージコレクションにより作ったＳＳＤ１２の空きを対象として、図４で示したＳＳＤ１２にスラブに対応するサイズの空きがある場合のチャンクへのページの割り当てと同様の動作を行う。
【００６４】
次に、図６を参照して、ゲット処理における各部の動作について説明する。図６は、ゲット処理における動作を説明するための図である。
【００６５】
ハッシュ関数計算部１０５は、ゲット命令で指定されたキーを取得して、キーからハッシュ値を算出する。そして、ハッシュ関数計算部１０５は、求めたハッシュ値をハッシュテーブル１０６へ入力する。ハッシュテーブル１０６は、入力されたハッシュ値に対応する値を出力する。
【００６６】
データ管理部１０８は、ハッシュテーブル１０６の出力値を取得する。そして、データ管理部１０８は、取得した出力値をインデックスに持つＫＶメタデータ１０７から、ゲット命令で指定されたキーバリュー型のデータの格納先のアドレスを取得する。この場合、ゲット命令で指定されたキーバリュー型のデータはチャンク２１２に格納される。そして、チャンク２１２は、ページ２０２が割り当てられている。そこで、データ管理部１０８は、ＫＶメタデータ１０７からページ２０２のアドレスを取得する。次に、データ管理部１０８は、取得したアドレスを用いてＳＳＤ１２の中からページ２０２を特定し、ページ２０２からバリューを取得する。データ管理部１０８は、取得したバリューをゲット命令の送信元へ送ることでゲット命令が完了する。
【００６７】
次に、図７を参照して、セット命令受信時の処理の流れについて説明する。図７は、セット命令受信時の処理のフローチャートである。
【００６８】
スラブ割当部１０１は、ホスト２０が送信したセット命令を受信する（ステップＳ１０１）。
【００６９】
次に、スラブ割当部１０１は、セット命令で指定されたセットするキューバリュー型のデータのサイズを特定し、スラブクラスを決定する（ステップＳ１０２）。
【００７０】
次に、スラブ割当部１０１は、ＳＳＤ１２にスラブのサイズに対応する空き領域が存在するか否かを判定する（ステップＳ１０３）。
【００７１】
空き領域が存在しない場合（ステップＳ１０３：否定）、スラブ割当部１０１は、同一スラブクラスに空きチャンクがあるか否かを判定する（ステップＳ１０４）。空きチャンクがある場合（ステップＳ１０４：肯定）、スラブ割当部１０１は、その空きチャンクをセット命令で指定されたデータの格納先として、ステップＳ１０８へ進む。
【００７２】
これに対して、空きチャンクがない場合（ステップＳ１０４：否定）、スラブ割当部１０１は、ガベージコレクションの実行をガベージコレクション実行部１０４に指示する。ガベージコレクション実行部１０４は、スラブ割当部１０１からの指示を受けて、ガベージコレクションを実行し、ＳＳＤ１２にスラブのサイズに対応する空き領域を生成する（ステップＳ１０５）。その後、ガベージコレクションの完了通知をガベージコレクション実行部１０４から受信すると、スラブ割当部１０１は、ステップＳ１０６へ進む。
【００７３】
ＳＳＤ１２に空き領域がある場合（ステップＳ１０３：肯定）、スラブ割当部１０１は、新たなスラブに対する論理ブロックの割り当てをマッピング部１０３に要求する。マッピング部１０３は、スラブ割当部１０１からの要求を受けて、新たなスラブに論理ブロックを割り当てる。そして、マッピング部１０３は、スラブに割り当てた論理ブロックの情報をスラブ割当部１０１へ出力する。スラブ割当部１０１は、割り当てられた論理ブロックの情報をマッピング部１０３から受信する。これにより、スラブ割当部１０１は、論理ブロックがマッピングされた新たなスラブを生成する（ステップＳ１０６）。
【００７４】
次に、スラブ割当部１０１は、生成したスラブをセット命令で指定されたデータに応じたサイズのチャンクに分割する（ステップＳ１０７）。そして、スラブ割当部１０１は、生成したチャンクの中からセット命令で指定されたデータの格納先を選択する。
【００７５】
次に、スラブ割当部１０１は、チャンクサイズがページサイズより大きいか否かを判定する（ステップＳ１０８）。チャンクサイズがページサイズより大きい場合（ステップＳ１０８：肯定）、スラブ割当部１０１は、マッピング部１０３から通知された論理ブロックに含まれるページの中から異なるチャネルに繋がるページを１つずつスラブサイズ分選択する。そして、スラブ割当部１０１は、選択したページをセット命令で指定されたデータの格納先としたチャンクに割り当てる（ステップＳ１０９）。
【００７６】
これに対して、チャンクサイズがページサイズ以下の場合（ステップＳ１０８：否定）、スラブ割当部１０１は、１つのページをセット命令で指定されたデータの格納先としたチャンクに割り当てる（ステップＳ１１０）。
【００７７】
そして、スラブ割当部１０１は、ページを割り当てたチャンクに関するスラブメタデータ１０２を登録する（ステップＳ１１１）。その後、スラブ割当部１０１は、セット命令で指定されたキーバリュー型のデータ、そのデータを格納するチャンク及びそのチャンクに割り当てたページの情報をデータ管理部１０８へ出力する。
【００７８】
データ管理部１０８は、セット命令で指定されたキーバリュー型のデータ、そのデータを格納するチャンク及びそのチャンクに割り当てたページの情報の入力をスラブ割当部１０１から受ける。そして、データ管理部１０８は、キーをハッシュ関数計算部１０５へ出力する。ハッシュ関数計算部１０５は、データ管理部１０８から入力されたキーからハッシュ値を計算する（ステップＳ１１２）。
【００７９】
データ管理部１０８は、ハッシュ関数計算部１０５により算出されたハッシュ値を取得する。次に、データ管理部１０８は、セット命令で指定されたキーバリュー型のデータのサイズ及びそのデータを格納したＳＳＤ１２のページのアドレスをＫＶメタデータ１０７に登録する。その後、データ管理部１０８は、取得したハッシュ値をインデックスとして出力値をページのアドレスを登録したＫＶメタデータ１０７を示す値とするエントリをハッシュテーブル１０６に登録する（ステップＳ１１３）。
【００８０】
次に、データ管理部１０８は、同一キーに対応するバリューがＳＳＤ１２の中に存在するか否かを判定する（ステップＳ１１４）。同一キーに対応するバリューがＳＳＤ１２に存在しない場合（ステップＳ１１４：否定）、データ管理部１０８は、ステップＳ１１６へ進む。
【００８１】
これに対して、同一キーに対応するバリューがＳＳＤ１２に存在する場合（ステップＳ１１４：肯定）、データ管理部１０８は、ＳＳＤ１２の中の同一キーに対応する古いキーバリュー型のデータを無効化する（ステップＳ１１５）。
【００８２】
次に、データ管理部１０８は、そのキーバリュー型のデータの格納先のチャンクに割り当てられたＳＳＤ１２のページにキー及びバリューを書き込む（ステップ１１６）。
【００８３】
その後、データ管理部１０８は、セット完了をホスト２０に通知する（ステップ１１７）。
【００８４】
次に、図８を参照して、ゲット命令受信時の処理の流れについて説明する。図８は、ゲット命令受信時の処理のフローチャートである。
【００８５】
ハッシュ関数計算部１０５は、ゲット命令をホスト２０から受信する（ステップＳ２０１）。
【００８６】
次に、ハッシュ関数計算部１０５は、ゲット命令で指定されたキーからハッシュ値を算出する（ステップＳ２０２）。ハッシュ関数計算部１０５は、算出したハッシュ値をデータ管理部１０８へ出力する。
【００８７】
次に、データ管理部１０８は、ハッシュテーブル１０６を参照して、ハッシュ関数計算部１０５が算出したハッシュ値に対応する出力値を取得する（ステップＳ２０３）。
【００８８】
次に、データ管理部１０８は、ハッシュテーブル１０６からの出力値が示すＫＶメタデータ１０７が存在するか否かを判定する（ステップＳ２０４）。
【００８９】
出力値が示すＫＶメタデータ１０７が存在する場合（ステップＳ２０４：肯定）、データ管理部１０８は、ハッシュテーブル１０６の出力値から特定されるＫＶメタデータ１０７を取得する（ステップＳ２０５）。
【００９０】
次に、データ管理部１０８は、取得したＫＶメタデータ１０７が保持するＳＳＤ１２の物理アドレスを取得する（ステップＳ２０６）。
【００９１】
次に、データ管理部１０８は、ＳＳＤ１２の取得した物理アドレスが示すページからバリューを取得する（ステップＳ２０７）。
【００９２】
その後、データ管理部１０８は、取得したバリューをバッファ１０９へ格納する。ＤＭＡ制御部１１０は、バッファ１０９に格納されたバリューをゲット命令の応答の値としてＤＭＡ転送によりホスト２０に返す（ステップＳ２０８）。
【００９３】
一方、出力値が示すＫＶメタデータ１０７が存在しない場合（ステップＳ２０４：否定）、データ管理部１０８は、をゲット命令の応答としてミスの通知をホスト２０に返す（ステップＳ２０９）。
【００９４】
次に、図９を参照して、本実施例に係るキャッシュサーバ１におけるガベージコレクションの処理の流れについて説明する。図９は、ガベージコレクションの処理のフローチャートである。
【００９５】
ガベージコレクション実行部１０４は、セット命令で指定されたデータを格納する特定のスラブクラスの情報を、ガベージコレクションの実行命令とともにスラブ割当部１０１から受ける。そして、ガベージコレクション実行部１０４は、特定のスラブクラスの有効なキーバリュー型のデータが最も少ないスラブを移動元スラブとして特定のスラブクラスから検出する（ステップＳ３０１）。
【００９６】
次に、ガベージコレクション実行部１０４は、空き領域のあるスラブを移動先スラブとして、移動元スラブのスラブクラスと同一のスラブクラス、すなわち特定のスラブクラスから検出する（ステップＳ３０２）。
【００９７】
次に、ガベージコレクション実行部１０４は、移動元スラブの有効なキーバリュー型のデータを１つ選択する（ステップＳ３０３）。
【００９８】
次に、ガベージコレクション実行部１０４は、選択したキーバリュー型のデータを移動先スラブの空きチャンクへコピーし、移動元スラブの選択したデータが格納されていたチャンクを無効にする（ステップＳ３０４）。この処理により、ＳＳＤ１２の中では、移動元スラブに対応する論理ブロック内の選択したデータを格納するページのデータが、移動先スラブに対応する論理ブロック内の空いているページへコピーされる。そして、コピーしたデータを格納していたページが無効化される。
【００９９】
そして、ガベージコレクション実行部１０４は、移動元スラブの全てのチャンクが無効になったか否かを判定する（ステップＳ３０５）。有効なキーバリュー型のデータを格納するチャンクが残っている場合（ステップＳ３０５：否定）、ガベージコレクション実行部１０４は、ステップＳ３０３へ戻る。
【０１００】
これに対して、移動元スラブの全てのチャンクが無効になった場合（ステップＳ３０５：肯定）、ガベージコレクション実行部１０４は、移動元スラブを空にして対応する論理ブロックに含まれる全てのブロックを削除する（ステップＳ３０６）。
【０１０１】
以上に説明したように、本実施例に係るキャッシュ―サーバは、アプリケーションにより実行されるガベージコレクションを行うことで、ＳＳＤが実行するハードウェア側のガベージコレクションと同様の結果を得られる。したがって、本実施例に係るキャッシュ―サーバは、ＳＳＤにより実行されるハードウェア側のガベージコレクションを行わなくてもよい。さらに、本実施例に係るキャッシュサーバは、１つのチャンクに異なるチャネルに繋がる複数のページを割り当て、チャンクへのデータの書き込み時には、複数のチャネルを用いて並列に複数のページへの書き込みを行う。これにより、データの読み書きの性能を向上させることができる。
【実施例２】
【０１０２】
次に、実施例２について説明する。本実施例に係るキャッシュサーバは、スラブの作成とは独立してバックグラウンドでも定期的にガベージコレクションを実行することが実施例１と異なる。本実施例に係るキャッシュサーバも、図１及び２で表される。以下の説明では、実施例１と同様の各部の動作については説明を省略する。
【０１０３】
ガベージコレクション実行部１０４は、自己の中にタイマーを有する。さらに、ガベージコレクション実行部１０４は、バックグラウンドでのガベージコレクションの実行周期である一定時間を予め記憶する。そして、ガベージコレクション実行部１０４は、自己が有するタイマーを用いて時間を計測し、一定時間が経過するごとに各スラブクラスに対するガベージコレクションを開始する。
【０１０４】
ガベージコレクション実行部１０４は、スラブクラスの中から１つのスラブクラスを選択する。そして、ガベージコレクション実行部１０４は、選択したスラブクラスの空きチャンクの数を確認する。選択したスラブクラスの空きチャンクの数が予め決められた閾値以下の場合、ガベージコレクション実行部１０４は、選択したスラブクラスに対してガベージコレクションを実行する。ガベージコレクション実行部１０４は、全てのスラブクラスに対して、以上の判定及びガベージコレクションの実行の処理を繰り返す。
【０１０５】
ここで、ガベージコレクション実行部１０４は、バックグラウンドでのガベージコレクションとは別に、実施例１と同様に、スラブ割当部１０１がスラブの割り当てを行う際に空き領域が無い場合にもガベージコレクションを実行してもよい。
【０１０６】
次に、図１０を参照して、バックグラウンドでのガベージコレクションの処理の流れを再度説明する。図１０は、バックグラウンドでのガベージコレクションの処理のフローチャートである。
【０１０７】
ガベージコレクション実行部４０１は、未選択のスラブクラスから１つスラブクラスを選択する（ステップＳ４０１）。
【０１０８】
次に、ガベージコレクション実行部４０１は、選択したスラブクラスの空きチャンクの数を確認する（ステップＳ４０２）。
【０１０９】
次に、ガベージコレクション実行部１０４は、選択したスラブクラスの空きチャンクの数が閾値以下であるか否かを判定する（ステップＳ４０３）。空きチャンクの数が閾値より多い場合（ステップＳ４０３：否定）、ガベージコレクション実行部１０４は、ステップＳ４０５へ進む。
【０１１０】
これに対して、空きチャンクの数が閾値以上の場合（ステップＳ４０３：肯定）、ガベージコレクション実行部１０４は、選択したスラブクラスに対してガベージコレクションを実行する（ステップＳ４０４）。
【０１１１】
その後、ガベージコレクション実行部１０４は、全てのスラブクラスに対する処理が終了したか否かを判定する（ステップＳ４０５）。処理が終わっていないスラブクラスがある場合（ステップＳ４０５：否定）、ガベージコレクション実行部１０４は、ステップＳ４０１へ戻る。
【０１１２】
これに対して、全てのスラブクラスに対する処理が終了した場合（ステップＳ４０５：肯定）、ガベージコレクション実行部１０４は、バックグラウンドでのガベージコレクションを終了する。ガベージコレクション実行部１０４は、一定周期で、ステップＳ４０１〜４０５を繰り返す。
【０１１３】
以上に説明したように、本実施例に係るキャッシュサーバは、一定周期でバックグラウンドでのガベージコレクションを行う。これにより、セット命令時にＳＳＤ１２が空き領域を有する可能性が高くなり、セット命令の処理中のガベージコレクションの実行が回避でき、データの書き込み速度をさらに向上させることができる。
【実施例３】
【０１１４】
図１１は、実施例３に係るキャッシュサーバのブロック図である。本実施例に係るキャッシュサーバ１は、スラブに対する論理ブロックの割り当てやデータを格納するチャンクの作成及ページの割り当てなどの処理をハードウェアが実行することが実施例１と異なる。本実施例に係るキャッシュサーバ１の各部は、実施例１と同様の機能を有する。
【０１１５】
本実施例に係るキャッシュサーバ１は、コントローラ１５０を有する。コントローラ１５０は、ＦＰＧＡ（Field  Programmable  Gate  Array）やＬＳＩ（Large  Scale  Integration）で構成される。コントローラ１５０は、スラブ割当部１０１、マッピング部１０３、ガベージコレクション実行部１０４、ハッシュ関数計算部１０５、データ管理部１０８及びＤＭＡ制御部１１０の各機能を実現する回路を有する。また、コントローラ１５０は、スラブメタデータ１０２、ハッシュテーブル１０６、ＫＶメタデータ１０７及びバッファ１０９を格納するＤＲＡＭを有する。コントローラ１５０は、ＳＳＤ１２と複数のチャネルを介して通信する。
【０１１６】
以上に説明したように、本実施例に係るキャッシュサーバは、ハードウェアによりスラブに対する論理ブロックの割り当てやデータを格納するチャンクの作成及ページの割り当てなどの機能を実現する。これにより、ソフトウェアにより各機能を実現するときに比べて、データの読み出し及び書き込みをより速くすることができる場合がある。
【符号の説明】
【０１１７】
１  キャッシュサーバ
２  クライアントサーバシステム
１１  ＣＰＵ
１２  ＳＳＤ
１３  ＤＲＡＭ
１４  ＤＭＡコントローラ
１５  ＮＩＣ
１０１  スラブ割当部
１０２  スラブメタデータ
１０３  マッピング部
１０４  ガベージコレクション実行部
１０５  ハッシュ関数計算部
１０６  ハッシュテーブル
１０７  ＫＶメタデータ
１０８  データ管理部
１０９  バッファ
１１０  ＤＭＡ制御部
１５０  コントローラ
【図１】
2019194780.tif 000003
【図２】
2019194780.tif 000004
【図３】
2019194780.tif 000005
【図４】
2019194780.tif 000006
【図５】
2019194780.tif 000007
【図６】
2019194780.tif 000008
【図７】
2019194780.tif 000009
【図８】
2019194780.tif 000010
【図９】
2019194780.tif 000011
【図１０】
2019194780.tif 000012
【図１１】
2019194780.tif 000013