(57)【特許請求の範囲】
【請求項１】
メムキャッシュドシステムのクライアント装置であって、
メモリと、
前記メモリに結合された１または複数のプロセッサと、
前記メムキャッシュドシステムにおけるキーに対応する値をゲット、セットまたはアップデートする要求を受信し、
前記要求の受信に応答して、前記キーがメムキャッシュドロジックによりメモリ内に維持されるローカルキャッシュにおけるヒットをもたらすか否かを判断し、
前記キーが前記ローカルキャッシュにおいてヒットをもたらすことを、前記判断の結果が示すことに少なくとも部分的に基づいて、ゲット要求、セット要求、またはアップデート要求をサービス提供する、前記１または複数のプロセッサにより操作される前記メムキャッシュドロジックとを備え、
（ｉ）ヒットをもたらさない前記キーを用いるセット要求のために、サービスは、
前記メムキャッシュドシステムのサーバに、前記値を要求する前記ゲット要求を送信することと、
前記値および前記値の関連付けられる状態フラグが格納される、前記メムキャッシュドシステムの１または複数の位置の１または複数の物理アドレスを受信することと、
受信された前記１または複数の物理アドレスを用いて、前記メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、前記値および前記関連付けられる状態フラグを取得することと、
受信された前記値を返すこととを含み、
または、
（ｉｉ）ヒットをもたらす前記キーを用いるゲット要求のために、サービスは、
前記ローカルキャッシュにアクセスして、前記値および前記値の関連付けられる状態フラグが格納される、前記メムキャッシュドシステムの１または複数の位置の１または複数のアドレスを取得することと、
前記ローカルキャッシュから取得された前記１または複数のアドレスを用いて、前記メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、前記値および前記関連付けられる状態フラグを取得することと、
前記リモートダイレクトメモリアクセス動作により取得された前記状態フラグに少なくとも部分的に基づいて、前記リモートダイレクトメモリアクセス動作により取得された前記値が古いか否かを判断することと、
前記値が古いことを示すステール判断の結果に応答して、前記メムキャッシュドシステムのサーバに、前記値を要求する前記ゲット要求を送信することと、
前記値および前記値の関連付けられる状態フラグが格納される、前記メムキャッシュドシステムの第２の１または複数の位置の第２の１または複数の物理アドレスを受信することと、
受信された前記第２の１または物理複数のアドレスを用いて、前記メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、前記値および前記関連付けられる状態フラグを取得することと、
前記キーに対する第３および第４のアドレスを格納するべく、前記ローカルキャッシュをアップデートすることと、
受信された前記値を返すこととを含む、
クライアント装置。
【請求項２】
前記メムキャッシュドロジックは、更に、前記ローカルキャッシュのために前記メモリ内にストレージ空間を割り当て、または割り当てさせる、請求項１に記載のクライアント装置。
【請求項３】
ヒットをもたらす前記キーを用いるゲット要求のために、前記サービスは、更に、前記値が古くないことを示すステール判断の結果に応答して、取得された前記値を返すことを含む、請求項１または２に記載のクライアント装置。
【請求項４】
セット要求のために、前記サービスは、ヒットをもたらす前記キーに応答して、前記ヒットをもたらした前記ローカルキャッシュにおけるキャッシュエントリを無効にすることと、
前記メムキャッシュドシステムのサーバに前記セット要求を送信することとを含む、請求項１から３のいずれか１項に記載のクライアント装置。
【請求項５】
前記ヒットをもたらす前記キーを用いる前記ゲット要求のために、前記リモートダイレクトメモリアクセス動作を実行することは、失効していない前記ヒットをもたらすキャッシュエントリの第１の判断を含む、請求項１から４のいずれか１項に記載のクライアント装置。
【請求項６】
メムキャッシュドシステムのサーバ装置であって、
メモリと、
前記メモリと結合された１または複数のプロセッサと、
遠隔のメモリへの直接的アクセスをサポートするように装備されたネットワークインタフェースカードと、
前記メムキャッシュドシステムにおけるキーに対応する値をゲットする要求を受信し、
前記キーがヒットをもたらすか否かを判断し、
ヒットをもたらす前記キーに応答して、前記値および前記値に関連付けられる状態フラグが格納される、前記メムキャッシュドシステムの１または複数の位置の１または複数の物理アドレスを返す、前記１または複数のプロセッサにより操作されるメムキャッシュドロジックとを備える、サーバ装置。
【請求項７】
前記メムキャッシュドロジックは、更に、
前記メムキャッシュドシステムにおいて第２のキーを第２の対応する値にアップデートする要求を受信し、
前記第２のキーがヒットをもたらすか否かを判断し、
ヒットをもたらす前記第２のキーに応答して、前記第２のキーに対する前記ヒットをもたらす第１のアイテムに関連付けられた第２の状態フラグを古い状態にアップデートし、
前記第１のアイテムを収集リストに追加し、
前記第２のキーに対する第２のアイテムを生成し、
前記第２のアイテムに第２の値を割り当てる、請求項６に記載のサーバ装置。
【請求項８】
前記メムキャッシュドロジックは、更に、古い状態と関連付けられる複数の状態フラグを有する複数のアイテムに割り当てられたメモリを回復するメンテナンス動作を周期的に実行する、請求項６または７に記載のサーバ装置。
【請求項９】
前記メムキャッシュドロジックは、更に、前記メモリの前記複数の物理アドレスを前記メムキャッシュドシステムのアドレス空間にマッピングする、請求項６から８のいずれか１項に記載のサーバ装置。
【請求項１０】
データをキャッシュするメモリのための方法であって、
メムキャッシュドシステムのクライアントデバイスにより、前記メムキャッシュドシステムにおけるキーに対応する値をゲット、セット、またはアップデートする要求を受信する段階と、
前記クライアントデバイスにより、前記受信する段階に応答して、前記キーが前記クライアントデバイスのメモリ内に維持されるローカルキャッシュにおけるヒットをもたらすか否かを判断する段階と、
前記クライアントデバイスにより、前記キーが前記ローカルキャッシュにおいてヒットをもたらすことを、前記判断の結果が示すか否かに少なくとも部分的に基づいて、ゲット要求、セット要求、またはアップデート要求をサービス提供する段階とを備え、
（ｉ）ヒットをもたらさない前記キーを用いるセット要求のために、サービス提供する段階は、
前記メムキャッシュドシステムのサーバに、前記値を要求する前記ゲット要求を送信することと、
前記値および前記値の関連付けられる状態フラグが格納される、前記メムキャッシュドシステムの１または複数の位置の１または複数の物理アドレスを受信する段階と、
受信された前記１または複数の物理アドレスを用いて、前記メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、前記値および前記関連付けられる状態フラグを取得する段階と、
受信された前記値を返す段階とを有し、
または
（ｉｉ）ヒットをもたらす前記キーを用いるゲット要求のために、サービス提供する段階は、
前記ローカルキャッシュにアクセスして、前記値および前記値の関連付けられる状態フラグが格納される、前記メムキャッシュドシステムの１または複数の位置の１または複数のアドレスを取得する段階と、
前記ローカルキャッシュから取得された前記１または複数のアドレスを用いて、前記メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、前記値および前記関連付けられる状態フラグを取得する段階と、
前記リモートダイレクトメモリアクセス動作により取得された前記状態フラグに少なくとも部分的に基づいて、前記リモートダイレクトメモリアクセス動作により取得された前記値が古いか否かを判断する段階と、
前記値が古いことを示すステール判断の結果に応答して、前記メムキャッシュドシステムのサーバに、前記値を要求する前記ゲット要求を送信する、段階と、
前記値および前記値の関連付けられる状態フラグが格納される、前記メムキャッシュドシステムの第２の１または複数の位置の第２の１または複数の物理アドレスを受信する段階と、
受信された前記第２の１または複数の物理アドレスを用いて、前記メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、前記値および前記関連付けられる状態フラグを取得する段階と、
前記キーに対する第２またはより多くのアドレスを格納するべく、前記ローカルキャッシュをアップデートする段階と、
受信された前記値を返す段階とを有する、方法。
【請求項１１】
前記クライアントデバイスにより、前記ローカルキャッシュのために前記メモリ内にストレージ空間を割り当てる段階を更に備える、請求項１０に記載の方法。
【請求項１２】
ヒットをもたらす前記キーを用いるゲット要求のために、前記サービス提供する段階は、更に、前記値が古くないことを示すステール判断の結果に応答して、取得された前記値を返す段階を有する、請求項１０または１１に記載の方法。
【請求項１３】
セット要求のために、サービス提供する段階は、ヒットをもたらす前記キーに応答して、前記ヒットをもたらした前記ローカルキャッシュにおけるキャッシュエントリを無効にする段階と、
前記メムキャッシュドシステムのサーバに前記セット要求を送信する段階とを有する、請求項１０から１２のいずれか１項に記載の方法。
【請求項１４】
前記ヒットをもたらす前記キーを用いる前記ゲット要求のために、前記リモートダイレクトメモリアクセス動作を実行する段階は、失効していない前記ヒットをもたらすキャッシュエントリを第１に判断する段階を有する、請求項１０から１３のいずれか１項に記載の方法。
【請求項１５】
データをキャッシュするメモリのための方法であって、
メムキャッシュドシステムのサーバにより、キーに対応する値をゲットする要求を受信する段階と、
前記サーバにより前記キーがヒットをもたらすか否かを判断する段階と、
前記サーバにより、ヒットをもたらす前記キーに応答して、前記値および前記値に関連付けられる状態フラグが格納される、前記メムキャッシュドシステムの１または複数の位置の１または複数の物理アドレスを返す段階とを備える、方法。
【請求項１６】
前記サーバにより、前記メムキャッシュドシステムにおいて第２のキーを第２の対応する値にアップデートする要求を受信する段階と、
前記サーバにより、前記第２のキーがヒットをもたらすか否かを判断する段階と、
前記サーバにより、ヒットをもたらす前記第２のキーに応答して、古い状態を有する前記第２のキーに対する前記ヒットをもたらす第１のアイテムに関連付けられた第２の状態フラグをアップデートする段階と、
前記第１のアイテムを収集リストに追加する段階と、
前記第２のキーに対する第２のアイテムを生成する段階と、
前記第２のアイテムに第２の値を割り当てる段階とを更に備える、請求項１５に記載の方法。
【請求項１７】
前記サーバにより、古い状態と関連付けられる複数の状態フラグを有する複数のアイテムに割り当てられたメモリを回復するメンテナンス動作を周期的に実行する段階を更に備える、請求項１５または１６に記載の方法。
【請求項１８】
前記サーバにより、前記サーバのメモリの前記複数の物理アドレスを前記メムキャッシュドシステムのアドレス空間にマッピングする段階を更に備える、請求項１５から１７のいずれか１項に記載の方法。
【請求項１９】
実行されると、コンピュータに、請求項１０から１４のいずれか１項に記載の方法を実行させる、コンピュータプログラム。
【請求項２０】
サーバ装置による複数の命令の実行に応答して、前記サーバ装置に、請求項１５から１８のいずれか１項に記載の複数の方法を実行させる前記複数の命令を備える、少なくとも１つのストレージ媒体。
【請求項２１】
メムキャッシュドシステムのクライアント装置であって、
前記メムキャッシュドシステムにおけるキーに対応する値をゲット、セット、またはアップデートする要求を受信するための手段と、
前記受信に応答して、前記キーが前記クライアント装置のメモリ内に維持されるローカルキャッシュにおいてヒットをもたらすか否かを判断するための手段と、
前記キーが前記ローカルキャッシュにおいてヒットをもたらすことを、前記判断の結果が示すか否かに少なくとも部分的に基づいて、ゲット要求、セット要求またはアップデート要求をサービス提供するための手段とを備え、
（ｉ）ヒットをもたらさない前記キーを用いるセット要求のために、サービスは、
前記メムキャッシュドシステムのサーバに、前記値を要求する前記ゲット要求を送信することと、
前記値および前記値の関連付けられる状態フラグが格納される、前記メムキャッシュドシステムの１または複数の位置の１または複数の物理アドレスを受信することと、
受信された前記１または複数の物理アドレスを用いて、前記メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、前記値および前記関連付けられる状態フラグを取得することと、
受信された前記値を返すこととを含み、
または、
（ｉｉ）ヒットをもたらす前記キーを用いるゲット要求のために、サービスは、
前記ローカルキャッシュにアクセスして、前記値および前記値の関連付けられる状態フラグが格納される、前記メムキャッシュドシステムの１または複数の位置の１または複数のアドレスを取得することと、
前記ローカルキャッシュから取得された前記１または複数のアドレスを用いて、前記メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、前記値および前記関連付けられる状態フラグを取得することと、
前記リモートダイレクトメモリアクセス動作により取得された前記状態フラグに少なくとも部分的に基づいて、前記リモートダイレクトメモリアクセス動作により取得された前記値が古いか否かを判断することと、
前記値が古いことを示すステール判断の結果に応答して、前記メムキャッシュドシステムのサーバに、前記値を要求する前記ゲット要求を送信することと、
前記値および前記値の関連付けられる状態フラグが格納される、前記メムキャッシュドシステムの第２の１または複数の位置の第２の１または複数の物理アドレスを受信することと、
受信された前記第２の１または物理複数のアドレスを用いて、前記メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、前記値および前記関連付けられる状態フラグを取得することと、
前記キーに対する第３および第４のアドレスを格納するべく、前記ローカルキャッシュをアップデートすることと、
受信された前記値を返すこととを含む、クライアント装置。
【請求項２２】
メムキャッシュドシステムのサーバ装置であって、
キーに対応する値をゲットする要求を受信するための手段と、
前記キーがヒットをもたらすか否かを判断するための手段と、
前記値および前記値に関連付けられる状態フラグが格納される、前記メムキャッシュドシステムの１または複数の位置の１または複数の物理アドレスを返すための手段を含む、ヒットをもたらす前記キーに応答するための手段とを備える、サーバ装置。
【請求項２３】
請求項１９に記載のコンピュータプログラムを格納する、コンピュータ可読ストレージ媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ処理の分野に関する。より詳細には、本開示は、ローカルキャッシュを有するメムキャッシュドシステムに関する。
【背景技術】
【０００２】
本明細書において提供される背景技術の説明は、本開示の文脈を一般に提示することを目的とする。本明細書において別途示されない限り、本節において説明される複数の材料は、本願における特許請求の範囲に対する従来技術ではなく、本節に含まれることにより従来技術であることは認められない。
【０００３】
コンピューティングにおいて、メムキャッシュド（ｍｅｍｃａｃｈｅｄ）は、汎用の分散メモリキャッシュシステムである。多くの場合、これは、外部データソース（データベース等）が読み取られなければならない回数を減らすべく、ランダムアクセスメモリ（ＲＡＭ）内にデータおよびオブジェクトをキャッシュすることにより、動的なデータベースドリブンウェブサイトをスピードアップするように用いられる。ほとんどのシステムは、複数のクライアントおよびサーバを含むクライアントサーバアーキテクチャを用いる。複数のサーバは、キーバリュー連想配列を維持し、複数のクライアントは、この配列をポピュレートしてクエリする。複数のクライアントは、クライアント側の複数のライブラリを用いて複数のサーバにコンタクトする。各クライアントは、全てのサーバを知っており、通常、複数のサーバは、互いに通信しない。クライアントが特定のキーに対応する値を設定し、または読み取ることを希望する場合、クライアントのライブラリはまず、キーのハッシュを演算して用いるサーバを決定する。次に、クライアントのライブラリは、サーバにコンタクトする。サーバは、キーの第２のハッシュを演算して、対応する値をどこに格納し、または読み取るかを決定する。通常、複数のサーバは、値をＲＡＭに保持し、サーバがＲＡＭを使い果たすと、最も古い複数の値を破棄する。
【０００４】
大きな複数のウェブアプリケーション、例えば数百万のユーザがいるウェブアプリケーションについては、複数のページ要求をタイムリーにサービス提供するには数百のメムキャッシュドサーバが必要であり得る。ビジネスの要求を満たすには、サービスオペレータは、所望のサービスレベルアグリーメント（ＳＬＡ）を満たすべくできるだけ大きなトータルメモリサイズを提供することが必要であるのみならず、多くの場合に特に、ゲット、セット、アップデートを含む、複数のメモリアクセス要求を処理するための多くのＣＰＵ電力も必要とする。
【０００５】
ＣＰＵに限界があるので、メムキャッシュドサーバは通常、複数のメモリを実装する物理的容量を完全に利用することができない。これに代えて、複数のオペレータは、負荷を複数のメムキャッシュドサーバにわたって分散されて、予期される負荷バランス、従ってＳＬＡを実現することが必要である。これは、少なくとも２つの問題をもたらす。すなわち、１）不十分なメモリ帯域幅の使用、および２）不十分なスケーラビリティである。また、ＣＰＵが深く関わっているので、各メモリアクセスに対するオーバヘッドは高くなる。これは、各キーバリューペアアクセス毎に不十分な電力の効率性をもたらす。第３に、メムキャッシュドのアクセスパターンは通常、極めてランダムであり、これによりメムキャッシュド内に格納されたデータに対するＣＰＵのキャッシュをほぼ無用のものとするが、サイクルおよび電力の無駄となる。
【図面の簡単な説明】
【０００６】
実施形態は、以下の詳細な説明を添付の図面と併せて参照することによって、容易に理解されるであろう。この説明を容易にするべく、同一の符号は、同一の構造要素を指す。複数の実施形態は、添付の図面の複数の図において限定としてではなく例として図示される。
【図１】開示される複数の実施形態による、複数のローカルキャッシュを有するメムキャッシュドシステムを用いたコンピューティング構成を示すブロック図である。
【図２】開示される複数の実施形態による、サーバ上におけるメムキャッシュドロジックの様々な動作フローを図示するフロー図である。
【図３】開示される複数の実施形態による、サーバ上におけるメムキャッシュドロジックの様々な動作フローを図示するフロー図である。
【図４】開示される複数の実施形態による、サーバ上におけるメムキャッシュドロジックの様々な動作フローを図示するフロー図である。
【図５】開示される複数の実施形態による、クライアント上におけるメムキャッシュドロジックの様々な動作フローを図示するフロー図である。
【図６】開示される複数の実施形態による、クライアント上におけるメムキャッシュドロジックの様々な動作フローを図示するフロー図である。
【図７】開示される複数の実施形態による、クライアント上におけるメムキャッシュドロジックの様々な動作フローを図示するフロー図である。
【図８】開示される複数の実施形態による、本開示の様々な態様を実施するべく用いるのに好適な例示的コンピュータシステムを図示する。
【図９】開示される複数の実施形態による、図２〜７を参照して説明される複数の方法を実施するための複数の命令を有するストレージ媒体を図示する。
【発明を実施するための形態】
【０００７】
複数のローカルキャッシュを有するメムキャッシュドシステムに関連する複数の装置、複数の方法、およびストレージ媒体が本明細書により開示される。複数の実施形態において、メムキャッシュドシステムのクライアントデバイスは、メモリと、メモリに結合された１または複数のプロセッサとを含み得る。更に、クライアントデバイスは、メムキャッシュドシステムにおけるキーに対応する値をゲットまたはセットする要求を受信し、要求を受信したことに応答して、キーがメムキャッシュドロジックによりメモリ内に保持されるローカルキャッシュにおけるヒットをもたらしたか否かを判断し、少なくとも部分的にキーがローカルキャッシュにおけるヒットをもたらしたことを判断の結果が示すか否かに基づいて、ゲットまたはセット要求をサービス提供するように構成されたメムキャッシュドロジックを含み得る。
【０００８】
複数の実施形態において、メムキャッシュドシステムのサーバは、メモリと、１または複数のプロセッサとを含み得る。更に、メムキャッシュドシステムは、メムキャッシュドシステムにおけるキーに対応する値をゲットする要求を受信し、キーがヒットをもたらしたか否かを判断し、ヒットをもたらすキーに応答して、値および値に関連付けられた状態フラグが格納される、メムキャッシュドシステムの１または複数の位置の１または複数のアドレスを返すように構成されたメムキャッシュドロジックを更に備え得る。複数の実施形態において、メムキャッシュドロジックは、メムキャッシュドシステムにおいて第２のキーを第２の対応する値にアップデートする要求を受信し、第２のキーがヒットをもたらしたか否かを判断し、第２のキーがヒットをもたらしたことに応答して、第２のキーに対するヒットをもたらす第１のアイテムに関連する第２の状態フラグを古い状態にアップデートし、第１のアイテムを収集リストに追加し、第２のキーに対する第２のアイテムを生成し、第２のアイテムに第２の値を割り当てるように更に構成され得る。
【０００９】
以下の詳細な説明において、本明細書の一部を形成する添付の図面を参照する。同一の符号は、全体を通して同一の部分を指し、例示として、実施され得る複数の実施形態が示される。他の複数の実施形態が使用され得、本開示の範囲を逸脱することなく構造またはロジックの変更がなされ得ることを理解されたい。従って、以下の詳細な説明は、限定的な意味に解釈されるものではなく、複数の実施形態の範囲は、添付の特許請求の範囲およびその均等物により規定される。
【００１０】
本開示の複数の態様は、添付の明細書において開示される。本開示の複数の代替的な実施形態およびそれらの均等物は、本開示の趣旨または範囲から離れることなく考案され得る。以下に開示される同一の複数の要素は、図面において同一の参照番号により示されることに留意されたい。
【００１１】
同様に、様々な動作は、特許請求される主題を理解するのに最も役立つように複数の別個の作用または動作として説明され得る。
【００１２】
しかし、本明細書における順序は、これらの動作が必ずしも順序に依存するものことを含意するものと解釈されるべきではない。具体的には、これらの動作は、表示される順序で実行されなくてもよい。説明される複数の動作は、説明される複数の実施形態と異なる順序で実行され得る。様々な追加の動作が実行され得、および／または説明される複数の動作は、追加の複数の実施形態において省略されてもよい。
【００１３】
本開示の目的のために、「Ａおよび／またはＢ」という文言は、（Ａ）、（Ｂ）、または（ＡおよびＢ）を意味する。本開示の目的のために、「Ａ、Ｂ、および／またはＣ」という文言は、（Ａ）、（Ｂ）、（Ｃ）、（ＡおよびＢ）、（ＡおよびＣ）、（ＢおよびＣ）、または（Ａ、Ｂ、およびＣ）を意味する。
【００１４】
本明細書は、「一実施形態において」または「複数の実施形態において」という文言を用いることがある。これらの文言は各々、同一または異なる複数の実施形態のうちの１または複数を指し得る。更に、本開示の複数の実施形態に対して用いられる「備える」、「含む」、および「有する」等の用語は、同義語である。
【００１５】
本明細書において用いられるように、「モジュール」という用語は、説明される機能を提供する１または複数のソフトウェアもしくはファームウェアプログラム、組み合わせたロジック回路および／または他の好適なコンポーネントを実行する、特定用途向け集積回路（ＡＳＩＣ）、電子回路、プロセッサ（共有、専用、またはグループ）、および／またはメモリ（共有、専用、またはグループ）を指し、これらの一部であり、またはこれらを含み得る。
【００１６】
ここで図１を参照すると、開示される複数の実施形態による、複数のローカルキャッシュを有するメムキャッシュドシステムを用いたコンピューティング構成を示すブロック図が図示される。示されるように、メムキャッシュドシステムを用いるコンピューティング構成１００は、ネットワーク１０４を介して互いに結合されるいくつかのクライアントデバイス１０２ａ〜１０２ｃ、およびいくつかのサーバ１０６ａ〜１０６ｂを含み得る。各クライアントデバイス１０２ａ、１０２ｂ、または１０２ｃは、対応するプロセッサおよびメモリ１１２ａ、１１２ｂ、または１１２ｃ、クライアント側のメムキャッシュドロジック１１４ａ、１１４ｂ、または１１４ｃ、ローカルキャッシュ１１６ａ、１１６ｂ、または１１６ｃ、ならびにネットワークインタフェースカード（ＮＩＣ）１１８ａ、１１８ｂ、または１１８ｃを含み得る。これに対し、各サーバ１０６ａまたは１０６ｂは、対応するプロセッサおよびメモリ１２２ａまたは１２２ｂ、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂ、ならびにリモートダイレクトメモリアクセス（ＲＤＭＡ）ＮＩＣ１２６ａまたは１２６ｂを含み得る。クライアント側のメムキャッシュドロジック１１４ａ、１１４ｂおよび１１４ｃ、ならびにサーバ側のメムキャッシュドロジック１２４ａおよび１２４ｂは共に、ローカルキャッシュ１１６ａ、１１６ｂ、および１１６ｃを用いてメムキャッシュドシステムを実装し、既存の複数のメムキャッシュドシステムに対する潜在的利点を提供する。ローカルキャッシュ１１６ａ、１１６ｂおよび１１６ｃの使用およびメンテナンス、ならびにＮＩＣ１１８ａ〜１１８ｃおよびＲＤＭＡ  ＮＩＣ１２６ａ〜１２６ｂの使用を含む、クライアント側のメムキャッシュドロジック１１４ａ、１１４ｂ、および１１４ｃ、ならびにサーバ側のメムキャッシュドロジック１２４ａ、および１２４ｂの複数の動作フローは、以下により詳細に説明される。
【００１７】
クライアント側のメムキャッシュドロジック１１４ａ、１１４ｂ、または１１４ｃ、およびローカルキャッシュ１１６ａ、１１６ｂ、または１１６ｃのインスタンス化を除き、クライアントデバイス１０２ａ、１０２ｂ、または１０２ｃは、カリフォルニア州クパチーノのアップルコンピュータ、カリフォルニア州パロアルトのヒューレットパッカード等から入手可能なスマートフォン、コンピューティングタブレット、ウルトラブック、ラップトップ、デスクトップコンピュータ、またはサーバを含むがこれらに限定されない、当技術分野で既知の広範なコンピューティングデバイスを表すことを意図する。従って、プロセッサおよびメモリ１１２ａ〜１１２ｃ、ならびにＮＩＣ１１８ａ〜１１８ｃは、当技術分野で既知のいくつかのこれらの要素のうちのいずれか１つであり得る。
【００１８】
同様に、サーバのメムキャッシュドロジック１２４ａまたは１２４ｂを除き、サーバ１０６ａまたは１０６ｂは、テキサス州オースティンのデルコンピュータ、ニューヨーク州アーモンクのＩＢＭ等から入手可能な複数のサーバを含むがこれらに限定されない、当技術分野で既知の広範なコンピューティングデバイスを表すことを意図する。理解を容易にするべく、コンピューティング構成１００は、３つのクライアントデバイス１０２ａ、１０２ｂ、および１０２ｃ、ならびに２つのサーバ１０６ａおよび１０６ｂを用いて図示および説明されるが、本開示はそのように限定されるものではない。実施形態において、コンピューティング構成１００は、任意の数のクライアントデバイスおよび任意の数のサーバを含み得る。従って、プロセッサおよびメモリ１２２ａ〜１２２ｃ、ならびにＲＤＭＡ  ＮＩＣ１２６ａ〜１２６ｂは、当技術分野で既知のいくつかのこれらの要素のうちのいずれか１つであり得る。
【００１９】
ネットワーク１０４は、当技術分野で既知の１または複数の有線および／または無線、ローカルおよび／またはワイドエリア、パブリックおよび／またはプライベートのネットワークを含み得る。複数のネットワークの各々は、１または複数のルータ、スイッチ、ゲートウェイ、および／または他の複数のネットワークデバイスを含み得る。
【００２０】
ここで図２〜４を参照すると、開示される複数の実施形態による、サーバ上におけるメムキャッシュドロジックの様々な動作フローを図示する３つのフロー図が示される。図示されるように、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂの複数の動作フローは、様々な要求をサービス提供する処理２００および３００、ならびにサーバを保守する処理４００を含み得る。動作フローは、ブロック２０２で開始し得、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、メムキャッシュドシステムの典型的なサーバ初期化処理を受け得る。しかし、本開示の下では、既存のメムキャッシュドシステムと異なり、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、初期化処理中にそのメモリ１２２ａまたは１２２ｂの複数の物理アドレスをメムキャッシュドシステムのアドレス空間へとマッピングし得る。複数の仮想アドレスではなく、物理アドレスをマッピングする潜在的な利点は、後述される。
【００２１】
次にブロック２０４において、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、クライアント１０２ａ、１０２ｂまたは１０２ｃから要求を受信してそのサービスを開始し得る。ブロック２０６において、要求を受信すると、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂはまず、受信された要求がメムキャッシュドシステムにおけるキーに対応する値をゲットするゲット要求であるか否かを判断し得る。ゲット要求である場合、動作フローは、ブロック２０８へと続き得、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、キーがヒットをもたらすか否かを判断し得る。キーがヒットをもたらさないことを判断の結果が示す場合、動作フローは、ブロック２１０へと続き得、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、例えば、キーに対する要求された値が見つからないことを示すメッセージを用いて応答し得る。その後、動作フローは、先述のようにブロック２０４に戻って継続し得る。
【００２２】
しかし、ブロック２０８において、キーがヒットをもたらしたことを判断の結果が示す場合、動作フローは、ブロック２１２へと続き得る。サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、（要求された値を返す代わりに）キーの対応する値、および関連する、値が古いか否かを示す関連付けられる状態フラグが格納される、要求元クライアント１０２ａ、１０２ｂ、または１０２ｃにメムキャッシュドシステムの１または複数の位置における１または複数のアドレスを返し得る。クライアントデバイス１０２ａ、１０２ｂ、または１０２ｃが１または複数のアドレスを受信した後に続く事柄は、クライアントデバイス１０２ａ、１０２ｂ、または１０２ｃの複数の動作フローが、図５〜７を参照して説明されるときに後述される。複数の実施形態において、対応する値の位置のアドレス、および関連付けられる状態フラグに対するアドレスが返される。他の複数の実施形態において、対応する値および関連付けられる状態フラグが一緒に位置付けられる位置に対する１つのアドレスが返される。
【００２３】
ブロック２０６に戻って、要求がゲット要求でないことを判断の結果が示す場合、動作フローは、図３へと続き、ブロック３０２で開始し得る。ブロック３０２において、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、要求がセット要求であるか否かを判断し得る。要求がセット要求でもアップデート要求でもないことを判断の結果が示す場合、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、既存の複数のメムキャッシュドシステムにおけるように要求を処理してサービス提供し得る。その後、動作フローは、先述のように図２のブロック２０４に戻って継続し得る。
【００２４】
他方、ブロック３０２における判断の結果がセットまたはアップデート要求であることを示す場合、動作フローは、ブロック３０６へと続き得る。ブロック３０６において、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、セットまたはアップデート要求のキーに対して対応する古い値が存在するか否かを判断し得る。判断の結果がブロック３０６において、セットまたはアップデート要求のキーに対して対応する古い値が存在しないことを示す場合、動作フローは、ブロック３０８へと続き得る。サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、キーに対してメムキャッシュドシステムにおける新しいアイテムを割り当て、そのアイテムにセットまたはアップデート要求により提供される値を割り当て得るべく進み得る。次に、ブロック３１０において、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、例えば、セットまたはアップデート要求が首尾よく完了したことを示すメッセージを用いて要求に応答し得る。動作フローは、先述のようにブロック３１０から図２のブロック２０４へと続き得る。
【００２５】
ブロック３０６に戻って、セットまたはアップデート要求のキーに対して、対応する古い値が存在することをブロック３０６における判断の結果が示す場合、動作フローは、ブロック３１２へと続き得る。サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、対応する古い値を古いものとして反映するべく、キーに関連付けられた状態フラグをアップデートし得る。更に、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、アイテムに対して割り当てられたメモリが次に回復されることを可能にするべく、キーおよび対応する古い値を有するアイテムを再収集リストに追加し得る。複数の実施形態において、再収集リストは、ファーストインファーストアウトリストであってもよい。ブロック３１２から、動作フローは、先述のようにブロック３０８に続き得る。
【００２６】
ゲット、セットまたはアップデート要求をサービス提供する上記の動作フローに加えて、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、「古い」とマークを付けられた値を有する複数のアイテムに割り当てられたメモリを回復するメンテナンス処理４００（クリーンアップ処理とも称される）も周期的に実行し得る。処理４００は、ブロック４０２で開始し得、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、メンテナンス処理を実行する時点を待つ。処理４００は、メンテナンス処理４００を実行する時点になるまでブロック４０２において連続的にループし得る。そのようなときに、処理４００は、ブロック４０４で継続し得る。ブロック４０４において、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、任意のアイテムが再収集リストに追加されたか否かを判断し得る。再収集リストが空であることを判断の結果が示し、最後のメンテナンス以来、古いとマークを付けられた値を有するアイテムがないことを意味する場合、処理４００は、スリープ状態になり得る。すなわち、ブロック４０２に戻り、メンテナンスが実行される次の時点を待つことになる。
【００２７】
他方、ブロック４０４において、再収集リストが空ではないと判断され、古い複数の値を有する１または複数のアイテムが追加されたことを意味する場合、処理４００は、ブロック４０６へと続き得る。ブロック４０６において、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、再収集リストにおける次のアイテムを調査して、次のアイテムが失効したか否かを判断し得る。失効は、例えば、再収集リストに置かれたときからの経過時間量に基づいて判断され得る。再収集リストがファーストインファーストアウトリストである例示の実施形態において、次のアイテムが失効していない場合、処理４００はやはりスリープ状態になり得る。すなわち、先述のようにブロック４０２に戻り、メンテナンスが実行される次の時点を待つ。これに代えて、再収集リストがファーストインファーストアウトリストでない代替的な複数の実施形態においては、処理４００は、先述のようにブロック４０４に戻り、そこから継続し得る。
【００２８】
他方、ブロック４０６において調査されたアイテムが失効したことが判断された場合、次にブロック４０８において、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、失効したアイテムに割り当てられたメモリを解放して再利用のためにメモリプールに戻し得る。その後、処理４００は、ブロック４０４に戻り、先述のように継続し得る。ブロック４０４〜４０８における複数の動作は、再収集リストにおける失効したアイテムがなくなるまで反復し得る。再収集リストにおいて失効した全てのアイテムを処理すると、処理４００は、先述のようにブロック４０２に戻り、そこから継続し得る。
【００２９】
ここで図５〜７を参照すると、開示される複数の実施形態による、クライアント上におけるメムキャッシュドロジックの様々な動作フローを図示する３つのフロー図が示される。図示されるように、クライアント側のメムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃの複数の動作フローは、初期化処理５００、ゲット要求をサービス提供する処理６００、およびセット要求をサービス提供する処理７００を含み得る。
【００３０】
初期化処理５００は、図５のブロック５０２で開始し得、クライアント側のメムキャッシュドロジック１１４ａ、１１４ｂ、または１１４ｃは、既存の複数のメムキャッシュドシステムにおけるようにスタートアップすると初期化され得る。しかし、開示される実施形態では、次にブロック５０４において、クライアント側のメムキャッシュドロジック１１４ａ、１１４ｂ、または１１４ｃは、ローカルキャッシュ１１６ａ、１１６ｂまたは１１６ｃとして用いられるべきローカルメモリのブロックを割り当て得る。
【００３１】
ゲット要求をサービス提供する処理６００は、ブロック６０２で開始し得、クライアント側のメムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、ゲット要求のキーをローカルキャッシュ１１６ａ、１１６ｂまたは１１６ｃに位置付けることを試み得る。キーがキャッシュヒット（または単に、ヒット）をもたらさなかった場合、ブロック６０６においてクライアント側のメムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、既存の複数のメムキャッシュドシステムにおけるように、メムキャッシュドシステムのサーバにゲット要求を送信し得る。先述のように、既存の複数のメムキャッシュドシステムとは異なり、クライアント側のメムキャッシュドロジック１１４ａ、１１４ｂ、または１１４ｃはこれに応答して、ブロック６０８においてキーの対応する値および関連する「古い」状態フラグが格納される、メムキャッシュドシステムの１または複数の位置の１または複数のアドレスを受信し得る。次に、クライアント側のメムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、キーの対応する値および関連付けられた「古い」状態フラグが格納される、メムキャッシュドシステムの１または複数の位置の返された１または複数のアドレスをキャッシュする。次に、ブロック６１０において、クライアント側のメムキャッシュドロジック１１４ａ、１１４ｂ、または１１４ｃは、返された値のアドレスを用いてＲＤＭＡ動作を実行し、キーの対応する値を取得し得る。その後、クライアント側のメムキャッシュドロジック１１４ａ、１１４ｂ、または１１４ｃは、取得された値をゲット要求の要求元に返し得る。ブロック６１０において、処理６００は終了し得る。
【００３２】
ＲＤＭＡ動作の性質により、サーバ側のメムキャッシュドロジック１２４ａまたは１２４ｂは、クライアント１０２ａ、１０２ｂまたは１０２ｃが値を取得する場合にＲＤＭＡ動作を認識せず、従ってサーバ１０６ａまたは１０６ｂの複数のプロセッサは、複数のキーに対応する値の実際の取得をサービス提供することには関係しないことに留意されたい。換言すれば、本開示の下では、サーバ１０６ａまたは１０６ｂの複数のプロセッサは、サーバ１０６ａまたは１０６ｂのメモリ容量を制約するボトルネックではもはやなくなる。従って、本開示の下では、既存の複数のメムキャッシュドシステムと比較して、はるかに大きなメモリ容量が各サーバ１０６ａまたは１０６ｂにおいて構成され得ることが期待される。同様に、既存の複数のメムキャッシュドシステムと比較して、より少ないサーバ１０６ａまたは１０６ｂがアプリケーションに必要とされることがあり、本開示は、特にＲＤＭＡにおいて（仮想アドレスの代わりに）複数の物理アドレスを直接に用いることと結び付けられると、より効率的でスケーラブルなものとなり得る。更に、プロセッサの使用量が顕著に低いので、既存の複数のメムキャッシュドシステムと比較して、サーバ１０６ａおよび１０６ｂは、はるかに少ない電力を消費し、よりエネルギー効率がよくなり得る。
【００３３】
他方、更に図６を参照すると、ブロック６０４における判断の結果がヒットをもたらすキーを示す場合、処理６００はブロック６１２に進み得る。ブロック６１２において、メムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、ヒットをもたらすキャッシュエントリが失効したか否かを判断し得る。ヒットをもたらすキャッシュエントリが失効していなかった場合、メムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、キャッシュヒットをもたらすキャッシュエントリに格納された値の１または複数のアドレスおよび関連付けられる状態フラグを用いてＲＤＭＡ動作を実行し、キーの対応する値および関連付けられる状態フラグを取得し得る。キャッシュエントリの失効は、例えば現在のシステム時間を、１または複数のアドレスがメムキャッシュドサーバから取得された時間と比較することにより判断され得る。時間差が設定値より大きい場合、キャッシュエントリは、失効したものと判断され得る。次にブロック６１４〜６１６において、メムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、状態フラグをチェックして、取得された値が古いか否かを判断し得る。ブロック６１６において、取得された値が古くないと判断された場合、ブロック６１８において、メムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、ゲット要求の要求元に取得された値を返し得る。ブロック６１８において、処理６００は終了し得る。
【００３４】
しかし、ブロック６１２において、ヒットをもたらすキャッシュエントリが失効したと判断され、またはブロック６１６において取得された値が古いと判断された場合、処理６００は、ブロック６２０へと続き得る。ブロック６２０において、メムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、既存の複数のメムキャッシュドシステムにおけるように、メムキャッシュドシステムのサーバにゲット要求を送信し得る。先述のように、既存の複数のメムキャッシュドシステムと異なり、ブロック６２０において、メムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、応答として、キーの対応する値および関連付けられる状態フラグが格納される、メムキャッシュドシステムの１または複数の位置の１または複数のアドレスを受信し得る。先述のように、類似の受信については、メムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、ローカルキャッシュ１１６ａ、１１６ｂまたは１１６ｃをアップデートし、返された１または複数のアドレスを、ローカルキャッシュ１１６ａ、１１６ｂまたは１１６ｃにおける新しいキャッシュエントリに格納し、キャッシュヒットをもたらす従来のキャッシュエントリを無効にし得る。これに代えて、代替的な複数の実施形態では、メムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、キャッシュヒットをもたらす従来のキャッシュエントリをアップデートし得る。次に、ブロック６２２において、メムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、返された値のアドレスを用いてＲＤＭＡ動作を実行し、先に検討されたように値を取得し、ゲット要求の要求元に取得された値を返し得る。ブロック６２２において、処理６００は終了し得る。
【００３５】
同様に、セット要求をサービス提供する処理７００は、ブロック７０２で開始し得、メムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、ローカルキャッシュ１１６ａ、１１６ｂまたは１１６ｃ内にセット要求のキーを位置付けることを試み得る。キーがキャッシュヒット（または単に、ヒット）をもたらし、失効していない場合、ブロック７０６において、メムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、キャッシュヒットをもたらすキャッシュエントリを無効にして、次にブロック７０８に進み、そうでなければ処理７００は、ブロック７０８に直に進み得る。ブロック７０８において、メムキャッシュドロジック１１４ａ、１１４ｂまたは１１４ｃは、既存の複数のメムキャッシュドシステムにおけるようにセット要求を処理してサービス提供し得る。ブロック７０８において、処理７００は終了し得る。
【００３６】
図８は、本開示の選択された複数の態様を実施するクライアントデバイスまたはサーバとして用いるのに好適であり得る例示的コンピュータシステムを図示する。示されるように、コンピュータ９００は、１または複数のプロセッサまたはプロセッサコア９０２と、システムメモリ９０４とを含み得る。本願の目的のために、特許請求の範囲を含めて、「プロセッサ」および「プロセッサコア」という用語は、文脈において別途明示的に要求しない限り、同義語とみなされ得る。更に、コンピュータ９００は、複数の大容量ストレージデバイス９０６（ディスケット、ハードドライブ、コンパクトディスクリードオンリメモリ（ＣＤ‐ＲＯＭ）等）、複数の入力／出力デバイス９０８（ディスプレイ、キーボード、カーソル制御器等）、および複数の通信インターフェース９１０（ネットワークインタフェースカード、モデム等）を含み得る。これらの要素は、１または複数のバスを表し得るシステムバス９１２を介して互いに結合され得る。複数のバスの場合、要素は、１または複数のバスブリッジ（図示せず）によりブリッジ接続され得る。これらの要素の各々は、当技術分野において既知の従来の諸機能を実行し得る。
【００３７】
具体的には、システムメモリ９０４および大容量ストレージデバイス９０６は、先述された、集合的には演算ロジック９２２と称される、クライアントまたはサーバ側のメムキャッシュドロジック１１４ａ、１１４ｂ、１１４ｃ、１２４ａまたは１２４ｂを実装する複数のプログラミング命令の作業コピーおよび永久コピーを格納するべく使用され得る。様々な要素は、プロセッサ９０２によりサポートされる複数のアセンブラ命令、またはそのような複数の命令にコンパイルされ得る、例えば、Ｃ言語のような複数の高水準言語により実装され得る。
【００３８】
これらの要素９１０〜９１２の数、機能および／または容量は、コンピュータ９００がクライアントデバイスまたはサーバとして用いられるか否かに応じて異なり得る。具体的には、クライアントデバイスとして用いる場合、これらの要素９１０〜９１２の機能および／または容量は、クライアントデバイスが、スマートフォン、コンピューティングタブレット、ウルトラブック、またはラップトップのような静止デバイスか、またはモバイルデバイスか否かに応じて異なり得る。そうでなければ、要素９１０〜９１２の複数の構成は既知であり、従って更に説明されない。
【００３９】
当業者には理解されるように、本開示は、複数の方法またはコンピュータプログラム製品として実施され得る。従って、本開示は、先述のようにハードウェアで実施されることに加えて、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、または、全て、一般には「回路」、「モジュール」、または「システム」と称され得るソフトウェアおよびハードウェアの複数の態様を組み合わせる実施形態の形を取り得る。更に、本開示は、媒体内で実施されるコンピュータで使用可能なプログラムコードを有する表現の任意の有形または非一時的媒体内で実施されるコンピュータプログラム製品の形を取り得る。図９は、装置による複数の命令の実行に応答して、装置に本開示において選択される複数の態様を実施させる複数の命令を格納するべく用いるのに好適であり得る例示的なコンピュータ可読な非一時的ストレージ媒体を図示する。示されるように、非一時的コンピュータ可読ストレージ媒体１００２は、いくつかのプログラミング命令１００４を含み得る。プログラミング命令１００４は、デバイス、例えばコンピュータ９００が複数のプログラミング命令の実行に応答して、例えば、クライアントまたはサーバ側のメムキャッシュドロジック１１４ａ、１１４ｂ、１１４ｃ、１２４ａまたは１２４ｂに関連付けられた様々な動作を実行することを可能にするように構成され得る。これに代えて、代替的な複数の実施形態では、プログラミング命令１００４は、複数のコンピュータ可読な非一時的ストレージ媒体１００２上に配置され得る。代替的な複数の実施形態では、プログラミング命令９０４は、信号等、コンピュータ可読な一時的ストレージ媒体１００２上に配置され得る。
【００４０】
使用可能な１または複数のコンピュータまたはコンピュータ可読媒体の任意の組み合わせが使用され得る。コンピュータで使用可能な媒体またはコンピュータ可読媒体は、例えば、電子、磁気、光、電磁、赤外線、もしくは半導体のシステム、装置、デバイス、または伝搬媒体であり得るが、これらに限定されない。コンピュータ可読媒体のより具体的な複数の例（非包括的な一覧）は、１または複数のワイヤを有する電気接続、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭまたはフラッシュメモリ）、光ファイバー、ポータブルコンパクトディスクリードオンリメモリ（ＣＤ‐ＲＯＭ）、光ストレージデバイス、インターネットまたはイントラネットをサポートするもの等の送信媒体、または磁気ストレージデバイスを含むであろう。コンピュータで使用可能な媒体またはコンピュータ可読媒体は、更には、プログラムが印刷される紙または別の好適な媒体であり得ることに留意されたい。プログラムは、例えば、紙または他の媒体の光スキャンにより電子的に取り込まれ、次に、必要に応じて好適にコンパイルされ、変換され、またはそうでなければ処理され、次にコンピュータメモリに格納され得る。本文書の文脈においては、コンピュータで使用可能な媒体またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスにより、またはこれに関連して用いるプログラムを含み、格納し、通信し、伝搬し、または運び得る任意の媒体であり得る。コンピュータで使用可能な媒体は、コンピュータで使用可能なプログラムコードがベースバンドで、または搬送波の一部として実施される伝搬データ信号を含み得る。コンピュータで使用可能なプログラムコードは、無線、電線、光ファイバーケーブル、ＲＦ等を含むがこれらに限定されない任意の適切な媒体を用いて送信され得る。
【００４１】
本開示の複数の動作を実行するためのコンピュータプログラムコードは、Ｊａｖａ（登録商標）、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋等のようなオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または類似のプログラミング言語のような従来の手続き型プログラミング言語を含む、１または複数のプログラミング言語の任意の組み合わせで書かれてもよい。プログラムコードは、ユーザのコンピュータに対して完全に、スタンドアロンのソフトウェアパッケージとしてユーザのコンピュータに対して部分的にユーザのコンピュータに対して部分的に、かつリモートコンピュータに対して部分的に、またはリモートコンピュータもしくはサーバに対して完全に実行され得る。後者のシナリオにおいて、リモートコンピュータは、ローカルエリアネットワーク（ＬＡＮ）もしくはワイドエリアネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または接続は、外部コンピュータ（例えば、インターネットサービスプロバイダを用いるインターネットを介して）行われてもよい。
【００４２】
本開示は、本開示の複数の実施形態による複数の方法、装置（システム）、およびコンピュータプログラム製品の複数のフロー図および／またはブロック図を参照して説明される。複数のフロー図および／またはブロック図の各ブロック、および複数のフロー図および／またはブロック図における複数のブロックの組み合わせは、複数のコンピュータプログラム命令により実装され得ることが理解されよう。これらのコンピュータプログラム命令は、コンピュータまたは他のプログラミング可能なデータ処理装置のプロセッサにより実行される複数の命令が、フロー図および／またはブロック図のブロックまたは複数のブロックにおいて指定される機能／動作を実装するための手段を生成するように、汎用コンピュータ、専用コンピュータ、またはマシンを製造するための他のプログミング可能なデータ処理装置のプロセッサに提供され得る。
【００４３】
コンピュータまたは他のプログラミング可能なデータ処理装置に特定の態様で機能するように指示し得るこれらのコンピュータプログラム命令は、コンピュータ可読媒体にも格納され得、従ってコンピュータ可読媒体に格納される複数の命令は、フロー図および／またはブロック図のブロックもしくは複数のブロックにおいて指定された機能／動作を実装する命令手段を含む製造物品を製造する。
【００４４】
また、一連の動作の段階がコンピュータまたは他のプログラミング可能な装置上で実行されるようにさせて、コンピュータ実装された処理を生成するべく、コンピュータプログラム命令は、コンピュータまたは他のプログラミング可能な装置上で実行される複数の命令がフロー図および／またはブロック図のブロックもしくは複数のブロックにおいて指定される複数の機能／動作を実装するための複数の処理を提供するように、コンピュータまたは他のプログラミング可能なデータ処理装置にロードされ得る。
【００４５】
複数の図面におけるフロー図および複数のブロック図は、本開示の様々な実施形態による複数のシステム、方法、およびコンピュータプログラム製品の可能な複数の実装のアーキテクチャ、機能、および動作を図示する。この点において、フロー図または複数のブロック図における各ブロックは、モジュール、セグメント、またはコードの一部を表し得、これらは、指定されるロジック機能を実装するための１または複数の実行可能な命令を備える。また、いくつかの代替的実装において、ブロックにおいて記された複数の機能は、複数の図面において記されたものとは異なる順序で行われ得ることにも留意されたい。例えば、連続して示される２つのブロックは、実際には実質的に同時に実行されてもよく、またはこれらのブロックは、関係する機能に応じて逆の順序で実行される場合もあり得る。複数のブロック図および／またはフロー図の各ブロック、および複数のブロック図および／またはフロー図における複数のブロックの組み合わせは、指定される複数の機能もしくは動作、または専用ハードウェアおよび複数のコンピュータ命令の組み合わせを実行する専用ハードウェアベースの複数のシステムにより実装され得ることに留意されたい。
【００４６】
本明細書において用いられる用語は、特定の実施形態のみを説明する目的のためのものであり、本開示の限定を意図しない。本明細書において用いられるように、単数形の「１つの（ａ、ａｎ、およびｔｈｅ）」は、文脈において別途明示的に示されない限り、複数形も含むことを意図する。「備える（ｃｏｍｐｒｉｓｅ）および／または「備えている（ｃｏｍｐｒｉｓｉｎｇ）という用語は、本明細書において用いられる場合、述べられる複数の機能、整数、段階、動作、要素、および／またはコンポーネントの存在を指定するが、１または複数の他の機能、整数、段階、動作、要素、コンポーネント、および／またはそれらのグループの存在または追加を除外するものではないことが更に理解されよう。
【００４７】
複数の実施形態は、コンピュータ処理、コンピューティングシステム、またはコンピュータ可読媒体のコンピュータプログラム製品のような製造物品として実装され得る。コンピュータプログラム製品は、コンピュータシステムにより読み取り可能であり、コンピュータ処理を実行するための複数のコンピュータプログラム命令をエンコードするコンピュータストレージ媒体であってもよい。
【００４８】
以下の特許請求の範囲における全てのミーンズまたはステッププラスファンクションの要素の対応する複数の構造、材料、動作、および均等物は、具体的にクレームされる、クレームされた他の複数の要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことを意図する。本開示の説明は、図示および説明の目的で提示されているが、開示される形態において包括的であること、または本開示を限定することを意図しない。多くの修正形態および改変形態は、本開示の範囲および趣旨を逸脱することなく、当業者には明らかであろう。実施形態は、本開示および実際の用途の原理を最も良く説明し、当技術分野の他の当業者が、企図される特定の使用に好適な様々な変更形態を用いる複数の実施形態についての本開示を理解することを可能にするべく選択され、説明された。
【００４９】
図９を再び参照すると、一実施形態については、複数のプロセッサ９０２のうちの少なくとも１つが、（メモリ９０４およびストレージ９０６上に格納することに代えて）演算ロジック９２２を有するメモリと共にパッケージ化され得る。一実施形態では、複数のプロセッサ９０２のうちの少なくとも１つは、演算ロジック９２２を有するメモリと共にパッケージ化されて、システムインパッケージ（ＳｉＰ）を形成し得る。一実施形態では、複数のプロセッサ９０２のうちの少なくとも１つは、演算ロジック９２２を有するメモリと共に同一のダイ上に集積され得る。一実施形態では、複数のプロセッサ８０２の少なくとも１つは、演算ロジック９２２を有するメモリと共にパッケージ化されて、システムオンチップ（ＳｏＣ）を形成し得る。少なくとも一実施形態では、ＳｏＣは、例えばスマートフォンまたはコンピューティングタブレットにおいて使用され得るが、これらに限定されるものではない。
【００５０】
従って、以下の例を含む本開示の様々な例示的な実施形態が説明されているが、これらに限定されるものではない。
【００５１】
例１は、メモリと、メモリに結合された１または複数のプロセッサとを含むメムキャッシュドシステムのクライアント装置であり得る。クライアント装置は、メムキャッシュドシステムにおけるキーに対応する値をゲット、セットまたはアップデートする要求を受信し、要求の受信に応答して、キーがメムキャッシュドロジックによりメモリ内に維持されるローカルキャッシュにおけるヒットをもたらすか否かを判断し、キーがローカルキャッシュにおいてヒットをもたらすことを、判断の結果が示すことに少なくとも部分的に基づいて、ゲット、セットまたはアップデート要求をサービス提供する、１または複数のプロセッサにより操作されるメムキャッシュドロジックを更に備え得る。
【００５２】
例２は、例１であり得、メムキャッシュドロジックは、更に、ローカルキャッシュのためにメモリ内にストレージ空間を割り当て、または割り当てさせる。
【００５３】
例３は、例１または２であり得、ヒットをもたらすキーを用いるゲット要求のために、サービスは、ローカルキャッシュにアクセスして、値および値の関連付けられる状態フラグが格納される、メムキャッシュドシステムの１または複数の位置の１または複数のアドレスを取得することと、ローカルキャッシュから取得された１または複数のアドレスを用いて、メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、値および関連付けられる状態フラグを取得することと、リモートダイレクトメモリアクセス動作により取得された状態フラグに少なくとも部分的に基づいて、リモートダイレクトメモリアクセス動作により取得された値が古いか否かを判断することとを含む。
【００５４】
例４は、例３であり得、ヒットをもたらす前記キーを用いるゲット要求のために、サービスが、更に、前記値が古くないことを示すステール判断の結果に応答して、取得された値を返すことを含む。
【００５５】
例５は、例３であり得、ヒットをもたらすキーを用いるゲット要求のために、サービスは、更に、値が古いことを示すステール判断の結果に応答して、メムキャッシュドシステムのサーバに、値を要求するゲット要求を送信することと、値および値の関連付けられる状態フラグが格納される、メムキャッシュドシステムの第２の１または複数の位置の第２の１または複数のアドレスを受信することと、受信された第２の１または複数のアドレスを用いて、メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、値および関連付けられる状態フラグを取得することと、キーに対する第３および第４のアドレスを格納するべく、ローカルキャッシュをアップデートすることと、受信された値を返すこととを含む。
【００５６】
例６は、例１〜５のいずれか１つであり得、ヒットをもたらさないキーを用いるセット要求のために、サービスは、メムキャッシュドシステムのサーバに、値を要求するゲット要求を送信することと、値および値の関連付けられる状態フラグが格納される、メムキャッシュドシステムの１または複数の位置の１または複数のアドレスを受信することと、受信された１または複数のアドレスを用いて、メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、値および関連付けられる状態フラグを取得することと、受信された値を返すこととを含む。
【００５７】
例７は、例１〜６のいずれか１つであり得、セット要求のために、サービスは、ヒットをもたらすキーに応答して、ヒットをもたらしたローカルキャッシュにおけるキャッシュエントリを無効にすることと、メムキャッシュドシステムのサーバにセット要求を送信することとを含む。
【００５８】
例８は、例３であり得、リモートダイレクトメモリアクセスを実行することは、失効していないヒットをもたらすキャッシュエントリの第１の判断を含む。
【００５９】
例９は、メモリと、メモリと結合された１または複数のプロセッサと、遠隔のメモリへの直接的アクセスをサポートするように装備されたネットワークインタフェースカードとを備える、メムキャッシュドシステムのサーバ装置であり得る。サーバ装置は、メムキャッシュドシステムにおけるキーに対応する値をゲットする要求を受信し、キーがヒットをもたらしたか否かを判断し、ヒットをもたらすキーに応答して、値および値に関連付けられた状態フラグが格納される、メムキャッシュドシステムの１または複数の位置の１または複数のアドレスを返す１または複数のプロセッサにより操作されるメムキャッシュドロジックを更に備え得る。
【００６０】
例１０は、例９であり得、メムキャッシュドロジックは、更に、メムキャッシュドシステムにおいて第２のキーを第２の対応する値にアップデートする要求を受信し、第２のキーがヒットをもたらすか否かを判断し、ヒットをもたらす第２のキーに応答して、第２のキーに対するヒットをもたらす第１のアイテムに関連付けられた第２の状態フラグを古い状態にアップデートし、第１のアイテムを収集リストに追加し、第２のキーに対する第２のアイテムを生成し、第２のアイテムに第２の値を割り当てる。
【００６１】
例１１は、例９または１０であり得、メムキャッシュドロジックは、更に、古い状態と関連付けられる複数の状態フラグを有する複数のアイテムに割り当てられたメモリを回復するメンテナンス動作を周期的に実行する。
【００６２】
例１２は、例９〜１１のいずれか１つであり得、メムキャッシュドロジックは、更に、メモリの複数の物理アドレスをメムキャッシュドシステムのアドレス空間にマッピングする。
【００６３】
例１３は、メムキャッシュドシステムのクライアントデバイスにより、メムキャッシュドシステムにおけるキーに対応する値をゲット、セット、またはアップデートする要求を受信する段階と、クライアントデバイスにより、要求の受信に応答して、キーがクライアントデバイスのメモリ内に維持されるローカルキャッシュにおけるヒットをもたらすか否かを判断する段階と、クライアントデバイスにより、キーがローカルキャッシュにおいてヒットをもたらすことを、判断の結果が示すか否かに少なくとも部分的に基づいて、ゲット、セットまたはアップデート要求をサービス提供する段階とを備える、データをキャッシュするメモリのための方法であり得る。
【００６４】
例１４は、例１３であり得、クライアントデバイスにより、ローカルキャッシュのためにメモリ内にストレージ空間を割り当てる段階を更に備える。
【００６５】
例１５は、例１３または１４であり得、ヒットをもたらすキーを用いるゲット要求のために、サービス提供する段階は、ローカルキャッシュにアクセスして、値および値の関連付けられる状態フラグが格納される、メムキャッシュドシステムの１または複数の位置の１または複数のアドレスを取得する段階と、ローカルキャッシュから取得された１または複数のアドレスを用いて、メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、値および関連付けられる状態フラグを取得する段階と、リモートダイレクトメモリアクセス動作により取得された状態フラグに少なくとも部分的に基づいて、リモートダイレクトメモリアクセス動作により取得された値が古いか否かを判断する段階とを有する。
【００６６】
例１６は、例１５であり得、ヒットをもたらすキーを用いるゲット要求のために、サービス提供する段階は、更に、値が古くないことを示すステール判断の結果に応答して、取得された値を返す段階を有する。
【００６７】
例１７は、例１５または１６であり得、ヒットをもたらすキーを用いるゲット要求のために、サービス提供する段階は、更に、値が古いことを示すステール判断の結果に応答して、メムキャッシュドシステムのサーバに、値を要求するゲット要求を送信する段階と、値および値の関連付けられる状態フラグが格納される、メムキャッシュドシステムの第２の１または複数の位置の第２の１または複数のアドレスを受信する段階と、受信された第２の１または複数のアドレスを用いて、メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、値および関連付けられる状態フラグを取得する段階と、キーに対する第２またはより多くのアドレスを格納するべく、ローカルキャッシュをアップデートする段階と、受信された値を返す段階とを有する。
【００６８】
例１８は、例１３〜１７のいずれか１つであり得、ヒットをもたらさないキーを用いるゲット要求のために、サービス提供する段階は、メムキャッシュドシステムのサーバに、値を要求するゲット要求を送信する段階と、値および値の関連付けられる状態フラグが格納される、メムキャッシュドシステムの１または複数の位置の１または複数のアドレスを受信する段階と、受信された１または複数のアドレスを用いて、メムキャッシュドシステムのサーバ上でリモートダイレクトメモリアクセス動作を実行し、値および関連付けられる状態フラグを取得する段階と、受信された値を返す段階とを有する。
【００６９】
例１９は、例１３〜１８のいずれか１つであり得、セット要求のために、サービス提供する段階は、ヒットをもたらすキーに応答して、ヒットをもたらしたローカルキャッシュにおけるキャッシュエントリを無効にする段階と、メムキャッシュドシステムのサーバにセット要求を送信する段階とを有する。
【００７０】
例２０は、例１５であり得、リモートダイレクトメモリアクセス動作を実行する段階は、失効していないヒットをもたらすキャッシュエントリを第１に判断する段階を有する。
【００７１】
例２１は、  メムキャッシュドシステムのサーバにより、キーに対応する値をゲットする要求を受信する段階と、サーバによりキーがヒットをもたらすか否かを判断する段階と、サーバにより、ヒットをもたらすキーに応答して、値および値に関連付けられる状態フラグが格納される、メムキャッシュドシステムの１または複数の位置の１または複数のアドレスを返す段階とを備える、データをキャッシュするメモリのための方法であり得る。
【００７２】
例２２は、例２１であり得、サーバにより、メムキャッシュドシステムにおいて第２のキーを第２の対応する値にアップデートする要求を受信する段階と、サーバにより第２のキーがヒットをもたらすか否かを判断する段階と、ヒットをもたらす第２のキーに応答して、サーバにより、古い状態を有する第２のキーに対するヒットをもたらす第１のアイテムに関連付けられた第２の状態フラグをアップデートする段階と、第１のアイテムを収集リストに追加する段階と、第２のキーに対する第２のアイテムを生成する段階と、第２のアイテムに第２の値を割り当てる段階とを更に備える。
【００７３】
例２３は、例２１または２２であり得、サーバにより、古い状態と関連付けられる複数の状態フラグを有する複数のアイテムに割り当てられたメモリを回復するメンテナンス動作を周期的に実行する段階を更に備える。
【００７４】
例２４は、例２１〜２３のいずれか１つであり得、サーバにより、サーバのメモリの複数の物理アドレスをメムキャッシュドシステムのアドレス空間にマッピングする段階を更に備える。
【００７５】
例２５は、クライアント装置による複数の命令の実行に応答して、クライアント装置に、例１３〜１８のいずれか１つの複数の方法を実行させる複数の命令を備える、１または複数のストレージ媒体であり得る。
【００７６】
例２６は、サーバ装置による複数の命令の実行に応答して、サーバ装置に、例１９〜２４のいずれか１つの複数の方法を実行させる複数の命令を備える、１または複数のストレージ媒体であり得る。
【００７７】
例２７は、例１３〜１８の複数の方法のいずれか１つを実行するための手段を備えるクライアント装置であり得る。
【００７８】
例２８は、例１９〜２４の複数の方法のいずれか１つを実行するための手段を備えるクライアント装置であり得る。
【００７９】
他のキャッシュ用途、ストレージ用途、または電気製品に対する適用を含む、本開示の趣旨または範囲を逸脱することなく、メムキャッシュドのための開示されるデバイスおよび関連する複数の方法の開示される複数の実施形態において、様々な修正形態および改変形態が行われ得ることが当業者には明らかであろう。従って、修正形態および改変形態があらゆる特許請求の範囲およびその均等物の範囲内に包含されることを条件として、本開示は、上記で開示された複数の実施形態の修正形態および改変形態を包含することを意図する。
【図１】
0006308508.tif 000002
【図２】
0006308508.tif 000003
【図３】
0006308508.tif 000004
【図４】
0006308508.tif 000005
【図５】
0006308508.tif 000006
【図６】
0006308508.tif 000007
【図７】
0006308508.tif 000008
【図８】
0006308508.tif 000009
【図９】
0006308508.tif 000010