JP2013182356A - 演算装置、情報処理装置および演算方法 - Google Patents

演算装置、情報処理装置および演算方法 Download PDF

Info

Publication number
JP2013182356A
JP2013182356A JP2012044881A JP2012044881A JP2013182356A JP 2013182356 A JP2013182356 A JP 2013182356A JP 2012044881 A JP2012044881 A JP 2012044881A JP 2012044881 A JP2012044881 A JP 2012044881A JP 2013182356 A JP2013182356 A JP 2013182356A
Authority
JP
Japan
Prior art keywords
cache
sector
data
cpu
memory
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
JP2012044881A
Other languages
English (en)
Other versions
JP5565425B2 (ja
Inventor
Toshikazu Ueki
俊和 植木
Masayuki Okada
誠之 岡田
Hideyuki Koinuma
秀之 鯉沼
Takeshi Sugizaki
剛 杉崎
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2012044881A priority Critical patent/JP5565425B2/ja
Priority to US13/678,978 priority patent/US20130227219A1/en
Priority to EP12194012.6A priority patent/EP2634702B1/en
Priority to KR1020120137109A priority patent/KR101414384B1/ko
Priority to CN2012105075429A priority patent/CN103294608A/zh
Publication of JP2013182356A publication Critical patent/JP2013182356A/ja
Application granted granted Critical
Publication of JP5565425B2 publication Critical patent/JP5565425B2/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/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • 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/12Replacement control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • 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/1012Design facilitation
    • 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/1056Simplification

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】プログラムにフラッシュ要求を発行させるための修正量を削減する。
【解決手段】CPU12は、キャッシュメモリ12aが保持するデータのうち、CPU12が実行するアプリケーションが指定した期間内に更新したデータを示すセクタ情報を記憶する。そして、CPU12は、アプリケーションが指定した期間が終了した場合は、キャッシュメモリ12aが保持するデータのうち、セクタ情報が示すデータをキャッシュメモリ12aからメモリ17〜24に書き戻す。
【選択図】図2

Description

本発明は、演算装置、情報処理装置および演算方法に関する。
従来、複数の演算装置がメモリを共有する情報処理システムが知られている。このような情報処理システムの一例として、メモリが記憶するデータを各演算装置がキャッシュする共有メモリ方式の情報処理システムが知られている。
このような情報処理システムでは、いずれかの演算装置がダウンした際にリカバリを容易にするため、共有メモリ上にデータのバックアップを作成する。しかし、キャッシュ機能を有する演算装置は、バックアップデータの更新を行う際にバックアップ対象となるデータと古いバックアップデータをキャッシュし、キャッシュしたバックアップデータの更新を行う。このため、演算装置は、更新したバックアップデータをメモリに書き戻す前に故障が生じると、更新したバックアップデータをメモリに書き戻せない場合がある。
そこで、キャッシュメモリのデータをメモリに書き戻すフラッシュ要求を発行するようプログラムを修正し、演算装置がキャッシュするバックアップデータをメモリに書き戻す技術が知られている。以下、図37〜39を用いて、演算装置がキャッシュしたデータをメモリに書き戻すキャッシュフラッシュ処理について説明する。
図37は、バックアップ処理を説明するための図である。また、図38は、フラッシュ処理について説明するための図である。また、図39は、演算装置がダウンした際の処理を説明するための図である。なお、図37に示す例では、演算装置が共有メモリにデータの書き戻す処理について、ソフトウェア側から見た処理の内容を記載し、図38、図39には、ハードウェア側から見た処理の内容を記載している。
図37に示す例では、演算装置70と演算装置71とは、それぞれコアとキャッシュメモリとを有し、演算装置71に接続されたメモリ72を共有する。まず、図37中(A)に示すように、演算装置70が実行するプログラムは、メモリ72に格納されたメモリ72に格納されているデータであるカレントデータのバックアップを行う場合には、カレントデータのロード要求を発行する。そして、演算装置70が実行するプログラムは、図37中(B)に示すように、読み取ったカレントデータのバックアップデータをメモリ72に格納させるため、ストア要求の発行とともに、フラッシュ要求を発行する。
一方、プログラムからロード要求の発行を受けた演算装置70は、図38中(C)、(D)に示すように、共有メモリが記憶するカレントデータとバックアップデータとをキャッシュする。また、演算装置70は、プログラムからストア要求の発行を受けると、図38中(E)に示すように、バックアップデータの更新をキャッシュメモリ上で行う。そして、演算装置70は、プログラムがフラッシュ要求を発行すると、図38中(F)に示すように、キャッシュメモリ上のバックアップデータを共有メモリに書き戻す。
すると、メモリ72には、フラッシュ要求によって書き戻された最新のバックアップデータが存在する。このため、情報処理システムは、図39中(G)に示すように、演算装置70がダウンした場合にも、図39中(H)に示す最新のバックアップデータを用いてリカバリを行う。
特開2009−163450号公報 特開2011−018196号公報 特開平11−259362号公報 特開平6−19797号公報 特開平4−175946号公報 特開平8−44626号公報
しかしながら、フラッシュ要求を発行するようプログラムを修正する技術では、メモリに書き戻したいデータがキャッシュされるたびにフラッシュ要求を発行するようプログラムを修正するので、プログラムが煩雑になるという問題がある。
図40は、フラッシュ要求を追加したプログラムを説明するための図である。なお、図40に示す例では、共有メモリを有するクラスタ構成のシステムが実行するプログラムを示した。例えば、図40中(I)に示すように、クラスタ構成のシステムが実行するプログラムでは、メインプログラムが複数のサブプログラムを呼び出し、各サブプログラムにストア要求をハードウェアに発行させる。
このため、図40中(J)に示すように、アドレスAおよびアドレスBのフラッシュ要求をプログラムに追加する場合には、フラッシュ要求を各サブプログラムが発行するようプログラムを修正する。また、クラスタ構成のシステムでプログラムを共用する場合には、プログラムを実行するクラスタの構成に応じてフラッシュ要求を実行するか否か判別するようにプログラムを修正する。このため、プログラムが煩雑になってしまう。
なお、プログラムが煩雑になるのを回避するため、キャッシュ上のデータが更新されるたびにメモリに書き戻すライトスルー方式を採用する手法も考えられる。図41は、ライトスルー方式を説明するための図である。例えば、図41中(K)に示すように、演算装置70は、共有メモリからデータをキャッシュし、図41中(L)に示すように、キャッシュしたデータを更新する。
そして、演算装置70は、図41中(M)に示すように、キャッシュしたデータの更新を行うたびに、キャッシュのデータを共用メモリに書き戻す。しかし、ライトスルー方式では、演算装置70がキャッシュしたデータを更新するたびにキャッシュメモリ上のデータを共用メモリに書き戻す処理が発生するので、ボトルネックとなってしまう。
また、キャッシュメモリのリプレースが発生した際にデータの書き戻しを行うライトバック方式とライトスルー方式とをそのつど使い分ける方式も考えられる。しかし、ライトバック方式とライトスルー方式を使い分けした場合には、ストア要求の対象がメモリに書き戻すべきデータであるか否かをプログラム上で区別するため、プログラムの作成が困難となる。また、ライトバック方式とライトスルー方式との両方を実行するハードウェアは、回路が煩雑になる。
また、全てのキャッシュラインについてフラッシュ処理を行う手法も考えられるが、全てのキャッシュラインについてフラッシュ処理を行った場合は、フラッシュ処理に要する時間が多くなってしまう。また、キャッシュメモリには、演算処理に用いられるデータ等メモリに書き戻すべきではないデータも存在するので、処理性能が劣化してしまう。
本願は、1つの側面では、プログラムにフラッシュ要求を発行させるための修正量を削減することを目的とする。
1つの側面では、主記憶装置が記憶するデータを一時的に保持するキャッシュメモリを有する演算装置である。また、演算装置は、キャッシュメモリが保持するデータを用いて、アプリケーションを実行する演算部を有する。また、演算装置は、キャッシュメモリが保持するデータのうち、演算部が実行するアプリケーションが指定した期間内に演算部が更新したデータを示すセクタ情報を記憶する記憶部を有する。そして、演算装置は、アプリケーションが指定した期間が終了した場合は、キャッシュメモリが保持するデータのうち、記憶部が記憶するセクタ情報が示すデータをキャッシュメモリから主記憶装置に書き戻す書き戻し部を有する。
1つの側面では、プログラムにフラッシュ要求を発行させるための修正量を削減することができる。
図1は、実施例1に係る情報処理システムを説明するための図である。 図2は、実施例1に係るノードの機能構成を説明するための図である。 図3は、実施例1に係るメモリの割当を説明するための図である。 図4は、実施例1に係る情報処理システムが各メモリにマッピングするメモリマップを説明するための図である。 図5は、実施例1に係る情報処理システムが割当てる共有メモリ領域を説明するための図である。 図6は、実施例1に係る情報処理システムにおけるハードウェアとソフトウェアとの関係を説明するための図である。 図7は、実施例1に係るアプリケーションとミドルウェアとの動作を説明するための図である。 図8は、実施例1に係るCPUが実行する処理を説明するための図である。 図9は、実施例1に係るCPUのキャッシュフラッシュの効果を説明するための図である。 図10は、実施例1に係るCPUの効果を説明するための図である。 図11は、実施例2に係るノードの機能構成を説明するための図である。 図12は、概要セクタフラグを用いたキャッシュフラッシュを説明するための図である。 図13は、実施例3に係るノードの機能構成を説明するための図である。 図14は、マルチコア対応の概要セクタフラグを説明するための図である。 図15は、実施例4に係るノードの機能構成を説明するための図である。 図16は、フラッシュの対象を特定のウェイに限定する処理の一例を説明するための図である。 図17は、実施例5に係るCPUの機能構成を説明するための図である。 図18は、L1キャッシュタグを説明するための図である。 図19は、L1キャッシュを説明するための図である。 図20は、実施例5に係るセクタID生成部が実行する処理を説明するための図である。 図21は、L2キャッシュタグとL2キャッシュとL2キャッシュ概要セクタフラグを説明するための図である。 図22は、実施例5に係るL2キャッシュアクセスコントローラが送受信する信号を説明するための図である。 図23は、L1キャッシュタグに格納するセクタIDを生成する処理の流れを説明するためのフローチャートである。 図24は、L1キャッシュのセクタIDを登録/更新する処理の流れを説明するためのフローチャートである。 図25は、L1キャッシュタグに登録したセクタIDの遷移を説明するための図である。 図26は、L2キャッシュにおけるセクタIDを登録する処理の流れを説明するためのフローチャートである。 図27は、共有メモリ域のみをフラッシュ対象とする処理の流れを説明するためのフローチャートである。 図28は、フラッシュ対象のウェイに上限がある際にセクタIDを登録する処理の流れを説明するためのフローチャートである。 図29は、フラッシュ対象のウェイに上限がある際の処理のバリエーションを説明するためのフローチャートである。 図30は、L2キャッシュのセクタIDの遷移を説明するための第1の図である。 図31は、L2キャッシュのセクタIDの遷移を説明するための第2の図である。 図32は、L2キャッシュ概要セクタフラグを設定する処理の流れを説明するためのフローチャートである。 図33は、フラッシュを実行する処理の流れを説明するためのフローチャートである。 図34は、ストア時にキャッシュミスが発生した際のソフトウェアとハードウェアの動作を説明するためのシーケンス図である。 図35は、ストア時にキャッシュヒットした際のソフトウェアとハードウェアの動作を説明するためのシーケンス図である。 図36は、コンテキストスイッチが発生した際のソフトウェアとハードウェアの動作を説明するためのシーケンス図である。 図37は、バックアップ処理を説明するための図である。 図38は、フラッシュ処理について説明するための図である。 図39は、演算装置がダウンした際の処理を説明するための図である。 図40は、フラッシュ要求を追加したプログラムを説明するための図である。 図41は、ライトスルー方式を説明するための図である。
以下に添付図面を参照して本願に係る演算装置、情報処理装置および演算方法について説明する。
以下の実施例1では、図1を用いて、情報処理システムの一例を説明する。図1は、実施例1に係る情報処理システムを説明するための図である。図1に示す例では、情報処理システム1は、クライアント端末2、クアイアント端末2a、LAN(Local Area Network)スイッチ3、管理端末4、LANスイッチ5、2重のグローバルクロスバ6、複数のノード10〜10mを有する。また、グローバルクロスバ6は、サービスプロセッサ7を有する。
本実施例において、ノードは1つの独立したOS(Operating System)が走行する単位であり、OSが走行する為に最低限必要な装置を含む。後に詳細に述べるが、それらは1つ以上のCPU、メモリ、HDD(Hard Disk Drive)またはHDDに代わる外部記憶装置を有する。ノードは物理的に単一の装置であっても良いし、ケーブル等の装置間接続機能によって接続されて物理的に複数の装置で構成されていても良い。
各ノード10〜10mは、サービス用LANによってLANスイッチ3および各クライアント端末2、2aと接続されている。また、各ノード10〜10mは、内部LANによってLANスイッチ5と接続されている。また、各ノード10〜10mは、管理LANを介して管理端末4と接続されている。また、各ノード10〜10mは、2重のグローバルクロスバ6と接続されており、インターコネクトを介して、相互に接続されている。
各クライアント端末2、2aは、サービス用LANを介して各ノード10〜10mからサービスを取得する。なお、図1では図示を省略したが、情報処理システム1は、任意の数のクライアント端末を他にも有してもよい。
ノード10は、サービスプロセッサ11、CPU12、ローカルXB(クロスバ)16を有する。また、他のノード10a〜10mは、ノード10と同様に、サービスプロセッサ、CPU、ローカルXBを有する。なお、以下の説明では、各ノード10a〜10mは、ノード10と同様の機能を発揮するものとして、説明を省略する。
サービスプロセッサ11は、管理LANを介して管理端末4と接続されており、各ノード10の電源管理等の管理制御を実行する。なお、グローバルクロスバ6が有するサービスプロセッサ7は、サービスプロセッサ11のマスタとして動作し、全体の管理制御を行う。ここで、各サービスプロセッサ7、11が実行する管理制御の例としては、電源管理、リセット、動作モードの変更、ノードの追加や削除の設定、エラーログの収集、縮退動作制御等である。
また、ノード10〜10mは、それぞれ独立してOS(Operating System)を実行する。また、図1では省略したが、ノード10は、CPU12以外にも複数のCPUを有し、各CPUは、ローカルXB16を介して、グローバルクロスバ6と接続されている。
また、ノード10のCPUは、メモリアクセスのリクエストであるメモリアクセス要求をローカルXB16に出力することで、他のノードにメモリアクセス要求を転送する。そして、ノード10のCPUは、メモリアクセス要求を取得すると、自身が自身と接続されたメモリに対してアクセスを行う際と同様にメモリアクセスを実行する。すなわち、情報処理システム1には、NUMA(Non-Uniform Memory Access)の技術が適用されており、各ノード10〜10mが、それぞれのメモリを共用して処理を実行する。
次に、図2を用いて、ノード10の機能構成について説明する。図2は、実施例1に係るノードの機能構成を説明するための図である。図2に示す例では、ノード10は、サービスプロセッサ11、複数のCPU12〜15、ローカルXB16、複数のメモリ17〜24、PCIe(Peripheral Component Interconnect Express)スイッチ25を有する。また、ノード10は、サービス用LANと接続するためのLANアダプタ26、管理用LANと接続するためのLANアダプタ27、SAS(Serial Attached SCSI)28、HDD(Hard Disk Drive)29を有する。
また、メモリ17およびメモリ18は、CPU13と接続されており、CPU13によるメモリアクセスを受付ける記憶装置である。また、メモリ19およびメモリ20は、CPU12と接続されており、CPU12によるメモリアクセスを受付ける記憶装置である。また、メモリ21およびメモリ22は、CPU14と接続されており、CPU14によるメモリアクセスを受付ける記憶装置である。
また、メモリ23およびメモリ24は、CPU15と接続されており、CPU15によるメモリアクセスを受付ける記憶装置である。なお、図2に示す例では、ノード10は、HDD29を有しているが、実施例はこれに限定されるものではなく、SAN(Storage Area Network)等の技術を適用し、ノード10の外部に設置してもよい。
サービスプロセッサ11は、ノード10の管理制御を実行する。具体的には、サービスプロセッサ11は、処理を実行するプロセッサとFPGA(Field-Programmable Gate Array)を有し、管理端末4から管理用LANを介して、管理制御の実行命令を受付ける。そして、サービスプロセッサ11は、管理端末4から受付けた実行命令に従って、各種管理制御を実行する。
PCIeスイッチ25は、各CPU12〜15からPCIeスロットを介して接続されるI/O装置等へのアクセスを制御するスイッチである。また、LANアダプタ26は、サービス用LANとノード10とを接続するLANアダプタである。また、LANアダプタ27は、管理用LANとノード10とを接続するLANアダプタである。また、SAS28は、PCIeスロットに搭載されたLANやSAS用のアダプタであり、HDD29と各CPU12〜15との接続を中継する。
次に、各CPU12〜15について説明する。各CPU12〜15は、それぞれキャッシュメモリ12a〜15aを有する。また、各CPU12〜15は、相互に接続されており、メモリアクセス要求や応答を相互に送受信することができる。以下、CPU12について説明する。なお、CPU12は、他のCPU13〜15と相互に接続されている。なお、CPU13〜15は、CPU12と同様の機能を発揮するものとして説明を省略する。
CPU12は、メモリ19またはメモリ20が記憶するデータをキャッシュするキャッシュメモリ12aを有し、キャッシュしたデータを用いて、演算処理を実行する。また、CPU12は、メモリ19およびメモリ20に対してメモリアクセスを行うメモリインターフェースの機能を有する。また、CPU12は、PCIeスイッチ25を介して、HDD29や内部LAN、管理用LAN等を用いたアクセスを制御するPCIeインターフェース機能を有する。
ここで、CPU12が有するキャッシュメモリ12aは、複数のキャッシュラインを有する。そして、CPU12は、アプリケーション35が指定した期間内にデータの更新を行った場合には、更新したデータが記憶されたキャッシュラインに、データを更新した旨を示すセクタフラグを格納する。そして、CPU12は、アプリケーション35が指定した期間が終了した場合には、キャッシュメモリ12aの各キャッシュラインのうち、セクタフラグが格納されたキャッシュラインのデータをメモリ17〜24に書き出すフラッシュ処理を実行する。
また、CPU12は、ローカルXB16、グローバルクロスバ6を介して、他のノード10a〜10mが有するCPUとインターコネクトで接続され、相互にメモリアクセスの要求等を送受信するインターコネクトルータ機能を有する。このようなCPU12は、例えば、実行するプロセスにより、メモリ19、または、メモリ20に対するメモリアクセス要求が発行された場合には、以下の処理を実行する。すなわち、CPU12は、メモリ19、または、メモリ20にアクセスし、アクセス対象となるデータをキャッシュする。
また、CPU12は、実行するプロセスにより、メモリ19、メモリ20以外のメモリに対するメモリアクセス要求が発行された場合には、メモリアクセス対象となるメモリと接続されたCPUを識別し、識別したCPUに対してメモリアクセス要求を送信する。詳細には、CPU12は、アクセス対象となるメモリアドレスと、メモリアドレスが示す記憶領域にアクセスするCPUを一意に示す情報とを対応付けたノードマップを有する。
そして、CPU12は、プロセスがメモリアクセス要求を発行した場合には、ノードマップを参照し、メモリアクセスの対象となるメモリアドレスに対応付けられたCPUを識別する。その後、CPU12は、識別したCPUを宛先とするパケットを生成し、生成したパケットにメモリアクセス要求を格納して、CPU12〜15の相互接続、又はローカルXB16に出力する。ローカルXB16に出力された場合には、ローカルXB16は、グローバルクロスバ6を介して、パケットを宛先となるCPUに送信する。
ここで、CPU12は、上述した処理に加えて、以下の処理を実行する。まず、CPU12は、メモリ19およびメモリ20の各記憶領域のうち、他のノードと共有する記憶領域に、メモリトークンと呼ばれる値を予め設定する。そして、CPU12は、メモリ19またはメモリ20に対してメモリアクセス要求を発行するCPUに対し、アクセスを許可する記憶領域を通知するとともに、通知した記憶領域に対応するメモリトークンをアクセストークンとして通知する。
また、CPU12は、自身がメモリアクセス要求を送信するノードから、アクセストークンをあらかじめ取得し、取得したアクセストークンを保持する。そして、CPU12は、メモリアクセス要求を発行する場合には、メモリアクセス要求とともに、保持したアクセストークンをパケットに格納して送信する。
また、CPU12は、他のノードのCPUからメモリアクセス要求を受信した場合は、メモリアクセス要求とともに受信したアクセストークンが、アクセス対象となる記憶領域に対応するメモリトークンと一致するか否かを判別する。そして、CPU12は、アクセストークンとメモリトークンとが一致する場合には、メモリアクセスを実行し、アクセストークンとメモリトークンとが一致しない場合には、メモリアクセスの実行を拒否する。
なお、CPU12は、メモリ19、および、メモリ20に対するメモリアクセスを実行する場合には、メモリ19、または、メモリ20からキャッシュされたデータのコヒーレンシを保持する処理を実行する。例えば、CPU12は、メモリ19、または、メモリ20からデータをキャッシュしたCPUに対してスヌープを送信し、キャッシュされたデータのライトバックを実行する。
ローカルXB16は、ノード10が有するCPU12〜15と、他のノード10a〜10mが有するCPUとの間でやり取りされるパケットを、指定相手先に転送するためのスイッチである。例えば、ローカルXB16は、CPU12が、CPU12aを宛先として発行したパケットを、グローバルクロスバ6を介して、ノード10aが有するCPU12aに送信する。
メモリ17〜メモリ24は、OSやアプリケーションが利用するデータを記憶するメモリであり、例えば、DIMM(Dual In-Line Memory Module)である。また、メモリ17〜24は、同一のメモリアドレス空間にマッピングされている。
また、メモリ17〜24は、同一ノード内のCPU12〜15のみがアクセス可能な領域、すなわち、自身を有するノード専用の領域であるローカル領域を有する。また、メモリ17〜24は、情報処理システム1が有する任意のCPUがアクセス可能な領域、すなわち、全てのノードが利用可能な共有メモリ領域を有する。また、メモリ17〜メモリ24の共有メモリ領域は、複数のセグメントに分割される。そして、各セグメントは、メモリトークンによるアクセス制御が行われるプロテクト領域、又は、メモリトークンによるアクセス制御を行わないノンプロテクト領域となる。
ここで、図3、図4を用いて、各メモリ17〜24にマッピングされるメモリアドレスについて説明する。図3は、実施例1に係るメモリの割当を説明するための図である。例えば、情報処理システム1は、各ノードが有する2つのメモリのうち、一方のメモリをローカル領域のみのメモリとし、他方のメモリを共用メモリ領域のみのメモリとする。すなわち、図3中(a)に示すように、メモリ17、メモリ19、メモリ21、メモリ23をノード専用のメモリとし、図3中(b)に示すように、メモリ18、メモリ20、メモリ22、メモリ24を共用するメモリとする。
図4は、実施例1に係る情報処理システムが各メモリにマッピングするメモリマップを説明するための図である。なお、図4には、全部で128テラバイトのメモリアドレス空間が準備され、そのうちローカル領域に64テラバイトが割当てられ、共有メモリ領域に64テラバイトが割当てられる例について示す。
例えば、情報処理システム1は、ノード10〜10mが有するメモリのうち、ローカル領域として用いる範囲に「0」から「246−1」までのメモリアドレスを割当てる。また、情報処理システム1は、ノード10〜10mが有するメモリのうち、共有メモリ領域として用いる範囲に、「246」から「247−1」までのメモリアドレスを割当てる。
すなわち、図3および図4に示す例では、情報処理システム1は、図3中(a)に示すメモリ17、メモリ19、メモリ21、メモリ23に対して、図4中(c)に示す範囲のメモリアドレスをマッピングする。また、情報処理システム1は、図3中(b)に示すメモリ18、メモリ20、メモリ22、メモリ24に対して、図4中(d)に示す範囲のメモリアドレスをマッピングする。なお、図4中の「247」から「248−1」までのアドレスは、UC(Uncacheable)領域として用いられるアドレスの範囲であり、例えば、HDD29等のI/O装置が用いるI/O空間として用いられるアドレスの範囲である。
このように、情報処理システム1は、各ノード10〜10mが有するメモリに対して、単一のメモリアドレス空間をマッピングする。このため、任意のCPUが任意のノードの共有メモリ領域に対して直接アクセスできる。なお、図4に示すメモリマップはあくまで一例であり、任意の割当を行うこととしても良い。
すなわち、メモリマップ上のメモリアドレスの全てがメモリに割当てられている必要はなく、メモリホールが存在しても良い。また、情報処理システム1が有する各ノードにOSが利用するローカル領域が存在し、かつ、1つ以上のノードに共有メモリ領域が存在するように、メモリマップを設定すればよい。
なお、情報処理システム1は、1つのノード内に含まれるメモリ(例えば、メモリ17とメモリ18)に対して連続するメモリアドレスをマップした場合は、制御資源を削減することができる。また、情報処理システム1は、少なくとも、セグメント領域のアライメントをそろえることができるようにメモリアドレスの割り当てを行う。
次に、図5を用いて、各ノードのメモリに対して割当てられる共有メモリ領域について説明する。図5は、実施例1に係る情報処理システムが割当てる共有メモリ領域を説明するための図である。なお、図5に示す例では、情報処理システム1がノード#0〜#nを有し、各ノード#0〜#nに対して共有メモリ領域を振り分ける例について説明する。
例えば、図5中(e)に示すように、情報処理システム1は、64テラバイトのローカル領域と、64テラバイトのメモリ領域とを、各ノード#0〜#nに対して割当てる。詳細には、情報処理システム1は、図5中(f)に示すように、64テラバイトの共有メモリ領域を、各ノード#0〜#nに対して均等に振り分ける。
ここで、各ノード#0〜#nは、振り分けられた共有メモリ領域を、プロテクト領域とノンプロテクト領域とに分ける。ここで、プロテクト領域とは、他のノードからメモリアクセス要求を受信した際に、アクセストークンとメモリトークンとが一致するか否かを判別することで、アクセス保護を行う領域である。また、ノンプロテクト領域とは、他のノードから自由にメモリアクセスを行うことができる領域である。
例えば、図5中(g)に示すように、ノード#1は、自身に割当てられた共有メモリ領域のうち、最大で4テラバイトをプロテクト領域、または、ノンプロテクト領域とすることができる。また、図5中(h)に示すように、ノード#1は、共有メモリ領域をセグメント#0〜#2047までの2ギガバイトのセグメントに分割する。そして、ノード#1は、図5中(i)に示すように、セグメントごとにメモリトークンを設定する。
また、図5に示す例では、ノード#1は、セグメント#0〜#2をプロテクト領域とし、メモリトークンを設定する。なお、メモリトークンは、例えば、13ビットの値である。また、図5に示す例では、ノード#1は、セグメント#3〜#2047をノンプロテクト領域とし、メモリトークンとして、「all0」を設定する。すなわち、各ノード#0〜#nは、ノンプロテクト領域に対してアクセスを行う場合には、図5中(j)に示すように、「all0」のアクセストークンを用いることで、アクセスを行うことができる。
また、ノード#mも、自身の共有メモリ領域をセグメント#0〜#2047に分割し、各セグメント#0〜#2047にメモリトークンを設定する。なお、ノード#mが自身の各セグメント#0〜#2047に対して設定したメモリトークンは、図5中(j)に示すように、ノード#1がアクセストークンとして用いることとなる。このため、ノード#1は、ノード#mの共有メモリ領域にアクセスする場合には、ノード#mが設定したメモリトークンを取得し、取得したメモリトークンをアクセストークンとして用いることで、ノード#mの共有メモリ領域にアクセスを行う。
次に、図6を用いて、各CPU12〜15のハードウェアと各CPU12〜15が実行するソフトウェアとの関係について説明する。図6は、実施例1に係る情報処理システムにおけるハードウェアとソフトウェアとの関係を説明するための図である。なお、図6に示す例では、CPU12が有するハードウェアをハードウェア30とし、CPU13が有するハードウェアをハードウェア30aとした。また、図6に示す例では、CPU14が有するハードウェアをハードウェア30bとし、CPU15が有するハードウェアをハードウェア30cとした。
例えば、CPU12は、ハードウェア30を有し、CPU12専用のローカルなメモリ17および共有メモリ18、20、22、24にアクセスする。また、CPU12は、ハードウェア30上で、ハイパーバイザ31、オペレーティングシステム32、ドライバ33、ミドルウェア34を動作させる。また、CPU12は、ミドルウェア34上に、各CPU12〜15が協調して動作させるアプリケーション35を実行する。
また、他のCPU13〜15は、CPU12と同様に、ハードウェア30a〜30cを有し、ハイパーバイザ31a〜31c、オペレーティングシステム32a〜32c、ドライバ33a〜33c、ミドルウェア34a〜34cを動作させる。
次に、図7を用いて、CPU12が実行するアプリケーションとミドルウェアとの動作について説明する。図7は、実施例1に係るアプリケーションとミドルウェアとの動作を説明するための図である。例えば、アプリケーション35は、図7中の区間Aにおいて、アドレス1に格納されたデータを読み込むロード要求(LD:Lord)を発行するとともに、ロードしたデータをアドレス2に格納するセット要求(ST:Set)を発行する。すると、図7では省略したが、ミドルウェア34は、アプリケーション35が発行したロード要求とセット要求とをハードウェア30に伝達し、処理を実行させる。
次に、アプリケーション35は、記録開始をミドルウェア34に通知し、区間Aから区間Bへの移行をミドルウェア34に通知する。すると、ミドルウェア34は、区間Bへ移行したことを示すセクタモードの設定を行う。すなわち、ミドルウェア34は、アプリケーション35が指定した期間内である旨を示す設定を行う。
次に、アプリケーション35は、データのバックアップを行うため、アドレス3に格納されたデータのロード要求と、アドレス4に格納されたデータのストア要求とを発行する。このような場合には、ミドルウェア34は、発行されたロード要求とストア要求とをハードウェア30に実行させるとともに、ストア要求の対象となるアドレス4のキャッシュラインにセクタフラグを設定する。
その後、アプリケーション35は、記録終了を示すSYNCをミドルウェア34に発行する。すると、ミドルウェア34は、区間Bが終了したものとし、セクタモードを解除する。そして、ミドルウェア34は、セクタフラッシュ要求をハードウェア30に発行する。ここで、セクタフラッシュ要求とは、セクタフラグが設定されたキャッシュラインの書き戻し要求である。すなわち、ミドルウェア34は、区間Bにおいてストア要求の対象となったアドレス4のデータのみをメモリ17〜24に書き戻すよう、ハードウェア30に要求する。その後、ミドルウェア34は、通常の処理を行う。
なお、区間Aと区間Bは、例えば、ASI(Address Space Identifier)レジスタライト等を用いて、スタティックなモードで切り換えることが可能である。また、モードの切り換えは、アプリケーション35からの指定で行う事が可能であり、コンテキストスイッチが発生した際には、状態の保存やリストアが行われる対象となる。
例えば、CPU12が実行中のアプリケーションAがセクタモードを区間Bに変更した後に、アプリケーションBへのコンテキストスイッチが発生すると、アプリケーションAのセクタモードが区間Aであることが保持される。そして、CPU12が実行するアプリケーションがアプリケーションBからアプリケーションAに変わる場合には、コンテキストスイッチが発生し、再度区間がBに移行する。
なお、セクタフラッシュが実行させるとセクタフラグが設定されたキャッシュラインのステートは、インバリッド(Invalid)となる。このため、図7に示す例では、ミドルウェア34がセクタフラッシュ要求を発行した後に、アドレス4に対するロード要求等が発行されると、キャッシュミスが発生することとなる。
次に、図8を用いて、実施例1に係るCPU12が実行するアプリケーション35と、CPU12のハードウェア30が実行する処理について説明する。図8は、実施例1に係るCPUが実行する処理を説明するための図である。なお、図8に示す例では、キャッシュ12aがメモリ17に格納されたデータをキャッシュする例について記載した。
図8に示す例では、ハードウェア30は、現在の処理が区間Aの処理であるか区間Bの処理であるかを区別するために、セクタモードレジスタを有する。例えば、セクタモードレジスタは、CPU12が有するASIレジスタの1つであり、値が「0」である場合には、現在の処理が区間Aの処理であることを示し、値が「1」である場合には、現在の処理が区間Bの処理であることを示す。
また、図8に示す例では、キャッシュ12aには、複数のキャッシュラインが存在し、各キャッシュラインには、エントリ、セクタ、ステート、アドレス、データが格納される。ここで、エントリとは、各キャッシュラインを識別するための情報であり、セクタとは、アプリケーション35が指示する期間内に更新が行われたか否かを示すセクタフラグである。
また、ステートとは、データの状態を示す情報であり、例えば、MESIプロトコル(イリノイプロトコル)に基づくキャッシュラインの状態を示す情報を格納する。詳細には、状態データに「M:Modify」が格納されている場合には、同じキャッシュラインに格納されたデータを排他的にキャッシュしており、かつ、キャッシュしたデータがプロセッサコア4aによって最新の状態に更新されていることを示す。
また、状態データに「E:Exclusive」が格納されている場合には、同じキャッシュラインに格納されたデータを排他的にキャッシュしており、かつ、キャッシュしたデータがプロセッサコア4aによって更新されていない状態を示す。また、状態データに「S:Shared」が格納されている場合には、他のキャッシュメモリ5b、5cが同一の共有データをキャッシュしていることを示す。また、状態データに「I:Invalid」が格納されている場合には、同一キャッシュラインのデータが無効であることを示す。
また、アドレスとは、キャッシュ元のデータが格納されているメモリ17のメモリアドレスを示す。また、データとは、キャッシュ対象となるデータである。また、図8に示す例では、ハードウェア30は、各キャッシュラインのセクタの値に応じてメモリ17への書き戻しを行うセクタフラッシュ制御ステートマシンを有する。具体的には、セクタフラッシュ制御ステートマシンとは、アプリケーション35からの要求に応じて、区間Bにおいて更新があったキャッシュラインのデータのみをメモリ17に書き戻す。
以下、アプリケーション35とハードウェア30の動作について説明する。例えば、アプリケーション35は、図8中(k)に示すように、データ「xx」をアドレス「100」に格納するセット要求を発行する。すると、ハードウェア30は、キャッシュ12aが有するエントリ「5」のキャッシュラインに、アドレス「100」のデータ「aa」が格納されていると判別し、エントリ「5」のキャッシュラインのデータを「aa」から「xx」に書き換える。
また、ハードウェア30は、データの更新を行ったため、ステートを「E」から「M」に変更する。ここで、ハードウェア30は、セクタモードレジスタの値が「0」であるため、エントリ「5」のキャッシュラインのデータについて、セクタの値を「0」のままにする。
次に、アプリケーション35は、セクタモードレジスタ(SctRg:Sector Mode Register)に「1」を格納するセット要求を発行する。すなわち、アプリケーション35は、区間Aから区間Bへの移行を要求する。すると、ハードウェア30は、セクタモードレジスタに「1」を格納する。
次に、アプリケーション35は、図8中(l)に示すように、データ「yy」をアドレス「200」に格納するセット要求を発行する。すると、ハードウェア30は、エントリ「50」のキャッシュラインに、アドレス「200」のデータ「bb」が格納されていると判別し、エントリ「50」のキャッシュラインのデータを「bb」から「yy」に書き換え、ステートを「E」から「M」に変更する。
さらに、ハードウェア30は、セクタモードレジスタの値が「1」であるため、エントリ「50」のキャッシュラインにセクタフラグ「1」を格納する。つまり、ハードウェア30は、アプリケーション35が指定した区間内において、エントリ「50」のキャッシュラインのデータが更新された旨を示すセクタフラグを設定する。
続いて、アプリケーション35は、セクタモードレジスタに「0」を格納するセット要求を発行する。すなわち、アプリケーション35は、区間Bから区間Aへの移行を要求する。すると、ハードウェア30は、セクタモードレジスタに「0」を格納する。その後、アプリケーション35は、図8中(m)に示すように、セクタフラッシュ制御ステートマシーン(Sctq)に「1」を格納する要求を発行することで、キャッシュフラッシュの実行を要求する。図8中(n)に示すように、ハードウェア30は、各キャッシュラインを検査し、セクタに「1」が格納されたエントリを検索する。
すると、ハードウェア30は、図8中(o)に示すように、エントリ「50」のセクタが「1」であると判別する。この結果、ハードウェア30は、図8中(p)に示すように、エントリ「50」のキャッシュラインのデータ「yy」をメモリ17に書き戻す。すなわち、ハードウェア30は、区間Bにおいて更新されたデータのみをメモリ17に書き戻す。そして、ハードウェア30は、エントリ「50」のキャッシュラインのセクタを「0」に変更するとともに、ステートを「I」に変更する。
このように、ハードウェア30は、キャッシュ12aが有する複数のキャッシュラインのうち、アプリケーション35から指示された期間内、すなわち区間Bにおいて更新したデータが格納されたキャッシュラインにセクタフラグ「1」を設定する。そして、ハードウェア30は、アプリケーション35から指示された期間が終了し、アプリケーション35からキャッシュフラッシュの要求を受付けた場合には、セクタフラグが「1」のキャッシュラインに格納されたデータのみをメモリ17に書き戻す。
このため、アプリケーション35は、メモリ17に書き戻すべきデータのストア要求を発行するたびに、アドレスを指定したフラッシュ要求を発行せずともよい。すなわち、アプリケーション35は、メモリ17に書き戻すべきデータのストア要求が生じる区間を指定し、その後フラッシュ要求を発行するだけでよい。このため、ハードウェア30を有するCPU12は、アプリケーション35のプログラムにおける修正量を抑えることができる。
また、CPU12は、キャッシュメモリ12aが有する各キャッシュラインのうち、セクタフラグが「1」のキャッシュラインに格納されたデータのみをメモリ17に書き戻すので、キャッシュフラッシュの処理時間を短縮することができる。また、CPU12は、セクタフラグが「1」のキャッシュラインに格納されたデータのみをメモリ17に書き戻すので、不要なキャッシュフラッシュの量を抑える結果、キャッシュフラッシュに伴う性能劣化を最小限に抑えることができる。
図9は、実施例1に係るCPUのキャッシュフラッシュの効果を説明するための図である。図9中(x)に示すように、従来のCPUは、更新されたデータがキャッシュしたデータの一部のみであっても、全キャッシュデータをメモリに書き戻すので、キャッシュフラッシュの処理時間を増大させ、システム全体の性能を劣化させた。
しかし、図9中(y)に示すように、CPU12は、セクタフラグを用いて、キャッシュ12aに格納されたデータのうち、メモリ12〜24に書き戻すべきデータのみを検出し、検出したデータのみをメモリ17〜24に書き戻す。この結果、CPU12は、キャッシュフラッシュの処理時間を短縮するとともに、情報処理システム1の性能劣化を防ぐことができる。
また、図10は、実施例1に係るCPUの効果を説明するための図である。図10に示すように、従来の情報処理システムが実行するアプリケーションでは、メインプログラムSyncをミドルウェアに発行する。なお、ミドルウェアは、このSyncに対してNOP(No Operation)である。次に、メインプログラムは、複数のサブプログラムを呼び出し、各サブプログラムがストア要求をミドルウェアに発行する。その後、メインプログラムがフラッシュ要求をミドルウェアに発行する。すると、ミドルウェアは、DMA(Direct Memory Access)を用いた他ノードへのコピーを行う。
一方、同様のアプリケーション35を情報処理システム1が実行した場合には、アプリケーション35がSyncを発行すると、ミドルウェア34は、CPU12にSyncを伝達する。この結果、CPU12は、アプリケーションが指定する期間、すなわち、フラッシュセクタ期間が開始したと判別する。次に、メインプログラムは、サブプログラムを呼び出し、サブプログラムは、それぞれストア要求を発行する。次に、メインプログラムは、フラッシュ要求を発行する。すると、CPU12は、フラッシュセクタ期間中にストア要求により更新されたデータのフラッシュを実行する。
このため、CPU12は、従来の情報処理システムが実行するアプリケーションと共通のアプリケーションを用いた際にも、キャッシュメモリ12aから各メモリ17、18にデータの書き戻しを行う事ができる。この結果、CPU12は、アプリケーションに対して、メモリへの書き戻しを行うためのフラッシュ要求を追加する修正の量を削減することができる。
[実施例1の効果]
上述したように、CPU12は、複数のキャッシュラインを有し、データを一時的に保持するキャッシュメモリ12aを有する。また、CPU12は、アプリケーション35が指示した期間内にデータが更新されたか否かを示すセクタフラグをキャッシュラインごとに有する。そして、CPU12は、キャッシュメモリ12aが有するキャッシュラインのうち、セクタフラグが、アプリケーション35が指示した期間内にデータが更新された旨を示すキャッシュラインのデータをメモリ17〜24に書き戻す。
このため、CPU12は、アプリケーション35のプログラムの修正を抑えることができる。また、CPU12は、データの書き戻しの処理時間を短縮するとともに、情報処理システム1の性能劣化を防ぐことができる。
実施例2では、CPU12が発揮する機能に加えて、アプリケーションが指示した期間内に更新が行われたか否かを複数のキャッシュラインごとに示す概要セクタフラグを有するCPUについて説明する。
図11は、実施例2に係るノードの機能構成を説明するための図である。なお、図11には、実施例2に係るノード10nの機能構成を示したが、ノード10nは、実施例1と同様の機能を有する情報処理システム1aが有するノードである。また、図11に示すノード10nのうち、実施例1と同じ符号を付したものについては、実施例1と同様の機能を発揮するものとして、説明を省略する。図11に示す例では、ノード10nは、複数のCPU12b〜CPU15bを有する。
CPU12bは、キャッシュメモリ12aと概要セクタフラグ12cを有する。また、他のCPU13b〜15bも同様に、キャッシュメモリ13a〜15aと概要セクタフラグ13c〜15cを有する。なお、以下の説明では、CPU13b〜15bは、CPU12bと同様の機能を発揮するものとして、説明を省略する。
CPU12bは、実施例1に係るCPU12と同様の機能を発揮するとともに、以下の機能を有する。すなわち、CPU12bは、アプリケーションが指示した期間内に更新が行われたか否かを複数のキャッシュラインごとに示す複数のフラグである概要セクタフラグ12cを有する。また、CPU12bは、キャッシュメモリ12aが有する複数のキャッシュラインを複数のグループに組み分けし、各組と概要セクタフラグ12cとを対応付ける。
そして、CPU12bは、アプリケーションが指定した期間内に更新したデータを記憶するキャッシュラインと対応付けられた概要セクタフラグ12cに、更新したデータが存在する旨を示すフラグを設定する。例えば、CPU12bは、アプリケーションが指定した期間内にデータを更新した場合には、更新したデータが格納されているキャッシュラインのセクタフラグを「1」に変更する。さらに、CPU12bは、更新したデータが格納されているキャッシュラインと対応付けられた概要セクタフラグ12cを「1」とする。
その後、CPU12bは、アプリケーションが指定した期間が終了し、アプリケーションからフラッシュ要求が発行されると、値が「1」の概要セクタフラグ12cと対応付けられたキャッシュラインを検査する。そして、CPU12bは、検査したキャッシュラインのうち、セクタフラグが「1」であるキャッシュラインを識別し、識別したキャッシュラインのデータをメモリ17〜24に書き戻す。
このように、CPU12bは、アプリケーションが指定した期間内にデータが更新されたか否かを示す概要セクタフラグ12cを複数のキャッシュラインごとに有する。そして、CPU12bは、フラッシュ要求が発行された場合には、データが更新された旨を示す概要セクタフラグ12cと対応するキャッシュラインを検査する。その後、CPU12は、セクラフラグ「1」が設定されたキャッシュラインのデータのみをメモリ17〜24に書き戻す。
このため、CPU12bは、フラッシュ要求が発行された際に、キャッシュメモリ12aが有する全てのキャッシュラインを検査せずとも、アプリケーションが指定した期間内に更新されたデータを格納するキャッシュラインを識別することができる。この結果、CPU12bは、フラッシュ要求の処理時間を短縮し、情報処理システム全体の性能を向上させることができる。
次に、図12を用いて、実施例2に係るCPU12が実行するアプリケーション35と、CPU12bが実行する処理について説明する。図12は、概要セクタフラグを用いたキャッシュフラッシュを説明するための図である。なお、図12に示す例では、キャッシュメモリ12aが有する各キャッシュラインは、複数のグループに組み分けられているものとする。また、図12に示す例では、CPU12bが有するハードウェア30dが実行する処理について記載した。
概要セクタフラグ12cは、グループを識別する番号とフラグとを対応付けたエントリを複数有する。グループとは、キャッシュラインの各グループを識別する番号であり、例えば、「1」〜「M」までの番号である。なお、図12に示す例では、エントリ「5」のキャッシュラインは、グループ「1」に組み分けられており、エントリ「50」のキャッシュラインは、グループ「A」に組み分けられている。
また、フラグとは、対応付けられた番号のグループに組み分けられたキャッシュラインのうち、いずれかに格納されたデータが、アプリケーション35が指定した期間内に更新されたか否かを示すフラグである。例えば、概要セクタフラグ12bは、グループ「1」のフラグが「1」である場合には、アプリケーション35が指定した期間内に、グループ「1」のキャッシュラインのいずれかに格納されたデータが更新された旨を示す。また、概要セクタフラグ12bは、グループ「1」のフラグが「0」である場合には、アプリケーション35が指定した期間内に、グループ「1」のキャッシュラインに格納されたデータが更新されなかった旨を示す。
以下、図12を用いて、CPU12bが実行する処理について説明する。まず、アプリケーション35は、図12中(q)に示すように、データ「xx」をアドレス「100」に格納するセット要求を発行する。すると、ハードウェア30dは、エントリ「5」のキャッシュラインのデータを「aa」から「xx」に書き換え、ステートを「E」から「M」に変更する。また、ハードウェア30bは、セクタモードレジスタの値が「0」であるため、エントリ「5」のキャッシュラインのデータについて、セクタの値を「0」のままにする。また、ハードウェア30bは、セクタモードレジスタの値が「0」であるので、概要セクタフラグ12cのうち、グループ「1」のフラグを「0」のままにする。
次に、アプリケーション35は、セクタモードレジスタに「1」を格納するセット要求を発行し、区間Aから区間Bへの移行を要求する。すると、ハードウェア30は、セクタモードレジスタに「1」を格納する。次に、アプリケーション35は、図12中(r)に示すように、データ「yy」をアドレス「200」に格納するセット要求を発行する。すると、ハードウェア30dは、エントリ「50」のキャッシュラインのデータを「bb」から「yy」に書き換え、ステートを「E」から「M」に変更する。
また、ハードウェア30bは、セクタモードレジスタの値が「1」であるため、エントリ「50」のキャッシュラインにセクタフラグ「1」を格納する。つまり、ハードウェア30は、アプリケーション35が指定した区間内において、エントリ「50」のキャッシュラインのデータが更新された旨を示すセクタフラグを設定する。さらに、ハードウェア30bは、概要セクタフラグ12cのうち、エントリ「50」のキャッシュラインが組み分けられたグループ「A」のフラグを「1」に変更する。
続いて、アプリケーション35は、セクタモードレジスタに「0」を格納するセット要求を発行し、区間Bから区間Aへの移行を要求する。すると、ハードウェア30bは、セクタモードレジスタに「0」を格納する。その後、アプリケーション35は、図12中(s)に示すように、セクタフラッシュ制御ステートマシーンに「1」を格納する要求を発行することで、キャッシュフラッシュの実行を要求する。
すると、ハードウェア30dは、図12中(t)に示すように、概要セクタフラグ12cの各グループと対応付けたフラグを検査し、フラグに「1」が格納されたエントリを検索する。そして、ハードウェア30dは、図12中(u)に示すように、フラグが「0」であるグループ「1」のキャッシュラインについては、検査を行わなず、図12中(v)にしめすように、フラグが「1」であるグループ「A」のキャッシュラインのみを検査する。そして、ハードウェア30dは、図12中(w)に示すように、セクタに「1」が格納されたエントリ「50」に格納されたデータのみをメモリ17に書き戻す。このため、CPU12bは、キャッシュメモリ12aが有する全てのキャッシュラインを検査せずとも、アプリケーション35が指定した期間内に更新したデータをメモリ17に書き戻すことができる。
[実施例2の効果]
上述したように、CPU12bは、アプリケーション35が指定した期間内にデータが更新されたか否かを示す概要セクタフラグを複数のキャッシュラインごとに有する。そして、CPU12bは、フラッシュ要求が発行されると、データが更新された旨を示す概要セクタフラグと対応するキャッシュラインを検査する。
その後、CPU12bは、検査したキャッシュラインのうち、アプリケーション35が指定した期間内にデータが更新された旨を示すセクタフラグが格納されたキャッシュラインのデータをメモリ17〜24に書き戻す。このため、CPU12bは、キャッシュメモリ12aが有する全てのキャッシュラインを検査せずとも、アプリケーション35が指定した期間内に更新されたデータをメモリ17〜24に書き戻すことができる。
実施例3では、CPU12、およびCPU12bが発揮する機能に加えて、アプリケーション35が指示した期間内に更新が行われたか否かを複数のキャッシュラインごとに示す概要セクタフラグをコアごとに有するマルチコアのCPUについて説明する。
図13は、実施例3に係るノードの機能構成を説明するための図である。なお、図13には、実施例3に係るノード10oの機能構成を示したが、ノード10oは、実施例1と同様の機能を有する情報処理システム1bが有するノードである。また、図12に示すノード10oのうち、実施例1および実施例2と同じ符号を付したものについては、実施例1および実施例2と同様の機能を発揮するものとして、説明を省略する。図13に示す例では、ノード10oは、複数のCPU12d〜CPU15dを有する。
CPU12dは、キャッシュメモリ12aと概要セクタフラグ12eを有する。また、他のCPU13d〜15dも同様に、キャッシュメモリ13a〜15aと概要セクタフラグ13e〜15eを有する。なお、以下の説明では、CPU13d〜15dは、CPU12dと同様の機能を発揮するものとして、説明を省略する。
CPU12dは、実施例1に係るCPU12、および実施例2に係るCPU12bと同様の機能を発揮するとともに、以下の機能を有する。すなわち、CPU12dは、演算処理を行うコアを複数有し、各コアを用いた演算処理を行う。例えば、CPU12dは、コアA〜Dまでの4つのコアを有する。
また、CPU12dは、アプリケーション35が指示した期間内に更新が行われたか否かを複数のキャッシュラインごとに示す複数のフラグを、各コアごとに有する。そして、CPU12dは、あるコアが実行するアプリケーション35がキャッシュフラッシュを要求した場合には、このアプリケーション35が指示した期間内に更新したデータをメモリ17〜24に書き戻す。
具体的には、CPU12dは、概要セクタフラグ12eを有する。概要セクタフラグ13eは、マルチコア対応の概要セクタフラグ12cであり、アプリケーション35が指示した期間内に更新が行われたか否かを複数のキャッシュラインごとに示すフラグをコアごとに有する。以下、図14を用いて、概要セクタフラグ12eの一例について説明する。
図14は、マルチコア対応の概要セクタフラグを説明するための図である。なお、図14には、概要セクタフラグ12eと、キャッシュメモリ12aについて記載した。なお、図14に示す例では、キャッシュメモリ12aは、1つのキャッシュラインに複数のウェイ「0」〜「W」を有するキャッシュメモリである。また、図14に示す例では、CPU12dが4つのコアA〜Dを有する。
また、図14に示す例では、キャッシュメモリ12aは、キャッシュタグ部とデータ部とを有し、キャッシュタグ部の各ウェイ「0」〜「W」には、それぞれセクタ、ステート、アドレスが格納される。また、キャッシュメモリ12aが有する各キャッシュラインは、複数のグループに組み分けられている。例えば、インデックス「1」〜「32」は、グループ「1」、インデックス「B」〜「B+31」は、グループ「A」、インデックスう「M−31」〜「M」は、グループ「M」に組み分けられている。
概要セクタフラグ12eは、各コアが実行するアプリケーション35が指定した期間内に更新したデータが各グループのキャッシュラインに格納されているか否かを判別するフラグをコアごとに有する。すなわち、概要セクタフラグ12eは、コアAが実行するアプリケーション35が指定する期間内に、コアAが実行するアプリケーション35の要求に応じて更新したデータが各グループのキャッシュラインに存在するか否かを示すフラグを有する。同様に、概要セクタフラグ12eは、コアB〜Cが実行するアプリケーション35が指定する期間内に、コアB〜Cが実行するアプリケーション35の要求に応じて更新したデータが各グループのキャッシュラインに存在するか否かを示すフラグを有する。
例えば、概要セクタフラグ12eを有するCPU12dは、コアAが実行するアプリケーション35が指定する期間内に、コアAが実行するアプリケーション35の要求に応じてグループ1のキャッシュラインに格納されたデータを更新する。すると、CPU12dは、概要セクタフラグ12eが有するコアAの各フラグのうち、グループ1のフラグを「1」にする。
続いて、CPU12dは、コアDが実行するアプリケーション35が指定する期間内に、コアDが実行するアプリケーション35の要求に応じてグループAのキャッシュラインに格納されたデータを更新する。すると、CPU12dは、概要セクタフラグ12eが有するコアDの各フラグのうち、グループAのフラグを「1」にする。そして、CPU12dは、コアAが実行するアプリケーション35がキャッシュフラッシュを要求した場合には、概要セクタフラグ12eのグループAのフラグを検査し、グループ1のフラグが「1」であると判別する。この結果、CPU12dは、グループAのキャッシュラインについては、検査の対象にせず、グループ1のキャッシュラインのみを検査の対象とする。
[実施例3の効果]
上述したように、CPU12dは、アプリケーション35が指定した期間内に更新したデータが各グループのキャッシュラインに格納されているか否かをコアA〜Dごとに示す概要セクタフラグ12eを有する。そして、例えば、CPU12dは、コアAが実行するアプリケーション35が指定した時間内に、コアAが実行するアプリケーション35の要求に応じて、グループ1のキャッシュラインに格納されたデータを更新した場合には、以下の処理を実行する。すなわち、CPU12dは、グループ1のキャッシュラインに更新したデータが存在する旨の概要セクタフラグをコアAについて設定する。
そして、CPU12dは、コアAが実行するアプリケーション35がフラッシュ要求を発行した場合には、コアAの概要セクタフラグを検査し、更新したデータが存在する旨の概要セクタフラグが設定されたキャッシュラインを検査する。その後、CPU12dは、検査したキャッシュラインのうち、更新されたデータをメモリ17〜24に書き戻す。
このため、CPU12dは、複数のコアを有する場合にも、効率良くフラッシュを実行することができる。すなわち、CPU12dは、各コアが共通して使用するキャッシュメモリを有する場合にも、各コアごとに独立してキャッシュフラッシュを行うことができる。この結果、CPU12dは、複数のコアを有する場合にも、不要なキャッシュフラッシュを行わないので、キャッシュフラッシュを効率良く実行する結果、情報処理システム1bの性能劣化を防ぐことができる。
実施例4では、CPU12、CPU12b、CPU12dが発揮する機能に加えて、各キャッシュラインが有する複数のウェイのうち、特定のウェイに格納されたデータのみをキャッシュフラッシュの対象とするCPUについて説明する。
図15は、実施例4に係るノードの機能構成を説明するための図である。なお、図15には、実施例4に係るノード10pの機能構成を示したが、ノード10pは、実施例1と同様の機能を有する情報処理システム1cが有するノードである。また、図15に示すノード10pのうち、実施例1〜実施例3と同じ符号を付したものについては、実施例1〜3と同様の機能を発揮するものとして、説明を省略する。図15に示す例では、ノード10pは、複数のCPU12f〜CPU15fを有する。
CPU12fは、キャッシュメモリ12aと概要セクタフラグ12cを有する。また、他のCPU13d〜15dも同様に、キャッシュメモリ13a〜15aと概要セクタフラグ12c〜15cを有する。なお、キャッシュメモリ12a〜15aは、実施例3に係るキャッシュメモリ12a〜15aと同様に、複数のキャッシュライン「0」〜「W」を有し、各キャッシュ欄には、複数のウェイが存在する。
また、各CPU12f〜15fが有する概要セクタフラグ12c〜15cは、実施例2に示す概要セクタフラグと同様のものであるが、各CPU12f〜15fは、実施例3に示す概要セクタフラグ12e〜15eを有することとしてもよい。なお、以下の説明では、CPU13f〜15fは、CPU12fと同様の機能を発揮するものとして、説明を省略する。
CPU12fは、実施例1に係るCPU12、および実施例2に係るCPU12bと同様の機能を発揮するとともに、以下の機能を有する。すなわち、CPU12fは、アプリケーション35が指定した期間内に更新したデータを、特定のウェイにのみ格納する。そして、CPU12fは、アプリケーション35がフラッシュ要求を発行した場合には、各キャッシュラインうち、特定のウェイのみを検査し、セクタフラグが設定されたデータを識別する。その後、CPU12fは、識別したデータをメモリ17〜24に書き戻す。
図16は、フラッシュの対象を特定のウェイに限定する処理の一例を説明するための図である。例えば、CPU12fは、アプリケーション35が指定する期間内に更新が行われた場合には、更新対象となるデータをキャッシュメモリ12aが有するいずれかのキャッシュラインのうち、ウェイ「0」に格納する。また、CPU12fは、図16中(z)に示すように、ウェイ「0」のキャッシュタグのうち、データを格納したキャッシュラインのキャッシュタグにセクタフラグ「1」とステートとアドレスとを格納する。
そして、CPU12fは、アプリケーションがフラッシュ要求を発行した場合には、ウェイ「0」のキャッシュタグのみを検査し、セクタフラグ「1」が格納されたキャッシュラインを識別する。その後、CPU12fは、識別したキャッシュラインのうち、ウェイ「0」のデータをメモリ17〜24に書き戻す。
[実施例4の効果]
上述したように、キャッシュメモリ12aは、複数のウェイ「0」〜「W」を有する複数のキャッシュラインを有する。そして、CPU12fは、アプリケーションが指定した期間内に更新されたデータをいずれかのキャッシュラインのウェイ「0」に格納し、フラッシュ要求が発行されると、各キャッシュラインのウェイ「0」のみを検査する。その後、CPU12fは、検査した結果、更新されたデータが格納された旨を示すセクタフラグが格納されたキャッシュラインのウェイ「0」に格納されたデータをメモリ17〜24に書き戻す。
このため、CPU12fは、フラッシュの対象を限定することができるので、フラッシュの処理時間を削減し、情報処理システム1cの処理能力を向上させることができる。また、CPU12fは、特定のウェイのデータのみをメモリ17〜24に書き戻す。このため、例えば、CPU12fは、演算処理に頻繁に使用するデータ等、メモリ17〜24に書き戻すべきではないデータ等をウェイ「1」〜「W」に格納することで、キャッシュフラッシュの対象外とすることができる。この結果、CPU12fは、演算処理の効率を向上させ、情報処理システム1cの性能を向上させることができる。
実施例5では、複数のコア、L1(Level 1)キャッシュ、およびL2(Level 2)キャッシュを有し、各キャッシュラインごとのセクタフラグと、各コアごとに概要セクタフラグを有するCPUについて説明する。
図17は、実施例5に係るCPUの機能構成を説明するための図である。CPU12gは、実施例1の同様の機能を有する情報処理システム1cが有するCPUであり、CPU12、CPU12b、CPU12d、CPU12fと同様に、情報処理システム1dが有するノードに設置された複数のCPUの1つである。なお、図17には、実施例5に係るCPU12gの機能構成を示した。
図17に示す例では、CPU12gは、ローカルXB16、メモリ17、メモリ18、PCIeスイッチ25と接続されている。また、CPU12gは、複数のコア40〜40b、セクタID(Identification)生成部41〜41b、L1キャッシュタグ42〜42b、L1キャッシュ43〜43b、TLB(Translation Lookaside Buffer)44〜44bを有する。
また、CPU12gは、L2キャッシュアクセスコントローラ45、L2キャッシュタグ46、L2キャッシュ47、L2キャッシュ概要セクタフラグ48、アドレスマップ49、非キャッシュリクエストステートマシン50を有する。また、CPU12gは、設定レジスタ群51、フラッシュ制御部52、PCI制御部53、ディレクトリ制御部54、スヌープ制御部55、リクエスト制御部56を有する。
なお、コア40a、コア40bについては、コア40と同様の機能を発揮し、セクタID生成部41a、セクタID生成部41bについては、セクタID生成部41と同様の機能を発揮するものとして、以下の説明を省略する。また、L1キャッシュタグ42a、L1キャッシュタグ42bは、L1キャッシュタグ42と同様の機能を発揮し、L1キャッシュ43a、L1キャッシュ43bは、L1キャッシュ43と同様の機能を発揮するものとして、以下の説明を省略する。また、TLB44a、TLB44bは、TLB44と同様の機能を発揮するものとして、以下の説明を省略する。
コア40は、L1キャッシュ43に格納されたデータを用いて、演算処理を実行する演算装置である。セクタID生成部41は、コア40が出力する命令コードとレジスタの設定情報とに応じて、セクタIDを生成し、生成したIDをL1キャッシュタグ42に出力する。ここで、セクタIDとは、コア40が実行するアプリケーションが指示した期間内に更新が行われたか否かを示す情報である。
L1キャッシュタグ42は、L1キャッシュ43のタグデータであり、L1キャッシュ43の各キャッシュラインに格納されたデータのアドレス、ステート、リプレース要のLRU(Least Recently Used)情報、セクタIDを記憶する。
L1キャッシュ43は、高速にアクセス可能なキャッシュメモリであり、メモリ17、メモリ18、L2キャッシュ47に格納されたデータの一部をキャッシュする。なお、L1キャッシュ43は、コア40専用の1次キャッシュである。例えば、L1キャッシュ43は、命令用の領域とデータ用の領域とにそれぞれ64キロバイトの容量を有する。また、TLB44は、変換テーブルを用いて、コア40が出力する仮想アドレスを物理アドレスに変換する。
ここで、図18、図19を用いて、L1キャッシュタグ42およびL1キャッシュ43について説明する。図18は、L1キャッシュタグを説明するための図である。図18に示す例では、L1キャッシュタグ42は、仮想アドレスのインデックス、すなわち、「00_0000_0」〜「11_1111_1」までの下位7ビットをインデックスとする。また、L1キャッシュタグ42は、各インデックスについて、命令をキャッシュする領域のタグデータ(IF)と、データをキャッシュする領域のタグデータ(OP:Operand)とを記憶する。
また、L1キャッシュタグ42は、各インデックスごとにウェイ0〜ウェイ3までのタグデータを記憶する。また、L1キャッシュタグは、タグデータとして、Val、2ビットのステート[1:0]、2ビットのセクタID[1:0]、論理アドレスの上位33ビットであるLA[46:14]、チェックビットであるCB(Check bit)[7:0]を記憶する。なお、以下の説明では、ステート「00」は、I(Invalid)を示し、ステート「01」はS(Share)を示し、ステート「10」はE(Exclusive)を示し、ステート「11」はM(Modify)を示すものとする。
次に、図19を用いて、L1キャッシュ43について説明する。図19は、L1キャッシュを説明するための図である。図19に示す例では、L1キャッシュ43は、L1キャッシュタグ42と同様に、命令をキャッシュする領域と、データをキャッシュする領域とを有する。また、L1キャッシュ43が有する各キャッシュラインには、論理アドレスのインデックスと対応付けられており、それぞれウェイ「0」〜「3」までの4つのウェイを有する。また、各キャッシュラインの各ウェイには、128バイトのデータと16バイトのチェックビットとが格納される。
次に、図20を用いて、コア40、セクタID生成部41、L1キャッシュタグ42、L1キャッシュ43、TLB44が実行する処理の詳細な例を説明する。図20は、実施例5に係るセクタID生成部が実行する処理を説明するための図である。図20に示す例では、セクタID生成部41は、ASIレジスタ41c、セクタID選択制御部41d、セクタID選択部41eを有する。
また、図20に示す例では、ASIレジスタ41cは、HPV(Hypervisor)の特権命令でアクセスするセクタイネーブルとフラッシュイネーブルとを記憶する。また、ASIレジスタ41cは、コア40が実行するアプリケーションが指定する期間の開始および終了を示すスフラッシュセクタモードを記憶する。
コア40は、セクタフラグを設定する場合には、セクタイネーブルに「1」を格納し、セクラフラグを設定しない場合には、セクタイネーブルに「0」を格納する。また、コア40は、セクタフラッシュの機能を有効にする場合には、フラッシュイネーブルに「1」を格納し、セクタフラッシュの機能を無効にする場合には、フラッシュイネーブルに「0」を格納する。また、コア40は、セクタフラッシュを実行させる場合には、フラッシュセクタモードに「1」を格納し、他の場合には、フラッシュセクタモードに「0」を格納する。
なお、フラッシュセクタモードは、コア40が実行するアプリケーションがアクセス可能なレジスタに格納される。また、ASIレジスタ41cは、あらかじめ定められた2ビットのセクタIDを記憶する。詳細には、ASIレジスタ41cは、セクタIDとしてID0を示す「00」、ID1を示す「01」、FL(Flash)を示す「11」、Def(Default)を示す「00」を記憶する。
例えば、コア40は、ASIレジスタ41cに対して、ASIレジスタの読み出し、または格納を要求するコマンドを発行する(ASI Reg R/W command)。このコマンドには、読み出し、または格納の対象となる10ビットのアドレス(Address[11:2])、4ビットのバイトイネーブル(Byte Enable[3:0])が格納される。
また、コア40は、ASIレジスタ41cに対してデータの格納を要求する場合には、格納対象となる32ビットのデータを出力する(ASI Reg Write Data[31:0])。一方、ASIレジスタ41cは、コア40からのリクエスト内容が読み出しである場合には、読み出した32ビットのデータをコア40に出力する(ASI Reg Read Data[31:0])。
また、コア40は、Request val、Request ID、Code、Logic Address、Sector Sel、Store DataをフィールドとするL1キャッシュリクエストをフィールドとするL1キャッシュリクエストを発行する。具体的には、コア40は、L1キャッシュリクエストをL1キャッシュアクセスコントローラ57と、セクタID選択制御部41dとに発行する。
ここで、Request val(Request Value)とは、リクエストであることを示す情報であり、Request IDとは、リクエストを識別するための8ビットの識別子である。また、Codeとは、リクエストの内容を示す情報であり、データの格納を示すStore、データの読み出しを示すLoad等の情報である。また、Logic Addressとは、リクエストの対象となる41ビットの仮想アドレスである。
また、Sector Selとは、セクタID生成部41に対して生成を要求するセクタIDを示す情報であり、例えば、「ID0」、または「ID1」が格納される。また、Store Dataとは、データの格納を要求するリクエストに付加される情報であり、L1キャッシュ43に格納する128バイトのデータである。
また、コア40は、非キャッシュリクエストステートマシン50に対し、NC(Non coherency)空間へのリード要求、またはライト要求であるNCリクエストを発行する。詳細には、コア40は、「Req val」、「Request ID」、「Code」、「Logic Address(LA)」、「Byte Enable(BE)」、「Store Data」をフィールドとするNCリクエストを発行する。
ここで、「Req val」は、リクエスト信号であることを示す情報であり、「Request ID」は、リクエストを識別する8ビットの情報である。また、「Code」は、リクエストの内容を示す情報であり、データの格納を示す「Store」、データの読み出しを示す「Load」等が格納される。
また、「Logic Address」は、リクエストの対象となる48ビットの仮想アドレスである。また、「Byte Enable」とは、イネーブルを示す129ビットの情報である。また、「Store Data」とは、リクエストの種別が「Store」である際に格納する128バイトのデータである。
ASIレジスタ41cは、セクタイネーブル、フラッシュイネーブル、フラッシュセクタモードの値をセクタID選択制御部41dに出力する。また、ASIレジスタ41cは、セクタIDをそれぞれセクタID選択部41eに出力する。セクタID選択制御部41dは、コア40が発行したL1キャッシュリクエストを取得し、L1キャッシュリクエストのSector Selの値を取得する。また、セクタID選択制御部41dは、ASIレジスタ41cから、セクタイネーブル、フラッシュイネーブル、フラッシュセクタモードの値を取得する。
そして、セクタID選択制御部41dは、セクタイネーブルの値が「0」である場合には、セクタID選択部41eにDef(00)を選択するよう指示する。また、セクタID選択制御部41dは、セクタイネーブル、フラッシュイネーブル、フラッシュセクタモードの値が全て「1」であり、かつ、L1キャッシュリクエストの内容がデータの格納(Store)である場合には、FL(11)を出力するよう指示する。つまり、セクタID選択制御部41dは、アプリケーションが指定した期間内に更新したデータについては、セクタID「11」を出力するよう指示する。
また、セクタID選択制御部41dは、セクタイネーブル、フラッシュイネーブル、フラッシュセクタモードが「1」でL1キャッシュリクエストの内容がデータの格納ではない場合には、以下の処理を行う。また、セクタID選択制御部41dは、セクタイネーブルが「1」で、フラッシュイネーブル、フラッシュセクタモードのいずれか、または両方が「0」である場合も同様の処理を行う。
すなわち、セクタID選択制御部41dは、L1キャッシュリクエストのSector Selの値を識別する。そして、セクタID選択制御部41dは、Sector Selの値が「ID1」である場合は、ID1を選択するようセレクタ選択部41eに指示し、Sector Selの値が「ID0」である場合は、ID0を選択するようセレクタ選択部41eに指示する。
セクタID選択部41eは、ASIレジスタ41cから、各セクタIDを取得する。そして、セクタID選択部41eは、セクタID選択制御部41dから通知されたセクタIDをL1キャッシュアクセスコントローラ57に出力する。
L1キャッシュアクセスコントローラ57は、コア40からL1キャッシュリクエストを取得する。そして、L1キャッシュアクセスコントローラ57は、L1キャッシュリクエストがデータの読み出しを要求する場合は、L1キャッシュタグ42を用いて、L1キャッシュ43からのデータ読み出しを行う。
また、L1キャッシュアクセスコントローラ57は、読み出しの対象となるデータがL1キャッシュ43に格納されておらず、キャッシュミスが発生した場合には、以下の処理を行う。すなわち、L1キャッシュアクセスコントローラ57は、L1キャッシュ−L2キャッシュアクセスバスを介して、L2キャッシュアクセスコントローラ45にデータのリクエストを送信する。
なお、L1キャッシュアクセスコントローラ57は、L2キャッシュアクセスコントローラ45にデータのリクエストを送信する場合は、TLB44を用いて、論理アドレスを物理アドレスに変換する。そして、L1キャッシュアクセスコントローラ57は、変換後の物理アドレスをL2キャッシュアクセスコントローラ45に送信する。
すると、L1キャッシュアクセスコントローラ57は、L2キャッシュアクセスコントローラ45からデータとともに、セクタIDを取得する。そして、L1キャッシュアクセスコントローラ57は、取得したデータL1キャッシュ43に格納するとともに、取得したセクタIDを変更することなくL1キャッシュタグ42に格納する。
その後、L1キャッシュアクセスコントローラ57は、L1キャッシュ43から読み出し対象となるデータを検索する。すると、キャッシュヒットが発生するので、L1キャッシュアクセスコントローラ57は、データを取得し、取得したデータをL1キャッシュレスポンスとしてコア40に送信する。ここで、L1キャッシュレスポンスには、レスポンスを示す「Req val」と、読み出しを要求したリクエストの「Request ID」と、読み出した128バイトのデータである「Read Data」がフィールドとして含まれる。
また、L1キャッシュアクセスコントローラ57は、L1キャッシュリクエストがデータの格納を要求する場合は、セクタID生成部41からセクタIDを取得する。そして、L1キャッシュアクセスコントローラ57は、データをL1キャッシュ43に格納するとともに、L1キャッシュタグ42に、セクタID生成部41から取得したセクタIDを格納する。
また、L1キャッシュアクセスコントローラ57は、L1キャッシュ43に格納されたデータのリプレースを行う場合には、L1キャッシュ43に格納されたデータとともに、タグデータに含まれるセクタIDをL2キャッシュアクセスコントローラ45に送信する。また、L1キャッシュアクセスコントローラ57は、L1キャッシュ43に格納されたデータが更新され、セクタIDが変更となった場合は、変更後のセクタIDをL2キャッシュアクセスコントローラ45に送信する。
また、L1キャッシュアクセスコントローラ57は、後述するフラッシュ制御部52がフラッシュを実行する場合も同様に、L1キャッシュ43に格納されたデータとともに、タグデータに含まれるセクタIDをL2キャッシュアクセスコントローラ45に送信する。すると、L2キャッシュアクセスコントローラ45は、L1キャッシュアクセスコントローラ57から取得したセクタIDをL2キャッシュタグ46に格納し、データをL2キャッシュ47に格納する。
このように、L1キャッシュアクセスコントローラ57は、アプリケーションが指定する区間内に更新されたデータについては、アプリケーションが指定する区間内に更新されたことを示すセクタID「11」をタグデータとしてL1キャッシュタグ42に格納する。そして、L1キャッシュアクセスコントローラ57は、リプレースやフラッシュが実行される場合は、アプリケーションが指定する区間内に更新されたことを示すセクタID「11」をデータとともにL2キャッシュアクセスコントローラ45に送信する。
なお、L1キャッシュアクセスコントローラ57は、L1キャッシュリクエストが読み出しのリクエストであると判別すると、L1キャッシュタグ42に、読み出しのリクエストであるRead Reqを発行する。ここで、Read Reqには、読み出しのリクエストである旨を示すValと、読み出し対象の論理アドレスLA[46:7]が格納される。
また、L1キャッシュアクセスコントローラ57は、L1キャッシュリクエストが格納のリクエストであると判別すると、以下の処理を実行する。すなわち、L1キャッシュアクセスコントローラ57は、格納のリクエストであるWriteを発行する。ここで、Writeには、書込み対象となるデータ、セクタID生成部41から受信したセクタID、ウェイID、命令データであるかデータであるかの情報が格納される。
また、L1キャッシュアクセスコントローラ57は、L1キャッシュ−L2キャッシュ間のリクエストおよびレスポンスを発行することで、L2キャッシュアクセスコントローラ45とセクタIDおよびデータの要求や送信を行う。
L1キャッシュタグ42は、L1キャッシュアクセスコントローラからRead Reqを受信すると、取得した論理アドレスの下位7ビットと一致するインデックスのタグデータに、取得した論理アドレスの上位33ビットが格納されているか否かを判別する。そして、L1キャッシュタグ42は、取得した論理アドレスの上位33ビットが格納されているタグデータが存在する場合は、キャッシュヒットしたと判別する。一方、L1キャッシュタグ42は、取得した論理アドレスの上位33ビットが格納されているグデータが存在しない場合は、キャッシュミスしたと判別する。
そして、L1キャッシュタグ42は、L1キャッシュアクセスコントローラ57に応答であるRead Rep(Read Response)を発行する。ここで、Read Repには、キャッシュヒットしたか否かの情報、命令データであるかデータであるかの情報、ウェイID、セクタIDが含まれる。また、L1キャッシュタグ42は、キャッシュヒットした場合には、L1キャッシュ43に読み出し要求を発行し、L1キャッシュ43に読み出し対象となるデータをL1キャッシュアクセスコントローラ57に出力させる。
また、L1キャッシュタグ42は、L1キャッシュアクセスコントローラ57から書込み要求であるWriteを受信する。すると、L1キャッシュタグ42は、書込み要求に格納されたセクタIDを書込み要求のウェイIDが示すウェイにウェイタグデータを格納するとともに、L1キャッシュ43にデータを格納する。
なお、L1キャッシュタグ42は、書込み要求の対象となる仮想アドレスのデータを記憶している場合には、タグデータのステートを変更するとともに、タグデータのセクタIDをL1キャッシュアクセスコントローラ57から取得するセクタIDに変更する。すなわち、L1キャッシュタグ42は、コア40が実行するアプリケーションが指定した期間内に更新された旨を示すセクタIDをタグデータに記憶する。
また、非キャッシュリクエストステートマシン50は、UC領域に対するアクセスを制御し、コア40からNCリクエストを受信すると、PCIe等を介した処理等を実行する。例えば、非キャッシュリクエストステートマシン50は、各コア40〜40bがHDD29等のI/O装置に対する読出しや格納のNCリクエストを取得した場合には、取得したNCリクエストをPCI制御部53に発行する。そして、非キャッシュリクエストステートマシン50は、PCI制御部53からリクエストの応答を取得した場合には、取得した応答をNCレスポンスとしてコア40〜40bに送信する。
図17に戻って、L2キャッシュアクセスコントローラ45は、L2キャッシュタグ46やL2キャッシュ47のアクセスコントローラであり、L2キャッシュタグ46やL2キャッシュ47にアクセスするためのパイプラインである。なお、L2キャッシュアクセスコントローラ45は、L1キャッシュアクセスコントローラ57と同様の処理を行う事で、L2キャッシュ47に格納されたデータの制御を行う。また、L2キャッシュアクセスコントローラ45は、同一アドレスをシリアライズ処理する機能を有する。
L2キャッシュタグ46は、L2キャッシュ47のタグデータであり、L2キャッシュタグ42と同様の情報を記憶する。また、L2キャッシュ47は、各コア40〜40bが共用する2次キャッシュメモリである。また、L2キャッシュ47は、複数のキャッシュラインを有し、各キャッシュラインは、複数のグループに組み分けられている。
L2キャッシュ概要セクタフラグ48は、各コア40〜40bが実行するアプリケーションが指定した期間内に更新したデータが各グループのキャッシュラインに格納されているか否かを判別するフラグをコアごとに有する。すなわち、L2キャッシュ概要セクタフラグ48は、実施例3に係る概要セクタフラグ12eと同様のフラグである。
ここで、図21を用いて、L2キャッシュタグ46、L2キャッシュ47、L2キャッシュ概要セクタフラグ48の関係について説明する。図21は、L2キャッシュタグとL2キャッシュとL2キャッシュ概要セクタフラグを説明するための図である。図21に示すように、L2キャッシュ概要セクタフラグ48は、概要セクタフラグ12eと同様に、アプリケーションが指定した期間内に更新したデータがキャッシュラインの各グループに存在するか否かを示すフラグを各コア40〜40bごとに有する。
具体的には、L2キャッシュ概要セクタフラグ48には、L2キャッシュ47が有する各キャッシュラインを「0」〜「63」までのグループに分け、各グループについて、以下のフラグが格納される。すなわち、L2キャッシュ概要セクタフラグ48には、各コア40〜40bが実行するアプリケーションが指定する期間内に更新したデータが、キャッシュラインの各グループに存在するか否かを、各コア40〜40bごとに示すフラグが格納される。
また、図21に示す例では、L2キャッシュタグ46およびL2キャッシュ47は、物理アドレスの下位13ビットであるインデックスと対応付けられた複数のキャッシュラインを有する。なお、図21に示す例では、インデックスの値を10進数で記載した。また、L2キャッシュタグ46およびL2キャッシュ47は、各キャッシュラインごとにウェイID「0」〜「15」までのウェイを有する。
また、L2キャッシュタグ46には、L1キャッシュタグ42と同様に、各キャッシュラインの各ウェイに、タグデータとして、Val、ステート、アドレスの上位27ビット、セクタID、CBが格納される。また、L2キャッシュ47には、L1キャッシュ43と同様に、各キャッシュラインの各ウェイに対して、128バイトのデータと16バイトのデータが格納される。
図17に戻って、アドレスマップ49は、リクエスト対象となる物理アドレスと、物理アドレスが示す記憶領域にアクセスするCPUの識別子とを対応付けて記憶し、物理アドレスをCPUの識別子に変換する。つまり、アドレスマップ49は、CPU12gが他のCPUと接続されたメモリにアクセスするリクエストを発行すると、アクセス対象の物理アドレスからリクエストの送信先となるCPUの識別子を判別する。そして、アドレスマップ49は、リクエスト制御部56に、リクエストの送信先となるCPUの識別子を通知する。
設定レジスタ群51は、CPU12gの各種設定を行う複数のレジスタである。フラッシュ制御部52は、コア40〜40bからの命令により、L2キャッシュ47に対するキャッシュフラッシュを行う。すなわち、フラッシュ制御部52は、L2キャッシュ47が記憶するデータをメモリ17、18に書き戻す処理を行う。また、フラッシュ制御部52は、書き戻すデータがCPU12g以外のCPUがアクセスするメモリからキャッシュしたデータである場合には、元のメモリに対して書き戻しを行う。
PCI制御部53は、CPU接続のPCIexpressに対するルートコンプレックスである。ディレクトリ制御部54は、NUMAの技術を用いたメモリアクセスを制御する。また、ディレクトリ制御部54は、DMA(Direct Memory Access)等のメモリリクストを取得すると、メモリ17、メモリ18に格納されたディレクトリ情報を用いて、キャッシュコヒーレンシを維持する処理を実行する。例えば、ディレクトリ制御部54は、スヌープ制御部55を用いて、他のCPUにスヌープを発行したり、他のCPUが発行したスヌープに対する応答等を実行する。
スヌープ制御部55は、ローカルXB16を介して、CPU12g以外のCPUからのスヌープを受付けると、L2キャッシュ47を検査し、検査結果を応答として返信する。また、スヌープ制御部55は、ディレクトリ制御部54からスヌープの発行を要求された場合は、スヌープをCPU12g以外のCPUに対して送信する。例えば、スヌープ制御部55は、L2キャッシュ47に格納されたスヌープ対象のデータのステートが「M」であった場合には、キャッシュデータをスヌープの応答として送信する。
リクエスト制御部56は、L2キャッシュ47のキャッシュミスが発生した際に、他のCPUへのリクエスト発行から、他のCPUからの応答受信までの管理を行う。例えば、リクエスト制御部56は、物理アドレスをアドレスマップ49に出力し、リクエストの送信先となるCPUの識別子を取得する。そして、リクエスト制御部56は、取得した識別子を宛先として、リクエストをローカルXB16に出力する。
また、リクエスト制御部56は、リクエストの対象となるアドレス等を保持する複数のエントリを有する。そして、リクエスト制御部56は、コア40〜40bから、処理中の物理アドレスに対してリクエストが発行された場合には、後段のリクエストを待機させるため、エントリに格納する。そして、リクエスト制御部56は、エントリに格納したリクエストを発行する場合には、リクエストを格納したエントリの識別子をリクエストに付加して出力する。
ローカルXB16は、インターコネクト用のルータであり、CPUの識別子に対応した宛先へ、リクエストを送信する。また、ローカルXB16は、送信するリクエストのパケット化やCRC(Cyclic Redundancy Check)の付加等を行う。
次に、図22を用いて、L2キャッシュアクセスコントローラ45が送受信する信号の一例について説明する。図22は、実施例5に係るL2キャッシュアクセスコントローラが送受信する信号を説明するための図である。例えば、図22に示す例では、L2キャッシュアクセスコントローラ45は、L1キャッシュアクセスコントローラ57からL1キャッシュ−L2キャッシュ間のリクエストを受信する。
すると、L2キャッシュアクセスコントローラ45は、L2キャッシュリードリクエストをL2キャッシュタグ46に発行し、L2キャッシュタグ46からL2キャッシュリードレスポンスを受信する。そして、L2キャッシュアクセスコントローラ45は、L2キャッシュリードレスポンスにキャッシュヒットした旨が含まれる場合は、L2キャッシュ47からリードデータを取得するとともに、L2キャッシュタグ46からセクタIDを取得する。その後、L2キャッシュアクセスコントローラ45は、取得したリードデータとセクタIDとをL1キャッシュアクセスコントローラ57にレスポンスとして出力する。
また、L2キャッシュアクセスコントローラ45は、L2キャッシュリードレスポンスにキャッシュミスした旨が含まれる場合は、リクエスト制御部56にリクエストの発行を要求する。すると、リクエスト制御部56は、リクエストを発行し、リクエストの対象となるデータを取得する。
例えば、リクエスト制御部56は、ディレクトリ制御部54を解してメモリ17、18からデータを取得する。また、例えば、リクエスト制御部56は、ローカルXB16を介してCPU12g以外のCPUへリクエストを発行し、CPU12g以外のCPUと接続されたメモリの共有領域からデータを取得する。そして、リクエスト制御部56は、取得したデータをL2キャッシュアクセスコントローラ45に出力する。
また、L2キャッシュアクセスコントローラ45は、リクエスト制御部56からデータを取得すると、L2キャッシュライトリクエストをL2キャッシュタグ46に発行し、ライトデータをL2キャッシュ47に送信する。すなわち、L2キャッシュアクセスコントローラ45は、新たなデータをL2キャッシュ47に格納する。
なお、L2キャッシュアクセスコントローラ45は、L1キャッシュのリプレースが発生し、L1キャッシュから吐き出されたデータを取得すると、L2キャッシュタグ46にL2キャッシュライトリクエストを発行し、吐き出されたデータの更新を行う。また、L2キャッシュアクセスコントローラ45は、L1キャッシュから吐き出されたデータとともにセクタIDを受信し、受信したセクタIDをL2キャッシュタグ46に格納する。
また、L2キャッシュアクセスコントローラ45は、データをL2キャッシュ47に格納する場合には、以下の処理を行う。すなわち、L2キャッシュアクセスコントローラ45は、格納するデータのセクタIDに応じて、概要セクタフラグをL2キャッシュ概要セクタフラグ48に格納する。
詳細には、L2キャッシュアクセスコントローラ47は、セクタIDが「11」である場合には、データを格納するキャッシュラインを含むグループに更新したデータが存在する旨を示す概要セクタフラグ「1」をL2キャッシュ概要セクタフラグ48に格納する。
なお、L2キャッシュアクセスコントローラ47は、概要セクタフラグを格納する際に、任意の方法で、データを更新したアプリケーションを実行するコアを識別し、識別したコアの概要セクタフラグを格納する。例えば、L2キャッシュアクセスコントローラ47は、リクエストIDを用いて、データを更新したアプリケーションを実行するコアを識別することとしてもよい。また、L2キャッシュアクセスコントローラ47は、LRU59に格納されたLRUを用いて、リプレースの対象となるキャッシュラインを選択する。
非キャッシュリクエストステートマシン50は、コア40〜40bが発行したフラッシュ要求を取得すると、フラッシュ制御部52にフラッシュの実行を指示する。すると、フラッシュ制御部52は、L2キャッシュ概要セクタフラグ48から概要セクタフラグを取得し、概要セクタフラグに応じたキャッシュラインに対するフラッシュ要求をL2キャッシュアクセスコントローラ45に発行する。
つまり、フラッシュ制御部52は、L2キャッシュ概要セクタフラグ48が有する各フラグのうち、フラッシュ要求を発行したコアの概要セクタフラグを検査し、フラグ「1」が格納されたグループを検索する。そして、フラッシュ制御部52は、フラグ「1」を検出したグループのキャッシュラインに対するフラッシュ要求を順次L2キャッシュアクセスコントローラ45に発行する。なお、フラッシュ制御部52は、フラッシュ要求の発行が終了すると、フラッシュ要求の対象となるキャッシュラインのグループ、および、フラッシュ要求を発行したコア等に応じて、L2キャッシュ概要セクタフラグ48のリセットを行う。
一方、L2キャッシュアクセスコントローラ45は、フラッシュ制御部52からのフラッシュ要求に応じて、L2キャッシュ47のキャッシュフラッシュを行う。具体的には、L2キャッシュアクセスコントローラ45は、フラッシュ要求の対象となるキャッシュラインのタグデータを検査し、セクタIDが「11」であり、ステートが「M」であるエントリを各ウェイから検索する。そして、L2キャッシュアクセスコントローラは、セクタIDが「11」であり、ステートが「M」であるエントリを検出すると、検出したエントリに対するフラッシュを実行する。
詳細には、L2キャッシュアクセスコントローラ45は、セクタIDが「11」でステートが「M」のエントリのデータをL2キャッシュ47から取得し、ステートを「I」に更新する。そして、L2キャッシュアクセスコントローラ45は、取得したデータをディレクトリ制御部54へ送信し、メモリ17、18、または、他のCPUと接続されたメモリへの書き戻しを要求する。
なお、ディレクトリ制御部54は、CPU12gと接続するメモリ17、18以外のメモリにデータの書き戻しを行う場合には、リクエスト制御部56と同様にアドレスマップ49を用いてデータの書き戻し先のメモリと接続されたCPUを識別する。そして、ディレクトリ制御部54は、ローカルXB16を介して、識別したCPUにデータを送信する。
なお、ディレクトリ制御部54は、ディレクトリ情報に基づいて、スヌープの発行をスヌープ制御部55に要求し、L2キャッシュアクセスコントローラ45や、他のCPUにスヌープを発行させる。L2キャッシュアクセスコントローラ45は、スヌープ制御部55が発行したスヌープ、または、リクエスト制御部56が他のCPUから受信したスヌープを取得すると、L2キャッシュ47に格納されたデータの出力等を行う。
ここで、非キャッシュリクエストステートマシン50は、コア40〜40bからの要求に応じて、セクタ最大値レジスタ58に、フラッシュの対象となるウェイ数の最大値を設定する。詳細には、非キャッシュリクエストステートマシン50は、セクタIDの値ごとに、各キャッシュラインのウェイに登録可能なタグデータの数をセクタ最大値レジスタ58に設置する。
そして、L2キャッシュアクセスコントローラ45は、登録可能なデータの数を超えて、新たなデータを格納する場合には、格納するデータのセクタIDの値に応じて、リプレースを行う。例えば、L2キャッシュアクセスコントローラ45は、新たに格納するデータのセクタIDが「11」である場合には、セクタID「01」またはセクタID「10」のデータをリプレースする。また、L2キャッシュアクセスコントローラ45は、新たに格納するデータのセクタIDが「01」である場合には、セクタIDが「01」またはセクタIDが「00」のデータをリプレースする。
例えば、コア40〜40b、セクタID生成部41〜41b、TLB44〜44b、L2キャッシュアクセスコントローラ45、L2キャッシュ概要セクタフラグ48、非キャッシュリクエストステートマシンとは、電子回路である。また、例えば、フラッシュ制御部52、PCI制御部53、ディレクトリ制御部54、スヌープ制御部55、リクエスト制御部56、L1キャッシュアクセスコントローラ57、とは、電子回路である。ここで、電子回路の例として、ASIC(Application Specific Integrated Circuit)やFPGA (Field Programmable Gate Array)などの集積回路、またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などを適用する。
また、L1キャッシュタグ42〜42b、L1キャッシュ43〜43b、L2キャッシュタグ46、L2キャッシュ47、LRU59とは、RAM(Random Access Memory)、フラッシュメモリ(flash memory)などの半導体メモリ素子などの記憶装置である。また、設定レジスタ群51、セクタ最大値レジスタ58とは、レジスタである。
次に、図23を用いて、セクタID生成部41がL1キャッシュタグ42に格納するセクタIDを生成する処理の流れについて説明する。図23は、L1キャッシュタグに格納するセクタIDを生成する処理の流れを説明するためのフローチャートである。
例えば、セクタID生成部41は、セクタイネーブルが「1」であるか否かを判別する(ステップS101)。そして、セクタID生成部41は、セクタイネーブルが「1」ではない場合には(ステップS101否定)、すなわち、セクタフラグを用いたフラッシュを行わない場合には、セクタIDを「00」に設定し(ステップS102)、処理を終了する。一方、セクタID生成部41は、セクタイネーブルが「1」である場合には(ステップS101肯定)、フラッシュイネーブルが「1」であるか否かを判別する(ステップS103)。
そして、セクタID生成部41は、フラッシュイネーブルが「1」ではない場合には(ステップS103否定)、セクタセレクタが「1」であるか否かを判別する(ステップS104)。そして、セクタID生成部41は、セクタセレクタが「1」ではない場合には(ステップS104否定)、セクタIDを「00」に設定し(ステップS105)、処理を終了する。また、セクタID生成部41は、セクタセレクタが「1」である場合には(ステップS104肯定)、セクタIDを「01」に設定し(ステップS106)、処理を終了する。
また、セクタID生成部41は、フラッシュイネーブルが「1」であると判別した場合には(ステップS103肯定)、フラッシュセクタモードが「1」であるか否かを判別する(ステップS107)。そして、セクタID生成部41は、フラッシュセクタモードが「1」である場合には(ステップS107肯定)、L1キャッシュリクエストのCodeが「Store」であるか否かを判別する(ステップS108)。
また、セクタID生成部41は、Codeが「Store」である場合には(ステップS108肯定)、セクタIDを「11」に設定し(ステップS109)、処理を終了する。一方、セクタID生成部41は、フラッシュセクタモードが「1」ではない場合(ステップS107否定)、および、Codeが「Store」ではない場合(ステップS108否定)は、ステップS104を実行する。
次に、図24を用いて、L1キャッシュアクセスコントローラ57がL1キャッシュタグ42のセクタIDを登録/更新する処理の流れを説明する。図24は、L1キャッシュのセクタIDを登録/更新する処理の流れを説明するためのフローチャートである。例えば、L1キャッシュアクセスコントローラ57は、L1キャッシュタグ42を用いてL1キャッシュの検索を行い、L1キャッシュヒットしたか否かを判別する(ステップS201)。
そして、L1キャッシュアクセスコントローラ57は、L1キャッシュヒットしたと判別した場合は(ステップS201肯定)、ヒットしたエントリのセクタIDを読み込む(ステップS202)。次に、L1キャッシュアクセスコントローラ57は、読み取ったセクタIDが「11」であるか否かを判別する(ステップS203)。そして、L1キャッシュアクセスコントローラ57は、セクタIDが「11」である場合は(ステップS203肯定)、読み取ったセクタIDを「11」に更新し(ステップS204)、処理を終了する。
一方、L1キャッシュアクセスコントローラ57は、読み取ったセクタIDが「11」ではない場合は(ステップS203否定)、セクタID生成部41が生成した生成セクタIDが「11」であるか否かを判別する(ステップS205)。そして、L1キャッシュアクセスコントローラ57は、生成セクタIDが「11」である場合は(ステップS205肯定)、L2キャッシュアクセスコントローラ45にセクタIDの変更リクエストを送信する(ステップS206)。
また、L1キャッシュアクセスコントローラ57は、変更リクエスト完了通知をL2キャッシュアクセスコントローラ45から受信すると(ステップS207)、セクタIDを「11」に更新し(ステップS204)、処理を終了する。また、L1キャッシュアクセスコントローラ57は、生成セクタIDが「11」ではない場合は(ステップS205否定)、生成セクタIDが「00」であるか否かを判別する(ステップS208)。
また、L1キャッシュアクセスコントローラ57は、生成セクタIDが「00」である場合には(ステップS208肯定)、生成セクタIDが読み取ったセクタIDと一致するか否かを判別する(ステップS209)。そして、L1キャッシュアクセスコントローラ57は、生成セクタIDが読み取ったセクタIDと一致する場合は(ステップS209肯定)、セクタIDを「00」に更新し(ステップS210)、処理を終了する。
また、L1キャッシュアクセスコントローラ57は、生成セクタIDが読み取ったセクタIDと一致しない場合は(ステップS209否定)、L2キャッシュアクセスコントローラ45にセクタIDの変更リクエストを送信する(ステップS211)。また、L1キャッシュアクセスコントローラ57は、変更リクエスト完了通知をL2キャッシュアクセスコントローラ45から受信すると(ステップS212)、セクタIDを「00」に更新し(ステップS210)、処理を終了する。
また、L1キャッシュアクセスコントローラ57は、生成セクタIDが「00」ではない場合には(ステップS208否定)、生成セクタIDが読み取ったセクタIDと一致するか否かを判別する(ステップS213)。そして、L1キャッシュアクセスコントローラ57は、生成セクタIDが読み取ったセクタIDと一致する場合は(ステップS213肯定)、セクタIDを「01」に更新し(ステップS214)、処理を終了する。
また、L1キャッシュアクセスコントローラ57は、生成セクタIDが読み取ったセクタIDと一致しない場合は(ステップS213否定)、L2キャッシュアクセスコントローラ45にセクタIDの変更リクエストを送信する(ステップS215)。また、L1キャッシュアクセスコントローラ57は、変更リクエスト完了通知をL2キャッシュアクセスコントローラ45から受信すると(ステップS216)、セクタIDを「01」に更新し(ステップS214)、処理を終了する。
また、L1キャッシュアクセスコントローラ57は、L1キャッシュヒットしなかった場合は(ステップS201否定)、L2キャッシュアクセスコントローラ45に補充リクエストを発行する(ステップS217)。次に、L1キャッシュアクセスコントローラ57は、レスポンスに含まれるセクタIDを取得する(ステップS218)。そして、L1キャッシュアクセスコントローラ57は、レスポンスから取得したセクタIDが「00」であるか否かを判別する(ステップS219)。
ここで、L1キャッシュアクセスコントローラ57は、レスポンスから取得したセクタIDが「00」である場合は(ステップS219肯定)、セクタID「00」を登録し(ステップS220)、処理を終了する。また、L1キャッシュアクセスコントローラ57は、レスポンスから取得したセクタIDが「00」ではない場合は(ステップS219否定)、レスポンスから取得したセクタIDが「01」であるか否かを判別する(ステップS221)。
そして、L1キャッシュアクセスコントローラ57は、レスポンスから取得したセクタIDが「01」である場合は(ステップS221肯定)、セクタID「01」を登録し(ステップS222)、処理を終了する。また、L1キャッシュアクセスコントローラ57は、レスポンスから取得したセクタIDが「01」ではない場合は(ステップS221否定)、セクタID「11」を登録し(ステップS223)、処理を終了する。すなわち、L1キャッシュアクセスコントローラ57は、L2キャッシュアクセスコントローラ45から受信したセクタIDをそのまま登録する。
L1キャッシュアクセスコントローラ57は、図23に示す処理を実行することでアプリケーションが実行する期間内に更新されたデータか否かを示すセクタIDを生成し、図24に示す処理を実行することで、セクタIDを登録する。この結果、L1キャッシュアクセスコントローラ57は、図25に示すように、L1キャッシュタグ42に登録したセクタIDを遷移させる。
図25は、L1キャッシュタグに登録したセクタIDの遷移を説明するための図である。図25に示す例では、不定(empty)であったセクタIDに、セクタID「00」、「01」、「11」のいずれかを登録することで、セクタIDは、「00」、「01」、「11」に遷移する。また、キャッシュのリプレースを行った場合やステートをインバリッドに変更した場合には、各セクタIDの値は不定となる。
また、セクタID「00」やセクタID「01」は、更新するセクタIDの値に応じて、セクタID「00」、「01」、「11」のいずれかに遷移する。しかし、セクタIDの値が「11」となった場合には、リプレースやインバリッド以外で、セクタIDの値が遷移することはない。このため、CPU12gは、一度セクタIDが「11」となったデータを必ずフラッシュできる。
次に、図26を用いて、L2キャッシュにおけるセクタIDの登録を行う処理の流れについて説明する。図26は、L2キャッシュにおけるセクタIDを登録する処理の流れを説明するためのフローチャートである。
例えば、L2キャッシュアクセスコントローラ45は、L2キャッシュタグ46を用いてL2キャッシュの検索を行い、L2キャッシュヒットしたか否かを判別する(ステップS301)。そして、L2キャッシュアクセスコントローラ45は、L2キャッシュヒットしたと判別した場合は(ステップS301肯定)、ヒットしたエントリのセクタIDを読み込む(ステップS302)。
次に、L2キャッシュアクセスコントローラ45は、読み取ったセクタIDが「00」または「11」であるか否かを判別する(ステップS303)。そして、L2キャッシュアクセスコントローラ45は、セクタIDが「00」、または、セクタIDが「01」である場合は(ステップS304)、セクタIDが「00」であるか否かを判別する(ステップS304)。
そして、L2キャッシュアクセスコントローラ45は、セクタIDが「00」である場合は(ステップS304肯定)、読み取ったセクタIDを「00」に更新する(ステップS305)。一方、L2キャッシュアクセスコントローラ45は、セクタIDが「00」ではない場合は(ステップS304否定)、セクタIDが「01」であるか否かを判別する(ステップS306)。そして、L2キャッシュアクセスコントローラ45は、セクタIDが「01」である場合は(ステップS306肯定)、読み取ったセクタIDを「01」に更新する(ステップS307)。
一方、L2キャッシュアクセスコントローラ45は、セクタIDが「01」ではない場合は(ステップS306否定)、読み取ったセクタIDを「11」に更新する(ステップS308)。また、L2キャッシュアクセスコントローラ45は、読み取ったセクタIDが「00」または「01」ではない場合は(ステップS303否定)、読み取ったセクタIDを「11」に更新する(ステップS308)。
また、L2キャッシュアクセスコントローラ45は、L2キャッシュヒットしなかった場合は(ステップS301否定)、検索対象となるデータのホームアドレスがCPU12gのアドレスであるか否かを判別する(ステップS309)。そして、L2キャッシュアクセスコントローラ45は、検索対象となるデータのホームアドレスがCPU12gのアドレスである場合は(ステップS309肯定)、ディレクトリ制御部54にデータ補充リクエストを発行する(ステップS310)。
一方、L2キャッシュアクセスコントローラ45は、検索対象となるデータのホームアドレスがCPU12gのアドレスではない場合は(ステップS309否定)、他のCPUにデータ補充リクエストを発行する(ステップS311)。次に、L2キャッシュアクセスコントローラ45は、データ補充のレスポンスを受信すると(ステップS312)、データとともに受信するセクタIDが「00」であるか否かを判別する(ステップS313)。
そして、L2キャッシュアクセスコントローラ45は、受信したセクタIDが「00」である場合は(ステップS313肯定)、セクタIDを「00」に更新し(ステップS314)、処理を終了する。一方、L2キャッシュアクセスコントローラ45は、受信したセクタIDが「00」ではない場合は(ステップS313否定)、受信したセクタIDが「01」であるか否かを判別する(ステップS315)。
そして、L2キャッシュアクセスコントローラ45は、受信したセクタIDが「01」である場合は(ステップS315肯定)、セクタIDを「01」に更新する(ステップS316)。また、L2キャッシュアクセスコントローラ45は、受信したセクタIDが「01」ではない場合は(ステップS315否定)、セクタIDを「11」に更新する(ステップS317)。
その後、L2キャッシュアクセスコントローラ45は、セクタIDを更新した場合は(ステップS305、S307、S308、S314、S316、S317)、以下の処理を実行する。すなわち、L2キャッシュアクセスコントローラ45は、レスポンスとして更新後のセクタIDをL1キャッシュアクセスコントローラ57に応答し(ステップS318)、処理を終了する。
なお、CPU12gは、実施例1に係るCPU12と同様の機能を発揮する。このため、CPU12gは、自身に接続するメモリ17、18の一部を共有メモリ域とし、共有メモリ域のみをフラッシュの対象としても良い。そこで、図26に示したL2キャッシュアクセスコントローラ45の処理のバリエーションとして、共有メモリ域のみをフラッシュの対象とする際に、L2キャッシュアクセスコントローラ45が実行する処理の流れについて説明する。
図27は、共有メモリ域のみをフラッシュ対象とする処理の流れを説明するためのフローチャートである。なお、図27に示す各処理のうち、ステップS301〜ステップS318については、図26に示すステップS301〜ステップS318と同様の処理を実行するものとして、説明を省略する。
例えば、L2キャッシュアクセスコントローラ45は、キャッシュヒットしたエントリのセクタIDが「01」ではなかった場合には(ステップS306否定)、以下の処理を実行する。すなわち、L2キャッシュアクセスコントローラ45は、キャッシュヒットしたエントリのデータが、CPU12gが存在するノード以外のノードからキャッシュしたデータであるか否かを判別する(ステップS319)。
そして、L2キャッシュアクセスコントローラ45は、キャッシュヒットしたデータが他ノードのデータではない場合は(ステップS319否定)、セクタIDを「00」に更新する(ステップS305)。一方、L2キャッシュアクセスコントローラ45は、キャッシュヒットしたデータが他ノードのデータである場合には(ステップS319肯定)、セクタIDを「11」に更新する(ステップS308)。
また、L2キャッシュアクセスコントローラ45は、補充データのセクタIDが「01」ではない場合は(ステップS315否定)、他ノードからキャッシュしたデータであるか否かを判別する(ステップS320)。そして、L2キャッシュアクセスコントローラ45は、他ノードからキャッシュしたデータではないと判別した場合は(ステップS320否定)、セクタIDを「00」に更新する(ステップS314)。また、L2キャッシュアクセスコントローラ45は、他ノードからキャッシュしたデータであると判別した場合は(ステップS320肯定)、セクタIDを「11」に更新する(ステップS317)。
このように、L2キャッシュアクセスコントローラ45は、他ノードからキャッシュしたデータのみをフラッシュの対象とし、CPU12gが存在するノード(以下、自ノードとする)からキャッシュしたデータについてはフラッシュの対象としない。つまり、情報処理システム1dが、CPU12gが自ノードからキャッシュしたデータをフラッシュしたとしても、自ノードが故障した場合は、フラッシュしたデータを用いたリカバリを行えない。そこで、CPU12gは、他ノードからキャッシュしたデータのみをフラッシュの対象とすることで、より効率的なフラッシュ処理を行うことができる。
次に、図28を用いて、フラッシュ対象のウェイに上限がある際にセクタIDを登録する処理の流れについて説明する。図28は、フラッシュ対象のウェイに上限がある際にセクタIDを登録する処理の流れを説明するためのフローチャートである。
なお、図28に示す例では、セクタIDが「00」のデータを登録可能な数をMAX00と記載し、セクタIDが「01」のデータを登録可能な数をMAX01と記載し、セクタIDが「11」のデータを登録可能な数をMAX11と記載した。また、図28に示す例では、現在登録されているセクタIDが「00」のデータの数をNUM00と記載し、現在登録されているセクタIDが「01」のデータの数をNUM01と記載し、現在登録されているセクタIDが「11」のデータの数をNUM11と記載した。なお、MAX01およびMAX11は、セクタ最大値レジスタ58が記憶する値である。
例えば、L2キャッシュアクセスコントローラ45は、格納対象のデータのセクタIDが「11」であるか否かを判別する(ステップS401)。そして、L2キャッシュアクセスコントローラ45は、セクタIDが「11」である場合は(ステップS401肯定)、MAX11の数がNUM11と同じであるか否かを判別する(ステップS402)。
そして、L2キャッシュアクセスコントローラ45は、MAX11の数がNUM11と同じである場合には(ステップS402肯定)、セクタIDが「11」のウェイのいずれかにデータを登録し(ステップS403)、処理を終了する。また、L2キャッシュアクセスコントローラ45は、MAX11の数がNUM11と同じではない場合は(ステップS402否定)、ウェイが満杯であるか否かを判別する(ステップS404)。
次に、L2キャッシュアクセスコントローラ45は、ウェイが満杯である場合は(ステップS404肯定)、MAX00がNUM00以下であるか否かを判別する(ステップS405)。そして、L2キャッシュアクセスコントローラ45は、MAX00がNUM00以下である場合は(ステップS405肯定)、現在のセクタIDが「00」のウェイのいずれかにデータを登録し(ステップS406)、処理を終了する。
一方、L2キャッシュアクセスコントローラ45は、MAX00がNUM00より多い場合は(ステップS405否定)、現在のセクタIDが「01」のウェイのいずれかにデータを登録し(ステップS407)、処理を終了する。また、L2キャッシュアクセスコントローラ45は、ウェイが満杯ではない場合は(ステップS404否定)、空いているウェイにデータを登録し(ステップS408)、処理を終了する。
また、L2キャッシュアクセスコントローラ45は、セクタIDが「11」ではない場合は(ステップS401否定)、ウェイが満杯か否かを判別する(ステップS409)。そして、L2キャッシュアクセスコントローラ45は、ウェイが満杯ではない場合は(ステップS409否定)、空いているウェイにデータを登録し(ステップS408)、処理を終了する。
また、L2キャッシュアクセスコントローラ45は、ウェイが満杯である場合は(ステップS409肯定)、セクタIDが「01」であるか否かを判別する(ステップS410)。そして、L2キャッシュアクセスコントローラ45は、セクタIDが「01」である場合は(ステップS410肯定)、MAX01がNUM01以下であるか否かを判別する(ステップS411)。
そして、L2キャッシュアクセスコントローラ45は、MAX01がNUM01以下である場合は(ステップS411肯定)、現在のセクタIDが「01」のウェイのいずれかにデータを登録し(ステップS412)、処理を終了する。一方、L2キャッシュアクセスコントローラ45は、MAX01がNUM01より多い場合は(ステップS411否定)、現在のセクタIDが「00」のウェイのいずれかにデータを登録し(ステップS413)、処理を終了する。
また、L2キャッシュアクセスコントローラ45は、セクタIDが「01」ではない場合は(ステップS410否定)、MAX00がNUM00以下であるか否かを判別する(ステップS414)。そして、L2キャッシュアクセスコントローラ45は、MAX00がNUM00以下である場合は(ステップS414肯定)、現在のセクタIDが「00」のウェイのいずれかにデータを登録し(ステップS413)、処理を終了する。一方、L2キャッシュアクセスコントローラ45は、MAX00がNUM00より多い場合は(ステップS414否定)、現在のセクタIDが「01」のウェイのいずれかにデータを登録し(ステップS415)、処理を終了する。
このように、L2キャッシュアクセスコントローラ45は、セクタIDが「11」のデータについて、登録可能なウェイの最大数を設定し、ウェイの最大数を超える場合には、リプレースを実行する。また、L2キャッシュアクセスコントローラ45は、ウェイの空きが無い場合は、上限値を超えているセクタIDのデータについてリプレースを行う。
なお、L2キャッシュアクセスコントローラ45は、フラッシュ対象のデータについては、積極的にリプレースを実行することで、メモリに書き戻してもよい。そこで、以下の説明では、図29を用いて、L2キャッシュアクセスコントローラ45が実行する処理のバリエーションについて説明する。
図29は、フラッシュ対象のウェイに上限がある際の処理のバリエーションを説明するためのフローチャートである。なお、図29に示すステップS401〜ステップS415の処理については、図28に示すステップS401〜ステップS415の処理と同様の処理であるものし、説明を省略する。
例えば、L2キャッシュアクセスコントローラ45は、ウェイが満杯であると判別した場合は(ステップS409肯定)、セクタIDが「11」の登録が存在するか否かを判別する(ステップS416)。そして、L2キャッシュアクセスコントローラ45は、セクタID「11」の登録が存在する場合は(ステップS416肯定)、セクタIDが「11」のウェイのいずれかにデータを登録する(ステップS417)。
すなわち、L2キャッシュアクセスコントローラ45は、セクタIDが「11」のウェイのいずれかをリプレースし、メモリ17、18への書き出しを行う。一方、L2キャッシュアクセスコントローラ45は、セクタIDが「11」の登録が存在しない場合は(ステップS416否定)、セクタIDが「01」であるかを判別する(ステップS410)。
図30は、L2キャッシュのセクタIDの遷移を説明するための第1の図である。また、図31は、L2キャッシュのセクタIDの遷移を説明するための第2の図である。L2キャッシュアクセスコントローラ45は、図28、図29に示す処理を実行することで、セクタIDを登録することで、図30、若しくは図31に示すように、L2キャッシュタグ46に登録したセクタIDを遷移させる。なお、図30に示す例では、ライトバックを行う際に対象データのタグのステートを「M」から「I」に示す際のセクタIDの遷移について記載した。また、図31に示す例では、ライトバックを行う際に対象データのタグのステートを「M」から「E」に変更する際のセクタIDの遷移について記載した。
図30に示す例では、L2キャッシュアクセスコントローラ45は、リプレースもしくはインバリッドするまでセクタID「11」を他の値に遷移させない。一方、図31に示す例では、L2キャッシュアクセスコントローラ45は、ステートを「M」から「E」に変更するキャッシュダウングレードを行う場合がある。このため、L2キャッシュアクセスコントローラ45は、キャッシュダウングレードを行う場合には、セクタID「11」をセクタID「00」に遷移させる場合がある。
すなわち、図30、および図31に示すようにセクタIDの値を遷移させることで、L2キャッシュアクセスコントローラ45は、メモリとキャッシュのコヒーレンシの保持が保障されるまで、セクタID「11」を保持する。このため、CPU12gは、フラッシュを適切に行うことができる。
次に、図32を用いて、L2キャッシュアクセスコントローラ45がL2キャッシュ概要セクタフラグ48を設定する処理の流れについて説明する。図32は、L2キャッシュ概要セクタフラグを設定する処理の流れを説明するためのフローチャートである。例えば、L2キャッシュアクセスコントローラ45は、格納するデータのセクタIDが「11」であるか否かを判別する(ステップS501)。
そして、L2キャッシュアクセスコントローラ45は、セクタIDが「11」である場合には(ステップS501肯定)、L2フラッシュ概要セクタフラグ48の読み込みを行う(ステップS502)。詳細には、L2キャッシュアクセスコントローラ45は、データ格納を要求したコアのL2キャッシュ概要セクタフラグ48のうち、データを格納するキャッシュラインのグループのフラグを読み込む。
そして、L2キャッシュアクセスコントローラ45は、読み込んだフラグが「1」であるか否かを判別する(ステップS503)。そして、L2キャッシュアクセスコントローラ45は、読み込んだフラグが「1」ではない場合は(ステップS503否定)、L2キャッシュ概要セクタフラグ48にフラグ「1」をセットし(ステップS504)、処理を終了する。
なお、L2キャッシュアクセスコントローラ45は、セクタIDが「11」ではない場合や(ステップS501否定)、読み込んだフラグが「1」である場合は(ステップS503否定)、そのまま処理を終了する。
次に、図33を用いて、CPU12gがフラッシュを実行する処理の流れについて説明する。図33は、フラッシュを実行する処理の流れを説明するためのフローチャートである。なお、図33に示す例では、L2キャッシュ概要セクタフラグ48のうち、CPU12gが参照するエントリを「i」と記載した。また、図33に示す例では、フラッシュ対象となるキャッシュラインのインデックスを「j」と記載した。また、図33に示す例では、L2キャッシュ47の各キャッシュラインは、128本ごとに、グループ「0」からグループ「63」に組み分けられているものとする。
例えば、図33に示す例では、フラッシュ制御部52は、いずれかのコア40〜40bが実行するアプリケーションがフラッシュ要求を発行したことを契機として(ステップS601)、フラッシュ処理を実行する。まず、フラッシュ制御部52は、「i=0」とする(ステップS602)。
次に、フラッシュ制御部52は、L2キャッシュ概要セクタフラグ48のうち、フラッシュ要求を発行したコアの概要セクタフラグから、「i」番目のエントリを読み出す(ステップS603)。そして、フラッシュ制御部52は、読み出した概要セクタフラグが「1」であるか否か判別し(ステップS604)、読み出した概要セクタフラグが「1」である場合は(ステップS604肯定)、読み出した概要セクタフラグを「0」にリセットする(ステップS605)。
次に、フラッシュ制御部52は、「j=0」とし(ステップS606)、L2キャッシュのインデックス(i,j)に対するフラッシュ要求を発行する(ステップS607)。すなわち、フラッシュ制御部52は、「i」グループに所属する「j」番目のキャッシュラインに対するフラッシュ要求を発行する。すると、L2キャッシュアクセスコントローラ45は、インデックス(i,j)の全ウェイのセクタIDを検査し(ステップS608)、セクタIDが「11」で、ステートが「M」のエントリが存在するか否かを判別する(ステップS609)。
そして、L2キャッシュアクセスコントローラ45は、セクタIDが「11」で、ステートが「M」のエントリを検出すると(ステップS609肯定)、検出したエントリの最若番のウェイのデータをL2キャッシュ47からフラッシュする(ステップS610)。その後、L2キャッシュアクセスコントローラ45は、セクタIDが「11」で、ステートが「M」のエントリがまだ存在するか判別する(ステップS611)。
次に、フラッシュ制御部52は、L2キャッシュアクセスコントローラ45がセクタIDが「11」で、ステートが「M」のエントリがもう存在しないと判別した場合は(ステップS611否定)、「j」の値が「127」であるか否かを判別する(ステップS612)。そして、フラッシュ制御部52は、「j」の値が「127」ではない場合は(ステップS612否定)、jの値を1インクリメントし(ステップS613)、ステップS607の処理を実行する。
一方、フラッシュ制御部52は、jの値が「127」である場合は(ステップS612肯定)、iの値が「63」であるか否かを判別する(ステップS614)。そして、フラッシュ制御部52は、iの値が「63」である場合は(ステップS614肯定)、そのまま処理を終了する。また、フラッシュ制御部52は、「i」の値が「63」ではない場合は(ステップS614否定)、「i」の値を1インクリメントし(ステップS615)、ステップS604の処理を実行する。また、フラッシュ制御部52は、読み出した概要セクタフラグが「1」ではない場合は(ステップS604)、ステップS614の処理を実行する。
次に、図34〜36を用いて、CPU12gが実行するソフトウェアとハードウェアとの動作について説明する。まず、図34を用いて、キャッシュミスが発生した際のソフトウェアとハードウェアの動作について説明する。図34は、ストア時にキャッシュミスが発生した際のソフトウェアとハードウェアの動作を説明するためのシーケンス図である。
まず、アプリケーション35は、Sync Startを発行する(ステップS701)。すると、アプリケーションが示す期間であるセクタフラッシュモードがONとなる(ステップS702)。次に、アプリケーション35は、Storeを発行する(ステップS703)。すると、L1キャッシュ43にはデータが入っていないので、キャッシュミスが発生する(ステップS704)。このため、L1キャッシュアクセスコントローラ57がデータの補充要求であるRead Exを発行する(ステップS705)。この際、L1キャッシュアクセスコントローラ57は、セクタIDは「11」と指定する。
すると、メモリ17〜24からのリードが行われ(ステップS706)、リードデータが出力されるとともに(ステップS707)、L2キャッシュ47にデータがキャッシュされる(ステップS708)。なお、リードデータは、L1キャッシュ43にステートを「M」、セクタIDを「11」として格納される(ステップS709)。続いて、アプリケーション35がSync endを発行する(ステップS710)。すると、セクタフラッシュモードがOFFとなる(ステップS711)。
続いて、フラッシュ制御部52により、セクタフラッシュが実行され(ステップS712)、各キャッシュラインにフラッシュ要求が発行される(ステップS713)。すると、ステップS708にてキャッシュしたデータのステートが「E」でセクタIDが「11」であるため、フラッシュの対象としてヒットする(ステップS714)。この結果、L2キャッシュアクセスコントローラ45からステート「M」でヒットした旨とライトバック要求とが発行される(ステップS715)。
すると、L1キャッシュ43のデータのステートが「I」に変更される(ステップS716)。続いて、L2キャッシュアクセスコントローラ57は、ライトバックを実行し(ステップS717)、L2キャッシュのステートを「I」に変更する(ステップS718)。また、フラッシュ制御部52は、セクタフラッシュが完了すると(ステップS719)、完了応答をアプリケーション35に発行する。
次に、図35を用いて、ストア時にキャッシュヒットした際のソフトウェアとハードウェアとの動作の流れについて説明する。図35は、ストア時にキャッシュヒットした際のソフトウェアとハードウェアの動作を説明するためのシーケンス図である。図35に示す例では、L1キャッシュ43には、ステートが「E」でセクタIDが「00」のデータがキャッシュされている(ステップS801)。
コア40が実行するアプリケーション35は、Sync Startを発行する(ステップS802)。すると、セクタフラッシュモードがONになる(ステップS803)。続いて、アプリケーション35は、Storeを発行する(ステップS804)。
すると、L1キャッシュアクセスコントローラ57は、Storeの対象が、L1キャッシュ43にてヒットするので(ステップS805)、L2キャッシュ47にセクタIDを「11」に変更するよう通知する(ステップS806)。ここで、L2キャッシュ47には、L1キャッシュ43と同様に、ステートが「E」でセクタIDが「00」のデータがキャッシュされている(ステップS807)。このため、L2キャッシュアクセスコントローラ45は、ステートが「E」のデータについて、セクタIDを「11」に変更し(ステップS808)、変更完了通知を発行する(ステップS809)。
続いて、L1キャッシュアクセスコントローラ57は、L1キャッシュ43に格納されたデータのステートを「M」とし、セクタIDを「11」とする(ステップS810)。続いて、アプリケーション35がSync endを発行する(ステップS811)。すると、セクタフラッシュモードがOFFになる(ステップS812)。
その後、フラッシュ制御部52は、セクタフラッシュを実行し(ステップS813)、L2キャッシュ47の各キャッシュラインについてフラッシュを行う(ステップS814)。すると、ステートが「E」でセクタIDが「11」のキャッシュがヒットする(ステップS815)。この結果、L2キャッシュアクセスコントローラ45は、ステート「M」がヒットした応答とライトバック要求とを発行する(ステップS816)。
すると、L1キャッシュアクセスコントローラ57は、キャッシュヒットしたデータのステートを「M」から「I」に変更する(ステップS817)。続いて、L2キャッシュアクセスコントローラ45も、キャッシュヒットしたデータのステートを「M」から「I」に変更し(ステップS818)、その後、メモリ17〜24にライトバックする(ステップS819)。また、フラッシュ制御部52は、セクタフラッシュ実行後に、セクタフラッシュが完了した旨の応答をアプリケーション35に発行する(ステップS820)。
次に、図36を用いて、コンテキストスイッチが発生した際のソフトウェアとハードウェアとの動作の流れについて説明する。図36は、コンテキストスイッチが発生した際のソフトウェアとハードウェアの動作を説明するためのシーケンス図である。図36に示す例では、L1キャッシュ43には、ステートが「E」でセクタIDが「00」のデータがL1キャッシュ43とL2キャッシュ47とに格納されている(ステップS901、ステップS902)。
コア40が実行するアプリケーション35は、Sync Startを発行する(ステップS903)。すると、セクタフラッシュモードがONになる(ステップS904)。続いて、アプリケーション35は、Storeを発行する(ステップS905)。
すると、L1キャッシュアクセスコントローラ57は、Storeの対象が、L1キャッシュ43にてヒットするので(ステップS906)、L2キャッシュ47にセクタIDを「11」に変更するよう通知する。このため、L2キャッシュアクセスコントローラ45は、ステートが「E」のデータについて、セクタIDを「11」に変更し(ステップS907)、変更完了通知を発行する(ステップS908)。また、L1キャッシュアクセスコントローラ57は、ステート「M」のデータのセクタIDを「11」に変更する(ステップS909)。
ここで、割り込み命令が発行される(ステップS910)、ドライバ33は、コンテキストスイッチを実行し、レジスタの値をメモリ17、19、21、23に格納するコンテキストストアを実行する(ステップS911)。また、ドライバ33は、コンテキストストアが発生した場合にはセクタフラッシュモードのOFFを待たずに、セクタフラッシュを要求するので、フラッシュ制御部52は、セクタフラッシュを実行する(ステップS912)。また、フラッシュ制御部52は、セクタIDが「11」のデータを含むキャッシュラインについてフラッシュを行い(ステップS913)、セクタIDが「11」のデータがヒットする(ステップS914)。
この結果、L2キャッシュアクセスコントローラ45は、ステート「M」がヒットした応答とライトバック要求とを発行する(ステップS915)。すると、L1キャッシュアクセスコントローラ57は、キャッシュヒットしたデータのステートを「M」から「I」に変更し(ステップS916)、メモリ17〜24にライトバックを行う(ステップS917)。また、L2キャッシュアクセスコントローラ45は、キャッシュヒットしたデータのステートを「M」から「I」に変更する(ステップS918)。
また、フラッシュ制御部52は、セクタフラッシュ実行後に、セクタフラッシュが完了した旨の応答をアプリケーション35に発行する(ステップS919)。するとオペレーティングシステム32は、アプリケーション2を呼び出し(ステップS920)、割り込みが発生する(ステップS921)。すると、ドライバ33は、コンテキストロードを実行する(ステップS922)。
続いて、アプリケーション35がSync endを発行すると(ステップS923)、セクタフラッシュモードがOFFとなる(ステップS924)。そして、フラッシュ制御部52が、セクタフラッシュを実行し(ステップS925)、その後、フラッシュを発行する(ステップS926)。その後、フラッシュ制御部52は、セクタフラッシュ完了通知を発行する(ステップS927)。
[実施例5の効果]
上述したように、CPU12gは、アプリケーション35が指定した期間内に更新したデータにセクタID「11」を付して記憶する。そして、CPU12gは、アプリケーション35が指定した期間が終了すると、セクタIDが「11」のデータのみをL2キャッシュ43からメモリ17〜24に書き戻すフラッシュを実行する。
このため、CPU12は、アプリケーション35のプログラムの修正を抑えることができる。また、CPU12は、データの書き戻しの処理時間を短縮するとともに、情報処理システム1の性能劣化を防ぐことができる。
また、CPU12gは、各コア40〜40bごとに、アプリケーション35が指定した期間内にデータが更新されたか否かを示すL2キャッシュ概要セクタフラグを複数のキャッシュラインごとに有する。そして、CPU12gは、フラッシュ要求が発行されると、フラッシュ要求を発行したコアごとに、L2キャッシュ概要セクタフラグが「1」であるグループのキャッシュラインを検査する。
その後、CPU12gは、検査したキャッシュラインのうち、セクタIDが「11」のデータをメモリ17〜24に書き戻す。このため、CPU12gは、キャッシュメモリ12aが有する全てのキャッシュラインを検査せずとも、アプリケーション35が指定した期間内に更新されたデータをメモリ17〜24に書き戻すことができる。また、CPU12gは、複数のコアを有する場合にも、効率良くフラッシュを実行することができる。
また、CPU12gは、コンテキストスイッチが発生した場合には、アプリケーションが指定した期間が終了する前にフラッシュを実行し、アプリケーションが指定した期間が終了した後に、再度フラッシュを実行する。このため、CPU12gは、コンテキストスイッチ機能を有し、各コア40〜40bが実行するアプリケーションがその都度変わる場合にも、効率よくフラッシュを実行できる。
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例6として本発明に含まれる他の実施例を説明する。
(1)各実施例の組み合わせについて
上述した実施例5は、実施例1〜3の機能を有するCPU12gについて説明した。しかし、実施例は、これに限定されるものではなく、各実施例1〜3に記載した機能を任意の組合せで実行することができる。また、CPUが複数のコアを有する場合であっても、実施例1に示すセクタフラグ、または、実施例2に示す概要セクタフラグを用いた処理を行うこととしてもよい。また、CPU12gに実施例4の機能を追加し、フラッシュを行う場合には、特定のウェイのみをフラッシュの対象としてもよい。
(2)アプリケーションについて
上述した実施例1〜5では、アプリケーションが発行するフラッシュ要求に応じて、フラッシュを実行する例について説明した。しかし、実施例は、これに限定されるものではなく、アプリケーション等のプログラムが指定した期間が終了した後に、フラッシュ要求を発行するのであれば、ミドルウェア等の任意のプログラムがフラッシュ要求を発行することとしてもよい。
(3)キャッシュの階層について
上述した実施例5では、各コア40〜40bごとのL1キャッシュ43〜43bと、各コア40〜40bで共用するL2キャッシュ47を有する例について説明した。しかし、実施例はこれに限定されるものではなく、3次キャッシュ等を有するCPUについても適用することができる。
1〜1d 情報処理システム
2、2a クライアント端末
3、5 LANスイッチ
4 管理端末
6 グローバルクロスバ
7 サービスプロセッサ
10〜10m ノード
11 サービスプロセッサ
12〜12g、13〜13f、14〜14f、15〜15f CPU
12a、13a、14a、15a キャッシュメモリ
12c、12e、13c、13e、14c、14e、15c、15e 概要セクタフラグ
16 ローカルXB
17〜24、72 メモリ
25 PCIeスイッチ
26、27 LANアダプタ
28 SAS
29 HDD
30〜30c ハードウェア
31〜31c ハイパーバイザ
32〜32c オペレーティングシステム
33〜33c ドライバ
34〜34c ミドルウェア
35、35a アプリケーション
40〜40b コア
41〜41b セクタID生成部
42〜42b L1キャッシュタグ
43〜43b L1キャッシュ
44〜44b TLB
45 L2キャッシュアクセスコントローラ
46 L2キャッシュタグ
47 L2キャッシュ
48 L2キャッシュ概要セクタフラグ
49 アドレスマップ
50 非キャッシュリクエストステートマシン
51 設定レジスタ群
52 フラッシュ制御部
53 PCI制御部
54 ディレクトリ制御部
55 スヌープ制御部
56 リクエスト制御部
57 L1キャッシュアクセスコントローラ
58 セクタ最大値レジスタ
59 LRU
70、71 演算装置

Claims (8)

  1. 主記憶装置が記憶するデータを一時的に保持するキャッシュメモリと、
    前記キャッシュメモリが保持するデータを用いて、アプリケーションを実行する演算部と、
    前記キャッシュメモリが保持するデータのうち、前記演算部が実行するアプリケーションが指定した期間内に前記演算部が更新したデータを示す更新情報を記憶する記憶部と、
    前記アプリケーションが指定した期間が終了した場合は、前記キャッシュメモリが保持するデータのうち、前記記憶部が記憶する更新情報が示すデータを前記キャッシュメモリから前記主記憶装置に書き戻す書き戻し部と
    を有することを特徴とする演算装置。
  2. 前記キャッシュメモリは、前記データを格納する複数のキャッシュラインを有し、
    前記記憶部は、前記アプリケーションが指定した期間内にデータが更新されたか否かを示すセクタフラグを前記更新情報として前記キャッシュラインごとに記憶し、
    前記書き戻し部は、前記キャッシュメモリが有する複数のキャッシュラインのうち、前記セクタフラグが前記更新された旨を示すキャッシュラインのデータを前記主記憶装置に書き戻すことを特徴とする請求項1に記載の演算装置。
  3. 前記記憶部は、前記アプリケーションが指定した期間内にデータが更新されたか否かを示す概要セクタフラグを複数のキャッシュラインごとに記憶し、
    前記書き戻し部は、前記概要セクタフラグが更新された旨を示すキャッシュラインのうち、前記セクタフラグが前記更新された旨を示すキャッシュラインのデータを前記主記憶装置に書き戻すことを特徴とする請求項2に記載の演算装置。
  4. 前記演算装置は、前記演算部を複数有し、
    前記記憶部は、各演算部が実行するアプリケーションが指定した期間内にデータが更新されたか否かを示す演算フラグを複数のキャッシュラインごとに記憶し、
    前記書き戻し部は、いずれかの演算部が実行するアプリケーションが指示した期間が終了した場合には、当該演算部が実行するアプリケーションが指示した期間内のデータが更新された旨を前記演算フラグが示す複数のキャッシュラインのうち、前記セクタフラグが前記更新された旨を示すキャッシュラインのデータを前記主記憶装置に書き戻すことを特徴とする請求項2に記載の演算装置。
  5. 前記キャッシュメモリは、複数のウェイを有する複数のキャッシュラインを有し、
    前記書き戻し部は、前記セクタフラグが前記更新された旨を示すキャッシュラインのうち、所定のウェイに格納されたデータのみを前記主記憶装置に書き戻すことを特徴とする請求項2−4のいずれか1つに記載の演算装置。
  6. 前記演算部は、実行するアプリケーションを変更するコンテキストスイッチを実行する機能を有し、
    前記書き戻し部は、前記アプリケーションが指定した期間が終了した場合、または、前記演算部が前記コンテキストスイッチを実行した場合は、前記セクタフラグが前記更新された旨を示すキャッシュラインのデータを前記主記憶装置に書き戻すことを特徴とする請求項1−5のいずれか1つに記載の演算装置。
  7. データを記憶する主記憶装置と
    前記主記憶装置を共有する複数の演算装置を有する情報処理装置において、
    前記演算装置は、
    前記主記憶装置が記憶するデータを一時的に保持するキャッシュメモリと、
    前記キャッシュメモリが保持するデータを用いて、アプリケーションを実行する演算部と、
    前記キャッシュメモリが保持するデータのうち、前記演算部が実行するアプリケーションが指定した期間内に前記演算部が更新したデータを示すセクタ情報を記憶する記憶部と、
    前記アプリケーションが指定した期間が終了した場合は、前記キャッシュメモリが保持するデータのうち、前記記憶部が記憶するセクタ情報が示すデータを前記キャッシュメモリから前記主記憶装置に書き戻す書き戻し部と
    を有することを特徴とする情報処理装置。
  8. 主記憶装置に記憶されたデータをキャッシュする機能を有する演算装置が実行する演算方法において、
    キャッシュしたデータのうち、アプリケーションが指定した期間内に更新したデータを示すセクタ情報を記憶し、
    前記アプリケーションが指定した期間が終了した場合は、前記キャッシュしたデータのうち、前記セクタ情報が示すデータを前記主記憶装置に書き戻す
    処理を実行することを特徴とする演算方法。
JP2012044881A 2012-02-29 2012-02-29 演算装置、情報処理装置および演算方法 Active JP5565425B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2012044881A JP5565425B2 (ja) 2012-02-29 2012-02-29 演算装置、情報処理装置および演算方法
US13/678,978 US20130227219A1 (en) 2012-02-29 2012-11-16 Processor, information processing apparatus, and arithmetic method
EP12194012.6A EP2634702B1 (en) 2012-02-29 2012-11-23 Processor, information processing apparatus, and arithmetic method
KR1020120137109A KR101414384B1 (ko) 2012-02-29 2012-11-29 연산 장치, 정보 처리 장치 및 연산 방법
CN2012105075429A CN103294608A (zh) 2012-02-29 2012-11-30 处理器、信息处理设备和算术方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012044881A JP5565425B2 (ja) 2012-02-29 2012-02-29 演算装置、情報処理装置および演算方法

Publications (2)

Publication Number Publication Date
JP2013182356A true JP2013182356A (ja) 2013-09-12
JP5565425B2 JP5565425B2 (ja) 2014-08-06

Family

ID=47522280

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012044881A Active JP5565425B2 (ja) 2012-02-29 2012-02-29 演算装置、情報処理装置および演算方法

Country Status (5)

Country Link
US (1) US20130227219A1 (ja)
EP (1) EP2634702B1 (ja)
JP (1) JP5565425B2 (ja)
KR (1) KR101414384B1 (ja)
CN (1) CN103294608A (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9250954B2 (en) * 2013-01-17 2016-02-02 Xockets, Inc. Offload processor modules for connection to system memory, and corresponding methods and systems
US10684973B2 (en) 2013-08-30 2020-06-16 Intel Corporation NUMA node peripheral switch
KR101996266B1 (ko) 2014-09-18 2019-10-01 삼성전자주식회사 호스트 및 이를 포함하는 컴퓨터 시스템
CN104794069B (zh) * 2015-04-01 2017-12-12 北京创毅视讯科技有限公司 一种cpu中缓存的用户态分配方法和系统
US10635505B2 (en) * 2015-06-30 2020-04-28 Coursera, Inc. Automated batch application programming interfaces
CN107870871B (zh) * 2016-09-23 2021-08-20 华为技术有限公司 分配缓存的方法和装置
KR101968474B1 (ko) * 2017-06-02 2019-04-15 주식회사 애포샤 플래시 캐시에서 트랜잭션 지원 방법 및 장치
DE102017216955A1 (de) * 2017-09-25 2019-03-28 Robert Bosch Gmbh Sensorsystem zum Ausgeben von Sensordaten
US11693790B2 (en) 2019-05-24 2023-07-04 Texas Instmments Incorporated Methods and apparatus to facilitate write miss caching in cache system
US11189327B2 (en) * 2019-08-21 2021-11-30 Micron Technology, Inc. Methods for providing device status in response to read commands directed to write-only mode register bits and memory devices and systems employing the same
CN114556314A (zh) * 2019-10-31 2022-05-27 华为技术有限公司 处理非缓存写数据请求的方法、缓存器和节点
US11138115B2 (en) * 2020-03-04 2021-10-05 Micron Technology, Inc. Hardware-based coherency checking techniques

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03263244A (ja) * 1990-03-14 1991-11-22 Fujitsu Ltd キャッシュメモリデータ書き戻し方法及びディスクキャッシュ制御装置
JPH05346889A (ja) * 1992-06-15 1993-12-27 Hitachi Ltd キャッシュ制御方法およびキャッシュ制御装置
JPH0844626A (ja) * 1994-07-28 1996-02-16 Nec Niigata Ltd キャッシュシステムのフラッシュサイクル制御方法
JP2000322202A (ja) * 1999-05-12 2000-11-24 Toshiba Corp 階層型情報記憶システム及び同システムに於ける記憶制御方法
JP2002182980A (ja) * 2000-10-25 2002-06-28 Agere Systems Guardian Corp キャッシュメモリにおける漏洩電力の低減方法及び装置
JP2005521937A (ja) * 2002-03-28 2005-07-21 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ コンピュータオペレーティングシステムにおけるコンテキスト切り替え方法及び装置
US6934810B1 (en) * 2002-09-26 2005-08-23 Unisys Corporation Delayed leaky write system and method for a cache memory
JP2008204292A (ja) * 2007-02-21 2008-09-04 Toshiba Corp メモリ管理システム
JP2009211270A (ja) * 2008-03-03 2009-09-17 Fujitsu Microelectronics Ltd コンピュータシステム
US7809892B1 (en) * 2006-04-03 2010-10-05 American Megatrends Inc. Asynchronous data replication
US20100318747A1 (en) * 2009-06-12 2010-12-16 Cray Inc. Atomic memory operation cache protocol with opportunistic combining

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04175946A (ja) 1990-11-09 1992-06-23 Hitachi Ltd マルチプロセッサ・データ処理システムおよびそれに用いられるキャッシュ装置
US5353425A (en) 1992-04-29 1994-10-04 Sun Microsystems, Inc. Methods and apparatus for implementing a pseudo-LRU cache memory replacement scheme with a locking feature
JP2916421B2 (ja) * 1996-09-09 1999-07-05 株式会社東芝 キャッシュフラッシュ装置およびデータ処理方法
JPH11259362A (ja) 1998-03-13 1999-09-24 Nec Corp キャッシュメモリ制御方法及び装置
US6810489B1 (en) * 2000-09-06 2004-10-26 Hewlett-Packard Development Company, L.P. Checkpoint computer system utilizing a FIFO buffer to re-synchronize and recover the system on the detection of an error
JP2007011580A (ja) * 2005-06-29 2007-01-18 Toshiba Corp 情報処理装置
CN101689141B (zh) * 2007-06-20 2012-10-17 富士通株式会社 高速缓存装置、运算处理装置及其控制方法
JP5217432B2 (ja) 2007-12-28 2013-06-19 富士通株式会社 セクタ機能付きキャッシュメモリ
JP5413001B2 (ja) 2009-07-09 2014-02-12 富士通株式会社 キャッシュメモリ
US20110082983A1 (en) * 2009-10-06 2011-04-07 Alcatel-Lucent Canada, Inc. Cpu instruction and data cache corruption prevention system

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03263244A (ja) * 1990-03-14 1991-11-22 Fujitsu Ltd キャッシュメモリデータ書き戻し方法及びディスクキャッシュ制御装置
JPH05346889A (ja) * 1992-06-15 1993-12-27 Hitachi Ltd キャッシュ制御方法およびキャッシュ制御装置
JPH0844626A (ja) * 1994-07-28 1996-02-16 Nec Niigata Ltd キャッシュシステムのフラッシュサイクル制御方法
JP2000322202A (ja) * 1999-05-12 2000-11-24 Toshiba Corp 階層型情報記憶システム及び同システムに於ける記憶制御方法
JP2002182980A (ja) * 2000-10-25 2002-06-28 Agere Systems Guardian Corp キャッシュメモリにおける漏洩電力の低減方法及び装置
JP2005521937A (ja) * 2002-03-28 2005-07-21 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ コンピュータオペレーティングシステムにおけるコンテキスト切り替え方法及び装置
US6934810B1 (en) * 2002-09-26 2005-08-23 Unisys Corporation Delayed leaky write system and method for a cache memory
US7809892B1 (en) * 2006-04-03 2010-10-05 American Megatrends Inc. Asynchronous data replication
JP2008204292A (ja) * 2007-02-21 2008-09-04 Toshiba Corp メモリ管理システム
JP2009211270A (ja) * 2008-03-03 2009-09-17 Fujitsu Microelectronics Ltd コンピュータシステム
US20100318747A1 (en) * 2009-06-12 2010-12-16 Cray Inc. Atomic memory operation cache protocol with opportunistic combining

Also Published As

Publication number Publication date
EP2634702B1 (en) 2014-10-29
CN103294608A (zh) 2013-09-11
US20130227219A1 (en) 2013-08-29
EP2634702A1 (en) 2013-09-04
KR20130099805A (ko) 2013-09-06
JP5565425B2 (ja) 2014-08-06
KR101414384B1 (ko) 2014-07-01

Similar Documents

Publication Publication Date Title
JP5565425B2 (ja) 演算装置、情報処理装置および演算方法
KR101403233B1 (ko) 정보 처리 장치 및 부정 액세스 방지 방법
JP5573829B2 (ja) 情報処理装置およびメモリアクセス方法
KR102423713B1 (ko) 가상 어드레스를 물리적 어드레스로 번역을 수행하기 위해 입력-출력 메모리 관리 유닛내 다수의 메모리 소자들 사용
CN108153683B (zh) 用于在存储器中的地址范围之间传输数据的装置和方法
US20080235477A1 (en) Coherent data mover
KR101558427B1 (ko) 가상화된 입/출력을 위한 프로세서 로컬 코히어런시를 갖는 컴퓨터 시스템
US8185692B2 (en) Unified cache structure that facilitates accessing translation table entries
TW201339836A (zh) 資訊處理設備、算術裝置及資訊傳送方法
US20040073742A1 (en) Method and system of managing virtualized physical memory in a data processing system
KR100515229B1 (ko) 멀티프로세서 시스템에서 가상화된 물리적 메모리를관리하는 방법 및 시스템
JP2011198091A (ja) 仮想アドレスキャッシュメモリ、プロセッサ及びマルチプロセッサシステム
JPWO2010035425A1 (ja) キャッシュメモリ、その制御方法及びメモリシステム
KR19980079433A (ko) 비포함 캐쉬 메모리 계층 구조에서 사용하기 위한 캐쉬 일관성 메카니즘 구현 방법 및 시스템
TWI526832B (zh) 用於減少執行硬體表搜尋(hwtw)所需的時間和計算資源量的方法和系統
CN114860329B (zh) 动态一致性偏置配置引擎及方法
CN103052945A (zh) 管理计算机存储器的方法、程序产品及数据存储设备
JP2014160502A (ja) 情報処理装置およびメモリアクセス方法
JP2005141606A (ja) マルチプロセッサシステム
JP2020003959A (ja) 情報処理装置、演算処理装置及び情報処理装置の制御方法
US10565111B2 (en) Processor
US8447934B2 (en) Reducing cache probe traffic resulting from false data sharing
US11635968B2 (en) Using idle caches as a backing store for boot code
JP2009151457A (ja) キャッシュメモリシステムおよびキャッシュメモリ制御方法
JP6631317B2 (ja) 演算処理装置、情報処理装置および情報処理装置の制御方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140129

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140204

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140320

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140407

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140602

R150 Certificate of patent or registration of utility model

Ref document number: 5565425

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150