JP6750011B2 - 情報処理システム - Google Patents

情報処理システム Download PDF

Info

Publication number
JP6750011B2
JP6750011B2 JP2018523089A JP2018523089A JP6750011B2 JP 6750011 B2 JP6750011 B2 JP 6750011B2 JP 2018523089 A JP2018523089 A JP 2018523089A JP 2018523089 A JP2018523089 A JP 2018523089A JP 6750011 B2 JP6750011 B2 JP 6750011B2
Authority
JP
Japan
Prior art keywords
data
write
parity
new
new data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2018523089A
Other languages
English (en)
Other versions
JPWO2017216887A1 (ja
Inventor
美保 今崎
美保 今崎
山本 彰
山本  彰
朋宏 吉原
朋宏 吉原
講平 鑪
講平 鑪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
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
Publication of JPWO2017216887A1 publication Critical patent/JPWO2017216887A1/ja
Application granted granted Critical
Publication of JP6750011B2 publication Critical patent/JP6750011B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • 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/0871Allocation or management of cache space
    • 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/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/1019Fast writes, i.e. signaling the host that a write is done before data is written to disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/26Using a specific storage system architecture
    • G06F2212/261Storage comprising a plurality of storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/30Providing cache or TLB in specific location of a processing system
    • G06F2212/304In main memory subsystem
    • G06F2212/3042In main memory subsystem being part of a memory device, e.g. cache DRAM

Landscapes

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

Description

本発明は、ライト性能を高速化する情報処理システムに関する。
近年、インターネットバンキングや電子商取引で利用されるOLTP(Online Transaction Process)処理される大量のデータを蓄積するデータベース(Database、DB)としてストレージ装置の記憶デバイスに高速アクセス可能なNAND型フラッシュメモリを記憶媒体とするSSD(Solid State Drive)の採用が増加している。OLTP処理は、リアルタイムに大量のデータを高速にリード/ライトする必要がある。SSDはHDD(Hard Disk Drive)と比較して高速にアクセスすることができ、ストレージ装置の記憶デバイスとして搭載することで、ストレージ装置を高速化できる。
特許文献1には、ユーザデータにパリティ等の冗長データを付与してHDDに記憶するストレージ装置の高速化技術として、高速アクセス可能なDRAM(Dynamic Random Access Memory)をキャッシュメモリとして利用し、ライト処理を高速化する技術が開示されている。
US2011/0153954号
特許文献1には、DRAMをキャッシュメモリとして利用し、ライト処理を高速化する技術として、下記の技術が記載されている。
ホストからライト要求があったデータ(以下、新データ)をHDDに格納する前にキャッシュメモリに格納し、キャッシュメモリに格納するとホストにライト要求に対する応答を返す。そして、ホストからのライト要求とは非同期のタイミングで、HDDに格納未済みの新データをキャッシュメモリの中から探し出し、新データに関するパリティを生成し、新データと生成したパリティをHDDに格納する。
要求に対する応答と、パリティ生成処理を非同期で行うと、ライト要求を受けてからホスト応答までの処理とパリティ生成してからHDDにデータを格納する処理の開始および終了する際に、それぞれの処理に必要なキャッシュメモリの領域を確保したり、解放したりする処理を重複して行わなければならなかったり、パリティ生成してからHDDにデータを格納する処理の際に、HDDに格納未済みのデータをキャッシュメモリから探し出す、というキャッシュ制御のオーバーヘッドが発生する。
HDDでは、上述のキャッシュ制御のオーバーヘッドによるプロセッサの処理効率の低下は問題にならなかったが、高速なSSDでは目立つようになった。
そこで、本発明では、SSDを利用したストレージシステムの高速化のため、キャッシュ制御によるオーバーヘッドを削減し、プロセッサの負荷を抑制することを目的としている。
上記課題を解決するための一例として、下記の構成がある。
プロセッサとメモリと複数のドライブと、を有し、
前記プロセッサは、
(1)新データのライト要求を受信すると、
(2)前記新データを前記メモリに格納し、
(3)前記ライト要求に対する応答を前記ライト要求の送信元に送信し、
(4)前記応答を送信したことに応じて、前記複数のドライブのうちの第一のドライブから前記新データによって更新される旧データと、前記複数のドライブのうちの第二のドライブから前記旧データに関する旧パリティと、を読み出して、前記メモリに格納し、
(5)前記メモリに格納した前記新データ、前記旧データ、前記旧パリティから、前記新データに関する新パリティを生成し、
(6)前記新データを前記第一のドライブに格納し、前記新パリティを前記第二のドライブに格納する、
システム。
キャッシュ制御によるオーバーヘッドを削減し、プロセッサの負荷を抑制することで、単位時間当たりに処理可能なI/O要求数が増加し、ストレージシステムの高速化が実現できる。
実施例1の概略図 実施例1のストレージシステムの構成の一例を示す図 実施例1のLDEVページ管理テーブルの一例を示す図 実施例1のJOB#管理テーブルの一例を示す図 実施例1のバッファ管理情報の一例を示す図 実施例1のバッファ領域管理の一例を示す図 実施例1のキャッシュディレクトリ情報の一例を示す図 実施例1のキャッシュブロック管理情報の一例を示す図 実施例1のキャッシュ領域管理の一例を示す図 実施例1のライト処理フローの一例を示す図 実施例1の高速ライト処理フローの一例を示す図 実施例1の通常ライト処理Frontend処理フローの一例を示す図 実施例1の通常ライト処理Backend処理フローの一例を示す図 実施例1のエラー検出処理フローの一例を示す図 実施例1のリード処理フローの一例を示す図 実施例1の通常ライト切り替え処理フローの一例を示す図 実施例2の高速ライト処理フローの一例を示す図 実施例2の他の高速ライト処理フローの一例を示す図 実施例2の他の高速ライト処理フローの一例を示す図 実施例3の概要図 実施例3のフラッシュドライブの構成の一例を示す図 実施例3の高速ライト処理フローの一例を示す図 実施例3の通常ライト切り替え処理フローの一例を示す図 実施例1におけるメニュー画面、管理画面の一例を示す図
以下、実施例を説明する。
<概要>
図1は、本実施例の概要を示す図である。
ストレージシステム42は、プロセッサ14とメモリ18を含むストレージコントローラ12と、複数のドライブ26を有し、例えば、SAN(Storage Area Network)のような通信ネットワークを介してホスト10と接続される。
以下の説明において、ライト処理においてプロセッサ14が、ホスト10からのライト要求に対して応答したことに応じて、新パリティを生成し、新データと新パリティをドライブ26に格納することを、「高速ライト処理」という。以下、ストレージシステム42のプロセッサ14がホスト10からライト要求を受信した場合に行われる「高速ライト処理」について説明する。
プロセッサ14は、(1)ホスト10から新データ100のライト要求を受けると、(2)新データ100をメモリ18の所定の領域に格納し、(3)ライト要求に対する応答をホスト10に送信する。(4)ホスト10に応答を送信したことに応じて、新データ100によって更新される旧データ102と、旧データに関する旧パリティ104と、をそれぞれ格納しているドライブ26からメモリ18に読み出す。
(5)新データ100と、読み出した旧データ102、旧パリティ104から新データ100に関する新パリティ106を生成し、(6)旧データ102と旧パリティ104が格納されていたそれぞれのドライブ26に新データ100と新パリティ106を格納する。以上、で高速ライト処理を終了とする。
本実施例の高速ライト処理は、プロセッサ14が、ホスト10からのライト要求に対して応答したことに応じて、新パリティを生成し、新データと新パリティをドライブ26に格納する。本実施例の高速ライト処理により、ホストからのライト要求に対する応答と、パリティ生成処理を非同期で行うと、FE処理とBE処理のそれぞれの開始、終了の際に、それぞれの処理に必要なキャッシュメモリの領域を確保したり、解放したりする処理を重複して行わなければならなかったり、BE処理の際に、HDDに格納未済みのデータをキャッシュメモリから探し出す、というキャッシュ制御のオーバーヘッドを削減し、プロセッサの負荷を抑制することで、単位時間当たりに処理可能なホストからの要求数が増加し、ストレージシステムの高速化が実現できる。
たとえば、ストレージシステム42に搭載するディスクが全てフラッシュドライブであるAFA(All Flash Array)においては、本実施例の高速ライト処理によりデータに対する書き込みを高速処理することができるため、フラッシュドライブの性能を引き出し、システム性能を向上することが出来る。
また、本実施例では、新データ100をメモリ18の所定の領域に格納したら、パリティ生成の処理に入る前に、先にライト要求に対する応答をホスト10に送信することもできるため、速いレスポンスが求められるOLTP処理向けデータベースに適している。
よって、本実施例によりユーザに対し高性能な大容量データベース向けプラットフォームを提供することが可能となる。
以上が本実施例の概要である。以下、本実施例を詳細に説明する。
<詳細説明>
まず、従来技術のDRAMをキャッシュメモリとして利用する技術の課題を説明する。DRAMをキャッシュメモリとして利用し、ライト処理を高速化する技術では、要求に対する応答と、パリティ生成処理を非同期で行うことのほかに、キャッシングについて記載されている。キャッシングとは、キャッシュメモリに、ホストからのアクセス頻度が高いデータを、HDDから読み出して格納しておくことで、ホストからI/O(Input / Output)要求があった場合に、当該要求に関するデータがキャッシュメモリに格納されていれば、HDDに直接アクセスするよりも処理を高速化することができる、という技術である。そのため、プロセッサはまず、キャッシュメモリに当該要求に関するデータが格納されているか否かを探索する。
しかし、ライト処理高速化のためのキャッシュメモリの制御のためにプロセッサのオーバーヘッドが発生するという課題がある。
オーバーヘッドとは、たとえば、キャッシュメモリに格納されているデータの管理である。データを管理するためには、データを探し出すための、多くの管理情報の作成および更新が必要となる。また、新データに関するパリティを生成する際には、生成に必要なデータをHDDから読出してキャッシュメモリに格納するため、生成に必要なデータについても管理情報の作成または更新が必要である。他に、要求に対する応答とは非同期のタイミングでキャッシュメモリからHDDにデータを格納するために、HDDにデータを格納する際に、多くの管理情報に基づいてHDDに格納されていないデータを探し出す、という処理もオーバーヘッドになる。
そこで、本実施例では、上述のキャッシュ制御によるオーバーヘッドを削減し、プロセッサの負荷を抑制するための構成について説明する。
図2は、本実施例のストレージシステムの構成例を示す図である。
ストレージシステム42は、ストレージコントローラ12と、ドライブグループ28を有する。ストレージコントローラ12は、故障時に備えてN重(Nは2以上の整数)に冗長化される。冗長度は設計ポリシーに依存し、本実施例では、ストレージコントローラ12を二重化した例を示す。
ストレージコントローラ12は、プロセッサ14とメモリ18と、通信インターフェースとしてFE I/F52とBE I/F54を有する。
FE I/F52は、図1のホスト10と通信ネットワークを介して接続されており、外部デバイスと通信するためのインターフェースデバイスである。ストレージコントローラ12は、FE I/F52を介して、ホスト10からのI/O(リード、または、ライト)要求を受信する。BE I/F54は、ストレージコントローラ12がドライブ26と通信するためのインターフェースデバイスである。
メモリ18は、プログラム領域24、バッファ領域20、キャッシュ領域22、管理テーブル領域30を有する。本実施例では、メモリ18は、DRAMにより構成されが、その他に、例えばSRAM(Static Random Access Memory)などでも良い。 プログラム領域24には、たとえばライトプログラム、リードプログラムなど、ストレージ制御プログラムが格納されている。
プロセッサ14は、メモリ18のプログラム領域24に格納されているプログラムを実行することで、各種処理を実施する。
バッファ領域20は、ホスト10からライト要求があったデータ(以下、新データ)や、ドライブ26から読み出されたデータが一時的に格納される記憶領域である。バッファ領域20から読み出されたデータは、バッファ領域20から削除、または削除可能な状態にされるようになっている。
キャッシュ領域22にも、新データや、ドライブ26から読み出されたデータが一時的に格納される。本実施例では、キャッシュ領域22からデータが読み出されたからといって、必ずしもキャッシュ領域22からデータが削除されるわけではない点が、バッファ領域20との違いの一つである。
本実施例において、バッファ領域20とキャッシュ領域22において、ホスト10からのライトからのライト要求に基づいてドライブ26に格納される新データがキャッシュ領域書き込まれる領域を「ライト面」、ドライブ26から読み出されたデータが書き込まれる領域を「リード面」と表現する場合がある。本実施例の説明において特段説明が無い場合、ライト面およびリード面は、バッファ領域20またはキャッシュ領域22に存在する。
管理テーブル領域30は、バッファ領域管理テーブル32、キャッシュ領域管理テーブル34、キャッシュディレクトリ管理テーブル35、LDEVページ理テーブル36、JOB#管理テーブル38が格納されている。これらのテーブルの詳細は、後述する。
ドライブグループ28は、複数のドライブ26とSW(Switch)56を有する。それぞれのドライブ26は、SW56を介してストレージコントローラ12のBE I/F54に接続される。本実施例では、ドライブ26は、例えばSSDのような高速アクセス可能な記憶デバイスを想定しているが、HDDなど他の種類の記憶デバイスとの混在でも良い。また、ドライブグループ28は、異なる種類の記憶デバイス、たとえば、SSDとHDDとを有していていも良い。
なお、本実施例では、NAND型フラッシュメモリを記憶媒体とするSSDを例とするが、記憶媒体は追記型の不揮発性半導体メモリであればよく、例えばMRAM(Magnetic Random Access Memory:磁気抵抗メモリ)、PRAM(Phase Change Random Access Memory:相変化メモリ)、ReRAM(Resistance Random Access Memory:抵抗変化メモリ)などであってもよい。 なお、本実施例ではホスト10が通信ネットワークを介してストレージコントローラ12に接続されている例を示すが、ストレージシステム42のハードウェア構成は、サーバと同様の構成であってもよい。たとえば上の実施例で説明したストレージシステム42に代えて、パーソナルコンピュータ等の汎用のコンピュータ(以下、これを単に「コンピュータ」と呼ぶ)に複数のドライブ26または複数のドライブグループ28を搭載(または接続)し、コンピュータ上で、上で説明した各種プログラムを実行させてもよい。この場合、コンピュータがサーバからI/O要求を受け付けて、ドライブへのデータの格納、またはドライブからのデータの読み出しを行う。
また、コンピュータ上で、上で説明した各種プログラムを実行させる構成の場合、上で述べた実施例で説明した、実ストレージシステム上で実行される各種プログラムとサーバで実行されるプログラムがいずれも、同一コンピュータ上で実行されるように構成されていてもよい。この場合、たとえば仮想マシンを形成するハイパーバイザプログラムをコンピュータ上で実行することで、コンピュータ上に少なくとも、サーバで実行されるプログラムを実行する仮想マシンと、上の実施例で説明した各種プログラムを実行する仮想マシンとを形成するとよい。
図3は、本実施例にかかるLDEVページ管理テーブル36の一例を示す。ホスト10からのI/O要求には、I/O先情報が含まれる。I/O先情報とは、ライト要求の場合は新データを格納するLDEV#200とLDEV内のアドレス、リード要求の場合は読み出したいデータが格納されているLDEV#200とLDEV内のアドレスを表す情報である。
LDEVページ管理テーブル36には、ストレージシステム42内に作成された論理Volume(図示しない)であるLDEV#200の情報が管理されている。LDEVは、一定サイズのブロックと呼ばれる単位で論理的に管理され、各ブロックにはブロック#202が付与されている。ブロックよりもさらに小さいサイズのものをサブブロックと定義し、これらにもサブブロック#204が付与されている。LDEVページ管理テーブル36では、各サブブロック#204に対し、メモリ18上のデータ格納位置を表す物理アドレスの先頭アドレス#206、格納先のドライブ種別208、ライト処理中かどうかを識別するライト処理中フラグ210、が管理されている。図3において、ドライブ種別208にはSSDのみが記載されているが、これは一例である。
図4は、本実施例に係るJOB#管理テーブル38の一例を示す。JOBとは、1I/Oを処理するためにストレージソフトウェアが実行するプログラムの単位で、各JOBはプロセッサ14内で一意に特定できるJOB#を持っている。本実施例では、I/O処理が高速ライト処理である場合には、JOB#230の他に、高速ライトJOB#231が付与される。
JOB#管理テーブルは、空きJOB#キュー226、空き高速ライトJOB#キュー227、JOBアクセス先情報228、を有する。
JOB#、高速ライトJOB#はキューで管理され、プロセッサ14は、ホスト10からI/O要求を受信すると、空きJOB#キュー226からデキューしてJOB#を取得する。空きJOB#キュー226にJOB#0とJOB#1がエンキューされている状態を示している。例えば、JOB#2に係るI/O要求の処理が終了するとJOB#2が返却され、JOB#2が空きJOB#キューポインタ220へエンキューされる。
高速ライト処理する場合は、さらに、空き高速ライトJOB#キュー227からデキューして高速ライトJOB#を取得する。高速ライトJOB#も、JOB#と同様に空き管理され、高速ライトJOB#2に係るI/O要求の処理が終了すると高速ライトJOB#2が返却され、高速ライトJOB#2が空き高速ライトJOB#キューポインタ221へエンキューされる。
JOBアクセス先情報228は、取得したJOB#のアクセス先を管理される。JOB#230に対し、I/O先であるLDEVの先頭サブブロック#232、I/Oデータのデータサイズ234、高速ライトJOB#231の情報が格納されている。
なお、本実施例では上述のように、通常のI/O処理と高速ライト処理を区別するため、高速ライト処理の場合には、JOB#と高速ライトJOB#の両方を付与する。高速ライト処理に必要なプロセッサやメモリなどのリソースの使用量に応じて高速ライト処理を実行できる処理数、すなわち、高速ライトJOB#の数を制限しているためである。
しかし、高速ライト処理の場合にも、JOB#だけの付与でもよく、高速JOB#の付与のための処理の簡略化や、JOBアクセス先情報228の情報量を簡素化することが可能である。
図5、6を用いて、本実施例におけるバッファ領域20の管理、図7〜9を用いて本実施例におけるキャッシュ領域の管理、について説明する。本実施例の高速ライト処理は、新データ、旧データ、旧パリティ、新パリティを、バッファ領域20に格納する。
図5は、本実施例に係るバッファ領域管理情報170の図である。バッファ領域20は、所定の単位(以下、バッファブロック171)毎で論理的に管理される。また、バッファブロックは、さらに小さいサイズのバッファサブブロック(図示しない)に分割されている。バッファ領域管理情報170は、バッファブロック毎のバッファブロック管理情報176と、バッファ領域容量使用率181を含む。
バッファブロック管理情報176は、ステータス情報178、エラー情報180、リード情報182、ライト面の先頭アドレス#及びブロック#183、リード面の先頭アドレス#及びブロック#18、データ種別186、JOB#188、使用可否情報190が含まれる。
ステータス情報178は、当該バッファブロックにデータが格納されているか、パリティ生成済みか否か、格納されているデータがドライブ26に格納済みか否か、などを示す。エラー情報180は、ストレージシステムのエラーの状態を示す情報であり、エラーが発生した際に設定される。
リード情報182は、当該バッファブロックに格納されたデータに、リード要求が来たか否かを示す情報である。通常はOFFであり、リード要求がきた場合にONへ更新される。
ライト面先頭アドレス#およびブロック#183は、新データと生成する新パリティを格納するために確保したバッファ領域20内の領域のデータ格納位置を表す物理アドレスの先頭アドレス#と、論理アドレスであるブロック#を示す。リード面先頭アドレス#およびブロック#184は、新パリティ生成のためにドライブ26から読み出す旧データ、旧パリティを格納するために確保したバッファ領域20内の領域の先頭アドレス#およびバッファブロック#を示す。
データ種別186は、当該ブロックに格納されているデータが、ユーザデータかパリティかを示す。
高速ライトJOB#188は、当該バッファブロックを使用している高速ライト処理の高速ライトJOB#を示す。本実施例では、高速ライト処理に使用されるバッファ領域20内の領域は決まっており、バッファブロック#と高速ライトJOB#は一対一で対応している。ただし、バッファブロック#と高速ライトJOB#は一対一でなくても良く、高速ライト処理する際に使用可能なバッファブロックを使用することにより、バッファ領域20を有効活用することができる。 使用可否情報190は、当該バッファブロックに格納されているデータにアクセス(リードまたはライト)可能か否かを示す。
バッファ容量使用率181は、バッファ領域20に空きがあるかどうかを示す。バッファブロックごとのバッファブロック管理情報176とは別に、管理される。バッファ容量使用率181は定期的に更新してもよいし、バッファ領域20を使用したタイミングで更新しても良い。使用率に閾値を設定しておき、閾値を超えた場合は、高速ライト処理での新規処理は実施しないようにすることで、たとえば、高速ライト処理の途中でバッファの容量不足による処理の中断を避けることができる。
なお、詳細は図14〜16で後述するが、本実施例における高速ライト処理の途中で、ストレージシステムの一部が故障したり、処理がタイムアウトしたり等、エラーが起きた際、または、リード処理の割り込みが入った場合に、高速ライト処理から、図12、13で後述する通常ライト処理に切り替える場合がある。処理の切り替えに伴い、バッファ領域20に格納していたデータをキャッシュ領域22に移す処理を行う。そのため、本実施例におけるバッファ領域管理情報170は、図8で後述するブロック情報116のデータ状態140に対応する情報として、ステータス情報178を備えている。バッファ領域管理情報170においてステータス情報178を備えていることで、バッファ領域20からキャッシュ領域22にデータの移行を行うことが出来るので、データロストを防ぐことができる。
<バッファ領域の説明>
図6は、バッファ領域20の管理の一例の図である。バッファ領域20はバッファブロック単位で管理され、それぞれのバッファブロックが、バッファ領域管理テーブル32により管理される。バッファブロック171のデータ種別等はバッファ領域管理情報170が保持し、バッファの空きブロック管理は空き領域管理Bit Map(BM)172が管理する。空きブロック管理はキュー管理でも良い。
図6では、バッファ領域20のバッファブロック#2にデータが格納されている状態を示す。バッファ領域管理情報170のバッファブロック#2のバッファブロック情報176に情報が保持されており、空き領域管理BM172は、バッファブロック#2はデータ格納済みであることを示している。
<キャッシュメモリの説明>
図7、8で、本実施例にかかるキャッシュ領域22を管理するためのテーブル群を示す。キャッシュ領域22はキャッシュブロック単位で管理され、キャッシュ管理テーブル40で制御されている。テーブル群は、キャッシュブロック管理情報118と、キャッシュディレクトリ情報104を含む。
図7は、本実施例にかかるキャッシュディレクトリ情報104である。キャッシュディレクトリ情報は、プロセッサ14が、I/O先であるLDEVのサブブロック#204のデータの、キャッシュ領域22における格納状態を検索するために使用するハッシュテーブルである。つまり、キャッシュディレクトリ情報104は、キャッシュブロック管理情報118への索引である。
キャッシュディレクトリ情報104には、ハッシュ情報158、ハッシュヘッダ#0 先頭ポインタ160、ハッシュヘッダ#0 終端ポインタ162が含まれる。
ハッシュ情報158は、I/O先情報のハッシュ値と、ハッシュヘッダとの対応関係を示す情報であるハッシュヘッダの実体として、ブロック情報116のアドレスを示す先頭ポインタ160と終端ポインタ162がある。キャッシュディレクトリ情報104は、ハッシュヘッダごとに先頭ポインタ160と終端ポインタ162を持つが、後述する図9に示すように、アクセス回数が多いハッシュヘッダのポインタを厳選して別テーブルで持つ構造でもよい。この構造により、ポインタ検索時間を早くでき、データキャッシュング処理負荷を低減するためことができる。
図8は、本実施例にかかるブロック情報116およびキャッシュブロック管理情報118である。ブロック情報116は、キャッシュブロックごとの情報であり、キャッシュブロック管理情報118は、全キャッシュブロックのブロック情報116を含む。ブロック情報116は、データ状態140、エラー情報142、ディレクトリ前方ポインタ144とディレクトリ後方ポインタ146、キュー前方ポインタ148とキュー後方ポインタ150、割り当てブロック#および先頭アドレス#152、ロック中ビット154、リード面フラグ156及びライト面フラグ15を含む。
データ状態140は、クリーン、ダーティ(生成前)、ダーティ(生成後)、およびフリー、がある。当該キャッシュブロックに格納されているデータが、ドライブに格納済みである状態を「クリーン」、データに関連するパリティの生成前である状態を「ダーティ(生成前)」、パリティ生成後である状態を「ダーティ(生成後)」、当該キャッシュブロックにデータが格納されていない状態を「フリー」とする。
エラー情報142は、ストレージシステムにエラーが発生した際のエラーの状態を示す情報であり、エラーが発生した際に設定される。
ディレクトリ前方ポインタ144およびディレクトリ後方ポインタ146は、キャッシュディレクトリ情報104に接続するためのポインタである。
キュー前方ポインタ148とキュー後方ポインタ150は、図9で後述するキャッシュ割り当て管理情報120に接続するための情報である。
割り当てブロック#・先頭アドレス#152は、I/O処理に際して、実際にキャッシュ領域22にデータを格納するために確保したキャッシュブロックのキャッシュブロック#および先頭アドレス#である。
ロック中ビット154は、I/O処理に際して、確保したキャッシュブロックで当該I/O処理以外の処理が行われないようにするビットである。処理開始の契機でONにする。
リード面フラグ156またはライト面フラグ157は、それぞれ、キャッシュブロックがリード面またはライト面のいずれかに該当するかを示す。
図9は、キャッシュ領域22の管理の一例を示す。キャッシュ領域22は、キャッシュブロック毎にキャッシュ管理テーブル40で制御されている。キャッシュ管理テーブル40は、キャッシュ割り当て管理情報120、キャッシュブロック管理情報118、アドレス情報を管理するキャッシュディレクトリ情報104、使用状況情報3で構成される。
キャッシュ割り当て管理情報120は、キャッシュブロックがリード面かライト面かを管理する。キャッシュ割り当て管理情報120ではキュー管理され、キューヘッダとして「フリー」があり、リード面にもライト面にも割り当てられていないブロック情報116がエンキューされている。リード面またはライト面に割当られたキャッシュブロックはデキューされる。
キャッシュブロック管理情報118では、キュー管理され、キューヘッダとしてドライブに書き込み済みである状態の「クリーン」、パリティ生成前である状態の「ダーティ(生成前)」、パリティ生成後である状態の「ダーティ(生成後)」、割り当てられていないブロックである状態の「フリー」がある。各ブロックに対し、現状のキャッシュのデータ状態140に合致したキューヘッダのキューに、ブロック情報116のキュー前方ポインタ148をエンキューする。
キャッシュディレクトリ情報104では、ブロック情報116のアドレスを示すポインタ情報160、162が管理されている。キャッシュディレクトリ情報104は、図9に示すように、アドレス検索速度を速くするため、当該データのアドレス情報114にリンクするポインタ情報113を用いて当該データのアドレス情報114が管理されている。アドレス情報114は、ブロック情報116と1対1で対応付けられている。ハッシュテーブルであるキャッシュディレクトリ情報104のポインタ情報113を辿ることで、全てのアドレス情報114を検索することなく必要なアドレス情報114のみ素早く求められるようになっている。
使用状況情報3では、予めキャッシュ領域の容量使用率の閾値を設定しておき、使用率が閾値に達してしまい容量枯渇していないかを確認する。使用率の更新は、キャッシュ領域を確保解放したタイミングで更新しても良いし、一定時間で定期的に更新しても良い。
本実施例の高速ライト処理は、キャッシュ領域22より管理情報と制御が容易なバッファ領域20に、新データ、旧データ、旧パリティ、新パリティを格納することで、多くの管理情報の作成または更新によるオーバーヘッドを削減し、プロセッサの負荷を抑制する。
<ライト処理の説明>
図10〜13を用いて、本実施例のストレージシステム42のライト処理について説明する。
図10は、本実施例のライト処理のフローである。ライト処理は、ストレージシステム42がホスト10からライト要求を受信した場合に開始される。
ステップ241:プロセッサ14はホスト10からライトコマンドを受け取ると、JOB#管理テーブル38にアクセスしJOB#を新規取得する。
ステップ242:そして、LDEVページ管理情報36にアクセスし、当該ライト要求があった新データの格納先を示すLDEVのサブブロック#204のライト処理中フラグをONする。
ステップ244:ライト処理を、高速ライト処理で実施するか、または、通常ライト処理で実施するか、を判定する。高速ライト処理に進む条件は、例えば、新データのサイズがサブブロックサイズ以下であること、複数のサブブロックに跨ったライトではないこと、バッファ領域容量使用率181が閾値を超えていないこと、高速ライトJOB#が枯渇していないこと等がある。これらの条件は、ストレージシステム42のポリシーによって変更しても良い。高速ライト処理での処理「可」となった場合は、ステップ255へ、高速ライト処理での処理「否」となった場合は、通常ライト処理Frontend処理ステップ246へ進む。
ステップ255:高速ライト処理での処理「可」となった場合は、高速ライト処理用の高速ライトJOB#を付与する。JOB#管理情報38にアクセスして高速ライトJOB#を新規取得する。JOBアクセス先情報228の、ステップ241で取得したJOB#の、高速ライトJOB#231に情報に追記する。その後、高速ライト処理ステップ256に進む。高速ライト処理ステップ256は図11で説明する。
ステップ246:高速ライト処理での処理「否」となった場合は、キャッシュ領域22を使用した通常ライト処理のFrontend処理を実施する。Frontend処理とは、ホスト10からの新データをキャッシュ領域22に書き込み、ホスト10へライト要求に対して応答するまでの処理である。詳細は、図12で説明する。
ステップ260:ステップ246でホスト10に応答をすると、LDEVページ管理テーブル36にアクセスし、ステップ242でONにした当該サブブロック#204のライト処理フラグ210をOFFする。
ステップ25:その後、キャッシュ領域22を使用した通常ライト処理のBackend処理の実施可否を判定する。通常ライト処理のBackend処理とは、キャッシュ領域22に格納した新データに関する新パリティを生成し、新データと新パリティをドライブ26へ書き込む処理である。ステップ25の判定は周期的に行う。Backend処理が「可」となるのは、例えば、キャッシュ領域22の容量使用率が閾値を超えた場合や、プロセッサ14のアイドルタイムである。また、前回のBackend処理の実施から所定の時間が経過したら、次のBackend処理を実施するなどでもよい。「可」の場合はステップ25へ、「不可」の場合は、再度ステップ25の判定に戻る。
ステップ25:ステップ250でBackend処理が実施「可」の場合は、LDEVページ管理テーブル36にアクセスし、ステップ260でOFFにした当該サブブロック#204のライト処理フラグ210をONする。
ステップ25:そして、キャッシュ領域22を使用した通常ライト処理のBackend処理を実施する。詳細は図13で説明する。
ステップ260:高速ライト処理(ステップ256)または通常ライト処理のBackend処理(ステップ25)が終わると、LDEVページ管理テーブル36にアクセスし、当該サブブロック#204のライト処理フラグ210をOFFする。
ステップ248:そして、ステップ241で取得したJOB#を解放する。具体的には、JOB#管理テーブル38にアクセスし、JOBアクセス先情報228の、ステップ241で取得した当該JOB#230の情報を削除する。
以上で、本実施例のライト処理が完了となる。
<高速ライト処理>
図11は、本実施例における高速ライト処理のフローを示す。
図1で説明したように、本実施例の高速ライト処理は、プロセッサ14が、ホスト10からのライト要求に対して応答したことに応じて、新パリティを生成し、新データと新パリティをドライブ26に格納する。
また、ホスト10からの新データ100と、新パリティ106を生成するためにドライブ26から読み出す旧データ102、旧パリティ104を、従来のキャッシングのようにキャッシュ領域22に格納するのではなく、本実施例では、バッファ領域20に格納する。
上述の本実施例の処理により、ホストからのライト要求に対する応答と、パリティ生成処理を非同期で行うと、FE処理とBE処理のそれぞれの開始、終了の際に、それぞれの処理に必要なキャッシュメモリの領域を確保したり、解放したりする処理を重複して行わなければならなかったり、BE処理の際に、HDDに格納未済みのデータをキャッシュメモリ探し出す、というキャッシュ制御のオーバーヘッドを削減することができる。また、新データ100、旧データ102、旧パリティ104、新パリティ106をバッファ領域20に格納するため、キャッシュ領域22の管理情報の作成および更新が不要となる点でも、キャッシュ制御のオーバーヘッドを削減することができる。
高速ライト処理(ステップ256)は、ホスト10からライト要求を受け、図10のステップ244でライト高速処理での処理「可」と判断された場合に開始される。
ステップ360:バッファ領域20に、新データ、新パリティを格納するための領域であるライト面、旧データ、旧パリティを格納するための領域であるリード面を確保する。具体的には、ステップ255で取得した高速ライト処理JOB#に対応するバッファブロックのバッファブロック管理情報176にアクセスし、初期値を設定し、当該バッファブロックの空き領域管理BM172をONにする。
従来は、ライト要求とは非同期で新パリティの生成と新データおよび新パリティのドライブへの格納を行うため、ホスト10からデータが転送される前は、新データを格納する領域のみを確保していた。従来のように新データを格納する領域のみ確保して本実施例の高速ライト処理を行うと、たとえば新パリティ106を生成する処理の前にバッファ領域20の容量が枯渇した場合、旧データ102と、旧パリティ104を格納する領域を確保できずに新パリティ106を生成する処理に移れず、高速ライト処理を完了することができない。そのため、本実施例では、ホスト10からデータが転送される前に、新データ100、新パリティ106、旧データ102と、旧パリティ104とを格納する領域を確保することで、バッファ領域20の容量枯渇により処理が未完になることを防ぐ。
また、新データ100、新パリティ106を格納するためのライト面と、旧データ102、旧パリティ104を格納するためのリード面の計4サブバッファブロック分を、連続領域で確保すると、先頭アドレスと確保した領域数だけ管理しても良いため、バッファブロック管理情報176の情報の保持を簡素化できる。4サブバッファブロック連続でなくても、ライト面を計2サブバッファブロック連続、と、リード面を計2サブバッファブロック連続で確保することでも、離れた1サブバッファブロックずつそれぞれ確保するよりも管理情報の簡素化の効果がある。なお、サブバッファブロックとは、バッファブロックを、より小さい単位で管理するための単位を示す。
本実施例では、ストレージコントローラ12が故障した際のデータロストを防ぐため、ストレージコントローラ12が二重化されている。そのため、現在処理するプロセッサ14を有する(以下、自系)ストレージコントローラ12と、二重化先(以下、他系)ストレージコントローラ12それぞれで領域を確保するが、他系ストレージコントローラ12ではリード面の確保は不要である。
ステップ362:ステップ360で確保したバッファ領域20のライト面にホスト10から新データ100を転送する。具体的には、プロセッサ14は、バッファ領域20にライト面、リード面を確保すると、ホスト10に、バッファ20にデータ転送してよい旨の信号を送信し、ホスト10は当該信号を受信すると、新データ100を転送し、新データ100がバッファ領域20のライト面に格納される。
ステップ364:ステップ360で確保した他系ストレージコントローラ12のバッファ領域に、二重書きのために新データ100を転送する。データの二重書は、冗長性を確保し、ストレージシステムとしての信頼性を向上させるためである。
ステップ366:ステップ360で確保したライト面が存在するバッファブロックの、バッファブロック管理情報176のステータス情報178を更新する。具体的には、新データが書き込まれたことを示すフラグを立てても良いし、ブロックの中でどのバッファサブブロックに新データが書き込まれたかをビットマップで管理しても良い。バッファブロック管理情報の更新は、自他両方のストレージパッケージ12で実施する。
ステップ368:ホスト10に、ライト要求処理が完了したと応答をする。本実施例では、このホストへの完了応答に応じて、新パリティ生成のためのステップに進む。具体的には、以下のステップ370、ステップ372のとおりである。
ステップ370:ステップ360で確保したリード面に、ドライブ26から旧データおよび旧パリティを転送する。
ステップ372:新データ、旧データ、旧パリティをXOR演算して新パリティを作成する。新パリティは、ステップ360で確保したライト面に格納する。
ステップ374:ステップ360で確保した他系ストレージコントローラのライト面へ新パリティを転送する。
ステップ376:パリティ及びデータを格納するバッファブロックのバッファ領域管理情報170を自他両方のストレージコントローラ12で更新する。ライト面のバッファブロック管理情報176の更新内容はステップ366と同等で良い。リード面のバッファブロック管理情報176の更新内容は、ステップ366の内容に加えて、使用可否情報190を可から不可に更新する。また、新データと新パリティが記録されているサブバッファブロックのライト面フラグを、リード面フラグに切り替える。リード面に記録されている新データと新パリティを、これからドライブ26に転送するためである。
ステップ378:ドライブ26に、新データ100と新パリティ106をバッファ領域20から転送して格納する。
ステップ380:ステップ360で確保した領域を解放する。解放とは具体的には、データを0書きする。または、当該確保した領域を含むバッファブロックの空き領域管理BM172をOFFすれば良い。バッファを解放すると、当該ライト処理に関してキャッシュ領域22に格納されたデータが、バッファ領域2から消去可能な状態、または消去される。なお、バッファブロックが解放されると、当該バッファブロックに対応していたJOB#も解放される。
以上で、高速ライト処理が完了する。
<通常ライト処理 Frontend処理>
図12は、本実施例にかかるキャッシュ領域22を使用する通常ライト処理Frontend処理246フローである。
ステップ270:ホスト10からの新データを格納するキャッシュ領域を、新規で確保する必要があるか判定する。例えば、ライト要求が既にドライブ26に格納されたデータを更新するための要求であり、キャッシュ領域22に当該データが格納されている場合は、新規でキャッシュ領域22に当該データを格納する領域を確保する必要はない。判定の結果、確保要(Yes)ならばステップ272へ、確保不要(No)ならばステップ274へ進む。
ステップ272:データを格納するためのキャッシュ領域を新規に確保する。ホスト10からのデータを格納するための領域であるライト面のみを確保する。キャッシュディレクトリ情報104において、ハッシュ情報等114を確保し、ブロック情報116でダーティ(生成前)110、キャッシュ割り当て管理情報120でライト面をキューで繋ぐ。
ステップ274:ステップ272で確保した領域が存在するキャッシュブロックのロックを取得する。具体的には、ブロック情報116のロック中ビット154をONにする。ONにすることで、当該キャッシュブロックに対し、例えばリード処理などの他処理が実施されない様にする。
ステップ276:ホスト10から書き込み対象のデータである新データを当該キャッシュ領域2に格納する。その後、ステップ278へ進む。
ステップ278:ストレージコントローラ12が故障した際のデータロストを防ぐため、他系ストレージコントローラ12のキャッシュ領域に新データを転送する。他系ストレージコントローラ12におけるキャッシュブロックの確保およびロック取得は、それぞれステップ272および274で実施する。
ステップ280:ブロック情報116のデータ情報140に、新データがキャッシュ領域22に書き込みが完了したことを示す情報を格納する。新データの書き込みが完了したことを示す情報は、新データが書き込まれたことが分かるフラグでも良いし、ブロックの中でどのサブブロックに新データが書き込まれたか管理するビットマップでも良い。ブロック情報116の更新は、自系他系両方のストレージコントローラ12で実施する。
ステップ282:ホスト10に、ライト処理が完了したことを応答する。
ステップ284:ステップ274でONにしたブロック情報116のキャッシュ領域ロック中ビット154をOFFにする。
以上で、通常ライト処理のFrontend処理が完了する。通常ライト処理では、ライト要求とは非同期でパリティ生成を行うため、Frontend処理が完了しても新データ100はキャッシュ領域22に格納されたままであるため、確保したキャッシュ領域は解放しない。
<通常ライト処理 Backend処理>
図13は、本実施例にかかるキャッシュ領域22を使用する通常ライト処理Backend処理258のフローである。本実施例では、一例としてRAID5構成のケースを想定しているが、RAID6等の他のRAID構成であっても構わない。
ステップ290:新パリティを生成するためにドライブ26から読み出す旧データと旧パリティを格納するキャッシュ領域と、生成した新パリティを格納するキャッシュ領域を確保し、ロックを取得する。自系と他系のストレージコントローラ12のそれぞれで、キャッシュ領域2の確保およびロック取得を実施する。
ステップ291:ステップ284で解放した新データ用キャッシュ領域のロックを取得する。当該Backend処理中に、新データ用キャッシュ領域に他の処理が実施されないようにするためである。
ステップ292:ステップ290で確保した旧パリティ用、旧データ用キャッシュ領域にそれぞれ旧パリティと旧データを格納する。旧パリティおよび旧データの転送は自系のストレージコントローラ12のみでよい。
ステップ294:新データと旧データと旧パリティをXOR演算し、新パリティを作成し、ステップ290で確保した新パリティ用キャッシュ領域に格納する。
ステップ296:作成した新パリティを他系ストレージコントローラ12の新パリティ用キャッシュ領域へ転送する。
ステップ298:パリティ及びデータを格納するブロックのブロック情報116を自系他系両方のストレージコントローラ12で更新する。パリティ用キャッシュブロックのリード面に関しては、ブロック情報116の更新内容は、ステップ280と同等で良い。ライト面に関しては、ステップ280の内容に加えて、リード面破棄処理を実施する。データ用、パリティ用それぞれのライト面に最新データが格納されているため、今後ホストから送信されるデータを格納できるようにするため、現状の旧データ・パリティが格納されているリード面は破棄し、ライト面をリード面に切り替える処理を実施する。切り替える処理とは具体的に、現状ライト面として確保された領域に対し、ライト面フラグ157をOFF、リード面フラグ156をONにして、リード面として扱えるようにする。
ステップ300:新データおよび新パリティをドライブ26へ転送する。
ステップ302:ステップ290で取得したパリティ用キャッシュブロックと、データ用キャッシュブロックのロックを解放する。ブロック情報116のロック中ビット154をOFFにすればよい。ロックの解放は自系他系ストレージコントローラで実施する。
ステップ304:ステップ290で確保した領域を含むキャッシュブロックを解放する必要があるか判定する。ステップ302でロックを解放しているので、ホスト10からのライト要求を受領することが出来る。また、ホスト10からI/O要求があった場合に、当該要求に関するデータがキャッシュメモリに格納されていれば、HDDに直接アクセスするよりも処理を高速化することができるため、ステップ302終了後すぐにキャッシュ領域を解放しなくても良く、定期的にキャッシュ領域解放処理を実施しても良いし、キャッシュ領域容量使用率が閾値に達してからでも良い。
解放要の場合はステップ306へ、解放不要の場合はステップ304の判定を繰り返す。
ステップ306:新データ用、旧データ用、旧パリティ用、新パリティ用キャッシュ領域を解放する。具体的には、キャッシュ管理テーブル34から、当該領域を含むブロック情報116、キャッシュ割り当て管理情報120、キャッシュディレクトリ情報104を削除する。
以上で、通常ライト処理Backend処理が完了する。
本実施例の高速ライト処理では、処理中にストレージシステムでエラーが発生した場合、または、新データに対してリード要求が来た場合に、高速ライト処理から通常ライト処理に切り替えて、エラー処理やリード処理を行う場合がある。そのため、図14〜16を用いて、エラーを検出した時の処理、リード要求を受けた時の処理、通常ライト処理へ切り替える処理、についてそれぞれ説明する。
<エラー検出処理>
ライト要求処理中に、ストレージシステムの一部が故障する、または、処理がタイムアウトする等のエラーが発生することがある。図14は、これらのエラーを検出した時の処理フローである。
ステップ386:エラーを検出すると、処理が中断した時に確保していたブロック情報116のエラー情報142、または、バッファブロック管理情報176のエラー情報180に、エラー状態を示す情報を格納する。エラー状態を示す情報は、例えばビットを用いる。
ステップ388:現在実施中のライト処理が高速ライト処理で処理中か否かを確認する。例えば、JOBアクセス先情報228を確認すれば、エラーが起こった時点で高速ライトJOB#が付与されていたか否かが分かるので、判断できる。Yesの場合はステップ390へ、Noの場合はステップ392へ進む。
ステップ390:現在実施中のライト処理について、高速ライト処理22で処理中の場合は、通常ライト処理に切り替え処理にすすむ。通常ライト処理に切り替えるのは、エラー処理の対応は、通常ライト処理のエラー処理対応を使用するためである。切り替え処理の詳細は、図16で説明する。
ステップ392:ステップ388で設定したエラー状態に基づいて、エラー処理を実施する。エラー処理とは例えば、プロセッサ14やメモリが故障した場合は、アラートを出したり、ドライブ26が故障した場合は、データを回復したり、または、他のドライブ26にデータを移動させたりする処理である。
<リード処理>
図15は、本実施例におけるリード処理のフローである。本実施例では、リード処理は通常ライト処理と同様にキャッシュ領域2を使用する。
リード処理は、ストレージシステム42がホスト10からリード要求を受けた場合に開始される。
ステップ420:リード要求を受けたデータがライト処理中か否かを判定する。具体的には、LDEVページ管理情報36にアクセスし、リード要求に含まれるI/O先情報に基づいて、リード対象のアドレスに該当するサブブロック#204のライト処理中フラグ210がONになっているかどうか判定する。ライト処理中フラグがON、つまりYesの場合はステップ422へ、OFF、つまりNoの場合はステップ430へ進む。
ステップ422:さらに、リード要求を受けたデータが高速ライト処理中か否かを判定する。具体的には、JOBアクセス先情報228にアクセスし、リード対象のアドレスに該当するサブブロック#204に高速ライトJOB#231が付与されているか確認する。高速ライトJOB#231が付与されている場合は、当該リード要求を受けたデータは高速ライト処理中となる。高速ライト処理中(Yes)の場合はステップ42へ、高速ライト処理中ではなく通常ライト処理中(No)の場合は再度ステップ420の判定を実施する。
ステップ424:リード対象であるデータが格納されているバッファブロックのバッファブロック管理情報176のリード情報182をONにする。
ステップ390:通常ライトへの切り替え処理390を行う。ステップ390については、図16で説明する。ステップ390終了後、再度ステップ420の判定を実施する。
ステップ430:リード対象データがライト処理中ではないので、リード処理を実施する。当該アドレスを含むブロックに既にキャッシュ領域2が割り当たっているかキャッシュ管理テーブル40にアクセスして確認する。割り当てあり(Yes)の場合はステップ434へ、割り当てなし(No)の場合はステップ432へ進む。
ステップ432:キャッシュ領域22において、リード対象データを格納するためのキャッシュ領域を確保する。
ステップ434:ステップ432で確保した領域をロックする。ブロック情報116のロック中ビット#154をONにする。
ステップ436:ドライブ26から、リード対象データをステップ434でロック取得したキャッシュ領域へ転送する。
ステップ438:ステップ436キャッシュ領域に格納したデータを、ホスト10へ転送する。 ステップ440:ホストへリード処理完了を応答する。
ステップ442:ステップ434で確保したロックを解放する。
以上で、リード処理を完了する。
<切り替え処理>
図16は、本実施例にかかる、通常ライト処理切り替え処理390の処理フローである。上述のとおり、エラーを検出した場合、リード要求を受けた場合に、通常ライト処理に切り替える際に実施する処理について説明する。
ステップ400:高速ライト処理で新データと新パリティの、ドライブ26への書き込みが完了済みか判定する。具体的には、図11ステップ380でバッファを解放処理中であれば、書き込み完了と判断する。データ書き込み完了(Yes)の場合は切り替え処理完了、データ書き込みが完了していない場合(No)は、ステップ402へ進む。
ステップ402:高速ライト処理で、新パリティ生成済みか否かを判定する。具体的には、バッファブロック管理情報176のステータス情報178を確認し判定する。新パリティ生成済みであれば、図11ステップ376のバッファ管理情報更新において、当該ステータス情報178が更新されているためである。作成済み(Yes)ならばステップ404へ、作成されていない(No)ならばステップ412へ進む。
ステップ404:バッファ領域20から新データを転送するための新データ用キャッシュ領域確保し、ロックを取得する。
ステップ406:バッファ領域20から新パリティを転送するための新パリティ用キャッシュ領域確保し、ロック取得を取得する。
ステップ408:バッファ領域20から、ステップ404、406で確保したキャッシュ領域へ、新データ及び新パリティをそれぞれコピーする。さらに、バッファ領域管理情報170から、ステップ404、406でそれぞれ確保したキャッシュ領域に対応するキャッシュ管理情報40へ、データ用及びパリティ用の管理情報176のエラー情報をコピーし、バッファ領域管理情報170のステータス情報からブロック情報116に対し適切なキューヘッダ100にキューイングし、キャッシュ割り当て管理情報120のリード面、ライト面両方にキューイングする。コピー先は自系および他系ストレージコントローラ12のそれぞれである。
ステップ410:領域確保、データおよび管理情報のコピー等の処理が完了したので、高速ライト処理から通常ライト処理へ処理を切り替える。新パリティを生成済みであるため、通常ライト処理は図13のステップ296から実施すれば良い。
ステップ412::バッファ領域20から新データを転送するための新データ用キャッシュ領域確保し、ロックを取得する。
ステップ414:ステップ408と同等の処理をおこなう。具体的には、バッファ領域20から、ステップ412で確保したキャッシュ領域へ、新データをコピーする。バッファブロック管理情報176も、キャッシュ管理テーブル40にコピーする。
ステップ416:新パリティは生成していないため、通常ライト処理は図13のステップ290から実施すれば良い。
ステップ418:バッファを解放する。図11のステップ380と同等の処理である。
以上で、処理完了である。
本実施例におけるリード処理、通常処理への切り替え処理は、以降の実施例でも同様である。
図24は、本実施例におけるメニュー画面2000、管理画面2100の一例である。メニュー画面2000は、Flash高性能モード設定エリア2001を有する。管理者は、Flash高性能モード設定エリア2001の“ENABLE”または“DISABLE”を選択することで、本実施例の高速ライト処理をイネーブル又はディセーブルすることができる。管理画面2100は、バッファ領域エリア2101を有する。バッファ領域エリア2101の「ENABLE」とは、例えば、バッファ領域20の使用率が閾値以下であり高速ライト処理が可能なことを示す。
以上が、本実施例についての説明である。
本実施例の高速ライト処理は、プロセッサ14が、ホスト10からのライト要求に対して応答したことに応じて、新パリティを生成し、新データと新パリティをドライブ26に格納することが特徴である。この特徴により、ホストからのライト要求に対する応答と、パリティ生成処理を非同期で行うと、FE処理とBE処理のそれぞれの開始、終了の際に、それぞれの処理に必要なキャッシュメモリの領域を確保したり、解放したりする処理を重複して行わなければならなかったり、BE処理の際に、HDDに格納未済みのデータをキャッシュメモリ探し出す、というキャッシュ制御のオーバーヘッドを削減することができる。
また、新データ100、旧データ102、旧パリティ104、新パリティ106をバッファ領域20に格納するため、キャッシュ領域22の管理情報の作成および更新が不要となる点でも、キャッシュ制御のオーバーヘッドを削減することができる。
よって、プロセッサの負荷を抑制することで、単位時間当たりに処理可能なホストからの要求数が増加し、ストレージシステムの高速化が実現できる。
また、先にホスト10からのライト要求に対して応答してから、新パリティを生成するため、本実施例の高速ライト処理は、速いレスポンスが求められるシステムに適している。
また、本実施例における高速ライト処理から、通常ライト処理に切り替える場合があるが、本実施例におけるバッファ領域管理情報170では、ブロック情報116のデータ状態140に対応する情報として、ステータス情報178を備えていることで、バッファ領域20からキャッシュ領域22にデータの移行を行うことが出来るので、データロストを防ぐことができる。
本実施では、高速ライト処理において、旧データ102と旧パリティ104のみをバッファ領域20に格納し、新データ100と新パリティ106はキャッシュ領域22に格納する場合について説明する。以降、実施例1と重複する説明は省略する。
旧データ102と旧パリティ104は、バッファ領域20に格納するため、従来技術と比較すると、キャッシュ領域の管理情報の作成および更新によるキャッシュ制御のオーバーヘッドを低減することができる。
また、実施例1では、高速ライト処理から通常ライト処理への切り替え時には、ライト処理の進捗にも依るが、新データ、旧データ、旧パリティ、新パリティをバッファ領域20からキャッシュ領域22にコピーし、バッファ管理情報もキャッシュ管理情報に引き継ぐ必要があった。しかし、実施例2の構成では、新データと新パリティはキャッシュ領域22に格納されるため、旧データと旧パリティのみのコピーと、管理情報のコピーを行えばよく、高速ライト処理から通常ライト処理への切り替えの負荷を低減することが出来る。または、管理情報のコピーのみ行い、旧データと旧パリティは再度ドライブからキャッシュ領域22へリードしても良い。
図17は、本実施例における高速ライト処理のフローである。実施例1の図11高速ライト処理256のフローとの差分は、ライト面をキャッシュ領域2に確保している点である。各処理について、実施例1の図11〜13で説明した内容との図11との差分を説明する。
ステップ450:高速ライト処理「可」となった場合、まず、新データおよび新パリティ用のキャッシュ領域を確保し、ロック処理を行う。実際の動作としては、通常ライト処理の図12のステップ270、272、274と同等である。
ステップ452:旧データおよび旧パリティ用バッファ領域を確保し、バッファ領域管理情報170の初期設定を実施する。詳細は、図11のステップ360と同等である。
本実施例では、リード面のみをバッファ領域20に確保するため、図5のバッファブロック管理情報176のライト面先頭アドレス#・ブロック#183、リード面先頭アドレス#・ブロック#184を、本実施例では旧データ用先頭アドレス#・ブロック#、旧パリティ用先頭アドレス#・ブロック#184とすれば良い。また、旧パリティ用と旧データ用の2領域を連続領域で確保し、先頭アドレスと確保したサブブロックの数だけ管理することで、バッファ領域管理情報170の保持が簡素化できる。
なお、本ステップのバッファ領域確保処理に時間がかかるため、ステップ368でホスト10にライト処理完了の応答をしてから、本ステップを実施する方が、ホスト10への応答時間を短くすることができる。高速ライトJOB#を設定したタイミングで、当該高速ライトJOB#に対応するバッファ領域はリザーブ済みなので、ステップ368より後でバッファ領域を確保しても、バッファ領域の枯渇により領域を確保できない、という問題は生じない。
その後、二重書きのため他系ストレージコントローラへ新データを転送し(ステップ278)、キャッシュ管理情報を更新し(ステップ280)、ホスト10へライト処理完了を応答し(ステップ368)する。
そして、ホスト10への応答に応じて、旧データおよび旧パリティを、ステップ452で確保したバッファ領域に転送して格納し(ステップ370)、新パリティを生成する(372)し、新パリティを二重書きのために他系ストレージコントローラへ転送(ステップ374)する。
ステップ454:そして、ブロック情報116のデータ情報140に、新データに関する新パリティが生成された旨、新パリティがキャッシュ領域22に格納された旨を示す情報を格納する。詳細は、図12のステップ280、図13のステップ298と同等である。
ステップ458:ステップ300で新パリティ、新データをドライブに格納した後、ステップ452で確保した旧データ用および旧パリティ用に確保したバッファ領域を解放する。詳細は、図11の380と同等である。
ステップ460:ステップ450で確保した新データ用および新パリティ用のキャッシュ領域を解放する。詳細は、図13のステップ306と同等である。
図17に示した本実施例の高速ライト処理の構成により、実施例2において上述した効果に加え、プロセッサ14が、ホスト10からのライト要求に対して応答したことに応じて新パリティを生成の処理に進むため、ホストからのライト要求に対する応答とパリティ生成処理を非同期で行うことによるFE処理とBE処理のそれぞれの開始、終了の際に、それぞれの処理に必要なキャッシュメモリの領域を確保したり、解放したりする処理を重複して行ったり、BE処理の際に、HDDに格納未済みのデータをキャッシュメモリ探し出す、というキャッシュ制御のオーバーヘッドを削減することができる。
<変形例について>
本実施例の、高速ライト処理において、旧データ102と旧パリティ104のみをバッファ領域20に格納し、新データ100と新パリティ106はキャッシュ領域22に格納する場合の変形例について説明する。
変形例では、ホスト10へのライト処理完了の応答と非同期で、新パリティ生成のための処理を行う。すなわち、高速ライト処理もFrontend処理とBackend処理を分ける。これにより、例えばリード処理が割り込まれたタイミングで高速ライト処理を通常ライト処理に切り替える回数が減り、実施例2で上述した処理切り替えの負荷低減をより効果的にすることが出来る。
本変形例のFrontend処理は、図12の通常ライト処理Frontend処理と同じであり、新データと新パリティはキャッシュメモリ22に格納される。そして、Backend処理から高速ライト処理と通常ライト処理に分岐する。
図18は本変形例のBackend処理をしめす。以下、Backend処理について、図11との差分を説明する。
Backend処理起動可と判定(ステップ250)されると、ライト要求があった新データの格納先を示すLDEVのサブブロック#204のライト処理中フラグをONする(ステップ242)。
ステップ470:高速ライト処理の可否を判定する。詳細の条件は、図9のステップ244と同じである。ステップ470で高速ライト処理が「可」となった場合はステップ255で高速ライトJOB#を取得する。「否」となった場合はステップ258で通常ライト処理Backend処理を行う。
ステップ472:ステップ470で高速ライト処理「可」となり、ステップ255で高速ライトJOB#を取得すると、高速ライト処理のBackend処理を実施する。処理の詳細は、図19で説明する。
通常ライト処理Backend処理258または、高速ライト処理Backend処理472が終了すると、ステップ242でONにしたLDEVのサブブロック#204のライト処理中フラグをOFFにし(ステップ260)、JOB#を解放する(ステップ248)。
以上で、本変形例のBackend処理が完了する。
図19は、本変形例における、高速ライト処理Backend処理のフローである。これは、実施例1の図11から、ステップ368のホスト10への完了応答以前のステップを分離したものである。以下、図11との差分を説明する。
ステップ480:新パリティ用のキャッシュ領域の確保とロック処理を行う。Frontend処理で新データ用のキャッシュ領域がすでに確保されているため、新パリティ用のみ確保する。
ステップ482:新データ用キャッシュ領域のロックを取得する。通常ライト処理Frontend処理24のステップ284で新データ用キャッシュ領域のロックを解放したためである。詳細は、図13のステップ291と同様である。
そして、旧データおよび旧パリティ用のバッファ領域を確保し(ステップ452)、旧データと旧パリティを確保したバッファ領域に格納し(ステップ370)、新パリティを生成する(372)し、新パリティを二重書きのために他系ストレージコントローラへ転送(ステップ374)する。
キャッシュ管理情報を更新し(454)、新データと新パリティをドライブに格納し(ステップ300)、ステップ452で確保した旧データおよび旧パリティ用のバッファ領域を解放し(ステップ350)、新データ用および新パリティ用のキャッシュ領域のロック解放と、領域解放を実施する(306)。
以上が、本実施例と変形例についての説明である。
本実施例では、新データと新パリティはキャッシュ領域22に格納されるため、旧データと旧パリティのみのコピーと、管理情報の引き継ぎを行えばよく、高速ライト処理から通常ライト処理への切り替えの負荷を低減することが出来る。
加えて、プロセッサ14が、ホスト10からのライト要求に対して応答したことに応じて新パリティを生成の処理に進むため、ホストからのライト要求に対する応答とパリティ生成処理を非同期で行うことによるキャッシュ制御のオーバーヘッドを削減することができる。
また、変形例では高速ライト処理もFrontend処理とBackend処理を分ける。これにより、実施例2の処理切り替えの負荷低減を、より効果的にすることができる。
実施例3では、高速ライト処理におけるパリティ演算処理を、演算処理機構を持ったフラッシュドライブ内で実施する。
図20は本実施例の概要図である。ストレージシステム42は、プロセッサ14とメモリ18を含むストレージコントローラ12と、演算処理機構を持ったフラッシュドライブ60、62を有し、例えば、SAN(Storage Area Network)のような通信ネットワークを介してホスト10と接続される。本実施例では、フラッシュドライブ1 60にはユーザデータが格納され、フラッシュドライブ2 62には、パリティが格納されている。
本実施例プロセッサ14が(1)ホスト10から新データ100のライト要求を受けると、(2)ホスト10からの新データ100は、一旦バッファ領域20に格納された後、旧データ102が格納されているフラッシュドライブ1 60へ転送される。実施例1、2では、新データのデータロストを防ぐため、ストレージコントローラ12間で二重に新データを保持していたが、実施例3では、新データが格納されているフラッシュドライブ2 62にも新データを転送することで、フラッシュドライブ60、62間で新データを二重に持ちデータロストを防ぐ。(3)フラッシュドライブ60、62に新データ100を二重書したら、プロセッサ14は、ライト要求に対する応答をホスト10に送信する。
(4)ホスト10に応答を送信したことに応じて、パリティ生成の処理を進める。本実施例では、まず、フラッシュドライブ1 60内で、新データ100と旧データ102でXOR演算して、中間データ47を生成する。(5)中間データ47をバッファ領域20を経由しフラッシュドライブ2 62へ転送する。(6)フラッシュドライブ2 62において中間データ47と旧パリティ104でXOR演算し、新パリティ106を生成する。(7)新パリティ10の生成が完了すると、最終的にはフラッシュドライブ2 62に書き込んだ新データ100は不要であるため、削除する。
本実施例では、パリティ演算処理をフラッシュドライブ内で実施するため、ストレージコントローラ12のプロセッサ14の負荷を低減することが出来、さらにメモリ18へのアクセス数が減ることでストレージコントローラ12のメモリ帯域の負荷を下げることが出来る。加えて、実施例1と同様に、ホスト10への応答に応じて新パリティ生成の処理に進むことによるストレージコントローラ12のプロセッサ14の負荷も抑制でき、単位時間当たりに処理可能なホストからの要求数が増加し、ストレージシステムの高速化が実現できる。
図21は、同実施例のフラッシュドライブ構成図である。例えば、ストレージコントローラ12のバッファ領域20に格納されたデータは、FE I/F490から、データ転送部制御部492を介し、フラッシュドライブのコントローラ494のバッファ500へ一旦格納される。その後、BE I/F514を介し、FMチップ516へ書き込まれる。なお、バッファ500はメインメモリ496と同じ領域でも構わない。
フラッシュドライブ60、62内の処理は、プロセッサ498がメインメモリ496内のフラッシュドライブ制御プログラム502の下で実施する。必要に応じて、フラッシュドライブ情報504、FMチップ情報506、物理空間を管理する物理ブロック情報508、論理空間を管理する論理ブロック論理ブロック情報510、物理空間と論理空間の対応を管理する論理物理マップ512の管理情報、バッファの容量使用率511にアクセスする。FMチップ516以外をコントローラ494と定義する。
同実施例のフラッシュドライブ60、62の管理情報である物理ブロック情報508、論理ブロック情報510、及び、論理物理マップ512の説明図である。
物理ブロック情報508は、フラッシュドライブ60、62内の物理領域を均一なサイズに区切った空間である物理ブロックを管理する。フラッシュドライブの管理ブロックと、ストレージコントローラで管理しているブロックのサイズは同じでも異なっていても良い。以下、物理ブロックとストレージコントローラ12のブロックのサイズは一致しているケースを想定する。
各物理ブロックにはIDが付与され、物理ブロックID522として、ID一覧と対応する実アドレスが管理されている。物理ブロックの空き容量は物理ブロック内空き容量524で、どのIDが空き物理ブロックなのかは空き物理ブロックキューで管理する。
論理ブロック情報510は、フラッシュドライブ60、62内の論理領域を均一なサイズに区切った空間である論理ブロックを管理する。各論理ブロックにはIDが付与され、論理ブロックIDとして、ID一覧と対応する論理アドレスが管理されている。論理ブロックサイズと物理ブロックサイズは同じであるが、論理ブロックID数は物理ブロックID数以上である。以下、論理ブロックIDとストレージコントローラ12のブロック#は一致しているケースを想定する。一致していない場合は、論理ブロックIDとストレージコントローラ12のブロック#の変換テーブルが追加で必要である。論理領域として格納可能なデータ量及び現状の使用量が、論理ブロックデータ格納量で示される。
論理物理マップ512は、論理ブロックを表す論理アドレス(Logical Block Address、以下、LBA)と、物理ブロックを表す物理アドレス(Physical Block Address、以下、PBA)の対応関係を管理する。
図22は、同実施例の高速ライト処理のフローである。全体のライト処理のフローについては、図10と同じである。但し、ステップ244:高速ライト処理可否判定の条件については、フラッシュドライブ60、62のバッファ500に空き領域があるかも追加される。
ステップ552:ホスト10からの新データを一旦格納するバッファとして、ストレージコントローラ12のバッファ領域20を確保する。ここでは新データ100を格納するための1サブブロック分だけ確保すれば良い。
ステップ554:新データにより更新される旧データが格納されているフラッシュドライブ1 60に新データを転送するためのバッファ500を確保する。
ステップ556:旧データに関する旧パリティが格納されているフラッシュドライブ2 62に新データを転送するためのバッファ500を確保する。
ステップ558:ホスト10からの新データをステップ552で格納したバッファを経由して、ステップ554及びステップ556で格納したフラッシュドライブ1 60およびフラッシュドライブ2 62のそれぞれのバッファ500に転送する。
ステップ560:フラッシュドライブ60、62への二重転送が完了したので、ステップ552で確保したストレージコントローラ12のバッファ管理情報176のステータス情報を、新データ転送済みに更新する。
ステップ562:ホスト10に、ライト処理完了応答を送信する。
ステップ564:フラッシュドライブ1 60において、新データ100と旧データ102をXOR演算し、中間データ47を生成する。中間データ47はバッファ500のみに格納すればよく、FMチップ516まで書き込む必要はない。
ステップ566:中間データ47をバッファ領域20経由しフラッシュドライブ2 62のバッファ500へ転送する。ここで転送に使用するバッファ領域20は、ステップ552で確保した領域を再利用すれば良い。
ステップ568:フラッシュドライブ2 62において、中間データ47と旧パリティ104でXOR演算し、新パリティ106を生成する。この段階で、新パリティ10はバッファ500のみに格納すればよく、FMチップ516まで書き込む必要はない。フラッシュドライブ2のプロセッサ498は、パリティ生成完了をストレージコントローラ12のプロセッサ14へ通知する。
ステップ570:ストレージコントローラのプロセッサ14は、フラッシュドライブ2 62のプロセッサ498に対し、新パリティを確定させるよう指示する。指示を受けたフラッシュドライブ2 62は、論理物理マップ512において、新パリティ106用に物理ブロックアドレスを新規確保し、旧パリティ104のLBAに対するPBAを、新パリティ106のPBAに更新、すなわち、論物マッピングの切り替えをすることで、旧パリティを破棄し、ストレージコントローラ12からも新パリティが認識できるようになる。
ステップ572:ステップ570と同じ方法で、論理物理マップ512で、旧データ102のLBAに対するPBAを新データ100のPBAに更新することで論物マッピングを切り替えて新データを確定させる。
ステップ574:ステップ552で確保したストレージコントローラ12のバッファ領域20を解放する。解放の方法は、ステップ380と同じである。その後、ステップ576へ進む。
ステップ576:新データ、新パリティ全て確定したため、ステップ556及びステップ558でデータロスト用に保持していたフラッシュドライブ2 62に格納された新データを削除し、処理完了となる。
図23は、同実施例の通常ライト処理切り替え判定580の処理フローである。
ステップ582:新パリティ106及び新データ100が確定済みか判定する。これは、フラッシュドライブ1 60及びフラッシュドライブ2 62に旧データ102があるか、もしくはストレージコントローラのバッファ管理情報176の有無を確認すれば良い。Yesならばステップ598へ、Noならばステップ272とステップ274へ進む。
ステップ272で、新データ用キャッシュ領域を確保し、ステップ274で、新データ用キャッシュ領域のロックを取得する。詳細は、図12のステップ272、274と同様である。
ステップ1100:フラッシュドライブへ新データが転送済みかを判定する。これは、フラッシュドライブ1 60 及びフラッシュドライブ2 62に新データ100があるか、または、ストレージコントローラ12のバッファ管理情報176のステータス情報178を確認すれば良い。転送済み(Yes)であればステップ596へ、転送が済んでいなければ(No)ステップ414へ進む。
ステップ414は、図16と同様の処理である。バッファ領域20から、確保したキャッシュ領域2へ、新データをコピーする。バッファブロック管理情報176も、キャッシュ管理情報にコピーする。
ステップ596:フラッシュドライブ1 60もしくはフラッシュドライブ2 62のバッファ500から、ステップ272で確保したキャッシュ領域2へ、新データをコピーする、さらに、ストレージコントローラ12の当該バッファ領域管理情報170から、前ステップで確保したキャッシュ管理情報40へ、データ用及びパリティ用の管理情報176のエラー情報をコピーし、当該バッファ領域管理情報170のステータス情報からブロック情報116に対し適切なキューヘッダ100にキューイングし、キャッシュ割り当て管理情報12のライト面124両方にキューイングする。コピー先は自他ストレージコントローラ12それぞれのキャッシュ管理テーブル40である。
ステップ592:当該ライトI/Oについて、高速ライト処理22から通常ライト処理24へ切り替える。切り替え先の通常ライト処理24は、図13のステップ290から続ければ良い。
ステップ598:フラッシュドライブ1 60のバッファ500を解放する。解放することで、新データも削除される。
ステップ590:フラッシュドライブ2 62の該バッファ500を解放する。解放することで、新データも削除される。
ステップ588:ストレージコントローラの当該バッファ領域20を解放する。解放の方法としては、図11ステップ380と同等である。
以上で、処理は完了する。
本実施例では、パリティ演算処理をフラッシュドライブ内で実施するため、ストレージコントローラ12のプロセッサ14の負荷を低減することが出来る。加えて、実施例1と同様に、ホスト10への応答に応じて新パリティ生成の処理に進むため、ライト要求とは非同期で新パリティを生成する際に新パリティを生成する必要がある新データを探し出す、というオーバーヘッドを削減し、フラッシュドライブのプロセッサ498の負荷を抑制することができ、単位時間当たりに処理可能なホストからの要求数が増加し、ストレージシステムの高速化が実現できる。
<用語の説明>
以上の説明では、「×××テーブル」の表現にて情報を説明したが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「×××テーブル」を「×××情報」と呼ぶことができる。また、以下の説明において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されてもよいし、2以上のテーブルの全部又は一部が1つのテーブルであってもよい。
また、以上の説明では、種々の対象のID(識別情報)として、番号が使用されるが、番号に代えて又は加えて他種の識別情報が使用されてもよい。
また、以上の説明では、「ドライブ」は、物理的な記憶デバイスを示し、典型的には、不揮発性の記憶デバイス(例えば補助記憶デバイス)でよく、ドライブは、例えばSSD、またはHDDでよい。
また、以上の説明では、「RAID」は、Redundant Array of Independent (or Inexpensive) Disksの略である。RAIDグループは、複数のドライブで構成され、そのRAIDグループに関連付けられたRAIDレベルに従いデータを記憶する。RAIDグループは、パリティグループと呼ばれてもよい。パリティグループは、例えば、パリティを格納するRAIDグループのことでよい。
また、以上の説明では、「LDEV」は、Logical Deviceの略である。ドライブをRAID等の制御方法で制御することによって提供される記憶領域(例えばRAIDグループ(または、パリティグループ)を用いて構成される論理装置を示し、ドライブは、LDEVを単位とする記憶領域を提供する。
また、以上の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶部(例えばメモリ)及び/又はインターフェースデバイス(例えば通信ポート)等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置又はシステムが行う処理としてもよい。また、プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ(例えばCPU)と記憶部を含み、記憶部はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。
また、以上の説明では、「ホストシステム」は、ストレージシステムにI/O(Input / Output)要求を送信するシステムであり、インターフェースデバイスと、記憶部(例えばメモリ)と、それらに接続されたプロセッサとを有してよい。ホストシステムは、1以上のホスト計算機で構成されてよい。少なくとも1つのホスト計算機は、物理的な計算機でよく、ホストシステムは、物理的なホスト計算機に加えて仮想的なホスト計算機を含んでよい。また、サーバとストレージシステムが一体型の場合、サーバ内の仮想マシンの一つが、I/O要求を送信する、という構成でもよい。
また、以上の説明では、「ストレージシステム」は、1以上のストレージ装置でよく、複数のドライブ(例えば1以上のRAIDグループ)と、複数のドライブに対するI/Oを制御するストレージコントローラとを有してよい。ストレージコントローラは、複数のドライブに接続されるバックエンドのインターフェースデバイス(BE I/F)と、ホストシステム及び管理システムのうちの少なくとも1つに接続されるフロントエンドのインターフェースデバイス(FE I/F)と、記憶部と、それらに接続されたプロセッサとを有してよい。ストレージコントローラは、冗長化されていてもよい。
また、以上の説明では、「VOL」は、論理ボリュームの略であり、論理的な記憶デバイスでよい。
以上、いくつかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
10:ホスト、42:ストレージシステム、12:ストレージコントローラ、14:プロセッサ、18:メモリ、24:プログラム領域、20:バッファ領域、22:キャッシュ領域、26:ドライブ、28:ドライブグループ、30:管理テーブル領域、32:バッファ領域管理テーブル、34:キャッシュ領域管理テーブル、35:キャッシュディレクトリ管理テーブル、36:LDEVページ管理、38:JOB#管理、52:FE I/F、54:BE I/F、56:SW、100:新データ、102:旧データ、104:旧パリティ、106:新パリティ

Claims (9)

  1. プロセッサと、メモリと、を有し、ストレージデバイスに対してデータの入出力を行う情報処理システムにおいて、
    前記メモリは、バッファ領域とキャッシュ領域を有し、
    前記プロセッサは、ライト処理を行い、
    前記ライト処理は、
    受信したライト要求にかかる新データを前記メモリに格納することと、
    前記新データによって更新される旧データと、前記旧データにかかる旧パリティを、前記ストレージデバイスから読み出して、前記メモリに格納することと、
    前記新データと、前記旧データと、前記旧パリティとに基づいて、前記新データにかかる新パリティを生成して前記メモリに格納することと、
    前記新データと、前記新パリティと、を前記ストレージデバイスに格納することと
    を含み、
    前記プロセッサは、前記新データを前記メモリのバッファ領域に格納する第1のライト処理と、前記新データを前記メモリのキャッシュ領域に格納する第2のライト処理と、を選択的に実行可能であり、
    前記第1のライト処理を実行中の新データについてリード要求を受信した場合、前記プロセッサは、前記第1のライト処理を第2のライト処理に切り替え、前記第2のライト処理にて前記キャッシュ領域に格納した新データを、前記リード要求の要求元に送信する、
    情報処理システム。
  2. 請求項1に記載の情報処理システムにおいて、
    前記プロセッサは、前記新データのライト要求を受信すると、前記第1のライト処理を行う場合、前記第1のライト処理において、前記メモリ内に、前記新データ、前記旧データ、前記旧パリティ、および、前記新パリティを格納するための格納領域を確保し、前記格納領域を確保した後に、前記新データを受領する、
    情報処理システム。
  3. 請求項1又は2に記載の情報処理システムにおいて、
    前記プロセッサは、さらに、前記第1のライト処理において、前記新パリティを、前記バッファ領域内に格納する、
    情報処理システム。
  4. 請求項1乃至3のうちのいずれか1項に記載の情報処理システムにおいて、
    前記プロセッサは、前記第1のライト処理において、前記新データ及び前記新パリティを前記ストレージデバイスに格納すると、前記バッファ領域内に格納した前記旧データおよび前記旧パリティを、前記バッファ領域から削除する、
    情報処理システム。
  5. 請求項1乃至4のうちのいずれか1項に記載の情報処理システムにおいて、
    前記プロセッサは、前記第1のライト処理において、前記新データおよび前記新パリティを、前記キャッシュ領域に格納する、
    情報処理システム。
  6. 請求項1乃至5のうちのいずれか1項に記載の情報処理システムにおいて、
    前記プロセッサは、前記第1のライト処理において、前記新データを前記キャッシュ領域に格納した場合に、応答を前記ライト要求の送信元に送信し、前記応答の送信の後に、前記新パリティの生成を行う、
    情報処理システム。
  7. 請求項1乃至5のうちのいずれか1項に記載の情報処理システムにおいて、
    前記プロセッサは、前記第1のライト処理において、前記新データを前記キャッシュ領域に格納した場合に、応答を前記ライト要求の送信元に送信し、
    前記プロセッサは、前記応答の送信とは非同期に前記新パリティの生成を行う、
    情報処理システム。
  8. 請求項1乃至7のうちのいずれか1項に記載の情報処理システムにおいて、
    前記ストレージデバイスは、データを格納する第1のストレージデバイスと、パリティを格納する第2のストレージデバイスとを有し、
    前記第1のストレージデバイスは、前記旧データを読み出すとともに、前記新データを格納し、
    前記第2のストレージデバイスは、前記旧パリティを読み出すとともに、前記新パリティを格納する、
    情報処理システム。
  9. プロセッサと、メモリと、を有する情報処理システムが、ストレージデバイスに対してデータの入出力を行う情報処理方法において、
    前記メモリは、バッファ領域とキャッシュ領域を有し、
    前記プロセッサは、ライト処理を行うようになっており、
    前記ライト処理は、
    受信したライト要求にかかる新データを前記メモリに格納することと、
    前記新データによって更新される旧データと、前記旧データにかかる旧パリティを、前記ストレージデバイスから読み出して、前記メモリに格納することと、
    前記新データと、前記旧データと、前記旧パリティとに基づいて、前記新データにかかる新パリティを生成して前記メモリに格納することと、
    前記新データと、前記新パリティと、を前記ストレージデバイスに格納することと
    を含み、
    前記プロセッサは、前記新データを前記メモリのバッファ領域に格納する第1のライト処理と、前記新データを前記メモリのキャッシュ領域に格納する第2のライト処理と、を選択的に実行可能であり、
    前記情報処理方法において、
    前記第1のライト処理を実行中の新データについてリード要求を受信した場合、前記プロセッサは、前記第1のライト処理を第2のライト処理に切り替え、
    前記プロセッサは、前記第2のライト処理にて前記キャッシュ領域に格納した新データを、前記リード要求の要求元に送信する、
    情報処理方法。
JP2018523089A 2016-06-15 2016-06-15 情報処理システム Active JP6750011B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2016/067718 WO2017216887A1 (ja) 2016-06-15 2016-06-15 情報処理システム

Publications (2)

Publication Number Publication Date
JPWO2017216887A1 JPWO2017216887A1 (ja) 2019-01-17
JP6750011B2 true JP6750011B2 (ja) 2020-09-02

Family

ID=60663054

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018523089A Active JP6750011B2 (ja) 2016-06-15 2016-06-15 情報処理システム

Country Status (3)

Country Link
US (1) US10853268B2 (ja)
JP (1) JP6750011B2 (ja)
WO (1) WO2017216887A1 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109725824A (zh) * 2017-10-27 2019-05-07 伊姆西Ip控股有限责任公司 用于向存储系统中的盘阵列写入数据的方法和设备
WO2019183958A1 (zh) * 2018-03-30 2019-10-03 华为技术有限公司 数据写入方法、客户端服务器和系统
US11151037B2 (en) * 2018-04-12 2021-10-19 International Business Machines Corporation Using track locks and stride group locks to manage cache operations
CN110147205A (zh) * 2019-05-23 2019-08-20 江苏芯盛智能科技有限公司 一种ssd及raid实现方法、系统、设备、介质
SG11202002775RA (en) 2019-09-12 2020-04-29 Alibaba Group Holding Ltd Log-structured storage systems
EP3682340A4 (en) 2019-09-12 2020-12-02 Advanced New Technologies Co., Ltd. LOG-STRUCTURED STORAGE SYSTEMS
US10942852B1 (en) 2019-09-12 2021-03-09 Advanced New Technologies Co., Ltd. Log-structured storage systems
WO2019228572A2 (en) 2019-09-12 2019-12-05 Alibaba Group Holding Limited Log-structured storage systems
WO2019228574A2 (en) 2019-09-12 2019-12-05 Alibaba Group Holding Limited Log-structured storage systems
WO2019233500A2 (en) * 2019-09-12 2019-12-12 Alibaba Group Holding Limited Log-structured storage systems
CN115398874A (zh) 2019-09-12 2022-11-25 创新先进技术有限公司 日志结构存储系统
WO2019228570A2 (en) 2019-09-12 2019-12-05 Alibaba Group Holding Limited Log-structured storage systems
CN111886582A (zh) 2019-09-12 2020-11-03 创新先进技术有限公司 日志结构存储系统
US11550728B2 (en) * 2019-09-27 2023-01-10 Advanced Micro Devices, Inc. System and method for page table caching memory
US11126378B1 (en) 2020-05-27 2021-09-21 Western Digital Technologies, Inc. Rate limit on the transitions of zones to open
US11194521B1 (en) * 2020-05-27 2021-12-07 Western Digital Technologies, Inc. Rate limit on the transitions of streams to open
US20230229556A1 (en) * 2022-01-19 2023-07-20 Micron Technology, Inc. Parity cache for raid reliability, accessibility, and serviceability of a memory device

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3409859B2 (ja) * 1991-01-31 2003-05-26 株式会社日立製作所 制御装置の制御方法
US5579474A (en) * 1992-12-28 1996-11-26 Hitachi, Ltd. Disk array system and its control method
US5870625A (en) * 1995-12-11 1999-02-09 Industrial Technology Research Institute Non-blocking memory write/read mechanism by combining two pending commands write and read in buffer and executing the combined command in advance of other pending command
JPH1031563A (ja) * 1996-07-16 1998-02-03 Hitachi Ltd 記憶装置
JPH10269695A (ja) * 1997-03-25 1998-10-09 Hitachi Ltd コンピュータシステムにおける記憶装置の制御方式
US6012123A (en) * 1997-06-10 2000-01-04 Adaptec Inc External I/O controller system for an independent access parity disk array
US6243795B1 (en) 1998-08-04 2001-06-05 The Board Of Governors For Higher Education, State Of Rhode Island And Providence Plantations Redundant, asymmetrically parallel disk cache for a data storage system
US6370611B1 (en) * 2000-04-04 2002-04-09 Compaq Computer Corporation Raid XOR operations to synchronous DRAM using a read buffer and pipelining of synchronous DRAM burst read data
JP2004213470A (ja) * 2003-01-07 2004-07-29 Nec Corp ディスクアレイ装置及びディスクアレイ装置におけるデータ書き込み方法
US7188219B2 (en) * 2004-01-30 2007-03-06 Micron Technology, Inc. Buffer control system and method for a memory system having outstanding read and write request buffers
US7231497B2 (en) * 2004-06-15 2007-06-12 Intel Corporation Merging write-back and write-through cache policies
US7366846B2 (en) * 2005-01-14 2008-04-29 International Business Machines Corporation Redirection of storage access requests
TWI320139B (en) * 2005-08-01 2010-02-01 Method for improving writing data efficiency and storage subsystem and system implementing the same
JP4977583B2 (ja) 2007-11-22 2012-07-18 株式会社日立製作所 記憶制御装置及び記憶制御装置の制御方法
JP5245472B2 (ja) * 2008-03-13 2013-07-24 富士通株式会社 制御方法、ディスクアレイ装置
US7774522B2 (en) * 2008-11-17 2010-08-10 Applied Micro Circuits Corporation Cache stashing processor control messages
WO2010131373A1 (en) 2009-05-15 2010-11-18 Hitachi,Ltd. Storage subsystem
US8285931B2 (en) * 2010-02-26 2012-10-09 Red Hat, Inc. Methods for reducing cache memory pollution during parity calculations of RAID data
JP6017065B2 (ja) * 2013-01-31 2016-10-26 株式会社日立製作所 ストレージシステム及びキャッシュコントロール方法
US20150339058A1 (en) 2013-03-26 2015-11-26 Hitachi, Ltd. Storage system and control method
US20170286114A1 (en) * 2016-04-02 2017-10-05 Intel Corporation Processors, methods, and systems to allocate load and store buffers based on instruction type

Also Published As

Publication number Publication date
JPWO2017216887A1 (ja) 2019-01-17
US10853268B2 (en) 2020-12-01
US20190012270A1 (en) 2019-01-10
WO2017216887A1 (ja) 2017-12-21

Similar Documents

Publication Publication Date Title
JP6750011B2 (ja) 情報処理システム
US11163699B2 (en) Managing least recently used cache using reduced memory footprint sequence container
CN107967124B (zh) 一种分布式持久性内存存储系统及方法
US9983993B2 (en) Apparatus, system, and method for conditional and atomic storage operations
US9442844B2 (en) Apparatus, system, and method for a storage layer
US9606914B2 (en) Apparatus, system, and method for allocating storage
JP5937697B2 (ja) ストレージシステム
US10133663B2 (en) Systems and methods for persistent address space management
US9251086B2 (en) Apparatus, system, and method for managing a cache
US9223655B2 (en) Storage system and method for controlling storage system
CN111587423A (zh) 分布式存储系统的分层数据策略
US10740189B2 (en) Distributed storage system
WO2015141219A1 (ja) ストレージシステム、制御装置、記憶装置、データアクセス方法及びプログラム記録媒体
JP6163588B2 (ja) ストレージシステム
CN112346658B (zh) 在具有高速缓存体系结构的存储设备中提高数据热量跟踪分辨率
US11782842B1 (en) Techniques for reclaiming dirty cache pages

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180904

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180904

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20191023

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20191220

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200217

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200623

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200629

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200812

R150 Certificate of patent or registration of utility model

Ref document number: 6750011

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150