JP5931196B2 - I/oノード及び複数の計算ノードに備えられたキャッシュメモリの制御方法 - Google Patents
I/oノード及び複数の計算ノードに備えられたキャッシュメモリの制御方法 Download PDFInfo
- Publication number
- JP5931196B2 JP5931196B2 JP2014523751A JP2014523751A JP5931196B2 JP 5931196 B2 JP5931196 B2 JP 5931196B2 JP 2014523751 A JP2014523751 A JP 2014523751A JP 2014523751 A JP2014523751 A JP 2014523751A JP 5931196 B2 JP5931196 B2 JP 5931196B2
- Authority
- JP
- Japan
- Prior art keywords
- node
- area
- cache
- data
- calculation
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
- G06F12/0833—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0817—Cache consistency protocols using directory methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing 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/0871—Allocation or management of cache space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1048—Scalability
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/28—Using a specific disk cache architecture
- G06F2212/283—Plural cache memories
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/62—Details of cache specific to multiprocessor cache arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
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)
Description
本発明は、キャッシュ制御に関する。
大量のデータの利用及び活用を目的として、大量のデータに対する高速解析技術に注目が高まっている。この高速解析技術を実現するためには、大量のデータに対して高速にアクセスできるITプラットフォームが必要となる。
このニーズを実現するために、例えば、特許文献1には、複数台の処理装置と各処理装置が備える分散共有メモリ(キャッシュメモリ)、及びそれらの間の情報転送路を持つ並列処理装置についての記載がある。具体的には、各処理装置は、必要な時に、自分の分散共有メモリに、他処理装置が備える分散共有メモリが保有しているデータを格納することができる。つまり、特許文献1記載の各処理装置は、分散共有メモリで、他の処理装置とデータを共有することができる。このため、並列処理装置全体として、分散共有メモリの容量を多くすることなく、大量のデータに対して高速にアクセスすることができる。
しかし、分散共有メモリの容量を、大量のデータ処理を伴うアプリケーションが対象とするようなデータを全て格納できる容量とした場合、分散共有メモリは、高速ではあるが高価となってしまう。そのため、キャッシュメモリを有する処理装置(計算ノード)に、不揮発性の記憶デバイスとその記憶デバイスに入出力されるデータを一時的に記憶するキャッシュメモリとを有するI/O(Input/Output)ノードを接続し、使用頻度の高いデータを、処理装置のキャッシュ領域に格納し、使用頻度の低いデータを、I/Oノードの記憶デバイスに格納することが考えられる。
例えば、特許文献2では、計算ノードのキャッシュメモリ、I/Oノードのキャッシュメモリ、及びI/Oノードの記憶デバイスを含めた記憶領域を階層化し、アプリケーションの処理と連動して、アプリケーションに必要なデータを、所定の階層に属する記憶領域に配置する技術が開示されている。
しかしながら、特許文献2では、計算ノードでのキャッシュメモリの管理とI/Oノードでのキャッシュメモリの管理が互いに独立している。キャッシュメモリの管理は、そのキャッシュメモリを有するノード(I/Oノード或いは計算ノード)で最適化されている。このため、複数の計算ノードとそれらに接続されたI/Oノード(計算機の一例としてのI/Oノード)とを含んだ計算機システムでのキャッシュメモリの利用効率が悪くなる。例えば、計算ノードのキャッシュメモリとI/Oノードのキャッシュメモリの両方に同じデータが残ってしまうこと、或いは、使用頻度の低いデータがキャッシュメモリに残ってしまうことがあり得る。
複数のノードが、I/O(Input/Output)ノードと、複数の計算ノードとを含む。各計算ノードは、I/O要求をI/Oノードに送信する。I/Oノードは、I/O要求に従い書き込まれる又は読み出されるデータを記憶する第1記憶デバイスと、第1記憶デバイスに書き込まれる又は第1記憶デバイスから読み出されるデータを一時的に記憶する第1キャッシュ領域の基になる第1メモリデバイスとを有する。各計算ノードが、I/O要求に従うデータを一時的に記憶する第2キャッシュ領域の基になる第2メモリデバイスを有する。I/Oノードと各計算ノードとのうちのいずれか一方のノードが、I/Oノードと各計算ノードとのうちの他方のノードのキャッシュ領域における物理的な記憶領域に関する情報とその物理的な記憶領域に対応付けられ自分のキャッシュ領域の一部とした仮想的な記憶領域に関する情報とを含んだ管理情報を記憶する。複数のノードのうちのいずれかのノードである対象ノードが、各計算ノードの管理情報、又は、I/Oノードの管理情報を基に、第2キャッシュ領域に記憶されるデータの配置を制御する。なお、メモリデバイスとは、DRAM(Dynamic Random Access Memory)のような揮発性メモリであっても良いし、フラッシュメモリのような不揮発性のメモリであっても良いし、1又は複数の揮発性又は不揮発性のメモリを含んだデバイス(例えばSSD(Solid State Drive))であっても良い。
幾つかの実施例を説明する。
なお、以後の説明では、「XXXテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「XXXテーブル」を「XXX情報」と呼ぶことができる。
また、以後の説明では、コンピュータプログラムを主語として処理を説明する場合があるが、プログラムは、コントローラが有するプロセッサ(例えばCPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)及び通信制御装置(例えば通信ポート)を用いながら行うため、処理の主語がプロセッサとされてもよい。また、プログラムを主語として説明された処理は、そのプログラムを実行するプロセッサを有するコントローラ、或いは、そのコントローラを有する装置(例えば計算ノード或いはI/Oノード)が行う処理としても良い。また、プログラムの一部又は全ては専用ハードウェアによって実現されてもよい。コントローラは、プロセッサの他に、その専用ハードウェアを含んでも良い。また、コンピュータプログラムは、プログラムソースから各計算機にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
また、以後の説明において、同種の要素「ttt」を区別して説明する場合、符号を組み合わせて「tttA」、「tttB」のように表すことがあるが、これらの要素を特に区別しない場合は、単に「ttt」と示す。
図1は、実施例1に係る計算機システム1の全体構成の一例を示すブロック図である。
計算機システム1は、計算ノード2及びI/Oノード3を有し、これらの構成要素(計算ノード2及びI/Oノード3)が、同一の筺体内に設置されている。計算ノード2及びI/Oノード3は、筺体内で、例えば、所定のインタフェース(例えば、PCI(Peripheral Components Interconnect bus))23、33で接続されている。計算ノード2は、例えば、ホスト計算機である。また、I/Oノード3は、例えば、ホスト計算機が接続されるストレージ装置である。
計算機システム1は、計算ノード2及びI/Oノード3を有し、これらの構成要素(計算ノード2及びI/Oノード3)が、同一の筺体内に設置されている。計算ノード2及びI/Oノード3は、筺体内で、例えば、所定のインタフェース(例えば、PCI(Peripheral Components Interconnect bus))23、33で接続されている。計算ノード2は、例えば、ホスト計算機である。また、I/Oノード3は、例えば、ホスト計算機が接続されるストレージ装置である。
なお、計算ノード2とI/Oノード3とは、同一の筺体に配置されなくても良い。また、計算ノード2とI/Oノード3とは、所定の通信ネットワーク(例えば、SAN(Storage Area Network))を介して接続されても良い。
計算ノード2は、例えば、一種の計算機である。計算ノード2は、メモリ21に、制御プログラム群211、管理テーブル群212及びアプリケーションプログラム4を格納する。アプリケーションプログラム4は、ある目的のために設計されたソフトウェア(例えば、ワードプロセッサとして計算機を機能させるためのソフトウェア)である。制御プログラム群211及び管理テーブル群212については後述する。
I/Oノード3は、例えば、一種の入出力デバイスであり、具体例として、前述したように、ストレージ装置である。I/Oノード3は、不揮発性の記憶デバイス34とメモリ31とを有しており、メモリ31に、制御プログラム群211及び管理テーブル群212を格納する。
図2は、計算ノード2の構成の一例を示すブロック図である。
計算ノード2は、メモリ21、インタフェース23及びそれらに接続されたプロセッサ(例えばCPU(Central Processing Unit))22及びを備える。
プロセッサ22は、計算ノード2の動作の制御を司り、メモリ21に格納された制御プログラム群211及び管理テーブル群212に基づいて必要な処理を実行する。メモリ21は、制御プログラム群211及び管理テーブル群212を記憶するために用いられるほか、プロセッサ22のワークメモリとしても用いられる。インタフェース23は、通信インタフェースデバイスであり、計算ノード2がI/Oノード3と通信する際のプロトコルの制御を行う。
制御プログラム群211には、構成情報収集プログラム2111、構成情報通知プログラム2112及びキャッシュ管理プログラム2113が含まれている。図では、プログラム2111〜2113は、一つのプログラムで実現されても良いし、実装上の都合により2以下或いは4以上に、分けられても良い。
構成情報収集プログラム2111は、例えば、後述の構成管理テーブル2111を設定するためのインタフェースとして動作する。構成情報収集プログラム2111は、例えば、設定API(Application Program Interface)の呼び出しに応じて、構成管理テーブル2121の設定、及び/又は更新を行う。
構成情報通知プログラム2112は、計算ノード2の図示しないOS(Operating System)の起動時、及び後述のI/Oノード3の構成情報収集プログラム3111及び共有キャッシュ管理プログラム3112からの要求に応じて、構成管理テーブル2121に保存されている情報、及び後述のキャッシュ管理テーブル2122に格納されている情報を、I/Oノード3に通知する。
キャッシュ管理プログラム2113は、アプリケーションプログラム4からの要求に応じて、I/Oノード3(メモリ31或いは記憶デバイス34)からローカルキャッシュ領域215にデータを格納する、及び、ローカルキャッシュ領域215に格納したデータの更新を行う。具体的には、例えば、キャッシュ管理プログラム2113は、キャッシュ管理テーブル2122にエントリを追加すること、及び、エントリを更新することを行う。
管理テーブル群212には、構成管理テーブル2121及びキャッシュ管理テーブル2122が含まれている。これらの管理テーブル2121、2122については、後述する。
図3は、I/Oノード3の構成の一例を示すブロック図である。
図3に示すように、I/Oノード3は、メモリ31、プロセッサ32、インタフェース33及び記憶デバイス34を備える。
メモリ31、プロセッサ32及びインタフェース33は、それぞれ計算ノード2のメモリ21、及びプロセッサ22及びインタフェース33と、実質的に同様の機能を有するものであるため、その詳細については説明を省略する。
記憶デバイス34は、例えばRAID(Redundant Array of Inexpensive Disks)構成とされた複数の物理的な記憶デバイスでも良いし、内部又は外部の物理記憶デバイスに基づく論理的な記憶デバイスでも良い。記憶デバイス34には、例えば、計算ノード2のアプリケーションプログラム4が使用するデータが格納され、そのデータは、アプリケーションプログラム4が必要な時にメモリ21に格納され使用される。
メモリ31に格納されている制御プログラム群311には、構成情報収集プログラム3111及び共有キャッシュ管理プログラム3112がある。プログラム3111及び3112は、一つにまとめて実現されても良いし、実装上の都合により3以上に分けられてもよい。
構成情報収集プログラム3111は、計算ノード2の情報通知部2112からの要求に応じて、構成管理テーブル2121及びアドレス管理テーブル3123の更新を行う。
共有キャッシュ管理プログラム3112は、計算ノード2のキャッシュ管理プログラム2113からの要求に応じて、記憶デバイス34からのデータ取得、メモリ31のキャッシュ領域へのデータの読み書き、及び後述の共有キャッシュ管理テーブル3122の更新を行う。
メモリ31に記憶されている管理テーブル群312には、構成管理テーブル3121、キャッシュ管理テーブル3122及びアドレス管理テーブル3123が含まれている。これら、のテーブル3121〜3123については、後述する。
図4は、計算ノード2のメモリ21の使用方法を説明するための模式図である。
計算ノード2は、メモリ21の記憶領域を、上記管理テーブル群212及び各プログラム(4、211)に対して割当て使用する他、メモリ21の記憶領域を、OS割当て領域213、ローカルキャッシュ領域214及び制御コマンド格納領域215に論理的に分割して使用する。
OS割当て領域213は、OS、アプリケーションプログラム4及び制御プログラム群211がワークメモリとして使用する領域である。ローカルキャッシュ領域214は、制御プログラム群211がキャッシュ領域として使用する領域である。制御コマンド格納領域215は、ローカルキャッシュ領域214、及びI/Oノード3からの処理要求(コマンド)の内容を格納するための領域である。
図5は、I/Oノード3のメモリ31の使用方法を説明するための模式図である。
I/Oノード3は、メモリ31の記憶領域を、上記管理テーブル群312及び制御プログラム群311に対して割当てる他、メモリ31の記憶領域を、制御プログラム割当て領域313及びキャッシュ領域314に割当て、制御プログラム割当て領域313及びキャッシュ領域314に論理的に分割して使用する。
このうち、I/Oノード3は、キャッシュ領域314を、通常キャッシュ領域3144、ローカルキャッシュ拡張領域3141及び共有キャッシュ領域3142に論理的に分割して管理し、且つ、複数のローカルキャッシュ領域214にそれぞれ対応する複数の仮想ローカルキャッシュ領域3143を管理する。
通常キャッシュ領域3144は、記憶デバイス34に入出力されるデータを一時的に格納する領域である。
ローカルキャッシュ拡張領域3141は、計算ノード2のローカルキャッシュ領域214からのデータを格納する領域である。共有キャッシュ領域3142は、複数の計算ノード2が参照するデータを蓄積する領域である。
仮想ローカルキャッシュ領域3143は、各計算ノード2のそれぞれのローカルキャッシュ領域214と対応付けられる領域である。すなわち、仮想ローカルキャッシュ領域3143は、I/Oノード3と通信する計算ノード2の数だけ存在する。例えば、図では、I/Oノード3と3台の計算ノード2A〜2Cが通信する場合を示しており、メモリ31には、計算ノード2A〜2Cがそれぞれ有するローカルキャッシュ領域214A〜214Cにそれぞれ対応する仮想ローカルキャッシュ領域3143A〜3143Cが存在している。以下、仮想ローカルキャッシュ領域については、1つの仮想ローカルキャッシュ領域3143Aを適宜に例に取る。
I/Oノード3は、計算ノード2A〜2Cのローカルキャッシュ領域214A〜214Cのアドレス(後述の物理アドレス)を、対応する仮想ローカルキャッシュ領域3143A〜3143Cのアドレス(後述の仮想アドレス)に対応付け、且つ、ローカルキャッシュ領域214A〜214Cの使用状況を管理する。これにより、I/Oノード3は、計算ノード2のローカルキャッシュ領域214A〜214C及びI/Oノード3のキャッシュ領域314を一元的に管理することができる。
仮想ローカルキャッシュ領域3143Aには、ローカルキャッシュ領域214Aに対応付けられており、データ(例えば、アプリケーションプログラム4で使用されるデータ)は実際には格納されていない。仮想ローカルキャッシュ領域3143A内のデータは、実際には、対応するローカルキャッシュ領域214Aに格納されている。I/Oノード3は、仮想ローカルキャッシュ領域3143Aを参照することにより、対応するローカルキャッシュ領域214A内のデータに対してアクセスすることができる。仮想ローカルキャッシュ領域3143Aには、ローカルキャッシュ領域214Aに格納されているデータと同じデータは格納されないので、I/Oノード3のキャッシュ領域314の容量を節約することができる。
ローカルキャッシュ拡張領域3141は1つであり、このローカルキャッシュ拡張領域3141が論理的に分割され、各計算ノード2には、分割された領域がそれぞれ与えられる。こうすると、ローカルキャッシュ拡張領域3141の容量を少なく抑えることが期待できる。しかしながら、このローカルキャッシュ拡張領域3141は、各計算ノード2に対してそれぞれ用意されても良い。
図6は、計算ノード2の構成管理テーブル2121の一例を示す。
構成管理テーブル2121は、容量21211、使用量21212及び物理アドレス21213を有する。容量21211は、ローカルキャッシュ領域214の容量を示す。使用量21212は、ローカルキャッシュ領域214の容量のうち、計算ノード2により実際に使用されているデータの量を示す。物理アドレス21213は、ローカルキャッシュ領域214に属する複数の物理的なアドレスを示す。
図7は、計算ノード2のキャッシュ管理テーブル2122の一例を示す。
キャッシュ管理テーブル2122は、ページ番号21221、物理アドレス21222、データ21223及び有効ビット21224を有する。
記憶デバイス34は、複数のページ(記憶領域)で構成されており、ページ番号21221は、記憶デバイス34のページの番号である。物理アドレス21222は、構成管理テーブル2121の物理アドレス21213と同じである、つまりローカルキャッシュ領域214の物理アドレスを示す。ページ番号21221と物理アドレス21222の組から、記憶デバイス34のどのページに格納されるデータが、ローカルキャッシュ領域214のどこに格納されているかがわかる。データ21223は、物理アドレス21222より特定される領域(ローカルキャッシュ領域214内の領域)に格納されているデータの種類を示す。
有効ビット21224は、物理アドレス21222で特定される領域に格納されているデータが「無効」或いは「有効」であるかを示す情報である。「無効」とは、物理アドレス21222によって特定される領域に格納されているデータが、当該領域に対応付けられている記憶デバイス34のページに格納されているデータと異なっていることを示す。一方「有効」とは、物理アドレス21222によって特定される領域に格納されているデータが、当該領域に対応付けられているページに格納されているデータと同じであることを示す。
図8は、I/Oノード3の構成管理テーブル3121の一例を示す。
構成管理テーブル3121は、計算ノード2或いはI/Oノード3毎に、ノード識別子31221、通信方式31212、容量31213、使用容量31214を対応付けて管理する。
ノード識別子31221は、計算ノード2A〜2C、及びI/Oノード3を識別するための情報である。ノード識別子「0」は、I/Oノード3を示す。また、ノード識別子「A〜C」はそれぞれ計算ノード2A〜2Cを示す。
通信方式31212は、I/Oノード3が、キャッシュ領域314に対応付けられているデータ、及び格納されているデータにアクセスするための方式を示す。データにアクセスするための方式は、例えば、RDMA(Remote Direct Memory Access)、及びメモリ参照がある。「DMA」は、I/Oノード3が、仮想ローカルキャッシュ領域3143に対応付けられているローカルキャッシュ領域214に格納されているデータにアクセスすることを示す。「メモリ参照」とは、I/Oノード3が、キャッシュ領域314のうち、仮想ローカルキャッシュ領域3143以外の領域であるローカルキャッシュ拡張領域3141及び共有キャッシュ領域3142に格納されているデータにアクセスすることを示す。
容量31213は、ノード識別子31211が「0」の場合、ローカルキャッシュ拡張領域3141及び共有キャッシュ領域3142のそれぞれの容量を示す。ノード識別子31211が「A〜C」の場合、容量31213は、ローカルキャッシュ領域214A〜214Cのそれぞれの容量を示す。
使用容量31214は、容量31213のうち実際に使用されている量を示す。
ノード識別子31211が「0」の場合、容量31213及び使用量31214が2行に分かれている。上段は、ローカルキャッシュ拡張領域3141の容量31213及び使用量31214を表し、下段は、共有キャッシュ領域3142の容量31213及び使用量31214を表す。さらに、ノード識別子31211が「A」〜「C」の場合は、それぞれ計算ノード2A〜2Cのローカルキャッシュ領域214A〜241Cに対応する仮想ローカルキャッシュ領域3143の容量31213及び使用量31214を表す。 図9は、I/Oノード3のキャッシュ管理テーブル3122の一例を示す。
キャッシュ管理テーブル3122は、キャッシュ領域314に格納されているデータと記憶デバイス34に格納されているデータが重複しているか否かを示す。
キャッシュ管理テーブル3122は、ページ番号31221、仮想アドレス31222及び有効ビット31223を有する。
ページ番号31221は、記憶デバイス34のページの番号である。仮想アドレス31222は、キャッシュ領域314に属する複数の仮想的なアドレスを示す。例えば、図に示す例では、ページ番号31221「0」と仮想アドレス「3」とが対応付けられているが、これは、ページ番号「0」のページに格納されているデータが、仮想アドレス「3」に属する領域(キャッシュ領域314内の領域)に格納されていることを示している。一方、ページ番号31221「1」には、仮想アドレス31222として無効な値「−」が対応付けられている。これは、記憶デバイス34に格納されているデータが、キャッシュ領域314に格納されていないことを示す。
有効ビット31223は、記憶デバイス34に格納されているデータが「有効」或いは「無効」であるかを示す情報である。有効ビット31223は、キャッシュ管理テーブル2122の有効ビット21223と実質的に同じである。例えば、図では、キャッシュ領域314の仮想アドレス「5」には、記憶デバイス34のページ番号「2」が対応付けられているが、有効ビット21223は「無効」であるため、仮想アドレス「5」の領域(キャッシュ領域314内の領域)に格納されているデータと、ページ番号「2」のページに格納されているデータとは異なっていることを示している。
図10は、I/Oノード3のアドレス管理テーブル3133の一例を示す。
アドレス管理テーブル3123は、キャッシュ領域314における領域毎に、仮想アドレス31231、属性値31232、物理位置31233、物理アドレス31234、及び使用状況31235を有する。以下、キャッシュ領域314における1つの領域(図10の説明において「対象領域」という)を例に取り、アドレス管理テーブル3123が有する情報を説明する。
仮想アドレス31231は、対象領域の仮想的なアドレスを示す。
属性値31232は、対象領域を含む領域の種類を示す。属性値31232が「拡張」とは、対象領域がローカルキャッシュ拡張領域3141として使用されていることを示す。属性値31232が「共有」とは、対象領域が共有キャッシュ領域3142として使用されていることを示す。また、属性値31233が「仮想A」とは、対象領域が仮想ローカルキャッシュ領域3143Aとして使用されていることを示す。なお、この属性値31232は、省略されても良い。
物理位置31233は、対象領域に格納されるデータが実際に格納される場所を示す。「ローカルメモリ」とは、対象領域に格納されるデータが実際にはI/Oノード3のメモリ311に格納されることを示す。また「計算ノードA」とは、対象領域に格納されるデータが実際には計算ノード2Aのメモリ21に格納されることを示す。
物理アドレス31234は、対象領域の物理的なアドレスを示す。使用状況31235は、対象領域の物理アドレス31234が示す領域にデータが格納されているかを示す。「使用」とは、対象領域の物理アドレス31234が示す領域にはデータが格納されていることを示す。また「未使用」とは、対象領域の物理アドレス31234が示す領域にはデータが格納されていなことを示す。
次に、キャッシュ間でデータの移行がどのように行われるかを説明する。
図22は、キャッシュ間でのデータ移行を説明するための模式図である。なお、図22の説明において、計算機システム1が、以下の(1)〜(5)の通りであるとする。
(1)計算ノードA(2A)のローカルキャッシュ領域A(214)は、アプリケーションプログラムA(4A)(計算ノードA(2A)が有しているアプリケーションプログラム)のリード要求時に取得したデータを格納するための領域である。また、計算ノードB(2B)のローカルキャッシュ領域214Bも同様に、アプリケーションプログラムB(4B)(計算ノードB(2B)が有しているアプリケーションプログラム)のリード要求時に使用する。
(2)仮想ローカルキャッシュ領域A(214A)及びB(214B)は、I/Oノード3が計算機ノードA(2A)及びB(2B)のローカルキャッシュ領域214A、214Bへのデータ書き込み可否を判定するために、I/Oノード3のキャッシュ管理テーブル3122に登場する領域名であり、I/Oノード3のキャッシュ領域314における物理的な領域ではない。I/Oノード3が、仮想ローカルキャッシュ領域A(214A)及びB(214B)にデータ読み書きをすることを決定した場合には、計算機ノードA(2A)及びB(2B)に、ローカルキャッシュ領域A(214A)及びB(214B)に対する読み書き要求を発行する。
(3)ローカルキャッシュ拡張領域3141は、ローカルキャッシュ領域A(214A)及びB(214B)においてデータの上書きが発生した際に、上書き前のデータの移行先として使用するための領域である。
(4)共有キャッシュ領域3142は、アプリケーションプログラムA(4A)及びB(4B)共に参照したデータを格納するための領域である。アプリケーションプログラムA(4A)(B(4B))からのリード要求に対して、ローカルキャッシュ領域B(214B)(A((214A))もしくはローカルキャッシュ拡張領域3141についてキャッシュヒットがある場合に、キャッシュヒットしたデータが共有キャッシュ領域3142に移行される。
(5)計算ノードA(2A)及びB(2B)のローカルキャッシュ領域A(214A)、B(214B)、及びI/Oノード3のキャッシュ領域314内のデータを、アプリケーションプログラムA(4A)及びB(4B)のいずれもが、I/Oノード3を仲介することにより使用することができる。
(1)計算ノードA(2A)のローカルキャッシュ領域A(214)は、アプリケーションプログラムA(4A)(計算ノードA(2A)が有しているアプリケーションプログラム)のリード要求時に取得したデータを格納するための領域である。また、計算ノードB(2B)のローカルキャッシュ領域214Bも同様に、アプリケーションプログラムB(4B)(計算ノードB(2B)が有しているアプリケーションプログラム)のリード要求時に使用する。
(2)仮想ローカルキャッシュ領域A(214A)及びB(214B)は、I/Oノード3が計算機ノードA(2A)及びB(2B)のローカルキャッシュ領域214A、214Bへのデータ書き込み可否を判定するために、I/Oノード3のキャッシュ管理テーブル3122に登場する領域名であり、I/Oノード3のキャッシュ領域314における物理的な領域ではない。I/Oノード3が、仮想ローカルキャッシュ領域A(214A)及びB(214B)にデータ読み書きをすることを決定した場合には、計算機ノードA(2A)及びB(2B)に、ローカルキャッシュ領域A(214A)及びB(214B)に対する読み書き要求を発行する。
(3)ローカルキャッシュ拡張領域3141は、ローカルキャッシュ領域A(214A)及びB(214B)においてデータの上書きが発生した際に、上書き前のデータの移行先として使用するための領域である。
(4)共有キャッシュ領域3142は、アプリケーションプログラムA(4A)及びB(4B)共に参照したデータを格納するための領域である。アプリケーションプログラムA(4A)(B(4B))からのリード要求に対して、ローカルキャッシュ領域B(214B)(A((214A))もしくはローカルキャッシュ拡張領域3141についてキャッシュヒットがある場合に、キャッシュヒットしたデータが共有キャッシュ領域3142に移行される。
(5)計算ノードA(2A)及びB(2B)のローカルキャッシュ領域A(214A)、B(214B)、及びI/Oノード3のキャッシュ領域314内のデータを、アプリケーションプログラムA(4A)及びB(4B)のいずれもが、I/Oノード3を仲介することにより使用することができる。
<データの移行処理(1)>
ここでは、ローカルキャッシュ領域A(214A)(仮想ローカルキャッシュ領域A(3143A))から共有キャッシュ領域3142へのデータの移行処理を説明する。
記憶デバイス34のページ内のデータXを読み出すためのリード要求がアプリケーションプログラムA(4A)からあった場合、計算ノードA(2A)は、データXがローカルキャシュ領域A(214A)に存在するかどうかを判定することなく、そのリード要求をI/Oノード3に送信する。I/Oノード3は、データXを、記憶デバイス34から通常キャッシュ領域3144に読み出し、読み出したデータXを、リード要求の送信元である計算ノードA(2A)に送信する。計算ノード2Aは、ローカルキャッシュ領域A(214A)に、受信したデータXを格納する。
そして、計算ノードA(2A)とは別の計算機ノードB(2B)のアプリケーションプログラムB(4B)から、データXのリード要求があった場合、計算ノードB(2B)は、データXがローカルキャシュ領域B(214B)に存在するかどうかを判定することなく、そのリード要求をI/Oノード3に送信する。I/Oノード3は、そのリード要求を受信し、データXが仮想ローカルキャッシュ領域A(3143A)に格納されていることを特定する。I/Oノード3は、仮想ローカルキャッシュ領域A(3143A)に対応しているローカルキャッシュ領域A(214A)からデータXを読み出し、読み出したデータXを、通常キャッシュ領域3144に格納し、通常キャッシュ領域3144から計算ノードB(2B)にデータXを送信する。計算ノードB(2B)は、受信したデータXを、ローカルキャッシュ領域B(214B)に格納する。その後、I/Oノード3は、通常キャッシュ領域3144に格納されているデータX(ローカルキャッシュ領域A(214A)から通常キャッシュ領域3144へと格納された上記のデータX)を、通常キャッシュ領域3144から共有キャッシュ領域3142に移行する。このため、アプリケーションB(4B)がデータXを再びリード対象とした場合、たとえローカルキャッシュ領域B(214B)からデータXが無くなっていたとしても、データXが共有キャッシュ領域3142に格納されているのでキャッシュヒットがある。これにより、I/Oノード3が計算ノードB(2B)からデータXをリード対象としたリード要求を受信した場合には、計算ノードA(2A)に負荷をかけることなく、さらにアプリケーションA(4A)のキャッシュ更新頻度に依存することなくデータXを高速に送信することができるようになる。
<データ移行処理(2)>
ここでは、ローカルキャッシュ領域A(214A)(仮想ローカルキャッシュ領域A(3143A))からローカルキャッシュ拡張領域3141へのデータの移行処理を説明する。
I/Oノード3は、計算ノードA(2A)のローカルキャッシュ領域A(214A)の残容量(或いは、ローカルキャッシュ領域A(214A)の容量に対する残容量の割合である空き領域率)を、キャッシュ更新時にチェックする。そして、計算ノードA(2A)のローカルキャッシュ領域A(214A)の残容量が、更新データサイズ以下となった場合、I/Oノード3は、ローカルキャッシュ領域A(214A)に格納されているデータのうち、所定の条件に該当するデータ(例えば、使用頻度が低いデータ)Xを、ローカルキャッシュ領域A(214A)(仮想ローカルキャッシュ領域A(3143A))からローカルキャッシュ拡張領域3141に移行する。
<データ移行処理(3)>
ここでは、ローカルキャッシュ拡張領域3141から共有キャッシュ領域3142へのデータの移行処理を説明する。
データ移行処理(2)が行われてから、アプリケーションプログラムB(4B)から、データXのリード要求があった場合、計算ノードB(2B)は、そのリード要求をI/Oノード3に送信する。I/Oノード3は、そのリード要求を受信し、ローカルキャッシュ拡張領域3141に格納されているデータXを、一旦ローカルキャッシュ拡張領域3141から通常キャッシュ領域3144に移行し、通常キャッシュ領域3144から計算ノードB(2B)にデータXを送信する。計算ノードB(2B)は、受信したデータXをローカルキャッシュ領域B(214B)に格納する。その後、I/Oノード3は、通常キャッシュ領域3144から共有キャッシュ領域3142にデータXを移行する。
このように、所定の条件に適合するデータ(例えば、使用頻度が低くなったデータ)Xを、記憶デバイス34にいきなりスワップアウトするのではなく、一旦、ローカルキャッシュ拡張領域3141に格納することにより、データXを記憶デバイス34から読み出さなければいけない頻度を削減できる場合がある。また、ローカルキャッシュ拡張領域3141に格納されたデータXが、計算ノードB(2B)のリード対象になった場合、データXは、共有キャッシュ領域3142に移行される。
次に、各プログラムによる処理の流れを説明する。
図11は、計算ノード2の構成情報収集プログラム2111の処理フローチャートの一例である。
構成情報収集プログラム2111は、アプリケーションプログラム4から設定用APIの実行を検知する(S101)。
構成情報収集プログラム2111は、設定用APIの実行を検知しなかった場合(S101:No)、S101の処理をする。
構成情報収集プログラム2111は、設定用APIの実行を検知した場合(S101:Yes)、構成情報収集プログラム2111は、設定APIを使って通知される構成情報を収集し(S102)、収集した構成情報を構成管理テーブル2121に書き込む(S103)。
これにより、構成管理テーブル2121が作成又は更新される。
図12は、計算ノード2の情報通知プログラム2112の処理フローチャートの一例である。
情報通知プログラム2112は、I/Oノード3からの構成情報の取得要求があったか否かを判定する(S201)。ここで、構成情報とは、計算ノード2が有している構成管理テーブル2121、及びキャッシュ管理テーブル2122にて管理されている情報である。
情報通知プログラム2112は、I/Oノード3からの構成情報の取得要求を検知しなかった場合(S210:No)、計算ノード2のOS起動処理が実行されたかどうかをチェックする(S202)。
情報通知プログラム2112は、OS起動処理が実行されたことを検知できなかった場合(S202:No)、S201の処理に戻る。
情報通知プログラム2112は、OS起動処理が実行されたことを検知できた場合(S202:Yes)、構成管理テーブル2121及びキャッシュテーブル2122から、ローカルキャッシュ領域213に関する情報を収集し(S203)、収集した情報を構成情報としてI/Oノード3に送信する(S204)。その後、情報通知プログラム2112は、S201の処理を再度行う。
情報通知プログラム2112は、I/Oノード3からの構成情報の取得要求を検知した場合(S201:Yes)、I/Oノード3からの要求の種類(リード或いはライト)を判定する(S205)。
S205の判断において、要求がリード要求だった場合、情報通知プログラム2112は、S206の処理を行う。要求がライト要求だった場合、情報通知プログラム2112は、S204の処理を行う。
S206の判断において、リード要求が構成情報の取得の要求だった場合、情報通知プログラム2112は、S203の処理を行う。
S206の判断において、リード要求がキャッシュデータ(ローカルキャッシュ領域213内のデータ)の取得の要求だった場合、そのリード要求では、物理アドレスが指定されている。構成情報通知プログラム2112は、リード要求が有する物理アドレスを用いてキャッシュ管理テーブル2122を参照して、リード対象のデータの格納場所を特定し(S207)、特定した格納場所(ローカルキャッシュ領域312内の領域)から、リード対象のデータを取得する(S208)、その後、情報通知プログラム2112は、S204の処理を行う。
図13は、計算ノード2のキャッシュ管理プログラム2113の処理フローチャートの一例である。
キャッシュ管理プログラム2113は、或るコンピュータプログラム(図13の説明では、アプリケーションプログラム4とする)が実行されることによりI/O要求が発生したか否かをチェックする(S301)。
アプリケーションプログラム4からのI/O要求がない場合(S301:No)、キャッシュ管理プログラム2113は、S301の処理をする。
アプリケーションプログラム4からのI/O要求があった場合(S301:Yes)、キャッシュ管理プログラム2113は、そのI/O要求に従うデータがローカルキャッシュ領域214にあるかどうかを判定することなく、I/Oノード3に対して、アプリケーションプログラム4からのI/O要求を送信する(S302)。
キャッシュ管理プログラム2113は、I/Oノード3からのI/O要求に対する返信(以下、I/O返信と言う)を受信する(S303)。具体的には、例えば、キャッシュ管理プログラム2113は、I/Oノード3からのI/O返信に従い、そのI/O返信で指定されている物理アドレスに属する領域(ローカルキャッシュ領域214内の領域)に、I/O要求に従うデータを格納する。
キャッシュ管理プログラム2113は、キャッシュ管理テーブル2122を更新する。例えば、キャッシュ管理プログラム2113は、キャッシュ管理テーブル2122に、I/O要求に従うエントリを追加し、その追加したエントリに、受信した返信に含まれるページ番号、物理アドレス、及びデータを格納し、且つ、そのエントリにおいて、有効ビット21223を「有効」に設定する。また、キャッシュ管理プログラム2113は、構成管理テーブル2121の使用量21212の値を、I/Oノード3からのI/O返信で指定されている値に更新する(S304)。
キャッシュ管理プログラム2113は、アプリケーションプログラム4に対して、I/O処理の完了を返信する(S305)。
図14は、I/Oノード3の構成情報収集プログラム3111の処理フローチャートの一例である。
I/Oノード3は、計算ノード2からの構成情報の通知要求があるか否かを判定する(S401)。
計算ノード2からの構成情報の通知要求がなかった場合(S401:No)、構成情報収集プログラム3111は、S401の処理をする。
計算ノード2からの構成情報の通知要求があった場合(S401:Yes)、構成情報収集プログラム3111は、通知要求元の計算ノード2が、新規な計算ノード2か否かを判定する(S402)。新規な計算ノード2とは、アドレス管理テーブル3123に登録されていない計算ノードである。具体的に、例えば、構成情報収集プログラム3111は、通信が発生したPCIピン番号を特定し、その特定した計算ノード2がアドレス管理テーブル3123に登録されていないか否かを判定することにより、その特定した計算ノード2が、新規な計算ノード2であるかを判定する。
構成情報収集プログラム3111は、構成情報の通知要求に従う情報を、構成情報としてI/Oノード3のメモリ31に格納、及び/又は、構成情報の通知要求に従う情報で、メモリ31を更新する(S403)。
構成情報収集プログラム3111は、計算ノード2が、新規な計算ノード2である場合、その計算ノード2の識別番号として、例えば、PCIピン番号を設定し、その計算ノード2の使用可能なメモリ21(ローカルキャッシュ領域214)の容量に基づき、メモリ21に、キャッシュ領域314の一部の領域である仮想アドレス3143を割当てる(S404)。
構成情報収集プログラム3111は、アドレス管理テーブル3123に登録されている計算ノード2に関する構成情報、及び/又は、新規な計算ノード2に関する構成情報を、キャッシュ管理テーブル3122及びアドレス管理テーブル3123に格納する(S405)。その後、構成情報収集プログラム3111は、S401の処理を再度行う。
図14に示した処理によれば、I/Oノード3は、各計算ノード2の計算ノード2の構成管理テーブル2121及びキャッシュ管理テーブル2122で管理されている情報を一元に管理できるようになる。
図15は、I/Oノード3の共有キャッシュ管理プログラム3112の処理フローチャートの一例である。
共有キャッシュ管理プログラム3112は、計算ノード2からのI/O要求があるか否かを判定する(S501)。
計算ノード2からのI/O要求がなかった場合(S501:No)、共有キャッシュ管理プログラム3112は、S501の処理を再度する。
計算ノード2からのI/O要求があった場合(S501:Yes)、共有キャッシュ管理プログラム3112は、I/O要求がリード要求かライト要求であるかを判定する(S502)。
I/O要求がリード要求だった場合、共有キャッシュ管理プログラム3112は、キャッシュ管理テーブル3122から、リード要求に従うデータの格納場所を特定する(S503)。ここで、データの格納場所とは、記憶デバイス34のページ番号31221を示す。リード要求に従うデータは、当初、ローカルキャッシュ領域3141、共有キャッシュ領域3142、及び、仮想ローカルキャッシュ領域3143に対応付けられているローカルキャッシュ領域214の何れにも格納されていない。
共有キャッシュ管理プログラム3112は、リード要求に従うデータが格納されている記憶デバイス34のリード元のページ(リード要求で指定されているアドレスが属するページ)からデータを読み出し、読み出したデータを、通常キャッシュ領域3144に格納する(S504)。
共有キャッシュ管理プログラム3112は、そのデータを含んだ返信(応答)を、要求元(リード要求の送信元)の計算ノード2に送信する(S505)。
一方、I/O要求がライト要求だった場合、共有キャッシュ管理プログラム3112は、記憶デバイス34のライト先のページ(ライト要求で指定されているアドレスが属するページ)に、ライト要求に従うデータ(ライト対象のデータ)をライトする(S506)。ここで、共有キャッシュ管理プログラム3112は、通常キャッシュ領域3144にライト対象のデータをライトしないが、そのデータを通常キャッシュ領域3144に一時格納した上で、そのデータを通常キャッシュ領域3144からライト先のページにライトしても良い。
共有キャッシュ管理プログラム3112は、キャッシュ管理テーブル3122における、ライト先のページに対応する有効ビット31223を「無効」に設定する(S507)。これは、例えば、アプリケーションプログラム4に、キャッシュ領域214、314に格納されている更新前のデータを使用させないための処理である。この様に処理をするのは、記憶デバイス34に格納されているデータが更新されたことにより、更新前に記憶デバイス34からキャッシュ領域214、314にリードされたデータが、記憶デバイス34に格納されている更新後データと異なってしまったためである。
共有キャッシュ管理プログラム3112は、アドレス管理テーブル3123を参照して、S507で有効ビット31223が「無効」となった仮想アドレスに対応する計算ノード2に対して、キャッシュ管理テーブル2122の更新要求を送信する(S508)。その更新要求では、S507で有効ビット31223が「無効」となった仮想アドレスに対応する物理アドレスが指定される。
S508の更新要求の送信先の計算ノード2は、その更新要求を受信し、キャッシュ管理テーブル2122における、その更新要求で指定されている物理アドレスに対応する有効ビット21223を、「無効」に設定する(S509)。その後、共有キャッシュ管理プログラム3112は、S505の処理を再度する。
図16は、データ取得処理(図15のS504)の詳細の一例である。
共有キャッシュ管理プログラム3112は、キャッシュ管理テーブル3122を参照してキャッシュヒットの有無を判定する(S601)。ここで、「キャッシュヒットの有無」とは、リード対象のデータが、リード要求の送信元の計算ノードに対応した仮想ローカルキャッシュ領域に格納されているか否か、具体的には、リード元のページの番号31221と仮想アドレス31222との対応付けがキャッシュ管理テーブル3122に存在するか否かである。
キャッシュヒットしなかった場合(S601:No)、共有キャッシュ管理プログラム3112は、リード元ページ(記憶デバイス34)からリード対象のデータを読み出し(S602)、読み出したデータを通常キャッシュ領域3144に格納し、そのデータを、要求元の計算ノード2に対する返信に含め、且つ、キャッシュ管理テーブル3122における、リード元ページに対応する有効ビット31223を「有効」に設定する(S603)。
その後、共有キャッシュ管理プログラム3112は、要求元の計算ノード2に対応する仮想ローカルキャッシュ領域3143について所定の条件が満たされているか否かを判定する(S604)。具体的には、例えば、共有キャッシュ管理プログラム3112は、要求元の計算ノード2に対応する仮想ローカルキャッシュ領域3143(ローカルキャッシュ領域214)について、残容量(或いは空き容量率)が、所定値以下であるか否かを判定する。この判定は、構成管理テーブル3121を参照することにより、行うことができる。
要求元の計算ノード2に対応する仮想ローカルキャッシュ領域3143について所定の条件が満たされている場合(S604:Yes)、共有キャッシュ管理プログラム3112は、スワップアウト処理を実行する(S605)。ここで、「スワップアウト処理」とは、例えば、仮想ローカルキャッシュ領域3143(ローカルキャッシュ領域214)に格納されているデータのうち使用頻度が低いデータを記憶デバイス34に移すことである。このスワップアウト処理により、仮想ローカルキャッシュ領域3143(ローカルキャッシュ領域214)の残容量が多くなる。
キャッシュヒットした場合(S601:Yes)、共有キャッシュ管理プログラム3112は、アドレス管理テーブル3123を参照して、キャッシュヒットした場所(リード対象データを記憶している領域)がキャッシュ領域314上のどの領域か(すなわち、ローカルキャッシュ拡張領域3141、共有キャッシュ領域3142及び仮想ローカルキャッシュ領域3143のいずれであるか)を判定する(S606)。
S606の判定において、キャッシュヒット場所が仮想ローカルキャッシュ領域3143だった場合には、共有キャッシュ管理プログラム3112は、RDMA転送処理により、仮想ローカルキャッシュ領域3143に対応付けられているローカルキャッシュ領域214からリード対象のデータを取得し(S607)、データ要求元の計算ノードとデータ取得先の計算ノードが同一かどうかを判定する(S608)。この判定処理は、構成管理テーブル3121のノード識別子31211を比較することによって実施する。
S608の判定において、同一ノードではないと判定した場合(S608:No)、共有キャッシュ管理プログラム3112は、S603の処理を行う。
S608の判定において、同一ノードであると判定した場合(S608:Yes)、共有キャッシュ管理プログラム3112は、その取得したデータを共有キャッシュ領域3142にライトする(S609)。その後、共有キャッシュ管理プログラム3112は、S603の処理を行う。
S606の判定において、キャッシュヒット場所がローカルキャッシュ拡張領域3141だった場合には、共有キャッシュ管理プログラム3112は、ローカルキャッシュ拡張領域3141からリード対象のデータを取得し(S610)、そのデータを共有キャッシュ領域3142にライトする(S609)。その後、共有キャッシュ管理プログラム3112は、S603の処理を行う。
S606の判断において、キャッシュヒット場所が共有キャッシュ領域3142だった場合には、共有キャッシュ管理プログラム3112は、共有キャッシュ領域3142からリード対象のデータを取得する(S611)。その後、共有キャッシュ管理プログラム3112は、S603の処理を行う。
なお、キャッシュヒットか否かの判定は、例えば、共有キャッシュ領域、仮想ローカルキャッシュ領域及びローカルキャッシュ拡張領域の順に行われて良い。具体的には、例えば、共有キャッシュ管理プログラム3112は、共有キャッシュ領域についてキャッシュヒット判定を行い、その判定の結果が否定の場合に、仮想ローカルキャッシュ領域についてキャッシュヒット判定を行い、その判定の結果が否定の場合に、ローカルキャッシュ拡張領域についてキャッシュヒット判定を行って良い。共有キャッシュ領域が最初にキャッシュヒット判定の対象となる理由は、一度共有キャッシュ領域に格納されたデータを優先して活用し、計算ノード2へのアクセス頻度を抑えることにより、アプリケーションプログラム4の性能劣化を抑制することができるからである。
さらに、I/Oノード3の共有キャッシュ管理プログラム3112は、キャッシュヒット判定の順序を制御するための設定用APIを備え、アプリケーションプログラム4からの指定により判定順序を変更してもよい。
さらに、I/Oノード3の共有キャッシュ管理プログラム3112は、キャッシュヒット判定の順序を制御するための設定用APIを備え、アプリケーションプログラム4からの指定により判定順序を変更してもよい。
図17は、スワップアウト処理(図16のS604)の詳細の一例である。
スワップアウト処理は、例えば、仮想ローカルキャッシュ領域3143に対応付けられているローカルキャッシュ領域214の残容量の多寡に基づいて行われる。具体的には、例えば、共有キャッシュ管理プログラム3112は、構成管理テーブル3121を参照し、要求元の計算ノード2について、容量31213が、使用量31214とライト容量(ライト対象データのサイズ)との和以上か否かを判定する(S701)。
容量31213が使用量31214とライト容量との和以上の場合(S701:Yes)、共有キャッシュ管理プログラム3112は、仮想ローカルキャッシュ領域3143に対応付けられているローカルキャッシュ領域214に、ライト対象のデータをライトし、要求元の計算ノード2の使用量31214に、ライト容量の値を加算する(S702)。
一方、容量31213が使用量31214とライト容量との和未満の場合(S701:No)、共有キャッシュ管理プログラム3112は、要求元の計算ノード2のローカルキャッシュ領域214に格納されているデータのうち、例えば、LRU(Least Recently Used)アルゴリズムなどに基づいて、移行対象データを決定する(S703)。共有キャッシュ管理プログラム3112は、移行対象データをローカルキャッシュ領域214から読み出し、その移行対象データを通常キャッシュ領域3144に一時的に格納する。
共有キャッシュ管理プログラム3112は、キャッシュ管理テーブル3122及びアドレス管理テーブル3123を基に、移行対象データに対応するページ番号を用いて、移行対象データと重複するデータ(一致するデータ)をローカルキャッシュ拡張領域3141及び共有キャッシュ領域3142から検索する(S704)。
重複するデータがローカルキャッシュ拡張領域3141及び共有キャッシュ領域3142の何れにも格納されていない場合(S705:No)、共有キャッシュ管理プログラム3112は、構成管理テーブル3121(ノード識別子31211が「0」のノードの容量31213)を参照し、ローカルキャッシュ拡張領域3141について、容量31213が、使用量31214と移行容量(移行対象のデータのサイズ)との和以上か否かを判定する(S706)。
容量31213が使用量31214と移行容量との和以上の場合(S706:Yes)、共有キャッシュ管理プログラム3112は、ローカルキャッシュ拡張領域のうちの空いている領域に移行対象データをライトし、構成管理テーブル3121における、ローカルキャッシュ拡張領域の使用量31214に、移行容量を加算する(S707)。
一方、容量31213が使用量31214と移行容量との和未満の場合(S706:No)、共有キャッシュ管理プログラム3112は、ローカルキャッシュ拡張領域3141に格納されているデータの中から、スワップアウトさせるデータを決定し(例えばLRUアルゴリズムに基づいて決定し)、決定したデータを、ローカルキャッシュ拡張領域3141から記憶デバイス34にスワップアウトし、移行対象データをローカルキャッシュ拡張領域3143の空いた領域(スワップアウトされたデータが格納されている領域)にライトする(S708)。更に、共有キャッシュ管理プログラム3112は、スワップアウトされたデータが格納されている領域(移行対象データの書き込み先の領域)について、キャッシュ管理テーブル3122を更新する(S709)。具体的には、例えば、当該領域について、ページ番号31211が、スワップアウトされたデータのページ番号から、移行対象データのページ番号に変わる。なお、本実施例では、スワップアウトされるデータ(決定されたデータ)のサイズは、移行対象データのサイズと一致しており、そのため、S707のような使用量31214の更新は行われないでよい。スワップアウトされるデータ(決定されたデータ)のサイズは、移行対象データのサイズより大きくても良い。
移行対象データが、ローカルキャッシュ拡張領域3141及び共有キャッシュ領域3142の何れかに格納されている場合(S705:Yes)、共有キャッシュ管理プログラム3112は、移行対象データと重複するデータが格納されている場所がローカルキャッシュ拡張領域3141なのか、共有キャッシュ領域3142なのかを判定する(S710)。
S710の判定において重複データがローカルキャッシュ拡張領域3141に格納されている場合、共有キャッシュ管理プログラム3112は、構成管理テーブル3121を参照し、共有キャッシュ領域3142について、容量31213が、使用量31214と重複容量(重複データのサイズ)との和以上か否かを判定する(S711)。
容量31213が使用量31214と重複容量の和以上の場合(S711:Yes)、共有キャッシュ管理プログラム3112は、共有キャッシュ領域3142に重複データをライトし、構成管理テーブル3121における、共有キャッシュ領域の使用量31214に重複データのサイズを加算する(S712)。
容量31213が使用量31214と重複容量の和未満の場合(S711:No)、共有キャッシュ管理プログラム3112は、共有キャッシュ領域3142からスワップアウトさせるデータを決定し(例えば、LRUアルゴリズムに基づいて決定し)、決定したデータを記憶デバイス34に格納する。共有キャッシュ管理プログラム3112は、共有キャッシュ領域3142の空いた領域(スワップアウトされたデータが格納されている領域)に重複データをライトする(S713)。更に、共有キャッシュ管理プログラム3112は、ローカルキャッシュ拡張領域3141からその重複データを削除する(S714)。その後、共有キャッシュ管理プログラム3112は、S709の処理をする。なお、S713で決定されるデータのサイズは、重複データのサイズと一致しているが、重複データのサイズより大きくても良い。
S710の判定において重複データが共有キャッシュ領域3142に格納されていた場合、共有キャッシュ管理プログラム3112は、処理を終了する。
図18は、計算ノード2の起動処理の流れを示すフローチャートの一例である。
計算ノード2の電源が投入されると(S801)、計算ノード2(構成情報収集プログラム2111)は、キャッシュ管理テーブル2122で管理されているデータをすべて削除する初期化処理を実行し(S802)、構成管理テーブル2121及びキャッシュ管理テーブル2122を、I/Oノード3に送信する(S803)。
I/Oノード3(構成情報収集プログラム3111)は、構成管理テーブル2121及びキャッシュ管理テーブル2122を計算ノード2から受信し、それらテーブル2121及び2122に基づく情報がアドレス管理テーブル3123に既に登録されているかを判定する(S804)。
登録が無い場合(S804:No)、I/Oノード3(構成情報収集プログラム3111)は、登録されていない計算ノード2の構成管理テーブル2121を参照し、物理アドレス21213と同じ数の仮想アドレス31231を生成し、アドレス管理テーブル3123に登録する(S805)。この処理を行うことにより、I/Oノード3の仮想ローカルキャッシュ領域3143と、計算ノード2のローカルキャッシュ領域214とが対応付けられる。その後、I/Oノード3は、その処理に成功したか否かを判定する(S806)。
処理が成功の場合(S806:Yes)、I/Oノード3は、処理を終了する。一方、処理が失敗の場合(S806:No)、I/Oノード3は、S803の処理を行う。
S804の判定において、登録がある場合(S804:Yes)、I/Oノード3は、アドレス管理テーブル3123で該当する計算ノード2の使用状況31235を、すべて未使用に設定する(S807)。その後、I/Oノード3は、S806の処理を行う。
図19は、I/Oノード3の起動処理の流れを示すフローチャートの一例である。
I/Oノード3の電源が投入されると(S901)、I/Oノード3(構成情報収集プログラム3111)は、RDMA機能を用いて、各計算ノード2のメモリ上の制御コマンド格納領域215に、データ通知ビットを立て(S902)、各計算ノード2に割り込み通知を送信する(S903)。
計算ノード2(構成情報収集プログラム2111)は、I/Oノード3からの割り込み通知を受信し(S904)、メモリ21の制御コマンド格納領域215にデータ通知ビットが格納されていることをチェックし(S905)、I/Oノード3に対して、この計算ノード2が持つキャッシュ管理テーブル2122が有する情報を送信する(S906)。
I/Oノード3は、計算ノード2からのキャッシュ管理テーブル2122の情報を受信し、その情報に基づく情報を、キャッシュ管理テーブル3122に登録する(S907)。I/Oノード3は、S907の処理が成功したか否かを判定する(S908)。
処理が成功の場合(S908:Yes)、I/Oノード3は、処理を終了する。一方、処理が失敗の場合(S908:No)、I/Oノード3は、S902の処理をする。
実施例1によれば、複数の計算ノード2と、I/Oノード3が接続された計算機システム1において、キャッシュ領域上のデータを重複ずに共有することができる。
また、各計算ノード2に、複数の計算ノード2が参照したデータを格納するキャッシュ領域(共有キャッシュ領域)を形成することにより、計算ノード2間で、キャッシュ領域上で使用頻度の高いデータを共有することができる。それ故、各計算ノード1のキャッシュ領域の容量を大きくすることなく、計算ノード3上で動作するアプリケーションプログラムの処理性能を向上させ、さらに計算ノード上のローカルキャッシュ領域に複数の計算ノードからのI/O要求が集中し、アプリケーションプログラムの処理性能の劣化を回避することが期待できる。
以下、実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略或いは簡略する。
実施例2では、各計算ノード2は、アプリケーションプログラム4からのI/O要求がある場合、要求されたデータが、計算ノード2のローカルキャッシュ領域214に格納されているか否かを判定し、データが格納されている場合、I/Oノード3へI/O要求を送信せず、格納しているデータをアプリケーションプログラム4に返す。
図20は、実施例2に係るキャッシュ管理プログラム2113の処理の流れを示すフローチャートの一例である。
キャッシュ管理プログラム2113は、アプリケーションプログラム4からのI/O要求があるか否かを判定する(S1001)。
I/O要求がない場合(S1001:No)、キャッシュ管理プログラム2113は、S1001の処理をする。
一方、I/O要求がある場合(S1001:Yes)、キャッシュ管理プログラム2113は、キャッシュ管理テーブル2122を参照し、要求されたデータがローカルキャッシュ領域214に格納されているかを判定する(S1002)。
要求されたデータがローカルキャッシュ領域214に格納されていない場合(S1002:No)、図13のS302〜S305の処理と同様の処理が行われる(S1003〜S1006)。
一方、要求されたデータがローカルキャッシュ領域214に格納されている場合(S1002:Yes)、キャッシュ管理プログラム2113は、I/Oノード3のキャッシュ領域314からではなく、ローカルキャッシュ領域214からデータを取得する(S1007)。キャッシュ管理プログラム2113は、アプリケーションプログラム4に対する応答メッセージを生成する(S1008)。その後、キャッシュ管理プログラム2113は、S1006の処理を行う。
実施例3を説明する。その際、実施例1及び2との相違点を主に説明し、実施例1及び2との共通点については説明を省略或いは簡略する。
実施例3では、計算ノード2として、物理的なノードの他に、仮想的なノード(仮想計算機)がある。実施例3では、I/Oノード3が無く、いずれかの仮想ノードが、I/Oノード3に代わって、I/Oノード3と同様の処理を行う。
図21は、実施例3に係る計算機システム1の全体構成を示す。
記憶デバイス34を持つ計算ノード2Dがある。計算ノード2Dは、仮想化機構5(例えばハイパバイザ)を実行することで、1以上の仮想サーバ51を生成し管理する。仮想サーバ51としては、仮想的な計算ノード2である仮想サーバ51Aと、I/Oノード3と同様の処理を行う仮想サーバ51Bとがある。
プロセッサ22は、メモリ21のうち仮想サーバ51Aに割り当てられたメモリ領域(図示略)に格納された制御プログラム群211D及び管理テーブル群212Dに基づいて必要な処理を実行することにより、計算ノードとしての処理を実行する。また、プロセッサ22はメモリ21のうち仮想サーバ51Bに割り当てられたメモリ領域(図示略)に格納された制御プログラム群311及び管理テーブル群312に基づいて必要な処理を実行することにより、I/Oノードとしての処理を実行する。
なお、本実施例では、仮想化機構を用いて処理を分割する構成が採用されているが、仮想化機構を用いずにOSのスレッド分割またはプロセス分割の機能が採用されてもよい。
以上、幾つかの実施例を説明したが、本発明は、それらの実施例に限らない。
例えば、上述の実施例においては、計算ノード2のキャッシュ管理部2113のS603(図16参照)の処理で、要求元に対応する領域にデータをライトするとしたが、計算ノード2間でデータが重複しないように、ハッシュ値などを用いて、データを格納する計算ノード2を一意に決定するとしてもよい。
また、上述の実施例において、ローカルキャッシュ領域214、ローカルキャッシュ拡張領域3141、及び共有キャッシュ領域3142のキャッシュデータはアプリケーションプログラム4のRead要求時に更新するとしたが、共有キャッシュ管理プログラム4112が制御用APIを備え、アプリケーションプログラム4からの指定により、データを配置しても良い。なお、その場合、キャッシュ管理プログラム4112の処理におけるS603、S604、S605の処理は省略し実行しない。
また、上述の実施例においては、I/Oノード3の共有キャッシュ管理プログラム3112において、何れかの仮想ローカルキャッシュ3143にキャッシュヒットした場合、I/Oノード3を介してRDMA通信により、一方の計算ノード2(例えば、計算ノード2A)から他方の計算ノード(例えば、計算ノード2B)へデータの移行を行うとしたが、I/Oノード3のキャッシュ領域314を介さずに、計算ノード2(例えば、計算ノード2A、2B)間で直接RDMA通信処理を行ってもよい。
また、上述の実施例においては、アプリケーションプログラム4は、ページ番号を指定するI/O要求を送信するとしたが、仮想アドレス指定でI/O要求を送信してもよい。
また、上述の実施例においては、ローカルキャッシュ領域214の容量を指定する処理は、計算ノード2の構成情報収集プログラム2111が行うとしたが、I/Oノード3が有する構成情報収集プログラム3111が行ってもよい。
また、上述の実施例においては、メモリ21に形成されるローカルキャッシュ拡張領域3141は1つとしたが、計算ノード毎に複数形成されてもよい。
また、上述の実施例においては、メモリ31上で、ローカルキャッシュ拡張領域3141と共有キャッシュ領域3142とを論理的に分けて管理したが、両者の領域を1つの領域として管理してもよい。
また、上述の実施例においては、ローカルキャッシュ拡張領域3141と共有キャッシュ領域3142内のデータが重複しないように、両者のキャッシュ領域に格納されているデータが重複しているかどうかをチェックしたが、この処理は、省略されてもよい。
また、上述の実施例においては、計算ノード2とI/Oノード3のインタフェース23、33を、所定の装置を介さずに接続する構成としたが、例えば、計算ノード2のインタフェース22とI/Oノード3のインタフェース33との間にスイッチを介して接続することもできる。こうすると、例えば、計算ノード2及びI/Oノード3が複数台ある場合、或る計算ノード2から特定のI/Oノード3にデータを送信したい場合、その計算ノード2は、I/O要求と同時にI/Oノード3を識別する情報をスイッチ装置に送信すれば良い。そうすると、スイッチが特定の計算ノード2を識別し、特定のI/Oノード3に対して計算ノード2からのI/O要求を振り分けることができる。
また、記憶デバイスは論理領域で構成されて良く、各論理領域は、RAIDグループに基づくストライプを構成する要素で良い。各論理領域群は、ライト要求の送信元装置(例えば、ホスト計算機又は別のストレージシステム)に提供される論理ユニットの構成要素でも良いし、ライト要求の送信元装置に提供される仮想的な論理ユニット(例えばThin Provisioningに従う論理ユニット)を構成する複数の仮想セグメント(仮想的な記憶領域)のいずれかに動的に割り当てられる領域群(仮想セグメントに対するライトに応じてそのライト先の仮想セグメントに割り当てられる領域群)であっても良い。後者の場合、記憶領域プールが、複数の論理セグメントで構成されていて、論理セグメント単位で、仮想セグメントに割り当てられても良い。記憶領域プールは、複数の論理ユニットで構成されて良く、その場合、各論理ユニットが、2以上の論理セグメントで構成されていて良い。
また、スワップアウト処理は、I/O要求を受けて行われる一連の処理(図15のS504)の中で行われることに代えて又は加えて、別のタイミングで行われても良い。
以上が、実施例1〜3の説明である。実施例1〜3では、複数の計算ノード2のローカルキャッシュ領域に配置されるデータがI/Oノード3のキャッシュ領域314に一元的に管理される。つまり、I/Oノード3が、計算ノード2のローカルキャッシュ領域のデータの配置を制御するキャッシュ制御処理を行う。しかし、その場合、いずれの計算ノード2でI/Oが発生しても、計算ノード2とI/Oノード3との間で通信が発生し、故に、帯域の利用効率が悪くなる可能性がある。
そこで、以下の実施例4〜6では、複数の計算ノードが(実施例5では更に管理ノードも)、それぞれ、キャッシュ制御処理を行う。
実施例4を説明する。その際、実施例1〜3との相違点を主に説明し、実施例1〜3との共通点については説明を省略或いは簡略する。また、以下の説明では、同種の要素を区別して説明する場合には、参照符号の全てを使用し(例えば、計算ノード2A、2B)、同種の要素を区別しないで説明する場合には、参照符号のうちの共通符号のみを使用する(例えば、計算ノード2)場合がある。なお、これは、実施例1〜3についても同様でよい。
実施例4では、計算ノード2(具体的には、図23のキャッシュ管理プログラム2113)がキャッシュ制御処理を行う。
図50は、実施例4に係るキャッシュ制御処理に伴うデータ移行を説明するための模式図である。なお、図50の説明において、計算機システム1が、実質的に、図22にて説明した(1)、(3)及び(4)の通りであるとする。
<データの移行処理>
ここでは、ローカルキャッシュ領域A(214A)から共有キャッシュ領域3142へのデータXの移行処理を説明する。
まず、その前提として、計算ノードA(2A)のアプリケーションプログラムA(4A)からデータXをリードするためのリード要求があり、計算ノードA(2A)は、そのリード要求をI/Oノード3に送信し、そのリード要求に対してI/Oノード3から受信したデータXを、ローカルキャッシュ領域A(214A)に格納しているとする。
また、各計算ノード2は、キャッシュ管理テーブル2122と後述のアドレス管理テーブル2123(図25参照)を有している。各計算ノード2が有しているこれらのテーブル2122及び2123は、所定の契機で他の計算ノード2に送信される。また、I/Oノード3が有するアドレス管理テーブル3123も、所定の契機で計算ノード2に送信される。
各計算ノード2は、これらのテーブル2122、2123、及びアドレス管理テーブル3123を用いることにより、データが自身の計算ノード2のキャッシュ領域に格納されている場合だけでなく、他の計算ノード2及びI/Oノード3のキャッシュ領域に格納されている場合も、そのデータの物理的な位置を特定することができる。例えば、下記の通りである。
(1)計算ノードB(2B)のアプリケーションプログラムBから、データXのリード要求(正確には、例えば、データXが格納されているページのアドレスを指定したリード要求)があった場合、計算ノードB(2B)は、計算ノードB(2B)が有するキャッシュ管理テーブル2122及びアドレス管理テーブル2123を用いることにより、データXが計算ノードA(2A)のローカルキャッシュ領域A(214A)に格納されていることを特定する。
(2)計算ノードB(2B)は、RDMA転送処理により、計算ノードA(2A)のローカルキャッシュ領域A(214A)からデータXを取得する。具体的には、計算ノードB(2B)は、データXの仮想アドレス(又は物理アドレス)を指定したリード要求を計算ノードA(2A)に送信する。計算ノードA(2A)が、そのリード要求を受信し、そのリード要求で指定されている仮想アドレス(又は物理アドレス)とテーブル2123(及び2122)とを基に、データXをローカルキャッシュ領域A(214A)から読み出し、読み出したデータXを計算ノードB(2B)に送信する。
(1)計算ノードB(2B)のアプリケーションプログラムBから、データXのリード要求(正確には、例えば、データXが格納されているページのアドレスを指定したリード要求)があった場合、計算ノードB(2B)は、計算ノードB(2B)が有するキャッシュ管理テーブル2122及びアドレス管理テーブル2123を用いることにより、データXが計算ノードA(2A)のローカルキャッシュ領域A(214A)に格納されていることを特定する。
(2)計算ノードB(2B)は、RDMA転送処理により、計算ノードA(2A)のローカルキャッシュ領域A(214A)からデータXを取得する。具体的には、計算ノードB(2B)は、データXの仮想アドレス(又は物理アドレス)を指定したリード要求を計算ノードA(2A)に送信する。計算ノードA(2A)が、そのリード要求を受信し、そのリード要求で指定されている仮想アドレス(又は物理アドレス)とテーブル2123(及び2122)とを基に、データXをローカルキャッシュ領域A(214A)から読み出し、読み出したデータXを計算ノードB(2B)に送信する。
その後、計算ノードA(2A)は、計算ノードA(2A)を介することなく他の計算ノードB(2B)もデータXを使用できるように、データXを共有キャッシュ領域3142に格納する。以後、計算ノードB(2B)は、共有キャッシュ領域3142からデータXを取得するようになる。これにより、使用頻度の高いデータXを格納している計算ノードA(2A)に、他の計算ノードB(2B)からのアクセスによる負荷が掛かることを回避することができる。
本実施例において、I/Oノード3のキャッシュ領域314が有する複数の領域のうち計算ノードA(2A)が所望する領域(例えば共有キャッシュ領域3142)にデータXを計算ノードA(2A)がI/Oノード3に格納させる方法は、2通りある。以下、その2通りの方法をそれぞれ説明する。
<共有キャッシュ領域3142にデータXを格納する方法1>
(3−1)計算ノードA(2A)(例えば、計算ノードA(2A)のキャッシュ管理プログラム)は、I/Oノード3に対して、データXの特殊リード要求を送信する。データXの特殊リード要求は、ローカルキャッシュ領域A(214A)に格納されているデータXが他の計算ノードB(2B)から取得された場合に、送信される。ここで、「特殊リード要求」とは、I/Oノード3のキャッシュ領域314における領域を表す情報を含んだリード要求である。「キャッシュ領域314における領域を表す情報」は、キャッシュ領域314のアドレス(仮想アドレス又は物理アドレス)でもよいし、キャッシュ領域314における領域の種類(例えば、共有キャッシュ領域3142又はローカルキャッシュ拡張領域3411)を表すフラグのオン/オフでもよい。本実施例では、キャッシュ領域314のアドレス(仮想アドレス又は物理アドレス)が採用される。一般的なリード要求では、I/Oノード3が計算ノードに提供する論理ボリュームの領域を表す情報(例えば、LUN(Logical Unit Number)及びLBA(Logical Block Address))は指定されるものの、キャッシュ領域314における領域を表す情報は指定されない。このような一般的なリード要求と区別するために、便宜上、キャッシュ領域314における領域を表す情報を含んだリード要求を「特殊リード要求」と言う。特殊リード要求では、キャッシュ領域314における領域を表す情報に加えて、論理ボリュームの領域を表す情報が指定されてもよい。特殊リード要求を受けたI/Oノード3は、記憶デバイス34からデータXを読み出し、読み出したデータXを、特殊リード要求で指定されている、共有キャッシュ領域3142における領域、に格納し、その後、データXを計算ノードA(2A)に送信する。
(3−2)計算ノードA(2A)は、I/Oノード3からデータXを受信し、そのデータXをローカルキャッシュ領域A(214A)に格納せず、ローカルキャッシュ領域A(214A)に格納されているデータXを無効にする。「ローカルキャッシュ領域A(214A)に格納されているデータXを無効にする」とは、ローカルキャッシュ領域A(214A)からデータXを削除することでもよいし、計算ノードA(2A)がデータXを無効データとして管理することでもよい。
(3−1)計算ノードA(2A)(例えば、計算ノードA(2A)のキャッシュ管理プログラム)は、I/Oノード3に対して、データXの特殊リード要求を送信する。データXの特殊リード要求は、ローカルキャッシュ領域A(214A)に格納されているデータXが他の計算ノードB(2B)から取得された場合に、送信される。ここで、「特殊リード要求」とは、I/Oノード3のキャッシュ領域314における領域を表す情報を含んだリード要求である。「キャッシュ領域314における領域を表す情報」は、キャッシュ領域314のアドレス(仮想アドレス又は物理アドレス)でもよいし、キャッシュ領域314における領域の種類(例えば、共有キャッシュ領域3142又はローカルキャッシュ拡張領域3411)を表すフラグのオン/オフでもよい。本実施例では、キャッシュ領域314のアドレス(仮想アドレス又は物理アドレス)が採用される。一般的なリード要求では、I/Oノード3が計算ノードに提供する論理ボリュームの領域を表す情報(例えば、LUN(Logical Unit Number)及びLBA(Logical Block Address))は指定されるものの、キャッシュ領域314における領域を表す情報は指定されない。このような一般的なリード要求と区別するために、便宜上、キャッシュ領域314における領域を表す情報を含んだリード要求を「特殊リード要求」と言う。特殊リード要求では、キャッシュ領域314における領域を表す情報に加えて、論理ボリュームの領域を表す情報が指定されてもよい。特殊リード要求を受けたI/Oノード3は、記憶デバイス34からデータXを読み出し、読み出したデータXを、特殊リード要求で指定されている、共有キャッシュ領域3142における領域、に格納し、その後、データXを計算ノードA(2A)に送信する。
(3−2)計算ノードA(2A)は、I/Oノード3からデータXを受信し、そのデータXをローカルキャッシュ領域A(214A)に格納せず、ローカルキャッシュ領域A(214A)に格納されているデータXを無効にする。「ローカルキャッシュ領域A(214A)に格納されているデータXを無効にする」とは、ローカルキャッシュ領域A(214A)からデータXを削除することでもよいし、計算ノードA(2A)がデータXを無効データとして管理することでもよい。
この方法1では、I/Oノード3は、計算ノードA(2A)から特殊リード要求を受信し、その特殊リード要求に基づいて、データXを共有キャッシュ領域3142に格納する。すなわち、方法1では、I/Oノード3は、記憶デバイス34からデータXを読み出す処理と、読み出したデータXを計算ノードA(2A)に送信する処理とを行う。
<共有キャッシュ領域3142にデータXを格納する方法2>
(4−1)計算ノードA(2A)は、I/Oノード3に対して、データXの特殊ライト要求を送信する。データXの特殊ライト要求は、ローカルキャッシュ領域A(214A)に格納されているデータXが他の計算ノードB(2B)から取得された場合に、送信される。ここで、「特殊ライト要求」とは、I/Oノード3のキャッシュ領域314における領域を表す情報を含んだライト要求である。「キャッシュ領域314における領域を表す情報」は、本実施例では、前述したように、キャッシュ領域314のアドレス(仮想アドレス又は物理アドレス)である。一般的なライト要求では、I/Oノード3が計算ノードに提供する論理ボリュームの領域を表す情報は指定されるものの、キャッシュ領域314における領域を表す情報は指定されない。このような一般的なライト要求と区別するために、便宜上、キャッシュ領域314における領域を表す情報を含んだライト要求を「特殊ライト要求」と言う。特殊ライト要求は、ライト対象のデータをキャッシュ領域314における領域に書き込むが論理ボリュームに書き込まないための要求である。例えば、特殊ライト要求では、キャッシュ領域314における領域を表す情報が指定されるが、論理ボリュームの領域を表す情報は指定されない(又は、論理ボリュームの領域を表す情報がダミーで指定されてその論理ボリュームにはデータを書き込まないことを意味するフラグのような情報が指定される)。I/Oノード3は、データXの特殊ライト要求を受信し、その特殊ライト要求に従い、その特殊ライト要求に関連付けられているデータXを共有キャッシュ領域3142に格納する。
(4−2)計算ノードA(2A)は、ローカルキャッシュ領域A(214A)に格納されているデータXを無効とする。
(4−1)計算ノードA(2A)は、I/Oノード3に対して、データXの特殊ライト要求を送信する。データXの特殊ライト要求は、ローカルキャッシュ領域A(214A)に格納されているデータXが他の計算ノードB(2B)から取得された場合に、送信される。ここで、「特殊ライト要求」とは、I/Oノード3のキャッシュ領域314における領域を表す情報を含んだライト要求である。「キャッシュ領域314における領域を表す情報」は、本実施例では、前述したように、キャッシュ領域314のアドレス(仮想アドレス又は物理アドレス)である。一般的なライト要求では、I/Oノード3が計算ノードに提供する論理ボリュームの領域を表す情報は指定されるものの、キャッシュ領域314における領域を表す情報は指定されない。このような一般的なライト要求と区別するために、便宜上、キャッシュ領域314における領域を表す情報を含んだライト要求を「特殊ライト要求」と言う。特殊ライト要求は、ライト対象のデータをキャッシュ領域314における領域に書き込むが論理ボリュームに書き込まないための要求である。例えば、特殊ライト要求では、キャッシュ領域314における領域を表す情報が指定されるが、論理ボリュームの領域を表す情報は指定されない(又は、論理ボリュームの領域を表す情報がダミーで指定されてその論理ボリュームにはデータを書き込まないことを意味するフラグのような情報が指定される)。I/Oノード3は、データXの特殊ライト要求を受信し、その特殊ライト要求に従い、その特殊ライト要求に関連付けられているデータXを共有キャッシュ領域3142に格納する。
(4−2)計算ノードA(2A)は、ローカルキャッシュ領域A(214A)に格納されているデータXを無効とする。
計算ノード2は、特殊リード要求及び特殊ライト要求を、例えば、I/Oノード3が提供するキャッシュ制御API(Application Program Interface)を使用して送信してよい。
計算ノードA(2A)は、特殊リード要求と特殊ライト要求を計算ノードA(2A)又はI/Oノード3の状況に応じて使い分けてもよい。例えば、計算ノードA(2A)は、転送データが大きい場合、又は他の計算ノード2からのI/O要求が頻発している場合には、転送処理を短時間で完了させるために特殊ライト要求を選択し、それ以外の場合に特殊リード要求を選択してもよい。
また、上述の方法1及び2のいずれにおいても、データXが要求された計算ノードA(2A)に代えて、データXを要求した計算ノードB(2B)が、データXの特殊リード要求又は特殊ライト要求をI/Oノード3に送信してもよい。
具体的には、方法1では、計算ノードB(2B)は、データXを計算ノードA(2A)から取得する前に、データXの特殊リード要求をI/Oノード3に送信してよい。この場合、データXはローカルキャッシュ領域B(214B)に格納されていないので、計算ノードB(2B)は、データXを無効とする処理を行う必要が無い。また、計算ノードA(2A)は、データXが計算ノードB(2B)により取得された場合に、そのデータXをローカルキャッシュ領域A(214A)から無効とする。
また、方法1では、計算ノードB(2B)は、データXを計算ノードA(2A)から取得した後に、データXの特殊リード要求をI/Oノード3に送信してよい。この場合、データXはローカルキャッシュ領域B(214B)に格納されているので、計算ノードB(2B)は、データXを無効とする処理を行う。また、計算ノードA(2A)は、データXが計算ノードB(2B)により取得された場合に、計算ノードBからの特殊リード処理完了通知を受信した後、そのデータXをローカルキャッシュ領域A(214A)から無効とする。
一方、方法2では、計算ノードB(2B)は、データXを計算ノードA(2A)から取得した後に、データXの特殊ライト要求をI/Oノード3に送信する。
以下、実施例4をより詳細に説明する。
図23は、実施例4に係る計算ノード2の構成の一例を示すブロック図である。
メモリ21が、制御プログラム群211と管理テーブル群212とを記憶する。
制御プログラム群211が有するプログラム2111〜2113は、例えば実施例1の制御プログラム群211が有するプログラム2111〜2113とそれぞれ異なっていてよい。少なくとも、キャッシュ管理プログラム2113は、実施例1のキャッシュ管理プログラム2113と異なる。例えば、キャッシュ管理プログラム2113は、実施例1のキャッシュ管理プログラム2113と同様の処理に加えて、図50を参照して説明したようなデータ移行処理を実行する。
制御テーブル群212が有するテーブル2121及び2122は、例えば実施例1の制御テーブル群212が有するテーブル2121及び2122とそれぞれ異なっていてよい。例えば、キャッシュ管理テーブル2122は、図示しないが、図7のキャッシュ管理テーブル2122の物理アドレス21222が仮想アドレスでよい。
また、制御テーブル群212は、更に、アドレス管理テーブル2123を有する。アドレス管理テーブル2123の詳細は後述する。
図24は、実施例4に係る計算ノード2Aのメモリ21の使用方法を説明するための模式図である。
メモリ21が、OS割当て領域213、ローカルキャッシュ領域A(214A)及び制御コマンド格納領域215に加え、仮想ローカルキャッシュ拡張領域2141、仮想共有キャッシュ領域2142、仮想ローカルキャッシュ領域B(2143B)及びC(2143C)を有する。つまり、実施例4では、メモリ21の記憶領域として、物理的な領域213、214A及び215に加えて、仮想的な領域2141、2142、2413B及び2413Cが管理される。仮想ローカルキャッシュ拡張領域2141は、I/Oノード3のローカルキャッシュ拡張領域3141に対応付けられた領域であり、仮想共有キャッシュ領域2142は、I/Oノード3の共有キャッシュ領域3142に対応付けられた領域である。また、仮想ローカルキャッシュ領域B(2143B)及びC(2143C)は、それぞれ、他の計算ノードB(2B)及びC(2C)のローカルキャッシュ領域B(214B)及びC(214C)に対応付けられている。メモリ21のキャッシュ領域24001が、ローカルキャッシュ領域A(214A)と、仮想的な領域2141、2142、2413B及び2413Cとで構成される。
図25は、実施例4に係る計算ノード2Aのアドレス管理テーブル2123の一例を示す。
アドレス管理テーブル2123の構成は、実施例1におけるI/Oノード3のアドレス管理テーブル3123(図10参照)と同様である。つまり、情報21231〜21235は、実施例1の情報31231〜31235とそれぞれ同じである。但し、図25によれば、属性値21232「拡張」及び「共有」に対応した物理位置21233は、実施例1の物理位置31233と異なり、「I/Oノード」となる。ローカルキャッシュ拡張領域3141及び共有キャッシュ領域3142の実体はI/Oノード3に存在するからである。
計算ノードA(2A)は、このアドレス管理テーブル2123と、前述のキャッシュ管理テーブル2122とを用いて、読み出し対象のデータが、計算ノードA(2A)のローカルキャッシュ領域A(214A)に格納されているのか、或いは、他の計算ノードB(2B)、C(2C)又はI/Oノード3のキャッシュ領域314に格納されているのかを判定することができる。
図26は、実施例4に係るI/Oノード3のメモリ31の使用方法を説明するための模式図である。図27は、実施例4に係るアドレス管理テーブル3123の一例を示す。
実施例4では、I/Oノード3は、実施例1における仮想ローカルキャッシュ領域3143を管理しない。このため、メモリ31のキャッシュ領域314は、ローカルキャッシュ拡張領域3141、共有キャッシュ領域3142及び通常キャッシュ領域3144を有するが、仮想ローカルキャッシュ領域3143A〜Cを有しない。また、I/Oノード3は、仮想ローカルキャッシュ領域3143A〜Cを管理しないため、アドレス管理テーブル3123では、属性値31232の値に「仮想A」〜「仮想C」が格納されない。
図28は、実施例4に係る計算ノード2のキャッシュ管理プログラム2113の処理フローチャートの一例である。
キャッシュ管理プログラム2113は、S301でアプリケーションプログラム4から受けたI/O要求がライト要求であるかリード要求であるかを判定する(S2801)。ライト要求であれば(S2801:No)、キャッシュ管理プログラム2113は、そのライト要求をI/Oノード3に対して転送しその応答を受信した後、実施例1で説明したS302〜S305を行い、そのI/O要求がリード要求であれば(S2801:Yes)、データ取得処理を実行し(S306)、その後、S304及びS305を行う。
図29は、実施例4に係る計算ノード2計算ノード2のデータ取得処理(図28のS306)の詳細の一例である。
キャッシュ管理プログラム2113は、キャッシュ管理テーブル2122を参照してキャッシュヒットかキャッシュミスのどちらが起こったかを判定する(S1101)。リード元ページ(リード要求で指定されているアドレス(論理ボリュームのアドレス範囲におけるアドレス)が属するページ)のページ番号を含んだエントリがあれば、キャッシュヒットが起こる。なお、アドレスが属するページは、例えば、計算ノード2が有する図示しないテーブルにアドレスとページの関係が登録されていて計算ノードがそのテーブルも参照することにより特定されてもよいし、計算ノード2の計算によって特定されてもよい。
キャッシュミスが起こった場合(S1101:No)、キャッシュ管理プログラム2113は、リード元ページ(記憶デバイス34)からリード対象のデータを読み出し(S1102)、読み出したデータをローカルキャッシュ領域214に格納する(S1103)。S1102が、図13のS302及びS303に対応する。キャッシュ管理プログラム2113は、アドレス管理テーブル2123における、S1103での格納先の仮想アドレスに対応する使用状況21235を「使用」に変更し、他の各計算ノード2に、自身のアドレス管理テーブル2123の変更内容(例えば、変更箇所を含んだレコードの情報全て)を通知する(S1104)。
その後、キャッシュ管理プログラム2113は、ローカルキャッシュ領域214について所定の条件が満たされているか否かを判定する(S1105)。具体的には、例えば、キャッシュ管理プログラム2113は、ローカルキャッシュ領域214について、残容量(或いは空き容量率)が、所定値以下であるか否かを判定する。この判定は、キャッシュ管理プログラム2113が構成管理テーブル2121を参照することにより行うことができる。ローカルキャッシュ領域214について所定の条件が満たされている場合(S1105:Yes)、キャッシュ管理プログラム2113は、スワップアウト処理を実行する(S1106)。
キャッシュヒットが起こった場合(S1101:Yes)、キャッシュ管理プログラム2113は、アドレス管理テーブル2123を参照して、リード対象データを記憶している領域(以下、図29の説明において「ヒット領域」)が、ローカルキャッシュ領域214、ローカルキャッシュ拡張領域2141、共有キャッシュ領域2142、仮想ローカルキャッシュ領域2143B及び2143Cのいずれであるかを判定する(S1107)。
S1107の判定において、ヒット領域がローカルキャッシュ拡張領域2141または共有キャッシュ領域2142である場合には、キャッシュ管理プログラム2113は、アドレス管理テーブル2123を用いて、I/Oノード3にリード対象データを取得することを要求する(S1108)。具体的には、キャッシュ管理プログラム2113は、ローカルキャッシュ拡張領域2141又は共有キャッシュ領域2142に対応したアドレス(例えば物理アドレス)を指定し論理ボリュームのアドレスを指定しない特殊リード要求を送信する。キャッシュ管理プログラム2113は、S1108の要求について、キャッシュヒットとキャッシュミスのいずれが起こったかを判定する(S1109)。S1108の開始から所定時間以内にデータを受信した場合、キャッシュヒットが起こったと判定される。S1108の開始から所定時間以内にデータを受信できなかった場合、キャッシュミスが起こったと判定される。キャッシュヒットが起こった場合(S1190:Yes)、キャッシュ管理プログラム2113は、受信したデータをメモリ21に一時格納する。キャッシュミスが起こった場合(S1109:No)、キャッシュ管理プログラム2113は、S1103を行う。
S1109の判定により、S1101でキャッシュヒットが判定された後にI/Oノード3においてスワップアウト処理が行われたことにより共有キャッシュ領域2142からリード対象のデータが無くなってしまった場合や、I/Oノード3が高負荷になったため処理遅延が発生した場合に、計算ノード2がそのような場合を検知することができる。そして、そのような場合が検知されたならば、計算ノード2は、リード対象データをローカルキャッシュ領域214に格納する。これにより、計算機システム1全体としての性能の劣化を抑止することができる。
さて、S1107の判定において、ヒット領域が仮想ローカルキャッシュ領域2143である場合には、キャッシュ管理プログラム22113は、RDMA転送処理により、仮想ローカルキャッシュ領域B(2143B)(又はC(2143C))に対応付けられているローカルキャッシュ領域B(214B)(又はC(214C))からリード対象のデータを取得する(S1110)その後、取得したデータを共有キャッシュ領域2142に移すために、キャッシュ管理プログラム2113は、I/Oノード3に、取得したデータの特殊ライト要求(共有キャッシュ領域2142のアドレスを指定した特殊ライト要求)(又は特殊リード要求)を送信する(S1111)。キャッシュ管理プログラム2113は、アドレス管理テーブル2123における、リード元の仮想アドレスに対応する使用状況21235を「未使用」に変更し、他の各計算ノード2に、自身のアドレス管理テーブル2123の変更内容を通知する(S1112)。他の各計算ノード2では、受信したアドレス管理テーブル2123の変更内容に基づいて、アドレス管理テーブル2123を更新する。
S1107の判定において、ヒット領域がローカルキャッシュ領域214である場合、キャッシュ管理プログラム22113は、キャッシュ管理テーブル2122を参照してローカルキャッシュ領域からリード対象データを取得する(S1108)。
図30は、実施例4に係る計算ノード2のスワップアウト処理(図29のS1106)の詳細の一例である。
スワップアウト処理は、ローカルキャッシュ領域214の残容量の多寡に基づいて行われる。具体的には、例えば、キャッシュ管理プログラム2113は、構成管理テーブル2121を参照し、容量21213が、使用量21214とライト容量(ライト対象データのサイズ)との和以上か否かを判定する(S1201)。
容量21213が使用量21214とライト容量との和以上の場合(S1201:Yes)、キャッシュ管理プログラム2113は、ローカルキャッシュ領域214に、ライト対象のデータをライトし、使用量21214に、ライト容量の値を加算する(S1202)。
一方、容量21213が使用量21214とライト容量との和未満の場合(S1201:No)、キャッシュ管理プログラム2113は、ローカルキャッシュ領域214に格納されているデータのうち、例えば、LRU(Least Recently Used)アルゴリズムなどに基づいて、移行対象データを決定する(S1203)。次に、キャッシュ管理プログラム2113は、決定した移行対象データをローカルキャッシュ領域214から読み出し、読み出したデータをローカルキャッシュ拡張領域2141へライトする特殊ライト要求を、I/Oノード3に対して発行する(S1204)。更に、キャッシュ管理プログラム2113は、スワップアウトされたデータが格納されている領域(移行対象データの書き込み先の領域)について、キャッシュ管理テーブル2122を更新する(S1205)。具体的には、例えば、当該領域について、ページ番号21211が、スワップアウトされたデータのページ番号から、移行対象データのページ番号に更新される。本実施例では、スワップアウトされるデータ(決定されたデータ)のサイズは、移行対象データのサイズと一致させている。そのため、ここでは、S1202のような使用量21214の更新は行われないでよい。
なお、スワップアウトされるデータ(決定されたデータ)のサイズは、移行対象データのサイズより大きくても良い。
図31は、実施例4に係るI/Oノード3のデータ取得処理(図15のS504)の詳細の一例である。
I/Oノード3の共有キャッシュ管理プログラム3112は、I/Oノード3の共有キャッシュ領域3142のみを管理する。したがって、キャッシュヒットが起こった場合(S601:Yes)、共有キャッシュ管理プログラム3112は、共有キャッシュ領域3142からデータを取得する(S611)。一方、キャッシュミスが起こった場合(S601:No)、共有キャッシュ管理プログラム3112は、実施例1と同じ処理を実施する。ただし、実施例4に係るスワップアウト処理(S605)は、実施例1に係るスワップアウト処理(S605)と異なる。
図32は、実施例4に係るI/Oノード3のスワップアウト取得処理(図31のS605)の詳細の一例である。
前述したように、I/Oノード3の共有キャッシュ管理プログラム3112は、共有キャッシュ領域3142のみを管理する。したがって、共有キャッシュ管理プログラム3112は、S701において共有キャッシュ領域3142に対する容量超過判定のみを行った後、容量31213が使用量31214とライト容量との和以下の場合(S701:No)、共有キャッシュ領域3142からデータを削除する(S715)。
実施例4によると、計算ノード2の間でキャッシュデータをやり取りする処理において、I/Oノード3が介在する必要がなくなるため、計算ノード2とI/Oノード3の間のネットワークの負荷が抑止されることにより、帯域の利用効率が向上し、I/Oノード3の処理負荷が低減する。
また、実施例4では、計算ノード2のキャッシュ管理プログラム2113は、アプリケーションプログラムから新たなデータをライトする処理を受信したことを契機に、共有キャッシュ領域3142に新たなデータが格納されているかを判定することができる。そして、共有キャッシュ領域3142に新たなデータが格納されている場合、キャッシュ管理プログラム2113は、その新たなデータをローカルキャッシュ領域214にライトしないこともできる。
また、実施例4では、キャッシュ管理プログラム2113は、ローカルキャッシュ拡張領域3141から共有キャッシュ領域3142へデータを移動させる際、I/Oノード3に対して、以下の(1)乃至(3)の処理を行なわせるコマンドを送信することもできる。
(1)ローカルキャッシュ拡張領域3141から読み出し対象のデータを読み出す。
(2)読み出したデータを共有キャッシュ領域3142に書き込む。
(3)リード元のローカルキャッシュ拡張領域3141に格納されている読み出し対象のデータを無効とする。
(1)ローカルキャッシュ拡張領域3141から読み出し対象のデータを読み出す。
(2)読み出したデータを共有キャッシュ領域3142に書き込む。
(3)リード元のローカルキャッシュ拡張領域3141に格納されている読み出し対象のデータを無効とする。
また、実施例4では、計算ノード2は、記憶デバイスの一部の記憶領域を、キャッシュ領域として利用してもよい。また、I/Oノード3は、記憶デバイス34の一部の記憶領域を、キャッシュ領域として利用してもよい。メモリ21(31)と、計算ノード2が有する記憶デバイス及び記憶デバイス34は、一般にI/O性能が異なるが、計算ノード2及びI/Oノード3の少なくとも一方において、それらのI/O性能の違いに応じたキャッシュ制御処理が行われてよい。
実施例5を説明する。その際、実施例1〜4との相違点を主に説明し、実施例1〜4との共通点については説明を省略或いは簡略する。
実施例5では、計算ノード2及びI/Oノード3の両方に接続された管理サーバ5(具体的には後述のキャッシュ管理プログラム5113)がキャッシュ制御処理を行う。
I/O量(入出力されるデータの総量)とアプリケーションプログラム4の性能(典型的にはI/O性能)には必ずしも相関がない。このため、I/O量に基づいた一般的なLRUロジックが使用されると、アプリケーションプログラムの性能向上に貢献し得ないデータがキャッシュ領域に格納される可能性がある。すなわち、I/O量に基づいた一般的なLRUロジックが使用されると、キャッシュの容量効率が低下する可能性がある。
そこで、実施例5では、以下に説明する処理が行われる。
図51は、実施例5に係るキャッシュ制御処理を説明するための模式図である。
管理ノード5は、各アプリケーションプログラム4の性能(例えばI/O性能)に関する性能情報を記憶する。性能情報は、例えばSLA(Service Level Agreement)情報である。ここで、SLA情報とは、アプリケーションプログラムの性能目標を表す情報、例えば、単位時間当たり(例えば1秒間)に処理できるトランザクションの数である。
また、管理ノード5は、各計算ノード2のキャッシュ領域の容量を、アプリケーションプログラムの性能に基づいて動的に制御する。
例えば、計算ノードA(2A)のアプリケーションプログラムA(4A)の性能がアプリケーションプログラムA(4A)のSLA情報を満たしていない場合、管理サーバ5は、性能がSLA情報より大きいアプリケーションプログラム4を有している計算ノード2を1つ選択する。ここでは、計算ノードB(2B)が選択されたとする。
次に、管理サーバ5は、アプリケーションプログラムA(4A)を計算ノードB(2B)に移動できるか否かを判定する。このように、まず、問題となるアプリケーションプログラムA(4A)が他の計算ノードB(2B)に移動できるか否かを判定する基準は次の2つである。1つ目は、管理サーバ5は、アプリケーションプログラムAを他のサーバに移動することがユーザに許可されていない場合に移動できないと判定する。2つ目は、管理サーバ5は、移動先の計算ノードBのCPU負荷が100%に近いなどの理由により、アプリケーションプログラムAを移動させるとむしろ性能が劣化してしまうことが見込まれる場合に移動できないと判定する。
アプリケーションプログラムA(4A)を計算ノードB(2B)に移動できると判定した場合、管理サーバ5は、図51の(1)に示す通り、アプリケーションプログラムA(4A)を計算ノードBに移動する。この場合、アプリケーションプログラムA(4A)は、計算ノードB(2B)に格納され、ローカルキャッシュ領域B(214B)を使用することになる。
一方、アプリケーションプログラムA(4A)を計算ノードB(2B)に移動できないと判定した場合、管理サーバ5は、図51の(2)に示す通り、計算ノードB(2B)のローカルキャッシュ領域B(214B)の一部の記憶領域を計算ノードA(2A)に融通する。この場合、計算ノードA(2A)は、融通された、ローカルキャッシュ領域B(214B)の一部の記憶領域をローカルキャッシュ領域A(214A)の一部として使用することができる。
以下、実施例5を詳細に説明する。
図33は、実施例5に係る計算機システム1の全体構成の一例を示すブロック図である。
実施例5に係る計算機システム1は、実施例1における計算ノード2及びI/Oノード3に加え、管理サーバ5を有する。これらの構成要素(計算ノード2、I/Oノード3、及び管理サーバ5)が、同一の筺体内に設置されている。
計算ノード2、I/Oノード3、及び管理サーバ5は、筺体内で、所定のインタフェース(例えば、Ethernet(登録商標))53で接続されている。計算ノード2は、例えば、ホスト計算機である。また、I/Oノード3は、例えば、ホスト計算機が接続されるストレージ装置である。
なお、計算ノード2、I/Oノード3、及び管理サーバ5とは、同一の筺体に配置されなくても良い。また、計算ノード2、I/Oノード3、及び管理サーバ5とは、所定の通信ネットワーク(例えば、LAN(Local Area Network))を介して接続されても良い。
管理サーバ5は、例えば、一種の計算機である。管理サーバ5は、メモリ55に、制御プログラム群511、及び管理テーブル群512を格納する。制御プログラム群511及び管理テーブル群512については、後述する。
図34は、実施例5に係る管理サーバ5の構成の一例を示すブロック図である。
管理サーバ5は、メモリ51、インタフェース53、及びそれらに接続されたプロセッサ(例えばCPU(Central Processing Unit))52を備える。
プロセッサ52は、管理サーバ5の動作の制御を行い、メモリ55に格納された制御プログラム群511及び管理テーブル群512に基づいて必要な処理を実行する。メモリ55は、制御プログラム群511及び管理テーブル群512を記憶するために用いられるほか、プロセッサ52のワークメモリとしても用いられる。インタフェース53は、通信インタフェースデバイスであり、管理サーバ5が計算ノード2及びI/Oノード3と通信する際のプロトコルの制御を行う。
制御プログラム群511には、構成情報収集プログラム5111、性能管理プログラム5112及びキャッシュ管理プログラム5113が含まれている。プログラム5111〜5113は、全体として一つのプログラムで実現されても良いし、実装上の都合により2以下或いは4以上のプログラムに、分けられても良い。
構成情報収集プログラム5111は、例えば、後述の構成管理テーブル5121を設定するためのインタフェースとして動作する。また、構成情報収集プログラム5111は、例えば、設定API(Application Program Interface)の呼び出しに応じて、構成管理テーブル5121の設定、及び/又は更新を行う。
性能管理プログラム5112は、定期的に計算ノード2及びI/Oノード3の図示しない性能情報通知プログラムから各計算ノード2のアプリケーションプログラム4の性能に関する情報を収集し、後述の性能管理テーブル5112に格納する。
キャッシュ管理プログラム5113は、SLA違反イベントを検出したことを契機として、計算ノード2のローカルキャッシュ領域214にデータを格納する、及び、ローカルキャッシュ領域214に格納したデータの更新を行う。具体的には、例えば、キャッシュ管理プログラム5113は、アドレス管理テーブル5122にエントリを追加すること、アドレス管理テーブル5122のエントリを更新すること、及び性能管理テーブル5122に従って計算ノード2とI/Oノード3にキャッシュ制御指示を発行する。なお、「SLA違反イベント」とは、アプリケーションプログラム4の性能がそのアプリケーションプログラム4のSLA情報未満になることである。
管理テーブル群512には、構成管理テーブル5121、性能管理テーブル5122及びアドレス管理テーブル5123が含まれている。これらの管理テーブル5121、5122、及び5123については、後述する。
図35は、実施例5に係る計算ノード2の構成管理テーブル2121の一例を示す。
実施例5に係る構成管理テーブル2121は、物理位置21210、容量21211、使用量21212、及び物理アドレス21213を有する。物理位置21210は、キャッシュ領域がローカルキャッシュ領域214なのか、リモートキャッシュ領域(2141、2142、2143)なのかを示す情報である。容量21211は、ローカルキャッシュ領域214、或いはリモートキャッシュ領域(2141、2142)の容量を示す。使用量21212は、ローカルキャッシュ領域214、或いはリモートキャッシュ領域(2141、2142、2143)の容量のうち、計算ノード2により実際に使用されているデータの量を示す。物理アドレス21213は、ローカルキャッシュ領域214、或いはリモートキャッシュ領域(2141、2142、2143)に属する複数の物理的なアドレスを示す。
図36は、実施例5に係る管理サーバ5の構成管理テーブル5121の一例を示す。
構成管理テーブル5121は、アプリケーションプログラム4毎に、計算ノード識別子51211及びアプリケーション識別子51212を有する。計算ノード識別子51211は、アプリケーションプログラム4を実行する計算ノードの識別子である。アプリケーション識別子51212は、アプリケーションプログラム4の識別子である。
図37は、実施例5に係る管理サーバ5の性能管理テーブル5122の一例を示す。
性能管理テーブル5122は、計算ノード2毎に構成される。性能管理テーブル5122は、複数のアプリケーションプログラム4のうちの移動対象になり得るアプリケーションプログラム4について、アプリケーション識別子51221、SLA情報51222、最大要求数51223、最大性能51224、及び移動可否51225を有する。全てのアプリケーションプログラム4がそれぞれ移動対象になり得るアプリケーションプログラムでもよい。
アプリケーション識別子51221は、アプリケーションプログラム4の識別子である。SLA情報51222は、アプリケーションプログラム4に予め設定された性能目標値、例えば、毎秒処理できるトランザクションの数である。
最大要求数51223は、アプリケーションプログラム4が過去に(例えば過去の所定の期間に)処理することのできた要求(典型的にはI/O要求)の数の最大値である。最大性能51224は、現在のキャッシュ領域の構成(例えばローカルキャッシュ領域の容量)においてアプリケーションプログラム4が発揮できると期待される最大性能である。最大性能51224は、例えば、ローカルキャッシュ領域の容量を基に特定のプログラムにより算出された値でよい。また、最大性能51224は、キャッシュ容量の融通のような構成変更(キャッシュ領域の構成変更)が行われた場合に、更新されてよい。
移動可否51225は、アプリケーションプログラム4の実行中にそのアプリケーションプログラム4を他の計算ノード2に移動することが可能かどうかを表す情報である。移動可否51225は、あらかじめユーザによって指定された値であってよい。例えば。ユーザは、他の計算ノード2に移動させたくないアプリケーションプログラムに対して移動可否51225として「否」を設定することができる。
図38は、実施例5に係る管理サーバ5のアドレス管理テーブル5133の一例を示す。
このアドレス管理テーブル5123を用いることにより、管理サーバ5は、計算ノード2及びI/Oノード3のキャッシュ構成を理解することができる。
アドレス管理テーブル5123の構成は、実施例1におけるI/Oノード3のアドレス管理テーブル3123と、実質的に同様である。
ただし、仮想アドレス51231の値が5の列(点線枠P内)において、属性値51232が「仮想A」であるが、物理位置51233が「計算ノードB」となっている。これは、計算ノードB(2B)のキャッシュ領域の一部を計算ノードA(2A)に融通していることを示している。計算ノードA(2A)は、例えば、データ取得処理(図29)において、計算ノードB(2B)から融通されたキャッシュ領域にデータを追加したりそのキャッシュ領域からデータを削除したりすることができる。
図39は、実施例5に係る管理サーバ5の性能管理プログラム5112の処理フローチャートの一例である。
性能管理プログラム5112は、各アプリケーションプログラム4の構築時にユーザに設定されたSLA情報及び移動可否情報を収集し、それぞれ性能管理テーブル5112のSLA情報欄51121及び移動可否欄51125に登録する(S1301)。
次に、性能管理プログラム5112は、アプリケーションプログラム4が参照するデータをすべて計算ノード2のローカルキャッシュ領域214から読み出した場合のアプリケーションプログラム4の単位時間当たりの処理件数を計測する。そして、性能管理プログラム5112は、計測した結果を性能管理テーブル5112の最大性能欄51122に登録する(S1302)。
その後、性能管理プログラム5112は、稼働しているアプリケーションプログラム4の性能を定期的に収集し(S1303)、収集した性能をそのアプリケーションプログラム4のSLA情報51222と比較する(S1304)。
SLA情報51222がS1303で収集した性能以上の場合(S1304:Yes)、性能管理プログラム5112は、S1303の処理に戻る。一方、SLA情報51222がS1303で収集した性能未満の場合(S1304:No)、性能管理プログラム5112は、キャッシュ管理プログラム5113に後述するキャッシュ構成変更処理を実行させるため、キャッシュ管理プログラム5113に、SLA違反イベント通知を送信する(S1305)。SLA違反イベント通知は、SLA情報51222がS1303で収集した性能未満であるイベントが生じたことの通知であり、例えば、S1303で収集した性能を表す情報、SLA情報51222、及び、アプリケーションプログラム4の識別子を含んでよい。S1305の処理の後、性能管理プログラム5112は、S1503の処理に戻る。
図40は、実施例5に係る管理サーバ5のキャッシュ構成変更処理(図39のS1305)の詳細の一例である。
キャッシュ管理プログラム5113は、SLA違反イベント通知を性能管理プログラム5112から受信する(S1401)。または、キャッシュ管理プログラム5113は、ユーザのGUI操作などによる新規アプリケーションプログラム4の動作環境として割り当てるためのメモリ容量確保要求を受信する(S1401)。
キャッシュ管理プログラム5113は、後述する容量融通先選択処理を行ない(S1402)、キャッシュ容量削減可能なアプリケーションプログラム4を選択する。
キャッシュ管理プログラム5113は、性能管理テーブル5122のSLA情報51221を参照し、後述する容量融通方式選択処理を行ない(S1403)、アプリケーションプログラム4及びキャッシュ容量の割り当ての構成変更を実行する。
キャッシュ管理プログラム5113は、各アプリケーションプログラム4の性能情報を収集し、収集した性能情報とSLA情報51222とを比較することにより、SLAイベント違反のアプリケーションプログラム4が無くなったかどうかを判定する(S1404)。
まだSLAイベント違反がある場合(S1404:No)、キャッシュ管理プログラム5113は、S1402の処理に戻る。一方、もうSLAイベント違反が無い場合(S1404:Yes)、キャッシュ管理プログラム5113は、処理を終了する。
図41は、実施例5に係る管理サーバ5の容量融通先選択処理(図39のS1402)の詳細の一例である。
キャッシュ管理プログラム5113は、性能管理テーブル5122を参照し、アプリケーションプログラム4毎に、SLA情報51222と最大要求数51223を比較する(S1501)。
SLA情報51222が最大要求数51223以上であるアプリケーションプログラム4が存在する場合(S1501:Yes)、キャッシュ管理プログラム5113は、SLA情報51222と最大要求数51223との差が最大のアプリケーションプログラム4を、容量融通先の候補として選択する(S1502)。
なお、容量融通先候補の選択基準として、ステップS1502の基準に加えて、計算機ノード2の負荷、例えばCPU負荷情報を収集し、高負荷の場合(例えば、負荷が80%以上の場合)には候補からは除外するという基準を付加してもよい。
なお、容量融通先候補の選択基準として、ステップS1502の基準に加えて、計算機ノード2の負荷、例えばCPU負荷情報を収集し、高負荷の場合(例えば、負荷が80%以上の場合)には候補からは除外するという基準を付加してもよい。
SLA情報51222が最大要求数51223以上であるアプリケーションプログラム4が存在しない場合(S1501:No)、キャッシュ管理プログラム5113は、SLA情報51222と最大性能51224を比較する(S1503)。
SLA情報51222が最大性能51224以下であるアプリケーションプログラム4が存在する場合(S1503:Yes)、キャッシュ管理プログラム5113は、SLA情報51222と最大性能51224との差が最大のアプリケーションプログラム4を、容量融通先の候補として選択する(S1504)。
SLA情報51222が最大性能51224以下であるアプリケーションプログラム4が存在しない場合(S1503:No)、キャッシュ管理プログラム5113は、候補となるアプリケーションプログラム4が存在しない(解なし)と判定する(S1505)。
図42は、実施例5に係る管理サーバ5の容量融通方式選択処理(図40のS1403)の詳細の一例である。
キャッシュ管理プログラム5113は、構成管理テーブル5122の移動可否51225を参照し、S1401で指定されたアプリケーションプログラム4が動作する計算ノード2において、移動可能なアプリケーションプログラム4が存在するか否かを判定する(S1601)。
移動可能なアプリケーションプログラム4が存在する場合(S1601:Yes)、キャッシュ管理プログラム5113は、S1401で指定されたアプリケーションプログラム4を、容量融通先選択処理(S1402)で選択した計算ノード2へ移動する(S1602)。S1602の処理では、キャッシュ管理プログラム5113は、アプリケーションプログラム4が利用していたデータと共に、S1402で選択した計算ノード2へ移動する。そして、キャッシュ管理プログラム5113は、アプリケーションプログラム4が利用していた移動元の計算ノード2に格納されているデータを無効とする。
移動可能なアプリケーションプログラム4が存在しない場合(S1601:No)、キャッシュ管理プログラム5113は、アドレス管理テーブル5123を更新しキャッシュ容量を融通する(S1603)。具体的には、例えば、計算ノード2Aのキャッシュ容量を計算ノード2Bに融通することは、属性値51232「仮想B」に対応する物理位置51233に物理位置51233「計算ノードA」に対応する少なくとも1つの仮想アドレス51231を対応付けることと、「計算ノードA」に対応する仮想アドレス51231を融通先の計算ノードA(2A)と融通元の計算ノードB(2B)とに通知することにより両方の計算ノードにキャッシュ領域の構成変更を行わせることである。
図43は、実施例5に係る計算ノード2のスワップアウト処理の詳細の一例である。
キャッシュ管理プログラム5113は、キャッシュ領域から移行するデータ(以下、移行対象データ)を決定した後、構成管理テーブル2121を参照し、物理位置21210がリモート」の容量51213が、使用量21214と移行容量(移行対象データのサイズ)との和以上か否かを判定する(S1206)。
容量21213が使用量21214と移行容量との和以上の場合(S1206:Yes)、キャッシュ管理プログラム5113は、移行対象のデータを「リモート」の領域、すなわち他の計算ノード2から融通されている領域にライトし、その後、S1202の処理に進む。
一方、容量21213が使用量21214と移行容量との和未満の場合(S1206:No)、キャッシュ管理プログラム5113は、「リモート」の領域に格納されているデータのうち、例えば、LRUアルゴリズムなどに基づいて、移行するデータを決定し、アドレス管理テーブル2123を参照し、決定したデータを移行対象データで置き換える(S1208)。その後、キャッシュ管理プログラム5113は、ステップS1204の処理に進む。それ以外の処理は、実施例4と同じであるため説明を省略する。
実施例5によれば、各計算ノード2が使用できるキャッシュ領域24001の容量を、各アプリケーションプログラム4に予め設けられたSLA情報に基づいて決定するので、アプリケーションプログラム4が使用するデータは、何れかの計算ノード2のキャッシュ領域24001に格納される可能性が高くなる。故に、データを記憶デバイス34からリードする確率が減り、システム全体としてのキャッシュヒット率を向上させることができる。
また、実施例5によれば、例えば、計算ノードA(2A)から計算ノードB(2B)に対してキャッシュ領域が融通され、更に、計算ノードB(2B)から計算ノードA(2A)に対してキャッシュ領域が融通されることあり得る。その場合、キャッシュ管理プログラム5113は、各アプリケーションプログラムについて性能がSLA情報より小さくならないようにする。具体的には、キャッシュ管理プログラム5113は、アプリケーションプログラム4が使用するデータができるだけそのアプリケーションプログラム4を実行する計算ノードのローカルキャッシュ領域214に格納されるようにデータを配置する。より具体的には、例えば、計算ノードA(2A)のキャッシュ管理プログラム2113は、アドレス管理テーブル5123の属性値51232「仮想A」に対して割り当たっていた物理位置51233「計算ノードB」を「計算ノードA」に変更する。
次に、実施例6を説明する。その際、実施例1〜5との相違点を主に説明し、実施例1〜5との共通点については説明を省略或いは簡略する。
実施例6では、計算ノード2におけるキャッシュ管理プログラム2113がキャッシュ制御処理を行う。また、実施例6では、計算ノード2が記憶デバイス24を有し記憶デバイス24の一部の記憶領域がキャッシュ領域の一部として使用される。
しかし、記憶デバイス24の一部がキャッシュ領域の一部として使用されると、計算ノード2及びI/Oノード3において、1つの装置における1つのキャッシュ領域内にI/O性能の異なる記憶領域が混在することになる。そうすると、キャッシュ領域におけるどの記憶領域がメモリ21と記憶デバイス24のどちらに基づいているかが問題となる。
実施例6では、記憶デバイス24の一部の記憶領域が、ローカルキャッシュ領域214からスワップアウトされたデータを記憶する領域として使用される。
図44は、実施例6に係る計算機システム1の全体構成の一例を示すブロック図である。
計算ノード2が記憶デバイス24を有する。具体的には、計算ノード2A〜2Cがそれぞれ記憶デバイス24A〜24Cを有する。記憶デバイス24は、例えば、SSD(Solid State Drive)である。
図45は、実施例6に係る計算ノード2の構成の一例を示すブロック図である。
計算ノード2は、実施例4における計算ノード2に記憶デバイス24を加えた構成である。それ以外の構成は、実施例4と同じであるため説明を省略する。
図46は、実施例6に係る計算ノード2の構成管理テーブル2121の一例を示す。
実施例5に係る構成管理テーブル2121と比較すると、物理位置2110として「ローカルディスク」及び「リモートディスク」が追加されている。
物理位置2110「ローカルディスク」とは、計算ノード2が有する記憶デバイス24を示す。また、物理位置2110「リモートディスク」とは、他の計算ノード2が有する記憶デバイス24を示す。
物理位置21210「ローカルディスク」の容量21211は、ローカルディスクの容量のうち、キャッシュ領域として使用可能な容量を示す。使用量21212は、自身及び他の計算ノード2によって使用されている容量を示す。
物理位置21210「リモートディスク」の容量21211は、リモートディスクの容量のうち、キャッシュ領域として使用可能な容量を示す。つまり、容量21211は、キャッシュ領域として利用可能な、他の計算ノード2から提供されている記憶デバイス24の容量を示す。使用量21212は、自身及び他の計算ノード2によって使用されている容量を示す。
実施例6では、キャッシュ管理プログラム5113は、構成管理テーブル2121を参照することにより、ローカルキャッシュ及びリモートキャッシュの、容量及び使用量を把握することができる。
図47は、実施例6に係る計算ノード2のアドレス管理テーブル2133の一例を示す。
アドレス管理テーブル2123の構成は、実施例4における計算ノード2のアドレス管理テーブル2123と同様であるが、実施例6におけるアドレス管理テーブル2123では、計算ノード2の記憶デバイス24及びI/Oノード3の記憶デバイス34に対応する属性値21233に「記憶デバイス」が追加されている。つまり、計算ノード2は、キャッシュ領域として記憶デバイス24の物理領域を利用することができる。また、I/Oノード3は、キャッシュ領域として記憶デバイス34の物理領域を利用することができる。
このアドレス管理テーブル2123を用いることにより、計算ノード2は、自身が有する記憶デバイス24、及びI/Oノード3が有する記憶デバイス34をキャッシュ領域として使用することができる。
図48は、実施例6に係る計算ノード2のスワップアウト処理(図29のS1106)の詳細の一例である。
S1203において移行するデータを決定した後、キャッシュ管理プログラム2113は、構成管理テーブル2121を参照し、物理位置21210が「ローカルディスク」の容量21213が、使用量21214と移行容量(移行対象データのサイズ)との和以上か否かを判定する(S1206)。
容量が使用量21214と移行容量との和以上の場合(S1206:Yes)、キャッシュ管理プログラム2113は、記憶デバイス24に、移行対象のデータをライトした後、S1202に進む。
一方、容量が使用量21214と移行容量との和未満の場合(S1206:No)、キャッシュ管理プログラム2113は、計算ノード2の記憶デバイス24に格納されているデータのうち、例えば、LUR(Least Recently Used)アルゴリズムなどに基づいて、移行対象データを決定する(S1208)。キャッシュ管理プログラム2113は、記憶デバイス24上のデータを置き換えた後、S1204に進む。それ以外の処理は、実施例4と同じであるため説明を省略する。
なお、実施例5と実施例6を組合せると、計算ノード2同士がキャッシュ領域を融通し合い、かつ各計算ノード2が記憶デバイス24をキャッシュ領域として使用することができる。この場合、各計算ノード2は、「ローカルメモリ」、「リモートメモリ」、「ローカルディスク」及び「リモートディスク」の4つのキャッシュ領域を持つことになる。アクセス性能は、「ローカルメモリ」、「リモートメモリ」、「ローカルディスク」、「リモートディスク」の順番に高い。
図52は、実施例6におけるスワップアウト処理を説明するための模式図である。
スワップアウト処理(図29のS1106)は、以下の(1)〜(3)の順序で行われる。
(1)計算ノードA(2A)が、ローカルメモリ(ローカルキャッシュ領域)A(214A)からリモートメモリ(ローカルキャッシュ領域)B(214B)にデータをスワップアウトする。
(2)計算ノードA(2A)が、リモートメモリB(214B)からローカルディスクA(24A)にデータをスワップアウトする。
(3)計算ノードA(2A)が、ローカルディスクA(24A)からリモートディスクB(24B)(又は別の計算ノードのリモートディスク)にデータをスワップアウトする。
(1)計算ノードA(2A)が、ローカルメモリ(ローカルキャッシュ領域)A(214A)からリモートメモリ(ローカルキャッシュ領域)B(214B)にデータをスワップアウトする。
(2)計算ノードA(2A)が、リモートメモリB(214B)からローカルディスクA(24A)にデータをスワップアウトする。
(3)計算ノードA(2A)が、ローカルディスクA(24A)からリモートディスクB(24B)(又は別の計算ノードのリモートディスク)にデータをスワップアウトする。
すなわち、移動元のキャッシュ領域についてS1206(容量判定)と、移動先のキャッシュ領域についてS1208(スワップアウトされるデータの置き換え)とを繰返し行った後、最後に、S1204の処理により、リモートディスクB(24B)からI/Oノード3にデータをスワップアウトする。
さらに、実施例1〜6のI/Oノード3の共有キャッシュ管理プログラム3112によるデータ取得処理(S602)において、記憶デバイス34からリード対象データを削除することができる。そして、共有キャッシュ管理プログラム3112は、I/Oノード3がスワップアウト処理を実行した場合、他の計算ノード2からキャッシュ更新要求(S1204)を受信した場合、または、管理サーバ3からキャッシュ更新要求を受信した場合、記憶デバイス34に、削除したリード対象データを書き込んでよい。これにより、キャッシュ領域だけでなく記憶デバイス34に格納するデータの配置制御も行うことができる。つまり、キャッシュ領域と記憶デバイス34で、データが重複して格納されるのを防止することができる。
図49は、計算機システム1のネットワークトポロジー構成の一例を示すブロック図である。
計算ノード2とI/Oノード3は1つのシャーシ(筐体)に搭載され、PCIなどのインタフェースで、ケーブル接続またはシャーシのバックプレーン接続などで接続されていてもよい。また、図49では計算ノード2台の構成となっているが、それ以上の台数がシャーシに搭載され、I/Oノード3と接続されていてもよい。さらに、1つのシャーシに複数台のI/Oノード3が搭載されていてもよい。
なお、図49における計算ノード2はI/Oノード3との接続インタフェースしか備えていないが、計算ノード間通信用、管理サーバ通信用、他の計算機システム1との通信用のインタフェースを別に備えていてもよい。同様に、I/Oノード3もI/Oノード間通信用、管理サーバ通信用、他の計算機システムとの通信用のインタフェースを別に備えていてもよい。
実施例5又は6では、制御対象となるキャッシュ領域は、ローカルキャッシュ領域214、仮想的な領域2141、2142、及び2413に限定されない。具体的には、キャッシュ領域24001をローカルキャッシュ領域214、仮想的な領域2141、2142、及び2413に論理的に分割せず、通常のキャッシュ領域を制御対象とすることもできる。
以上、幾つかの実施例を説明したが、本発明はこれらの実施例に限定されない。また、実施例1〜6において、参照符号が同一であっても、機能及び構成のうちの少なくとも1つが同一であるとは限らない。例えば、実施例1〜3における計算ノード2と、実施例4〜6のうちの少なくとも1つの実施例における計算ノード2は、説明からわかるように、機能が異なる。また、実施例の説明における「スワップアウト」とは、第1記憶領域内の第1データを第2記憶領域に追い出し、且つ、第1記憶領域内の第1データを第2データに変えることを言う。なお、第1記憶領域(例えばローカルキャッシュ領域)から第2記憶領域(例えば共有キャッシュ領域)にデータを書き込む契機は、スワップアウトに限らない。例えば、第1記憶領域の空き容量率が所定値未満であることが検出された場合に、第1記憶領域から第2記憶領域にデータが移動されることで、第1記憶領域の空き容量率が所定値以上となるよう制御されてもよい。
1…計算機システム、2…計算ノード、3…I/Oノード
Claims (15)
- 複数のノードを有し、
前記複数のノードが、I/O(Input/Output)ノードと、それぞれが前記I/Oノードに接続されI/O要求を前記I/Oノードに送信する複数の計算ノードとを含み、
前記I/Oノードが、I/O要求に従い書き込まれる又は読み出されるデータを記憶する第1記憶デバイスと、前記第1記憶デバイスに書き込まれる又は前記第1記憶デバイスから読み出されるデータを一時的に記憶する第1キャッシュ領域の基になる第1メモリデバイスとを有し、
各計算ノードが、I/O要求に従うデータを一時的に記憶する第2キャッシュ領域の基になる第2メモリデバイスを有し、
前記I/Oノードと前記各計算ノードとのうちのいずれか一方のノードが、前記I/Oノードと前記各計算ノードとのうちの他方のノードのキャッシュ領域における物理的な記憶領域に関する情報とその物理的な記憶領域に対応付けられ自分のキャッシュ領域の一部とした仮想的な記憶領域に関する情報とを含んだ管理情報を記憶し、
前記複数のノードのうちのいずれかのノードである対象ノードが、前記各計算ノードの管理情報、又は、前記I/Oノードの管理情報を基に、第2キャッシュ領域に記憶されるデータの配置を制御する、
計算機システム。 - 前記対象ノードは、前記各計算ノードであり、
前記第1キャッシュ領域は、通常領域と共有領域とを含み、
前記通常領域は、I/O要求に従い前記第1記憶デバイスに書き込まれる又は前記第1記憶デバイスから読み出されるデータを一時的に記憶する記憶領域であり、
前記共有領域は、前記各計算ノードが管理する第1の仮想的な記憶領域である仮想共有領域に対応付けられた記憶領域であり、
前記各計算ノードにおいて、仮想共有領域は、第2キャッシュ領域の一部であり、
前記各計算ノードの管理情報が、自分以外の計算ノードが有する第2キャッシュ領域の記憶領域に対応付けられた第2の仮想的な記憶領域である仮想ローカル領域に関する情報を含み、且つ、どの領域にどのデータが記憶されているかを表す情報を含み、
前記複数の計算ノードは、前記複数の計算ノードのうちのいずれか1つの計算ノードである第1計算ノードと、前記第1計算ノード以外のいずれか1つの計算ノードである第2計算ノードとを含み、
前記第1計算ノードが、前記第1計算ノードの管理情報を基に、読み出し対象の第1データが前記第2計算ノードの第2キャッシュ領域の記憶領域に対応付けられた仮想ローカル領域に存在することを特定し、且つ、前記第1データを前記第2計算ノードの第2キャッシュ領域からデータを取得する場合、前記第1計算ノード又は前記第2計算ノードが、その計算ノードの管理情報を基に、前記I/Oノードに前記第1データを前記共有領域に格納させ、且つ、前記第2計算ノードが、前記第2計算ノードの第2キャッシュ領域内の前記第1データを無効にする、
請求項1記載の計算機システム。 - 前記第1計算ノードが、
前記第1データが前記仮想共有領域に存在することを特定した場合、前記第1計算ノードの管理情報を基に、前記共有領域のアドレスを指定した第1リード要求を前記I/Oノードに送信し、
前記I/Oノードから前記第1データを受信し、その第1データを前記第1計算ノードの第2キャッシュ領域に書き込む、
請求項2記載の計算機システム。 - 前記第1計算ノードが、前記第1リード要求を送信した後、前記仮想共有領域に前記第1データがあるというキャッシュヒットが起こったか否かの判定を行い、
前記判定の結果が真の場合、前記第1計算ノードが前記I/Oノードから受信した第1データは、前記第1リード要求に応答して受信した第1データである、
請求項3記載の計算機システム。 - 前記判定の結果が偽の場合、前記第1計算ノードが、前記第1データのアドレスを指定した第2リード要求を前記I/Oノードに送信し、前記第1計算ノードが前記I/Oノードから受信した第1データは、前記第2リード要求に応答して受信した第1データである、
請求項4記載の計算機システム。 - 前記第1リード要求のレスポンスタイムが所定値を超えた場合、又は、前記第1リード要求に対する応答がキャッシュミスを表す場合、前記判定の結果が偽となる、
請求項4記載の計算機システム。 - 前記第1計算ノード又は前記第2計算ノードが、その計算ノードの管理情報を基に、前記第1データのアドレスと前記共有領域のアドレスとを指定したリード要求を前記I/Oノードに送信することにより、前記I/Oノードが前記第1データを前記第1記憶デバイスから前記共有領域に読み出す、
請求項2記載の計算機システム。 - 前記第1計算ノード又は前記第2計算ノードが、その計算ノードの管理情報を基に、前記第1データを書き込み対象とし前記共有領域のアドレスを指定し前記第1記憶デバイスに関わるアドレスを指定していないライト要求を前記I/Oノードに送信することにより、前記I/Oノードが前記第1データを前記共有領域に書き込む、
請求項2記載の計算機システム。 - 前記第1計算ノード又は前記第2計算ノードが、前記共有領域及び前記第1計算ノードの第2キャッシュ領域のうち前記共有領域に前記第1データがあることを自分以外の計算ノードに通知する、
請求項2記載の計算機システム。 - 前記複数のノードは、前記複数の計算ノード及び前記I/Oノードに接続された管理ノードを含み、
前記対象ノードは、前記管理ノードであり、
前記複数の計算ノードは、第1アプリケーションプログラムを含む複数のアプリケーションプログラムを実行し、
前記複数の計算ノードは、前記第1アプリケーションプログラムを実行している第1計算ノードを含み、
アプリケーションプログラム毎に性能条件が関連付けられており、
前記管理ノードは、前記第1アプリケーションプログラムを前記第1計算ノードから第2計算ノードに移動する、及び、第3計算ノードの第2キャッシュ領域の一部を前記第1計算ノードに融通する、のいずれか一方を行うことにより、第2キャッシュ領域に記憶されるデータの配置を制御し、
前記第2計算ノードは、前記第1計算ノード以外のいずれかの1つの計算ノードであり、
前記第3計算ノードは、前記第1計算ノード以外のいずれか1つの計算ノードであり、前記第2計算ノード、又は、前記第2計算ノードとは別の計算ノードである、
請求項1記載の計算機システム。 - 前記管理ノードは、
前記第1アプリケーションプログラムを前記第2計算ノードに移動できるか否かを判定し、
前記判定の結果が真の場合、前記第2ノードに前記第1アプリケーションプログラムを移動し、
前記判定の結果が偽の場合、前記第3計算ノードの第2キャッシュ領域の一部を前記第3計算ノードに融通する、
請求項10記載の計算機システム。 - 性能が性能閾値を超えることが性能条件を満たすことであり、
前記第1アプリケーションプログラムは、性能閾値が最大要求数以上であり性能閾値と最大要求数との差が最大であるアプリケーションプログラム、又は、性能閾値が最大性能以下であり性能閾値と最大性能との差が最大であるアプリケーションプログラムであり、
各アプリケーションプログラムの最大要求数は、そのアプリケーションプログラムが単位時間当たりに処理した要求の数の最大値であり、
各アプリケーションプログラムの最大性能は、そのアプリケーションプログラムを実行する計算ノードの第2キャッシュ領域の容量を基に算出された値でありそのアプリケーションプログラムにより発揮されることが期待される性能である、
請求項10記載の計算機システム。
- 前記対象ノードは、前記各計算ノードであり、
前記各計算ノードが、第2記憶デバイスを有し、前記第2記憶デバイスの一部を前記第2キャッシュ領域の一部として使用し、且つ、第2キャッシュ領域における複数の記憶領域を前記複数の記憶領域にそれぞれ対応する複数の優先度に基づいて使用し、
前記各計算ノードにとって、第2キャッシュ領域のうち、自分が有する第2メモリデバイスに基づく領域が最も優先度が高く、他の計算ノードが有する第2メモリデバイスに基づく領域が2番目に優先度が高く、自分が有する第2記憶デバイスに基づく領域が3番目に優先度が高く、他の計算ノードが有する第2記憶デバイスに基づく領域が4番目に優先度が高い、
請求項1記載の計算機システム。 - 前記複数の計算ノードは、前記複数の計算ノードのうちのいずれか1つの計算ノードである第1計算ノードを含み、
前記第1計算ノードは、
前記第1計算ノードの第2キャッシュ領域から第2計算ノードの第2キャッシュ領域にデータを移動し、
前記第2計算ノードの第2キャッシュ領域から、前記第1計算ノードの第2キャッシュ領域の一部であり前記第1計算ノードの第2記憶デバイスに基づく領域に、データを移動し、
前記第1計算ノードの第2キャッシュ領域の一部であり前記第1計算ノードの第2記憶デバイスに基づく領域から、第3計算ノードの第2キャッシュ領域の一部であり前記第3計算ノードの第2記憶デバイスに基づく領域にデータを移動し、
前記第2計算ノードは、前記第1計算ノード以外のいずれかの1つの計算ノードであり、
前記第3計算ノードは、前記第1計算ノード以外のいずれか1つの計算ノードであり、前記第2計算ノード、又は、前記第2計算ノードとは別の計算ノードである、
請求項13記載の計算機システム。 - 複数のノードを含んだ計算機システムで行われるキャッシュ制御方法であって、
前記複数のノードが、I/O(Input/Output)ノードと、それぞれが前記I/Oノードに接続されI/O要求を前記I/Oノードに送信する複数の計算ノードとを含んでおり、
前記I/Oノードが、I/O要求に従い書き込まれる又は読み出されるデータを記憶する第1記憶デバイスと、前記第1記憶デバイスに書き込まれる又は前記第1記憶デバイスから読み出されるデータを一時的に記憶する第1キャッシュ領域の基になる第1メモリデバイスとを有しており、
各計算ノードが、I/O要求に従うデータを一時的に記憶する第2キャッシュ領域の基になる第2メモリデバイスを有しており、
前記キャッシュ制御方法が、
前記I/Oノードと前記各計算ノードとのうちのいずれか一方のノードが、前記I/Oノードと前記各計算ノードとのうちの他方のノードのキャッシュ領域における物理的な記憶領域に関する情報とその物理的な記憶領域に対応付けられ自分のキャッシュ領域の一部とした仮想的な記憶領域に関する情報とを含んだ管理情報を記憶し、
前記複数のノードのうちのいずれかのノードである対象ノードが、前記前記各計算ノードの管理情報、又は、前記I/Oノードの管理情報を基に、第2キャッシュ領域に記憶されるデータの配置を制御する、
キャッシュ制御方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2012/004360 WO2014006656A1 (en) | 2012-07-05 | 2012-07-05 | Computer system, cache control method and computer program |
JPPCT/JP2012/004360 | 2012-07-05 | ||
PCT/JP2013/068135 WO2014007249A1 (ja) | 2012-07-05 | 2013-07-02 | I/oノード及び複数の計算ノードに備えられたキャッシュメモリの制御方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2014007249A1 JPWO2014007249A1 (ja) | 2016-06-02 |
JP5931196B2 true JP5931196B2 (ja) | 2016-06-08 |
Family
ID=49879349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014523751A Expired - Fee Related JP5931196B2 (ja) | 2012-07-05 | 2013-07-02 | I/oノード及び複数の計算ノードに備えられたキャッシュメモリの制御方法 |
Country Status (3)
Country | Link |
---|---|
US (2) | US9047195B2 (ja) |
JP (1) | JP5931196B2 (ja) |
WO (2) | WO2014006656A1 (ja) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8831986B2 (en) * | 2010-06-30 | 2014-09-09 | Ebay Inc. | Fees and foreign currency exchange calculation |
US10015063B1 (en) * | 2012-12-31 | 2018-07-03 | EMC IP Holding Company LLC | Methods and apparatus for monitoring and auditing nodes using metadata gathered by an in-memory process |
US9621668B2 (en) * | 2013-04-06 | 2017-04-11 | Citrix Systems, Inc. | Systems and methods for application-state, distributed replication table cache poisoning |
WO2015156758A1 (en) * | 2014-04-07 | 2015-10-15 | Hitachi, Ltd. | Method and apparatus of cache promotion between server and storage system |
CN104503707B (zh) | 2014-12-24 | 2018-03-06 | 华为技术有限公司 | 读取数据的方法以及装置 |
JP6434131B2 (ja) * | 2015-04-15 | 2018-12-05 | 株式会社日立製作所 | 分散処理システム、タスク処理方法、記憶媒体 |
WO2018094708A1 (zh) * | 2016-11-26 | 2018-05-31 | 华为技术有限公司 | 数据迁移的方法、主机、及固态存储设备 |
CN108334505B (zh) * | 2017-01-19 | 2022-01-07 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置、服务器及库存系统 |
US10452545B1 (en) | 2017-10-06 | 2019-10-22 | Veritas Technologies Llc | Systems and methods for maintaining cache coherency |
JP2019159562A (ja) * | 2018-03-09 | 2019-09-19 | 富士通株式会社 | 情報処理装置、情報処理システム、及びプログラム |
EP3557419A1 (en) * | 2018-04-20 | 2019-10-23 | Total SA | Supercomputer system, method of data transmission in such supercomputer system and associated computer program product |
EP3767464B1 (en) * | 2019-07-19 | 2024-04-17 | Ricoh Company, Ltd. | Information processing system, information processing apparatus, information processing method, and program |
CN114600090A (zh) * | 2019-10-04 | 2022-06-07 | 维萨国际服务协会 | 用于多租户高速缓存系统中的多层级数据存储的技术 |
CN111061546A (zh) * | 2019-10-24 | 2020-04-24 | 深圳市元征科技股份有限公司 | 一种功放管理方法、装置、终端设备及存储介质 |
CN112839071B (zh) * | 2019-11-25 | 2024-01-05 | 商汤集团有限公司 | 训练系统、训练数据访问方法及装置、电子设备、介质 |
JP2021114264A (ja) | 2020-01-21 | 2021-08-05 | 富士通株式会社 | ストレージ制御装置およびストレージ制御プログラム |
CN114079969B (zh) * | 2021-08-16 | 2023-11-28 | 珠海市杰理科技股份有限公司 | 数据传输方法及装置、可读存储介质、节点设备 |
CN115905055A (zh) * | 2022-10-21 | 2023-04-04 | 超聚变数字技术有限公司 | 一种计算设备及数据获取方法 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05216760A (ja) | 1992-02-04 | 1993-08-27 | Hitachi Ltd | 計算機システム |
JPH06266683A (ja) | 1993-03-12 | 1994-09-22 | Toshiba Corp | 並列処理装置 |
JP2000353125A (ja) * | 1999-06-09 | 2000-12-19 | Nec Software Shikoku Ltd | ストレージシステム、情報処理装置 |
JP3710351B2 (ja) * | 2000-03-17 | 2005-10-26 | 三菱電機株式会社 | データ処理装置 |
JP2001265652A (ja) | 2000-03-17 | 2001-09-28 | Hitachi Ltd | キャッシュディレクトリ構成方法および情報処理装置 |
JP2002099465A (ja) | 2000-09-25 | 2002-04-05 | Hitachi Ltd | キャッシュ制御方法 |
JP2003150445A (ja) | 2001-11-13 | 2003-05-23 | Fujitsu Ltd | 外部記憶装置を有するコンピュータシステム |
US7437511B1 (en) * | 2003-06-30 | 2008-10-14 | Storage Technology Corporation | Secondary level cache for storage area networks |
JP4813843B2 (ja) * | 2005-08-04 | 2011-11-09 | 株式会社日立製作所 | ストレージ装置、ディスクキャッシュ制御方法及びディスクキャッシュの容量割当方法 |
WO2009027138A1 (en) * | 2007-08-30 | 2009-03-05 | International Business Machines Corporation | Accessing data entities |
US8468521B2 (en) * | 2007-10-26 | 2013-06-18 | Netapp, Inc. | System and method for utilizing a virtualized compute cluster as an execution engine for a virtual machine of a storage system cluster |
US20090150511A1 (en) * | 2007-11-08 | 2009-06-11 | Rna Networks, Inc. | Network with distributed shared memory |
US8799396B2 (en) * | 2008-02-04 | 2014-08-05 | Cisco Technology, Inc. | Method and system for an efficient distributed cache with a shared cache repository |
US8392361B2 (en) * | 2008-08-11 | 2013-03-05 | Vmware, Inc. | Centralized management of virtual machines |
EP2411918B1 (en) * | 2009-03-23 | 2018-07-11 | Riverbed Technology, Inc. | Virtualized data storage system architecture |
US8301840B2 (en) * | 2009-12-15 | 2012-10-30 | International Business Machines Corporation | Assigning cache priorities to virtual/logical processors and partitioning a cache according to such priorities |
US9195603B2 (en) * | 2010-06-08 | 2015-11-24 | Hewlett-Packard Development Company, L.P. | Storage caching |
-
2012
- 2012-07-05 US US13/522,669 patent/US9047195B2/en not_active Expired - Fee Related
- 2012-07-05 WO PCT/JP2012/004360 patent/WO2014006656A1/en active Application Filing
-
2013
- 2013-07-02 JP JP2014523751A patent/JP5931196B2/ja not_active Expired - Fee Related
- 2013-07-02 US US14/412,335 patent/US9811465B2/en active Active
- 2013-07-02 WO PCT/JP2013/068135 patent/WO2014007249A1/ja active Application Filing
Also Published As
Publication number | Publication date |
---|---|
JPWO2014007249A1 (ja) | 2016-06-02 |
WO2014007249A1 (ja) | 2014-01-09 |
US9811465B2 (en) | 2017-11-07 |
US9047195B2 (en) | 2015-06-02 |
US20140012936A1 (en) | 2014-01-09 |
US20150161051A1 (en) | 2015-06-11 |
WO2014006656A1 (en) | 2014-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5931196B2 (ja) | I/oノード及び複数の計算ノードに備えられたキャッシュメモリの制御方法 | |
US9946460B2 (en) | Storage subsystem and storage system architecture performing storage virtualization and method thereof | |
JP4932390B2 (ja) | 仮想化システム及び領域割当て制御方法 | |
JP5595530B2 (ja) | データ移行システム及びデータ移行方法 | |
WO2016147281A1 (ja) | 分散型ストレージシステム及び分散型ストレージシステムの制御方法 | |
EP3502877A1 (en) | Data loading method and device | |
JP4748950B2 (ja) | 記憶領域管理方法及びシステム | |
JP5391277B2 (ja) | ストレージシステム及びストレージシステムの処理効率向上方法 | |
JPWO2017022002A1 (ja) | ストレージ装置、ストレージシステム、ストレージシステムの制御方法 | |
JP2015517697A (ja) | 二次記憶装置に基づく記憶領域をキャッシュ領域として用いるストレージシステム及び記憶制御方法 | |
JP5183403B2 (ja) | ストレージシステムおよび制御プログラムならびにストレージシステム制御方法 | |
JP4893716B2 (ja) | バックアップ装置、バックアップ方法およびバックアッププログラム | |
JP6203592B2 (ja) | 計算機システム、キャッシュ管理方法及び計算機 | |
CN107832097B (zh) | 数据加载方法及装置 | |
JP7011156B2 (ja) | ストレージ制御装置およびプログラム | |
US11288238B2 (en) | Methods and systems for logging data transactions and managing hash tables | |
KR20120063946A (ko) | 대용량 통합 메모리를 위한 메모리 장치 및 이의 메타데이터 관리 방법 | |
KR100472207B1 (ko) | 다중 레이드 제어기를 통한 데이터 분산 공유 레이드 제어시스템 | |
JP2022061706A (ja) | 計算機システム及び負荷分散方法 | |
JP5250143B2 (ja) | ストレージシステムおよびストレージシステム制御方法 | |
JP7629883B2 (ja) | 記憶制御装置及び方法 | |
JP2024098944A (ja) | ストレージシステム及び記憶制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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: 20160405 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160426 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5931196 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |