JP2015026263A - 計算機システム、キャッシュ管理方法、及び計算機 - Google Patents

計算機システム、キャッシュ管理方法、及び計算機 Download PDF

Info

Publication number
JP2015026263A
JP2015026263A JP2013155547A JP2013155547A JP2015026263A JP 2015026263 A JP2015026263 A JP 2015026263A JP 2013155547 A JP2013155547 A JP 2013155547A JP 2013155547 A JP2013155547 A JP 2013155547A JP 2015026263 A JP2015026263 A JP 2015026263A
Authority
JP
Japan
Prior art keywords
cache
state
area
driver
queue
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
JP2013155547A
Other languages
English (en)
Other versions
JP6101170B2 (ja
Inventor
健 杉本
Takeshi Sugimoto
健 杉本
裕祐 福村
Yusuke Fukumura
裕祐 福村
近藤 伸和
Nobukazu Kondo
伸和 近藤
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2013155547A priority Critical patent/JP6101170B2/ja
Priority to US14/338,366 priority patent/US9336153B2/en
Publication of JP2015026263A publication Critical patent/JP2015026263A/ja
Application granted granted Critical
Publication of JP6101170B2 publication Critical patent/JP6101170B2/ja
Expired - Fee Related 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/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/22Employing cache memory using specific memory technology
    • G06F2212/222Non-volatile memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】二つ以上のキューを有するデバイスドライバを扱う場合、同一アドレスに対するI/O要求が登録されることによって、データ化けが発生する可能性がある。【解決手段】アプリケーションが稼働するサーバは、キャッシュ領域を提供するキャッシュメモリシステムを有し、キャッシュドライバは、ストレージシステムの記憶領域へのデータの書き込みを命令する書込要求の登録指示を受け付け、キャッシュ領域がデータの読み出しが可能であり、かつ、データの書き込みが禁止される第1のキャッシュ状態である場合、キャッシュ領域を第1のキャッシュ状態から、データの読み出しが禁止され、かつ、データの書き込みが禁止される第3のキャッシュ状態に変更する。【選択図】図1

Description

本発明は、サーバ及びストレージシステムが有するキャッシュ領域を用いたI/O処理におけるキャッシュ制御に関する。
近年、サーバや共有ストレージへのフラッシュメモリ等の不揮発性メモリの適用が進んでいる。これに対し、ストレージネットワーキングの発展を目的とした業界団であるSNIA(Storage Networking Industory Assosiation)は、NVMe(Non―Volatile Memory Express)という、PCI−SIGが策定したPCIExpress(以下、PCIe)I/Fを活用した不揮発性メモリ向けのI/Oスタックを提案している。
NVMeは、不揮発性メモリの高速性を活用するために、既存のI/Oスタックと比べてI/O処理に対するCPU負荷を削減したI/Oスタックである。そのため、NVMeを活用する事によって、CPU負荷がボトルネックのアプリケーションの高速化が実現できる。今後、アプリケーション、サーバに搭載された不揮発性メモリ、ストレージシステムのそれぞれがNVMeに対応し、NVMeの活用が進むと考えられる。
一方、近年、サーバに不揮発性メモリを搭載し、共有ストレージシステムのキャッシュとして活用する利用形態が広まっている(例えば、特許文献1参照)。
特許文献1には、HDDのキャッシュとしてフラッシュを用いた構成が開示されている。本構成においては、アプリケーションとサーバ不揮発性メモリ間、アプリケーションとストレージ間いずれも既存のI/Oスタックが用いられている。
以上を鑑みると、NVMe対応のアプリケーション及びNVMe対応のストレージシステムを有するシステムに対し、NVMe対応の不揮発性メモリをキャッシュとして扱うシステムが今後必要となると考えられる。すなわち、アプリケーションと不揮発性メモリとの間及びアプリケーションとストレージとの間のI/Oスタックが共にNVMeに対応したシステムが今後登場すると考えられる。
特開2012−78939号公報
NVMeでは、I/Oの処理は、キューへI/O要求の登録、及びキューに登録されたI/O要求の実行の二つの処理に分けて行われる。前述した二つの処理は、アプリケーションからの指示に基づいて実行される。
例えば、アプリケーションがキューへのRead要求の登録を指示すると、NVMeによって、キューにRead要求が登録される。この段階では、デバイスへRead処理は実行されない。その後、アプリケーションからキューに登録されたRead要求の実行指示を受け付けると、NVMeによって、デバイスへRead処理が実行される。
NVMe対応のデバイスは、複数のキューを持ち、複数のキューを用いて、複数のI/O処理を並列実行することができる。
ここで、NVMe対応の不揮発性メモリをキャッシュとして用いるシステムにおいて、複数のキューの間で同一アドレスへのI/O要求が登録された場合、I/O要求の実行順序によっては、データ化けが発生するという課題が存在する。以下、具体的な例を用いてデータ化けの発生について説明する。
この例では、一つのアプリケーションが、第1のキュー及び第2のキューを用いてI/O処理を実行しているものとする。また、不揮発性メモリのアドレス「0x1000」に対応するキャッシュ領域にI/O要求の対象のデータが存在するものとする。
まず、アプリケーションが、第1のキューにRead要求を登録する。この段階では、Read要求は実行されていない。Read要求が実行されると、不揮発性メモリのアドレス「0x1000」に対応するキャッシュ領域からデータが読み出されることとなる。
次に、アプリケーションが、第2のキューにWrite要求を登録する。この時、サーバ不揮発性メモリのアドレス「0x1000」に、書き込むデータをキャッシュとして登録することになったとする。
ここで、アプリケーションが、第2のキューに登録されたWrite要求の実行を指示し、その後、第1のキューに登録されたRead要求の実行を指示するものとする。
この結果、アドレス「0x1000」に対応するキャッシュ領域には新しいデータが格納され、当該新しいデータが読み出されることとなる。そのため、本来、更新前のデータが読み出される必要があるが、更新後のデータが読み出されてしまう。すなわち、データ化けが発生する結果となる。
前述したようなデータ化けが発生する理由は、同一アドレス(同一のキャッシュ領域)に対するRead要求及びWrite要求の実行順序が入れ替わることによって発生する。
本発明は、NVMeに対応した不揮発性メモリをキャッシュとして利用するシステムにおいて、I/O要求の実行順の入れ替わりによるデータ化けの発生を解決するシステム、方法及び装置を提供することを目的とする。
本発明の代表的な一例を示せば以下の通りである。すなわち、アプリケーションが稼働するサーバ、及び、前記アプリケーションが使用するデータを格納するストレージシステムを備える計算機システムであって、前記サーバは、第1のプロセッサ、前記第1のプロセッサに接続される第1のメモリ、前記第1のプロセッサに接続され、一時的にデータを格納するキャッシュ領域を提供するキャッシュメモリシステム、前記第1のプロセッサに接続され、前記キャッシュメモリシステムと接続するための接続インタフェース、及び前記第1のプロセッサに接続され、他の装置と接続するための第1のネットワークインタフェースを有し、前記ストレージシステムは、第2のプロセッサ、前記第2のプロセッサに接続される第2のメモリ、及び前記第2のプロセッサに接続され、他の装置と接続するための第2のネットワークインタフェースを含むコントローラ、並びに前記コントローラと接続される複数の記憶装置を有し、前記第1のメモリは、前記サーバを制御するオペレーティングシステムを実現するプログラムを格納し、前記第2のメモリは、前記ストレージシステムを制御するストレージ制御部を実現するプログラムを格納し、前記オペレーティングシステムは、キャッシュデータを制御するキャッシュドライバ、前記キャッシュメモリシステムに対するI/O処理を制御するキャッシュメモリシステムドライバ、及び前記ストレージシステムに対するI/O処理を制御するストレージシステムドライバを含み、前記キャッシュメモリシステムドライバは、前記キャッシュメモリシステムに対するI/O要求を登録する第1のキューを二つ以上有し、前記ストレージシステムドライバは、前記ストレージシステムに対するI/O要求を登録する第2のキューを一つ以上有し、前記キャッシュ領域は、前記キャッシュ領域からのデータの読み出しが可能であり、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第1のキャッシュ状態、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが許可される第2のキャッシュ状態、又は、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第3のキャッシュ状態のいずれかの状態に切替可能であり、前記キャッシュドライバは、前記アプリケーションから、前記ストレージシステムの第1の記憶領域へのデータの書き込みを命令する第1の書込要求の登録指示を受け付けた場合、前記第1の記憶領域に格納されるデータのキャッシュデータを格納する第1のキャッシュ領域が前記第1のキャッシュ状態であるか否かを判定し、前記第1のキャッシュ領域が前記第1のキャッシュ状態であると判定された場合、前記第1のキャッシュ領域を前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更することを特徴とする。
本発明によれば、NVMe対応のアプリケーション及びNVMe対応のストレージシステムを備える計算機システムにおいて、キャッシュドライバは、キャッシュデータが格納されるキャッシュ領域への書込要求を受け付けた場合、当該キャッシュ領域のキャッシュ状態を変更することによって、キャッシュ領域に対する書き込みを禁止することができる。これによって、I/O要求の実行順番の入れ替われによって発生するデータ化けの問題を解消することができる。
上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
本発明の実施例1における計算機システムのソフトウェア構成の一例を示すブロック図である。 本発明の実施例1における計算機システムのハードウェア構成の一例を示す説明図である。 本発明の実施例1におけるキャッシュ管理テーブルの一例を示す説明図である。 本発明の実施例1におけるキャッシュキュー状態テーブルの一例を示す説明図である。 本発明の実施例1のおけるキュー変換テーブルの一例を示す説明図である。 本発明の実施例1におけるキャッシュ解放情報の一例を示す説明図である。 本発明の実施例1における実行キューの構成例を示す説明図である。 本発明の実施例1のおける完了キューの構成例を示す説明図である。 本発明の実施例におけるI/O処理の概要を説明するフローチャートである。 本発明の実施例1におけるI/O要求の登録処理の一例を説明するフローチャートである。 本発明の実施例1におけるI/O要求の登録処理の一例を説明するフローチャートである。 本発明の実施例1におけるキャッシュ登録処理を説明するフローチャートである。 本発明の実施例における実行キューに登録されたI/O要求に対応するI/O処理を説明するフローチャートである。 本発明の実施例1におけるキャッシュ解放処理の一例を説明するフローチャートである。 本発明の実施例1におけるキャッシュ管理テーブル及びキャッシュ解放情報の初期化処理を説明するフローチャートである。 本発明の実施例1におけるアプリケーションがキューを生成する場合の流れを説明するフローチャートを示す。 本発明の実施例1の変形例におけるキャッシュ解放処理の一例を説明するフローチャートである。
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
図1は、本発明の実施例1における計算機システムのソフトウェア構成の一例を示すブロック図である。図2は、本発明の実施例1における計算機システムのハードウェア構成の一例を示す説明図である。
本発明の計算機システムは、サーバ装置10及び共有ストレージシステム300から構成される。サーバ装置10及び共有ストレージシステム300は、ネットワーク400を介して接続される。ネットワーク400は、WAN、LAN及びSAN等が考えられる。本発明は、ネットワークの種類に限定されない。なお、サーバ装置10及び共有ストレージシステム300は、直接接続されていてもよい。
サーバ装置10は、複数のサーバモジュール100、及びキャッシュメモリシステム200を備える。
サーバモジュール100は、所定のアプリケーション110を実行する計算機であり、プロセッサ101、メモリ102、ネットワークインタフェース103、及び接続インタフェース104を備え、各構成は内部経路を介して互いに接続される。なお、サーバモジュール100は、図示しない、記憶媒体、入出力装置等の他の構成を備えてもよい。
プロセッサ101は、メモリ102に格納されるプログラムを実行する。プロセッサ101が、メモリ102に格納されるプログラムを実行することによって、サーバモジュール100が有する機能が実現される。
メモリ102は、プロセッサ101によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。また、メモリ102は、プログラムが使用するワークエリアを含む。メモリ102に格納されるプログラム及び情報については、後述する。
ネットワークインタフェース103は、ネットワーク400を介して他の装置と接続するためのインタフェースである。
接続インタフェース104は、キャッシュメモリシステム200に接続するためのインタフェースである。本実施例では、サーバモジュール100及びキャッシュメモリシステム200は、PCIeバスとの通信経路を介して接続されているものとする。この場合、PCIeインタフェースが接続インタフェース104として用いられる。
キャッシュメモリシステム200は、サーバモジュール100が使用する記憶領域を提供する。キャッシュメモリシステム200は、フラッシュメモリ等の不揮発性メモリ(不揮発性の記憶素子)から構成される。なお、キャッシュメモリシステム200は、不揮発性メモリに対する制御を行うためのコントローラ(図示省略)を備える。
本実施例では、キャッシュメモリシステム200が提供する記憶領域には、LU(Logical Unit)の論理ブロック単位のキャッシュデータが格納される。なお、ブロック単位のデータの管理方法としては、バッファキャッシュを用いることが考えられる。バッファキャッシュは、キャッシュメモリシステム200の記憶領域にバッファページを割り当て、所定のブロックサイズのブロックバッファに当該バッファページを分割することによって生成される。
バッファキャッシュには、共有ストレージシステム300における論理ブロック単位のデータの格納場所を特定するためのバッファヘッドが含まれる。なお、LUは、後述するように共有ストレージシステム300によって提供される。
以下の説明では、論理ブロック単位のデータをブロックデータ、論理ブロック単位の記憶領域をキャッシュ領域とも記載する。
また、本実施例では、複数のサーバモジュール100が、キャッシュメモリシステム200を共有して使用するものとする。なお、本発明はこれに限定されず、一つのサーバモジュール100に一つのキャッシュメモリシステム200を接続する構成でもよい。また、サーバモジュール100内部にキャッシュメモリシステム200が存在してもよい。さらに、サーバ装置10の外部にキャッシュメモリシステム200が存在してもよい。
また、本実施例では、不揮発性メモリから構成されるキャッシュメモリシステム200を用いているが、揮発性メモリから構成されるキャッシュメモリシステムを用いてもよい。
共有ストレージシステム300は、各サーバモジュール100上で実行されるアプリケーション110が使用するデータ等を格納する記憶領域を提供する。共有ストレージシステム300は、コントローラ301及び複数の記憶媒体306を備える。
コントローラ301は、共有ストレージシステム300を制御する。コントローラ301は、プロセッサ302、メモリ303、ネットワークインタフェース304、及びストレージインタフェース305を備え、各構成は内部経路を介して互いに接続される。
プロセッサ302は、メモリ303に格納されるプログラムを実行する。プロセッサ302が、メモリ303に格納されるプログラムを実行することによって、共有ストレージシステム300が有する機能が実現される。
メモリ303は、プロセッサ302によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。また、メモリ303は、プログラムが使用するワークエリアを含む。メモリ303に格納されるプログラム及び情報については、後述する。
ネットワークインタフェース304は、ネットワーク400を介して他の装置と接続するためのインタフェースである。
ストレージインタフェース305は、記憶媒体306に接続するためのインタフェースである。記憶媒体306は、データを格納する装置である。記憶媒体306は、例えばHDD又はSSDが考えられる。ただし、データを格納できる装置であればどのような装置であってもよい。
次に、サーバモジュール100、キャッシュメモリシステム200、及び共有ストレージシステム300のソフトウェア構成について説明する。
サーバモジュール100のメモリ102は、複数のアプリケーション110、キューイングインタフェース120、及びOS130を実現するプログラムを格納する。当該プログラムは、プロセッサ101によって実行される。
アプリケーション110は、所定の業務を実行する。なお、本発明は、アプリケーション110の種類に依存しない。
キューイングインタフェース120は、アプリケーション110と、キャッシュメモリシステム200及び共有ストレージシステム300との間のI/Oを制御する。具体的には、キューにI/O要求を登録し、また、キューに登録されたI/O要求の実行を制御する。本実施例では、キューイングインタフェース120として、NVMeに準拠したインタフェースを用いるものとする。
なお、キューイングインタフェース120は、アプリケーション110又はOS130内部に含まれもよい。また、キューイングインタフェース120は、NVMeに準拠したインタフェースに限定されない。
OS130は、サーバモジュール100全体を制御する。OS130は、キャッシュドライバ140、キャッシュメモリシステムドライバ150、及び共有ストレージシステムドライバ160を含む。
OS130は、共有ストレージシステム300によって提供されるLUを所定のファイルシステムにフォーマットする。このとき、OS130は、LUを所定の論理ブロックに分割し、各論理ブロックに識別番号を割り当てる。ファイルシステムは、一つ以上のブロックデータから構成されるデータをファイルとして管理する。
なお、OS130に含まれるファイルシステム等は、公知のものであるため説明を省略する。
キャッシュドライバ140は、キャッシュ領域におけるキャッシュデータを制御するドライバである。例えば、アプリケーション110からRead要求を受け付けた場合、以下のようなキャッシュ制御処理を実行する。
まず、キャッシュドライバ140は、Read対象のデータがキャッシュメモリシステム200のキャッシュ領域に格納されているか否かを判定する。キャッシュ領域にRead対象のデータが格納されている場合、キャッシュドライバ140は、キャッシュ領域から当該データを読み出して、読み出されたデータをアプリケーション110に応答する。キャッシュ領域にRead対象のデータが格納されていない場合、キャッシュドライバ140は、共有ストレージシステム300へのRead要求を登録し、当該Read要求に基づいて、共有ストレージシステム300から読み出されたデータをアプリケーション110に応答する。
本実施例のキャッシュドライバ140は、キャッシュ管理テーブル141、複数のキャッシュキュー状態テーブル142、キュー変換テーブル143、及び複数のキャッシュ解放情報144を有する。
キャッシュ管理テーブル141は、キャッシュメモリシステム200のキャッシュ領域を管理するための情報を格納する。キャッシュ管理テーブル141の詳細については、図3を用いて後述する。
キャッシュキュー状態テーブル142は、キャッシュメモリシステムドライバ150が保持するキューの状態を管理するための情報を格納する。キャッシュキュー状態テーブル142の詳細については、図4を用いて後述する。
なお、キャッシュキュー状態テーブル142の数は、OS130がキャッシュメモリシステム200にアクセス時に用いるデバイスの数と一致するものとする。デバイスは、OS130が認識可能なデバイスであり、物理的なデバイス、又は仮想的なデバイスのいずれであってもよい。本発明は、キャッシュキュー状態テーブル142の数に限定されない。
キュー変換テーブル143は、アプリケーションキューと、キャッシュメモリシステムドライバ150のキュー及び共有ストレージシステムドライバ160のキューとの対応関係を示す情報を格納する。キュー変換テーブル143の詳細については、図5を用いて後述する。
ここで、アプリケーションキューは、キューイングインタフェース120によってアプリケーション110に提供される。本実施例では、キューイングインタフェース120が、一つのアプリケーション110に対して一つ以上のアプリケーションキューを提供するものとする。
キャッシュ解放情報144は、キャッシュ領域の解放時に用いられる情報を格納する。キャッシュ解放情報144の詳細については、図6を用いて後述する。
なお、キャッシュ解放情報144の数は、予め設定された数であるものとする。例えば、キャッシュキューの数に対応させてキャッシュ解放情報144の数を設定する方法が考えられる。本発明は、キャッシュ解放情報144の数に限定されない。
キャッシュメモリシステムドライバ150は、キャッシュメモリシステム200へのアクセスを制御する。キャッシュメモリシステムドライバ150は、実行キュー151及び完了キュー152のペアを複数有する。以下の説明では、実行キュー151及び完了キュー152のペアをキャッシュキューとも記載する。
実行キュー151は、I/O要求を登録するためのキューである。完了キュー152は、I/O要求に対する応答を登録するためのキューである。本実施例では、一つのアプリケーション110に対して、実行キュー151及び完了キュー152のペア(キャッシュキュー)が一つ以上割り当てられるものとする。これによって、効率的なキャッシュ制御を実現することができる。
図1に示す例では、アプリケーション110−1には、実行キュー151−1及び完了キュー152−1のペアが割り当てられ、アプリケーション110−nには、実行キュー151−n及び完了キュー152−nのペアが割り当てられる。
共有ストレージシステムドライバ160は、共有ストレージシステム300へのアクセスを制御する。共有ストレージシステムドライバ160は、実行キュー161及び完了キューのペアを一つ以上有する。以下の説明では、実行キュー161及び完了キュー162のペアをストレージキューとも記載する。
キャッシュメモリシステム200のコントローラは、複数のキャッシュキューの各々に対応した複数の実行レジスタ210を有する。実行レジスタ210の数は、キャッシュキューの数(ペアの数)と同一である。図1に示す例では、実行キュー151−1及び完了キュー152−1のペアには、実行レジスタ210−1が対応し、実行キュー151−n及び完了キュー152−nのペアには、実行レジスタ210−nが対応する。
共有ストレージシステム300のメモリ303は、ストレージ制御部310を実現するプログラムを格納する。
ストレージ制御部310は、共有ストレージシステム300を制御する。本実施例では、複数の記憶媒体306を用いてRAIDが構成される。ストレージ制御部310は、RAIDボリュームを論理的に分割することによって、複数のLU(Logical Unit)を生成し、生成された複数のLUをサーバモジュール100に提供する。また、ストレージ制御部310は、LUと記憶媒体306との対応関係を示す管理情報を有する。
また、共有ストレージシステム300のコントローラ301は、共有ストレージシステムドライバ160が有する実行キュー161及び完了キュー162のペアに対応する実行レジスタ320を有する。
ストレージ制御部310は、実行レジスタ320を介してサーバモジュール100からLUへのI/O要求を受信した場合、管理情報に基づいてLUを構成する記憶領域(論理ブロック)を提供する記憶媒体306にアクセスする。
なお、ストレージ制御部310は、LUの管理機能、データ転送機能、及びキャッシュ制御機能等の各種機能を有するが、公知の技術であるため詳細な説明を省略する。
図3は、本発明の実施例1におけるキャッシュ管理テーブル141の一例を示す説明図である。
キャッシュ管理テーブル141は、キャッシュメモリアドレス1411、共有ストレージシステムアドレス1412、データ有効ビット1413、及び書込有効ビット1414を含む。
キャッシュメモリアドレス1411は、キャッシュメモリシステム200のキャッシュ領域の先頭アドレスである。共有ストレージシステムアドレス1412は、キャッシュ領域に格納されたデータの共有ストレージシステム300における格納位置、すなわち、記憶領域の先頭アドレスである。
図3に示す例では、一つ目のエントリは、共有ストレージシステム300のアドレス「0x2000」に対応する記憶領域に格納されるデータが、キャッシュメモリシステム200のアドレス「0x1000」のキャッシュ領域に格納されていることを表す。
データ有効ビット1413は、キャッシュメモリアドレス1411に対応するキャッシュ領域からデータを読み出せるか否か示すビットである。すなわち、データ有効ビット1413は、キャッシュ領域に読み出し可能なデータが格納されているか否かを示すビットである。
データ有効ビット1413が「0」の場合、キャッシュメモリアドレス1411に対応するキャッシュ領域からデータが読み出せないことを示す。本実施例では、キャッシュ領域にデータが格納されていない場合、又は、キャッシュメモリアドレス1411に対応するキャッシュ領域にデータが格納されているが、読み出しができない場合に、データ有効ビット1413が「0」に設定される。
一方、データ有効ビット1413が「1」の場合、キャッシュメモリアドレス1411に対応するキャッシュ領域からデータを読み出せることを示す。すなわち、共有ストレージシステムアドレス1412に対応する記憶領域に格納されるデータが、キャッシュメモリアドレス1411に対応するキャッシュ領域に格納されていることを示す。
書込有効ビット1414は、キャッシュメモリアドレス1411に対応するキャッシュ領域にデータの書き込みが可能か否かを示すビットである。
書込有効ビット1414が「0」の場合、キャッシュメモリアドレス1411に対応するキャッシュ領域への書き込みができないことを示す。一方、書込有効ビット1414が「1」の場合、キャッシュメモリアドレス1411に対応するキャッシュ領域への書込が可能であることを示す。
本実施例では、キャッシュ領域は、三つの状態に切り替えることができる。
一つ目の状態は、キャッシュ領域へのRead要求が許可され、かつ、キャッシュ領域へのWrite要求が禁止される第1のキャッシュ状態である。第1のキャッシュ状態では、データ有効ビット1413が「1」、かつ、書込有効ビット1414が「0」となる。
二つ目の状態は、キャッシュ領域へのRead要求が禁止され、かつ、キャッシュ領域へのWrite要求が許可される第2のキャッシュ状態である。第2のキャッシュ状態では、データ有効ビット1413が「0」、かつ、書込有効ビット1414が「1」となる。
三つ目の状態は、キャッシュ領域へのRead要求が禁止され、かつ、キャッシュ領域へのWrite要求が禁止される第3のキャッシュ状態である。第3のキャッシュ状態では、データ有効ビット1413が「0」、かつ、書込有効ビット1414が「0」となる。
後述するように、キャッシュドライバ140は、データ化けを回避するために、データ有効ビット1413及び書込有効ビット1414の両方が「1」とならないように制御する。
図4は、本発明の実施例1におけるキャッシュキュー状態テーブル142の一例を示す説明図である。
キャッシュキュー状態テーブル142は、キャッシュキュー番号1421及びキュー実行待ちビット1422を含む。本実施例では、キャッシュキュー状態テーブル142は、実行キュー151及び完了キュー152のペア、すなわち、キャッシュキュー毎に一つのエントリを持つ。
キャッシュキュー番号1421は、実行キュー151及び完了キュー152のペア、すなわち、キャッシュキューに付与される識別番号である。また、本実施例では、実行キュー151及び完了キュー152も、キャッシュキュー番号1421によって識別できるものとする。すなわち、実行キュー151及び完了キュー152には、キャッシュキュー番号1421に対応する識別番号が付与される。
キュー実行待ちビット1422は、実行キュー151に登録され、かつ、実行されていないI/O要求が存在するか否かを示すビットである。
キュー実行待ちビット1422が「0」の場合、実行キュー151に、実行されていないI/O要求が存在しないことを示す。一方、キュー実行待ちビット1422が「1」の場合、実行キュー151に、実行されていないI/O要求が存在することを示す。
図5は、本発明の実施例1のおけるキュー変換テーブル143の一例を示す説明図である。
キュー変換テーブル143は、アプリケーションキュー番号1431、キャッシュキュー番号1432、及びストレージキュー番号1433を含む。本実施例では、キュー変換テーブル143は、アプリケーションキュー毎に一つのエントリを持つ。
アプリケーションキュー番号1431は、アプリケーションキューの識別番号である。キャッシュキュー番号1432は、キャッシュキューの識別番号である。ストレージキュー番号1433は、ストレージキューの識別番号である。
本実施例では、キャッシュドライバ140は、キュー変換テーブル143を用いて、アプリケーション110から受け付けたI/O要求を、キャッシュメモリシステム200又は共有ストレージシステム300へのI/O要求に変換する。具体的には、以下のような処理が実行される。
まず、アプリケーション110は、キューイングインタフェース120を介して、アプリケーションキュー番号を含むI/O要求の登録を指示する。
キャッシュドライバ140は、キャッシュメモリシステム200へのI/O要求を受け付けた場合、キュー変換テーブル143のアプリケーションキュー番号1431を参照し、入力されたアプリケーションキュー番号に対応するエントリを検索する。
キャッシュドライバ140は、検索されたエントリのキャッシュキュー番号1432を用いてキャッシュメモリシステムドライバ150に対するI/O要求の登録指示に変換する。
また、キャッシュドライバ140は、共有ストレージシステム300へのI/O要求を受け付けた場合、キュー変換テーブル143のアプリケーションキュー番号1431を参照し、入力されたアプリケーションキュー番号に対応するエントリを検索する。
キャッシュドライバ140は、検索されたエントリのストレージキュー番号1433を用いて共有ストレージシステムドライバ160に対するI/O要求の登録指示に変換する。
図6は、本発明の実施例1におけるキャッシュ解放情報144の一例を示す説明図である。
キャッシュ解放情報144は、情報有効ビット14410、キャッシュキュー完了状態テーブル14420、及び解放対象アドレス14430を含む。
情報有効ビット14410は、キャッシュキュー完了状態テーブル14420が有効であるか否かを示す情報である。また、情報有効ビット14410は、キャッシュ解放情報144が使用中であるか否かを示す情報でもある。
情報有効ビット14410が「0」の場合、キャッシュキュー完了状態テーブル14420が有効でないこと、及びキャッシュ解放情報144が使用されていないことを示す。一方、情報有効ビット14410が「1」の場合、キャッシュキュー完了状態テーブル14420が有効であること、及びキャッシュ解放情報144が使用されていることを示す。
キャッシュキュー完了状態テーブル14420は、キャッシュ解放時におけるキャッシュドライバ140が有するキャッシュキューの状態を示す情報を格納する。すなわち、キャッシュキュー完了状態テーブル14420は、キャッシュ解放時におけるキャッシュキュー状態テーブル142のコピーに対応する。
具体的には、キャッシュキュー完了状態テーブル14420は、キャッシュキュー番号14421及びキュー実行待ちビット14422を含む。キャッシュキュー番号14421及びキュー実行待ちビット14422は、キャッシュキュー番号1421及びキュー実行待ちビット1422と同一のものであるため説明を省略する。
解放対象アドレス14430は、解放対象のキャッシュ領域のアドレスである。
キャッシュドライバ140は、後述するキャッシュ解放処理において、キャッシュ解放情報144を用いる。
次に、実行キュー151、161及び完了キュー152、162の構成について説明する。
図7は、本発明の実施例1における実行キュー151、161の構成例を示す説明図である。ここでは、実行キュー151を例に説明する。なお、実行キュー161も同一の構成である。
実行キュー151は、エントリ番号1511、コマンド1512、宛先アドレス1513、データ1514、及びI/O要求有効ビット1515を含む。
エントリ番号1511は、実行キュー151のエントリに付与される識別番号である。図7に示すように、実行キュー151それぞれは複数のエントリを有する。また、共有ストレージシステムドライバ160も同様に、複数のエントリを有する。
コマンド1512は、エントリ番号1511に対応する実行キュー151に登録されたI/O要求の種別である。コマンド1512が「Read」の場合、Read要求が実行キューに登録されていることを示し、コマンド1512が「Write」の場合、Write要求が登録されていることを示す。
宛先アドレス1513は、コマンド1512に対応するI/O要求の対象となるキャッシュ領域の先頭アドレスを示す。
データ1514は、Write要求における書き込みデータを示す。データ1514は、登録されたI/O要求がRead要求の場合には空欄となる。
I/O要求有効ビット1515は、当該エントリのコマンド1512に対応するI/O要求が有効であるか否かを示すビットである。
図8は、本発明の実施例1のおける完了キュー152、162の構成例を示す説明図である。ここでは、完了キュー152を例に説明する。なお、完了キュー162も同一の構成である。
完了キュー152は、実行キューエントリ番号1521、及び完了ビット1522を含む。
実行キューエントリ番号1521は、完了キュー152に登録された完了通知が、どの実行キュー151のどのエントリに登録されたI/O要求に対応するかを示す。実行キューエントリ番号1521は、エントリ番号1511と同一のものである。
完了ビット1522は、実行キューエントリ番号1521に対応する実行キュー151に登録されたI/O要求(コマンド1512)の実行が完了しているか否かを示す情報である。
完了ビット1522が「0」の場合、実行キュー151に登録されたI/O要求の実行が完了していないことを示し、完了ビット1522が「1」の場合、実行キュー151に登録されたI/O要求の実行が完了していることを示す。
次に、本発明におけるアプリケーション及びキャッシュドライバの動作のフローを示す。
図9は、本発明の実施例におけるI/O処理の概要を説明するフローチャートである。
図9では、OS130が、アプリケーション110によって発行されたI/O要求の登録指示、及びI/O要求の実行指示を受け付け、当該I/O要求の実行結果をアプリケーション110に応答するまでの処理の流れを説明する。
OS130は、アプリケーション110から、アプリケーションキューへのI/O要求の登録指示を受け付けると、キャッシュドライバ140を呼び出し、以下の処理を開始する。
なお、アプリケーション110は、I/O要求の登録指示を行う場合、以下のような処理を実行する。まず、アプリケーション110は、処理対象のデータが格納される記憶領域(宛先アドレス)、処理対象のデータ、及びアプリケーションキューの識別番号を決定する。アプリケーション110は、キューイングインタフェース120を用いて、I/O要求の種別(コマンド)、宛先アドレス、処理対象のデータ、及びアプリケーションキュー番号を含むI/O要求の登録指示を入力する。
キャッシュドライバ140は、実行キューへのI/O要求の登録処理を実行する(ステップS100)。これによって、キャッシュメモリシステムドライバ150が有する実行キュー151、又は、共有ストレージシステムドライバ160が有する実行キュー161にI/O要求が登録される。I/O要求の登録処理の詳細は、図10及び図11を用いて後述する。
キャッシュドライバ140は、アプリケーション110からI/O要求の実行指示を受け付けると、実行キューに登録されたI/O要求に対応するI/O処理を実行する(ステップS101)。
具体的には、キャッシュドライバ140は、キャッシュメモリシステムドライバ150又は共有ストレージシステムドライバ160を呼び出し、I/O要求の実行を指示する。I/O処理の詳細は、図13を用いて後述する。
なお、アプリケーション110は、キューイングインタフェース120を用いて、アプリケーションキューに登録されたI/O要求の実行指示を入力する。このとき、アプリケーション110は、アプリケーションキュー番号を含むI/O要求の実行指示を入力する。
キャッシュメモリシステムドライバ150又は共有ストレージシステムドライバ160は、キャッシュメモリシステム200又は共有ストレージシステム300から、割り込みを受け付けると(ステップS102)、キャッシュドライバ140を介して、アプリケーション110にI/O要求の完了を通知し(ステップS103)、処理を終了する。
以上の処理によって、アプリケーションキューに対して登録されたI/O要求(コマンド)の処理が完了する。
図10及び図11は、本発明の実施例1におけるI/O要求の登録処理の一例を説明するフローチャートである。
図10は、Read要求の登録処理である。図11は、Write要求の登録処理である。
まず、Read要求の登録指示を受け付けた場合に実行されるI/O要求の登録処理について説明する。
キャッシュドライバ140は、キューイングインタフェース120を介して、コマンドが「Read」であるI/O要求(Read要求)の登録指示を受け付ける(ステップS200)。
キャッシュドライバ140は、キャッシュ管理テーブル141を参照し、共有ストレージシステムアドレス1412が、Read要求の登録指示に含まれる宛先アドレスと一致するエントリを検索する(ステップS201)。
キャッシュドライバ140は、検索の結果に基づいて、宛先アドレスに対応するキャッシュ領域に読み出し可能なRead対象のデータが格納されているか否かを判定する(ステップS202)。すなわち、宛先アドレスに対応するキャッシュ領域が、第1のキャッシュ状態であるか否かが判定される。具体的には、以下のような処理が実行される。
キャッシュドライバ140は、検索の結果に基づいて、共有ストレージシステムアドレス1412が宛先アドレスと一致するエントリが存在するか否かを判定する。
共有ストレージシステムアドレス1412が宛先アドレスと一致するエントリが存在すると判定された場合、キャッシュドライバ140は、検索されたエントリのデータ有効ビット1413が「1」であるか否かを判定する。
検索されたエントリのデータ有効ビット1413が「1」であると判定された場合、キャッシュドライバ140は、キャッシュメモリシステム200に読み出し可能なデータが格納されていると判定する。
一方、共有ストレージシステムアドレス1412が宛先アドレスと一致するエントリが存在しない、又は、検索されたエントリのデータ有効ビット1413が「0」であると判定された場合、キャッシュドライバ140は、キャッシュメモリシステム200に読み出し可能なRead対象のデータが格納されていないと判定する。
以上がステップS202の処理の説明である。
宛先アドレスに対応するキャッシュ領域に読み出し可能なRead対象のデータが格納されていると判定された場合、キャッシュドライバ140は、キャッシュ管理テーブル141を参照し、キャッシュメモリシステム200のキャッシュ領域のアドレスを取得する(ステップS203)。
具体的には、キャッシュドライバ140は、検索されたエントリのキャッシュメモリアドレス1411に格納されるアドレスを取得する。
また、キャッシュドライバ140は、キュー変換テーブル143を参照し、Read要求を登録するキャッシュメモリシステム200の実行キュー151を特定する(ステップS204)。具体的には、以下のような処理が実行される。
キャッシュドライバ140は、キュー変換テーブル143を参照し、アプリケーションキュー番号1431がRead要求の登録指示に含まれるアプリケーションキュー番号に一致するエントリを検索する。
キャッシュドライバ140は、検索されたエントリのキャッシュキュー番号1432に格納される識別番号を読み出す。読み出された識別番号に対応する実行キュー151が、Read要求を登録する実行キュー151となる。
以上が、ステップS204の処理の説明である。
次に、キャッシュドライバ140は、キャッシュメモリシステムドライバ150を呼び出し、Read要求の登録を指示する(ステップS205)。このとき、キャッシュドライバ140は、取得されたキャッシュ領域のアドレス、及び特定された実行キュー151の識別番号をキャッシュメモリシステムドライバ150に通知する。
キャッシュメモリシステムドライバ150は、通知された実行キュー151の識別番号に対応する実行キュー151に、Read要求を登録する(ステップS206)。
具体的には、キャッシュメモリシステムドライバ150は、通知された識別番号に対応する実行キュー151に、コマンド1512に「Read」、宛先アドレス1513に通知されたキャッシュ領域のアドレス、I/O要求有効ビット1515に「1」が設定されたRead要求を登録する。
キャッシュドライバ140は、キャッシュキュー状態テーブル142を参照し、Read要求が登録された実行キュー151に対応するエントリのキュー実行待ちビット1422を「1」に設定し(ステップS207)、処理を終了する。
ステップS207の処理は、同一アドレスに対するI/O要求の追い抜きによって発生するデータ化けを防止するための処理であり、これによって、実行されていないRead要求が実行キュー151に存在することが分かる。
ステップS202において、宛先アドレスに対応するキャッシュ領域に読み出し可能なRead対象のデータが格納されていないと判定された場合、すなわち、キャッシュミスヒットの場合、キャッシュドライバ140は、キュー変換テーブル143を参照し、Read要求を登録する共有ストレージシステム300の実行キュー161を特定する(ステップS208)。ステップS208の処理は、ステップS204と同様の処理であるため説明を省略する。
キャッシュドライバ140は、共有ストレージシステムドライバ160を呼び出し、Read要求の登録を指示する(ステップS209)。このとき、キャッシュドライバ140は、入力された宛先アドレス、及び特定された実行キュー161の識別番号を共有ストレージシステムドライバ160に通知する。
共有ストレージシステムドライバ160は、通知された実行キュー161の識別番号に対応する実行キュー161に、Read要求を登録し(ステップS210)、処理を終了する。
具体的には、共有ストレージシステムドライバ160は、通知された実行キュー161の識別番号に対応する実行キュー161に、コマンドに「Read」、宛先アドレスに入力された宛先アドレス、有効ビットに「1」が設定されたRead要求を登録する。
次に、Write要求の登録指示を受け付けた場合に実行されるI/O要求の登録処理について説明する。
キャッシュドライバ140は、キューイングインタフェース120を介して、コマンドが「Write」であるI/O要求(Write要求)の登録指示を受け付ける(ステップS300)。
キャッシュドライバ140は、キュー変換テーブル143を参照し、Write要求を登録する共有ストレージシステム300の実行キュー161を特定する(ステップS301)。具体的には、以下のような処理が実行される。
キャッシュドライバ140は、キュー変換テーブル143を参照し、アプリケーションキュー番号1431がWrite要求の登録指示に含まれるアプリケーションキュー番号に一致するエントリを検索する。
キャッシュドライバ140は、検索されたエントリのストレージキュー番号1433に格納される識別番号を読み出す。読み出された識別番号に対応する実行キュー161が、Write要求を登録する実行キュー161となる。
以上が、ステップS301の処理の説明である。
次に、キャッシュドライバ140は、共有ストレージシステムドライバ160を呼び出し、Write要求の登録を指示する(ステップS302)。このとき、キャッシュドライバ140は、入力された宛先アドレス、及び特定された実行キュー161の識別番号を共有ストレージシステムドライバ160に通知する。
共有ストレージシステムドライバ160は、通知された実行キュー161の識別番号に対応する実行キュー161に、Write要求を登録する(ステップS303)。
具体的には、共有ストレージシステムドライバ160は、通知された識別番号に対応する実行キュー161に、コマンドに「Write」、宛先アドレスに入力された宛先アドレス、I/O要求有効ビットに「1」が設定されたWrite要求を登録する。
キャッシュドライバ140は、キャッシュ管理テーブル141を参照し、共有ストレージシステムアドレス1412がWrite要求の登録指示に含まれる宛先アドレスと一致するエントリを検索する(ステップS304)。
ここで、キャッシュヒット又はキャッシュミスヒットに関わらず、共有ストレージシステム300にデータを書き込むのは、書き込まれるデータを保護するためである。サーバモジュール100にのみデータが書き込まれる場合、例えば、サーバモジュール100の電源故障等によってデータが消滅してしまう可能性があるためである。なお、保護の必要がないデータを扱うシステムにおいては、キャッシュヒットした場合にステップS300からステップS304までの処理を省略することもできる。
キャッシュドライバ140は、検索の結果に基づいて、宛先アドレスに対応するキャッシュ領域に読み出し可能なデータが格納されているか否かを判定する(ステップS305)。すなわち、宛先アドレスに対応するキャッシュ領域が第1のキャッシュ状態であるか否かが判定される。ステップS305の処理は、ステップS202と同一であるため説明を省略する。
宛先アドレスに対応するキャッシュ領域に読み出し可能なデータが格納されていると判定された場合、キャッシュドライバ140は、当該キャッシュ領域からのデータの読み出しを禁止するために、データ有効ビット1413を「0」に設定する(ステップS306)。すなわち、キャッシュ領域の状態が、第1のキャッシュ状態から第3のキャッシュ状態に変更される。この場合、当該キャッシュ領域には読み出し可能なデータが格納されているが、これ以降、当該キャッシュ領域へのI/O要求の登録が禁止される。
キャッシュドライバ140は、I/O要求の登録が禁止されたキャッシュ領域に関するキャッシュ解放情報144を生成する(ステップS307)。具体的には、以下のような処理が実行される。
まず、キャッシュドライバ140は、空のキャッシュ解放情報144を生成し、情報有効ビット14410に「1」を設定する。キャッシュドライバ140は、解放対象アドレス14430に、I/O要求の登録が禁止されたキャッシュ領域のアドレスを登録する。
キャッシュドライバ140は、この時点における全てのキャッシュキュー状態テーブル142のコピーを取得し、キャッシュ解放情報144に、キャッシュキュー完了状態テーブル14420として登録する。
なお、情報有効ビット14410が「0」、かつ、キャッシュキュー完了状態テーブル14420が登録されていないキャッシュ解放情報144が存在する場合、キャッシュドライバ140は、当該キャッシュ解放情報144に必要な情報を設定してもよい。
以上が、ステップS307の処理の説明である。
ステップS305において宛先アドレスに対応するキャッシュ領域に読み出し可能なデータが格納されていないと判定された場合、又は、ステップS307の処理が実行された後、キャッシュドライバ140は、キャッシュ管理テーブル141を参照し、キャッシュメモリシステム200に、Write要求におけるWrite対象のデータを格納するためのキャッシュ領域が存在するか否かを判定する(ステップS308)。
具体的には、キャッシュドライバ140は、キャッシュ管理テーブル141から書込有効ビット1414が「1」であるエントリを検索する。すなわち、第2のキャッシュ状態であるキャッシュ領域が検索される。
書込有効ビット1414が「1」であるエントリが、Write対象のデータを書き込むために必要なキャッシュ領域分存在する場合、キャッシュドライバ140は、キャッシュメモリシステム200に、Write対象のデータを格納するためのキャッシュ領域が存在すると判定する。
キャッシュメモリシステム200に、Write対象のデータを格納するためのキャッシュ領域が存在しないと判定された場合、キャッシュドライバ140は、処理を終了する。
キャッシュメモリシステム200に、Write対象のデータを格納するためのキャッシュ領域が存在すると判定された場合、キャッシュドライバ140は、キャッシュ登録処理を実行し(ステップS309)、処理を終了する。キャッシュ登録処理の詳細は、図12を用いて後述する。なお、スッテップS308の処理及びS309の処理は、ステップS300の処理が実行されている場合、省略してもよい。この場合、Writeされたデータは共有ストレージシステム300のみに存在する。
図12は、本発明の実施例1におけるキャッシュ登録処理を説明するフローチャートである。
キャッシュドライバ140は、キャッシュ管理テーブル141を参照し、書込有効ビット1414が「1」であるエントリを一つ検索する(ステップS400)。すなわち、第2のキャッシュ状態であるキャッシュ領域が検索される。
キャッシュドライバ140は、検索されたエントリのキャッシュメモリアドレス1411を読み出し(ステップS401)、また、当該エントリの書込有効ビット1414を「0」に設定する(ステップS402)。すなわち、キャッシュ領域の状態が、第2のキャッシュ状態から第3のキャッシュ状態に変更される。これ以降、キャッシュ領域へのI/O要求の登録が禁止される。
キャッシュドライバ140は、検索されたキャッシュ領域に対するWrite要求の登録に用いる実行キュー151を決定する(ステップS403)。すなわち、実行キュー151の識別番号が決定される。
本実施例では、OS130毎にキャッシュキューが割り当てられているため、一時的に、いずれかのOS130に割り当てられたキャッシュキューを利用できるようにする。例えば、最後にコマンドが生成されたキャッシュキューを優先的に使用する方法が考えられる。
キャッシュドライバ140は、キャッシュメモリシステムドライバ150を呼び出し、Write要求の登録を指示する(ステップS404)。このとき、キャッシュドライバ140は、読み出されたキャッシュ領域のアドレス、及び決定された実行キュー151の識別番号をキャッシュメモリシステムドライバ150に通知する。
キャッシュメモリシステムドライバ150は、決定された実行キュー151に、Write要求を登録する(ステップS405)。
具体的には、キャッシュメモリシステムドライバ150は、決定された実行キュー151に、コマンド1512に「Write」、宛先アドレス1513に読み出されたキャッシュ領域のアドレス、及びI/O要求有効ビット1515に「1」が設定されたWrite要求を登録する。
キャッシュドライバ140は、キャッシュキュー状態テーブル142を参照し、キャッシュキュー番号1421が決定された実行キュー151の識別番号と一致するエントリを検索し、当該エントリのキュー実行待ちビット1422を「1」に設定する(ステップS406)。
その後、キャッシュドライバ140は、実行キュー151に登録されたWrite要求が実行され、実行完了の割り込みが行われるまで待つ(ステップS407)。すなわち、キャッシュ領域にデータが書き込まれるまでキャッシュドライバ140は待ち状態となる。
キャッシュドライバ140は、実行キュー151に登録されたWrite要求の実行完了の割り込みを受け付けた後、ステップS400において検索されたキャッシュ管理テーブル141のエントリのデータ有効ビット1413を「1」に設定する(ステップS408)。すなわち、キャッシュ領域の状態が、第3のキャッシュ状態から第1のキャッシュ状態に変更される。これ以降、キャッシュ領域からのデータの読み出しが可能となる。
なお、ステップS403において、キャッシュドライバ140は、キャッシュキューの中から使用する実行キュー151を決定していたが、本発明はこれに限定されない。予め、キャッシュメモリシステムドライバ150に、キャッシュ登録時に用いるキャッシュドライバ140用のキャッシュキューが設定されていてもよい。この場合、キャッシュドライバ140が、任意のタイミングで専用の実行キュー151に登録されたWrite要求を実行してもよい。また、ステップS406の処理は省略できる。
また、前述したキャッシュ登録処理は、Write要求の登録時以外にも実行される。例えば、共有ストレージシステム300から読み出されたデータをキャッシュメモリシステム200に格納する場合にキャッシュ登録処理が実行される。また、キャッシュドライバ140がI/O処理の履歴を管理することによって、キャッシュドライバ140自身が周期的にキャッシュ領域に格納するデータの有無を判定し、当該判定結果に基づいてデータをキャッシュメモリシステム200に格納する場合等にキャッシュ登録処理が実行される。
図13は、本発明の実施例における実行キューに登録されたI/O要求に対応するI/O処理を説明するフローチャートである。
OS130は、アプリケーション110から、アプリケーションキューに登録されたI/O要求の実行指示を受け付けると、キャッシュドライバ140を呼び出し、以下の処理を開始する。
なお、アプリケーション110は、I/O要求の実行指示を行う場合、処理対象のアプリケーションキュー番号を決定し、キューイングインタフェース120を介して、決定されたアプリケーションキュー番号を含むI/O要求の実行指示を入力する。
キャッシュドライバ140は、当該I/O要求の実行指示を受け付けると(ステップS500)、処理対象のI/O要求が登録されるキャッシュキュー及びストレージキューを特定する(ステップS501)。
具体的には、キャッシュドライバ140は、キュー変換テーブル143を参照し、アプリケーションキュー番号1431が、受け付けたI/O要求の実行指示に含まれるアプリケーションキュー番号と一致するエントリを検索する。キャッシュドライバ140は、検索されたエントリのキャッシュキュー番号1432及びストレージキュー番号1433を取得する。
キャッシュドライバ140は、キャッシュキュー状態テーブル142を参照し、I/O要求の実行指示に含まれるアプリケーションキュー番号と一致するエントリのキュー実行待ちビット1422を「0」に設定する(ステップS502)。
また、キャッシュドライバ140は、キャッシュ解放情報144のキャッシュキュー完了状態テーブル14420を参照し、キャッシュキュー番号14421が取得されたキャッシュキュー番号1432と一致するエントリを含むキャッシュキュー完了状態テーブル14420を検索する(ステップS503)。
さらに、キャッシュドライバ140は、検索されたキャッシュキュー完了状態テーブル14420を参照し、キャッシュキュー番号14421が取得されたキャッシュキュー番号1432と一致するエントリのキュー実行待ちビット14422を「0」に設定する(ステップS504)。
ステップS502からステップS504の処理によって、キャッシュキューに登録されたI/O要求が全て実行されたことが分かる。
キャッシュドライバ140は、キャッシュメモリシステムドライバ150及び共有ストレージシステムドライバ160のそれぞれに、処理対象のI/O要求の実行を指示する(ステップS505)。
このとき、キャッシュドライバ140は、取得されたキャッシュキュー番号1432をキャッシュメモリシステムドライバ150に通知し、取得されたストレージキュー番号1433を共有ストレージシステムドライバ160に通知する。
キャッシュメモリシステムドライバ150及び共有ストレージシステムドライバ160は、それぞれ、通知されたキャッシュキュー番号1432に対応する実行キュー151及び通知されたストレージキュー番号1433に対応する実行キュー161に登録された処理対象のI/O要求を実行し(ステップS506)、処理を終了する。
具体的には、キャッシュメモリシステムドライバ150は、処理対象のI/O要求が登録された実行キュー151に対応する実行レジスタ210を介して、キャッシュメモリシステム200にI/O要求の実行を指示する。また、共有ストレージシステムドライバ160は、処理対象のI/O要求が登録された実行キュー161に対応する実行レジスタ320を介して、共有ストレージシステム300にI/O要求の実行を指示する。
図14は、本発明の実施例1におけるキャッシュ解放処理の一例を説明するフローチャートである。
キャッシュドライバ140は、周期的、又は、キャッシュ領域の使用率が所定のしきい値以上となった場合に、以下で説明するキャッシュ解放処理を実行する。なお、OS130等から実行指示を受け付けた場合に、キャッシュ解放処理が開始されてもよい。
キャッシュドライバ140は、解放するキャッシュ領域を決定する(ステップS600)。
具体的には、キャッシュドライバ140は、情報有効ビット14410が「1」であるキャッシュ解放情報144を検索する。ここでは、情報有効ビット14410が「1」であるキャッシュ解放情報144が一つ以上検索される。
キャッシュドライバ140は、検索の結果、情報有効ビット14410が「1」であるキャッシュ解放情報144が一つ以上存在するか否かを判定する(ステップS601)。
情報有効ビット14410が「1」であるキャッシュ解放情報144が存在しないと判定された場合、キャッシュドライバ140は、キャッシュ領域を解放できないと判定し(ステップS606)、処理を終了する。
キャッシュドライバ140は、検索された各キャッシュ解放情報144のキャッシュキュー完了状態テーブル14420を監視し、全てのキャッシュキュー完了状態テーブル14420に含まれる全てのエントリのキュー実行待ちビット14422が「0」になるのを待つ(ステップS603)。
すなわち、キャッシュドライバ140は、解放するキャッシュ領域へのアクセスが禁止された時点において、各実行キュー151に登録された全てのI/O要求が実行されるのを待つ。
図13のステップS504に示すように、実行キュー151に登録されたI/O要求が実行される度に、キュー実行待ちビット14422が「0」に設定される。したがって、一定期間経過すると、キュー実行待ちビット14422は全て「0」になる。これによって、解放するキャッシュ領域に対するI/O要求が全て実行された状態となる。
キャッシュドライバ140は、任意のキャッシュ解放情報144において、全てのキャッシュキュー完了状態テーブル14420に含まれる全てのエントリのキュー実行待ちビット14422が「0」になった場合、キャッシュドライバ140は、解放対象アドレス14430に対応するキャッシュ領域を解放する(ステップS604)。
具体的には、キャッシュドライバ140は、キャッシュメモリアドレス1411が解放対象アドレス14430と一致するエントリを検索する。キャッシュドライバ140は、検索されたエントリの書込有効ビット1414を「1」に設定する。すなわち、キャッシュ領域の状態が、第3のキャッシュ状態から第2のキャッシュ状態に変更される。これ以降、キャッシュ領域へのデータの書き込みが可能な状態となる。
キャッシュメモリシステム200へのデータの書き込み時に、書込有効ビット1414が「1」であるエントリに対応するキャッシュ領域に対して一度のみデータを書き込むものとすれば、Read要求及びWrite要求の宛先アドレスを別々に分けることができ、また、異なるWrite要求同士の宛先アドレスも重複しないため、同一のキャッシュ領域に対応する複数のI/O要求の追い抜きによるデータ化けの問題を回避することができる。
キャッシュドライバ140は、全てのキャッシュキュー完了状態テーブル14420に含まれる全てのエントリのキュー実行待ちビット14422が「0」になったキャッシュ解放情報144を初期化する(ステップS605)。
具体的には、キャッシュドライバ140は、情報有効ビット14410を「0」に設定し、解放対象アドレス14430を空にする。また、キャッシュドライバ140は、キャッシュ解放情報144からキャッシュキュー完了状態テーブル14420を削除する。
なお、キャッシュドライバ140は、キャッシュ解放情報144を削除してもよい。また、キャッシュ解放処理では、条件を満たすキャッシュ領域を全て解放してもよいし、所定の数のキャッシュ領域のみを解放してもよい。条件を満たすキャッシュ領域が全て解放されない場合、その後、実行されるキャッシュ解放処理において、当該キャッシュ領域が解放されることとなる。
図15は、本発明の実施例1におけるキャッシュ管理テーブル141及びキャッシュ解放情報144の初期化処理を説明するフローチャートである。
サーバモジュール100の初期の起動時に、OS130によって呼び出されたキャッシュドライバ140が、以下で説明するキャッシュ管理テーブル141及びキャッシュ解放情報144の初期化処理を実行する。
キャッシュドライバ140は、キャッシュとして使用されるキャッシュメモリシステム200に生成されるキャッシュ領域の数と同一の数のエントリを有するキャッシュ管理テーブル141を生成する(ステップS700)。
キャッシュドライバ140は、生成されたキャッシュ管理テーブル141の各エントリのデータ有効ビット1413、及び書込有効ビット1414に初期値を設定する(ステップS701)。
例えば、キャッシュドライバ140は、全エントリのデータ有効ビット1413に「0」、書込有効ビット1414に「1」を設定する。すなわち、全てのキャッシュ領域の初期状態が第2のキャッシュ状態に設定される。
また、他の方法としては、初期値を定義したキャッシュプリロード情報が設定されている場合、キャッシュドライバ140は、プリロードされた全てのキャッシュ領域に対応するエントリのデータ有効ビット1413に「1」、書込有効ビット1414に「0」を設定する。また、キャッシュドライバ140は、その他のエントリのデータ有効ビット1413に「0」、書込有効ビット1414を「1」に設定する。
なお、キャッシュプリロード情報は、キャッシュ領域に初期起動時の段階に登録される情報であり、キャッシュ登録データ又は共有ストレージシステムアドレスを示すものである。
図16は、本発明の実施例1におけるアプリケーション110がキューを生成する場合の流れを説明するフローチャートを示す。
キャッシュドライバ140は、アプリケーション110からキューの生成指示を受け付けると(ステップS800)、アプリケーションキュー番号、キャッシュキュー番号、及びストレージキュー番号の対応関係を決定し、キュー変換テーブル143に登録する(ステップS801)。
なお、キャッシュドライバ140は、キャッシュメモリシステム200が物理的に有するキャッシュキュー番号及び共有ストレージシステム300が物理的に持つストレージキュー番号の間で任意に対応関係を定めてよい。例えば、所定のポリシ情報に基づいて決定する方法が考えられる。
キャッシュドライバ140は、キャッシュキュー状態テーブル142にキャッシュキュー番号に対応するエントリを生成し、生成されたエントリのキュー実行待ちビット1422に「0」を設定する(ステップS802)。
キャッシュドライバ140は、キャッシュメモリシステムドライバ150に、キャッシュキュー番号に対応するキャッシュキューの生成を指示する(ステップS803)。このとき、キャッシュメモリシステムドライバ150は、当該指示にしたがって、キャッシュキューを生成し、キュー生成完了をキャッシュドライバに通知する。
キャッシュドライバ140は、共有ストレージシステムドライバ160に、ストレージキュー番号に対応するストレージキューの生成を指示する(ステップS804)。このとき、共有ストレージシステムドライバ160は、当該指示にしたがって、ストレージキューを生成し、キュー生成完了をキャッシュドライバに通知する。
キャッシュドライバ140は、キュー生成完了をアプリケーション110に通知し(ステップS805)、処理を終了する。
以上で述べたように、NVMe対応のアプリケーション110がNVMe対応のストレージシステムを使用し、キャッシュ領域としてNVMe対応のキャッシュメモリを使用するシステムにおいて、本発明のキャッシュドライバ140は、同一のキャッシュ領域に対するI/O要求の実行順序の入れ替わりによって発生するデータ化けの問題を防ぐことができる。
より具体的には、Write要求の登録時に、Write対象のキャッシュ領域に読み出し可能なデータが格納される場合、キャッシュドライバ140は、当該キャッシュ領域へのアクセスを一旦禁止する(ステップS306)。
さらに、キャッシュドライバ140は、Write要求の宛先アドレスを変更することによって、変更された宛先アドレスに対応するキャッシュ領域へのWrite要求の登録指示に変更する(ステップS400からステップS403)。
以上の処理によって、同一アドレスに対応するキャッシュ領域へのI/O要求が重複することを防ぐことができる。したがって、データ化けの発生を解消することができる。
また、I/O要求の登録が禁止されたキャッシュ領域は、すぐに解放せず、I/O要求の登録が禁止された時点において登録されたI/O要求の実行が完了した後に、当該キャッシュ領域を解放する。これによって、I/O要求の不整合を解消できる。
なお、本発明は、NVMe対応のアプリケーション及びキャッシュメモリ以外のアプリケーション及びキャッシュメモリでも同様の効果を奏するものである。
(変形例)
実施例1では、キャッシュ解放時に、I/O要求の登録が禁止されたキャッシュ領域のみを対象としていた。本発明はこれに限定されず、従来のキャッシュ制御のアルゴリズムと組み合わせることも可能である。
以下、実施例1との差異を中心に変形例について説明する。
変形例のシステム構成、ハードウェア構成、及びソフトウェア構成は、実施例1と同一であるため説明を省略する。また、I/O要求の登録処理、キャッシュ登録処理、I/O処理は実施例1と同一であるため説明を省略する。変形例のキャッシュ管理テーブル及びキャッシュ解放情報の初期化処理、キューの生成処理も実施例1と同一であるため説明を省略する。
変形例では、キャッシュ解放処理が一部異なる。ここでは、LRU(Least Recently Used)方式のキャッシュ制御アルゴリズムを例に説明する。
図17は、本発明の実施例1の変形例におけるキャッシュ解放処理の一例を説明するフローチャートである。
ステップS600の処理の実行後、キャッシュドライバ140は、LRUアルゴリズムに基づいて、解放するキャッシュ領域を決定する(ステップS650)。例えば、I/O要求の登録が禁止されたキャッシュ領域だけでは、必要なキャッシュ領域を確保できない場合等に、従来のアルゴリズムを用いて解放するキャッシュ領域を決定する。
キャッシュドライバ140は、必要なキャッシュ領域を確保できるか否かを判定する(ステップS651)。例えば、ステップS600において特定されたキャッシュ領域と、ステップS651において決定されたキャッシュ領域との合計から、必要な数のキャッシュ領域を確保できるか否かが判定される。
必要なキャッシュ領域を確保できると判定された場合、キャッシュドライバ140は、キャッシュ管理テーブル141を参照し、ステップS650において決定されたキャッシュ領域に対応するエントリのデータ有効ビット1413を「0」に設定する(ステップS652)。すなわち、キャッシュ領域の状態が、第1のキャッシュ状態から第3のキャッシュ状態に変更される。これ以降、キャッシュ領域へのI/O要求の登録が禁止される。
さらに、キャッシュドライバ140は、ステップS650において決定されたキャッシュ領域について、キャッシュ解放情報144を生成する(ステップS653)。具体的には、以下のような処理が実行される。
まず、キャッシュドライバ140は、情報有効ビット14410が「0」、かつ、キャッシュキュー完了状態テーブル14420が登録されていないキャッシュ解放情報144を検索する。
なお、前述した条件を満たすキャッシュ解放情報144が存在しない場合、キャッシュ領域を解放できないと判定してもよいし、新たに、キャッシュ解放情報144を生成してもよい。
キャッシュドライバ140は、現時点におけるキャッシュキュー状態テーブル142のコピーを取得し、検索されたキャッシュ解放情報144にキャッシュキュー完了状態テーブル14420として登録する。
また、キャッシュドライバ140は、解放対象アドレス14430に、ステップS650において決定されたキャッシュ領域のアドレスを登録する。なお、ステップS650において決定されたキャッシュ領域が複数存在する場合、解放対象アドレス14430にはリスト形式の情報として登録される。
以上がステップS653の処理の説明である。
ステップS602では、ステップS653において生成されたキャッシュ解放情報144の情報有効ビット14410も「1」に設定される。
ステップS604では、キャッシュドライバ140は、解放対象アドレス14430に含まれるアドレス毎に、キャッシュ管理テーブルの当該アドレスに対応するエントリの書込有効ビット1414を「1」に設定する。
その他の処理は実施例1と同一の処理である。
各実施例では、ソフトウェアによる制御を用いた例について説明したが、その一部をハードウェアによって実現することも可能である。
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
10 サーバ装置
100 サーバモジュール
101 プロセッサ
102 メモリ
103 ネットワークインタフェース
104 接続インタフェース
110 アプリケーション
120 キューイングインタフェース
130 OS
140 キャッシュドライバ
141 キャッシュ管理テーブル
142 キャッシュキュー状態テーブル
143 キュー変換テーブル
144 キャッシュ解放情報
150 キャッシュメモリシステムドライバ
151 実行キュー
152 完了キュー
160 共有ストレージシステムドライバ
161 実行キュー
162 完了キュー
200 キャッシュメモリシステム
210 実行レジスタ
300 共有ストレージシステム
301 コントローラ
302 プロセッサ
303 メモリ
304 ネットワークインタフェース
305 ストレージインタフェース
306 記憶媒体
310 ストレージ制御部
320 実行レジスタ
400 ネットワーク
14410 情報有効ビット
14420 キャッシュキュー完了状態テーブル
14430 解放対象アドレス

Claims (15)

  1. アプリケーションが稼働するサーバ、及び、前記アプリケーションが使用するデータを格納するストレージシステムを備える計算機システムであって、
    前記サーバは、第1のプロセッサ、前記第1のプロセッサに接続される第1のメモリ、前記第1のプロセッサに接続され、一時的にデータを格納するキャッシュ領域を提供するキャッシュメモリシステム、前記第1のプロセッサに接続され、前記キャッシュメモリシステムと接続するための接続インタフェース、及び前記第1のプロセッサに接続され、他の装置と接続するための第1のネットワークインタフェースを有し、
    前記ストレージシステムは、第2のプロセッサ、前記第2のプロセッサに接続される第2のメモリ、及び前記第2のプロセッサに接続され、他の装置と接続するための第2のネットワークインタフェースを含むコントローラ、並びに前記コントローラと接続される複数の記憶装置を有し、
    前記第1のメモリは、前記サーバを制御するオペレーティングシステムを実現するプログラムを格納し、
    前記第2のメモリは、前記ストレージシステムを制御するストレージ制御部を実現するプログラムを格納し、
    前記オペレーティングシステムは、
    キャッシュデータを制御するキャッシュドライバ、前記キャッシュメモリシステムに対するI/O処理を制御するキャッシュメモリシステムドライバ、及び前記ストレージシステムに対するI/O処理を制御するストレージシステムドライバを含み、
    前記キャッシュメモリシステムドライバは、前記キャッシュメモリシステムに対するI/O要求を登録する第1のキューを二つ以上有し、
    前記ストレージシステムドライバは、前記ストレージシステムに対するI/O要求を登録する第2のキューを一つ以上有し、
    前記キャッシュ領域は、前記キャッシュ領域からのデータの読み出しが可能であり、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第1のキャッシュ状態、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが許可される第2のキャッシュ状態、又は、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第3のキャッシュ状態のいずれかの状態に切替可能であり、
    前記キャッシュドライバは、
    前記アプリケーションから、前記ストレージシステムの第1の記憶領域へのデータの書き込みを命令する第1の書込要求の登録指示を受け付けた場合、前記第1の記憶領域に格納されるデータのキャッシュデータを格納する第1のキャッシュ領域が前記第1のキャッシュ状態であるか否かを判定し、
    前記第1のキャッシュ領域が前記第1のキャッシュ状態であると判定された場合、前記第1のキャッシュ領域を前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更することを特徴とする計算機システム。
  2. 請求項1に記載の計算機システムであって、
    前記キャッシュドライバは、
    前記第1のキャッシュ領域が前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更された時点における前記複数の第1のキューに登録された前記I/O要求の実行状態を監視し、
    前記複数の第1のキューに登録されたI/O要求に対応するI/O処理が全て完了した場合、前記第1のキャッシュ領域を前記第3のキャッシュ状態から前記第2のキャッシュ状態に変更することによって、当該第1のキャッシュ領域を解放することを特徴とする計算機システム。
  3. 請求項2に記載の計算機システムであって、
    前記キャッシュドライバは、
    前記ストレージシステムの記憶領域、前記ストレージシステムの記憶領域に格納されるデータのキャッシュデータが格納される前記キャッシュ領域、前記キャッシュ領域からのデータの読み出しが可能か否かを示す第1のフラグ、及び、前記キャッシュ領域へのデータの書き込みが可能か否かを示す第2のフラグを含むキャッシュ管理情報と、
    前記複数の第1のキューに付与された識別子、及び前記複数の第1のキューの各々に登録された前記I/O要求の実行状態を示す情報を含むキャッシュキュー状態情報と、を管理し、
    前記キャッシュドライバは、
    前記第1のフラグを操作することによって、前記第1のキャッシュ領域を前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更し、
    前記第1のキャッシュ領域が前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更された時点の前記キャッシュキュー状態情報のコピーをキャッシュキュー完了状態情報として取得し、
    前記第1のキャッシュ領域のアドレスを取得し、
    前記キャッシュキュー完了状態情報及び前記第1のキャッシュ領域のアドレスを含むキャッシュ解放情報を生成し、
    任意の前記第1のキューに登録された前記I/O要求に対応するI/O処理が完了した場合、前記キャッシュキュー状態情報及び前記キャッシュキュー完了状態情報における当該第1のキューの実行状態を更新し、
    前記キャッシュキュー完了状態情報に基づいて、前記複数の第1のキューの各々に登録されたI/O要求に対応するI/O処理が全て完了したか否かを判定し、
    前記複数の第1のキューの各々に登録されたI/O要求に対応するI/O処理が全て完了したと判定された場合、前記第2のフラグを操作することによって、前記第1のキャッシュ領域を前記第3のキャッシュ状態から前記第2のキャッシュ状態に変更することを特徴とする計算機システム。
  4. 請求項2又は請求項3に記載の計算機システムであって、
    前記キャッシュドライバは、
    前記第1のキャッシュ領域が前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更された後、前記第2のキャッシュ状態である第2のキャッシュ領域を検索し、
    前記第2のキャッシュ領域へのデータの書き込みを命令する第2の書込要求を登録する第1のキューを決定し、
    前記決定された第1のキューに付与される識別番号とともに、前記第2の書込要求の登録を、前記キャッシュメモリシステムドライバに指示し、
    前記キャッシュメモリシステムドライバは、前記第2の書込要求の登録の指示を受け付けた場合、前記キャッシュドライバによって決定された前記第1のキューに前記第2の書込要求を登録することを特徴とする計算機システム。
  5. 請求項2又は請求項3に記載の計算機システムであって、
    前記キャッシュドライバは、
    前記第1のキャッシュ領域が前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更された後、前記第2のキャッシュ状態である第2のキャッシュ領域を検索し、
    前記第2のフラグを操作することによって、前記第2のキャッシュ領域を前記第2のキャッシュ状態から前記第3のキャッシュ状態に変更し、
    前記キャッシュメモリシステムドライバから、前記第2の書込要求の完了が通知された場合、前記第1のフラグを操作することによって、前記第2のキャッシュ領域を前記第3のキャッシュ状態から前記第1のキャッシュ状態に変更することを特徴とする計算機システム。
  6. アプリケーションが稼働するサーバ、及び、前記アプリケーションが使用するデータを格納するストレージシステムを備える計算機システムにおけるキャッシュ管理方法であって、
    前記サーバは、第1のプロセッサ、前記第1のプロセッサに接続される第1のメモリ、前記第1のプロセッサに接続され、一時的にデータを格納するキャッシュ領域を提供するキャッシュメモリシステム、前記第1のプロセッサに接続され、前記キャッシュメモリシステムと接続するための接続インタフェース、及び前記第1のプロセッサに接続され他の装置と接続するための第1のネットワークインタフェースを有し、
    前記ストレージシステムは、第2のプロセッサ、前記第2のプロセッサに接続される第2のメモリ、及び前記第2のプロセッサに接続され、他の装置と接続するための第2のネットワークインタフェースを含むコントローラ、並びに前記コントローラに接続される複数の記憶装置を有し、
    前記第1のメモリは、前記サーバを制御するオペレーティングシステムを実現するプログラムを格納し、
    前記第2のメモリは、前記ストレージシステムを制御するストレージ制御部を実現するプログラムを格納し、
    前記オペレーティングシステムは、
    キャッシュデータを制御するキャッシュドライバ、前記キャッシュメモリシステムに対するI/O処理を制御するキャッシュメモリシステムドライバ、及び前記ストレージシステムに対するI/O処理を制御するストレージシステムドライバを含み、
    前記キャッシュメモリシステムドライバは、前記キャッシュメモリシステムに対するI/O要求を登録する第1のキューを二つ以上有し、
    前記ストレージシステムドライバは、前記ストレージシステムに対するI/O要求を登録する第2のキューを一つ以上有し、
    前記キャッシュ領域は、前記キャッシュ領域からのデータの読み出しが可能であり、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第1のキャッシュ状態、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが許可される第2のキャッシュ状態、又は、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第3のキャッシュ状態のいずれかの状態に切替可能であり、
    前記方法は、
    前記キャッシュドライバが、前記アプリケーションから、前記ストレージシステムの第1の記憶領域へのデータの書き込みを命令する第1の書込要求の登録指示を受け付けた場合、前記第1の記憶領域に格納されるデータのキャッシュデータを格納する第1のキャッシュ領域が前記第1のキャッシュ状態であるか否かを判定する第1のステップと、
    前記キャッシュドライバが、前記第1のキャッシュ領域が前記第1のキャッシュ状態であると判定された場合、前記第1のキャッシュ領域を前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更する第2のステップと、
    を含むことを特徴とするキャッシュ管理方法。
  7. 請求項6に記載のキャッシュ管理方法であって、
    前記方法は、
    前記キャッシュドライバが、前記第1のキャッシュ領域が前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更された時点における前記複数の第1のキューに登録された前記I/O要求の実行状態を監視する第3のステップと、
    前記キャッシュドライバが、前記複数の第1のキューに登録されたI/O要求に対応するI/O処理が全て完了した場合、前記第1のキャッシュ領域を前記第3のキャッシュ状態から前記第2のキャッシュ状態に変更することによって、当該第1のキャッシュ領域を解放する第4のステップと、
    を含むことを特徴とするキャッシュ管理方法。
  8. 請求項7に記載のキャッシュ管理方法であって、
    前記キャッシュドライバは、
    前記ストレージシステムの記憶領域、前記ストレージシステムの記憶領域に格納されるデータのキャッシュデータが格納される前記キャッシュ領域、前記キャッシュ領域からのデータの読み出しが可能か否かを示す第1のフラグ、及び、前記キャッシュ領域へのデータの書き込みが可能か否かを示す第2のフラグを含むキャッシュ管理情報と、
    前記複数の第1のキューに付与された識別子、及び前記複数の第1のキューの各々に登録された前記I/O要求の実行状態を示す情報を含むキャッシュキュー状態情報と、を管理し、
    前記第2のステップは、
    前記第1のフラグを操作することによって、前記第1のキャッシュ領域を前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更するステップと、
    前記第1のキャッシュ領域が前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更された時点の前記キャッシュキュー状態情報のコピーをキャッシュキュー完了状態情報として取得するステップと、
    前記第1のキャッシュ領域のアドレスを取得するステップと、
    前記キャッシュキュー完了状態情報及び前記第1のキャッシュ領域のアドレスを含むキャッシュ解放情報を生成するステップと、を含み、
    前記第3のステップは、任意の前記第1のキューに登録された前記I/O要求に対応するI/O処理が完了した場合、前記キャッシュキュー状態情報及び前記キャッシュキュー完了状態情報における当該第1のキューの実行状態を更新するステップと、
    前記キャッシュキュー完了状態情報に基づいて、前記複数の第1のキューの各々に登録されたI/O要求に対応するI/O処理が全て完了したか否かを判定するステップと、を含み、
    前記第4のステップでは、前記複数の第1のキューの各々に登録されたI/O要求に対応するI/O処理が全て完了したと判定された場合、前記第2のフラグを操作することによって、前記第1のキャッシュ領域を前記第3のキャッシュ状態から前記第2のキャッシュ状態に変更することを特徴とするキャッシュ管理方法。
  9. 請求項7又は請求項8に記載のキャッシュ管理方法であって、
    前記方法は、
    前記キャッシュドライバが、前記第2のステップの後に、前記第2のキャッシュ状態である第2のキャッシュ領域を検索するステップと、
    前記第2のキャッシュ領域へのデータの書き込みを命令する第2の書込要求を登録する第1のキューを決定するステップと、
    前記決定された第1のキューに付与される識別番号とともに、前記第2の書込要求の登録を、前記キャッシュメモリシステムドライバに指示するステップと、
    前記キャッシュメモリシステムドライバが、前記第2の書込要求の登録の指示を受け付けた場合、前記キャッシュドライバによって決定された前記第1のキューに前記第2の書込要求を登録するステップと、を含むことを特徴とするキャッシュ管理方法。
  10. 請求項7又は請求項8に記載のキャッシュ管理方法であって、
    前記方法は、
    前記キャッシュドライバが、前記第2のステップの後に、前記第2のキャッシュ状態である第2のキャッシュ領域を検索するステップと、
    前記キャッシュドライバが、前記第2のフラグを操作することによって、前記第2のキャッシュ領域を前記第2のキャッシュ状態から前記第3のキャッシュ状態に変更するステップと、
    前記キャッシュドライバが、前記キャッシュメモリシステムドライバから、前記第2の書込要求の完了が通知された場合、前記第1のフラグを操作することによって、前記第2のキャッシュ領域を前記第3のキャッシュ状態から前記第1のキャッシュ状態に変更するステップと、を含むことを特徴とするキャッシュ管理方法。
  11. アプリケーションが稼働する計算機であって、
    前記計算機は、
    プロセッサ、
    前記プロセッサに接続されるメモリ、
    前記プロセッサに接続されるキャッシュメモリシステム、
    前記プロセッサに接続され、前記キャッシュメモリシステムと接続するための接続インタフェース、及び、
    前記プロセッサに接続され、他の装置と接続するためのネットワークインタフェースを備え、
    前記第1のメモリは、前記計算機を制御するオペレーティングシステムを実現するプログラムを格納し、
    前記キャッシュメモリシステムは、前記計算機に接続されるストレージシステムに格納されるデータのキャッシュデータを一時的に格納するキャッシュ領域を含み、
    前記オペレーティングシステムは、
    前記キャッシュデータを制御するキャッシュドライバ、
    前記キャッシュメモリシステムに対するI/O処理を制御するキャッシュメモリシステムドライバ、及び、
    前記ストレージシステムに対するI/O処理を制御するストレージシステムドライバを含み、
    前記キャッシュメモリシステムドライバは、前記キャッシュメモリシステムに対するI/O要求を登録するキューを二つ以上有し、
    前記キャッシュ領域は、前記キャッシュ領域からのデータの読み出しが可能であり、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第1のキャッシュ状態、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが許可される第2のキャッシュ状態、又は、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第3のキャッシュ状態のいずれかの状態に切替可能であり、
    前記キャッシュドライバは、
    前記アプリケーションから、前記ストレージシステムの第1の記憶領域へのデータの書き込みを命令する第1の書込要求の登録指示を受け付けた場合、前記第1の記憶領域に格納されるデータのキャッシュデータを格納する第1のキャッシュ領域が前記第1のキャッシュ状態であるか否かを判定し、
    前記第1のキャッシュ領域が前記第1のキャッシュ状態であると判定された場合、前記第1のキャッシュ領域を前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更することを特徴とする計算機。
  12. 請求項11に記載の計算機であって、
    前記キャッシュドライバは、
    前記第1のキャッシュ領域が前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更された時点における前記複数の第1のキューに登録された前記I/O要求の実行状態を監視し、
    前記複数の第1のキューに登録されたI/O要求に対応するI/O処理が全て完了した場合、前記第1のキャッシュ領域を前記第3のキャッシュ状態から前記第2のキャッシュ状態に変更することによって、当該第1のキャッシュ領域を解放することを特徴とする計算機。
  13. 請求項12に記載の計算機であって、
    前記キャッシュドライバは、
    前記ストレージシステムの記憶領域、前記ストレージシステムの記憶領域に格納されるデータのキャッシュデータが格納される前記キャッシュ領域、前記キャッシュ領域からのデータの読み出しが可能か否かを示す第1のフラグ、及び、前記キャッシュ領域へのデータの書き込みが可能か否かを示す第2のフラグを含むキャッシュ管理情報と、
    前記複数の第1のキューに付与された識別子、及び前記複数の第1のキューの各々に登録された前記I/O要求の実行状態を示す情報を含むキャッシュキュー状態情報と、を管理し、
    前記キャッシュドライバは、
    前記第1のフラグを操作することによって、前記第1のキャッシュ領域を前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更し、
    前記第1のキャッシュ領域が前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更された時点の前記キャッシュキュー状態情報のコピーをキャッシュキュー完了状態情報として取得し、
    前記第1のキャッシュ領域のアドレスを取得し、
    前記キャッシュキュー完了状態情報及び前記第1のキャッシュ領域のアドレスを含むキャッシュ解放情報を生成し、
    任意の前記第1のキューに登録された前記I/O要求に対応するI/O処理が完了した場合、前記キャッシュキュー状態情報及び前記キャッシュキュー完了状態情報における当該第1のキューの実行状態を更新し、
    前記キャッシュキュー完了状態情報に基づいて、前記複数の第1のキューの各々に登録されたI/O要求に対応するI/O処理が全て完了したか否かを判定し、
    前記複数の第1のキューの各々に登録されたI/O要求に対応するI/O処理が全て完了したと判定された場合、前記第2のフラグを操作することによって、前記第1のキャッシュ領域を前記第3のキャッシュ状態から前記第2のキャッシュ状態に変更することを特徴とする計算機。
  14. 請求項12又は請求項13に記載の計算機であって、
    前記キャッシュドライバは、
    前記第1のキャッシュ領域が前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更された後、前記第2のキャッシュ状態である第2のキャッシュ領域を検索し、
    前記第2のキャッシュ領域へのデータの書き込みを命令する第2の書込要求を登録する第1のキューを決定し、
    前記決定された第1のキューに付与される識別番号とともに、前記第2の書込要求の登録を、前記キャッシュメモリシステムドライバに指示し、
    前記キャッシュメモリシステムドライバは、前記第2の書込要求の登録の指示を受け付けた場合、前記キャッシュドライバによって決定された前記第1のキューに前記第2の書込要求を登録することを特徴とする計算機。
  15. 請求項12又は請求項13に記載の計算機であって、
    前記キャッシュドライバは、
    前記第1のキャッシュ領域が前記第1のキャッシュ状態から前記第3のキャッシュ状態に変更された後、前記第2のキャッシュ状態である第2のキャッシュ領域を検索し、
    前記第2のフラグを操作することによって、当該第2のキャッシュ領域を前記第2のキャッシュ状態から前記第3のキャッシュ状態に変更し、
    前記キャッシュメモリシステムドライバから、前記第2の書込要求の完了が通知された場合、前記第1のフラグを操作することによって、前記第2のキャッシュ領域を前記第3のキャッシュ状態から前記第1のキャッシュ状態に変更することを特徴とする計算機。
JP2013155547A 2013-07-26 2013-07-26 計算機システム、キャッシュ管理方法、及び計算機 Expired - Fee Related JP6101170B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013155547A JP6101170B2 (ja) 2013-07-26 2013-07-26 計算機システム、キャッシュ管理方法、及び計算機
US14/338,366 US9336153B2 (en) 2013-07-26 2014-07-23 Computer system, cache management method, and computer

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013155547A JP6101170B2 (ja) 2013-07-26 2013-07-26 計算機システム、キャッシュ管理方法、及び計算機

Publications (2)

Publication Number Publication Date
JP2015026263A true JP2015026263A (ja) 2015-02-05
JP6101170B2 JP6101170B2 (ja) 2017-03-22

Family

ID=52391488

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013155547A Expired - Fee Related JP6101170B2 (ja) 2013-07-26 2013-07-26 計算機システム、キャッシュ管理方法、及び計算機

Country Status (2)

Country Link
US (1) US9336153B2 (ja)
JP (1) JP6101170B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015130150A (ja) * 2013-10-29 2015-07-16 シーゲイト テクノロジー エルエルシー メモリデバイスのための装置、メモリデバイスおよびメモリデバイスの制御のための方法
KR20170033480A (ko) * 2015-09-16 2017-03-27 삼성전자주식회사 스토리지 장치 및 그것을 포함하는 서버 시스템의 매칭 키 검색 방법
WO2017195324A1 (ja) * 2016-05-12 2017-11-16 株式会社日立製作所 ストレージ装置

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11082043B2 (en) 2014-10-28 2021-08-03 SK Hynix Inc. Memory device
KR102515924B1 (ko) * 2016-04-19 2023-03-30 에스케이하이닉스 주식회사 미디어 컨트롤러 및 이를 포함한 데이터 저장 장치
KR102260369B1 (ko) 2014-10-28 2021-06-03 에스케이하이닉스 주식회사 보정 회로 및 이를 포함하는 보정 장치
US11755255B2 (en) 2014-10-28 2023-09-12 SK Hynix Inc. Memory device comprising a plurality of memories sharing a resistance for impedance matching
KR102358177B1 (ko) 2015-12-24 2022-02-07 에스케이하이닉스 주식회사 제어회로 및 제어회로를 포함하는 메모리 장치
US10067903B2 (en) 2015-07-30 2018-09-04 SK Hynix Inc. Semiconductor device
US10691613B1 (en) * 2016-09-27 2020-06-23 EMC IP Holding Company LLC Caching algorithms for multiple caches
US10642532B2 (en) * 2017-02-28 2020-05-05 International Business Machines Corporation Storing data sequentially in zones in a dispersed storage network
US10838763B2 (en) 2018-07-17 2020-11-17 Xilinx, Inc. Network interface device and host processing device
US10659555B2 (en) * 2018-07-17 2020-05-19 Xilinx, Inc. Network interface device and host processing device

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007179178A (ja) * 2005-12-27 2007-07-12 Hitachi Ltd キャッシュ制御方法、装置及びプログラム
JP2008065779A (ja) * 2006-09-11 2008-03-21 Sony Corp 情報処理装置および情報処理方法、プログラム、並びに、プログラム格納媒体
JP2008234532A (ja) * 2007-03-23 2008-10-02 Nec Corp キャッシュメモリ装置及びそのキャッシュ管理方法,キャッシュ管理用プログラム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR0174711B1 (ko) 1996-04-24 1999-04-15 김광호 하드디스크 캐시의 제어방법
JP3358795B2 (ja) 1997-03-27 2002-12-24 インターナショナル・ビジネス・マシーンズ・コーポレーション ディスクドライブ装置及びその制御方法
JP2012078939A (ja) 2010-09-30 2012-04-19 Toshiba Corp 情報処理装置およびキャッシュ制御方法
US8321635B2 (en) * 2010-11-08 2012-11-27 Lsi Corporation Synchronizing commands for preventing data corruption

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007179178A (ja) * 2005-12-27 2007-07-12 Hitachi Ltd キャッシュ制御方法、装置及びプログラム
JP2008065779A (ja) * 2006-09-11 2008-03-21 Sony Corp 情報処理装置および情報処理方法、プログラム、並びに、プログラム格納媒体
JP2008234532A (ja) * 2007-03-23 2008-10-02 Nec Corp キャッシュメモリ装置及びそのキャッシュ管理方法,キャッシュ管理用プログラム

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015130150A (ja) * 2013-10-29 2015-07-16 シーゲイト テクノロジー エルエルシー メモリデバイスのための装置、メモリデバイスおよびメモリデバイスの制御のための方法
KR20170033480A (ko) * 2015-09-16 2017-03-27 삼성전자주식회사 스토리지 장치 및 그것을 포함하는 서버 시스템의 매칭 키 검색 방법
US10162568B2 (en) 2015-09-16 2018-12-25 Samsung Electronics Co., Ltd. Method for searching matching key of storage device and server system including the same
KR102435863B1 (ko) 2015-09-16 2022-08-25 삼성전자주식회사 스토리지 장치 및 그것을 포함하는 서버 시스템의 매칭 키 검색 방법
WO2017195324A1 (ja) * 2016-05-12 2017-11-16 株式会社日立製作所 ストレージ装置
JPWO2017195324A1 (ja) * 2016-05-12 2018-11-08 株式会社日立製作所 ストレージ装置

Also Published As

Publication number Publication date
US20150032965A1 (en) 2015-01-29
US9336153B2 (en) 2016-05-10
JP6101170B2 (ja) 2017-03-22

Similar Documents

Publication Publication Date Title
JP6101170B2 (ja) 計算機システム、キャッシュ管理方法、及び計算機
US10678432B1 (en) User space and kernel space access to memory devices through private queues
US8176220B2 (en) Processor-bus-connected flash storage nodes with caching to support concurrent DMA accesses from multiple processors
US20210089343A1 (en) Information processing apparatus and information processing method
EP3037950A1 (en) Data write request handling method and storage array
US20140095769A1 (en) Flash memory dual in-line memory module management
JP2014130420A (ja) 計算機システム及び計算機の制御方法
EP3037949B1 (en) Data duplication method and storage array
JP6106028B2 (ja) サーバ及びキャッシュ制御方法
JP2018022345A (ja) 情報処理システム
US9489295B2 (en) Information processing apparatus and method
US9335935B2 (en) Enhanced interface to firmware operating in a solid state drive
US20170371804A1 (en) Method for Writing Multiple Copies into Storage Device, and Storage Device
US11080192B2 (en) Storage system and storage control method
JPWO2008149657A1 (ja) 入出力制御システム、入出力制御方法、及び、入出力制御プログラム
US11016698B2 (en) Storage system that copies write data to another storage system
JP5334048B2 (ja) メモリ装置および計算機
WO2016088372A1 (ja) アクセス装置、マイグレーション装置、分散ストレージシステム、アクセス方法及びコンピュータ読み取り可能記録媒体
US9529721B2 (en) Control device, and storage system
US9858205B2 (en) Systems and methods for cache management for universal serial bus systems
JP6200100B2 (ja) 計算機システム
US10705905B2 (en) Software-assisted fine-grained data protection for non-volatile memory storage devices
JP2017156907A (ja) 情報処理装置、情報処理方法およびプログラム
KR20220014272A (ko) 복사 명령 처리 시스템 및 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20151120

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161014

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161025

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161220

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170224

R150 Certificate of patent or registration of utility model

Ref document number: 6101170

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees