JP6334824B2 - メモリコントローラ、情報処理装置および処理装置 - Google Patents

メモリコントローラ、情報処理装置および処理装置 Download PDF

Info

Publication number
JP6334824B2
JP6334824B2 JP2017528259A JP2017528259A JP6334824B2 JP 6334824 B2 JP6334824 B2 JP 6334824B2 JP 2017528259 A JP2017528259 A JP 2017528259A JP 2017528259 A JP2017528259 A JP 2017528259A JP 6334824 B2 JP6334824 B2 JP 6334824B2
Authority
JP
Japan
Prior art keywords
data
memory
cache
controller
nonvolatile
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.)
Active
Application number
JP2017528259A
Other languages
English (en)
Other versions
JPWO2017010004A1 (ja
Inventor
祐介 城田
祐介 城田
金井 達徳
達徳 金井
昌也 樽家
昌也 樽家
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kioxia Corp
Original Assignee
Toshiba Memory Corp
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 Toshiba Memory Corp filed Critical Toshiba Memory Corp
Publication of JPWO2017010004A1 publication Critical patent/JPWO2017010004A1/ja
Application granted granted Critical
Publication of JP6334824B2 publication Critical patent/JP6334824B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0808Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/22Employing cache memory using specific memory technology
    • G06F2212/222Non-volatile memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/31Providing disk cache in a specific location of a storage system
    • G06F2212/312In storage controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/604Details relating to cache allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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

Description

本発明の実施形態は、メモリコントローラ、情報処理装置および処理装置に関する。
MRAM(Magnetoresistive Random Access Memory)、PCM(Phase Change Memory)、Memristorなどのような、プロセッサのメモリバスに直結できるバイトアドレッサブルで高速な不揮発メモリをメインメモリ(永続メモリ)として使用するコンピュータシステムは、高信頼・高性能が要求されるオンライントランザクション処理システムなどのアプリケーションに利用すると、重要なデータをメインメモリに保存すれば該データを永続化できる。そのため、従来システムのように、ハードディスクやSSD(Solid State Drive)にデータを保存する場合と比較して、高速にデータを永続化できるので、オンライントランザクション処理データベースアプリケーションなどのアプリケーションを高性能化できる可能性を有している。
また、トランザクション処理システムは高信頼性も要求されるため、プロセッサ上で実行するプログラムによる不揮発メモリへの書き込みのアトミシティ(書き込み途中の状態で終わらない性質)やオーダリング(順序性)を保証するデータの永続的な更新処理方式が必要である。
特開2004−362570号公報
しかしながら、従来技術では、十分に高性能・高信頼なデータ永続化処理方式を実現することは困難であった。
実施形態のメモリコントローラは、不揮発キャッシュメモリとコントローラとを有する。不揮発キャッシュメモリは、メモリコントローラに接続された不揮発メインメモリに記憶されたデータの一部を記憶することなどに利用される。コントローラは、不揮発キャッシュメモリへの書き込みや読み出しを制御する。メモリコントローラは、複数のキャッシュメモリ間のデータの不一致が起こらないようにキャッシュの一貫性を維持・管理するための手順を示すプロトコルを保証するインターコネクトを介して処理装置と接続される。バスやネットワークで接続されてもよい。コントローラは、プロトコルを利用して、処理装置が、不揮発メインメモリの何れかの領域に記憶されたデータを更新したことを検出した後に、その更新済みのデータをメモリコントローラへ送信させ、その更新済みのデータを不揮発キャッシュメモリに書き込む。
第1の実施形態の情報処理装置の構成の一例を示す図。 対比例の情報処理装置の構成の一例を示す図。 変形例の情報処理装置の構成の一例を示す図。 実施形態のアトミシティを説明するための図。 実施形態のアトミシティを説明するための図。 第1の実施形態の永続データの更新を行う処理の一例を示す図。 第1の実施形態の永続データが永続化される手順の一例を示す図。 第1の実施形態の永続データが永続化される手順の詳細を示す図。 第1の実施形態のメモリコントローラの動作例を示す図。 変形例の永続データが永続化される手順の一例を示す図。 第1の実施形態の永続データの永続化の完了確認手順の一例を示す図。 第1の実施形態の情報処理装置の動作例を示す図。 第2の実施形態の永続データが永続化される手順の一例を示す図。 第2の実施形態の情報処理装置の動作例を示す図。 第2の実施形態の情報処理装置の動作例を示す図。
以下、添付図面を参照しながら、本発明に係るメモリコントローラ、情報処理装置および処理装置の実施形態を詳細に説明する。
(第1の実施形態)
具体的な内容を説明する前に、従来技術と併せて本実施形態の概要を説明する。MRAMやPCMやMemristorのような、プロセッサのメモリバスに直結できるバイトアドレッサブルで高速な不揮発メモリをメインメモリとして使用するコンピュータシステムは、高信頼・高性能が要求されるオンライントランザクション処理システムなどに利用すると、重要なデータをメインメモリに保存すれば該データを永続化できる。そのため、従来システムのように、ハードディスクやSSDにデータを保存する場合と比較して、データベースのデータを永続化する処理(コミット処理)を高速化できることが期待されている。
本実施形態では、これらのメインメモリ向けの高速な不揮発メモリよりもさらに高速に動作する不揮発キャッシュメモリを、不揮発メインメモリと接続されたメモリコントローラに内蔵させ、不揮発キャッシュメモリに書き込まれたデータの永続性を保証することで、コミット処理をさらに高速化する。不揮発キャッシュメモリは、例えばSRAM並みの速度で動作するMRAM、PCM、Memristorなどの不揮発メモリである。
図1に示すように、本実施形態では、不揮発キャッシュメモリ10を内蔵したメモリコントローラ100が、MESIFプロトコル、後述のQPIで実装されているプロトコル(QPIプロトコル)、MESIプロトコル、MOESIプロトコルなどの複数のプロセッサ(あるいはプロセッサコア)のキャッシュメモリ間のデータの不一致が起こらないようにする(キャッシュメモリ間の一貫性を維持する)ための手順を示すキャッシュコヒーレンスプロトコルを保証するQPI(Intel QuickPath Interconnect)などの高速なインターコネクト(キャッシュコヒーレント・インターコネクト)200を介して、プロセッサ(典型的にはCPU、「処理装置」に対応)300と接続される。図1の詳細な構成については後述する。
これらのキャッシュコヒーレンスプロトコルは、一般的にはプロセッサ同士を接続するために設計されているが、本実施形態ではプロセッサにメモリコントローラを接続し、メモリコントローラ側からも制御するためにこれを用いる。また、これらのキャッシュコヒーレンスプロトコルは、一般的には揮発キャッシュ同士のコヒーレンス維持のために設計されているが、本実施形態では揮発キャッシュと不揮発キャッシュ(あるいは不揮発キャッシュ同士)のコヒーレンス維持のためにこれを用い、揮発キャッシュに対する更新を不揮発キャッシュに反映させて更新を永続化する。
図1の構成は、例えば図2に示すような、QPIなどのインターコネクト200で2つのプロセッサ(第1プロセッサ400、第2プロセッサ500)を直接接続したマルチプロセッサシステム(例えばIntel XEONプロセッサシステム)に含まれる2つのプロセッサのうちの一方を、不揮発キャッシュメモリ10を内蔵したメモリコントローラ100に置き換えた構成であると捉えることもできる。
図2の例では、第1プロセッサ400は、例えばDRAM(Dynamic Random Access Memory)などの第1揮発メインメモリ410に接続され、第2プロセッサ500は、例えばDRAMなどの第2揮発メインメモリ510に接続されている。第1プロセッサ400は、第1揮発メインメモリ410または第2揮発メインメモリ510に対するデータの読み書きを行う1以上のプロセッサコア420(説明の便宜上、1つのプロセッサコア420のみを例示、他も同様)と、第1揮発メインメモリ410または第2揮発メインメモリ510に記憶されたデータの一部を記憶する第1揮発キャッシュメモリ430とを有する。また、第2プロセッサ500は、第1揮発メインメモリ410または第2揮発メインメモリ510に対するデータの読み書きを行う1以上のプロセッサコア520と、第1揮発メインメモリ410または第2揮発メインメモリ510に記憶されたデータの一部を記憶する第2揮発キャッシュメモリ530とを有する。
ここでは、メモリコントローラ100さえ用意すれば、QPIなどのインターコネクト200を介して、XEONプロセッサシステムのようなマルチプロセッサシステムを構成する既存のプロセッサと該メモリコントローラ100とを接続するだけで、本実施形態の構成を実現することも可能である。
また、図3は、他の構成例として3つのプロセッサ(第1プロセッサ400、第3プロセッサ600、第4プロセッサ700)、および、不揮発キャッシュメモリ10を内蔵したメモリコントローラ100の各々がQPIなどのインターコネクト200を介して相互に接続される構成を示しているが、これに限られるものではなく、例えば複数のプロセッサと複数のメモリコントローラ100とが互いに接続される構成であってもよく、スケーラブルなコンピュータシステムの構築が可能である。
図3の例では、第1プロセッサ400は、例えばDRAMなどの第1揮発メインメモリ410に接続され、第3プロセッサ600は、例えばDRAMなどの第3揮発メインメモリ610に接続され、第4プロセッサ700は、例えばDRAMなどの第4揮発メインメモリ710に接続され、メモリコントローラ10は、例えばMRAMなどの不揮発メインメモリ110に接続されている。
第1プロセッサ400は、何れかのメインメモリ(第1揮発メインメモリ410、不揮発メインメモリ110、第3揮発メインメモリ610、第4揮発メインメモリ710)に対するデータの読み書きを行う1以上のプロセッサコア420と、何れかのメインメモリに記憶されたデータの一部を記憶する第1揮発キャッシュメモリ430とを有する。また、第3プロセッサ600は、何れかのメインメモリに対するデータの読み書きを行う1以上のプロセッサコア620と、何れかのメインメモリに記憶されたデータの一部を記憶する第3揮発キャッシュメモリ630とを有する。また、第4プロセッサ700は、何れかのメインメモリに対するデータの読み書きを行う1以上のプロセッサコア720と、何れかのメインメモリに記憶されたデータの一部を記憶する第4揮発キャッシュメモリ730とを有する。メモリコントローラ100の具体的な構成については後述する。
また、トランザクション処理システムは高信頼性も要求されるため、プロセッサ上で実行するプログラムによる不揮発メモリへの書き込みのアトミシティ(書き込み途中の状態で終わらない性質)やオーダリング(順序性)を保証するデータの永続的な更新処理方式が必要である。
アトミシティを保証する方式として、例えば、WAL(Write Ahead Logging)やシャドウページなどと呼ばれるデータの複数バージョンを管理する方式が広く知られている。これらデータ永続化を実現するプログラミング技法では、最初はメインメモリに記憶されたオリジナルのデータを更新せずに、まずはメインメモリの別の領域に確保したデータの値を更新してデータの新しいバージョンを作成することで明示的にデータの複数のバージョンを生成し、メモリバリアを挟んで、その後でオリジナルのデータを更新する、または、オリジナルのデータへの参照を新しいバージョンのデータへの参照に切り替える等の処理を行う。しかし、この方法では、図2の第1揮発メインメモリ410と第2揮発メインメモリ510を不揮発メモリに置き換えただけのシステムにおいては、新しいバージョンを作成するために不揮発メインメモリ(永続メモリ)へのアクセスが必要になるため、十分に高速化できない。
また、上述の複数バージョンを管理する方式の場合、メモリバリア以前の書き込みが不揮発メインメモリのセルに到着した後に、メモリバリア後の書き込みが行われるようにタイミングを制御する必要がある。不揮発メインメモリへの書き込みのオーダリングを保証する上で問題になるのが、プロセッサコアと不揮発メインメモリの間に存在する各種キャッシュやライトバッファやライトコンバインバッファなどのメモリへの書き込みタイミングを調整するためのバッファなどの揮発メモリである。この存在により、プロセッサコアがライト命令でデータを書く場合において、不揮発メインメモリに到達するデータの順番が入れ替わる、あるいは、直ちに不揮発メインメモリには書き込まれずにデータがキャッシュに留まっているといった事態が起こる。そのため、順序性を保証するためには、例えばキャッシュフラッシュ命令を利用して、データをキャッシュから順番に追い出しながら処理を進める必要がある。しかし、キャッシュフラッシュ命令はレイテンシが大きいため、性能面で課題がある。
本実施形態では、QPIなどのインターコネクト200を介して、不揮発キャッシュメモリ10を内蔵したメモリコントローラ100と、プロセッサ300とを接続し、アトミシティとオーダリングを保証しつつ高速なコミット処理を実現するための手段を提供する。
一つ目の手段は、キャッシュコヒーレンスプロトコルを利用して、コミット処理の対象となるデータ(永続データ)をアプリケーションなどが書き込んだ直後に高速に、メモリコントローラ100に内蔵された不揮発キャッシュメモリ10に転送して追い出して永続化するための手段である。より具体的な内容については後述するが、本実施形態では、複数のプロセッサ(プロセッサコア)のキャッシュメモリの状態が矛盾しないように制御するキャッシュコヒーレンスプロトコルの特性を利用して、プロセッサコアで永続データに対して直接書き込み処理(インプレース更新)を行うと、即座に更新内容がメモリコントローラ100に転送され、その転送された更新済みのデータが不揮発キャッシュメモリ10に書き込まれて永続化される。
メモリコントローラ100側から見ると、不揮発キャッシュメモリ10を内蔵するメモリコントローラ100は、キャッシュを持つプロセッサ300とキャッシュコヒーレンスプロトコルで両キャッシュの一貫性を保証するインターコネクトで接続され、接続されたプロセッサ300が永続データに対して書き込みを行うと、プロセッサ300内にある書き込み後のデータをメモリコントローラ100側に転送させるために、キャッシュコヒーレンスプロトコルで決められた、更新したデータを送付する手順を引き起こす要求リクエストをプロセッサ300に対して送付し、送られてきたデータを不揮発キャッシュメモリ10に対して書き込み永続化する。
図4および図5を用いて、本実施形態におけるアトミシティについて説明する。プロセッサ300のプロセッサコア320は、明示的な複数バージョン管理方式を使わずに、不揮発メインメモリ110の領域(アドレス)Xに記憶されたデータ(値A)のインプレース更新を実施しようとする。領域Xに記憶されたデータ(値A)は不揮発メインメモリ110より読み出され、QPIなどのインターコネクト200を介してプロセッサ300側に送られ、プロセッサコア320でインプレース更新すると、更新されたデータ(値A’)は、キャッシュコヒーレンスプロトコルに従って、インターコネクト200を介してプロセッサ300と接続されたメモリコントローラ100へ追い出される。そして、更新されたデータ(値A’)は、不揮発キャッシュメモリ10に書き込まれる。更新前のデータ(値A)は、まだ不揮発メインメモリ110上に存在するので、この時点で、領域Xに対応するデータとして、不揮発メインメモリ110上のデータ(値A)と、不揮発キャッシュメモリ10上のデータ(値A’)とが同時に存在する状態を、明示的に別の領域(アドレス)などに複数バージョンを作ることなく実現でき、アトミシティを保証できる。永続データの複数のバージョンが永続メモリ上に同時に存在しているので、この時点でコミット処理を完了できる状態になっている。すなわち、更新されたデータを、不揮発メインメモリ110まで書き込むことなくより高速な不揮発キャッシュメモリ10に書き込むだけで、コミット処理を完了できるので、より高速なコミット処理が可能になる。
二つ目の手段は、例えばトランザクションのコミット処理の完了を確定するために、更新された永続データの書き込みの完了(言い換えれば、更新された永続データの永続化の完了)を確認するメモリバリアのための手段である。図4のように、状態(b)にしてメモリバリアを実行した後に、状態(c)にする必要があり、この順序を保証することがオーダリングの保証である。一般に、プロセッサコアが書き込み処理をしたと認識しても、更新されたデータは、プロセッサコアとメインメモリの間にあるキャッシュやライトバッファなどの揮発メモリに留まっていて、更新されたデータがどのタイミングで実際にメインメモリに書き込まれたかをプロセッサコア(つまりプロセッサコアで動作するアプリケーション)が知ることは難しい。本実施形態では、キャッシュコヒーレンスプロトコルを利用して、プロセッサ300(アプリケーション)が永続データを更新すると、更新されたデータを即座にメモリコントローラ100に内蔵された不揮発キャッシュメモリ10へ追い出すための手段を提供しており、この手段が、オーダリングを保証する役割の一つを担っている。ただし、オーダリングを保証するためには、更新されたデータが不揮発キャッシュメモリ10に到達して実際の書き込み処理が完了したのかを確認する手段も必要である。より具体的な内容については後述するが、本実施形態では、キャッシュコヒーレンスプロトコルを利用して、プロセッサ300(アプリケーション)が、メモリコントローラ10へ追い出したデータ(更新されたデータ)の書き込み処理の完了(永続化の完了)を確認するための手段を提供することで、オーダリングを保証している。
以上のように、本実施形態では、キャッシュコヒーレンスプロトコルを利用した上記2つの手段でアトミシティとオーダリングを保証しつつ、高速なコミット処理を実現する。QPIなどのインターコネクト200は、XEONプロセッサなどのプロセッサが接続されるように設計されており、インターコネクト200を介してメモリコントローラ100とプロセッサを接続しても、プロセッサは、インターコネクト200を介した接続先も自身と同様のプロセッサであるとみなして、キャッシュコヒーレンスプロトコルに従ったメッセージのやり取りを行う。これを利用して、メモリコントローラ100は、更新された永続データや更新されるタイミングの情報をプロセッサから得ることを特徴の一つとする。
以下、本実施形態の具体的な内容を詳細に説明する。一例として、図1に示す情報処理装置1を例に挙げて説明する。図1に示すように、情報処理装置1は、不揮発メインメモリ110が接続されたメモリコントローラ100と、揮発メインメモリ310が接続されたプロセッサ300と、を備え、これらはインターコネクト200を介して接続される。インターコネクト200は、複数のキャッシュメモリ間のデータの不一致が起こらないようにするための手順を示すプロトコル(キャッシュコヒーレンスプロトコル)を保証するインターコネクトであり、例えばQPIなどで構成される。メモリコントローラ100とプロセッサ300は、バスやネットワークなどで接続されてもよい。
プロセッサ300は、例えばXEONプロセッサなどのCPUであり、インターコネクト200が保証するキャッシュコヒーレンスプロトコルに従って動作する。図1に示すように、プロセッサ300は、1以上のプロセッサコア320(説明の便宜上、1つのプロセッサコア320のみを例示)と、揮発キャッシュメモリ330とを有する。プロセッサコア320は、揮発メインメモリ310または不揮発メインメモリ110に対するデータの読み書きを行う。揮発キャッシュメモリ330は、揮発メインメモリ310または不揮発メインメモリ110に記憶されたデータの一部を記憶する。
この例では、1以上のプロセッサコア320ごとに、L1データキャッシュ、L1命令キャッシュ、L2キャッシュなどのプライベートキャッシュを有している(不図示)。また、例えばL3キャッシュなどのキャッシュ階層における最下位に位置するキャッシュであるラストレベルキャッシュ(LLC)は各プロセッサコア320で共有されるシェアドキャッシュである。これらはSRAM(Static Random Access Memory)などの揮発性のキャッシュメモリで構成されることを前提としており、ここでは、これらを揮発キャッシュメモリ330と称する。以下では、このような構成を前提として説明するが、これに限られるものではない。また、プロセッサ320は、プロセッサコア320の指示に従ってデータの読み書きを制御するDRAMコントローラなどのメモリコントローラ(不図示)を内包しており、これを介して揮発メインメモリ310が接続されている。また、ラストレベルキャッシュ(LLC)などは不揮発キャッシュであってもよい。
揮発メインメモリ310は、例えばDRAMなどの揮発メモリで構成されるメインメモリ(主記憶装置)である。プロセッサ300に接続されるメインメモリとしては、例えばDRAM以外の揮発メモリであってもよいし、例えばMRAMなどの不揮発メモリであってもよい。
また、図1に示すように、メモリコントローラ100は、不揮発キャッシュメモリ10と、コントローラ20とを有する。不揮発キャッシュメモリ10は、不揮発メインメモリ110に記憶されたデータの一部を記憶するなどに利用される。コントローラ20は、不揮発キャッシュメモリ110へのデータの書き込み及び読出しなどのメモリアクセスを制御する。プロセッサ300は、このメモリコントローラ100を介して不揮発メインメモリ110と接続されている。
本実施形態における不揮発メインメモリ110は、MRAMで構成されるが、これに限られるものではない。例えば不揮発メインメモリ110は、PCM、ReRAM(Resistive Random Acess Memory)、FeRAM(Ferroelectric Random Access Memory)、Memristorなどで構成されてもよいし、DRAMとNAND Flashを組み合わせたNVDIMM(Non‐volatile DIMM)であってもよい。また、不揮発メインメモリ110は、バッテリでバックアップされる(電源がオフになってもバッテリからの電力供給が継続される)揮発メモリ(DRAMやSRAMなど)であってもよい。
コントローラ20は、インターコネクト200が保証するキャッシュコヒーレンスプロトコルを利用して、プロセッサ300が、不揮発メインメモリ110の何れかの領域に対応するデータを更新したことを検出した後に、その更新済みのデータをメモリコントローラ100へ送信させ、その更新済みのデータを不揮発キャッシュメモリ10に書き込む。
より具体的には、コントローラ20は、プロセッサ300から、不揮発メインメモリ110の何れかの領域に対応するデータを要求する第1の要求を受信した後に、該領域に対応するデータと、該データを不揮発キャッシュメモリ10に保持していたことを示す情報とを含む第1応答メッセージを、インターコネクト200を介してプロセッサ300へ送信する。コントローラ20は、第1応答メッセージを送信した後に、プロセッサ10から、該領域に対応するキャッシュラインを無効にすることを要求する第2の要求を受信したときに、プロセッサ300(アプリケーション)が、該領域に対応するデータを更新したことを検出する。なお、キャッシュラインとは、キャッシュメモリに保持される単位情報であり、例えば不揮発メインメモリ110上の特定の領域に対応するキャッシュラインとは、該特定の領域に対応するデータのコピーである。ここでは、コントローラ20は、第1の要求により要求された、不揮発メインメモリ110の何れかの領域に対応するデータを不揮発キャッシュメモリ10に保持していない場合であっても、不揮発メインメモリ110の該領域から読み出したデータと、該データを不揮発キャッシュメモリ10に保持していたことを示す情報とを含む第1応答メッセージをプロセッサ300へ送信する。
また、コントローラ20は、上記第2の要求を受信した後に、該領域に対応するキャッシュラインを無効にする処理は行わずに、第2の要求に対する応答として、該領域に対応するキャッシュラインを無効にしたことを通知するための第2応答メッセージを、インターコネクト200を介してプロセッサ300へ送信する。そして、コントローラ20は、第2応答メッセージを送信した後に、該領域に対応するデータを要求する第3の要求を、インターコネクト200を介してプロセッサ300へ送信し、第3の要求に対する応答として、プロセッサ300により更新済みのデータを受信する。そして、コントローラ20は、その受信した更新済みのデータを不揮発キャッシュメモリ10に書き込む。ここでは、上記第3の要求は、プロセッサ300が更新した該領域に対応するデータの更新を行うために該領域に対応するデータを要求する情報であり、メモリコントローラ100側に第2のプロセッサが接続されていると仮定した場合に第2のプロセッサで該領域に対応するデータを参照しようとして失敗(ライトミスやリードミス)した場合に送信される情報である。また、コントローラ20は、上記第3の要求に対する応答として受信した更新済みのデータの更新は行わない。要するに、コントローラ20は、更新済みのデータを送付する手順を引き起こす第3の要求をプロセッサ300に対して送信し、第3の要求に対する応答として送られてきたデータを不揮発キャッシュメモリ10に対して書き込む。更新済みのデータを送付する手順は、プロセッサ300内の更新済みのデータをメモリコントローラ100側に転送させるために、インターコネクト200が保証するプロトコル(キャッシュコヒーレンスプロトコル)で決められた手順である。以上の詳細な動作例については後述する。
ここで、プロセッサ300とメモリコントローラ100とを接続するインターコネクト200で保証しているキャッシュコヒーレンスプロトコルは、QPIで保証しているQPIプロトコルやMESIFプロトコルのようなキャッシュコヒーレンスプロトコルであるが、これに限られるものではなく、例えばMSIプロトコル、MESIプロトコル、MOESIプロトコル、MESIFプロトコルそのものでもよいし、これらを拡張・変更した任意のプロトコルであってもよい。例えばMESIFプロトコルにMOESIプロトコルのOwned状態を追加したプロトコルであってもよい。他の実施形態についても同様である。例えば既存のXEONプロセッサとQPIを用いて、独自のメモリコントローラ100を設計・実装してQPI経由で接続する構成であってもよい。本実施形態のインターコネクト200でサポートしているQPIプロトコルやMESIFプロトコルのようなキャッシュコヒーレンスプロトコルでは、Modified状態、Exclusive状態、Shared状態、Invalid状態、Foward状態というキャッシュラインの状態を設け、基本動作はQPIプロトコルやMESIFプロトコルに準ずる。詳細については、後述の詳細な動作例の中で随時説明していく。
以上の構成の情報処理装置1において、インプレース更新により図4の永続データの複数バージョンを暗黙的に作成してコミット処理する例を説明する。まず、事前準備として、永続データを保存・管理するホームノード(Home node、例えばXEONプロセッサシステムの場合はCPUが配置される)が、メモリコントローラ100が接続されるノードになるように配置する。例えば永続データを管理するホームノードの番号を指定するAPI(アプリケーションプログラムインタフェース)を利用することで、プログラムが設定することができる。例えば図3のように、情報処理装置のシステム構成上、第2プロセッサ500が存在してよい位置にメモリコントローラ100を配置し、このノードをホームノードにする場合において、APIは、例えば永続データが記憶される領域(メモリ)を確保する際に、メモリ確保の関数の引数にホームノード番号の「2」を指定できるようなものであってもよい。これにより、図5のように、永続データが不揮発メインメモリ110の領域Xに配置される。要するに、本実施形態の情報処理装置1は、永続データの配置先となるメインメモリを設定するための設定手段を備える形態であればよい。この設定手段の一例として、APIが挙げられる。あるいは、永続データを記憶するためにメモリを確保するための専用の関数を使うと、図5のように、永続データが不揮発メインメモリ110の領域Xに自動的に配置されるようなものであってもよい。
図6は、アプリケーションが不揮発メインメモリ110の領域Xに対応するデータの更新(永続化)を行う処理の一例を示す図である。まず、プロセッサコア320(アプリケーション)は、不揮発メインメモリ110の領域Xに記憶されたデータ(この例では値Aを示すデータ)をリード命令で読み出して揮発キャッシュメモリ330にキャッシュし、そのキャッシュライン(第1キャッシュライン)に対して、値A’をライト命令で書き込んでインプレース更新する(ステップS701)。後述する「永続データを高速に不揮発キャッシュメモリ10に追い出して永続化する手段」により、プロセッサ300の揮発キャッシュメモリ330に書き込まれた更新済みのデータ(値A’)は揮発キャッシュメモリ330上に留まることなく即座に不揮発キャッシュメモリ10へ追い出される。そして、プロセッサコア320(アプリケーション)は、インターコネクト200を介して接続された外部装置(この例ではメモリコントローラ100)による更新済みのデータの永続化が完了したのかを確認する永続化確認命令を実行する(ステップS702)。この命令を実行すると、後述する「永続データの永続化の完了を確認する手段」により、プロセッサ300(アプリケーション)側で、外部装置(この例ではメモリコントローラ100)による更新済みのデータの永続化が完了したのかを検出(確認)することが可能となる。以下、「永続データを高速に不揮発キャッシュメモリ10に追い出して永続化する手段」と「永続データの永続化の完了を確認する手段」の動作の詳細を説明する。
まず、「永続データを高速に不揮発キャッシュメモリ10に追い出して永続化する手段」で永続データが永続化される手順の一例を説明する。図7のステップS1に示すように、まず、プロセッサコア320は、不揮発メインメモリ110の領域Xに記憶されたデータ(値A)を更新するために、領域Xに記憶されたデータ(値A)を読み出して揮発キャッシュメモリ330に保存する。以下では、揮発キャッシュメモリ330のキャッシュラインのうち、不揮発メインメモリ110の領域Xに対応するキャッシュラインを「第1キャッシュライン」と称する場合がある。次に、図7のステップS2に示すように、プロセッサコア320は、第1キャッシュラインに対して、値A’をライト命令で書き込んで第1キャッシュラインのデータ(領域Xに対応するデータ)をインプレース更新する。次に、図7のステップS3に示すように、メモリコントローラ100が、不揮発キャッシュメモリ10のキャッシュラインのうち、不揮発メインメモリ110の領域Xに対応するキャッシュライン(「第2キャッシュライン」と称する場合がある)への書き込みを行うように振る舞う(実際には書き込まない)と(ステップS3−1)、プロセッサ300は更新済みのデータをメモリコントローラ100へ追い出す(ステップS3−2)。そして、メモリコントローラ100は、プロセッサ300から受信した更新済みのデータ(領域Xに対応するデータ)を不揮発キャッシュメモリ10に書き込む。
図8は、図7の各ステップ(S1〜S3)の詳細な手順の一例を示す図である。まず、ステップS1に対応する内容を説明する。まず、プロセッサコア320が、不揮発メインメモリ110の領域Xのアドレスを指定して、領域Xに記憶されたデータを読み出すリード命令を実行すると、この例では、揮発キャッシュメモリ330は、領域Xに対応するキャッシュラインをキャッシュしていないINVALID状態になっているので、キャッシュミスが発生し、領域Xのアドレスのホームノードに対して、キャッシュミスの第1スヌープリクエスト(領域Xに対応するデータを要求する情報)が送られる。第1スヌープリクエストは上述の第1の要求に相当する。この例では、ホームノードの位置には、プロセッサの代わりに本実施形態のメモリコントローラ100が接続されており、メモリコントローラ100に第1スヌープリクエストが到着する(他のプロセッサが存在する場合はそれらにも届く)。
この際、仮にメモリコントローラ100の代わりに、キャッシュコヒーレンスプロトコルに従って動作する第2のプロセッサが存在し、第2のプロセッサで、領域Xに対応するキャッシュラインをキャッシュしていないと仮定すると、第2のプロセッサは、不揮発メインメモリ110の領域Xに記憶されたデータ(値A)が入ったキャッシュラインを不揮発メインメモリ110から読み出し、インターコネクト200を介してプロセッサ300へ転送する。そして、プロセッサ300は、転送されたキャッシュライン(領域Xに対応するキャッシュライン)を揮発キャッシュメモリ(ラストレベルキャッシュ)330へ保存する。そうすると、プロセッサ300では、この領域Xに対応するキャッシュライン(第1キャッシュライン)は、キャッシュラインの内容が不揮発メインメモリ110から読み出されたときと変更がなく、かつ、他のどのプロセッサのキャッシュメモリにも同じアドレスのキャッシュラインが入っていない状態であるExclusive状態になってしまう。
後述する理由により、本実施形態では、プロセッサ300の第1のキャッシュラインは、他のプロセッサも、領域Xに対応するキャッシュラインをキャッシュしている状態であるShared状態、あるいは、他のプロセッサも、領域Xに対応するキャッシュラインをキャッシュしていて、かつ、領域Xに対応するキャッシュラインを要求された場合は唯一コピーを転送する形で応答することができる状態であるFoward状態になるように、メモリコントローラ100から制御することを狙いとする。そこで、メモリコントローラ100のコントローラ20は、第1スヌープリクエストが到着すると、領域Xに対応するキャッシュラインを唯一キャッシュしているExclusive状態、あるいは、Foward状態であるように振る舞い、領域Xに対応するキャッシュライン(不揮発メインメモリ110の領域Xに記憶されたデータ(値A)を含む)と、領域Xに対応するデータ(キャッシュライン)をキャッシュしている旨を示す情報とを含む第1応答メッセージを、プロセッサ300へ返す。この例では、実際にはメモリコントローラ100の不揮発キャッシュメモリ10には、領域Xに対応するキャッシュラインはキャッシュされていないので、コントローラ20は、不揮発メインメモリ110の領域Xに記憶されたデータを読み出して不揮発キャッシュメモリ10にキャッシュし(キャッシュしなくてもよい)、領域Xから読み出したデータと共に、領域Xに対応するデータをキャッシュしている旨を示す情報(実際にはキャッシュしていなくても)とを含む第1応答メッセージをプロセッサ300へ返す。
この第1応答メッセージを受信したプロセッサ300は、インターコネクト200を介して接続されたプロセッサ(第2のプロセッサ)が領域Xに対応するキャッシュラインを保持していると判断するので、第1応答メッセージに含まれるキャッシュラインを第1キャッシュラインとして揮発キャッシュメモリ330に保持する。これで、プロセッサコア320は、領域Xに記憶されたデータ(値A)をリードすることができる。この段階で、プロセッサ300の第1キャッシュラインはFoward状態になっていて、プロセッサ300からは、インターコネクト200を介して接続されたプロセッサ(第2のプロセッサ)が存在(実際に存在するのはメモリコントローラ100)し、第2のプロセッサのキャッシュラインのうち、領域Xに対応するキャッシュライン(第2キャッシュライン)はShared状態になっていると見えている。
次に、ステップS2に対応する内容を説明する。まず、プロセッサコア320は、領域Xに対応するデータに対して、ライト命令でライトする(領域Xのアドレスを指定してライト命令を実行する)。領域Xに対応するキャッシュライン(第1キャッシュライン)は揮発キャッシュメモリ330に存在するので、第1キャッシュラインに対して値A’をライトすることになる。ここで、第1キャッシュラインの状態がFoward状態で、他のプロセッサが有する同じアドレスのキャッシュライン(領域Xに対応するキャッシュライン)を無効化する必要があるので、プロセッサ300は、キャッシュコヒーレンスプロトコルに基づき、他のプロセッサに対して、領域Xに対応するキャッシュラインを無効にすることを要求するインバリデートリクエストをブロードキャストする。このインバリデートリクエストは、上述の第2の要求に相当する。上記で第1キャッシュラインをFoward状態にするようにメモリコントローラ100側から制御したのは、このインバリデートリクエストを引き起こすためである。つまり、このインバリデートリクエストが発行されることにより、領域Xに対応するデータを更新するライト命令が実行されることをメモリコントローラ100が知ることができる。仮にメモリコントローラ100の代わりに、キャッシュコヒーレンスプロトコルに従って動作する第2のプロセッサが存在する場合は、第2のプロセッサは、インバリデートリクエストを受信すると、その要求に従ってキャッシュラインのインバリデート処理を行う必要がある。ただし、本実施形態では、メモリコントローラ100が領域Xに対応するデータの更新のタイミングを知るために、メモリコントローラ100側がキャッシュコヒーレンスプロトコルを利用して意図的に発行させているインバリデートリクエストなので、メモリコントローラ100はインバリデート処理を実際に行う必要は必ずしもない。そのため、メモリコントローラ100のコントローラ20は、インバリデートリクエストを受け取ると、インバリデート処理は行わずに、インバリデートリクエストに対する応答として、領域Xに対応するキャッシュラインをキャッシュコヒーレンスプロトコルに従って無効化したように振る舞うために、無効にしたことを通知するための第2応答メッセージをプロセッサ300に返す。この段階で、メモリコントローラ100は、領域Xに対応するデータの更新のタイミングを知ることが出来たことになる。インバリデートリクエストの応答である第2応答メッセージを受け取ったプロセッサ300は、他のプロセッサが有している同じアドレスのキャッシュライン(領域Xに対応するキャッシュライン)は無効化されたと判断し、第1キャッシュラインに対して実際のライト処理を行い、第1キャッシュラインの状態をModified状態に変更する。
次に、ステップS3に対応する内容を説明する。メモリコントローラ100のコントローラ20は、インバリデートリクエストの応答である第2応答メッセージを返した後、メモリコントローラ100の代わりに第2のプロセッサが存在すると仮定した場合に、第2のプロセッサが第2キャッシュラインに対する書き込みを行おうとして失敗した時に送る、ライトミスによる第2スヌープリクエスト(領域Xに対応するデータを要求する情報)を送る。これは、ステップS2でプロセッサ300により更新された領域Xに対応するデータを、インターコネクト200を介して即座にメモリコントローラ100側に引き寄せることを目的としている。第2スヌープリクエストは、上述の第3の要求に相当している。
第2スヌープリクエストを受信したプロセッサ300は、第2スヌープリクエストに対する応答として、第1キャッシュラインの更新済みのデータ(値A’)を含む第3応答メッセージを送信し、第1キャッシュラインをINVALID状態に変更する。仮に、メモリコントローラ100の代わりに第2のプロセッサが存在する場合は、第2のプロセッサは、第2スヌープリクエストの応答である第3応答メッセージを受信したら、第3応答メッセージに含まれるデータ(値A’)で不揮発メインメモリ110の内容を更新するが、ここでは、メモリコントローラ100は、プロセッサ300により更新済みの領域Xに対応するデータを、インターコネクト200を介して即座にメモリコントローラ100側に引き寄せるために、意図的に第2スヌープリクエストを発行しているので、第3応答メッセージに含まれる更新済みのデータ(値A’)で不揮発メインメモリ110の内容を更新することはしない(ライトミスを引き起こしたがそのライト自体も行わない)。そもそも、更新してしまうと、領域Xに対応するデータとして、複数のバージョンを作成することができなくなってしまう。ここで第3応答メッセージに含まれるデータこそが領域Xに対応するデータの更新内容なので、メモリコントローラ100のコントローラ20は、このデータを不揮発キャッシュメモリ10に書き込む。より具体的には、例えば、不揮発キャッシュメモリ10のうち第2キャッシュラインが保持される領域(不揮発キャッシュメモリ10のうち領域Xに対応する領域)に書き込む。これにより、プロセッサ300により更新済みの領域Xに対応するデータが不揮発キャッシュに書き込まれたことになる。これで図7に示したように、領域Xに対応するデータとして、値Aを示す旧バージョンと、値A’を示す最新バージョンが存在する状態になり、コミット処理の完了が可能な状態になる。本実施形態の情報処理装置1は、不揮発メインメモリ110上の第1データ(例えば領域Xに記憶されたデータ(値A))をプロセッサ300に読み出して更新し、更新済みのデータ(値A’)を不揮発キャッシュメモリ10に第2データとして保存した時点で、データを永続化するコミット処理を完了する。
図9は、以上のメモリコントローラ100のコントローラ20の動作例を示すフローチャートである。コントローラ20は、プロセッサ300から上述の第1スヌープリクエストを受信すると、上述のインバリデートリクエストをプロセッサに発行させるために、第1スヌープリクエストに対する応答として、上述の第1応答メッセージを送信する(ステップS901)。次に、プロセッサ300から上述のインバリデートリクエストを受信すると、コントローラ20は、上述の第1スヌープリクエストで要求されたデータの更新がプロセッサ300側で行われたことを検出する。そして、コントローラ20は、実際にはインバリデート処理を行わずに、インバリデートリクエストに対する応答として、上述の第2応答メッセージを送信する(ステップS902)。次に、コントローラ20は、更新済みのデータを即座にメモリコントローラ100側に引き寄せるために、上述の第2のスヌープリクエストをプロセッサ300へ送信する(ステップS903)。次に、コントローラ20は、第2スヌープリクエストに対する応答として受信した上述の第3応答メッセージに含まれるデータ(プロセッサ300により更新済みの領域Xに対応するデータ)を不揮発キャッシュメモリ10に書き込む(ステップS904)。
また、図10に示すように、ステップS3でライトミスによる第2スヌープリクエストを送る代わりに、リードミスによる第2スヌープリクエストを送ってもよい。
次に、「永続データの永続化の完了を確認する手段」で永続データの永続化の完了を確認する手順の一例を説明する。上述の第2のスヌープリクエストに対する応答として、第3応答メッセージを送信した後、図11に示すように、プロセッサ300は、第1キャッシュラインに対する読み出しを行おうとして失敗した時に送る、リードミスによる第3スヌープリクエスト(領域Xに対応するデータ(キャッシュライン)を要求する情報)を送る。ここでは、上述したように第1キャッシュラインはINVALID状態になっているので第3スヌープリクエストが発行され、その発行された第3スヌープリクエストはインターコネクト200を経由してメモリコントローラ100に到着する。第3スヌープリクエストを受信したコントローラ10は、上述の第3応答メッセージに含まれるデータ(値A’)の不揮発キャッシュメモリ10への書き込みが完了した後に(つまり永続化が完了した後に)、第3スヌープリクエストに対する応答として、値A’を示すデータを含む第4応答メッセージを送信する。プロセッサ300が第4応答メッセージを受信すると、第1キャッシュラインは例えばShared状態になり、値A’を示すデータの読み込みが完了すると、メモリコントローラ100側で永続データの永続化が完了したことが保証されるので、コミット処理を完了することができる。
要するに、本実施形態のプロセッサ300は、インターコネクト200を介して接続された外部装置(ここではメモリコントローラ100)からの、プロセッサ300が更新した、不揮発メインメモリ110の何れかの領域Xに対応するデータの参照を行うために該領域Xに対応するデータを要求する第3の要求(この例では上述の第2スヌープリクエスト)に対するプロトコル(インターコネクト200が保証するキャッシュコヒーレンスプロトコル)に基づいた応答として、キャッシュメモリ(この例では揮発キャッシュメモリ330)に記憶されたデータのうち該領域Xに対応するデータを送信した後に、その送信したデータの永続化が完了したことを確認するための確認要求を外部装置へ送信し、確認要求に対する応答に基づいて、その送信したデータの永続化が完了したことを確認することができる。ここでは、上記確認要求の一例として、上述の第3スヌープリクエストを挙げて説明したが、これに限られるものではない。
また、「Intel Architecture Instruction Set Extensions Programming Reference(319433-022, OCTOBER 2014)のCHAPTER 11: MEMORY INSTRUCTIONS」という非特許文献にある、メモリ書き込みの永続化を確認するIntelのPcommit命令を本実施形態で実装する場合には、図11に示すような方法で実現することができる。
図12は、永続データの永続化の完了を確認する場合の情報処理装置1の動作例を示すフローチャートである。プロセッサ300は、上述の第2のスヌープリクエストに対する応答として、上述の第3応答メッセージを送信した後、上述の第3スヌープリクエストを、インターコネクト200を介してメモリコントローラ100へ送信する(ステップS1201)。次に、第3スヌープリクエストを受信したメモリコントローラ100のコントローラ20は、第3スヌープリクエストを受信する前にプロセッサ300から受信した第3応答メッセージに含まれるデータ(値A’)の不揮発キャッシュメモリ10への書き込みの完了を確認した後に、上述の第4応答メッセージを、インターコネクト200を介してプロセッサ300へ送信する(ステップS1202)。第4応答メッセージを受信したプロセッサ300は、読み出し可能な状態になった第1キャッシュラインからデータ(値A’)の読み出しを完了すると、揮発キャッシュメモリ330からメモリコントローラ100へ追い出したデータ(上述の第3応答メッセージに含まれるデータ)の永続化が完了したことを確認する(ステップS1203)。
また、永続データの永続化の完了を確認する別の手段として、上述の第2のスヌープリクエストに対する応答として、第3応答メッセージを送信した後、数サイクル〜数十サイクルという決められた一定時間待つことで、不揮発キャッシュメモリ10への書き込みが完了したことを確認する手段もある。つまり、第3応答メッセージを送信した後、一定時間が経過したときに、不揮発キャッシュメモリ10への書き込みが完了したことを確認する手段であってもよい。一定時間とは、プロセッサ300からメモリコントローラ100へデータを送るのに必要な時間と、メモリコントローラ100が不揮発キャッシュメモリ10にデータを書き込む処理(永続化)を完了するのに必要な時間との合計よりも長い時間である。この時間は予め測定や設計時などに決定されてアプリケーションなどに提供される値である。この方法は後述の第2の実施形態についても同様に適用することができる。また、前述のPcommit命令はこの方法で実装されてもよく、後述の第2の実施形態についても同様である。
以上に説明したように、本実施形態のメモリコントローラ100は、複数のキャッシュメモリ間のデータの不一致が起こらないようにするための手順を示すキャッシュコヒーレンスプロトコルを保証するインターコネクト200を介してプロセッサ300と接続される。そして、メモリコントローラ100のコントローラ20は、インターコネクト200が保証するキャッシュコヒーレンスプロトコルを利用して、プロセッサ300が、メモリコントローラ100に接続された不揮発メインメモリ110の何れかの領域Xに対応するデータを更新したことを検出した後に、その更新済みのデータをメモリコントローラ100へ送信させ、プロセッサ300から受信した更新済みのデータを不揮発キャッシュメモリ10に書き込む。更新前のデータは、まだ不揮発メインメモリ110上に存在するので、この時点で、領域Xに対応するデータとして、不揮発メインメモリ110上のデータと、不揮発キャッシュメモリ10上のデータとが同時に存在する状態を、明示的に複数バージョンを作ることなく実現でき、アトミシティを保証できる。また、更新済みのデータを、不揮発メインメモリ110まで書き込むことなく不揮発キャッシュメモリ10に書き込むだけで、コミット処理を完了できるので、より高速なコミット処理が可能になる。
また、上述したように、本実施形態のプロセッサ300は、メモリコントーラ300からの、プロセッサ300が更新した、不揮発メインメモリ110の領域Xに対応するデータの参照を行うために領域Xに対応するデータを要求する第3の要求(この例では上述の第2スヌープリクエスト)に対するプロトコルに基づいた応答として、揮発キャッシュメモリ330に記憶されたデータのうち領域Xに対応するデータを送信した後に(この例では上述の第3応答メッセージを送信した後に)、その送信したデータの永続化が完了したことを確認するための確認要求(この例では上述の第3スヌープリクエスト)を送信し、確認要求に対する応答に基づいて、その送信したデータの永続化が完了したことを確認する。
すなわち、本実施形態では、キャッシュコヒーレンスプロトコルを利用して、プロセッサ300が永続データを更新すると、更新されたデータを即座にメモリコントローラ100に内蔵された不揮発キャッシュメモリ10へ追い出す手段を提供するとともに、プロセッサ300が、メモリコントローラ100へ追い出したデータ(更新されたデータ)の永続化の完了を確認するための手段を提供することで、オーダリングを保証している。
以上より、本実施形態によれば、アトミシティとオーダリングを保証しつつ、高速なコミット処理を実現することができる。したがって、高性能・高信頼なデータ永続化処理方式を実現することができる。
なお、上述の本実施形態では、コヒーレンスをとる単位としてキャッシュラインを用いたが、この限りではなく、OSのページ単位や、ブロック単位などの任意の粒度であってもよいのは言うまでもない。また、プロセッサ300はCPUだけに限らず、GPUなどのアクセラレータなどであってもよいのも言うまでもない。後述の第2の実施形態でも同様である。
(第2の実施形態)
次に、第2の実施形態について説明する。上述の第1の実施形態と共通する部分については適宜に説明を省略する。本実施形態では、図13に示すように、プロセッサ300とメモリコントローラ100は、既存のキャッシュコヒーレンスプロトコルとは異なる、コミット処理向けに最適化したキャッシュコヒーレンスプロトコル(以下、「最適化プロトコル」と称する場合がある)を保証するインターコネクト800を介して接続される点で上述の第1の実施形態と相違する。インターコネクト800は、プロセッサ300の揮発キャッシュメモリ330と、メモリコントローラ100の不揮発キャッシュメモリ10の一貫性を維持するための最適化プロトコルを保証する。プロセッサ300およびメモリコントローラ100の基本的な構成は第1の実施形態と同様であるが、プロセッサ300およびメモリコントローラ100は、最適化プロトコルに従って動作する。
本実施形態では、最適化プロトコルを利用して、上述の第1の実施形態と同様に、「永続データを高速に不揮発キャッシュメモリ10に追い出して永続化する手段」と「永続データの永続化の完了を確認する手段」を提供する。
まず、「永続データを高速に不揮発キャッシュメモリ10に追い出して永続化する手段」で永続データが永続化される手順の一例を説明する。図13のステップS11に示すように、まず、プロセッサ300は、不揮発メインメモリ110の領域Xに記憶されたデータ(値A)を更新するために、領域Xに記憶されたデータを読み出して揮発キャッシュメモリ330に保存する。より具体的には以下のとおりである。まず、プロセッサコア320が、不揮発メインメモリ110の領域Xのアドレスを指定して、領域Xに記憶されたデータ(値A)を読み出すリード命令を実行すると、この例では、揮発キャッシュメモリ330は、領域Xに対応するキャッシュラインをキャッシュしていないINVALID状態になっているので、キャッシュミスが発生し、領域Xのアドレスのホームノード(この例ではメモリコントローラ100)に対して、領域Xに対応するデータを要求する第4の要求が送られる。第4の要求を受信したメモリコントローラ100のコントローラ20は、不揮発メインメモリ110の領域Xに記憶されたデータ(値A)を読み出して不揮発キャッシュメモリ10にキャッシュする(第2キャッシュラインをキャッシュする)。なお、この例ではキャッシュしているがキャッシュはしなくてもよい。そして、コントローラ20は、第4の要求に対する応答として、領域Xに対応するキャッシュライン(領域Xから読み出したデータ(値A)を含む第2キャッシュラインの内容)を含む第5応答メッセージをプロセッサ300へ返す。第5応答メッセージを受信したプロセッサ300のプロセッサコア320は、第5応答メッセージに含まれるキャッシュラインを第1キャッシュラインとして揮発キャッシュメモリ330に保持する。これで、プロセッサコア320は、領域Xに記憶されたデータ(値A)をリードすることができる。以上のステップS11の終了時点で、第1キャッシュラインの状態は、次に永続化を行う書き込みが行われたらホームノードへ書き込み内容を転送する状態(FORWARD TO HOMENODE)になる。なお、永続化を行う必要がないデータは書き込み内容を転送する状態にする必要はなく、Exclusive状態などの、キャッシュラインの内容がメインメモリから読み出されたときと変更がない一般的な状態(転送が不要な状態)になる。
次に、図13のステップS12に示すように、プロセッサ300(アプリケーション)は、第1キャッシュラインに対して、値A’をライト命令で書き込んで第1キャッシュラインに記憶されたデータをインプレース更新し、更新済みのデータをメモリコントローラ100へ追い出す。より具体的には以下のとおりである。まず、プロセッサコア320は、領域Xに対応するデータに対して、ライト命令でライトする(領域Xのアドレスを指定してライト命令を実行する)。領域Xに対応するキャッシュライン(第1キャッシュライン)は揮発キャッシュメモリ330に存在するので、第1キャッシュラインに対して値A’をライトすることになる。ここでは、第1キャッシュラインの状態は「FORWARD TO HOMENODE」なので、第1キャッシュラインに対する書き込み内容が即座に揮発キャッシュメモリ330からメモリコントローラ100に転送される。転送後、第1キャッシュラインの状態はINVALID状態になる。そして、メモリコントローラ100のコントローラ20は、プロセッサ300から受信した更新済みのデータを不揮発キャッシュメモリ10に書き込む。より具体的には、コントローラ20は、プロセッサ300から受信した更新済みの第1キャッシュラインのコピーを、第2キャッシュラインに書き込んで反映させる。このときには、不揮発メインメモリ110の更新は行わない。これにより、領域Xに対応するデータとして、値Aを示す旧バージョンと、値A’を示す最新バージョンが同時に存在する状態になり、コミット処理の完了が可能な状態になる。
図14は、以上の情報処理装置1の動作例を示すフローチャートである。各ステップの具体的な内容は上述したとおりであるが、まずプロセッサ300のプロセッサコア320は、上述の第4の要求を、インターコネクト800を介してメモリコントローラ100へ送信する(ステップS1301)。次に、第4の要求を受信したメモリコントローラ100のコントローラ20は、第2キャッシュラインをキャッシュし、第4の要求に対する応答として上述の第5応答メッセージを返す(ステップS1302)。次に、第5応答メッセージを受信したプロセッサ300のプロセッサコア320は、第5応答メッセージに含まれるキャッシュライン(第2キャッシュラインの内容)を第1キャッシュラインとしてキャッシュする(ステップS1303)。次に、プロセッサコア320は、第1キャッシュラインに対するライトを実行し(ステップS1304)、更新済みのデータ(更新済みの第1キャッシュラインのコピー)を、インターコネクト800を介してメモリコントローラ100へ転送する(ステップS1305)。次に、メモリコントローラ100のコントローラ20は、プロセッサ300からインターコネクト800を介して受信した更新済みのデータを、第2キャッシュラインに書き込んで反映させる(ステップS1306)。
要するに、本実施形態では、プロセッサ300とメモリコントローラ100は、上述の最適化プロトコルを保証するインターコネクト800を介して接続される。そして、プロセッサ300が不揮発メインメモリ110の何れかの領域Xに対応するデータの更新を行うと、更新済みのデータが上述の最適化プロトコルに従ってメモリコントローラ100へ転送され、コントローラ20は、プロセッサ300から受信した更新済みのデータを不揮発キャッシュメモリ10に書き込む。
次に、「永続データの永続化の完了を確認する手段」で永続データの永続化の完了を確認する手順の一例を説明する。プロセッサコア320(アプリケーション)は、以上のようにして第1キャッシュラインに対する書き込み内容をメモリコントローラ100へ転送した後、その転送したデータの永続化の完了を確認するための確認要求を、インターコネクト800を介してメモリコントローラ100へ送信し、確認要求に対する応答に基づいて、その転送したデータの永続化が完了したことを確認する。この例では、プロセッサコア320は、第1キャッシュラインに対する書き込み内容をメモリコントローラ100へ転送した後、第1キャッシュラインに対する読み出しを試み、失敗し、読み出しを失敗した時に送られる第5の要求(領域Xに対応するデータ(キャッシュライン)を要求する情報)を送る。ここでは、上述したように第1キャッシュラインはINVALID状態になっているので第5の要求が発行され、その発行された第5の要求はインターコネクト800を経由してメモリコントローラ100に到着する。第5の要求を受信したコントローラ10は、第5の要求を受信する前にプロセッサ300から受信した更新済みの領域Xに対応するデータ(値A’)の不揮発キャッシュメモリ10への書き込みが完了した後に(つまり永続化が完了した後に)、第5の要求に対する応答として、値A’を示すデータを含む第6応答メッセージを送信する。プロセッサ300が第6応答メッセージを受信すると、第1キャッシュラインは読み込むことが可能な状態になり、値A’を示すデータの読み込みを完了することで、メモリコントローラ100側で永続データの永続化が完了したことが保証されるので、コミット処理を完了することができる。この例では、永続化の確認用に領域Xを利用しているが、この限りではなく、例えば領域Xとは別の領域を確認用に利用してもよい。その場合は第1キャッシュラインに対する書き込み内容をメモリコントローラ100に転送後に行われた第1キャッシュラインの状態をINVALID状態にする処理は必要ない。
図15は、永続データの永続化の完了を確認する場合の情報処理装置1の動作例を示すフローチャートである。プロセッサ300は、以上のようにして第1キャッシュラインに対する書き込み内容をメモリコントローラ100へ転送した後、上述の第5の要求を、インターコネクト800を介してメモリコントローラ100へ送信する(ステップS1401)。次に、第5の要求を受信したメモリコントローラ100のコントローラ20は、第5の要求を受信する前にプロセッサ300から受信した更新済みの領域Xに対応するデータ(値A’)の不揮発キャッシュメモリ10への書き込みの完了を確認した後に、上述の第6応答メッセージを、インターコネクト800を介してプロセッサ300へ送信する(ステップS1402)。第6応答メッセージを受信したプロセッサ300は、読み出し可能な状態になった第1キャッシュラインからデータ(値A’)の読み出しを完了すると、揮発キャッシュメモリ330からメモリコントローラ100へ追い出したデータ(更新済みの領域Xに対応するデータ)の永続化が完了したことを確認する(ステップS1403)。永続データの永続化の完了を確認する別の方法として、上述の第1の実施形態で述べたように、第1キャッシュラインに対する書き込み内容をメモリコントローラ100へ転送した後、上述の第5の要求を送信するかわりに、一定時間待つことで永続化を確認する方法を適用してもよい。
なお、前述のIntelのPcommit命令もこのように実装されてもよい。
以上、本発明の実施形態を説明したが、上述の各実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。

Claims (13)

  1. メモリコントローラであって、
    前記メモリコントローラに接続された不揮発メインメモリに記憶されたデータの一部を記憶する不揮発キャッシュメモリと、
    前記不揮発キャッシュメモリへのデータの書き込みを制御するコントローラと、を有し、
    前記メモリコントローラは、
    複数のキャッシュメモリ間のデータの不一致が起こらないようにするための手順を示すプロトコルを保証するインターコネクトを介して処理装置と接続され、
    前記コントローラは、
    前記プロトコルを利用して、前記処理装置が、前記不揮発メインメモリの何れかの領域に対応するデータを更新したことを検出した後に、その更新済みのデータを前記メモリコントローラへ送信させ、その更新済みのデータを前記不揮発キャッシュメモリに書き込む、
    メモリコントローラ。
  2. 前記コントローラは、
    前記処理装置から、前記不揮発メインメモリの何れかの領域に対応するデータを要求する第1の要求を受信した後に、前記領域に対応するデータと、該データを前記不揮発キャッシュメモリに保持していたことを示す情報とを含む第1応答メッセージを送信し、
    前記第1応答メッセージを送信した後に、前記処理装置から、前記領域に対応するキャッシュラインを無効にすることを要求する第2の要求を受信したときに、前記処理装置が、前記領域に対応するデータを更新したことを検出する、
    請求項1に記載のメモリコントローラ。
  3. 前記コントローラは、
    前記第1の要求により要求された前記領域に対応するデータを前記不揮発キャッシュメモリに保持していない場合であっても、前記不揮発メインメモリの前記領域から読み出したデータと、該データを前記不揮発キャッシュメモリに保持していたことを示す情報とを含む前記第1応答メッセージを送信する、
    請求項2に記載のメモリコントローラ。
  4. 前記コントローラは、
    前記第2の要求を受信した後に、前記領域に対応するキャッシュラインを無効にする処理は行わずに、前記第2の要求に対する応答として、前記領域に対応するキャッシュラインを無効にしたことを通知するための第2応答メッセージを送信し、
    前記第2応答メッセージを送信した後に、前記領域に対応するデータを要求する第3の要求を送信し、
    前記第3の要求に対する応答として、前記処理装置により更新済みのデータを受信し、その受信した更新済みのデータを前記不揮発キャッシュメモリに書き込む、
    請求項2または3に記載のメモリコントローラ。
  5. 前記第3の要求は、前記処理装置が更新した前記領域に対応するデータの更新を行うために前記領域に対応するデータを要求する情報であり、
    前記コントローラは、前記第3の要求に対する応答として受信した更新済みのデータの更新は行わない、
    請求項4に記載のメモリコントローラ。
  6. 前記コントローラは、更新済みのデータを送付する手順を引き起こす第3の要求を前記処理装置に対して送信し、前記第3の要求に対する応答として送られてきたデータを前記不揮発キャッシュメモリに対して書き込み、
    前記更新済みのデータを送付する手順は、前記処理装置内の更新済みのデータを前記メモリコントローラ側に転送させるために、前記プロトコルで決められた手順である、
    請求項1に記載のメモリコントローラ。
  7. 前記プロトコルは、MESIFプロトコル、QPIプロトコル、MESIプロトコル、MOESIプロトコル、MSIプロトコルの何れかである、
    請求項1に記載のメモリコントローラ。
  8. メモリコントローラと、処理装置とを備える情報処理装置であって、
    前記メモリコントローラは、
    前記メモリコントローラに接続された不揮発メインメモリに記憶されたデータの一部を記憶する不揮発キャッシュメモリと、
    前記不揮発キャッシュメモリへのデータの書き込みを制御するコントローラと、を有し、
    複数のキャッシュメモリ間のデータの不一致が起こらないようにするための手順を示すプロトコルを保証するインターコネクトを介して前記処理装置と接続され、
    前記コントローラは、
    前記プロトコルを利用して、前記処理装置が、前記不揮発メインメモリの何れかの領域に対応するデータを更新したことを検出した後に、その更新済みのデータを前記メモリコントローラへ送信させ、その更新済みのデータを前記不揮発キャッシュメモリに書き込む、
    情報処理装置。
  9. 前記不揮発メインメモリ上の第1データを前記処理装置に読み出して更新し、更新済みのデータを前記不揮発キャッシュメモリに第2データとして保存した時点で、データを永続化するコミット処理を完了する、
    請求項8に記載の情報処理装置。
  10. 永続データの配置先となるメインメモリを設定するための設定手段を備える、
    請求項8に記載の情報処理装置。
  11. 処理装置であって、
    外部装置に接続された不揮発メインメモリに記憶されたデータの読み書きを行うプロセッサコアと、
    前記不揮発メインメモリに記憶されたデータの一部を記憶するキャッシュメモリと、を有し、
    前記処理装置は、
    複数のキャッシュメモリ間のデータの不一致が起こらないようにするための手順を示すプロトコルを保証するインターコネクトを介して前記外部装置と接続され、
    前記外部装置からの、前記処理装置が更新した、前記不揮発メインメモリの何れかの領域に対応するデータの参照を行うために前記領域に対応するデータを要求する第3の要求に対する前記プロトコルに基づいた応答として、前記キャッシュメモリに記憶されたデータのうち前記領域に対応するデータを送信した後に、その送信したデータの永続化が完了したことを確認するための確認要求を送信し、前記確認要求に対する応答に基づいて、その送信したデータの永続化が完了したことを確認する、
    処理装置。
  12. 処理装置であって、
    外部装置に接続された不揮発メインメモリに記憶されたデータの読み書きを行うプロセッサコアと、
    前記不揮発メインメモリに記憶されたデータの一部を記憶するキャッシュメモリと、を有し、
    前記処理装置は、
    複数のキャッシュメモリ間のデータの不一致が起こらないようにするための手順を示すプロトコルを保証するインターコネクトを介して前記外部装置と接続され、
    前記外部装置からの、前記処理装置が更新した、前記不揮発メインメモリの何れかの領域に対応するデータの参照を行うために前記領域に対応するデータを要求する第3の要求に対する前記プロトコルに基づいた応答として、前記キャッシュメモリに記憶されたデータのうち前記領域に対応するデータを送信した後、一定時間を経過したときに、その送信したデータの永続化が完了したことを確認する、
    処理装置。
  13. 処理装置と、前記処理装置とインターコネクトで接続されるメモリコントローラと、を備え、
    前記処理装置は、
    前記メモリコントローラに接続された不揮発メインメモリに記憶されたデータの読み書きを行い、前記不揮発メインメモリに記憶されたデータの一部を記憶するキャッシュメモリを有し、
    前記メモリコントローラは、
    前記不揮発メインメモリに記憶されたデータの一部を記憶する不揮発キャッシュメモリと、前記不揮発キャッシュメモリへのデータの書き込みを制御するコントローラと、を有し、
    前記インターコネクトは、前記処理装置の前記キャッシュメモリと、前記メモリコントローラの前記不揮発キャッシュメモリの一貫性を維持するためのプロトコルを保証し、
    前記処理装置が前記不揮発メインメモリの何れかの領域に対応するデータの更新を行うと、更新済みのデータが前記プロトコルに従って前記メモリコントローラへ転送され、
    前記コントローラは、前記処理装置から受信した更新済みのデータを前記不揮発キャッシュメモリに書き込む、
    情報処理装置。
JP2017528259A 2015-07-16 2015-07-16 メモリコントローラ、情報処理装置および処理装置 Active JP6334824B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/070438 WO2017010004A1 (ja) 2015-07-16 2015-07-16 メモリコントローラ、情報処理装置および処理装置

Publications (2)

Publication Number Publication Date
JPWO2017010004A1 JPWO2017010004A1 (ja) 2017-12-28
JP6334824B2 true JP6334824B2 (ja) 2018-05-30

Family

ID=57757275

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017528259A Active JP6334824B2 (ja) 2015-07-16 2015-07-16 メモリコントローラ、情報処理装置および処理装置

Country Status (3)

Country Link
US (1) US10635587B2 (ja)
JP (1) JP6334824B2 (ja)
WO (1) WO2017010004A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10120808B2 (en) * 2016-04-22 2018-11-06 Arm Limited Apparatus having cache memory disposed in a memory transaction path between interconnect circuitry and a non-volatile memory, and corresponding method
JP6907787B2 (ja) 2017-07-28 2021-07-21 富士通株式会社 情報処理装置および情報処理方法
US11132145B2 (en) 2018-03-14 2021-09-28 Apple Inc. Techniques for reducing write amplification on solid state storage devices (SSDs)
KR102446121B1 (ko) * 2018-06-29 2022-09-22 주식회사 멤레이 메모리 제어 장치 및 이를 포함하는 메모리 시스템
US10705957B1 (en) * 2018-12-19 2020-07-07 International Business Machines Corporation Selectively updating a coherence state in response to a storage update
US10733102B2 (en) * 2018-12-19 2020-08-04 International Business Machines Corporation Selectively updating a coherence state in response to a storage update

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7389308B2 (en) 2003-05-30 2008-06-17 Microsoft Corporation Shadow paging
US8019937B2 (en) * 2004-07-21 2011-09-13 Infortrend Technology, Inc. Applying storage device commit-cached-data-to-media functionality to improve data security in systems that allow storage devices to cache writes
US20080183972A1 (en) * 2007-01-26 2008-07-31 James Norris Dieffenderfer Snoop Filtering Using a Snoop Request Cache
CN102696010B (zh) * 2009-09-08 2016-03-23 才智知识产权控股公司(2) 用于将数据高速缓存在固态存储设备上的装置、系统和方法
WO2014142908A1 (en) * 2013-03-14 2014-09-18 Hewlett-Packard Development Company, L.P. Multiversioned nonvolatile memory hierarchy for persistent memory
US9690710B2 (en) * 2015-01-15 2017-06-27 Qualcomm Incorporated System and method for improving a victim cache mode in a portable computing device

Also Published As

Publication number Publication date
US20180136849A1 (en) 2018-05-17
WO2017010004A1 (ja) 2017-01-19
JPWO2017010004A1 (ja) 2017-12-28
US10635587B2 (en) 2020-04-28

Similar Documents

Publication Publication Date Title
JP6334824B2 (ja) メモリコントローラ、情報処理装置および処理装置
US9170946B2 (en) Directory cache supporting non-atomic input/output operations
TWI676891B (zh) 轉譯後備緩衝器管理
US10157133B2 (en) Snoop filter for cache coherency in a data processing system
TWI432963B (zh) 加速器之低成本快取一致
TWI526829B (zh) 電腦系統、用於存取儲存裝置之方法及電腦可讀儲存媒體
US10402327B2 (en) Network-aware cache coherence protocol enhancement
US20170192886A1 (en) Cache management for nonvolatile main memory
TWI530786B (zh) 具有快取記憶體連貫性協定之記憶體裝置、系統及主記憶體以及管理快取記憶體連貫性協定之方法
JP7010809B2 (ja) デデュープ可能なメモリキャッシュ及びそのための動作方法
US20180095906A1 (en) Hardware-based shared data coherency
JP7193547B2 (ja) キャッシュ・メモリ動作の調整
JP2000250884A (ja) 不均等メモリ・アクセス・コンピュータ・システムにおいてエヴィクション・プロトコルを提供するための方法およびシステム
TW201447748A (zh) 處理裝置
US10877890B2 (en) Providing dead-block prediction for determining whether to cache data in cache devices
US11126564B2 (en) Partially coherent memory transfer
US7669013B2 (en) Directory for multi-node coherent bus
CN112673358B (zh) 在基于区域的高速缓存目录方案中加速对私有区域的访问
CN114341821A (zh) 生产者至消费者的主动直接高速缓存传送
US20210349840A1 (en) System, Apparatus And Methods For Handling Consistent Memory Transactions According To A CXL Protocol
TWI506537B (zh) 使用反射記憶體實行同調之技術
US11726920B2 (en) Tag processing for external caches
JP6565729B2 (ja) 演算処理装置、制御装置、情報処理装置及び情報処理装置の制御方法
JP6631317B2 (ja) 演算処理装置、情報処理装置および情報処理装置の制御方法
JP2009223511A (ja) キャッシュメモリシステム、データ処理装置および記憶装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170829

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: 20180327

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180426

R150 Certificate of patent or registration of utility model

Ref document number: 6334824

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350