JP2017510925A - 分散型共有メモリアプリケーションのメモリ破損の検出サポート - Google Patents

分散型共有メモリアプリケーションのメモリ破損の検出サポート Download PDF

Info

Publication number
JP2017510925A
JP2017510925A JP2017502751A JP2017502751A JP2017510925A JP 2017510925 A JP2017510925 A JP 2017510925A JP 2017502751 A JP2017502751 A JP 2017502751A JP 2017502751 A JP2017502751 A JP 2017502751A JP 2017510925 A JP2017510925 A JP 2017510925A
Authority
JP
Japan
Prior art keywords
cache line
node
memory
source
version
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017502751A
Other languages
English (en)
Other versions
JP6588080B2 (ja
JP2017510925A5 (ja
Inventor
ラドビック,ゾラン
ローウェンスタイン,ポール
ジョンソン,ジョン・ジィ
Original Assignee
オラクル・インターナショナル・コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by オラクル・インターナショナル・コーポレイション filed Critical オラクル・インターナショナル・コーポレイション
Publication of JP2017510925A publication Critical patent/JP2017510925A/ja
Publication of JP2017510925A5 publication Critical patent/JP2017510925A5/ja
Application granted granted Critical
Publication of JP6588080B2 publication Critical patent/JP6588080B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0721Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
    • G06F11/0724Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU] in a multiprocessor or a multi-core unit
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0763Error or fault detection not based on redundancy by bit configuration check, e.g. of formats or tags
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0653Monitoring storage devices or systems
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Debugging And Monitoring (AREA)

Abstract

分散ノードシステム内のノードは、ノード間でメモリを共有する場合、メモリ破損の検出をサポートするように構成されている。本明細書において、分散ノードシステム内のノードがメモリ単位でデータを共有することを「共有キャッシュライン」として称する。ノードは、バージョン値を共有キャッシュライン内のデータに関連付ける。バージョン値およびデータは、ノードのメインメモリにおける共有キャッシュラインに格納されてもよい。ノードは、メモリ操作を実行する場合、バージョン値を用いて、メモリ破損が発生しているか否かを判断することができる。例えば、バージョン値にポインタを関連付けることができる。ポインタを用いてメモリにアクセスする場合、ポインタのバージョン値は、メモリ位置の予期バージョン値を示すことができる。これらのバージョン値が一致しない場合、メモリ破損が発生している。

Description

関連出願の相互参照、優先権主張
本願は、Zoran Radovic等によって2014年3月28日に出願され、「分散型共有メモリアプリケーションのメモリ破損の検出サポート」と題された米国仮特許出願番号第61/972082号に基づいて優先権を主張し、その出願の内容が参照により本明細書に援用される。本願は、2013年3月15日に出願され、「個別の物理ドメインアドレス空間内のノードの間にクラスタの形成を可能にするメモリバスプロトコル」と題された米国特許出願番号第13/838542号(代理人整理番号50277−4032)、2013年3月15日に出願され、「リモート鍵に基づいたメモリバッファアクセス制御メカニズム」と題された米国特許出願番号第13/839525号(代理人整理番号50277−4091)、および2013年3月14日に出願され、「分散ノード間にメモリの共有」と題された米国特許出願番号第13/828555号(代理人整理番号50277−4072)に関連し、これらの出願の各々の内容が参照により本明細書に援用される。
発明の分野
本開示は、一般的に、分散ノードシステムにおいてメモリ破損を検出するための技術に関する。
背景
一クラスタ以上の分散コンピューティングノードは、インターネットまたは企業ネットワークを介して、多くの機能およびサービスを提供することができる。例えば、大規模なビジネスを実行するために使用されるデータベースは、複数のデータベースサーバによって維持され、これらのデータベースサーバを介して利用可能である。これらの複数のデータベースサーバは、クラスタに形成された複数の分散コンピューティングノード上で実行される。コンピューティングノードクラスタを使用して機能またはサービスを提供することは、多くの利点を有する。例えば、クラスタを使用する場合、増加する需要を満たすために、別のノードを追加することによって、システムの性能を比較的に容易に増加することができる。クラスタを使用することによって、負荷をさまざまなノード間に分散することができる。したがって、1つのノードが過負荷になった場合、作業を他のノードに割り当てることができる。また、クラスタを使用することによって、1つ以上のノードが故障した場合、故障を許容することができ、機能またはサービスの使用が可能である。さらに、クラスタ内のノードは、例えば、協同作業、取引の実行、負荷の分散、故障の防止および回復等を行うために、情報を共有することができる。
ノードクラスタ上で実行するアプリケーションに対して、メモリ破損を検出する必要がある。メモリ破損は、メモリ位置が不適切にアクセスされまたは変更される際に発生する。一例として、アプリケーションがポインタ変数を特定のデータ構造に割り当てられたメモリを越えて前に進めようとする場合、メモリ破損が発生する。これらのメモリエラーは、プログラムクラッシュまたは予期しないプログラム結果を引き起こす可能性がある。
シングルマシンのアプリケーションのメモリ破損を検出する方法が存在する。シングルマシンのメモリ破損を検出する方法によって、コンピュータは、実行時にアプリケーションのポインタを追跡し、メモリエラーをユーザに通知することができる。
しかしながら、ノードクラスタ上で実行するアプリケーションのデバッグは、シングルマシンのアプリケーションよりも困難である。ノードクラスタ上で実行するアプリケーションをデバッグするいくつかの解決策が存在する。これらのデバッグ解決策は、社内ツールサポート、実行時サポート、またはサムチェック法を含むことができる。残念ながら、これらの解決策は、プログラミングモデルを複雑にし、システムの性能にオーバーヘッドを加える上、メモリ破損を検出できない場合がある。
この節に説明された手法は、探究できるものであるが、必ずしも過去に想到されまたは探究されたものではない。したがって、特に断りのない限り、この節に説明された手法のいずれかは、単にこの節に包含されることによって先行技術として定義されると考えるべきではない。
一実施形態に従って、例示的な分散ノードシステムを示すブロック図である。 一実施形態に従って、分散ノードシステム内の一部のノードがメモリを共有する例を示す図である。 一実施形態に従って、ノード内のメモリ破損を検出するための手順を示すフローチャートである。 一実施形態に従って、キャッシュラインをロードする際に、メモリ破損を検出しながら、キャッシュラインを更新するための手順を示すフローチャートである。 一実施形態に従って、リモートノードにおいてストアを実行するための手順を示すフローチャートである。 一実施形態に従って、リモートノードからソースノードにストアを伝播するための手順を示すフローチャートである。 一実施形態に従って、ソースノードにストアを実行するための手順を示すフローチャートである。 本発明の一実施形態を実現し得るコンピュータシステムを示すブロック図である。
詳細な説明
以下の記載には、説明の目的で、本発明の実施形態を完全に理解できるようにするために、多くの具体的な詳細を記載する。しかしながら、これらの具体的な詳細がなくても本発明を実施できることは明らかであろう。本発明を明瞭にするために、必要に応じて、一部の周知の構造および装置は、ブロック図で示される。
総括
本明細書に記載の実施形態によれば、分散ノードシステム内のノードは、ノード間でメモリを共有する場合、メモリ破損の検出をサポートするように構成されている。本明細書において、分散ノードシステム内のノードがメモリの単位でデータを共有することを「共有キャッシュライン」として称する。ノードは、バージョン値を共有キャッシュラインのデータに関連付ける。バージョン値およびデータは、ノードのメインメモリ内の共有キャッシュラインに格納されてもよい。ノードは、メモリ操作を実行する場合、バージョン値を使用して、メモリ破損が発生したか否かを判断することができる。例えば、ポインタにバージョン値を関連付けることができる。ポインタを用いてメモリにアクセスする場合、ポインタのバージョン値は、メモリ位置の予期バージョン値を示すことができる。これらのバージョン値が一致しない場合、メモリ破損が発生している。
ポインタという用語は、本明細書に使用される場合、メモリに格納された別の値のメモリ位置を指定するアドレスを含む値である。この値は、プロセッサのレジスタにロード可能である。一実施形態によれば、ポインタは、2つの別個の値であるバージョン値および仮想アドレスを含む。この仮想アドレスは、メモリ操作を実行する際に、物理アドレスに変換される。
分散ノードシステムのノードは、そのメインメモリの一部をシステム内の他のノードと共有する。ノード(「ソースノード」)は、そのメインメモリの一部をシステム内の他のノードと共有可能にし、他のノード(「リモートノード」)は、そのメインメモリに共有メモリをコピーする。メモリの一部は、1つ以上の共有キャッシュラインを含むことができる。リモートノードは、ソースノード内のソースキャッシュラインのコピーである複製キャッシュラインを作成する。
一実施形態において、共有キャッシュラインは、バージョンビットとデータビットとを含む。共有キャッシュラインのバージョンビットは、共有キャッシュラインに関連付けられたバージョン値を示す。同様に、共有キャッシュラインを指し示すように構成されたポインタは、バージョン値を含む。ポインタを用いて、共有キャッシュライン上でメモリ操作を実行する場合、ノードは、ポインタのバージョン値と共有キャッシュラインのバージョンビットにより示されたバージョン値とを比較する。
一実施形態において、ソースノードは、メモリ割り当て要求に応答して、バージョン値を生成する。例えば、アプリケーションがデータ構造にメモリを割り当てる際に、ソースノードは、そのデータ構造に関連付けられるバージョン値を生成することができる。生成されたバージョン値および関連付けられたデータ構造は、ローカルノードのメインメモリにコピーされてもよい。
一実施形態において、アプリケーションは、メモリ操作を要求する。ノードは、メモリ破損が発生したことを検出した場合、エラーをアプリケーションに通知することができる。また、ノードは、メモリ操作を実行せず、終了させることもできる。
別の実施形態において、ノードは、バージョン値を用いて、ノード間のコヒーレンシを維持する。例えば、リモートキャッシュラインのバージョン値は、このリモートキャッシュラインが古くなっていることを示すことができる。よって、リモートノードは、対応するソースキャッシュラインに基づいて、リモートキャッシュラインを更新することができる。一実施形態において、1つ以上のバージョン値が、複製キャッシュラインが無効であることを示すために保留される。保留された1つ以上のバージョン値は、ノードがメモリ割り当て要求に応答してバージョン値を生成する際に、使用されない。
システムの概要
図1は、一実施形態に従って、例示的な分散ノードシステム100を示すブロック図である。分散ノードシステム100は、3つのノード、すなわち、第1ノード102A、第2ノード102Bおよび第3ノード102Cを含む。図示には3つのノードが示されているが、システム100は、より多くのノードまたはより少ないノードを含んでもよい。
各ノード102は、メインメモリ108を含む。メインメモリ108は、1つ以上の共有キャッシュライン106を含む。一実施形態において、共有キャッシュライン106は、バージョンビット112とデータビット114とを含む。データは、データビット114に格納される。バージョンビット112は、共有キャッシュライン106に関連付けられたバージョン値を示す。共有キャッシュライン106は、同一のサイズを有してもよく、異なるサイズを有してもよい。
1つのノード102は、そのメインメモリ108の一部(「共有メモリ」)を他のノードと共有することができる。他のノード102は、共有メモリの内容を複製するために、メインメモリ108の一部(「コピーメモリ」)を割り当てることができる。一実施形態において、1つのノード102は、メインメモリ108の一部を共有できるようにすることができ、他のノード102によってメインメモリ108の一部をコピーすることができる。本発明の目的のために、ノード102は、任意数(0または1以上)の共有メモリを有することができ、任意数(0または1以上)のコピーメモリを有することができる。各メモリ部分は、1つ以上の共有キャッシュライン106含むことができる。一実施形態において、メインメモリの一部108を共有するまたはコピーすることは、1つ以上の共有キャッシュライン106をそれぞれ共有するまたはコピーすることを含む。
一例として、図2において、第2ノード102Bは、メインメモリ108Bの一部を他のノードと共有している。第1ノードおよび第3ノードは、共有メモリ202をコピーする。したがって、第1ノード102Aは、メインメモリ108Aにおいて、共有メモリ202のコピーであるメモリ部分204Aを有しており、第3ノード102Cは、メインメモリ108Cにおいて、共有メモリ202のコピーであるメモリ部分204Cを有している。また、第3ノード102Cは、メインメモリ108Cの一部を他のノードと共有している。第1ノードおよび第2ノードは、共有メモリ206をコピーする。したがって、第2ノード102Bは、共有メモリ206のコピーであるメモリ部分208Bを有しており、第1ノード102Aは、共有メモリのコピーであるメモリ部分208Aを有している。図示の例において、第2ノードおよび第3ノードの両方は、メモリの一部を共有すると共に、他のノードから共有メモリをコピーする。第1ノードは、2つのノードからメモリの一部をコピーするが、メモリの一部を共有していない。
一実施形態において、ノード102は、ディレクトリ210を含むことができる。ディレクトリ210は、共有メモリの部分毎に、システム100内のどのノードが共有メモリのコピーを含むことを示す。一実施形態において、ディレクトリ210は、共有メモリ内の各ソースキャッシュラインのエントリを含む。すなわち、ディレクトリ210は、ソースノードであるノード102の各共有キャッシュラインのエントリを含む。
一実施形態において、ノード102は、インデックス212を含むことができる。インデックス212は、共有メモリの部分毎に、メインメモリ108の共有メモリに位置するディレクトリの場所を示す。また、インデックス212は、コピーメモリの部分毎に、メモリを共有したソースノードおよびソースノードのメインメモリに位置する共有メモリの位置を示す。一実施形態において、インデックス212は、メインメモリ108内の各共有キャッシュラインのエントリを含む。インデックス212は、コピーメモリ内の共有キャッシュラインの部分毎に、ソースキャッシュラインを共有したソースノードおよびソースノードのメインメモリに位置するソースキャッシュラインの位置を示す。
システムの初期化
メモリを共有するようにシステム100内のノード102を準備するために、ノード102を初期化する。一実施形態において、以下のようにノード102を初期化することができる。ノード102は、任意数のメモリ部分を共有することができ、他のノードに共有される任意数のメモリ部分をコピーすることができる。ノード102は、決定した実行内容に応じて、説明された操作の一部または全部を実行してもよく、何も実行しなくてもよい。
初期化中に、ノード102は、そのメインメモリ108のいずれか一部をシステム100内の他のノードと共有しようとするか否かを決定する。共有する場合、ノード102は、そのメインメモリの一部を共有することを示す情報を他のノード102に一斉放送する。放送情報は、ノード102、共有メモリ202のサイズ、およびメインメモリ108における共有メモリ202の位置に関する情報を含むことができる。この情報は、システム100内の他のノードに、共有メモリのアクセス場所を指示する。
ノード102は、別のノードがそのメインメモリの一部を共有しようとすることを示す放送情報を受け取ることができる。放送情報を受け取ったことに応答して、ノード102は、共有メモリ202をコピーするか否かを判断することができる。ノード102は、共有メモリをコピーすると決定した場合、共有メモリのコピーを格納するのに十分なコピーメモリを割り当てる。
一実施形態において、ノード102は、割り当てられたメモリにデータを配置しない。すなわち、ノードは、メモリを割り当てるが、共有メモリからデータをコピーしない。ノードは、コピーメモリ内の各複製キャッシュラインのバージョン値を、複製キャッシュラインが無効であることを示す値に設定する。一実施形態において、ノード102は、アプリケーションがデータを要求するまで、共有メモリのデータをコピーメモリにコピーしない。ノードが複製キャッシュラインをターゲットする操作を実行しようとする場合、バージョン値は、共有キャッシュラインが無効であることをノードに指示する。よって、ノードは、共有メモリ内のソースキャッシュラインをコピーメモリ内の複製キャッシュラインにコピーする。
一実施形態において、ノード102は、そのメインメモリ108の一部を共有する場合、メインメモリ108において、ディレクトリ構造210を格納するためのメモリを割り当てる。ディレクトリ構造210は、ノード102により共有された各メモリ部分のコピーを含むノードを示す。一実施形態において、ディレクトリ構造210は、共有メモリに位置する各共有キャッシュラインのディレクトリエントリを含む。換言すれば、各ソースキャッシュラインは、ディレクトリエントリに関連付けられている。したがって、各ソースキャッシュラインのディレクトリエントリは、どのノードがソースキャッシュラインのコピーである複製キャッシュラインを有することを示す。一実施形態において、ディレクトリエントリは、リモートノード内の各複製キャッシュラインが有効な(最新の)コピーであるか否かを示すことができる。一実施形態において、ディレクトリエントリは、ディレクトリエントリへのアクセスをシリアライズするためのロック手段を含むことができる。
一実施形態において、ノード102は、メインメモリ108において、インデックス構造212用のメモリを割り当てる。インデックス構造212は、メインメモリ108において各共有キャッシュラインのインデックスエントリを含む。ノード102が共有メモリにおいて共有キャッシュラインを共有する場合、インデックスエントリは、メインメモリ108において、共有キャッシュラインのディレクトリエントリの位置を示す。共有キャッシュラインがコピーメモリに位置する場合、インデックスエントリは、共有メモリを共有したソースノード、およびソースノードのメインメモリに位置する対応のソースキャッシュラインの位置を示す。一実施形態において、ノード102は、ソースノードからブロードキャスト情報を受け取って、共有メモリをコピーすると決定する場合に、インデックス構造212を更新する。ソースノードから受け取った情報は、インデックス構造212に格納された情報と同様であってもよい。
メモリ割り当ての例示
一実施形態において、ノード102は、メモリを割り当てる際に、メモリ位置にバージョン値を与える。例えば、アプリケーションがmalloc要求を実行する際に、ノード102は、要求されたメモリ量を割り当て、割り当てられたメモリに関連付けるバージョン値を生成し、アプリケーションにポインタを返送する。一実施形態において、割り当てられたメモリは、1つ以上の共有キャッシュラインを含む。バージョン値は、各共有キャッシュラインのバージョンビットにより示されてもよい。
一実施形態において、バージョン値は、アプリケーションのヒープマネージャによって生成される。バージョン値は、有効値の範囲から選択されてもよい。一実施形態において、1つ以上のバージョン値は、共有キャッシュラインが無効であることを示すために使用され、有効値の選択範囲に含まれていない。バージョン値の形式は、実装に依存して変更してもよい。例えば、バージョン値は、16個の使用可能な値を生成する4ビットの長さを有してもよい。別の例において、バージョン値は、44ビットのタイムスタンプであってもよい。
また、バージョン値は、割り当てられたメモリのポインタに関連付けられる。一実施形態において、ポインタは、バージョン値と仮想アドレスとの両方を含む。例えば、ノードは、44ビットのレジスタを用いてポインタを格納する。仮想アドレスは、44ビットの全体を使用しないため、バージョン値は、44ビットレジスタの未使用の余分ビットに格納されてもよい。
割り当てられたメモリが共有メモリの一部として共有される場合、他のノード102は、割り当てられたメモリに位置する共有キャッシュラインを各々のコピーメモリにコピーしてもよい。一実施形態において、共有キャッシュラインのコピーは、関連するバージョン値をコピーすることを含む。他のノード102は、コピーされた共有キャッシュラインにポインタを生成してもよい。バージョン値は、生成された各ポインタに関連付けて格納されてもよい。
ポインタに基づくメモリ破損の検出
図3は、ポインタに関連付けられたバージョン値を用いて、ノード102内のメモリ破損を検出するための手順を示すフローチャートである。この手順は、バージョン値に関連付けられたポインタによって参照される共有キャッシュラインに関与するメモリ操作を実行する際に、行われてもよい。以下、この手順は、ポインタに基づくメモリ破損の検出として呼ばれる。
例えば、ノード102は、アプリケーションからコマンドを受け取る。コマンドは、例えば、ロードコマンドまたはストアコマンドなどのメモリ操作を実行するための要求であってもよい。コマンドの実行中に、ノード102は、メモリ破損を検出するためのステップを実行する。コマンドは、メインメモリ108に位置する共有キャッシュラインのポインタを含むことができる。上述したように、一実施形態において、ノード102がメモリをアプリケーションに割り当てる際に、ノードは、バージョン値に関連付けられたポインタを返送する。
ステップ302において、ノード102は、コマンドに含まれるポインタに関連付けられたバージョン値を判断する。一実施形態において、ポインタは、バージョン値を含む。ポインタに関連付けられたバージョン値は、コマンドによって要求した共有キャッシュラインに関連付けて欲しいバージョン値を示すことができる。例えば、コマンドがポインタを用いてデータ構造にアクセスする場合、バージョン値をデータ構造に関連付けることができる。
ステップ304において、ノード102は、ポインタのバージョン値と、要求した共有キャッシュラインに関連付けられたバージョン値とを比較する。一実施形態において、共有キャッシュラインのバージョンビットは、共有キャッシュラインに関連付けられたバージョン値を示す。次に、方法は、判断ブロック308に進む。
判断ブロック308において、ポインタのバージョン値が要求された共有キャッシュラインに関連付けられたバージョン値と一致しない場合、メモリ破損を検出する。一実施形態において、トラップ操作が実行される。トラップ操作は、メモリ破損が検出されたことをアプリケーションに指示することができる。トラップ操作は、メモリ操作の実行を中止することもできる。代替的に、検出手順が終了し、メモリ操作が継続する。
ポインタのバージョン値が要求された共有キャッシュラインに関連付けられたバージョン値と一致した場合、検出手順が終了し、メモリ操作が継続する。
ポインタに関連付けられたバージョン値を用いてメモリ破損を検出するための図3の手順は、さまざまなメモリ操作と共に、実行することができる。メモリ操作の詳細は、以下にさらに説明する。
ノード間のコヒーレンシ
一実施形態において、共有キャッシュラインのバージョン値を用いて、ノード間の共有キャッシュラインのコヒーレンシを管理することができる。ソースノードがソースキャッシュラインを更新すると、リモートノードに位置する複製キャッシュラインが古くなる。しかしながら、リモートノードは、複製キャッシュラインを直ちに更新せず、その代わりに、複製キャッシュラインが無効であることを示すように、各複製キャッシュラインのバージョン値を設定する。その後、リモートノードが複製キャッシュラインにアクセスしようとする際に、ノードは、複製キャッシュラインが無効であることを発覚し、複製キャッシュラインを更新する。
一実施形態において、ノード102は、ストアコマンドを実行する際に、トラップ操作を実行することができる。一実施形態において、ノード102は、目標とする共有キャッシュラインがソースキャッシュラインであるかまたは複製キャッシュラインであるかに応じて、異なる操作を実行する。目標とする共有キャッシュラインが複製キャッシュラインである場合、ノード102は、ストアをソースノード内のソースキャッシュラインに伝播する。一実施形態において、リモートノードは、ストアをソースノードに送信する前に、ストアをストアバッファに格納する。
一実施形態において、ノード102は、インデックス212を含む。要求された共有キャッシュラインが複製キャッシュラインである場合、インデックスエントリは、ソースノードおよびソースキャッシュラインの位置を複製キャッシュラインに指示する。したがって、ノード102は、インデックス212を参照して、要求された共有キャッシュラインが複製キャッシュラインであるかまたはソースキャッシュラインであるかを判断することができる。その判断に基づいて、ノード102は、ストアコマンドを実行するための操作を判断することができる。
リモートノードのロード
一実施形態において、ソースノードが対応するソースキャッシュラインを更新する際に、ノードは、複製キャッシュラインを更新しない。ノードは、複製キャッシュラインをノードにロードする際に、複製キャッシュラインを更新する。複製キャッシュラインが無効であることを示すバージョン値は、更新をトリガする。複製キャッシュラインを更新した後、メモリ破損の検出が行われる。図4は、ノード102が複製キャッシュラインを要求した場合、共有キャッシュラインを更新するための手順を示すフローチャートである。
ステップ402において、ノード102は、アプリケーションからコマンドを受け取る。例えば、コマンドは、ロードコマンドなどのロード操作に関与するメモリ操作であってもよい。
コマンドは、メインメモリ108に位置する共有キャッシュラインのポインタを含むことができる。一実施形態において、上述したように、ノード102は、アプリケーションにメモリを割り当てる際に、バージョン値を関連付けたポインタを返送する。説明のために、コマンドに含まれるポインタは、バージョン値を関連付けたものとする。
ステップ404において、ノード102は、バージョン値が共有キャッシュラインが無効であることを示しているか否かを判断する。一実施形態において、少なくとも1つのバージョン値は、共有キャッシュラインが無効であることを示す際に使用されるが、メモリを割り当てる間に使用されない。一実施形態において、共有キャッシュラインは、複製キャッシュラインである。バージョン値は、例えば、複製キャッシュラインがデータと共にソースキャッシュラインから伝播されていない場合、共有キャッシュラインが無効であることを示すことができる。要求された共有キャッシュラインは、複製キャッシュラインであってもよく、複製キャッシュラインではなくてもよい。
一例において、共有キャッシュラインは、複製キャッシュラインではない。一実施形態において、コピーメモリに位置していない共有キャッシュラインは、常に有効であると推定される。
別の例において、共有キャッシュラインは、複製キャッシュラインである。共有キャッシュライン内のデータは、古くなっている可能性がある。すなわち、複製キャッシュライン内のデータは、ソースキャッシュライン内のデータと同様ではない。このような状況は、例えば、ソースノードがデータをソースキャッシュラインに格納する場合に、発生する可能性がある。
その後、方法は、判断ブロック406に進む。判断ブロック406において、バージョン値が、共有キャッシュラインが有効であることを示す場合、ノード102は、手順の実行を継続し、ステップ410に進み、ポインタに基づくメモリ破損の検出を行う。
バージョン値が、共有キャッシュラインが無効であることを示す場合、方法は、ステップ408に進む。ステップ408において、ノードは、コマンドの実行を中断し、トラップ操作を行う。
一実施形態において、トラップ操作は、ソースキャッシュラインを複製キャッシュラインにコピーすることを含む。ソースキャッシュラインのコピーは、ソースキャッシュラインのバージョンビットおよびデータビットのコピーを含む。したがって、コピーを実行した後、複製キャッシュラインのバージョン値は、ソースキャッシュラインのバージョン値に設定される。複製キャッシュライン内のデータは、ソースキャッシュラインに伝播されていないストアバッファに記録されたリモートノードによって、任意のストアが複製キャッシュラインに対する修正を行うと同様に、ソースキャッシュライン内の最新データに設定される。したがって、ノードは、他のノードとのコヒーレンシを維持するために、共有キャッシュライン内のデータを更新することができる。
一実施形態において、ノードは、インデックス212を含む。ノードは、要求された共有キャッシュラインに対応するインデックスエントリを用いて、対応するソースキャッシュラインを含むソースノード、およびノードソースノードのメインメモリに位置する対応のソースキャッシュラインの位置を判断することができる。
一実施形態において、ソースノードは、ディレクトリ210を含む。リモートノードがその複製キャッシュラインを更新する時に、ソースノードは、対応するソースキャッシュラインのディレクトリエントリを更新することによって、リモートノード内のコピーが有効なコピーであることを示すことができる。
リモートノードのストア
前述したように、一実施形態において、リモートノードは、ストアをソースノードに送信する前に、ストアバッファを用いてストアを記録する。図5Aは、分散ノードシステム100内のリモートノード102によって実行されるストアを説明するフローチャートである。ストアを実行することによって、ストアコマンドを実行することができる。コマンドは、メインメモリ108に位置する複製キャッシュラインのポインタを含むことができる。ポインタに、バージョン値を関連付けてもよい。
ステップ502において、ノード102は、コマンドの実行を中断し、トラップ操作を実行して、以下のステップを実行する。
ステップ504において、ストアをストアバッファに記録する。ストアバッファに記録された情報は、ストアを実行するおよびデータを記憶するためのメモリの位置を示すことができる。ストアバッファにストアを記録することは、ソースノード、ストアを実行すべきソースノードのメインメモリに位置するソースキャッシュラインの位置、格納スレッド、およびストアに関連付けられたバージョン値を示すことを含んでもよい。
一実施形態において、ノード102は、インデックス212を含む。ノードは、要求された共有キャッシュラインに対応するインデックスエントリを用いて、対応するソースキャッシュラインを含むソースノード、およびノードソースノードのメインメモリに位置する対応のソースキャッシュラインの位置を判断することができる。
ステップ506において、ノード102は、複製キャッシュラインのバージョン値が複製キャッシュラインが無効であることを示しているか否かを判断する。バージョン値が共有キャッシュラインが無効であることを示す場合、共有キャッシュラインにストアを実行しない。バージョン値が複製キャッシュラインが有効であることを示す場合、方法は、ステップ508に進む。
ステップ508において、ノード102は、ポインタに基づくメモリ破損の検出を実行する。ノード102によって実行されるポインタに基づくメモリ破損の検出は、メモリ破損を検出しない場合、方法は、ステップ510に進む。
ステップ510において、ノード102は、共有キャッシュラインにデータを格納する。
トラップ操作が終了する。
アップデートの伝播
一実施形態において、リモートノードは、ストアをストアバッファに記録するが、このストアを対応のソースキャッシュラインを含むソースノードに送信しない。ノードは、ストアをストアバッファに記録した後、ストアをソースノードに伝播する必要がある。ストアの伝播は、ストアバッファを記録する手順と同様の手順の一部として実行されてもよく、または別々に実行されてもよい。一実施形態において、ノードは、ストア伝播操作を含むコマンドを受け取ることができる。例えば、ストアコマンドは、ストアを伝播するための命令を含んでもよい。ストアは、トラップ操作が完了した後、ストアコマンドの再開実行の一部として、伝播されてもよい。別の実施形態において、ノード102は、エントリを共有キャッシュラインに書き込む前に、ストアバッファにエントリを検索することができる。図5Bは、分散ノードシステム100におけるストアの伝播を示すフローチャートである。ストアは、別の実行スレッドによって、非同期的に伝播されてもよい。
ステップ522において、ノードは、ストアバッファからエントリを検索する。エントリは、ソースノード、ストアを実行すべきソースキャッシュライン、格納すべきデータ、ストアに関連付けられたバージョン番号、および格納スレッドを示す情報を含むことができる。
ステップ524において、ノード102は、キャッシュラインのために、ソースノードからリモートノードのリストを要求する。情報を受け取った後、方法は、ステップ526に進む。
一実施形態において、ソースノードは、要求に応じて、共有キャッシュラインのディレクトリエントリを参照する。ディレクトリエントリは、ソースキャッシュラインのコピーを格納しているノードを指示する。システム100内の任意数のノードは、ソースキャッシュラインのコピーを含んでもよい。一実施形態において、要求された共有キャッシュラインのディレクトリエントリにアクセスする際に、ソースノードは、そのディレクトリエントリをロックすることができる。一実施形態において、ソースノードは、ソースキャッシュラインの有効コピーを含むリモートノードのリストのみを共有する。ディレクトリエントリは、すべてのリモートノードが無効コピーを含むことを指示するように、更新されてもよい。
ステップ526において、ノード102は、ソースキャッシュラインのコピーを含む他のリモートノードに指示して、リモートノードの複製キャッシュラインを無効にマークすることができる。ノードは、ソースキャッシュライン内のデータが変更されたことを、複製キャッシュラインを各々保持しているノードに指示する。リモートノードに位置する複製キャッシュラインのバージョン値は、複製キャッシュラインが無効であることを示すように、変更される。
ステップ528において、ノード102は、ストアを実行するようにソースノードに通知する。通知は、ソースノードのメインメモリに位置するソースキャッシュラインの位置、ソースキャッシュラインに格納されるデータ、およびバージョン番号を含むことができる。ストアを実行する前に、ソースノードは、ストアバッファからのバージョン番号と各ソースキャッシュラインのバージョン番号とを比較する。バージョンの不一致が検出された場合、ソースノードは、ストアを実行せず、例えば、非同期トラップを介して、発行するスレッドに通知する。
ステップ530において、格納されたデータは、ストアバッファから削除される。
一実施形態において、これらのステップは、ストアバッファ内の各エントリに対して、繰り返して行われる。
代替的な一実施形態において、リモートノードは、ストアをストアバッファに記録しない。ストアをストアバッファに書き込む代わりに、リモートノードは、トラップ操作の実行中に、アップデート伝播ステップを実行する。
ソースノードのストア
一実施形態において、ソースノードは、ストアバッファを使用せず、ストアコマンドを実行することによって、共有キャッシュラインを格納する。図6は、分散ノードシステム100内のストアコマンドを実行するように、ソースノード102によって行われたステップを示すフローチャートである。ストアコマンドは、メインメモリ108に位置するソースキャッシュラインのポインタを含むことができる。ポインタには、バージョン値を関連付けてもよい。
ステップ602において、ノード102は、ストアコマンドの実行を中断し、トラップ操作を実行する。
ステップ604において、ノード102は、ソースキャッシュラインのために、ポインタに基づくメモリ破損の検出を実行する。メモリ破損が検出されない場合、方法は、ステップ606に進む。メモリ破損が検出された場合、方法は、ストアを実行せず、トラップ操作を終了する。
ステップ606において、ノード102は、各々の複製キャッシュラインを無効にするように、リモートノードに指示する。ノード102は、ソースキャッシュライン内のデータが変更されたことを各リモートノードに通知する。リモートノードに位置する複製キャッシュラインのバージョン値は、複製キャッシュラインが無効であることを示すように、変更される。
一実施形態において、ソースノードは、共有キャッシュラインのディレクトリエントリを参照する。ディレクトリエントリは、ソースキャッシュラインのコピーを格納しているノードを指示する。システム100内の任意数のノードは、ソースキャッシュラインのコピーを含んでもよい。ノードは、ソースキャッシュラインをコピーしている各ノードに、データが変更されたことを指示する。他のノードに位置する複製キャッシュラインのバージョン値は、複製キャッシュラインが無効であることを示すように、変更される。
一実施形態において、ソースキャッシュラインの無効化が記録され、無効化する命令が遅延をもってリモートノードに送信される。例えば、ストアを実行するスレッド以外のスレッドは、無効化されたソースキャッシュラインの記録を発見してから、ソースキャッシュラインのコピーである複製キャッシュラインを無効にする命令をリモートノードに送信する。
ステップ608において、ソースノードは、ソースキャッシュライン上でストアを実行する。
ソースノードは、トラップ操作を終了させる。
ハードウェアの概要
一実施形態によれば、本明細書に記載された技術は、1つ以上の専用コンピューティング装置によって実現される。専用コンピューティング装置は、本発明の技術を実行するために配線で連結されてもよく、または本発明の技術を実行するように反復にプログラムされる1つ以上の特定用途向け集積回路(ASIC)またはフィールドプログラマブルゲートアレイ(FPGA)などのデジタル電子機器を含んでもよく、またはファームウェア、メモリ、他の記憶装置、またはその組み合わせに記憶されたプログラム命令に従って、本発明の技術を実行するようにプログラムされる1つ以上の汎用ハードウェアプロセッサを含んでもよい。これらの専用コンピューティング装置は、本発明の技術を達成するために、カスタムハードワイヤードロジック、ASIC、またはカスタムプログラミングを備えるFPGAと併用することができる。本発明の技術を実現するために、専用コンピューティング装置は、デスクトップコンピュータシステム、ポータブルコンピュータシステム、携帯式装置、ネットワーク装置、またはハードワイヤードジックおよび/またはプログラムロジックを組み込んだ他の任意の装置であってもよい。
例えば、図7は、本発明の一実施形態を実現し得るコンピュータシステム700を示すブロック図である。コンピュータシステム700は、情報を通信するためのバス702または他の通信機構、およびバス702に連結され、情報を処理するためのハードウェアプロセッサ704を含む。ハードウェアプロセッサ704は、例えば、汎用のマイクロプロセッサであってもよい。
コンピュータシステム700は、バス702に連結され、プロセッサ704によって実行される情報および命令を記憶するためのメインメモリ706、例えば、ランダムアクセスメモリ(RAM)または他の動的記憶装置を含む。プロセッサ704が命令を実行する間に、メインメモリ706は、一時変数または他の中間情報を記憶することができる。プロセッサ704にアクセス可能な非一時的記憶媒体に記憶されたこれらの命令は、命令により指定された操作を実行するように、コンピュータシステム700を専用マシンに改造することができる。
コンピュータシステム700は、さらに、バス702に連結され、プロセッサ704用の静的情報および命令を記憶するための読み出し専用メモリ(ROM)708または他の静的記憶装置を含む。バス702に連結され、情報および命令を記憶するための磁気ディスク、光ディスクまたは固体ドライブなどの記憶装置710が設けられる。
情報をコンピュータユーザに表示するために、コンピュータシステム700は、例えば、バス702を介して、陰極線管(CRT)などのディスプレイ712に連結されてもよい。情報およびコマンドの選択をプロセッサ704に通信するために、英数字および他のキーを含む入力装置714は、バス702に連結される。方向情報およびコマンド選択をプロセッサ704に通信するためおよびディスプレイ712上のカーソルの動きを制御するための他の種類のユーザ入力装置は、マウス、トラックボールまたは他のカーソル方向キーなどのカーソル制御716を含む。このような入力装置は、通常2つの軸、すなわち、第1軸(例えば、x軸)および第2軸(例えば、y軸)に2つの自由度を有するため、平面に位置を指定することができる。
コンピュータシステム700は、コンピュータシステムと併用すると、コンピュータシステム700を専用マシンにカスタマイズするまたはプログラムするカスタムハードワイヤードロジック、1つ以上のASICまたはFPGA、ファームウェアおよび/またはプログラムロジックを用いて、本明細書に記載の技術を実現することができる。一実施形態によれば、コンピュータシステム700は、メインメモリ706に記憶される1つ以上の命令の1つ以上のシーケンスを実行するプロセッサ704に応答して、本明細書に記載の技術を実行する。これらの命令は、記憶装置710などの他の記憶媒体からメインメモリ706に読み込まれてもよい。プロセッサ704は、メインメモリ706に記憶される1つ以上の命令のシーケンスを実行すると、本明細書に記載された手順を実行する。代替的な実施形態において、ソフトウェア命令の代わりにまたはソフトウェア命令と組み合わせて、ハードワイヤード回路を使用することができる。
「記憶媒体」という用語は、本明細書に使用される場合、マシンを特定の方法で動作させるデータおよび/または命令を格納する任意の非一時的媒体を指す。このような記憶媒体は、不揮発性媒体および/または揮発性媒体を含むことができる。不揮発性媒体は、光ディスク、磁気ディスクまたは固体ドライブ、例えば記憶装置710を含む。揮発性媒体は、動的メモリ、例えば記憶媒体706を含む。一般的な記憶装置は、フロッピー(登録商標)ディスク、フレキシブルディスク、ハードディスク、固体ドライブ、磁気テープまたは任意の他の磁気データ記憶媒体、CD−ROM、任意の他の光学データ記憶媒体、穴パターンを有する任意の物理的媒体、RAM、APROM、EPROM、フラッシュEPROM、NVRAM、任意の他のメモリチップまたはカートリッジを含む。
記憶媒体は、伝送媒体と異なるものであるが、伝送媒体と併用することができる。伝送媒体は、記憶媒体間の情報伝送に関与する。例えば、伝送媒体は、バス702を構成する同軸ケーブル、銅線および光ファイバを含む。また、伝送媒体は、無線データ通信または赤外線データ通信に生成される音波または光波を伝送することができる。
さまざまな種類の媒体は、1つ以上の命令の1つ以上のシーケンスをプロセッサ704に搬送して実行することに関与する。例えば、命令は、最初にリモートコンピュータの磁気ディスクまたは固体ドライブに保持されてもよい。リモートコンピュータは、命令を動的メモリに読み込み、モデムを用いて、電話回線を介して命令を送信することができる。コンピュータシステム700のモデムは、電話回線からデータを受信し、赤外線発信機を用いて、データを赤外線信号に変換することができる。赤外線検出器は、赤外線信号により搬送されたデータを受信し、適切な回路は、データをバス702上に置くことができる。バス702は、データをメインメモリ706にして、プロセッサ704は、メインメモリ706から命令を取り出して実行する。必要に応じて、メインメモリ706が受け取った命令は、プロセッサ704に実行される前にまたは後に、記憶装置710に記憶されてもよい。
また、コンピュータシステム700は、バス702に接続された通信インターフェイス718を含む。通信インターフェイス718は、ローカルネットワーク722に接続されたネットワークリンク720に双方向データ通信を提供する。通信インターフェイス718は、例えば、対応する種類の電話回線にデータ通信接続を提供する統合サービスデジタルネットワーク(ISDN)カード、ケーブルモデム、衛星モデム、またはモデムであってもよい。別の例として、通信インターフェイス718は、互換性のあるLANにデータ通信接続を提供するローカルエリアネットワーク(LAN)カードであってもよい。無線リンクに実装されてもよい。いずれかの実装において、通信インターフェイス718は、さまざまな種類の情報を表すデジタルデータストリームを搬送する電気信号、電磁信号または光信号を送受信する。
ネットワークリンク720は、一般的には、1つ以上のネットワークを介して、他のデータ装置にデータを通信する。例えば、ネットワークリンク720は、ローカルネットワーク722を介してホストコンピュータ724に接続するまたはインターネットサービスプロバイダ(ISP)726によって動作されるデータ機器に接続する。これによって、ISP726は、現在一般的に「インターネット」728と呼ばれているワールドワイドパケットデータ通信ネットワークを介して、データ通信サービスを提供する。ローカルネットワーク722およびインターネット728の両方は、電気信号、電磁信号または光信号を使用して、デジタルデータストリームを搬送する。さまざまなネットワークを介してまたはネットワークリンク720および通信インターフェイス718を介して、デジタルデータをコンピュータシステム700に搬送するまたはそれから搬送する信号は、伝送媒体の例示的な形態である。
コンピュータシステム700は、ネットワーク、ネットワークリンク720および通信インターフェイス718を介して、メッセージを送信し、プログラムコードを含むデータを受信することができる。インターネットの例において、サーバ730は、インターネット728、ISP726、ローカルネットワーク722および通信インターフェイス718を介して、応用プログラムのために要求されたコードを送信することができる。
送信されたコードは、受信されると、プロセッサ704によって実行され、および/または将来に実行するために、記憶装置710または他の不揮発性記憶装置に記憶されてもよい。
上記の明細書において、本発明の実施形態は、実現例毎に異なる可能性がある多数の特定の詳細を参照して説明されている。したがって、明細書および図面は、限定的な意味ではなく例示として考えられるべきである。本発明の範囲を表す唯一かつ排他的な指標、すなわち、出願人が意図している発明の範囲は、本願の特許請求の範囲の具体的な記載および後続補正の文言上範囲およびその同等物である。

Claims (17)

  1. 方法であって、
    ローカルノードのメモリにおいて、ソースノード上のソースキャッシュラインのコピーである複製キャッシュラインを生成するステップを備え、前記複製キャッシュラインは、バージョンビットとデータビットとを含み、前記バージョンビットは、バージョン値に設定され、
    前記複製キャッシュラインを指し示すポインタを生成するステップを備え、前記ポインタの値は、前記バージョン値を含み、
    前記ポインタを用いて、前記複製キャッシュラインに対してメモリ操作を実行するステップを備え、
    前記メモリ操作を実行するステップは、
    前記ポインタに含まれるバージョン値と、前記複製キャッシュラインの前記バージョンビットが設定された前記バージョン値とを比較するステップと、
    前記比較に基づいて、メモリ破損が発生しているか否かを判断するステップとを含む、方法。
  2. 前記複製キャッシュラインを生成するステップは、
    前記ソースキャッシュラインのバージョン値を判断するステップと、
    前記バージョンビットを前記ソースキャッシュラインのバージョン値に設定するステップとを含む、請求項1に記載の方法。
  3. 前記バージョン値は、メモリ割り当て要求に応答して、前記ソースノードによって生成される、請求項2に記載の方法。
  4. 前記バージョン値を比較するステップは、
    前記複製キャッシュラインが無効であるか否かを判断するステップと、
    前記複製キャッシュラインが無効であるという決定に応答して、前記ソースキャッシュラインを前記複製キャッシュラインにコピーするステップとを含む、請求項1に記載の方法。
  5. 前記ローカルノードによって、前記ソースキャッシュラインに伝播されていない複製キャッシュラインの1つ以上のアップデートをストアバッファに格納するステップと、
    前記複製キャッシュラインが無効であるという決定に応答して、前記1つ以上のアップデートを前記複製キャッシュラインに伝播するステップとをさらに備える、請求項4に記載の方法。
  6. メモリ破損が発生した場合、トラップ操作を実行するステップをさらに備える、請求項1に記載の方法。
  7. 前記トラップ操作を実行するステップは、メモリ破損が発生したことをアプリケーションに通知するステップを含む、請求項6に記載の方法。
  8. 前記トラップ操作を実行するステップは、前記メモリ操作を終了させるステップを含む、請求項6の方法。
  9. コンピュータシステムであって、
    1つ以上のコンピューティングノードを備え、前記1つ以上のコンピューティングノードの各コンピューティングノードは、
    前記各コンピューティングノードのメモリにおいて、前記1つ以上のコンピューティングノードに属するソースノード上のソースキャッシュラインのコピーである複製キャッシュラインを生成するように構成され、前記複製キャッシュラインは、バージョンビットとデータビットとを含み、前記バージョンビットは、バージョン値に設定され、
    前記複製キャッシュラインを指し示すポインタを生成するように構成され、前記ポインタの値は、前記バージョン値を含み、
    前記ポインタを用いて、前記複製キャッシュラインに対してメモリ操作を実行するように構成され、
    前記メモリ操作は、
    前記ポインタに含まれるバージョン値と、前記複製キャッシュラインの前記バージョンビットが設定された前記バージョン値とを比較するステップと、
    前記比較に基づいて、前記複製キャッシュラインが破損しているか否かを判断するステップとを含む、システム。
  10. 複製キャッシュラインを生成するために、前記1つ以上のコンピューティングノードの各コンピューティングノードは、前記ソースキャッシュラインのバージョン値を判断し、前記バージョンビットを前記ソースキャッシュラインのバージョン値に設定するように構成されている、請求項9に記載のシステム。
  11. 前記バージョン値は、ソースノードによって、前記1つ以上のコンピューティングノードのコンピューティングノード毎に生成され、
    前記ソースノードは、メモリ割り当て要求に応答して、バージョン値を生成するように構成されている、請求項10に記載のシステム。
  12. 前記1つ以上のコンピューティングノードのコンピューティングノード毎に前記バージョン値を比較するために、各コンピューティングノードは、前記複製キャッシュラインが無効であるか否かを判断し、前記複製キャッシュラインが無効である場合、前記ソースキャッシュラインを前記複製キャッシュラインにコピーするように構成されている、請求項9に記載のシステム。
  13. 各コンピューティングノードは、前記1つ以上のコンピューティングノードのコンピューティングノード毎に、
    前記ソースキャッシュラインに伝播されていない複製キャッシュラインの1つ以上のアップデートをストアバッファに格納し、
    前記複製キャッシュラインが無効であるという決定に応答して、前記1つ以上のアップデートを前記複製キャッシュラインに伝播するように構成されている、請求項9に記載のシステム。
  14. 前記1つ以上のコンピューティングノードのコンピューティングノード毎にトラップ操作を実行するために、1つ以上のコンピューティングノードは、メモリ破損が発生した場合、トラップ操作を実行するように構成されている、請求項9に記載のシステム。
  15. 前記1つ以上のコンピューティングノードのコンピューティングノード毎にトラップ操作を実行するために、1つ以上のコンピューティングノードは、メモリ破損が発生したことをアプリケーションに通知するように構成されている、請求項14に記載のシステム。
  16. トラップ操作を実行するために、前記1つ以上のコンピューティングノードの各コンピューティングノードは、メモリ操作を終了させるように構成されている、請求項14に記載のシステム。
  17. 1つ以上のプロセッサによって実行されると、請求項1〜8のいずれか1項に記載の方法を実行される命令を格納する1つ以上の非一時的記憶媒体。
JP2017502751A 2014-03-28 2015-03-10 分散型共有メモリアプリケーションのメモリ破損の検出サポート Active JP6588080B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201461972082P 2014-03-28 2014-03-28
US61/972,082 2014-03-28
US14/530,354 US9898414B2 (en) 2014-03-28 2014-10-31 Memory corruption detection support for distributed shared memory applications
US14/530,354 2014-10-31
PCT/US2015/019587 WO2015148100A1 (en) 2014-03-28 2015-03-10 Memory corruption detection support for distributed shared memory applications

Publications (3)

Publication Number Publication Date
JP2017510925A true JP2017510925A (ja) 2017-04-13
JP2017510925A5 JP2017510925A5 (ja) 2018-03-08
JP6588080B2 JP6588080B2 (ja) 2019-10-09

Family

ID=54190571

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017502751A Active JP6588080B2 (ja) 2014-03-28 2015-03-10 分散型共有メモリアプリケーションのメモリ破損の検出サポート

Country Status (5)

Country Link
US (1) US9898414B2 (ja)
EP (1) EP3123331B1 (ja)
JP (1) JP6588080B2 (ja)
CN (1) CN106164870B (ja)
WO (1) WO2015148100A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9292569B2 (en) 2012-10-02 2016-03-22 Oracle International Corporation Semi-join acceleration
US9679084B2 (en) 2013-03-14 2017-06-13 Oracle International Corporation Memory sharing across distributed nodes
US9858140B2 (en) 2014-11-03 2018-01-02 Intel Corporation Memory corruption detection
US10073727B2 (en) * 2015-03-02 2018-09-11 Intel Corporation Heap management for memory corruption detection
US9619313B2 (en) 2015-06-19 2017-04-11 Intel Corporation Memory write protection for memory corruption detection architectures
US10162694B2 (en) 2015-12-21 2018-12-25 Intel Corporation Hardware apparatuses and methods for memory corruption detection
US10191791B2 (en) 2016-07-02 2019-01-29 Intel Corporation Enhanced address space layout randomization
US10803039B2 (en) 2017-05-26 2020-10-13 Oracle International Corporation Method for efficient primary key based queries using atomic RDMA reads on cache friendly in-memory hash index
EP3502898A1 (en) * 2017-12-20 2019-06-26 Vestel Elektronik Sanayi ve Ticaret A.S. Devices and methods for determining possible corruption of data stored in a memory of an electronic device
US10452547B2 (en) 2017-12-29 2019-10-22 Oracle International Corporation Fault-tolerant cache coherence over a lossy network
US10467139B2 (en) 2017-12-29 2019-11-05 Oracle International Corporation Fault-tolerant cache coherence over a lossy network
CN111198746B (zh) * 2018-11-20 2023-05-30 中标软件有限公司 在虚拟化集群中基于共享存储的主机间的通信方法及系统
CN113312385B (zh) * 2020-07-07 2025-02-28 阿里巴巴集团控股有限公司 缓存操作方法、装置及系统,存储介质和操作设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002019115A2 (en) * 2000-08-31 2002-03-07 Oracle International Corporation Managing replacement of data in a cache on a node based on caches of other nodes
JP2004054906A (ja) * 2003-05-21 2004-02-19 Hitachi Ltd メモリアクセス方法およびその実施コンピュータシステム
US20130013843A1 (en) * 2011-07-07 2013-01-10 Zoran Radovic Efficient storage of memory version data
US20130036332A1 (en) * 2011-08-05 2013-02-07 Gove Darryl J Maximizing encodings of version control bits for memory corruption detection
US20130036276A1 (en) * 2011-08-02 2013-02-07 Zoran Radovic Instructions to set and read memory version information

Family Cites Families (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4817140A (en) 1986-11-05 1989-03-28 International Business Machines Corp. Software protection system using a single-key cryptosystem, a hardware-based authorization system and a secure coprocessor
US5133053A (en) 1987-02-13 1992-07-21 International Business Machines Corporation Interprocess communication queue location transparency
JPH0619785A (ja) 1992-03-27 1994-01-28 Matsushita Electric Ind Co Ltd 分散共有仮想メモリーとその構成方法
DE69424597T2 (de) 1993-06-17 2001-03-01 Sun Microsystems, Inc. Erweiterbares Dateiensystem
US5684977A (en) 1995-03-31 1997-11-04 Sun Microsystems, Inc. Writeback cancellation processing system for use in a packet switched cache coherent multiprocessor system
KR0175499B1 (ko) 1996-09-11 1999-04-01 양승택 다중태그 구조의 계층 상호연결망에서의 브로드캐스트 전송방법
US6148377A (en) 1996-11-22 2000-11-14 Mangosoft Corporation Shared memory computer networks
US6151688A (en) 1997-02-21 2000-11-21 Novell, Inc. Resource management in a clustered computer system
US6292705B1 (en) 1998-09-29 2001-09-18 Conexant Systems, Inc. Method and apparatus for address transfers, system serialization, and centralized cache and transaction control, in a symetric multiprocessor system
US6230240B1 (en) 1998-06-23 2001-05-08 Hewlett-Packard Company Storage management system and auto-RAID transaction manager for coherent memory map across hot plug interface
JP3583657B2 (ja) 1998-09-30 2004-11-04 株式会社東芝 中継装置及び通信装置
US6295571B1 (en) 1999-03-19 2001-09-25 Times N Systems, Inc. Shared memory apparatus and method for multiprocessor systems
US6697919B2 (en) * 2000-06-10 2004-02-24 Hewlett-Packard Development Company, L.P. System and method for limited fanout daisy chaining of cache invalidation requests in a shared-memory multiprocessor system
US6917987B2 (en) 2001-03-26 2005-07-12 Intel Corporation Methodology and mechanism for remote key validation for NGIO/InfiniBand™ applications
US7013353B2 (en) 2001-03-30 2006-03-14 Intel Corporation Host-fabric adapter having an efficient multi-tasking pipelined instruction execution micro-controller subsystem
US6789143B2 (en) 2001-09-24 2004-09-07 International Business Machines Corporation Infiniband work and completion queue management via head and tail circular buffers with indirect work queue entries
US6854032B2 (en) 2001-12-04 2005-02-08 Sun Microsystems, Inc. System for accessing a region of memory using remote address translation and using a memory window table and a memory region table
US6757790B2 (en) 2002-02-19 2004-06-29 Emc Corporation Distributed, scalable data storage facility with cache memory
US7197647B1 (en) * 2002-09-30 2007-03-27 Carnegie Mellon University Method of securing programmable logic configuration data
US20060098649A1 (en) 2004-11-10 2006-05-11 Trusted Network Technologies, Inc. System, apparatuses, methods, and computer-readable media for determining security realm identity before permitting network connection
US7664938B1 (en) * 2004-01-07 2010-02-16 Xambala Corporation Semantic processor systems and methods
US20060095690A1 (en) * 2004-10-29 2006-05-04 International Business Machines Corporation System, method, and storage medium for shared key index space for memory regions
US8255922B1 (en) 2006-01-09 2012-08-28 Oracle America, Inc. Mechanism for enabling multiple processes to share physical memory
US20080010417A1 (en) 2006-04-28 2008-01-10 Zeffer Hakan E Read/Write Permission Bit Support for Efficient Hardware to Software Handover
US20080065835A1 (en) * 2006-09-11 2008-03-13 Sun Microsystems, Inc. Offloading operations for maintaining data coherence across a plurality of nodes
US8504791B2 (en) * 2007-01-26 2013-08-06 Hicamp Systems, Inc. Hierarchical immutable content-addressable memory coprocessor
US7882210B2 (en) 2007-08-02 2011-02-01 Sap Ag Dynamic agent formation for efficient data provisioning
US8732386B2 (en) * 2008-03-20 2014-05-20 Sandisk Enterprise IP LLC. Sharing data fabric for coherent-distributed caching of multi-node shared-distributed flash memory
US8229945B2 (en) 2008-03-20 2012-07-24 Schooner Information Technology, Inc. Scalable database management software on a cluster of nodes using a shared-distributed flash memory
US8108361B2 (en) 2008-07-31 2012-01-31 Microsoft Corporation Efficient column based data encoding for large-scale data storage
US8275815B2 (en) * 2008-08-25 2012-09-25 International Business Machines Corporation Transactional processing for clustered file systems
US20100088309A1 (en) 2008-10-05 2010-04-08 Microsoft Corporation Efficient large-scale joining for querying of column based data encoded structures
US8195891B2 (en) * 2009-03-30 2012-06-05 Intel Corporation Techniques to perform power fail-safe caching without atomic metadata
US8856593B2 (en) 2010-04-12 2014-10-07 Sandisk Enterprise Ip Llc Failure recovery using consensus replication in a distributed flash memory system
US8516268B2 (en) 2010-08-23 2013-08-20 Raytheon Company Secure field-programmable gate array (FPGA) architecture
US8972746B2 (en) * 2010-12-17 2015-03-03 Intel Corporation Technique for supporting multiple secure enclaves
US8601473B1 (en) 2011-08-10 2013-12-03 Nutanix, Inc. Architecture for managing I/O and storage for a virtualization environment
WO2014033606A2 (en) * 2012-08-31 2014-03-06 Pradeep Varma Systems and methods of memory and access management
US9292569B2 (en) 2012-10-02 2016-03-22 Oracle International Corporation Semi-join acceleration
US8954391B2 (en) 2012-10-15 2015-02-10 Oracle International Corporation System and method for supporting transient partition consistency in a distributed data grid
US9043559B2 (en) * 2012-10-23 2015-05-26 Oracle International Corporation Block memory engine with memory corruption detection
US9244829B2 (en) 2012-12-20 2016-01-26 Oracle International Corporation Method and system for efficient memory region deallocation
US9471590B2 (en) 2013-02-12 2016-10-18 Atlantis Computing, Inc. Method and apparatus for replicating virtual machine images using deduplication metadata
US9679084B2 (en) 2013-03-14 2017-06-13 Oracle International Corporation Memory sharing across distributed nodes

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002019115A2 (en) * 2000-08-31 2002-03-07 Oracle International Corporation Managing replacement of data in a cache on a node based on caches of other nodes
JP2004054906A (ja) * 2003-05-21 2004-02-19 Hitachi Ltd メモリアクセス方法およびその実施コンピュータシステム
US20130013843A1 (en) * 2011-07-07 2013-01-10 Zoran Radovic Efficient storage of memory version data
US20130036276A1 (en) * 2011-08-02 2013-02-07 Zoran Radovic Instructions to set and read memory version information
US20130036332A1 (en) * 2011-08-05 2013-02-07 Gove Darryl J Maximizing encodings of version control bits for memory corruption detection

Also Published As

Publication number Publication date
CN106164870B (zh) 2019-05-28
EP3123331A1 (en) 2017-02-01
US20150278103A1 (en) 2015-10-01
WO2015148100A1 (en) 2015-10-01
JP6588080B2 (ja) 2019-10-09
CN106164870A (zh) 2016-11-23
EP3123331B1 (en) 2021-08-25
US9898414B2 (en) 2018-02-20

Similar Documents

Publication Publication Date Title
JP6588080B2 (ja) 分散型共有メモリアプリケーションのメモリ破損の検出サポート
US9536104B2 (en) Managing global cache coherency in a distributed shared caching for clustered file systems
US8429134B2 (en) Distributed database recovery
US10599535B2 (en) Restoring distributed shared memory data consistency within a recovery process from a cluster node failure
CN108021338B (zh) 用于实现两层提交协议的系统和方法
US20150089137A1 (en) Managing Mirror Copies without Blocking Application I/O
JP2565658B2 (ja) リソースの制御方法及び装置
US10127054B2 (en) Bootstrapping server using configuration file stored in server-managed storage
CN108228481B (zh) 用于保证数据一致性的方法和设备
US20150135004A1 (en) Data allocation method and information processing system
US11960742B1 (en) High-performance, block-level fail atomicity on byte-level non-volatile media

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180126

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180126

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20181130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190108

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190314

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190820

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190911

R150 Certificate of patent or registration of utility model

Ref document number: 6588080

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250