JP2020071583A - データ管理装置、データ管理方法、及びデータ管理プログラム - Google Patents

データ管理装置、データ管理方法、及びデータ管理プログラム Download PDF

Info

Publication number
JP2020071583A
JP2020071583A JP2018203851A JP2018203851A JP2020071583A JP 2020071583 A JP2020071583 A JP 2020071583A JP 2018203851 A JP2018203851 A JP 2018203851A JP 2018203851 A JP2018203851 A JP 2018203851A JP 2020071583 A JP2020071583 A JP 2020071583A
Authority
JP
Japan
Prior art keywords
data
type memory
cache
segment
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2018203851A
Other languages
English (en)
Inventor
水島 永雅
Eiga Mizushima
永雅 水島
定広 杉本
Sadahiro Sugimoto
定広 杉本
健太郎 島田
Kentaro Shimada
健太郎 島田
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 JP2018203851A priority Critical patent/JP2020071583A/ja
Priority to CN201910719465.5A priority patent/CN111124950A/zh
Priority to US16/535,555 priority patent/US20200133836A1/en
Publication of JP2020071583A publication Critical patent/JP2020071583A/ja
Pending legal-status Critical Current

Links

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/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/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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0615Address space extension
    • G06F12/063Address space extension for I/O modules, e.g. memory mapped I/O
    • 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/0873Mapping of cache memory to specific storage devices or parts thereof
    • 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/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • G06F3/0622Securing storage systems in relation to access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1021Hit rate improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/22Employing cache memory using specific memory technology
    • G06F2212/222Non-volatile memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/22Employing cache memory using specific memory technology
    • G06F2212/225Hybrid cache memory, e.g. having both volatile and non-volatile portions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/28Using a specific disk cache architecture
    • G06F2212/283Plural cache memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/31Providing disk cache in a specific location of a storage system
    • G06F2212/312In storage controller

Landscapes

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

Abstract

【課題】容易且つ適切にアクセス性能を比較的高くすることができるようにする。【解決手段】ストレージデバイス40,41に対する入出力に係るデータをキャッシュするためのメモリ(SCM32及びDRAM34)と、メモリに接続されたCPU33とを備えるストレージシステム20において、アクセス性能が高いDRAM34と、DRAM34とアクセス単位が同一であり、且つDRAM34よりもアクセス性能が低いSCM32とを有し、CPU33は、ストレージデバイス40,41に対する入出力に係るデータに基づいて、DRAM34と、SCM32とのいずれにキャッシュさせるかを決定し、データを決定したDRAM34又はSCM32にキャッシュするように構成する。【選択図】図1

Description

本発明は、データのキャッシュ制御の技術に関する。
メモリの一例として、半導体不揮発性メモリであるNAND型フラッシュメモリが知られている。NAND型フラッシュメモリは、DRAM等の揮発性メモリに比べて記憶密度を高く、容量当たりのコスト(ビットコスト)を安くすることが可能である。
しかし、フラッシュメモリには次のような制限がある。データを書き換える前には、例えば4MBといった大きなサイズのブロック単位でデータ消去を行う必要がある。また、データの読み書きはページという単位で行う必要がある。各ブロックは複数のページで構成され、そのサイズは例えば8KBや16KBである。さらに、ブロックの消去回数には上限(書き換え寿命)があり、例えば数千回程度である。
NAND型フラッシュメモリの低コストの利点を生かし、DRAMを媒体とするキャッシュメモリに加えて、NAND型フラッシュメモリを媒体とするキャッシュメモリを搭載するストレージシステムが開示されている(例えば、特許文献1参照)。
このようなストレージシステムでは、8Bや16Bなど小さい単位で書き換えるデータ(例えば管理データ)をNAND型フラッシュメモリを媒体とするキャッシュメモリに格納すると、ページ内の99%以上を占める更新対象外のデータも同時に書き換える必要がある。NAND型フラッシュメモリは書き換え寿命が短いため、このような使い方では寿命が早く尽きてしまう。これに対して、特許文献1には、管理データを、DRAMを媒体とするキャッシュメモリに優先的に格納する技術が開示されている。
一方で、最近では、NAND型フラッシュメモリ以外の半導体不揮発性メモリとして、相変化メモリ、磁気抵抗メモリ、抵抗変化メモリなどのSCM(Storage Class Memory)と呼ばれる不揮発性半導体メモリも開発されている。SCMもDRAMに比べて記憶密度が高い。NAND型フラッシュメモリと違い、データ消去が不要で、DRAMと同様にバイト単位でアクセスが可能で、書き換え寿命も長いという扱いやすさがある。また、DRAMに比べて安価で、同じコストで大容量のメモリを提供できる。しかし、SCMは一般的にDRAMに比べるとアクセス性能が低いという特徴がある。
国際公開第2014/103489号
ストレージシステムにおいて、ユーザデータのリード/ライト性能を向上させるためには、ユーザデータを管理するために用いる管理データをディスクから読んだり、書いたりする頻度を削減することが有効であり、そのために、管理データをできるだけ多くメモリにキャッシュする必要がある。例えば、DRAMに管理データをキャッシュするようにすると、高いシステムコストがかかるという課題がある。
また、管理データに限らず、他のデータについてもDRAMにキャッシュするようにすると、高いシステムコストがかかるという課題がある。一方、フラッシュメモリにキャッシュするようにすると、フラッシュメモリの寿命が短くなってしまう課題や、アクセス性能が低くなるという課題がある。
本発明は、上記事情に鑑みなされたものであり、その目的は、容易且つ適切にアクセス性能を比較的高くすることのできる技術を提供することにある。
上記目的を達成するために、一観点に係るデータ管理装置は、ストレージデバイスに対する入出力に係るデータをキャッシュするためのメモリ部と、メモリ部に接続されたプロセッサ部とを備えるデータ管理装置であって、メモリ部は、アクセス性能が高い第1種メモリと、第1種メモリとアクセス単位が同一であり、且つ第1種メモリよりもアクセス性能が低い第2種メモリとを有し、プロセッサ部は、ストレージデバイスに対する入出力に係るデータに基づいて、第1種メモリと、第2種メモリとのいずれにキャッシュさせるかを決定し、データを決定した第1種メモリまたは第2種メモリにキャッシュする。
本発明によると、容易且つ適切にアクセス性能を比較的高くすることができる。
図1は、一実施形態に係る情報システムの第1の構成例を示す図である。 図2は、一実施形態に係る情報システムの第2の構成例を示す図である。 図3は、メモリ媒体の特徴を比較する図である。 図4は、一実施形態に係るストレージコントローラのDRAMの構成図である。 図5は、一実施形態に係るストレージコントローラのSCMの構成図である。 図6は、一実施形態に係るキャッシング先選択処理の概要を示す図である。 図7は、一実施形態に係る論理ボリューム、スロット、及びセグメントの関係を示す図である。 図8は、一実施形態に係るキャッシュ管理データ構造を示す図である。 図9は、一実施形態に係るキャッシュ管理データの一部のデータ構造を示す図である。 図10は、一実施形態に係るダーティキュー及びクリーンキューのデータ構造を示す図である。 図11は、一実施形態に係るSCMフリーキュー及びDRAMフリーキューのデータ構造を示す図である。 図12は、一実施形態に係る圧縮モードでの論理アドレスの対応関係を示す図である。 図13は、一実施形態に係る圧縮モードでの管理データ構造を示す図である。 図14は、一実施形態に係るリードコマンド処理のフローチャートである。 図15は、一実施形態に係るユーザデータリード処理のフローチャートである。 図16は、一実施形態に係るセグメント割当処理のフローチャートである。 図17は、一実施形態に係るSCM優先セグメント割当処理のフローチャートである。 図18は、一実施形態に係るDRAM優先セグメント割当処理のフローチャートである。 図19は、一実施形態に係るステージング処理のフローチャートである。 図20は、一実施形態に係るデータ送信処理のフローチャートである。 図21は、一実施形態に係るライトコマンド処理のフローチャートである。 図22は、一実施形態に係るユーザデータライト処理のフローチャートである。 図23は、一実施形態に係る管理データアクセス処理のフローチャートである。 図24は、一実施形態に係るダーティデータ書き出し処理のフローチャートである。 図25は、一実施形態に係るデステージング処理のフローチャートである。
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
なお、以後の説明では「aaaテーブル」等の表現にて情報を説明する場合があるが、これら情報は、テーブル等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「aaaテーブル」等について「aaa情報」と呼ぶことができる。
また、以後の説明では「プログラム」を動作の主体として説明を行う場合があるが、プログラムは、プロセッサ(典型的にはCPU(Central Processing Unit))を含む制御デバイスによって実行されることで、定められた処理をメモリ及びI/F(インタフェース)を用いながら行うため、プロセッサ又は制御デバイスを動作主体とした説明としてもよい。制御デバイスは、プロセッサであっても良いし、プロセッサとハードウェア回路を含んでいても良い。また、プログラムを動作主体として開示された処理は、ホスト計算機、ストレージシステムが行う処理としてもよい。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによって各計算機にインストールされてもよい。記憶メディアとしては、例えば、ICカード、SDカード、DVD等であってもよい。
また、以下の説明では、「メモリ部」は、1以上のメモリを含む。少なくとも1つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
また、以下の説明では、「プロセッサ部」は、1以上のプロセッサを含む。少なくとも1つのプロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサである。1以上のプロセッサの各々は、シングルコアでもよいしマルチコアでもよい。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
図1は、一実施形態に係る情報システムの第1の構成例を示す図である。
情報システム1Aは、ホスト計算機10と、ホスト計算機10に直接あるいはネットワークを介して接続されるストレージシステム20(データ管理装置の一例)とを有する。ストレージシステム20は、ストレージコントローラ30と、ストレージコントローラ30に接続されるHDD(Hard Disk Drive)40及び/またはSSD(Solid State Drive)41とを有する。HDD40及び/またはSSD41は、ストレージデバイスの一例である。HDD40及び/またはSSD41は、ストレージコントローラ30に内蔵されていてもよい。
ストレージコントローラ30は、1つ以上のフロントエンドインタフェース(FE I/F)31、1つ以上のバックエンドインタフェース(BE I/F)35、1つ以上のSCM(Storage Class Memory)32、CPU33、及びDRAM(Dynamic Random Access Memory)34を含む。SCM32及びDRAM34は、アクセス単位がバイト単位である、すなわち、バイト単位で読み書きが可能なメモリ(メモリデバイス)である。ここで、DRAM34が第1種メモリに相当し、SCM32が第2種メモリに相当する。また、DRAM34及びSCM32がメモリ部に相当する。
ストレージコントローラ30は、複数のストレージデバイス(HDD40やSSD41)から1以上の論理ボリューム(実体的な論理ボリューム)を形成して、ホスト計算機10に提供する。すなわち、ホスト計算機10が形成された論理ボリュームを認識できるようにする。あるいは、ストレージコントローラ30は、いわゆるシンプロビジョニング技術によって形成される論理ボリューム(仮想的な論理ボリュームであって、論理ボリューム内の各領域には、動的に記憶領域が割り当てられるボリューム)をホスト計算機10に提供する。
ホスト計算機10は、ストレージシステム20から提供される論理ボリューム(実体的な論理ボリュームまたは仮想的な論理ボリューム)及び論理ボリューム内の位置(論理ブロック番号。LBAと略記されることもある)を指定したI/Oコマンド(ライトコマンド又はリードコマンド)を発行して、論理ボリュームに対するデータのリード・ライト処理を行う。なお、ストレージコントローラ30が論理ボリュームを提供しない構成、たとえばストレージシステム20が、各HDD40、各SSD41を、それぞれ単一のストレージデバイスとしてホスト計算機10に提供する構成であっても、本発明は有効である。なお、ホスト計算機10が認識する論理ボリュームのことを、論理ユニット(Logical Unit。LUと略記されることもある)と呼ぶこともあり、本明細書においては特に断りのない限り、論理ボリュームと論理ユニット(LU)の語は、いずれも同一の概念を意味するものとして用いられている。
FE I/F31は、ホスト計算機10と通信するためのインタフェースデバイスである。BE I/F35は、HDD40又はSSD41と通信するためのインタフェースデバイスである。BE I/F35は、例えばSASやFibre Channelのインタフェースデバイスである。
CPU33は、後述する各種処理を実行する。DRAM34は、CPU33に実行されるプログラム、CPU33で利用される制御情報、バッファデータを記憶する。SCM32は、例えば、相変化メモリ、磁気抵抗メモリ、抵抗変化メモリなどであり、データを記憶する。SCM32及びDRAM34は、キャッシュメモリ領域を含んでいる。キャッシュメモリ領域は、複数のキャッシュセグメントで構成される。キャッシュセグメントは、CPU33によって管理される単位領域である。例えば、キャッシュメモリ領域では、キャッシュセグメント単位で、領域確保、データの読出し及びデータの書込みが行われてよい。キャッシュメモリ領域には、最終ストレージデバイスから読み出されるデータ、及び、最終ストレージデバイスに書き込まれるデータ(ホスト計算機10からのI/Oコマンド(典型的には、ライトコマンド又はリードコマンド)に従うデータであるユーザデータ)がキャッシュされる(一時的に格納される)。最終ストレージデバイスとは、I/Oコマンドで指定されているI/O先に従いストレージコントローラ30によってI/Oが行われるデータが格納されるストレージデバイスである。具体的には、例えば、I/Oコマンド(ライトコマンド)に従うデータは、一旦はキャッシュメモリ領域に格納されるが、その後、I/Oコマンドで指定されている論理ユニット(論理ボリューム)を構成しているストレージデバイスの領域(論理ボリュームが仮想的な論理ボリュームである場合には、この論理ボリュームの領域に対して割り当てられているストレージデバイスの領域)に格納される。最終ストレージデバイスとは、この論理ボリュームを形成するストレージデバイスのことを意味する。本実施形態では、最終ストレージデバイスは、HDD40又はSSD41であるが、他種のストレージデバイス、例えば、複数のストレージデバイスを有する外部ストレージシステムであってもよい。
また、キャッシュメモリ領域には、管理データがキャッシュされる。管理データとは、例えば、ストレージシステム20が、ユーザデータを所定の単位で分割したデータ部分を管理するために用いる、各データ部分に対応する小サイズのデータである。管理データは、ストレージシステム20内部でのみ使用され、ホスト計算機10からは読み書きされない。管理データもユーザデータと同じく、最終ストレージデバイスに保存される。
図1の情報システム1Aは、各構成要素を1つずつ備えたものとしているが、冗長化、高性能化、あるいは大容量化などのために、各構成要素を複数備えるようにしてもよい。また、各構成要素間はネットワークを介して接続されてもよい。ネットワークは、スイッチやエキスパンダなどを含んでいてもよい。冗長化や高性能化を考えると、情報システムは、例えば、図2に示すような構成としてもよい。
図2は、一実施形態に係る情報システムの第2の構成例を示す図である。
情報システム1Bは、ホスト計算機10と、ストレージシステム20と、ホスト計算機10とストレージシステム20とを接続するネットワーク50とを備える。ネットワーク50は、Fibre Channel、Ethernet、Infiniband等であってよく、本実施形態では、ネットワーク50をSAN(Storage Area Network)と総称する。
ストレージシステム20は、2つのストレージコントローラ30(ストレージコントローラA、ストレージコントローラB)と、ドライブエンクロージャ60とを含む。
ストレージコントローラ30は、複数のFE I/F31、複数のBE I/F35、複数のSCM32、複数のCPU33、複数のDRAM34、及びノードインタフェース(ノードI/F)36を含む。ノードインタフェース36は、例えばInfiniband、Fibre Channel(FC)、Ethernet(登録商標)等のネットワークインタフェースのデバイスでもよく、PCI Expressのようなバスのインタフェースのデバイスでもよい。2つのストレージコントローラ30は、ノードインタフェース36を介して接続されている。ここで、DRAM34が第1種メモリに相当し、SCM32が第2種メモリに相当する。また、DRAM34及びSCM32がメモリ部に相当する。
ドライブエンクロージャ60は、複数のHDD40やSSD41を格納する。複数のHDD40やSSD41は、ドライブエンクロージャ60内のエキスパンダ42に接続される。エキスパンダ42は、各ストレージコントローラ30のBE I/F35に接続される。BE I/F35がSASのインタフェースデバイスである場合には、エキスパンダ42は、例えばSAS Expanderであり、BE I/F35がFibre Channelのインタフェースデバイスである場合、エキスパンダ42は、例えばFCスイッチである。
なお、ストレージシステム20は、ドライブエンクロージャ60を1つ備えているが、複数のドライブエンクロージャ60を備えてもよい。この場合、BE I/F35の複数のポートのそれぞれに対して各ドライブエンクロージャ60を直接接続してもよいし、BE I/F35のポートに、スイッチを経由して複数のドライブエンクロージャ60を接続してもよい。また、各ドライブエンクロージャ60のエキスパンダ42同士をカスケード接続することで複数のドライブエンクロージャ60を数珠繋ぎにして、BE I/F35のポートに接続するようにしてもよい。
次に、メモリ媒体の特徴について説明する。
図3は、メモリ媒体の特徴を比較する図である。
DRAMは、非常にアクセス性能が高く、バイト単位で読み書きが可能で、揮発性であるという特性を有している。そのため、一般に主記憶装置やバッファメモリとして使用される。ただし、ビットコストが高いため、大量に搭載するとシステムが高額になるというデメリットがある。
SCMは、例えばPRAM(相変化メモリ)やMRAM(磁気抵抗メモリ)、ReRAM(抵抗変化メモリ)である。SCMは、DRAMに比べてアクセス性能が低いが、ビットコストが低いという特性を有している。SCMは、DRAMと同様にバイト単位で読み書きが可能である。そのため、アクセス性能を許容可能な範囲で、DRAMの代替として主記憶装置やバッファメモリに使用することができる。このため、同じコストで情報システムに搭載可能な量を考えれば、DRAMよりも多くなるというメリットがある。また、不揮発性があるため、ドライブの媒体として使用することもできる。
NANDは、NAND型フラッシュメモリである。NANDは、SCMに比べてアクセス性能が低いが、ビットコストが低いという特性を有している。NANDは、DRAMやSCMと異なり、バイトより非常に大きなページという単位で読み書きする必要がある。ページサイズは、例えば、8KBや16KBである。また、再書き込みの前には、消去が必要であり、消去単位は複数のページをまとめたサイズ(例えば、4MB)である。非常にビットコストが低く、不揮発性があるため、主にドライブの媒体として使用される。また、NANDは、書き換え寿命が短いという欠点がある。
図4は、一実施形態に係るストレージコントローラのDRAMの構成図である。
DRAM34は、CPU33が実行するストレージ制御プログラム340、キャッシュ制御情報341、及びユーザデータバッファ342を格納する。また、DRAM34は、データをキャッシュして管理するための複数のキャッシュセグメント343が格納される。このキャッシュセグメント343に、HDD40又はSSD41に格納されるユーザデータや管理データ、HDD40又はSSD41から読み出されたユーザデータや管理データがキャッシュされる。
ストレージ制御プログラム340は、データ管理プログラムの一例であり、キャッシュに関わる各種制御処理を実行する。なお、処理の詳細については後述する。キャッシュ制御情報341は、キャッシュディレクトリ100(図8参照)と、クリーンキュー(図10参照)と、ダーティキュー(図10参照)と、SCMフリーキュー200(図8参照)と、DRAMフリーキュー300(図8参照)とを含む。キャッシュ制御情報341に関するデータ構造については後述する。
DRAM34の実装方法としては、例えば基板上に複数のDRAMのメモリチップを搭載したDIMMのようなメモリモジュールを構成しておき、このメモリモジュールをストレージコントローラ30の主基板上のメモリスロットに接続するようにしてもよい。なお、ストレージコントローラ30の主基板と別の基板上にDRAM34を搭載する構成とすることにより、ストレージコントローラ30の主基板とは独立に保守交換やDRAM容量増設を行えるようにすることができる。また、停電など不慮の障害が発生した場合に、DRAM34上の記憶内容が消失することを避けるために、バッテリを設けて、停電時等にもDRAM34上の記憶内容を維持できるような構成にしてもよい。
図5は、一実施形態に係るストレージコントローラのSCMの構成図である。
SCM32は、データをキャッシュして管理するための複数のキャッシュセグメント325を格納する。このキャッシュセグメント325に、HDD40又はSSD41に格納されるユーザデータや管理データ、HDD40又はSSD41から読み出されたユーザデータや管理データをキャッシュすることができる。
次に、本実施形態に係るストレージシステムによるデータのキャッシング先を選択するキャッシング先選択処理の概要について説明する。
図6は、一実施形態に係るキャッシング先選択処理の概要を示す図である。
ストレージシステム20のストレージコントローラ30は、HDD40やSSD41に管理されるデータをSCM32またはDRAM34のいずれかにキャッシュする。ストレージコントローラ30は、データのキャッシング先を、キャッシュ対象のデータ(キャッシュ対象データ)の種類に基づいて決定する。具体的なキャッシング先選択処理(セグメント割当処理)については後述する。
次に、キャッシュを管理するキャッシュ管理データの構造について説明するにあたって、ボリューム(論理ボリューム)とキャッシュ管理データとの関係の概要を説明する。
図7は、一実施形態に係る論理ボリューム、スロット、及びセグメントの関係を示す図である。
HDD40やSSD41には、ホスト計算機10によりアクセスされる論理ボリューム1000が格納される。ホスト計算機10が論理ボリューム1000にアクセスする際、最小アクセス単位はブロック(たとえば512バイト)である。論理ボリューム1000の各ブロックは、論理ブロックアドレス(LBA:論理アドレスと呼ぶこともある)で識別可能となっている。ブロックに対する論理アドレスは、例えば、論理アドレス1010に示すように表すことができる。
ストレージシステム20においては、論理ボリューム上の記憶領域へのアクセス時等に排他制御を行うが、排他制御の単位として、スロット1100が定義されている。スロット1100のサイズは、例えば、256KB、例えば、512ブロックを含むサイズとなっている。なお、スロット1100のサイズは、これに限られず、他のサイズとしてもよい。
各スロット1100は、一意な識別番号(スロットID)によって識別可能となっている。スロットIDは、例えば、スロットID1110に示すように表すことができる。図7においては、論理アドレス1010の各論理アドレスは、スロットID1110の各スロットIDに対応するスロットの先頭のブロックの論理アドレスを示している。
本実施形態においては、例えば、ホスト計算機10から受信したI/Oコマンドで指定されている論理ブロックアドレスを512で除算することにより得られる値が論理ブロックアドレスに対応するブロックが属するスロットのスロットIDとなる。この除算を行った際における剰余が0である場合には、I/Oコマンドで指定されている論理ブロックアドレスで特定されるブロックは、算出されたスロットIDで特定されるスロットの先頭のブロックであることを示し、剰余が0でない値(ここで、この値をRとする)である場合、このRは、論理ブロックアドレスで特定されるブロックが、算出されたスロットIDで特定されるスロットの先頭ブロックからR番目の位置に存在するブロックであることを示している。(ここで、Rのことを、スロット内相対アドレスと呼ぶ)。
ストレージコントローラ30は、論理ボリューム1000上のデータをキャッシュする場合、DRAM34またはSCM32上の記憶領域をキャッシュ領域として確保する。ストレージコントローラ30は、キャッシュセグメント(セグメント)(1201、1202、1203、1204:以下、キャッシュセグメント1201、1202、1203、1204を総称する場合、「キャッシュセグメント1200」と表記する)という領域単位でキャッシュ領域を確保する。本実施形態では、例えば、キャッシュセグメント1200のサイズは64KBであり、各スロットに対して4つのキャッシュセグメント1200(例えば、1201、1202、1203、1204)が対応付けられる。
ストレージシステム20は、スロット1100を管理する情報として、スロット1100毎にスロット制御テーブル110(図8参照)有している。スロット制御テーブル110には、スロット1100に対応付けられているキャッシュセグメント1200の情報(正確には、キャッシュセグメント1200を管理するための情報へのポインタ)が格納される。ストレージシステム20は、このスロット制御テーブル110を作成、管理することによって、スロット1100とキャッシュセグメント1200との対応付けを管理する。なお、キャッシュセグメント1200のサイズは、64KB以外のサイズとしてもよく、また、1つのスロット1100に対応付けられるキャッシュセグメント1200の数を、4つ以外の値としてもよい。
次に、ホスト計算機10が論理ボリューム1000上の領域にアクセス(リードまたはライト等)する際の、キャッシュ領域の管理に関連する処理の概要について説明する。
ホスト計算機10は、ユーザデータにアクセスする際には、アクセス先の論理ユニット番号(論理ユニット/論理ボリュームを特定する番号:LUN(Logical Unit Number)と表記する)と、論理ブロックアドレス1010とを指定したI/Oコマンドをストレージシステム20に発行する。ストレージシステム20のストレージコントローラ30は、受信したI/Oコマンドに含まれる論理ブロックアドレスを、スロットID1110とスロット内相対アドレスとの組に変換し、変換により得られたスロットID1110で特定されるスロット制御テーブル110を参照する。そして、ストレージコントローラ30は、スロット制御テーブル110の情報に基づき、I/Oコマンドで指定された論理ボリューム1000上の領域(論理ブロックアドレスで特定される領域)に対してキャッシュセグメント1200が確保されているか否かを判定し、キャッシュセグメント1200が確保されていなければ、新規にキャッシュセグメント1200を確保する処理を行う。
次に、キャッシュ管理データ構造について説明する。
図8は、一実施形態に係るキャッシュ管理データ構造を示す図である。
キャッシュ管理データは、キャッシュディレクトリ100と、SCMフリーキュー200と、DRAMフリーキュー300と、ダーティキューおよびクリーンキュー(図10参照)とを含む。本実施形態では、DRAM34と、SCM32とにキャッシュセグメント(343、325)が管理される。各キャッシュセグメントは、セグメント制御テーブル120(SGCT:Segment Control Table)で管理される。SGCT120は、DRAM34及びSCM32で管理されている全てのキャッシュセグメントのそれぞれと一対一に対応して管理される。
キャッシュディレクトリ100は、キャッシュ対象データの論理アドレス(キャッシュセグメントに格納されたデータの格納先である、論理ボリュームの論理ブロックアドレス)と、メモリ(DRAM34およびSCM32)上の物理アドレスとの対応関係を管理するためのデータである。キャッシュディレクトリ100は、例えば、キャッシュ対象データのキャッシュセグメントが属するスロットID(論理ブロックアドレスから特定可能)をキーとするハッシュテーブルであり、スロットIDのスロットに対応するスロット制御テーブル110(SLCT:Slot Control Table)へのポインタをエントリとして格納している。SLCT110は、スロットに属するキャッシュセグメントのSGCT120へのポインタを管理している。SGCT120は、そのSGCT120に対応するキャッシュセグメント(325、343)へのポインタを管理している。
したがって、キャッシュディレクトリ100によると、キャッシュ対象データの論理アドレスに基づいて、この論理アドレスに対応するデータがキャッシュされているキャッシュセグメントを特定することができる。なお、SLCT110、SGCT120の詳細な構成については、後述する。本実施形態は、キャッシュディレクトリ100は、DRAM34のキャッシュセグメント343と、SCM32のキャッシュセグメント325とのすべてをまとめて管理している。このため、キャッシュディレクトリ100を参照することにより、DRAM34及びSCM32におけるキャッシュのヒット判定を容易に行うことができる。
SCMフリーキュー200は、SCM32のフリーセグメント、すなわちいずれのデータも格納していないキャッシュセグメント325を管理する制御情報である。SCMフリーキュー200は、例えばSCM32のフリーセグメントに対応するSGCT120をエントリに持つ双方向のリンクリストとして構成される。なお、フリーセグメントを管理する制御情報のデータ構造は、必ずしもキューである必要はなく、スタックなどを用いてもよい。
DRAMフリーキュー300は、DRAM34のフリーセグメントを管理する制御情報である。DRAMフリーキュー300は、例えばDRAM34のフリーセグメントに対応するSGCT120をエントリに持つ双方向のリンクリストとして構成される。なお、フリーセグメントを管理する制御情報のデータ構造は、必ずしもキューである必要はなく、スタックなどを用いてもよい。
SGCT120は、そのSGCT120に対応するキャッシュセグメントの状態および種類によって、キャッシュディレクトリ100、SCMフリーキュー200、又はDRAMフリーキュー300のいずれかに接続された状態をとる。具体的には、SCM32のキャッシュセグメント325に対応するSGCT120は、このキャッシュセグメント325が未使用時には、SCMフリーキュー200に接続され、このキャッシュセグメント325がデータ格納用に割り当てられると、キャッシュディレクトリ100に接続される。一方、DRAM34のキャッシュセグメント343に対応するSGCT120は、このキャッシュセグメント343が未使用時には、DRAMフリーキュー300に接続され、このキャッシュセグメント343がデータ格納用に割り当てられると、キャッシュディレクトリ100に接続される。
図9は、一実施形態に係るキャッシュ管理データの一部のデータ構造を示す図である。
キャッシュディレクトリ100は、例えばスロットIDをキーとするハッシュテーブルである。キャッシュディレクトリ100のエントリ(ディレクトリエントリ)100aは、スロットIDに対応するSLCT110を示すディレクトリエントリポインタを格納する。ここで、スロットは、排他制御を行うデータの単位(ロック単位)である。例えば、1つのスロットは、複数のキャッシュセグメントを含むことができる。なお、スロットの内の一部しかデータが格納されていない場合には、スロットには、キャッシュセグメントが1つしか含まれていないこともある。
SLCT110は、ディレクトリエントリポインタ110aと、前方ポインタ110bと、後方ポインタ110cと、スロットID110dと、スロットステータス110eと、SGCTポインタ110fとを含む。ディレクトリエントリポインタ110aは、同一のハッシュ値となる別のキーに対応するSLCT110を指すディレクトリエントリポインタである。前方ポインタ110bは、クリーンキュー又はダーティキューにおける前の順番のSLCT110を示すポインタである。後方ポインタ110cは、クリーンキュー又はダーティキューにおける後の順番のSLCT110を示すポインタである。スロットID110dは、SLCT110に対応するスロットの識別情報(スロットID)である。スロットステータス110eは、スロットの状態を示す情報である。スロットの状態としては、例えば、スロットがロックされていることを示す「ロック中」等がある。SGCTポインタ110fは、このスロットに含まれるキャッシュセグメントに対応するSGCT120を指すポインタである。このスロットにキャッシュセグメントが割り当てられていないときは、SGCTポインタ110fは、ポインタ(アドレス)が無効であることを表す値(例えばNULL)となっている。またスロットに含まれるキャッシュセグメントが複数ある場合には、各SGCT120はリンクリストとして管理され、SGCTポインタ110fは、リンクリストにおける先頭のキャッシュセグメントに対応するSGCT120を指すポインタである。
SGCT120は、SGCTポインタ120aと、セグメントID120bと、メモリ種類120cと、セグメントアドレス120dと、ステージングビットマップ120eと、ダーティビットマップ120fとを含む。
SGCTポインタ120aは、同じスロットに含まれる次のキャッシュセグメントに対応するSGCT120を指すポインタである。セグメントID120bは、キャッシュセグメントの識別情報で、スロット内の何番目に位置づけられるキャッシュセグメントであるかを表す情報である。本実施形態では、1スロットに最大で4つのキャッシュセグメントが割り当てられるので、各キャッシュセグメントのセグメントID120bには、0、1、2、3のいずれかの値が格納される。スロットの先頭に位置するキャッシュセグメントのセグメントID120bは0となり、以下順に1、2、3のセグメントID120bが付与される。例えば、図7におけるキャッシュセグメント1201〜1204を例にとると、スロット1100の先頭に対応付けられているキャッシュセグメント1201のセグメントID120bは0で、以下キャッシュセグメント1202、1203、1204のセグメントID120bはそれぞれ、1、2、3となる。メモリ種類120cは、このSGCT120に対応するキャッシュセグメントが格納されているキャッシュメモリを構成するメモリの種類である。メモリの種類としては、SCMと、DRAMとのいずれかがある。
セグメントアドレス120dは、キャッシュセグメントのアドレスである。ステージングビットマップ120eは、キャッシュセグメントの中でクリーンデータ、つまりドライブ(40、41)のデータと一致しているデータがキャッシュされている領域を示すビットマップである。ステージングビットマップ120eでは、各ビットがキャッシュセグメントにおける各領域に対応し、有効なデータ(ドライブと同じデータ)がキャッシュされている領域に対応するビットはON(1)に設定され、有効なデータがキャッシュされていない領域に対応するビットはOFF(0)に設定される。ダーティビットマップ120fは、キャッシュセグメントの中でダーティデータ、つまりドライブのデータと不一致なデータ(まだドライブに反映されていないデータ)がキャッシュされている領域を示すビットマップである。ダーティビットマップ120fでは、各ビットがキャッシュセグメントにおける各領域に対応し、ダーティデータがキャッシュされている領域に対応するビットはON(1)に設定され、ダーティデータがキャッシュされていない領域に対応するビットはOFF(0)に設定される。
図10は、一実施形態に係るダーティキュー及びクリーンキューのデータ構造を示す図である。
ダーティキューは、ダーティデータを含むスロットに対応するSLCT110を接続しているキューである。クリーンキューは、クリーンデータのみを含むスロットに対応するSLCT110を接続しているキューである。ダーティキュー及びクリーンキューは、キャッシュリプレースやデステージのスケジューリング等に用いられ、それぞれのキャッシュリプレースやデステージのスケジューリング方式等によってさまざまな構造を取りうる。
本実施形態では、キャッシュリプレースおよびデステージのスケジューリングに用いるアルゴリズムをLRU(Least Recently Used)として説明する。なお、ダーティキューおよびクリーンキューは、接続するSLCT110が違うだけで、キューの基本的な構成は同様であるので、ここでは、ダーティキューを例に挙げて説明する。
ダーティキューは、SLCT110の双方向のリンクリストとして構成されている。すなわち、ダーティキューは、MRU(Most Recently Used)ターミナル150の前方ポインタに、最近使用したダーティデータを含むスロット(最終使用時刻の最も新しいスロット)に対応するSLCT110を接続し、接続されたSLCT110の前方ポインタ110bに、次の順番のスロット(次に最近使用したダーティデータを含むスロット)のSLCT110を接続するといったように、SLCT110をダーティデータの使用順番に従って順次接続し、最後の順番のSCLT110の前方ポインタ110bにLRUターミナル160を接続する一方、LRUターミナル160の後方ポインタに最後の順番のSCLT110を接続し、接続された後ろの順番のSCLT110の後方ポインタ110cに対して、その前の順番のスロットのSLCT110を順次接続し、最初の順番のSLCT110をMRUターミナル150に接続する。ダーティキューでは、MRUターミナル150側から、最終使用時刻の新しい順にSLCT110が並ぶこととなる。
図11は、一実施形態に係るSCMフリーキュー及びDRAMフリーキューのデータ構造を示す図である。
SCMフリーキュー200は、SCM32に格納されている空きキャッシュセグメント325を管理するためのキューである。DRAMフリーキュー300は、DRAM34の空きキャッシュセグメント343を管理するためのキューである。SCMフリーキュー200及びDRAMフリーキュー300は、それぞれ空きキャッシュセグメントのSGCT120をポインタで接続したリンクリストである。SCMフリーキュー200と、DRAMフリーキュー300とは、管理するSGCT120が異なるだけであり、構成は同一である。
SCMフリーキュー200(DRAMフリーキュー300)のフリーキューポインタ201(301)は、キューの先頭のSGCT120を指す。SGCT120のSGCTポインタ120aは、次の空きキャッシュセグメントのSGCT120を指す。
次に、ストレージシステム20の処理動作について説明する。
ストレージシステム20は、ユーザデータを圧縮して最終ストレージデバイス(40、41)に格納する動作が可能である。ここで、ストレージシステム20がユーザデータを圧縮して格納するように設定された状態を圧縮モードと呼び、このように設定されていない状態を通常モードと呼ぶ。
ストレージシステム20は、圧縮モードでは、ライトコマンドに応じてホスト計算機10から受領したユーザデータを、可逆圧縮アルゴリズムを用いて加工することによって、ユーザデータのサイズを小さくして、最終ストレージデバイスに保存する。また、ストレージシステム20は、リードコマンドに応じて、最終ストレージデバイスの圧縮されているユーザデータ(圧縮ユーザデータ)を伸張(復元加工)し、元のユーザデータに戻して、ホスト計算機10に送信する。
この圧縮モードでは、最終ストレージデバイスの記憶領域の消費量を削減できるため、より多くのユーザデータを格納することができる。ただし、CPU33がユーザデータの圧縮や伸張を行うため、一般に処理性能が通常モードよりも低下する。
ストレージシステム20の動作モードの切り替え(例えば、圧縮モードから通常モードへの切り替え、又は通常モードから圧縮モードへの切り替え)は、ホスト計算機10からのモード設定コマンド、またはストレージシステム20の管理用I/F(図示せず)を通じた管理コマンドで行うことができる。ストレージコントローラ30のCPU33は、これらのコマンドに応じてストレージシステム20の動作モードを切り替える。また、CPU33は、モード設定状態(圧縮モード又は通常モードのいずれであるか)を管理する。
次に、圧縮モードでの論理アドレスについて説明する。
図12は、一実施形態に係る圧縮モードでの論理アドレスの対応関係を示す図である。
圧縮モードでは、ホスト計算機10がライトコマンドで入力したユーザデータを、ストレージシステム20は、ストレージシステム20内で圧縮して保存する一方、ホスト計算機10がリードコマンドで要求したユーザデータを、ストレージシステム20は、ストレージシステム20内で伸張して出力する。そのため、ホスト計算機10が意識する論理ボリュームは、圧縮せずにユーザデータを保存する通常モードと同じである。圧縮モードでは、この論理ボリュームを平文論理ボリューム2000と呼ぶ。これに対して、ストレージシステム20が圧縮ユーザデータを最終ストレージデバイス(40、41)に保存する際に意識する論理的なデータ領域を、圧縮論理ボリューム2100と呼ぶ。
ストレージシステム20では、CPU33は、平文論理ボリューム2000のユーザデータを所定の管理単位(例えば、8KB)に分割し、それぞれの管理単位を圧縮して個別に保存する。圧縮論理ボリューム2100に圧縮されたユーザデータが保存されると、両論理ボリュームのデータ格納空間のアドレス間の対応関係を示すアドレスマップが形成される。すなわち、ホスト計算機10が平文論理ボリューム2000のアドレスXにユーザデータをライトし、それを圧縮したものが圧縮論理ボリューム2100のアドレスYに保存された場合、XとYとの間のアドレスマップが形成される。
ユーザデータを圧縮すると、そのデータ内容に応じて圧縮後のデータ長は変化する。例えば、同じ文字が多く含まれるとデータ長は小さくなり、乱数的パターンが多く含まれるとデータ長は大きくなる。そのため、アドレスマップにおけるアドレスYの情報は、保存先の先頭位置だけでなく、その位置からの有効データ長も含む。
図12においては、ホスト計算機10が平文論理ボリューム2000のアドレス0x271910にライトした8KBのユーザデータ部分2010は、圧縮されて4KBにサイズが縮小され、圧縮論理ボリューム2100のアドレス0x29D131から4KBの範囲2110に保存され、また、ホスト計算機10が平文論理ボリューム2000のアドレス0x3C2530にライトした8KBのユーザデータ部分2020は、圧縮されて3KBにサイズが縮小され、圧縮論理ボリューム2100のアドレス0x15A012から3KBの範囲2120に保存されていることを示している。
ユーザデータを圧縮して保存する場合、できるだけ隙間なくデータを敷き詰めるほうが最終ストレージデバイスの記憶領域の消費量を減らすことができる。そのため、圧縮したユーザデータの保存先は、ホスト計算機10からライトする順番や、圧縮後サイズと空き領域サイズの大小関係とによってダイナミックに変化する。つまり、アドレスマップもユーザデータのライトによってダイナミックに変化する。
図12に示す例においては、平文論理ボリュームアドレス空間2030と圧縮論理ボリュームアドレス空間2130の間では、アドレスマップ2210、2220が形成される。例えば、アドレスマップ2210は、圧縮論理ボリューム2100の範囲2110のアドレス(0x29D131)と、有効データ長(4KB)とを含み、アドレスマップ2220は、圧縮論理ボリューム2100の範囲2120のアドレス(0x15A012)と、有効データ長(3KB)とを含む。
これらのアドレスマップは、ユーザデータの保存先を管理するため、ユーザデータを分割した管理単位(ここでは8KB)ごとに必要な少量の補助データであり、本実施形態では、管理データと呼ぶ。管理データもユーザデータと同様に最終ストレージデバイス(40、41)で保存される。
なお、SCM32またはDRAM34のキャッシュメモリ領域では、圧縮された状態のユーザデータがキャッシュされる。したがって、キャッシュ領域でセグメントの割り当てを管理する際の論理アドレスは、圧縮論理ボリューム上のアドレスとなる。また、管理データもSCM32またはDRAM34のキャッシュメモリ領域にキャッシュされる。
次に、管理データのデータ構造及びアドレスマップ情報の変更処理について説明する。
図13は、一実施形態に係る圧縮モードでの管理データ構造を示す図である。
管理データは、平文論理ボリュームと圧縮論理ボリュームとの間のアドレスマップ情報を意味する。本実施形態では、アドレスマップ情報2210(2210a、2210b等)は、1単位のサイズが例えば、16Bである。各AMTB(Address Map Table Block)2400(2400a、2400b等)は、アドレスマップ情報2210を複数管理するブロックであり、そのサイズは、例えば、512Bであり、アドレスマップ情報2210を32個格納することができる。AMTB2400におけるアドレスマップ情報2210の格納順は平文論理ボリュームのアドレス順と同じである。1つのアドレスマップ情報が8KBのユーザデータに対応するので、1つのAMTB2400によって論理アドレスが連続している256KBのユーザデータ(つまり、スロット1つに相当)を管理できる。
各AMTD(Address Map Table Directory)2300は、AMTB2400のアドレス(AMTBアドレス)2310を管理するブロックであり、そのサイズは、例えば、512Bであり、1つのサイズが8BのAMTBアドレス2310を64個格納することができる。である。AMTD2300におけるAMTBアドレス2310の格納順は平文論理ボリュームのスロットID順と同じである。1つのAMTB2400が256KBのユーザデータに対応するので、1つのAMTD2300によって論理アドレスが連続している16MBのユーザデータを管理できる。
アドレスマップ情報の変更は、圧縮モードに設定されている場合に、後述するライトコマンド処理(図21参照)の際に実施される。
CPU33は、アドレスマップ情報2210aの内容を変更する場合、新しいAMTB2400bを作成し、アドレスマップ情報2210bを書き込む。次に、CPU33は、アドレスマップ情報2210aを含むAMTB2400a内の、変更しないその他のアドレスマップ情報をAMTB2400bの残り部分に複写する。そして、CPU33は、AMTD2300内で、AMTB2400aを指示していたAMTBアドレス2310を、AMTB2400bを指示するように書き換える。
ここで、AMTB2400a内のアドレスマップ情報を変更する際に、直接2210aを上書きせずに、別の新しいAMTB2400bを作ってアドレスマップ情報を格納する理由について以下に説明する。
前述のように、管理データはキャッシュメモリ領域にキャッシュされる。アドレスマップ情報の変更に伴って次々と作成されるAMTB2400は、ダーティブロック(横縞部)としてキャッシュセグメント2600に追記的に格納される。また、AMTBアドレスが変更されたAMTD2300も、キャッシュセグメント2500のダーティブロック(横縞部)となる。この結果、キャッシュメモリ領域において、ダーティブロックが局所的なキャッシュセグメント内に集まりやすくなる。一般に、キャッシュメモリ管理においては、ダーティブロックが局所化しているほうが、デステージするときにストレージコントローラ30と最終ストレージデバイス(40、41)との間のデータ転送処理の回数を減らすことができる。もし、AMTB2400を上書きする方法を実行するようにすると、ユーザデータのライトがランダムな論理アドレスに対して要求された場合、AMTB2400のダーティブロックがたくさんのキャッシュセグメント上に散在してしまい、デステージするときにストレージコントローラ30と最終ストレージデバイス(40、41)との間のデータ転送処理の回数が多くなり、CPU33の処理負荷が多くなってしまう。
次に、本実施例に係る情報システム1Bにおける処理動作について説明する。
図14は、一実施形態に係るリードコマンド処理のフローチャートである。
リードコマンド処理は、ストレージシステム20がホスト計算機10からリードコマンドを受信した際に実行される処理である。
CPU33は、ホスト計算機10からリードコマンドを受信すると、圧縮モードに設定されているか否かを判定し(S100)、圧縮モードに設定されていない場合(S100:NO)には、CPU33は処理をステップS103に進める。
一方、圧縮モードに設定されている場合(S100:YES)には、CPU33は、管理データアクセス処理(図23参照)によりAMTD2300の参照を実行する(S101)。具体的には、CPU33は、リードコマンドで指定されている、平文論理ボリューム上のアドレスXから、それに対応するAMTD2300の管理データの保存先アドレスを特定し、AMTD2300から管理データを取得する。
次いで、CUP33は、管理データアクセス処理(図23参照)によりAMTB2400の参照を実行し(S102)、処理をステップS103に進める。具体的には、CPU33は、AMTD2300から取得した管理データからAMTB2400の管理データの保存先アドレスを特定し、AMTB2400から管理データを取得する(ステップS102)。
ステップS103では、CPU33は、圧縮モードに設定されていない場合には、リードコマンドから論理ボリューム上のアドレスYを特定する一方、圧縮モードに設定されている場合には、取得したAMTB2300の管理データから圧縮論理ボリューム上のアドレスY(先頭位置とデータ長)を特定し、特定したアドレスYに対してユーザデータリード処理(図15参照)を行う(ステップS103)。
次に、ユーザデータリード処理(図14のステップS103)について説明する。
図15は、一実施形態に係るユーザデータリード処理のフローチャートである。
まず、ストレージコントローラ30のCPU33は、リード対象のユーザデータの論理ボリュームの論理ブロックアドレス(以下、リードアドレス)に対応するキャッシュセグメントが割り当て済みであるか否かを判定する(ステップS1)。具体的には、CPU33は、論理ブロックアドレスをスロットIDとスロット内相対アドレスとの組に変換し、変換により得られたスロットIDがスロットID110dに格納されているSLCT110のSGCTポインタ110fを参照する。SGCTポインタ110fが無効(たとえばNULL)値である場合には、CPU33は、キャッシュセグメントが未割り当てであると判定する。一方、SGCTポインタ110fに有効な値が含まれている場合、少なくともキャッシュセグメントが1つ割り当てられていることが判明するので、CPU33は、SGCTポインタ110fのポインタをたどって、スロット内相対アドレスで特定されるスロット内の位置にキャッシュセグメントが割り当てられているか否かを確認する。具体的には、「スロット内相対アドレス÷128」で得られた結果(整数値)と同一のセグメントIDが格納されているセグメントID120bを有するSGCT120があるか否かを確認することで、リードアドレスにキャッシュセグメントが割り当てられているか否かを判定することができる。ここで、スロット内相対アドレス÷128の計算を行うことで、0〜3のいずれかの整数値が得られるので、スロット内相対アドレスが、0〜3のいずれのセグメントIDが付与されたキャッシュセグメントに対応するアドレスであるかを知ることができる。
この結果、キャッシュセグメントが割り当て済みであれば(ステップS1:YES)、CPU33は、ステップS3へ処理を進める一方、キャッシュセグメントが未割り当てであれば(ステップS1:NO)、CPU33は、セグメント割当処理(図16参照)を実行し(ステップS2)、ステップS3へ処理を進める。セグメント割当処理では、キャッシュされるデータの種類に応じて、SCM32のキャッシュセグメント、またはDRAM34のキャッシュセグメントのいずれかのキャッシュセグメントが割り当てられる。
ステップS3では、CPU33は、リードアドレスに対応するキャッシュセグメントを含むスロットをロックする。ここで、ロックとは、CPU33の他のプロセスがこのスロットの状態を変更しないように排他することである。具体的には、CPU33は、このキャッシュセグメントを含むスロットに対応するSLCT110のスロットステータス110eに格納されている「ロック中」を表すビットをON(例えば、1)にすることで、このスロットがロックされていることを表すようにする。
続いて、CPU33は、リード対象のユーザデータがキャッシュセグメントに格納されているか否か、すなわち、キャッシュヒットか否かを判定する(ステップS4)。具体的には、CPU33は、リード対象のキャッシュセグメントに対応するSGCT120のステージングビットマップ120e及びダーティビットマップ120fを調べ、リード対象の全ブロックに関して、各ブロックに対応するステージングビットマップ120eのビット又はダーティビットマップ120fのビットのいずれかがON(例えば、1)であれば、キャッシュヒットであると判定する。一方、CPU33は、リード対象の範囲内に、ダーティビットマップ120fとステージングビットマップ120eとに対応するビットがいずれもOFF(例えば、0)であるブロックが1つでもある場合は、キャッシュミスであると判定する。
この結果、キャッシュヒットの場合(ステップS4:YES)は、CPU33は、処理をステップS6へ進める一方、キャッシュミスの場合(ステップS4:NO)は、ステージング処理(図19参照)を実行し(ステップS5)、処理をステップS6に進める。ステージング処理では、ドライブ(HDD40、またはSSD41)からキャッシュセグメント(325又は343)へデータが読み込まれる。ステージング処理が完了すると、リード対象のデータがキャッシュセグメント(325又は343)に格納された状態になる。
ステップS6では、CPU33は、キャッシュセグメントに格納されたデータをホスト計算機10に送信するデータ送信処理(図20参照)を実行する。
続いて、CPU33は、完了ステータスをホスト計算機10に送信する(ステップS7)。具体的には、CPU33は、エラーが発生してリード処理が正常に完了しなかった場合は、エラーステータス(例えばCHECK CONDITION)を返す一方、リード処理が正常に完了した場合は正常ステータス(GOOD)を返す。
この後、CPU33は、ロックしているスロットを解放(アンロック)し、すなわち、SLCT110のスロットステータス110eに格納されている「ロック中」を表すビットをOFFにし(ステップS8)、スロットの状態を変更可能な状態にし、ユーザデータリード処理を終了する。
次に、セグメント割当処理(図15のステップS2)について説明する。なお、セグメント割当処理は、後述する図22のステップS62、図23のステップS82、図24のステップS112の処理にも対応する。
図16は、一実施形態に係るセグメント割当処理のフローチャートである。
セグメント割当処理では、CPU33がキャッシュするデータに対して、このデータの種類(データの特性ともいえる)に応じて、SCM32のキャッシュセグメント(SCMセグメントともいう)325、またはDRAM34のキャッシュセグメント(DRAMセグメントともいう)343を割り当てる。
ここで、データに割り当てるキャッシュセグメントのメモリ種類、すなわち、SCM32またはDRAM34を選択する際の判断基準の一例について説明する。SCM32は、アクセス性能がDRAM34に比べて低いが、コストがDRAM34に比べて安いという特性を有しているので、本実施形態では、DRAM34の特性に適合しているデータ(高性能を要求されるデータ)は、DRAM34を用いたキャッシュセグメントを選択し、SCMの特性に適合するデータ(高性能を要求されないデータ、例えば、キャッシュしたい量が多いデータ)は、SCM32を用いたキャッシュセグメントを選択する制御を行う。具体的には、次のような基準で割り当てるキャッシュセグメントのメモリ種類を選択する。
(a)キャッシュ対象が、高スループットが求められるユーザデータの場合は、CPU33は、DRAM34を優先的に選択する。このようなデータをSCM32のキャッシュセグメントに格納するようにすると、ストレージシステム20の性能を低下させてしまう。したがって、ユーザデータに対しては、DRAM34を優先的に選択した方がよい。ここで、DRAM34を優先的に選択するとは、例えば、DRAM34にキャッシュセグメントを確保できる場合には、DRAM34を割当先に選択することである。
(b)キャッシュ対象が、アクセス単位が小さいデータである場合には、CPU33は、SCM32を優先的に選択する。例えば、管理データは、通常1つが8Bや16B程度のサイズであり、ユーザデータと比較すると要求されるスループットが低いため、低コストのSCM32にキャッシュした方がよい。なぜなら、SCM32は、同じコストでDRAM34よりも大容量のキャッシュセグメントを用意できるので、キャッシュできる管理データのデータ量が増え、ドライブ(40、41)上の管理データの読み出しの頻度が減って、ストレージシステム20の応答性能が向上する効果があるからである。
(c)上記以外のデータがキャッシュ対象の場合は、CPU33は、DRAM34を優先的に選択する。
まず、CPU33は、アクセス対象のデータ(アクセス対象データ)がユーザデータか否かを判定する(ステップS31)。この判定の結果が真であれば(ステップS31:YES)、CPU33は処理をステップS34に進める一方、偽であれば(ステップS31:NO)、処理をステップS32に進める。
ステップS32では、CPU33は、アクセス対象データが管理データか否かを判定する。この判定の結果が真であれば(ステップS32:YES)、CPU33は、処理をステップS33に進める一方、偽であれば(ステップS32:NO)は、CPU33は、処理をステップS34に進める。
ステップS33では、CPU33は、SCM32のキャッシュセグメント325を優先して割り当てるSCM優先セグメント割当処理(図17参照)を実行し、セグメント割当処理を終了する。
ステップS34では、CPU33は、DRAM34のキャッシュセグメント343を優先して割り当てるDRAM優先セグメント割当処理(図18参照)を実行し、セグメント割当処理を終了する。
セグメント割当処理が完了すると、アクセス対象データに対して、SCM32またはDRAM34のいずれか一方のキャッシュセグメントが割り当てられることとなる。
次に、SCM優先セグメント割当処理(図16のステップS33)について説明する。
図17は、一実施形態に係るSCM優先セグメント割当処理のフローチャートである。
まず、CPU33は、使用可能なSCM32のキャッシュセグメント325があるか否かを判定する(ステップS41)。ここで、使用可能なSCM32のキャッシュセグメント325とは、フリーもしくは、クリーンかつロックされていないキャッシュセグメント325のことである。なお、使用可能なSCM32のキャッシュセグメント325があるか否かは、SCMフリーキュー200や、SGCT120を参照することにより判定することができる。
この判定結果が真の場合(ステップS41:YES)は、CPU33は、処理をステップ42に進める一方、偽の場合(ステップS41:NO)は、処理をステップS43に進める。
ステップS42では、CPU33は、SCM32のキャッシュセグメントの割り当て(SCMセグメント割当)を行う。ここで、クリーンなキャッシュセグメント325を割り当てる場合は、CPU33は、このキャッシュセグメント325をSCMフリーキュー200およびキャッシュディレクトリ100から切り離してフリーセグメントにしたうえで割り当てを行う。
SCMセグメント割り当てでは、まず、CPU33は、SGCT120のセグメントID120b及びメモリ種類120cに、確保したキャッシュセグメントに対応するセグメントID及びメモリ種類(ここでは、SCM)を設定する。次いで、CPU33は、このキャッシュセグメント325を含むスロットに対応するSLCT110のSGCTポインタ110fにこのキャッシュセグメントのSGCT120へのポインタを設定する。もし、対応するSLCT110がキャッシュディレクトリ100に接続されていない場合は、CPU33は、まずSLCT110の内容を設定したうえ、このSLCT110をキャッシュディレクトリ100に接続して、その後、SLCT110へSGCT120を接続する。また、もし、確保したキャッシュセグメント325に対応するSGCT120以外のSGCT120が既にSLCT110に接続されている場合は、CPU33は、そのSLCT110に接続されている終端のSGCT120に、確保したキャッシュセグメント325のSGCT120を接続する。なお、SCMセグメント割り当ての終了後には、SCM優先セグメント割当処理を終了する。
ステップS43では、CPU33は、使用可能なDRAM34のキャッシュセグメント343があるか否かを判定する。この判定結果が真の場合(ステップS43:YES)は、CPU33は、処理をステップS45へ進める一方、偽の場合(ステップS43:NO)は、いずれかのキャッシュセグメント325,343が使用可能になるまで待って(ステップS44)、処理をステップS41に進める。
ステップS45では、CPU33は、DRAM34のキャッシュセグメントの割り当て(DRAMセグメント割当)を行う。DRAMセグメント割当は、ステップS42のSCMセグメント割当において、SCM32のキャッシュセグメント325を割り当てていたものを、DRAM34のキャッシュセグメント343を割り当てるように代えたものである。DRAMセグメント割当の終了後には、SCM優先セグメント割当処理を終了する。
このSCM優先セグメント割り当て処理では、SCM32のキャッシュセグメント325が優先して割り当てられることとなる。
次に、DRAM優先セグメント割当処理(図16のステップS34)について説明する。
図18は、一実施形態に係るDRAM優先セグメント割当処理のフローチャートである。
DRAM優先セグメント割当処理は、図17に示すSCM優先セグメント割当処理におけるSCM32のキャッシュセグメント325と、DRAM34のキャッシュセグメント343とを入れ替えた処理であるので、ここでは、簡単に説明を行う。
まず、CPU33は、使用可能なDRAM34のキャッシュセグメント343があるか否かを判定する(ステップS51)。この判定結果が真の場合(ステップS51:YES)は、CPU33は処理をステップS52に進める一方、偽の場合(ステップS51:NO)は、処理をステップS53に進める。
ステップS52では、CPU33は、DRAMセグメント割当を行う。このDRAMセグメント割当ては、図17のステップS45と同様な処理である。DRAMセグメント割当の終了後には、DRAM優先セグメント割当処理を終了する。
ステップS53では、CPU33は、使用可能なSCMセグメント325があるか否かを判定する。この判定結果が真の場合(ステップS53:YES)は、CPU33は、処理をステップS55に進める一方、偽の場合(ステップS53:NO)は、いずれかのキャッシュセグメント325,343が使用可能になるまで待って(ステップS54)、処理をステップS51に進める。
ステップS55では、CPU33は、SCMセグメント割当を行う。このSCMセグメント割当は、図17のステップS42と同様な処理である。SCMセグメント割当の終了後には、DRAM優先セグメント割当処理を終了する。
このDRAM優先セグメント割当処理では、DRAMセグメント343が優先して割り当てられることとなる。
次に、ステージング処理(図15のステップS5)について説明する。
図19は、一実施形態に係るステージング処理のフローチャートである。
まず、CPU33は、リードアドレスに対応するキャッシュセグメントのメモリの種類を調べ、キャッシュセグメントがDRAMセグメント343であるか否かを判定する(ステップS11)。ここで、キャッシュセグメントの基になっているメモリの種類は、対応するSGCT120のメモリ種類120cを参照することにより特定することができる。
この結果、キャッシュセグメントがDRAMセグメント343であれば(ステップS11:YES)、CPU33は、処理をステップS12に進める一方、キャッシュセグメントがDRAMセグメント343でなければ(ステップS11:NO)、CPU33は、処理をステップS13に進める。
ステップS12では、CPU33は、リード対象(ステージング対象)のデータをドライブ(HDD40またはSSD41)から読み出して、DRAMセグメント343に格納し、ステージング処理を終了する。
ステップS13では、CPU33は、リード対象(ステージング対象)のデータをドライブ(HDD40またはSSD41)から読み出して、SCMセグメント325に格納し、ステージング処理を終了する。
このステージング処理によると、リード対象のデータを、割り当てられているキャッシュセグメントに対して適切に読み出すことができる。
次に、データ送信処理(図15のステップS6)について説明する。
図20は、一実施形態に係るデータ送信処理のフローチャートである。
まず、CPU33は、リードアドレスに対応するキャッシュセグメントの基になっているメモリ(キャッシュメモリ)の種類を調べ、キャッシュセグメントがDRAMセグメント343であるか否かを判定する(ステップS21)。ここで、キャッシュセグメントの基になっているメモリの種類は、キャッシュセグメントに対応するSGCT120のメモリ種類120cを参照することにより特定することができる。
この結果、キャッシュセグメントがDRAMセグメント343であれば(ステップS21:YES)、CPU33は、処理をステップS22に進める一方、キャッシュセグメントがDRAMセグメント343でなければ(ステップS21:NO)、処理をステップS23に進める。
ステップS22では、CPU33は、リード対象(送信対象)のデータをDRAMセグメント343からユーザデータバッファ342へ転送し、処理をステップS24に進める。
ステップS23では、CPU33は、リード対象(送信対象)のデータをSCMセグメント325からユーザデータバッファ342へ転送し、処理をステップS24に進める。
ステップS24では、CPU33は、ストレージシステム20が圧縮モードに設定されているかを調べ、圧縮モードであれば(ステップS24:YES)、CPU33は、処理をステップS25に進める一方、圧縮モードに設定されていなければ(ステップS24:NO)、処理をステップS26に進める。
ステップS25では、CPU33は、圧縮されたユーザデータをユーザデータバッファ342上で伸張し、圧縮前(元のサイズ)のユーザデータへと復元する。その後、処理をステップS26に進める。
ステップS26では、CPU33は、ユーザデータバッファ342上のユーザデータをホスト計算機10へ転送し、データ送信処理を終了する。
このデータ送信処理によると、リード対象のユーザデータを適切にホスト計算機10に送信することができる。
次に、ライトデータコマンド処理について説明する。
図21は、一実施形態に係るライトコマンド処理のフローチャートである。
ライトコマンド処理は、ストレージシステム20がホスト計算機10からライトコマンドを受信した際に実行される処理である。
CPU33は、ホスト計算機10からライトコマンドを受信すると、CPU33は、圧縮論理ボリューム上の空きアドレスYを選択し、そのアドレスへライトコマンドに対応するライト対象のデータ(ライトデータ)を書き込むためのユーザデータライト処理(図22参照)を行う(ステップS104)。
次いで、CPU33は、ストレージシステム20が圧縮モードに設定されているか否かを判定し(S105)、圧縮モードに設定されていない場合(S105:NO)には、ライトコマンド処理を終了する一方、圧縮モードに設定されている場合(S105:YES)には、処理をステップS106に進める。
ステップS106では、CPU33は、管理データアクセス処理(図23参照)によりAMTD2300の参照を実行する(S106)。具体的には、CPU33は、リードコマンドで指定されている、平文論理ボリューム上のアドレスXから、それに対応するAMTD2300の管理データの保存先アドレスを特定し、AMTD2300から管理データを取得する。
次いで、CPU33は、管理データアクセス処理(図23参照)によりAMTB2400の参照を実行し(S107)、処理をステップS108に進める。具体的には、CPU33は、AMTD2300から取得した管理データからAMTB2400の管理データの保存先アドレスを特定し、AMTB2400から管理データを取得する。
ステップS108では、CPU33は、管理データアクセス処理(図23参照)によりAMTB2400の更新を実行する。具体的には、CPU33は、AMTB2400の管理データを、アドレスXをアドレスYに新たに対応付ける情報(例えば、先頭位置及びデータ長)に変更する。
次いで、CPU33は、管理データアクセス処理(図23参照)によりAMTD2300の更新を実行し(S109)、処理を終了する。具体的には、CPU33は、AMTD2300の管理データを、ステップS108で更新されたAMTB2400の管理データの管理データの保存先アドレスを示す情報へ変更し、処理を終了する。
このライトデータコマンド処理によると、ライトデータを適切に格納することができ、圧縮モードである場合には、ライトデータに対応する管理データを適切に更新することができる。
次に、ユーザデータライト処理(図21のステップS104)について説明する。
図22は、一実施形態に係るユーザデータライト処理のフローチャートである。
ストレージコントローラ30のCPU33は、ユーザデータをライトする、論理ボリュームの論理ブロックアドレス(以下、ライトアドレス)に対応するキャッシュセグメントが割り当て済みであるか否かを判定する(ステップS61)。この処理は、ユーザデータリード処理における処理ステップ(図15のS1)と同様であるので詳細な説明は省略する。
この結果、キャッシュセグメントが割り当て済みであれば(ステップS61:YES)、ステップS63へ処理を進める一方、キャッシュセグメントが未割り当てであれば(ステップS61:NO)、セグメント割当処理(図16参照)を実行し(ステップS62)、ステップS63へ処理を進める。セグメント割当処理では、ライトアドレスに対して、DRAM34またはSCM32からキャッシュセグメントが割り当てられる。なお、ライトされたデータを二重化することで信頼性を確保するために、キャッシュセグメントを2つ割り当てるようにしてもよい。
ステップS63では、CPU33は、ライトアドレスに対応するキャッシュセグメントを含むスロットをロックする。具体的には、CPU33は、このキャッシュセグメントを含むスロットのSLCT110のスロットステータス110eの「ロック中」を表すビットをONにすることで、このスロットがロックされていることを表すようにする。
続いて、CPU33は、ホスト計算機10に対し、例えば、XFER_RDYを送信することで、データ受領準備ができたことを通知する(ステップS64)。これに応じてホスト計算機10はユーザデータを送信することとなる。
次いで、CPU33は、ホスト計算機10から送信されるユーザデータを受信して、ユーザデータバッファ342に受領する(ステップS65)。
続いて、CPU33は、ストレージシステム20が圧縮モードに設定されているか否かを判定し(ステップS66)、圧縮モードに設定されていれば(ステップS66:YES)、処理をステップS67に進める一方、圧縮モードに設定されていなければ(ステップS66:NO)、処理をステップS68に進める。
ステップS67では、CPU33は、ユーザデータをユーザデータバッファ342上で圧縮し、圧縮された(元のサイズ以下の)ユーザデータへと変換し、処理をステップS68に進める。
ステップS68では、CPU33は、割り当てられているキャッシュセグメントがDRAMセグメント343であるか否かを判定する。この結果、割り当てられているキャッシュセグメントがDRAMセグメント343であれば(ステップS68:YES)、CPU33は、ユーザデータをDRAMセグメント343に書き込み(ステップS69)、処理をステップS71に進める。一方、割り当てたキャッシュセグメントがSCMセグメント325であれば(ステップS68:NO)、CPU33は、ユーザデータをSCMセグメント325に書き込み(ステップS70)、処理をステップS71に進める。
ステップS71では、CPU33は、書き込んだデータがダーティデータであると設定する。すなわち、CPU33は、書き込んだキャッシュセグメントに対応するSGCT120のダーティビットマップ120fにおけるデータが書き込まれたブロックに対応するビットをONに設定する。
続いて、CPU33は、完了ステータスをホスト計算機10に送信する(ステップS72)。すなわち、CPU33は、エラーが発生してライト処理が正常に完了しなかった場合はエラーステータス(例えばCHECK CONDITION)を返す一方、ライト処理が正常に完了した場合は正常ステータス(GOOD)を返す。
続いて、CPU33は、ロックしているスロットを解放(アンロック)して(ステップS73)、このスロットの状態を変更可能な状態にし、ユーザデータライト処理を終了する。
次に、管理データアクセス処理(図14のS101,S102、図21のS106〜S109)について説明する。
図23は、一実施形態に係る管理データアクセス処理のフローチャートである。
管理データアクセス処理には、管理データを参照する処理(管理データ参照処理)と、管理データを更新する処理(管理データ更新処理)とが含まれており、管理データ参照処理をするのか、管理データ更新処理をするかにより、実行される処理が変わる。
管理データ参照処理は、例えば、ストレージシステム20が圧縮モードに設定されている状態においてリードコマンドを受信した際に、リードコマンドで指定された、平文論理ボリューム上のリードアドレスに対応付けられている、圧縮論理ボリューム上のリードアドレス(先頭位置とデータ長)を参照するために実行される(図12のS101)。
一方、管理データ更新処理は、例えば、ストレージシステム20が圧縮モードに設定されている状態においてライトコマンドを受信した際に、ライトコマンドで指定された、平文論理ボリューム上のライトアドレスを、圧縮論理ボリューム上のライトアドレス(先頭位置とデータ長)に新たに対応づけるために実行される(図21のS108)。
まず、CPU33は、アクセスする管理データを保存する最終ストレージデバイス(40、41)上のアドレス(以下、管理データアドレス)を特定し、管理データアドレスに対してキャッシュセグメントが割り当て済みであるか否かを判定する(ステップS81)。この処理は、ユーザデータリード処理の処理ステップ(図15のS1)と同様であるので詳細な説明は省略する。なお、管理データアドレスは、例えば、AMTD2300における管理データのアドレス、やAMTB2400の管理データのアドレスである。
この結果、キャッシュセグメントが割り当て済みであれば(ステップS81:YES)、CPU33は、ステップS83へ処理を進める一方、キャッシュセグメントが未割り当てであれば(ステップS81:NO)、セグメント割当処理(図16参照)を実行し(ステップS82)、ステップS83へ処理を進める。
ステップS83では、CPU33は、管理データアドレスに対応するキャッシュセグメントを含むスロットをロックする。具体的には、CPU33は、このキャッシュセグメントを含むスロットのSLCT110のスロットステータス110eの「ロック中」を表すビットをONにすることで、このスロットがロックされていることを表すようにする。
続いてCPU33は、管理データがキャッシュセグメントに格納されているか否か、すなわち、キャッシュヒットか否かを判定する(ステップS84)。具体的には、CPU33は、管理データのキャッシュセグメントに対応するSGCT120のステージングビットマップ120e及びダーティビットマップ120fを調べ、参照する管理データの全ブロックに関して、各ブロックに対応するステージングビットマップ120eのビットもしくはダーティビットマップ120fのビットのいずれかがONであれば、キャッシュヒットであると判断する。一方、CPU33は、参照する範囲内に、ダーティビットマップ120fとステージングビットマップ120eとの対応するビットがいずれもOFFであるブロックが1つでもある場合は、キャッシュミスであると判断する。
この結果、キャッシュヒットの場合(ステップS84:YES)は、CPU33は、処理をステップS86へ進める一方、キャッシュミスの場合(ステップS84:NO)は、ステージング処理(図19参照)を実行し(ステップS85)、処理をステップS86に進める。ステージング処理では、ドライブ(HDD40、またはSSD41)からキャッシュセグメント(325又は343)へ管理データが読み込まれる。ステージング処理が完了すると、管理データがキャッシュセグメント(325又は343)に格納された状態になる。
続いて、CPU33は、管理データへのアクセスの種類が何であるか(参照又は更新のいずれか)を判定する(ステップS86)。この結果、アクセスの種類が「参照」である場合(ステップS86:参照)は、CPU33は、キャッシュセグメントに格納された管理データを参照し(ステップS87)、処理をステップS90へ進める。
一方、アクセス種類が「更新」である場合(ステップS86:更新)は、CPU33は、キャッシュセグメント上の管理データのブロックを更新する(ステップS88)。続いて、CPU33は、更新したブロックがダーティデータであると設定し(ステップS89)、処理をステップS90に進める。すなわち、CPU33は、更新したブロックを含むキャッシュセグメントに対応するSGCT120のダーティビットマップ120fにおける更新ブロックに対応するビットをONに設定し、処理をステップS90へ進める。
ステップS90では、CPU33は、ロックしているスロットを解放(アンロック)し、このスロットの状態を変更可能な状態にし、管理データアクセス処理を終了する。
この管理データアクセス処理によると、管理データを参照したり、更新したりすることができる。
次に、ダーティデータ書き出し処理について説明する。
図24は、一実施形態に係るダーティデータ書き出し処理のフローチャートである。
ダーティデータ書き出し処理は、LRU(Least Recently Used)アルゴリズムに基づいてメモリのキャッシュ領域内のダーティなデータを選択し、このデータを最終ストレージデバイスに書き出し、クリーン化する処理である。データをクリーン化することで、キャッシュ領域からこのデータが使用しているキャッシュセグメントをいつでも空き(未割り当て)状態にすることができる。ダーティデータ書き出し処理は、例えば、メモリに新しいデータをキャッシュするための空きキャッシュセグメントが不足している場合に行う。ダーティデータ書き出し処理は、ストレージシステム20のCPU33の使用率が低い時に、バックグラウンド処理として実行することが好ましい。ホスト計算機10からのリード/ライトコマンド契機に空きキャッシュセグメント不足を検知してからダーティデータ書き出し処理を実行すると、この処理によるダーティデータの書き出しにかかる時間分だけ、応答性能が落ちるためである。
最終ストレージデバイス(40、41)に保存するユーザデータや管理データは、デバイス故障によるデータ損失を防ぐために、RAID(Redundant Arrays of Independent Disks)技術に基づく、冗長化を施してからデバイスに記録してもよい。例えば、最終ストレージデバイスの台数がN台であれば、書き出すデータを(N−1)台に均等に配分して記録し、この書き出すデータの排他的論理和を計算して作ったパリティを残りの1台に記録する。これにより、N台のうち1台が故障しても、データ復元が可能となる。例えば、N=4のとき、3台のデバイスに等しいサイズのデータD1、D2、D3を記録して、残りの1台のデバイスにP=D1+D2+D3(+は排他的論理和を示す)により計算されるパリティPを記録する。D2を記録するデバイスが故障した場合は、P+D1+D3=D2の性質を利用して、D2を復元することができる。このような管理をする場合には、CPU33は、一時的にパリティをキャッシュメモリ領域に格納するため、キャッシュセグメントを利用する。
図24において、まず、CPU33は、最終ストレージデバイス(40、41)に書き出すデータ(書出対象データ)のパリティを格納するためのキャッシュセグメントが割り当て済みであるか否かを判定する(ステップS111)。この処理はユーザデータリード処理の処理ステップ(図15のS1)と同様であるので詳細な説明は省略する。
この結果、キャッシュセグメントが割り当て済みであれば(ステップS111:YES)、ステップS113へ処理を進める一方、キャッシュセグメントが未割り当てであれば(ステップS111:NO)、セグメント割当処理(図16参照)を実行し(ステップS112)、ステップS113へ処理を進める。セグメント割当処理では、パリティの記録先アドレスに対して、DRAM34またはSCM32からキャッシュセグメントが割り当てられる。本実施形態では、パリティは、ユーザデータと同様にキャッシュセグメントの割り当てが行われている。なお、パリティを二重化することで信頼性を確保するために、キャッシュセグメントを2つ割り当てるようにしてもよい。
ステップS113では、CPU33は、パリティを格納するキャッシュセグメントを含むスロットをロックする。具体的には、CPU33は、このキャッシュセグメントを含むスロットのSLCT110のスロットステータス110eの「ロック中」を表すビットをONにすることで、このスロットがロックされていることを表すようにする。
続いて、CPU33は、書出対象データからパリティを生成して割り当て済みのセグメントに格納する(ステップS114)。
続いて、CPU33は、書出対象データと、生成したパリティとに対して、デステージング処理(図25参照)を行う(ステップS115)。でステージング処理の詳細は後述する。
続いて、CPU33は、デステージングが完了した書出対象データとパリティとをクリーンデータであると設定する。すなわち、CPU33は、キャッシュセグメントに対応するSGCT120のダーティビットマップ120fにおけるデータが書き込まれたブロックに対応するビットをOFFに設定する(ステップS116)。
続いて、CPU33は、ロックしているスロットを解放(アンロック)し(ステップS117)、このスロットの状態を変更可能な状態にし、ダーティデータ書き出し処理を終了する。
ダーティデータ書き出し処理によると、キャッシュに使用できるキャッシュセグメントを適切に増加させることができる。
次に、デステージング処理(図24のステップS115)について説明する。
図25は、一実施形態に係るデステージング処理のフローチャートである。
このデステージング処理は、書出対象データ及びパリティのそれぞれを対象に実行される。まず、CPU33は、対象のデータ(書出対象データ/生成したパリティ)に割り当てられているキャッシュセグメントがDRAMセグメント343であるか否かを判定する(ステップS121)。
この結果、割り当てられているキャッシュセグメントがDRAMセグメント343であれば(ステップS121:YES)、CPU33は、書出対象データ/パリティをDRAMセグメント343から読み出してストレージデバイス(HDD40又はSSD41)に書き込み(ステップS122)、デステージング処理を終了する。一方、割り当てたキャッシュセグメントがSCMセグメント325であれば(ステップS121:NO)、CPU33は、書出データ/パリティをSCMセグメント325から読み出してストレージデバイス(HDD40又はSSD41)に書き込み(ステップS123)、デステージング処理を終了する。
以上、本発明の一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施例にのみ限定する趣旨ではない。すなわち、本発明は、他の種々の形態でも実施することが可能である。
例えば、上記実施形態では、ユーザデータについては、DRAMセグメント343が使用可能でない場合には、SCMセグメント325が使用可能であれば使用する(ユーザデータをSCMセグメント325に格納する)ようにしていたが、本実施形態では、これに限られず、例えば、ユーザデータについて、DRAMセグメント343が使用可能でない場合には、DRAMセグメント343が使用可能になるまで待つようにしてもよい。具体的には、図18のDRAM優先セグメント割当処理のステップS51でNOの場合に、CPU33がステップS54に処理を進めるようにし、ステップS54でDRAMセグメント343が使用可能になるまで待つようにしてもよい。このようにすると、ユーザデータを常にDRAMセグメント343に格納することができ、ユーザデータに対するアクセス性能を高く維持することができる。
また、上記実施形態では、管理データについては、SCMセグメント325が使用可能でない場合には、DRAMセグメント343が使用可能であれば使用する(管理データをDRAMセグメント343に格納する)ようにしていたが、本実施形態では、これに限られず、例えば、管理データについて、SCMセグメント325が使用可能でない場合には、SCMセグメント325が使用可能になるまで待つようにしてもよい。具体的には、図17のSCM優先セグメント割当処理のステップS41でNOの場合に、CPU33がステップS44に処理を進めるようにし、ステップS44でSCMセグメント25が使用可能になるまで待つようにしてもよい。このようにすると、管理データがDRAMセグメント343に格納されることを防ぐことができ、DRAM343の空き領域を適切に確保することができる。
また、上記実施形態では、ユーザデータをDRAM34に優先的にキャッシュし、管理データをSCM32に優先的にキャッシュするようにしていたが、DRAM34にキャッシュするのか、SCM32にキャッシュするのかのデータのキャッシュ先の切り分けはこれに限られない。例えば、比較的高い性能が要求される特性を有するユーザデータについては、DRAM34にキャッシュするようにし、それ以外のユーザデータについては、SCM32にキャッシュするようにしてもよく、要は、比較的高い性能が要求される特性のデータを高性能なメモリにキャッシュし、それ以外の特性のデータを低性能なメモリにキャッシュするようにすればよい。例えば、比較的高い性能が要求される特性を有するデータであるか否かについては、このようなデータを特定可能な情報(例えば、データ種類名、格納先のLUや、LUのLBA等)を設定しておき、この情報に基づいて判断するようにすればよい。
また、上記実施形態では、アクセス性能の違うメモリとして、DRAM34と、SCM32とを例に挙げていたが、例えば、アクセス性能の高いDRAMと、アクセス性能の低いDRAMとを用意し、これらを用いて、データ種類によりキャッシュさせるメモリを制御するようにしてもよい。また、アクセス性能の違うメモリとして、2種類のメモリを備えるようにしていたが、アクセス性能の違う3種類以上のメモリを備えるようにしてもよい。この場合には、データの種類に応じてキャッシュさせるメモリを制御するようにすればよい。
1A,1B…情報システム、20・・・ストレージシステム、30…ストレージコントローラ、32…SCM、34…DRAM、40・・・HDD、41・・・SSD

Claims (10)

  1. ストレージデバイスに対する入出力に係るデータをキャッシュするためのメモリ部と、前記メモリ部に接続されたプロセッサ部とを備えるデータ管理装置であって、
    前記メモリ部は、アクセス性能が高い第1種メモリと、前記第1種メモリとアクセス単位が同一であり、且つ前記第1種メモリよりもアクセス性能が低い第2種メモリとを有し、
    前記プロセッサ部は、
    前記ストレージデバイスに対する入出力に係るデータに基づいて、前記第1種メモリと、前記第2種メモリとのいずれにキャッシュさせるかを決定し、
    前記データを前記決定した前記第1種メモリまたは前記第2種メモリにキャッシュする
    データ管理装置。
  2. 前記ストレージデバイスに対する入出力に係るデータには、ホストコンピュータからのI/O要求に係るユーザデータと、前記ユーザデータを管理するための管理データとがあり、
    前記プロセッサ部は、前記ユーザデータを、前記第1種メモリにキャッシュさせ、前記管理データを前記第2種メモリにキャッシュさせるように決定する
    請求項1に記載のデータ管理装置。
  3. 前記プロセッサ部は、前記第1種メモリに前記ユーザデータをキャッシュさせる際に、前記第1種メモリに空きがない場合に、前記第2種メモリにキャッシュさせるように決定する
    請求項2に記載のデータ管理装置。
  4. 前記プロセッサ部は、前記第1種メモリに前記ユーザデータをキャッシュさせる際に、前記第1種メモリに空きがない場合に、前記第1種メモリに空きができるまで待った後に、前記ユーザデータを前記第1種メモリにキャッシュさせる
    請求項2に記載のデータ管理装置。
  5. 前記プロセッサ部は、前記第2種メモリに前記管理データをキャッシュさせる際に、前記第2種メモリに空きがない場合に、前記第1種メモリにキャッシュさせるように決定する
    請求項2に記載のデータ管理装置。
  6. 前記プロセッサ部は、前記第2種メモリに前記管理データをキャッシュさせる際に、前記第2種メモリに空きがない場合に、前記第1種メモリにキャッシュさせるように決定する
    請求項2に記載のデータ管理装置。
  7. 前記管理データは、前記ユーザデータを圧縮して前記ストレージデバイスに格納させるアドレスを特定可能なアドレスデータである
    請求項2から請求項6のいずれか一項に記載のデータ管理装置。
  8. 前記第1種メモリは、DRAM(Dynamic Random Access Memory)であり、前記第2種メモリは、SCM(Storage Class Memory)である
    請求項1から請求項7のいずれか一項に記載のデータ管理装置。
  9. ストレージデバイスに対する入出力に係るデータをキャッシュするためのメモリ部を備えるデータ管理装置によるデータ管理方法であって、
    前記メモリ部は、アクセス性能が高い第1種メモリと、前記第1種メモリとアクセス単位が同一であり、且つ前記第1種メモリよりもアクセス性能が低い第2種メモリとを有しており、
    前記ストレージデバイスに対する入出力に係るデータに基づいて、前記第1種メモリと、前記第2種メモリとのいずれにキャッシュさせるかを決定し、
    前記データを前記決定した前記第1種メモリまたは前記第2種メモリに格納させる
    データ管理方法。
  10. ストレージデバイスに対する入出力に係るデータをキャッシュするためのメモリ部と、前記メモリ部に接続されたプロセッサ部とを備えるデータ管理装置を構成するコンピュータに実行させるデータ管理プログラムであって、
    前記メモリ部は、アクセス性能が高い第1種メモリと、前記第1種メモリとアクセス単位が同一であり、且つ前記第1種メモリよりもアクセス性能が低い第2種メモリとを有し、
    前記コンピュータを、
    前記ストレージデバイスに対する入出力に係るデータに基づいて、前記第1種メモリと、前記第2種メモリとのいずれにキャッシュさせるかを決定する機能と、
    前記データを前記決定した前記第1種メモリまたは前記第2種メモリに格納する機能と、を実現するためのデータ管理プログラム。
JP2018203851A 2018-10-30 2018-10-30 データ管理装置、データ管理方法、及びデータ管理プログラム Pending JP2020071583A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2018203851A JP2020071583A (ja) 2018-10-30 2018-10-30 データ管理装置、データ管理方法、及びデータ管理プログラム
CN201910719465.5A CN111124950A (zh) 2018-10-30 2019-08-05 数据管理装置、数据管理方法和存储介质
US16/535,555 US20200133836A1 (en) 2018-10-30 2019-08-08 Data management apparatus, data management method, and data management program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018203851A JP2020071583A (ja) 2018-10-30 2018-10-30 データ管理装置、データ管理方法、及びデータ管理プログラム

Publications (1)

Publication Number Publication Date
JP2020071583A true JP2020071583A (ja) 2020-05-07

Family

ID=70326966

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018203851A Pending JP2020071583A (ja) 2018-10-30 2018-10-30 データ管理装置、データ管理方法、及びデータ管理プログラム

Country Status (3)

Country Link
US (1) US20200133836A1 (ja)
JP (1) JP2020071583A (ja)
CN (1) CN111124950A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021210503A1 (ja) 2020-04-13 2021-10-21 Agc株式会社 含フッ素共重合体組成物および架橋ゴム物品

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11687443B2 (en) * 2013-05-15 2023-06-27 EMC IP Holding Company LLC Tiered persistent memory allocation
US11221954B2 (en) * 2019-11-18 2022-01-11 International Business Machines Corporation Storing metadata in heterogeneous cache to improve I/O performance
US11416407B2 (en) * 2020-05-22 2022-08-16 Dell Products, L.P. Method and apparatus for cache slot allocation based on data origination location or final data destination location
US11586360B2 (en) * 2021-05-14 2023-02-21 International Business Machines Corporation Hybrid memory mirroring using storage class memory
CN116719485B (zh) * 2023-08-09 2023-11-03 苏州浪潮智能科技有限公司 基于fpga的数据读写方法及读写单元与fpga
CN116991339B (zh) * 2023-09-28 2023-12-22 深圳大普微电子股份有限公司 基于scm和ssd的混合存储器、混合存储系统及方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011074040A1 (en) * 2009-12-17 2011-06-23 Hitachi,Ltd. Storage apparatus and its control method
US20140189204A1 (en) * 2012-12-28 2014-07-03 Hitachi, Ltd. Information processing apparatus and cache control method
CN108108311A (zh) * 2013-12-12 2018-06-01 株式会社日立制作所 存储装置及存储装置的控制方法
US11481114B2 (en) * 2016-11-08 2022-10-25 Hitachi, Ltd. Storage apparatus and control method of storage apparatus
JP6429963B2 (ja) * 2017-09-14 2018-11-28 株式会社日立製作所 ストレージ装置及びストレージ装置の制御方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021210503A1 (ja) 2020-04-13 2021-10-21 Agc株式会社 含フッ素共重合体組成物および架橋ゴム物品

Also Published As

Publication number Publication date
CN111124950A (zh) 2020-05-08
US20200133836A1 (en) 2020-04-30

Similar Documents

Publication Publication Date Title
JP6000376B2 (ja) 特性の異なる複数種類のキャッシュメモリを有する情報処理装置
US11467955B2 (en) Memory system and method for controlling nonvolatile memory
US20230259452A1 (en) Computing system and method for controlling storage device
JP2020071583A (ja) データ管理装置、データ管理方法、及びデータ管理プログラム
JP6073471B2 (ja) ストレージ装置
US8832371B2 (en) Storage system with multiple flash memory packages and data control method therefor
JP6212137B2 (ja) ストレージ装置及びストレージ装置の制御方法
US20140189203A1 (en) Storage apparatus and storage control method
US9792073B2 (en) Method of LUN management in a solid state disk array
JP6677740B2 (ja) ストレージシステム
JP6429963B2 (ja) ストレージ装置及びストレージ装置の制御方法
KR20150105323A (ko) 데이터 스토리지 방법 및 시스템
US20210124689A1 (en) Caching techniques
JP6716757B2 (ja) メモリシステムおよび制御方法
US11086793B2 (en) Data reduction techniques for use with caching
JP6817340B2 (ja) 計算機
WO2019026221A1 (ja) ストレージシステム及びストレージ制御方法
KR20210142863A (ko) 데이터 처리 시스템의 동작 효율성을 높이기 위한 장치 및 방법
WO2018002999A1 (ja) 記憶デバイス及びストレージ装置
EP4303735A1 (en) Systems, methods, and devices for reclaim unit formation and selection in a storage device
CN117369718A (zh) 在存储装置中形成和选择回收单元的系统、方法和装置
JP6273678B2 (ja) ストレージ装置
CN116662217A (zh) 持久性存储器装置及应用持久性存储器装置的方法