幾つかの実施例を、図面を参照して説明する。なお、以下に説明する実施例は特許請求の範囲にかかる発明を限定するものではなく、また実施例の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
なお、以後の説明では「aaaテーブル」、「aaaリスト」、「aaaDB」、「aaaキュー」等の表現にて情報を説明するが、これら情報は必ずしもテーブル、リスト、DB、キュー、等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「aaaテーブル」、「aaaリスト」、「aaaDB」、「aaaキュー」等について「aaa情報」と呼ぶことがある。さらに、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ID」という表現を用いるが、これらについてはお互いに置換が可能である。さらに、データ内容を示すために「情報」という表現を用いているが、他の表現形式であってもよい。
また、以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート(I/Oポート等)を用いながら行うため、プロセッサ或いはプロセッサを有する制御デバイスを主語とした説明としてもよい。また、プログラム或いは制御デバイスを主語として開示された処理は管理サーバ又はストレージシステム等の計算機、情報処理装置が行う処理としてもよい。また、制御デバイスは、プロセッサに代えて又は加えて、一部または全ての処理を行う専用ハードウェアを有してもよい。また、各種プログラムは、プログラム配布サーバ或いは記憶メディアから計算機にインストールされてもよい。
なお、不揮発性メモリの「不揮発」とは、通常の意味通り、いかなる場合でも記憶内容を保持することや、永久に記憶内容を保持できることを指すのではなく、電源供給されない場合でも相応の期間(例えば1年から数年等)、記憶内容を保持できることを意味する。本実施例においては不揮発性メモリとしてフラッシュメモリを例に取るが、製造時に複数のビット数を記憶可能なメモリセルを有するメモリであれば他種のメモリ(例えばPRAM(Phase change Random Access Memory、MRAM(Magnetoresistive
Random Access Memory)等)であってもよい。
また、制御デバイス(及びその制御デバイスを有する計算機)の「表示する」という行為は、制御デバイスが、その制御デバイスを有する計算機の表示デバイスに画面部品等を表示する行為と、表示デバイスを有する上記第2の計算機に、その表示デバイスに表示される画面部品等の表示用情報を送信する行為のいずれであっても良い。第2の計算機は、表示用情報を受信した場合、その表示用情報が表す画面部品等を表示デバイスに表示することができる。
以下、図面を参照して、第1実施例について説明する。
<1.情報システムの構成>。
図1は、第1実施例に係る計算機システムの構成例を示す図である。
計算機システムは、例えば、ストレージシステム1000及び管理サーバ1200を含む。ストレージシステム1000が、ホストコンピュータ(以後ホストと省略する)1100から送信されたI/Oリクエスト(ライトリクエスト及びリードリクエスト)を受ける。ホスト1100及び管理サーバ1200の数は、それぞれ、1以上とすることができる。ストレージシステム1000とホスト1100とは、I/Oネットワーク1300を介して、相互に接続される。ストレージシステム1000と管理サーバ1200及びホスト1100は、管理ネットワーク(図示せず)またはI/Oネットワーク1300を介して、相互に接続される。
ホスト1100は、ホスト内部ネットワーク1104(例えばバス)を有している。ホスト内部ネットワーク1104に、プロセッサ(図中ではProcと略記)1101と、メモリ(図中ではMemと略記)1102と、I/Oポート(図中ではI/O Pと略記)1103とが接続されている。
管理サーバ1200は、管理サーバ内部ネットワーク1204(例えばバス)を有している。管理サーバ内部ネットワーク1204に、プロセッサ(図中ではProcと略記)1201と、記憶資源1210と、管理ポート(図中ではM Pと略記)1203と、入出力装置1205(図中ではI/Oデバイスと略記)とが接続されている。なお、記憶資源1210は、半導体メモリ又はHDD、及びこれら組み合わせであることが考えられるが、情報及びプログラムを記憶できるのであれば他のデバイスでもよい。入出力装置1205としては、例えば、ディスプレイと、キーボードと、ポインタデバイスとが考えられるが、これ以外の装置であってもよい。また、入出力装置1205の代替として、シリアルインターフェースやイーサーネットインターフェースを入出力装置とし、当該インターフェースにディスプレイ又はキーボード又はポインタデバイスを含む表示用計算機を接続し、表示用情報を表示用計算機に送信したり、入力用情報を表示用計算機から受信することで、表示用計算機で表示を行ったり、入力を受け付けることで入出力装置での入力及び表示を代替してもよい。
また、管理サーバ1200は、管理操作リクエストを、ユーザ(例えば管理サーバ1200のオペレーター、単に管理者と呼ぶこともある)から受付け、その受け付けた管理操作リクエストを、ストレージシステム1000に送信することができる。管理操作リクエストは、ストレージシステム1000の操作のためのリクエストであり、例えば、パリティグループ作成リクエスト、内部LU作成リクエスト、パス定義リクエスト、プール定義リクエスト、仮想内部LU作成リクエスト、セルモード設定リクエスト、及びデータ移動リクエストがある。それぞれのリクエストについては、後述する。
以後、計算機システム内のストレージシステムを管理し、表示用情報を表示する一つ以上の計算機の集合を管理システムと呼ぶことがある。管理サーバ1200が表示用情報を表示する場合は管理サーバ1200が管理システムである、また、管理サーバ1200と表示用計算機の組み合わせも管理システムである。また、管理処理の高速化や高信頼化のために複数の計算機で管理計算機と同等の処理を実現してもよく、この場合は当該複数の計算機(表示を表示用計算機が行う場合は表示用計算機も含め)が管理システムである。
I/Oネットワーク1300は、ファイバーチャネルによる接続が第一に考えられるが、それ以外でも、FICON(FIbre CONnection:登録商標)やEthernet(登録商標)とTCP/IPとiSCSIの組み合わせや、EthernetとNFS(Network File System)やCIFS(Common Internet File System)等のネットワークファイルシステムの組み合わせ等が考えられる。さらに、I/Oネットワーク1300は、I/Oリクエストを転送可能な通信ネットワークであればこれ以外でもよい。また、I/Oネットワーク1300と管理ネットワークは同じネットワークであってもよい。
ストレージシステム1000は、コントローラ(図中はCTLと表記)1010と、キャッシュメモリ(図中はCache/Shared Memと表記)1020と、複数のフラッシュメモリデバイス(Flash Memory Device:以後FMDと省略することがある)1030とを含む。なお、ストレージシステム1000は、複数のHDD1040を含んでも良い。なお、以後の説明ではFMD1030とHDD1040とを区別しないで総称する場合は記憶デバイスまたはSDEVと呼ぶ。
好ましい形態としては、ストレージコントローラ1010及びキャッシュメモリ1020は、それぞれ複数のコンポーネントから構成することが考えられる。なぜなら、コンポーネント単体に障害が発生して閉塞した(利用不可能となったことを指す)場合でも、残りのコンポーネントを用いてリードやライトに代表されるI/Oリクエストを引き続き受けることができるためである。ただし、ストレージコントローラ1010及びキャッシュメモリ1020の少なくとも一方は、必ずしも複数コンポーネントで構成されなくても良い。
ストレージコントローラ1010は、ストレージシステム1000の動作を制御する装置(例えば回路基板)である。ストレージコントローラ1010は、内部ネットワーク1016を含む。内部ネットワーク1016には、I/Oポート1013、キャッシュポート(図中ではC Pと表記)1015、管理ポート(図中ではM Pと表記)1016、バックエンドポート(図中ではB/E Pと表記)1014、プロセッサ(例えばCPU)1011及びメモリ1012が接続されている。ストレージコントローラ1010同士とキャッシュメモリ1020は、ストレージ内部ネットワーク1050にて相互に接続される。また、ストレージコントローラ1010と、各FMD1030及び各HDD1040とは、複数のバックエンドネットワーク1040にて相互接続される。なお、バックエンドネットワーク1040として、I/Oネットワーク1300で紹介した接続媒体及びプロトコルを採用してもよいが、SAS、SATA、またはPCI-Express等の他の媒体及びプロトコルであってもよい。
なお、ホスト1100及びストレージシステム1000の内部のネットワークは、好ましくは、I/Oポート1013の含む転送帯域より広帯域であり、また、バスやスイッチ型のネットワークによって全てまた一部が代替されてもよい。また、図1では、I/Oポート1013は、ストレージコントローラ1010に一つ存在することになっているが、実際には、複数のI/Oポート1013がストレージコントローラ1010に存在してもよい。
以上のハードウェア構成によって、ストレージシステム1000のFMD1030又はHDD1040に保存された全てまたは一部のデータを、ホスト1100が読出したり、書き込んだりすることができ、管理サーバ1200が計算機システムを管理できるようになる。
図2は、第1実施例に係るFMDの構成例を示す図である。
FMD1030は、I/Oポート2030と、FMDコントローラ2010と、複数のFMC(フラッシュメモリチップ)2020とを含む。I/Oポート2030は、バックエンドネットワーク1040と、FMDコントローラ2010とに接続される。FMDコントローラ2010は、複数のFMC2020に接続される。FMC2020は、複数のフラッシュメモリセル(FMセル:図中ではCellと表記)を含む。
なお、好ましくは、FMD1030は、複数のI/Oポート2030を含む。なぜならば、バックエンドネットワーク1040が冗長化されているために、冗長化された各々のバックエンドネットワーク1040とFMD1030とが独立の部品で接続されたほうが冗長性維持のためには望ましいからである。しかし、FMD1030は1つのI/Oポート2030であっても良い。
<1.1. フラッシュメモリの概要>。
本章では、FMC2020に複数含まれるFMセルについて説明する。
<1.1.2. FMセルの説明>。
図55は、第1実施例に係るFMセルのセル構造を示す図である。
FMセルは、p型半導体であるシリコン基板5501と、n型半導体(ソース)5502と、他のn型半導体(ドレイン)5503と、トンネル酸化膜5504と、フローティングゲート5505と、酸化膜5506と、コントロールゲート5507とを含む。フローティングゲート5505は、トンネル酸化膜5504と、酸化膜5506とにより絶縁された構造である。フローティングゲート5505は、後述するセルプログラミング操作によってトンネル効果を生み出すことで、電子を蓄積できる。また、フローティングゲート5505は、後述するセルイレース操作によって、トンネル効果を生み出すことで蓄積した電子を解放する。なお、トンネル酸化膜5504は、劣化が進むと絶縁能力が低下するため、時間的経過とともにフローティングゲート5505に蓄積された電子が漏れる。この劣化を進める原因の一つがセルプログラミングとセルイレースとの繰り返しである。
<1.1.3. セルイレース操作>。
図56は、第1実施例に係るFMセルのセルイレースを説明する図である。
セルイレース操作は、フローティングゲート5505に蓄積された電子を解放する操作である。この操作は、コントロールゲート5507にグランド電圧、ドレイン5503、ソース5502、及びシリコン基板5501に、所定の電圧(Ve)を加えることで実現される。なお、ドレイン5503、ソース5502、及びシリコン基板5501のそれぞれの電圧Veは、微細な視点で同じ電圧でなければならないわけではない。なお、セルイレース操作の単位が、セルプログラミング操作やセルリード操作の単位より大きい典型的な理由は、FMC2020の構造をシンプルにすることで実装密度を上げるためである。
<1.1.4. セルプログラミング操作>。
図57は、第1実施例に係るFMセルのセルプログラミングを説明する図である。
セルプログラミング操作は、フローティングゲート5505に、電子を蓄積させる操作である。この操作は、ドレイン5503、ソース5502、シリコン基板5501にグランド電圧を加え、コントロールゲート5507に所定の電圧(Vpgm)を加えることで実現される。なお、ドレイン5503、ソース5502、シリコン基板5501に加えるグランド電圧が微細に異なってもよい。
<1.1.5. セルリード操作>。
図58は、第1実施例に係るFMセルのセルリードを説明する図である。
セルリード操作は、ドレイン5503からソース5502への電流Idsの有無によって、フローティングゲート5505に蓄積された電子蓄積の有無(より正確には蓄積した電子の量)を測る(センスする)操作である。この操作は、コントロールゲート5507に所定の電圧(Vread)を加えることで、ドレイン=ソース間を流れる電流Idsを測ること(電流が所定量流れたか否か確認すること)で実現される。
<1.1.6.閾値電圧と各操作について>。
ここで、ドレイン=ソース間に電流が流れない状態から所定の電流量だけ電流が流れる状態に変化するVreadを閾値電圧(Vth)と呼ぶ。閾値電圧はフローティングゲート5505に蓄積された電子の量に関係し、フローティングゲート5505に蓄積された電子の量が多いほど、閾値電圧は高くなる。閾値電圧の定義の通り、閾値電圧より高い電圧をVreadとしてもIdsは流れる。
しかし、セルプログラミング及びセルイレース操作の基となるトンネル効果は確率的に発生する現象であり、また個々のFMセルの個体差もあることから、フローティングゲート5505に蓄積または解放する電子の量は簡単に制御できない。そのため、実際のセルプログラミング操作では、電圧Vpgmを加えた後に閾値電圧を確認することを繰り返して、セルリード操作の際の閾値電圧が事前に定められた境界電圧Vraより高くなるように、Vpgmの大きさ及び加圧期間を調整する。
なお、境界電圧Vraは、セルイレースされたFMセルの閾値電圧より高くなければならない。なぜならばセルイレース後のFMセルの閾値電圧が境界電圧Vraより高いことがあれば、そのFMセルはセルプログラミングされたものと間違えられてしまうからである。
<1.1.7. 1FMセルに複数ビット記憶する場合>。
1つのFMセルに2ビット記憶する場合、フローティングゲート5505に蓄積される電子の量をセルイレース直後の状態を含めて4状態にコントロールする。その上で、セルリード操作時の閾値電圧として境界電圧Vra、Vrb、Vrcを加えてIdsを測る。そのために、FMセルは、境界電圧Vra未満の閾値電圧であるイレース直後の第1状態、境界電圧Vraより高くかつVrbより低い閾値電圧となるようにセルプログラミングされた第2状態、境界電圧Vrbより高くかつVrcより低い閾値電圧となるようにセルプログラミングされた第3状態、境界電圧Vrcより高い閾値電圧となるようにセルプログラミングされた第4状態を取りうる。ここでイレース直後の第1状態が示す2ビット値を”11”、第2状態が示すビット値を”10”、第3状態が示すビット値を”00”、第4状態が示すビット値を”01”とする。なお、セルの各状態が示すビット値と、上位装置(ストレージコントローラ1010等)がセルに書き込むデータのビット値とは、同じであってもよく、また、各ビットの値を反転させたものであってもよく、いずれかに統一されていればよい。すなわち、上位装置が書き込むデータが“10”の場合に、セルには、そのまま“10”として書き込むようにしてもよく、また、上位装置が書き込むデータが“10”の場合に、セルには、各ビットの“1”と“0”とを反転させた“01”を書き込むようにしてもよい。
図60は、第1実施例に係るFMセルで2ビット記憶する場合の閾値電圧の分布を示す図である。
セルイレース後の”11”状態から、FMセルの低位ビット(LSB:Least significant bit)を”0”にする場合は、セルプログラミング操作によってFMセルの閾値電圧はVraより高く、Vrbより低くなるようにコントロールされる。その結果、FMセルは”10”状態となる。
FMセルの高位ビット(MSB:Most
significant bit)のセルプログラミングは、LSBのセルプログラミングの後に実施する。LSBの状態が”0”の状態からさらに高位ビット(MSB)を”0”(即ち”00”)にする場合は、セルプログラミング操作によってFMセルの閾値電圧は”00”の分布の範囲内(即ちVrbより高く、Vrcより低く)となるようにコントロールされる。同様にLSBの状態が”1”からMSBだけ”0”
(即ち”01”)にする場合は、セルプログラミング操作によってFMセルの閾値電圧は”01”の分布の範囲内(即ちVrcより高く)となるようにコントロールされる。なお、MSBを”0”にした後にLSBを”0”にするためには、セルイレース操作が必要となる。
このような状態のFMセルからMSBをセルリードする場合、コントロールゲート5507に加える電圧VreadをVrbとした場合の電流Idsを測ることで、FMセルが”11”または”10”といったMSBが”1”であるのか、またはFMセルが”01”または”00”といったMSBが”0”であるのかを確認する。また、FMセルからLSBをセルリードする場合は、コントロールゲート5507に加える電圧Vreadを電圧Vrcとした場合と、電圧Vraとした場合との電流Idsを測り、その測定結果により確認する。即ち、コントロールゲート5507に加える電圧VreadをVrcとした場合の電流IdsをIdsc、電圧VreadをVraとした場合の電流IdsをIdsaとすると、まず電圧VreadをVraとして、電流Idsaが流れると、FMセルが”11”であると判断し、LSBが”1”であるとする。さらにVreadをVrcとし、Idscが流れなければFMセルが”01”であると判断し、LSBが”1”であるとし、Idscが流れればFMセルが”00”または”10”であると判断し、LSBが”0”であるとする。
<1.1.8. FMセルの劣化>。
各状態における閾値電圧分布と境界電圧Vra、Vrb、Vrcとの電圧マージンは、FMセルに記憶した2ビット値を誤って検出しないために必要である。しかし、FMセルの劣化が進んだ場合、セルプログラミング当初は、図60に示すような閾値電圧分布であったものが、時間経過に伴って、図61に示すように、一部の分布は境界電圧を下回ることになる(例えばVrc)。なお、1つのFMセルに1ビット記憶する場合は、FMの閾値電圧の分布を、図59に示すように電圧マージンを多めに取ることが出来るため、FMセルの劣化に強い。一方で、1つのFMセルに3ビット以上記憶する場合は、閾値電圧の分布がより過密になって電圧マージンが狭くなるため、FMセルの劣化に弱い。なお、FMC2020に供給する電圧を上げると1つのFMセルに複数ビット記憶する場合でも電圧マージンを大きくとることができるが、この場合は消費電力や高電圧を取り扱うための回路設計に注意を払う必要がある。
<1.1.9. LSBのみ記憶する場合>。
FMセルの劣化に伴った閾値電圧の低下量は、元々の閾値電圧が高いものほど大きくなる傾向にある。そのため、1つのFMセル当りに2ビット記憶可能であったとしても、LSBにのみ記憶させることでセルの劣化に強くなる場合がある。また、MSBのセルプログラミング操作を行う場合、前述の閾値電圧の繰り返し確認操作が必要になるため、セルプログラミング時間が長くなる傾向にある。そのため、LSBのみ記憶することでセルプログラミング時間が短くなる。
<1.1.10. 1ビット記憶に切り替える場合>。
前述の通り、1つのFMセルに1ビット記憶する場合は、FMセルの閾値電圧の分布を図59のように電圧マージンを多めに取ることが出来るため、FMセルの劣化に強い。また、セルプログラミング操作についても1つのFMセルに2ビット記憶する場合と比較して短時間で操作が完了する傾向にある。なぜならば、状態”0”の閾値分布の幅は2ビット記憶する場合と比べて広くしても十分電圧マージンがあるため、セルプログラミング操作におけるVpgmの大きさ及び加圧期間を粗くしてもよく、そして閾値電圧の確認回数も削減してもよいからである。
このようにFMセルを用いてNビットを記憶する場合は、閾値電圧の最小値と最大値とで定義されるレンジを2のN乗のサブレンジに分割し、FMDコントローラは、全てのサブレンジを用いてNビット分の状態を記憶させ、そして、記憶していたNビットの情報を読み取る。なお、境界電圧は、サブレンジの境目に相当する電圧であるが、サブレンジ同士の間は、必ずしも隣接していなくてもよい。なお、閾値電圧の最小値とは、セルイレース後の境界電圧と同じか小さい電圧であり、閾値電圧の最大値とは、FMセルの閾値電圧が取り得る最大値であることが考えられる。しかし、これらの値の少なくとも1つは、FMDコントローラにとって好適な値であれば、他の値を最小値及び/又は最大値としてもよい。
なお、製造段階で1つのセルにN(2以上)ビット記憶することを想定していたとしても、そこに記憶するビット数をNより小さくすることで、セルの記憶特性(例えば、書き込み速度、読み込み速度、FMセルの劣化に対する耐久性を含めた信頼性)が変化することを示した。サブレンジの視点で信頼性を説明すれば、1ビット記憶する場合のほうがセルプログラミング時点で目標とする閾値電圧のサブレンジよりとセルリード時点のサブレンジを大きくできるため、データ消失耐性が高くなると言える。
以後の説明では、不揮発性メモリのセルに記憶させるビット数を定める状態としてセルモードという言葉を導入する。1つのセルに2ビット記憶できる場合(Nが2の場合)、セルモードは2つ(1ビット記憶モード及び2ビット記憶モード)である。1つのセルに3ビット記憶できる場合(Nが3の場合)は、セルモードは3つ(1ビット記憶モード、2ビット記憶モード、及び3ビット記憶モード)であることが考えられるが、1つのセルモードに複数の記憶ビット数を対応させてもよい(例えば、第1セルモードは1ビット記憶モードであり、第2セルモードは2または3ビット記憶モード)。
なお、以上は不揮発性メモリの一つであるフラッシュメモリを用いて説明したが、PRAM、MRAMのセルについても何らかの操作で変更可能であり、その後保持可能な所定の観測量を、複数のサブレンジに分割している点ではFMと同様である。
<1.1.11. FMCにおける各操作の単位>。
FMC2020は、複数のFMセルに対してまとめてセルリード操作及びセルプログラム操作を許す。このセルリード及びセルプログラムするバイトサイズをページサイズと呼ぶ。例えば、ページサイズが4192バイト(データ4096バイト+冗長コード96バイト)で1バイトが8ビットであれば、1ページに含まれるFMセルの数は33536となる。なお、セルリード操作は、ページアドレスとリード対象ビットとしてLSBまたはMSBを指定する。セルプログラム操作は、ページアドレスとプログラム対象ビットとしてLSBまたはMSBを指定し、その後ページサイズのデータをFMC2020は受信し、指定されたページに含まれるFMセルに格納する。なお、セルプログラム操作のほかの実現例としては、FMC2020はページアドレスとページサイズのデータを受信してもよい。この場合、もしLSBのみのプログラミングをするのであれば、”10”状態になるようなデータが渡されればよく、もし、MSBのみをプログラミングするのであれば、現在のセルが”11”であるか”10”であるかで記憶済みのLSBが判断され、その上で”01”(”11”だった場合)又は”00”(”10”だった場合)になるようなデータが渡されればよい。
FMC2020は、所定の数のページを単位としてセルイレース操作を許す。このセルイレースの単位をイレースブロックと呼ぶ。なお、セルイレース操作は、イレースブロックアドレスを指定する。そのため、FMDコントローラ2010は、ライトの場合はセルプログラム操作と必要に応じてセルイレース操作を行う。
<2. 本実施例の概要>。
本実施例の概要を説明する。
図3は、第1実施例の概要を示す図である。なお、図3は概要説明用の図であるため、後述する実施例の具体的説明と表記が必ずしも一致するとは限らない。また本概要を含め、以後の説明では、セルモードとして図60のような(1)LSBのみリードライト対象とする第1モード、(2)LSB/MSBの両方をリードライト対象とする第2モードについて説明する。しかし、本実施例は、図59のようなビット記憶を行うセルモードにも適用できることは言うまでもない。また、以後の説明は、1つのFMセルに3ビット以上記憶させる場合にも適用できる。
ストレージシステム1000が、FMD1030を有しており、FMD1030に対して、異なるセルモード(LSBのみリードライト実行、又はLSB/MSB両方にリードライト実行)で情報を記録又は参照する。さらに、ストレージシステム1000は、このセルモードの設定情報(モード情報)と、記憶特性に関する情報をセルモード情報4090に格納し、FMD1030の管理に利用する。また、管理サーバ1200は、ストレージシステム1000からセルモード情報4090を受信し、管理側セルモード情報12090に保持し、GUIやCLI等により、セルモードを表示し、セルモード変更リクエストを受け付け、ストレージコントローラ1010へセルモード変更リクエストを送信することにより、セルモード情報を利用してFMD1030を有するストレージシステム1000を管理する。このようにすることで、管理者は、FMD1030の容量効率と容量以外の特性(例えば、前述のようなライト時間、FMセル劣化に伴うデータ保持期間)を踏まえてストレージシステムを柔軟に利用することができる。
さらに、管理サーバ1200は、アプリケーションの性能要件やアクセス測定値に応じて、LU1070もしくは仮想LU1090の実記憶領域として利用されるFMD1030に関して、LSBのみ利用可能なFMセルと、LSB/MSB両方利用可能なFMセルとの割合を判断し、さらに、セルモード変更対象とすべきFMセルを特定し、セルモード変更指示をストレージコントローラ1010へ出すことで、アプリケーション要求や利用状況に適したセルモードを設定する。
このようにすることで、管理者は、実際のストレージシステムの利用形態に適するセルモードでストレージシステムを運用できる。また、別な視点を述べるとすれば、管理者はHDD等の、フラッシュメモリ以外のSDEVも考慮して、包括的に適するセルモードを指定することができる。なお、FMD1030は、必ずしもストレージプール1080又はパリティグループ1060に属さなくてもよい。また、LU1070の全てのデータは、FMセルのLSBに記憶されてもよく、全てMSBに記憶されてもよく、あるいはLSBとMSB両方に記憶されてもよい。例えば、当初は、LSBのみ利用するセルモードで、パリティグループ(より具体的にはパリティグループに含まれるFMD1030)を用いていたとして、FMD1030を追加購入せずに一時的にHDDより高速なLU1070を提供したいと管理者が考えたとする。この場合、管理者は、パリティグループのセルモードを変更することで新たに記憶領域を取得し、その取得された新たな記憶領域にLU1070を新規に定義することができる。なお、典型的には、FMD1030のMSBに格納したデータに対するアクセスは、HDDよりは早いことが多く、また、短時間の使用であれば、データ保持期間が問題になることもない。無論、他のユースケースによってセルモードの使い分けをしてもよいことは言うまでもない。
なお、以後の説明では、性能要件の一例として、IOPS(アクセス頻度の一例)を扱う場合を中心に説明を行う、しかし、本実施例は、性能要件の別の例として、単位時間当たりの平均レスポンスタイムが扱われても良い。この場合、各実施例の「IOPS」が「平均レスポンスタイム」に読みかえられればよい。この場合は、ストレージコントローラの測定値は、平均又は最大レスポンスタイムでもよい。
<3. ホストとストレージシステムのプログラム及び情報>。
再び、計算機システム全体の説明に戻る。
図4は、第1実施例に係るストレージシステムとホストの構成例を示す図である。なお、管理サーバ1200が含むコンピュータプログラムと各種情報とについては後ほど記す。
ストレージコントローラ1010では、プロセッサ1011とメモリ1012とI/Oポート1013とバックエンドポート1014とキャッシュポート1015とのうちの少なくとも一つによって、SDEV情報4050とPG構成情報4060と内部LU構成情報4070とLUパス情報4080とセルモード情報4090とプール情報4040AとVL変換情報(仮想-論理変換情報の略)4040Bとを保持し、且つ、I/O処理プログラム4010とキャッシュ制御プログラム4020と構成制御プログラム4030とを実行する。なお、典型的には、これら情報及びプログラムは、メモリ1012に格納される。しかし、ストレージコントローラ1010で保持される情報の一部または全ては、ストレージシステム1000内部でストレージコントローラ1010外部の構成(例えばキャッシュメモリ1020や、FMD1030の一部)にて保持されてもよい。
I/O処理プログラム4010は、ホスト1100からI/Oリクエスト(例えばリードリクエスト又はライトリクエスト)を受け、そのI/Oリクエストに従う処理を実行する。具体的には、例えば、I/O処理プログラム4010は、キャッシュメモリ1020に保存されたデータ(リードリクエストに従う読出し対象データ)を、ホスト1100へ転送したり、ホスト1100から受信したデータ(ライトリクエストに従う書込み対象データ)を、キャッシュメモリ1020へ保存したりする。なお、ホスト1100からのI/Oリクエストがブロックアクセス形式の場合は、I/O処理プログラム4010は、アクセス対象である論理ボリューム(例えばSCSIでの論理ユニット(LUと略すことがある))を提供するための処理も行うことができる。また、ホスト1100からのI/Oリクエストがファイル形式の場合は、I/O処理プログラム4010は、アクセス対象であるファイルやディレクトリを提供するための処理を行うことができる。なお、I/O処理プログラム4010は、他のI/Oリクエスト(例えば、データベースクエリーやCKD形式のI/Oリクエスト)でのアクセスを提供するために必要な処理を行っても良い。
キャッシュ制御プログラム4020は、I/O処理プログラム4010と連動または自律的に、SDEVが保存するデータをキャッシュメモリ1020へコピー(移動を含む)したり、キャッシュメモリ1020が保存するデータをSDEVへコピーしたりすることができる。キャッシュ制御プログラム4020は、さらに、信頼性を向上させるための処理として、例えば、RAID(Redundant Array of Independent
(or Inexpensive) Disksの略)に代表される冗長化データを、キャッシュメモリ1020に保存されたデータから作成する及び/又は更新することを行ってもよい。
構成制御プログラム4030は、構成変更及び/又は構成参照のリクエストに応答して、SDEV情報4050、PG構成情報4060、内部LU構成情報4070、LUパス情報4080、セルモード情報4090、プール情報4040A、及びVL変換情報4040Bのうちの少なくとも一つを参照及び/又は更新する処理を行うことができる。構成変更及び/又は構成参照のリクエストは、例えば、管理サーバ1200、ホスト1100及びその他コンピュータのうちの少なくとも一つから発行される。なお、構成制御プログラム4030は、管理サーバ1200から他のリクエストを受信し、当該リクエストに対して応答を行う。
SDEV情報4050は、SDEVに関する情報を含む。PG構成情報4060は、パリティグループ(Parity Group:以後PGと省略することがある)の構成情報を含む。内部LU構成情報4070は、パリティグループに含まれるSDEVの一部または全ての領域を内部的な論理ユニット(以後、「内部論理ユニット」や「内部LU」と省略する)として構成するための情報を含む。なお、本実施例において、内部LUは、ストレージプールにパリティグループの記憶領域を含める時に用いることが主である。しかし、前述のように、ストレージプールを介さずにFMD1030の記憶領域を提供するのであれば、内部LUに対してパスが定義されてもよい。もちろん、前述の通り、FMD1030やパリティグループそのものがストレージプールに含められても良い。
論理ユニットに対する容量又はブロックサイズを問い合わせるリクエストをホスト1000又は管理サーバ1200から受信した場合、ストレージコントローラ1010は、問い合わせリクエストで指定された論理ユニットに対応する内部LUの容量またはブロックサイズを送信してもよい。ここで、リクエストで指定されたLUがVLU(仮想論理ユニット)であれば、ストレージコントローラ1010は、VLUについて定義された容量(仮想容量)を送信するようにしてもよい。同様に、論理ユニットに対する識別子を問い合わせるリクエストをホスト1000又は管理サーバ1200から受信した場合、ストレージコントローラ1010は、論理ユニットに割り当てられたLUNに基づく値を送信したり、又は論理ユニットに対応する内部LUの識別子に基づく値を送信したりしてもよい。
セルモード情報4090は、FMD1030が含む不揮発性メモリのセルモードを含む。プール情報4040Aは、ストレージプール(以後、単にプールと略す場合がある)の構成情報を含む。VL変換情報4040Bは、ストレージプールから作成される仮想内部LUの仮想-論理変換情報、及び仮想内部LUに割り当てられるセグメントへのアクセス情報を含む。
なお、SDEV情報4050、PG構成情報4060、内部LU構成情報4070、LUパス情報4080、セルモード情報4090、プール情報4040A、VL変換情報4040Bの一つ以上または全てをまとめてストレージ構成情報と呼ぶことがある。またストレージ構成情報には他の情報が含まれても良い。
ホスト1100では、プロセッサ1101とメモリ1102とI/Oポート1103の少なくとも一つによって、OS4101とファイルシステム4102とアプリケーションプログラム(以後アプリケーション、又はAPと省略する)4103、ホスト管理プログラム4104の少なくとも一つが実行される。
アプリケーション4103は、OS4101やファイルシステム4102に依頼することで、ファイル等のデータを読み書きしつつ、ユーザや他のコンピュータからのリクエストに応じて業務処理等を行うプログラム(例えばWebサーバプログラムやデータベース管理プログラム)である。
OS4101は、アプリケーション4103やファイルシステム4102から発行されるI/Oリクエストを、ストレージシステム1000のI/Oポート1013へ送信したり、データをストレージシステム1000から受信したりする。ファイルシステム4102は、アプリケーションからのファイル形式のI/Oリクエストを、ブロック形式のI/Oリクエストやネットワークファイルシステムプロトコル形式のI/Oリクエストに変換して、OS4101へI/Oリクエストの転送を依頼することができる。なお、OS4101及びファイルシステム4102はこれら以外の処理を含んでも良い。
ホスト管理プログラム4104は、ホスト1100にあるアプリケーション4103、FS4102、及びOS4101の情報を、管理サーバ1200のシステム管理プログラム12010(図24参照)と通信するプログラムである。
なお、ホスト1100において、これ以外のプログラムが実行されていてもよい。また、ホスト1100は、ブロックI/OリクエストやファイルI/Oリクエスト以外にデータベースクエリーやCKD方式のリクエストを送信及び受信してもよい。また、ホスト1100やストレージコントローラ1010で実行されるOSやファイルシステムを含めたプログラムは、一部または全ての処理をハードウェアにて実装されてもよい。
図24は、第1実施例に係る管理サーバの構成例を示す図である。
管理サーバ1200の記憶資源1210は、システム管理プログラム12010、管理側SDEV情報12050、管理側PG構成情報12060、管理側内部LU構成情報12070、管理側LUパス情報12080、管理側セルモード情報12090、管理側プール情報12040A、管理側VL変換情報12040B、AP性能要件情報12100、セグメント割当傾向情報12110、及びティア管理情報(Tier管理情報)12120を格納する。なお、記憶資源1210はこれ以外のデータを格納してもよく、上記情報の一部の格納を省略してもよい。
システム管理プログラム12010は、ストレージシステム1000又はホスト1100を管理するプログラムである。
管理側SDEV情報12050は、ストレージシステム1000に設置されたSDEVについての情報を格納する。管理側PG構成情報12060は、ストレージシステム1000に定義されたパリティグループについての情報を格納する。管理側内部LU構成情報12070は、ストレージシステム1000に定義された内部LUについての情報を格納する。管理側LUパス情報12080は、ストレージシステム1000に定義された論理ユニットについての情報を格納する。
管理側セルモード情報12090は、ストレージシステム1000に定義されたセルモードについての情報を格納する。管理側プール情報12040Aは、ストレージシステム1000に定義されたストレージプールについての情報を格納する。管理側VL変換情報12040Bは、ストレージシステムが提供する仮想内部LUとストレージプール及び割当られるセグメントの関係の情報を格納する。AP性能要件情報12100は、ホスト1100に割り当てられる内部LUまたは仮想内部LUとLUで動作するアプリケーションと、そのアプリケーションの動作に求められる性能要件(例えば、IOPS、レスポンスタイムなど)を格納する。セグメント割当傾向情報12110は、仮想内部LU-IDに割り当てられるセグメントの単位時間ごとの量と、単位時間ごとのIOPS(又は平均レスポンスタイム)とを格納する。ティア管理情報12120は、ストレージプールに属する記憶領域のうち、性能や信頼性が等しい(又はほぼ等しい)記憶領域をまとめた集合(この集合をティア(Tier)と呼ぶことがある)を管理するための情報を格納する。なお、一つのティアに異なる種類のSDEVが含まれてもよい。
なお、管理サーバ1200は、CD-ROM等の媒体を用いて、システム管理プログラム12010を記憶資源1210に格納してもよい。また、管理サーバ1200は、配布計算機(図示せず)から配布されたシステム管理プログラム12010を記憶資源1210へ格納してもよく、または配布計算機から配布されたインストールプログラムを実行することでシステム管理プログラム12010を記憶資源1210へ格納してもよい。
なお、管理側SDEV情報12050、管理側PG構成情報12060、管理側内部LU構成情報12070、管理側LUパス情報12080、管理側セルモード情報12090、管理側プール情報12040A、管理側VL変換情報12040B、AP性能要件情報12100、セグメント割当傾向情報12110、及びティア管理情報12120の一つ以上または全てをまとめて管理側ストレージ構成情報と呼ぶことがある。また管理側ストレージ構成情報には他の情報が含まれても良い。
<4.詳細>。
<4.0.アドレス空間の呼び名と関係>。
より詳細な説明に入る前に、実施例におけるブロックサイズについて、図面を用いて説明する。
図20は、第1実施例に係るLUからFMCまでのアドレス空間の関係の一例を示す図である。ブロック[D]、ブロック[G]などの表記は、それぞれ各レイヤにおけるアドレス空間を示すために用いられている。
第1実施例では、以下に示すアドレッシングを行う。
(レイヤ1)FMDコントローラ2010がFMC2020に対してセルプログラミング操作及びセルリード操作を行う場合、FMC2020の識別子(FMC1、FMC2等)と、ページを指定するページアドレスを指定する。よってデータ操作の単位はページサイズとなる。なお、セルイレース操作の場合のみ、FMDコントローラ2010はFMC2020の識別子と、イレースブロックを指定するイレースブロックアドレスを指定する。したがってセルイレース操作で削除するデータの単位はイレースブロックサイズとなる。
(レイヤ2)ストレージコントローラ1010がFMD1030にリードまたはライトする場合、FMD1030の識別子(FMD1、FMD2等)と、LUNと、ブロック[D]アドレスを指定する。よってリード、ライトの単位はブロック[D]サイズとなる。なお、本実施例では、LUNとして“0”を指定した場合はブロック[D]はFMセルのLSBにより構成されるブロックである。また、LUNとして“1”を指定した場合はブロック[D]はFMセルのMSBにより構成されるブロックである。ストレージコントローラ1010がHDD1040にアクセスする場合、HDD1040の識別子(HDD1等)とブロック[D]アドレスを指定する。なお、FMD1030のブロック[D]のサイズと、HDD1040のブロック[D]のサイズは異なってもよく、同じであってもよい。
(レイヤ3)ストレージコントローラ1010がキャッシュメモリ1020上のデータにリードまたはライトする場合、パリティグループの識別子(PG1、PGx、PGy等)と、ブロック[G]アドレスを指定する。よってデータ操作の単位はブロック[G]サイズ単位となる。
(レイヤ4)ストレージコントローラ1010がプールに含まれる内部LUにリードまたはライトする場合、内部LUの識別子(I-LU1、I-LU2、I-LU3等)と、ブロック[I]アドレスを指定する。
(レイヤ5)ストレージコントローラ1010は、プールに含まれる内部LUの記憶領域をセグメントと呼ぶ所定のサイズの記憶領域を単位として、内部LUへの割当及び空き領域の管理を行う。しかし、リードまたはライトの場合は、ストレージコントローラ1010は、セグメントアドレスと、セグメント内ブロックアドレスを指定する。なお、典型的にはセグメント内ブロックのサイズはブロック[I]と同サイズである。
(レイヤ6)ホストは、仮想内部LUにリードまたはライトする場合、仮想内部LUの識別子と、ブロック[V]アドレスを指定する。ストレージコントローラ1010は、ブロック[V]をまとめてセグメントと同サイズのチャンクとして、セグメントの割当管理及び対応関係の管理を行う。
(レイヤ7)図示は省略しているが、ストレージコントローラ1010は、プールに含まれない内部LUにI/Oポート1013のLUNを1つ以上割り当てることができる。このようなLUNを割り当てられた内部LUは、ホスト側からはLUNを割り当てられたLUとして検知することができる。なお、この検知の例としては、LU(内部LU)の(仮想の場合も含め)記憶容量をストレージコントローラ1010から通知することがある。その結果として、ホスト1100はI/Oポート1013宛にLUNとLBAを指定してLUにリードまたはライトを行うことができる。なお、典型的にはLBAのブロックサイズはブロック[I]と同じである。
以上が実施例におけるアドレス空間の関係である。ただし、以上のアドレス空間は一例に過ぎない。また、内部LUをプールに含める代わりに、パリティグループやFMD1030やHDD1040を含めても良い。また、ストレージコントローラは、一部のアドレス空間を採用しなくてもよい。例えば、内部LUに関するアドレス空間(レイヤ4)を用いずにレイヤ5と3との間でアドレス変換を行う場合である。この場合、内部LUの識別子とブロック[I]のアドレスの変わりにパリティグループの識別子とブロック[G]のアドレスを用いればよい。なお、当然ながら内部LUはプールに含めずに、直接LUNを割り当てても良い。また、各ブロック、セグメント、チャンク、ページ、イレースブロックのサイズはホストからのデータを格納するバイト数以外に冗長コードや制御情報を格納するバイト数を含んでもよい。
<4.1.FMD>。
<4.1.1.FMDコントローラ>。
再び、図2を用い、FMDコントローラ2010について説明する。
FMDコントローラ2010は、例えば、FMD I/O処理プログラム2011、FMD内部構成情報通知プログラム2014、FMDアドレス変換情報2012、及びFMD内部構成情報2013を有する。FMD1030は、複数のFMC2020の総記憶容量より少ない記憶容量を提供容量としてストレージコントローラ1010へ報告することで、空き領域を確保することができる。
FMDアドレス変換情報2012は、FMDコントローラ2010が受信するリードリクエストまたはライトリクエストで指定されたブロック[D]アドレスと、FMC2020の識別子とページアドレスとの対応関係を含む。例えば、FMDアドレス変換情報2012は、以下に示す種類(B1)及び(B2)の情報、
(B1)ブロック[D]のデータが実際に保存されているFMCの識別子とページアドレス、
(B2)ブロック[D]が参照された回数、
を各ブロック[D]毎に持つ(ただしB2は無くても良い)。
FMD内部構成情報2013は、各FMセルの障害状況を管理する情報であり、好ましくは、各FMC2020内のイレースブロックを1つ以上集めた単位で以下に示す種類(C1)乃至(C3)の情報
(C1)障害状況、
(C2)セルイレース済み情報、
(C3)セルプログラミングとセルイレースのサイクル回数、またはセルイレース回数、
を保持する。
また、FMD内部構成情報2013は、FMD1030としてストレージコントローラ1010に提供する記憶領域の属性(例えば、ブロック[D]サイズ、ブロック[D]の数)と、空きイレースブロックを管理するための情報を保持する。
FMD I/O処理プログラム2011は、I/Oポート2030を通じてFMDコントローラ2010が受信したライトリクエスト又はリードリクエストを解析する。ライトリクエストの場合、FMD I/O処理プログラム2011は、FMDアドレス変換情報2012を用いて、リクエストが指定したブロック[D]のデータが実際に保存されているFMC2020の識別子と、ページアドレスを特定する。そして、FMD I/O処理プログラム2011は、特定したページに含まれるFMセルに対してセルプログラミング操作によってライトデータを格納し、必要に応じてセルイレース操作を行う。リードリクエストの場合も、FMD I/O処理プログラム2011は、FMDアドレス変換情報2012を用いて、リクエストが指定したブロック[D]のデータが実際に保存されているFMC2020の識別子と、ページアドレスを特定する。そして、FMD I/O処理プログラム2011は、特定したページに含まれるFMセルに対してセルリード操作を行い、FMセルに格納されたビットを読み込み、リードデータとしてストレージコントローラ1010に送信する。
<4.1.2.FMDのLUNとLSBとMSBとの関係>。
図62は、第1実施例に係るFMセルのLSB及びMSBと、FMDのLUN毎のブロック[D]アドレス空間との関係の一例を示す図である。なお、同図では説明の簡易化のために、1ページをブロック[D]4つ分の大きさとし、ページ内の冗長コード格納用のFMセルは省略している。
同図に示すように、所定のページ(例えば、ページ1)のLSBはLUN0の所定のブロックアドレス(例えば、アドレス4から7)で示されるブロック[D]の実際の記憶領域として機能する。所定のページ(例えば、ページ1)のMSBはLUN1の所定のブロックアドレス(アドレス4から7)で示されるブロック[D]の実際の記憶領域として機能する。従って、LUNが0の場合も1の場合もブロック[D]アドレスからページアドレスへの変換は共通のFMDアドレス変換情報2012を参照する。なお、ページのLSB及びMSBの提供方法はこれに限られない。例えばブロック[D]アドレスの偶数アドレスがLSBに対応し、奇数アドレスがMSBに対応してもよく、ページサイズ毎に交互にLSBとMSBに対応してもよい。
<4.1.2.FMDのI/O処理>。
FMD I/O処理プログラム2011の処理のうち、リードリクエストを処理するリード処理を説明する。
図63は、第1実施例に係るリード処理の一例のフローチャートである。
FMD I/O処理プログラム2011は、開始ブロック[D]アドレス、ブロック長[D]、及びLUNを指定したリードリクエストを受信する(StepF101)。次いで、FMD I/O処理プログラム2011は、当該リードリクエストで指定された開始ブロック[D]アドレス、ブロック長[D]から、FMDアドレス変換情報2012を用いて、指定ブロック[D]に対応するFMC2020とページを特定する(StepF102)。
次いで、FMD I/O処理プログラム2011は、当該リードリクエストで指定されたLUNの値を判断する(StepF103)。LUNが0の場合(StepF103でLUN=0)は、FMD I/O処理プログラム2011は、StepF102で特定したFMC2020に対して特定したページを指定したLSBのセルリード操作を行い、ページに格納された(よりミクロな表現ではページに含まれるFMセルに格納された)データを取得し(StepF104)、処理をStepF106に進める。
一方、LUNが1の場合(StepF103でLUN=1)は、FMD I/O処理プログラム2011は、StepF102で特定したFMC2020に対して特定したページを指定したMSBのセルリード操作を行い、ページに格納された(よりミクロな表現ではページに含まれるFMセルに格納された)データを取得し(StepF105)、処理をStepF106に進める。
StepF106では、FMD I/O処理プログラム2011は、StepF104またはStepF105で取得したデータを、ストレージコントローラ1010へ送信し、処理を終了する。
FMD I/O処理プログラム2011の処理のうち、ライトリクエストを処理するライト処理を説明する。
図64は、第1実施例に係るライト処理の一例の第1のフローチャートである。図65は、第1実施例に係るライト処理の一例の第2のフローチャートである。
FMD I/O処理プログラム2011は、開始ブロック[D]アドレス、ブロック長[D]、及びLUNを指定したライトリクエストと、ライトデータを受信する(StepF111)。次いで、FMD I/O処理プログラム2011は、当該ライトリクエストで指定された開始ブロック[D]アドレス、ブロック長[D]から、FMDアドレス変換情報2012を用いて、指定ブロック[D]に対応するFMC2020とページを特定する(StepF112)。
次いで、FMD I/O処理プログラム2011は、当該ライトリクエストで指定されたLUNの値を判断する(StepF113)。LUNが0の場合(StepF113でLUN=0)は、FMD I/O処理プログラム2011は、セルイレースされたページ(より正確にはセルイレースしたブロックから一度もセルプログラミングされていないページ)を検索する(StepF114)。
次いで、FMD I/O処理プログラム2011は、検索したページのLSBとMSBの両方を指定してセルプログラミング操作を行う(StepF115)。このとき、LSBにはライトデータを記憶させ、MSBには、StepF112で特定したページのMSBに格納されたデータをセルリードし、リードしたデータを記憶させる。なお、当該ページに対応するセルモードがLSB Onlyの場合、StepF112で特定したページのFMセルは、”11”又は”10”状態、つまりMSBがセルプログラムされていない状態である。このため、本ステップのプログラム結果も、”11”又は”10”のままで、結果的に、MSBのセルプログラミングを省略していることになる。
次いで、FMD I/O処理プログラム2011は、指定ブロック[D]に対応するFMC識別子及びページアドレスをStepF112で特定したFMC2020及びページとなるように、FMDアドレス変換情報2012を更新し(StepF116)、処理を終了する。
一方、StepF113でLUNが1の場合(StepF113でLUN=1)は、FMD I/O処理プログラム2011は、特定したページのFMセルの状態を確認する(StepF117)。この結果、ページ内の全てのFMセルが”11”または”10”の場合(StepF117で、“11”or“10”)は、FMD I/O処理プログラム2011は、StepF112で特定したFMC2020に対して特定したページを指定したMSBのセルプログラミング操作を行い(StepF118)、処理を終了する。このときに与えるデータはライトデータである。より具体的には、もし、MSBに”0”を記憶する場合、そして、StepF112で特定したFMセルの状態が、”11”であれば、その状態は、セルプログラミングによって”01”状態になる。また、FMセルの状態が、”10”であれば、セルプログラミングによって、その状態は”00”状態になる。ちなみに、MSBに”1”を記憶する場合は、結果的に、”11”又は”10”状態のままであることは言うまでもない。
一方、ページ内の全てのFMセルが”11”または”10”ではない場合(StepF117で、それ以外)は、FMD I/O処理プログラム2011は、StepF114と同様に、セルイレースされたページを検索する(StepF119)。次いで、FMD I/O処理プログラム2011は、検索したページのLSBとMSBの両方を指定してセルプログラミング操作を行う(StepF120)。このとき、LSBには、StepF112で特定したページのLSBに格納されたデータをセルリードし、リードしたデータを記憶させ、MSBにはライトデータを記憶させる。次いで、FMD I/O処理プログラム2011は、指定ブロック[D]に対応するFMC識別子と及びページアドレスをStepF119で特定したFMC2020とページになるように、FMDアドレス変換情報2012を更新し(StepF121)、処理を終了する。
ここで、セルイレースされたページを検索する場合においては、以下の条件(D1)乃至(D3)、
(D1)ページに障害が発生していないこと、
(D2)ページに含まれるFMセルの状態が”11”であること(言い方を変えると、セルイレース直後の状態であること)、
(D3)イレースブロック内で自ページより高いページアドレスを持つ他のページがLSB、MSBともにセルプログラミングされていないこと、
の全てを満たすページが検索されることがある。なお、StepF119で探すページとしては、障害発生していないという条件以外にも何らかの理由で使用しないものと設定されたものが除外されてもよい。例えば、サイクル回数又はセルイレース回数が上限を超えた場合や、冗長コードで回復可能な範囲だが所定のビット数を超えたデータ化けが発生した、等である。
なお、FMD I/O処理プログラム2011は、ページに対するセルプログラミング操作に付随して以下の(E1)及び(E2)のいずれかまたはすべての処理を行ってもよい。
(E1)FMD I/O処理プログラム2011は、保存前に、ライトデータからLRC(Longitudinal Redundancy Check)やCRC(Cyclic Redundancy Check)等の冗長コードを計算し、その冗長コードと共にライトデータを保存する。なお、当該冗長コードは、リードリクエスト受付時に、データ化けの有無を確認するために使うものある。データ化けが発生した場合は、FMD I/O処理プログラム2011は、当該リードリクエストでエラーを返し、FMD内部構成情報2013に、ブロック障害が発生したことを記録する。
(E2)保存後に、FMD I/O処理プログラム2011は、FMC2020から当該ブロックデータを読み込んで比較を行う。比較が失敗した場合は、FMD I/O処理プログラム2011は、FMD内部構成情報2013にブロックに障害が発生したことを記録し、再びセルプログラミング操作をやり直す。
また、StepF116及びStepF121の後続の処理として、更新前に指定ブロック[D]に対応していたページを無効扱いするようにしてもよい。
また、FMD I/O処理プログラム2011は、別処理として、新たに無効となったページを含むイレースブロックをセルイレースするようにしても良い。そのために、FMD I/O処理プログラム2011は、セルイレース対象ブロックから有効なページのFMセルのビット(データ)をセルリードし、他のブロックのページにセルプログラミングする。当該処理は、リクエスト処理と連動あるいは非同期のタイミングで繰り返し行うことができる。このとき、イレースブロックごとにセルイレース操作回数を記録し、セルイレース対象のイレースブロックを選択する際にイレース操作回数の少ないものを選ぶことでイレース操作回数の平準化を図っても良い。
<4.1.3.FMD内部構成情報通知プログラム>。
FMD内部構成情報通知プログラム2014は、FMD1030の内部情報をストレージコントローラ1010等に通知するプログラムである。FMD内部構成情報通知プログラム2014が提供する情報の例は、以下(G1)乃至(G6)である。
(G1)FMD1030のブロック[D]サイズ(ストレージコントローラ1010は、当該ブロックサイズ単位でアクセスを行ってくる)。
(G2)FMD1030の提供ブロック数[D](ストレージコントローラ1010は、当該ブロック数とブロック[D]サイズから提供記憶容量を知ることがある)。
(G3)FMD1030内部の空き容量値(ブロック数での表現も可)。当該空き容量値は、FMD内部構成情報2013での障害が発生したイレースブロック数(またはブロック数)を求めて以下の計算式により算出できる。すなわち、空きブロック数=(全フラッシュメモリチップのブロック数)-(障害発生ブロック数)-((G2)に記載のブロック数)、又は未使用ブロック数(FMD使用開始時点から提供ブロック数[D]が提供容量分だけ必ず割り当てられている場合)。なお、フラッシュメモリチップの一部の領域を管理用や内部冗長化等に用いている場合は、そのブロック数を考慮して(例えば、減じて)、空ブロック数を計算しても良い。また、上記計算式は、FMC1030のブロックサイズを基準としているため、情報提供に当たってはFMD1030のブロックサイズに換算して提供することができる。なお、ブロック数での計算式の例を示したが、ブロック数に所定の値を掛けることで、空き容量値が得られることは言うまでも無いことである。
(G4)FMD1030へ提供される電圧または電力が不足していることや、FMD1030の内部バスやFMDコントローラ2010の破損。
(G5)FMDコントローラ2010による、FMC1030に保存されたデータのデータ化けの検知。
(G6)セルプログラミングとセルイレースのサイクル回数、またはセルイレース回数。以降ではこれらの情報をまとめてセル書き換え回数と呼ぶことがある。
なお、FMD1030とストレージコントローラ1010との接続媒体及び通信プロトコルはどのようなものでもよい。さらにはFMD1030へのライトリクエストはFMD1030が格納するデータを更新するリクエストであれば良く、FMD1030へのリードリクエストはFMD1030が格納するデータを参照するリクエストであれば良い。以上に示したFMD1030の詳細はあくまでも例示に過ぎない。メモリセルの半導体特性として複数ビット記憶可能であり、その上で、ストレージコントローラ1010と連携し、セルモードによって定められたビット数をメモリセルに記憶できるのであれば、他のFMD1030が採用されてもよい。例えば、FMD1030のコントローラが、ストレージコントローラ1010から指定されたセルモードを保持し、図59と図60のようなFMセルの使い分けを行ってもよい。
なお、後述するように、本実施例ではあるFMD1030に対して、異なるセルモードが用いられても良い。例えば、FMD1030のブロック[D]アドレス空間の一部が第1セルモードで用いられ、その他の部分が、第2セルモードで用いられてよい。FMD1030内部では、上記の通り、ブロック[D]とページとの対応が常に同じではなくて、ライト要求によって別なページが用いられるため、一見すると上記2つのセルモードを用いることができないように考えられる。しかし、セルモードによって変更されるのはFMセルに対するビットの記憶のさせ方であり、元々の半導体特性・品質等が大幅に異なるFMセルの使い分けではない。従って、ブロック[D]とページとの対応が動的に変化する場合でも、このように複数のセルモードを同時に用いても、第1セルモードで所定のFMD1030に保存したライトデータは第1セルモードの特性を持ち、第2セルモードで前記所定のFMD1030に保存したライトデータは第2セルモードの特性を持つことができる。
<4.2.ストレージシステムで管理する情報>。
図5は、第1実施例に係るSDEV情報の一例を示す図である。
SDEV情報4050は、それぞれのSDEVに対応するSDEVの識別子(SDEV-ID)毎に以下の(H1)乃至(H4)の情報を持つ。
(H1)閉塞情報。閉塞情報は、当該SDEVが使用不可能な状況の場合に閉塞状態となり、そうではない場合に、正常状態となる。なお、使用不可能な状況の例としては、ハードウェア障害や、SDEVをシステムから抜き取った場合や、SDEVがFMD1030であれば、空き領域が不足または枯渇した場合等がある。
(H2)WWN(World Wide Name)。SDEVにアクセスするために必要なFibreChannelの通信識別子。なお、実際のFibreChannelではWWNからポート番号(ポートIDと呼ぶことがある)を作成して、その値を使って通信を行っているため、ポート番号を登録してもよい。また、これ以外にも、ストレージコントローラ1010からSDEVに通信するための他の識別子(例えば、IPアドレス、TCP/IPのポート番号、iSCSI Name等)で代替されてもよい。
(H3)SDEVの型番。これによってSDEVがHDD1040であるか、FMD1030であるか判別することができる。
(H4)SDEVの提供容量。提供容量については、SDEVから提供される。
なお、上記情報以外に、各FMD1030についてストレージシステム1000に搭載した物理的な場所が判る情報をSDEV情報4050に含めてもよい。
図6は、第1実施例に係るPG構成情報の一例を示す図である。
PG構成情報4060は、それぞれのパリティグループ(PG)の識別子(PG-ID毎に、以下の(I1)乃至(I3)の情報を持つ。
(I1)閉塞情報。閉塞情報はPGが使用不可能な状況の場合に閉塞状態となり、そうではない場合に正常状態となる。なお、使用不可能な状況とは、以下に例示する事象が多重に発生した場合が考えられる。
(事象1)ハードウェア障害。
(事象2)SDEVの抜き取り。
(事象3)SDEVがFMD1030の場合には、空き領域が少ない、又は不足することの報告をストレージコントローラ1010が受信。なお、閉塞情報の代替として上記事象が識別可能な情報を記憶しても良い。
(I2)RAIDレベル。
(I3)パリティグループに属するSDEVの数と、そのSDEVの識別子。
なお、前述のとおり、ストレージコントローラ1010は、パリティグループに対してアドレス空間を割り当てることができる。
図8は、第1実施例に係るFMDと、RAIDを組んだSDEVとのアドレス空間の関係の一例を示す第1の図である。図9は、第1実施例に係るFMDと、RAIDを組んだSDEVとのアドレス空間の関係の一例を示す第2の図である。図8は、RAID1+0を例に採ったパリティグループのアドレス空間[G]と、FMD1030のアドレス空間[D]の関係の一例を示す。図9は、RAID5を例に採った場合の同様の関係の一例を示す。
用例についての説明:
図8及び図9は、4つのSDEV8200、8210、8222、8230を用いてパリティグループ8100を構成する例を示している。図中用例に示すハッチングされた箱8010は、SDEVのブロック[D]を示し、符号8011は、そのブロック[D]のアドレスを示している。箱8010の中の点線の枠を持つ箱8020は、ストレージコントローラ1010がパリティグループ8100に割り当てたブロック[G]を示し、符号8021は、ストレージコントローラ1010が割り当てるブロック[G]のアドレスを示す。なお、ブロック8020のブロック[G]サイズは、SCSIの規格が提供しうる最低のブロックサイズである512バイトとすることが考えられるが、これ以外のサイズでもよい。
RAID1+0:
RAID1+0の場合、図8に示すように、ミラーリングのために、ストレージコントローラ1010は、二組のSDEVで同じアドレス空間を割り当て(例では、SDEV8200と8210、SDEV8220と8230)、その後ストライピングする。ストライピングの場合、ストレージコントローラ1010は、定められたブロック数(以後、ストライピング用連続ブロック数と呼ぶ)毎に、続きのアドレス空間[G]を別なSDEVへ切り替える(例では、ブロック[G]では4つ、ブロック[D]では2つ)。なお、ストライプサイズ(パリティグループ内の全SDEVからデータを読み書きすることで行うI/Oサイズ)は、以下の式、
ストライプサイズ=(ストライピング用連続ブロック[G]数)×(SDEVの数/2)×(ブロック[G]サイズ)
で算出することができる。なお、RAID1の場合は、RAID1+0のストライピングを省略したものであるため、説明は省略する。
RAID5:
RAID5の場合も、図9に示すように、ストレージコントローラ1010は、ストライピング用連続ブロック数を単位にストライピング処理を行い、パリティ保存領域を割り当てる(例では、アドレスP0からP3が、アドレス0から11までのパリティを保存する領域)。RAID5の場合のストライプサイズは、以下の式、
ストライプサイズ=(ストライピング用連続ブロック[G]数)×(SDEV数-1)×(ブロック[G]サイズ)
で算出することができる。
図7は、第1実施例に係る内部LU構成情報の一例を示す図である。
内部LU構成情報4070は、それぞれの内部LUの識別子(内部LU-ID)毎に以下の(J1)乃至(J4)の情報を持つ。なお、ホスト1100に記憶領域として提供されるLUは、この内部LUを元にパスを定義することによって、外部に提供される。なお、ここで言う「外部」とは、ホスト1100に代えて又は加えて、他種の装置、例えば、仮想化スイッチや別のストレージシステムであっても良い。換言すれば、他種の装置が、ホスト1100に代わって又は加えて、ストレージシステムにI/Oリクエストを発行することができる。
(J1)閉塞情報。閉塞情報は当該内部LUが使用不可能な状況(例えば、パリティグループが閉塞している場合や、当該内部LUに領域が割り当てられていない場合等)の場合に閉塞状態となり、そうではない場合に正常状態となる。
(J2)PG識別子(PD-ID)と、開始アドレス[G]と、終了アドレス[G]。当該内部LUの記憶領域として用いるパリティグループの識別子と、パリティグループ内の開始ブロックアドレス[G]と、終了ブロックアドレス[G]とを示す。
図13は、第1実施例に係るLUパス情報の一例を示す図である。
LUパス情報4080は、例えば、以下の(K1)乃至(K3)の情報を持つ。
(K1)ホスト1100に対して提供する仮想内部LUの識別子(仮想内部LU-ID)。なお、仮想内部LUについては後述する。
(K2)WWN(またはI/Oポート1013の識別子)。WWNは、ホスト1100に対して提供する仮想内部LUを、どのポート1013から提供するかを示す。なお、WWNに代えて、ポート番号など、他種の識別子で代替されてもよい。なお、以後は「ポートの識別子」と記載した場合はこれらいずれかの値であるものとする。
(K3)LUN。LUNは、ホストへ向けて提供する仮想内部LUを、WWN(K2)のどのLUNとして提供するかを示す。
なお、LUNは限られた数しか定義できないため、ストレージシステム1000内で定義された全ての仮想内部LUにWWNとLUNを割り当てる必要はなく、あるWWNとLUNをある時間帯は、ある仮想内部LUに割り当て、別な時間は別な仮想内部LUに割り当てることで、LUNの有効利用が行われても良い。また、内部LUを、直接ホストへ提供する場合は、仮想内部LU-IDの代わりに内部LUのIDが設定されればよい。また、本情報に仮想内部LUの仮想容量(図22の「容量」カラムに相当)が含められ、仮想容量を表す値は、ストレージコントローラが、ホストに仮想容量を知らせる時に用いられても良い。
図10は、第1実施例に係るプール情報の一例を示す図である。
プール情報4040AはプールID(Pool-ID)とセグメントID(SEG-ID)毎に以下の(a1)乃至(a3)の情報を持つ。
(a1)割当済みか否かを示す割当情報。当該セグメント仮想内部LUのチャンクに割り当てられていればYesとなり、そうでない場合はNoとなる。
(a2)当該セグメントに対応する内部LUの識別子と、開始及び終了ブロック[I]アドレス。
(a3)当該セグメントがFMD1030から割り当てられている場合におけるFMD1030のセルモードを示すMSBフラグ。
図11は、第1実施例に係るVL変換情報の一例を示す図である。
VL変換情報4040Bは、仮想内部LU-IDと、仮想内部LU内のチャンクID毎に、以下の(b1)乃至(b4)の情報を持つ。
(b1)当該仮想内部LUの仮想容量。
(b2)当該チャンクに割り当てられたセグメントのIDと当該セグメントを含むプールのID。
(b3)当該チャンクに割り当てられたセグメントのセグメントID。なお、未割当の場合はNULL値が格納される。
(b4)当該チャンクに対するアクセス測定値。アクセス測定値としては、例えば、リードやライトの回数、リードやライトのレスポンスタイム、単位時間当たりのリードライトの回数(IOPS)、平均又は最大レスポンスタイム、等がある。
なお、二つのプールから一つの仮想内部LUにセグメントを同時提供しない場合は、チャンク毎にプールIDを管理する必要はなく、仮想内部LU毎に対応するストレージプールのIDを管理しておけば良い。また、容量は、仮想内部LUに関する情報であるため、別な情報として保有してもよい。例えば、仮想内部LU構成情報として仮想内部LU毎の容量が保持される等である。この場合、各種容量が関係する処理は、当該情報を参照したり、生成したりすることは言うまでも無い。また、アクセス測定値は、チャンクではなくセグメントに対応する内容として図10に示す情報に格納されてもよい。これは後述する管理側情報でも同様である。
図12は、第1実施例に係るセルモード情報の一例を示す図である。
セルモード情報は、プールID(Pool-ID)及びセグメントID(SEG-ID)毎のセルモード値、及びセル書き換え回数を含む。なお、プールにはHDDが提供するブロック[D]を含むセグメントが含まれる場合があり、このようなセグメントに対しては、セルモード値は無効値(図中ではHDDと記載)が設定される。その他のセルモード値が取りうる値は以下の通りである。
LSB only:当該セグメントが、FMD1030のFMセルのLSBのみを利用した記憶領域を用いて、実体のアドレスXのブロック[D]のデータを格納していることを示す。
LSB/MSB:当該セグメントが、FMD1030のFMセルのLSBまたはMSBを利用した記憶領域を用いて、実体のアドレスXのブロック[D]のデータを格納していることを示す。
なお、セルモードは、最も細かい粒度では1つのFMセルを単位として設定可能であり、1つのFMセルに対して1つのセルモード値が割り当てられるようにしてもよい。ただし、現実的には、1ページ、1イレースブロック、1FMD1030、1パリティグループ、1内部LU、1仮想内部LUといった単位でセルモード値を管理しても良い。
セル書き換え回数は、FMD内部構成情報2013が持つセルプログラミングとセルイレースのサイクル回数、またはセルイレース回数である。
<4.3.パリティグループ定義>。
図14は、第1実施例に係るPG作成処理の一例のフローチャートである。なお、PG作成処理は、構成制御プログラム4030によって実行される。
構成制御プログラム4030は、管理サーバ1200から、複数のSDEVの識別子(識別子は、物理的なストレージシステム1000への搭載位置や論理的な識別情報でも代替可能である)とRAIDレベルとを含んだパリティグループ定義リクエストを受信し、そのリクエストに付随した情報(各FMD識別子及びRAIDレベル)に基づいて、PG構成情報4060を作成及び/又は更新する(Step14002)。なお、PG構成情報4060の対応するパリティグループの閉塞情報については、閉塞状態と設定する。
次いで、構成制御プログラム4030は、パリティグループを初期化(ミラーデータやパリティデータの作成を含む)する(Step14003)。
次いで、構成制御プログラム4030は、PG構成情報4060の該当するパリティグループの閉塞情報を閉塞状態から正常状態へ変更し、利用可能なことを示し、管理サーバ1200に完了メッセージを返す(Step14004)。
<4.4.内部LU定義>。
図15は、第1実施例に係る内部LU作成処理の一例のフローチャートである。内部LU作成処理は、構成制御プログラム4030によって実行される。
構成制御プログラム4030は、管理サーバ1200から、以下に例示する(引数1)乃至(引数3)の一部または全ての情報を含んだ内部LU定義リクエストを受信したら、当該リクエストに付随した情報に基づいて、内部LU構成情報4070を作成及び/又は更新する(Step15002)。なお、内部LU構成情報4070の対応する内部LUの閉塞情報については、閉塞状態と設定する。
(引数1)パリティグループの識別子。
(引数2)パリティグループの開始アドレス[G]。
(引数3)内部LUの記憶容量またはパリティグループの終了アドレス[G]。
なお、(引数3)については、終了アドレスが当該パリティグループのストライピングサイズの整数倍となることで、一つのパリティデータが複数の内部LUで共有することを回避するチェックを実施してもよい。また、(引数2)と(引数3)は、パリティグループのブロックサイズで指定するとしたが、ストライピングサイズを単位として当該引数の値を受け取ってもよい。同様に、最終的にパリティグループの開始アドレス[G]と終了アドレス[G]を求められるのであれば、他の形式で引数を受け取ってもよい。
次いで、構成制御プログラム4030は、必要に応じて、内部LUの初期化処理を行う(Step15003)。例えば、初期化処理の一環として内部LUの管理領域を作成してもよい。
次いで、構成制御プログラム4030は、内部LU構成情報4070の該当する内部LUの閉塞情報を閉塞状態から正常状態へ変更することで、内部LUが利用可能であることを示し、管理サーバ1200に完了メッセージを返す(Step15004)。
<4.5.LUパス定義>。
図16は、第1実施例に係るパス定義処理の一例のフローチャートである。パス定義処理は、構成制御プログラム4030によって実行される。
構成制御プログラム4030は、管理サーバ1200から、仮想内部LUの識別子とポート情報(最終的にI/Oポート1013の識別子またはWWNへ変換可能な識別情報であればこれら以外の情報でもよい)とLUNを含んだパス定義リクエストを受信する(Step16002)。
次いで、構成制御プログラム4030は、リクエストで指定されたWWNとLUNが割り当て済みでないか確認し(Step16003)、割り当て済みの場合はエラーで応答して処理を終了する。
一方、割り当て済みでない場合には、構成制御プログラム4030は、リクエストに付随した情報に基づいて、LUパス情報4080を作成及び/又は更新し、完了メッセージを管理サーバ1200へ返す(Step16004)。
なお、ホスト1100からのアクセスパス多重化のために、仮想内部LUに対して複数のパス定義を行っても良い。また、定義されたパスの解除処理の場合は、管理サーバ1200から、仮想内部LUの識別子か、或いは、WWNとLUNの組み合わせを用いて、LUパス情報の対応エントリを見つけ、当該エントリを削除することによって、パス設定を解除してもよい。また、LUパス定義リクエストでWWNとLUNを指定する代わりに、構成制御プログラム4030が空いているWWNとLUNを探して割り当ててもよい。
<4.6. ストレージプール定義>。
図29は、第1実施例に係るストレージプール作成、更新処理の一例のフローチャートである。ストレージプール作成、更新処理は、構成制御プログラム4030によって実行される。
構成制御プログラム4030は、管理サーバ1200から、以下に例示する(引数1)乃至(引数2)の一部または全ての情報を含んだストレージプール定義リクエストを受信する(Step29001)。
(引数1)ストレージプールの識別子(Pool-ID)。
(引数2)内部LUのLUID(1つ以上指定)。
次いで、構成制御プログラム4030は、ストレージプール定義リクエストの中でストレージのPool-IDが指定されているかを確認する(Step29002)。この結果、Pool-IDが指定されている場合(Step29002でYES)には、構成制御プログラム4030は、プール情報4040Aにおいて、指定されたPool-IDに該当するストレージプールに対して、指定された内部LUを関連付け(Step29003)、Step29005に処理を進める。
一方、Pool-IDが指定されていない場合(Step29002でNO)には、構成制御プログラム4030は、新規ストレージプール番号を採番、プール情報4040Aにおいて、対応するエントリを作成し、指定された内部LUを関連付け(Step29004)、Step29005に処理を進める。
Step29005では、構成制御プログラム4030は、追加された内部LUのセグメントに対してSEG-IDを割り当て、プール情報4040Aを更新する。なお、初期状態では、割当カラムをNoに設定し、MLBフラグをNoに設定する。
<4.6a. 仮想内部LU定義>。
図30は、第1実施例に係る仮想内部LU作成処理の一例のフローチャートである。仮想内部LU作成処理は、構成制御プログラム4030によって実行される。
構成制御プログラム4030は、管理サーバ1200から、以下に例示する(引数1)乃至(引数2)の一部または全ての情報を含んだ仮想内部LU定義リクエストを受信する(Step30001)。
(引数1)ストレージプールの識別子。
(引数2)仮想内部LUの仮想容量。
次いで、構成制御プログラム4030は、受信したリクエストに付随した情報に基づいて、新規作成する仮想内部LU-ID、仮想容量、指定されたPool-ID、容量分のチャンクIDをVL変換情報4040Bに設定する(Step30002)。初期状態では、SEG-IDには、nullが設定される。ライトが発生し、新規ページ割当が発生しタ場合には、VL変換情報4040BのSEG-IDが更新される。なお、仮想容量は、これまで説明した通り、VL変換情報以外に設定されても良い。
<4.6b. セルモード設定・変更>。
<4.6b.1 ライト処理によるセルモード情報の更新>
図31は、第1実施例に係るライト時のセルモード情報更新処理の一例のフローチャートである。
内部LUにホスト1100からライトが発生する(Step31001)と、構成制御プログラム4030が、プール情報4040A、内部LU情報4070、SDEV情報4050を参照し、ライト対象セグメントのSDEV情報を調べ、SDEVがFMD1030かどうかを調べる(Step31002)。
この結果、SDEVがFMD1030の場合(Step31002でYES)には、構成制御プログラム4030は、FMD内部構成情報通知プログラム2014から該当セグメントに対応する全てのページのセル書き換え回数を取得し、それらのうち最大値(又は平均値、最小値、或いは、その他統計的な値)を計算する(Step31003)。次いで、構成制御プログラム4030は、セルモードをLSB
Onlyとし、セルプログラミング・セルイレースのサイクル回数をStep31003で計算した最大値として、セルモード情報4090に設定し(Step31004)、処理を終了する。
一方、SDEVがFMD1030でない場合(Step31002でYES)には、構成制御プログラム4030は、セルモードをHDDとし、セル書き換え回数は空欄として、セルモード情報4090に設定し(Step31005)、処理を終了する。
なお、本処理は、必ずしも1ライト単位で実施されなくてもよい。また、本処理は、ライト処理とは別なタイミングで実施されてもよい。また、前述の通り、FMD1030のブロック[D]とページとの対応は動的に変化するため、常にセグメントとページの対応関係が固定されているわけではない。そのため、セル書き換え回数は、FMD1030としてのセル書き換え回数としてFMD1030から取得され、この値が、Step31003で用いられても良い。なお、FMD1030としてのセル書き換え回数は、FMD1030に含まれる全てのページ(予備扱いされているページは除いても良い)のセル書き換え回数の最大値であることが考えられるが、その他、最大値の代わりとして平均値、合計値、或いはその他統計的な値が採用されもよい。
また、上述の通り、セグメントサイズは、ページサイズより大きいため、多少のライトでセグメントに対応するページが変化したとしても、それは、セグメントに関係する全ページ数と比較すれば、影響は僅かである場合が想定される。この場合は、上述のように、セグメントに関係するブロック[D]をFMD1030に指示する等して、対応するページの書き換え回数の統計値が取得されれば、相応に正確な値を取得することが期待できる。
なお、これらセル書き換え回数については、FMDコントローラ2010が計算し、ストレージコントローラに送ることが考えられるが、ストレージコントローラが直接計算してもよい。また、他の方法でセル書き換え回数が得られても良い。
<4.6b.2 セルモード変更>。
図32は、第1実施例に係るセルモード変更処理受付時のセルモード情報変更処理の一例のフローチャートである。
構成制御プログラム4030は、管理サーバ1200から、以下に例示する(引数1)乃至(引数2)の一部または全ての情報を含んだセルモード情報更新リクエストを受信したら、当該リクエストに付随した情報を基に、セルモード情報4090を更新する(Step32001)。
(引数1)ストレージプールの識別子(Pool-ID)。
(引数2)セグメントの識別子(SEG-ID)。
(引数3)セルモード値。
次いで、構成制御プログラム4030が、引数3をチェックし、セルモード値がLSB OnlyからLSB/MSBへの変更かどうかチェックする(Step32002)。セルモード値がLSB OnlyからLSB/MSBへの変更である場合(Step32002でYES)には、構成制御プログラム4030は、プール情報4040Aにおいて、引数1で指定されたPool-ID、引数2で指定されたSEG-IDを持つとともに、内部LU-ID、開始―終了アドレスを持った行を探索する。次いで、構成制御プログラム4030は、プール情報4040Aにおいて、Pool-IDには引数1の値、SEG-IDには新規セグメント番号、割当にはNo、内部LU-IDには、探索した内部LU-IDの値、MSBフラグにはYes、開始―終了アドレスには、探索した値を持つ行を1行追加し(Step32003)、処理を終了する。
一方、セルモード値がLSB OnlyからLSB/MSBへの変更でない場合(Step32002でNO)には、構成制御プログラム4030は、引数3をチェックし、セルモード値がLSB/MSBからLSB Onlyへの変更かどうかチェックする(Step32004)。この結果、セルモード値がLSB/MSBからLSB Onlyへの変更でない場合(Step32004でNO)には、構成制御プログラム4030は、処理を終了する。
一方、セルモード値がLSB/MSBからLSB Onlyへの変更である場合(Step32004でYES)には、構成制御プログラム4030は、プール情報4040Aにおいて、指定されたSEG-IDのうち、MSBフラグがYesの行を1行削除する(Step32005)。
なお、本実施例では、セルモードの変更はセグメント識別子を基準に実行しているが、必ずしもこれに制限されない。例えば、内部LUのセルモードを内部LU単位で変更する場合に、内部LUの開始から終了アドレス[I]、又は内部LUの識別子を指定してもよい。また、パリティグループ単位でセルモードを変更する場合に、パリティグループの開始―終了アドレス[G]、又はパリティグループの識別子を指定してもよい。また、FMD単位でセルモードを変更する場合に、FMDの開始―終了アドレス[D]、又はFMDの識別子を指定してもよい。また、FMセル単位でセルモードを変更する場合に、FMセルの識別子を指定してもよい。
<4.7 ライト処理>。
図17は、第1実施例に係るライト処理の一例のフローチャートである。
I/O処理プログラム4010は、ホスト1100からライトリクエスト(ライトコマンド、及びライトデータ)を受信する(Step17001)と、受け取ったライトリクエストが有するI/O情報を利用し、ライト先の仮想内部LUのID、及びチャンクIDを特定する(Step17002)。
次いで、I/O処理プログラム4010は、VL変換情報4040Bを利用して、特定したライト先のチャンクにセグメントが割り当て済みかどうかを調べる(Step17003)。
この結果、セグメントが割り当て済みの場合(Step17003でYES)には、I/O処理プログラム4010は、Step17005へ処理を進める。一方、セグメントが未割り当ての場合(Step17003でNO)には、I/O処理プログラム4010は、プール情報4040Aを調べ、未割り当てのセグメントをチャンクに割り当てる。その後、I/O処理プログラム4010は、割り当てたセグメントに対応するプール情報4040Aの割当をYesへ変更する。また、I/O処理プログラム4010は、現在割り当てたセグメントのSEG-IDとMSBフラグとをそれぞれ、VL変換情報4040BのSEG-ID及びMSBフラグに設定し(Step17004)、Step17005に処理を進める。
Step17005では、I/O処理プログラム4010は、プール情報4040Aからライト対象となるセグメントのアドレス[I]をストライピングの計算とブロックサイズの変換とによって、SDEVの識別子とSDEVのブロックアドレス[D]に変換する。
次いで、I/O処理プログラム4010は、変換したSDEVに対して、変換したブロックアドレス[D]と、ライト対象セグメントのMSBフラグとを含むライトリクエストを送信する(Step17006)。ここで、I/O処理プログラム4010は、MSBフラグがYesの場合は、SDEVに対するライトリクエストのLUNを1とし、MSBフラグがNoの場合は、SDEVに対するライトリクエストのLUNを0とする。なお、ライトデータをSDEVへ書き込む前に、一時的にキャッシュメモリにライトデータを格納してもよい。
次いで、I/O処理プログラム4010は、SDEVからライト完了情報を受け取り、ライトを実行したブロックアドレス[D]に対応するセグメントについて、VL変換情報4040Bのアクセス測定情報を更新する(Step17007)。なお、セルモード情報更新処理(図31)が実行されて、セルモード情報4090が更新される。そして、I/O処理プログラム4010は、完了をホスト1100に応答する(Step17008)。
以上がライト処理である。なお、キャッシュメモリにライトデータを一時格納する場合、Step17005以降は、ライトリクエストとは非同期に行われる。さらに、キャッシュメモリを用いる場合は、Step17004のセグメントを探す処理は、ライトデータをキャッシュメモリに一時格納した後に実施されてもよい。また、キャッシュメモリの領域管理情報には、一時格納したライトデータがLSBに書くべきなのかMSBに書くべきなのか示す情報が含まれても良い。
<4.8 リード処理>。
図18は、第1実施例に係るリード処理の一例のフローチャートである。
I/O処理プログラム4010は、リードリクエスト(リードコマンド)をホスト1100から受信する(Step18001)と、受信したリードコマンドが有するI/O先情報からリード元の仮想内部LUのIDとチャンクIDを特定する。なお、キャッシュメモリ1020に対象となるチャンクIDのデータが存在している場合は、そのリード対象データをホスト1100へ応答して当該フローを終了する。
I/O処理プログラム4010が、VL変換情報4040Bに基づいて、指定されたチャンクIDにセグメントが割り当てられているか確認する(Step18002)。この結果、セグメントが割り当て済みでない場合(Step18002でNO)には、I/O処理プログラム4010が、所定の応答(例えば、ゼロを表すデータ)をホスト1100へ応答し(Step18003)、処理を終了する。
一方、セグメントが割当て済みの場合(Step18002でYES)には、I/O処理プログラム4010が、VL変換情報4040Bに基づいて、指定されたチャンクIDに対応するセグメントのSEG-ID、MSBフラグを調べ、さらにプール情報4040Aの開始アドレス、終了アドレスに基づいて、リード対象となるセグメントのアドレス[I]をストライピングの計算とブロックサイズの変換とによって、SDEVの識別子とSDEVのブロックアドレス[D]に変換する(Step18004)。
次いで、I/O処理プログラム4010が、変換したSDEVに対して、変換したブロックアドレス[D]と、リード対象セグメントのMSBフラグとを含むリードリクエストを送信する(Step18005)。ここで、I/O処理プログラム4010は、MSBフラグがYesの場合には、SDEVに対するリードリクエストのLUNを1とし、MSBフラグがNoの場合には、SDEVに対するリードリクエストのLUNを0とする。
次いで、I/O処理プログラム4010は、SDEVからリード完了情報を受け取り、リードを実行したブロックアドレス[D]に対応するセグメントについて、VL変換情報4040Bのアクセス測定情報を更新し(Step18006)、処理を終了する。
<4.9. データ移動>。
図19は、第1実施例に係るデータ移動処理の一例のフローチャートである。
構成制御プログラム4030は、管理サーバ1200から、以下に例示する(引数1)乃至(引数10)の一部または全ての情報を含んだデータ移動リクエストを受信する(Step19001)。
(引数1)移動元ストレージの識別子。
(引数2)移動元ストレージプールの識別子。
(引数3)移動元セグメントの識別子。
(引数4)移動元セグメントのMSBフラグ。
(引数5)移動元セグメントの開始―終了アドレス[I]。
(引数6)移動先ストレージの識別子。
(引数7)移動先ストレージプールの識別子。
(引数8)移動先セグメントの識別子。
(引数9)移動先セグメントのMSBフラグ。
(引数10)移動先セグメントの開始―終了アドレス[I]。
なお、当該リクエストに含まれる引数は、チャンクと、チャンクに新たに対応させる、いわゆるデータ移動先となるセグメントと、を特定できれば、上記引数以外であってもよい。例えば、チャンクとセグメントのIDが、引数の一例であり、チャンクが、ブロック[I]アドレスで指定されるのも、引数の一例である。この場合、移動元セグメントは、指定されたチャンクに割り当てられたセグメントをVL変換情報から特定されればよい。また、他の例としては、移動元のセグメントIDと移動先のセグメントIDが指定されても良い。
構成制御プログラム4030は、指定された移動元セグメントと移動先セグメントとそれぞれのアドレス[I]を、ストライピングの計算とブロックサイズの変換とによって、それぞれのSDEVの識別子とSDEVのブロックアドレス[D]に変換する(Step19002)。
構成制御プログラム4030は、変換した移動元SDEVに対して、変換したブロックアドレス[D]と、リード対象セグメントのMSBフラグとを含むリードリクエストを送信し、対応するデータをリードする(Step19003)。ここで、構成制御プログラム4030は、MSBフラグがYesの場合には、SDEVに対するリードリクエストのLUNを1とし、MSBフラグがNoの場合には、SDEVに対するリードリクエストのLUNを0とする。
次いで、構成制御プログラム4030は、変換した移動先SDEVに対して、変換したブロックアドレス[D]と、MSBフラグと、Step19003でリードしたデータとを含むライトリクエストを送信する(Step19004)。ここで、構成制御プログラム4030は、MSBフラグがYesの場合には、SDEVに対するライトリクエストのLUNを1とし、MSBフラグがNoの場合には、SDEVに対するライトリクエストのLUNを0とする。なお、構成制御プログラム4030は、ライトデータをSDEVへ書き込む前に、一時的にキャッシュメモリ1020にライトデータを格納してもよい。
構成制御プログラム4030は、変換した移動元SDEVに対して、変換したブロックアドレス[D]と、MSBフラグと、ゼロデータを含むライトリクエストを送信する(Step19005)。この操作により、移動元SDEVのデータが削除される。なお、Step19005の処理は、Step19004の処理後であれば、非同期に実行してもよい。つまり、ゼロデータのライトは、移動先SDEVへのデータのライト後すぐに実行する必要はなく、例えば、移動元のセグメントに対して新たにライトリクエストが来たときに実行してもよい。また、本データの削除は行わなれなくても良い。
構成制御プログラム4030は、SDEVからリード、ライト、削除(ゼロデータライト)完了を受信すると、プール情報4040Aの割当、VL変換情報4040BのSEG-IDとアクセス測定値、セルモード情報4090のセル書き換え回数の値を更新し(Step19006)、処理を終了する。
<5.管理サーバの詳細>。
次に、管理サーバ1200について説明する。
<5.1.管理サーバが含む情報の詳細>。
図25は、第1実施例に係る管理側SDEV情報の一例を示す図である。
管理側SDEV情報12050は、各ストレージシステム1000に取り付けられたSDEV(1030、1040等)に関する以下の情報を含む。
(MA1)ストレージシステム1000の識別子。
(MA2)SDEVの識別子。
(MA3)SDEVの閉塞情報。
(MA4)SDEVのWWN(World Wide Name)。SDEVにアクセスするために必要なFibreChannelの通信識別子。
(MA5)SDEVの型番。これによってSDEVがHDD1040であるか、FMD1030であるか判別することができる。
(MA6)SDEVの提供容量。提供容量については、SDEVから提供される。
なお、上記(MA2)乃至(MA6)のそれぞれの意味は、図5で説明したSDEV情報4050の意味と同じである。しかし、管理側SDEV情報12050とSDEV情報4050とは同じデータ構造である必要は無い。同様に管理側SDEV情報12050とSDEV情報4050とは同じ意味を持つ情報を含む場合も同じデータ表現形式で格納する必要は無い。
図26は、第1実施例に係る管理側PG構成情報の一例を示す図である。
管理側PG構成情報12060は、各ストレージシステム1000に定義されたパリティグループに関する以下の情報を含む。
(MB1)ストレージシステム1000の識別子。
(MB2)パリティグループの識別子。
(MB3)パリティグループの閉塞情報。
(MB4)パリティグループのRAIDレベル。
(MB5)パリティグループに属するSDEVの数とSDEVの識別子。
なお、上記(MB2)乃至(MB5)のそれぞれの意味は図6で説明したPG構成情報4060の意味と同じである。しかし、管理側PG構成情報12060とPG構成情報4060とは同じデータ構造である必要は無い。同様に管理側PG構成情報12060とPG構成情報4060とは同じ意味を持つ情報を含む場合も同じデータ表現形式で格納する必要は無い。
図27は、第1実施例に係る管理側内部LU構成情報の一例を示す図である。
管理側内部LU構成情報12070は、各ストレージシステム1000に定義された内部LUに関する以下の情報を含む。
(MC1)ストレージシステム1000の識別子。
(MC2)内部LUの識別子。
(MC3)内部LUの閉塞情報。
(MC4)PG識別子と開始アドレス[G]と終了アドレス[G]。当該内部LUの記憶領域として用いるパリティグループと、パリティグループ内の開始ブロックアドレス[G]と終了ブロックアドレス[G]とを示す。
なお、上記(MC2)乃至(MC4)のそれぞれの意味は図7で説明した内部LU構成情報4070の意味と同じである。しかし、管理側内部LU構成情報12070と内部LU構成情報4070とは同じデータ構造である必要は無い。同様に管理側内部LU構成情報12070と内部LU構成情報4070とは同じ意味を持つ情報を含む場合も同じデータ表現形式で格納する必要は無い。
図28は、第1実施例に係る管理側LUパス情報の一例を示す図である。
管理側LUパス情報12080は、各ストレージシステム1000に定義された論理ユニットに関する以下の情報を含む。
(MD1)ストレージシステム1000の識別子。
(MD2)ホスト1100に対して提供する仮想内部LUの識別子。
(MD3)WWN(またはI/Oポート1013の識別子)。WWNは、ホスト1100に対して提供する内部LUを、どのポート1013から提供するかを示す。なお、WWNに代えて、ポート番号など、他種の識別子で代替されてもよい。また、LUパス情報4080の該当する情報と異なる内容であってもよい(例えば、ストレージシステム1000はWWNで管理し、管理サーバ1200はポート番号で管理する)。
(MD4)LUN。
なお、上記(MD2)乃至(MD4)のそれぞれの意味は図13で説明したLUパス情報4080の意味と同じである。しかし、管理側LUパス情報12080とLUパス情報4080とは同じデータ構造である必要は無い。同様に管理側LUパス情報12080とLUパス情報4080とは同じ意味を持つ情報を含む場合も同じデータ表現形式で格納する必要は無い。また、図13で説明した通り、当該情報のMD2には、内部LUの識別子が登録されてもよい。また、本情報に仮想内部LUの仮想容量が登録されてもよい。
図21は、第1実施例に係る管理側プール情報の一例を示す図である。
管理側プール情報12040Aは、各ストレージシステム1000に定義されたストレージプールに関して以下の情報を含む。
(ME1)ストレージシステム1000の識別子。
(ME2)ストレージプールの識別子。
(ME3)ストレージプールに割り当てられたセグメント識別子。
(ME4)セグメント識別子が仮想内部LUに割当済みか否かを示す割当情報。割当情報は、当該セグメントが後述する内部LUの一つである仮想内部LUのチャンクに割り当てられていればYesとなり、そうでない場合はNoとなる。
(ME5)当該セグメントに対応する内部LUの識別子と、開始及び終了ブロック[I]アドレス。
(ME6)そのセグメントがFMD1030から割り当てられている場合におけるFMD1030のセルモードを示すMSBフラグ。
なお、上記(ME4)乃至(ME6)のそれぞれの意味は図10で説明したプール情報4040Aの意味と同じである。しかし、管理側プール情報12040Aとプール情報4040Aとは同じデータ構造である必要はない。同様に管理側プール情報12040Aとプール情報4040Aとは同じ意味を持つ情報を含む場合も同じデータ表現形式で格納する必要はない。
図22は、第1実施例に係る管理側VL変換情報の一例を示す図である。
管理側VL変換情報12040Bは各ストレージシステム1000に定義された仮想内部LUに関して以下の情報を含む。
(MF1)ストレージシステム1000の識別子。
(MF2)当該仮想内部LUの仮想容量。
(MF3)当該チャンクに割り当てられたセグメントのIDと当該セグメントを含むプールのID。
(MF4)当該チャンクに割り当てられたセグメントのセグメントID。なお、セグメントが未割当の場合にはNULL値が格納される。
(MF5)当該チャンクに対するアクセス測定値。アクセス測定値としては、例えば、リードやライトの回数、リードやライト時間、単位時間当たりのリードライトの回数等がある。
なお、上記(MF2)乃至(MF5)のそれぞれの意味は図11で説明したVL変換情報4040Bの意味と同じである。しかし、管理側VL変換情報12040BとVL変換情報4040Bとは同じデータ構造である必要はない。同様に管理側VL変換情報12040BとVL変換情報4040Bとは同じ意味を持つ情報を含む場合も同じデータ表現形式で格納する必要はない。
図23は、第1実施例に係る管理側セルモード情報の一例を示す図である。
管理側セルモード情報12090は、各セグメント毎のセルモードに関して以下の情報を含む。
(MG1)ストレージシステム1000の識別子。
(MG2)ストレージプールの識別子。
(MG3)ストレージプールに割り当てられたセグメント識別子。
(MG4)セルプログラミングとセルイレースのサイクル回数、またはセルイレース回数を表すセル書き換え回数。
(MG5)セルモード情報。なお、セルモードは、最も細かい粒度では1つのFMセルを単位として設定可能であり、一つのFMセルに対して1つのセルモード値が割り当てられるようにしてもよい。ただし、現実的には、1ページ、1イレースブロック、1FMD1030、1パリティグループ、1内部LU、1仮想内部LUといった単位でセルモード値を管理しても良い。
なお、上記(MG3)乃至(MG4)のそれぞれの意味は図12で説明したセルモード情報4090の意味と同じである。しかし、管理側セルモード情報12090とセルモード情報4090とは同じデータ構造である必要はない。同様に管理側セルモード情報12090とセルモード情報4090とは同じ意味を持つ情報を含む場合も同じデータ表現形式で格納する必要はない。
図51は、第1実施例に係るAP性能要件情報の一例を示す図である。
AP性能要件情報12100は、ホスト1100に割り当てられる内部LUまたは仮想内部LUと、LUで動作するアプリケーション(以下、APと略す場合がある)と、そのアプリケーションの動作に求められる性能要件(例えばIOPSやレスポンスタイム)の情報を格納する。AP性能要件情報12100は、例えば、以下の情報を含む。
(MH1)ストレージシステム1000を識別するためのストレージID。
(MH2)仮想内部LUを識別するための識別子。内部LUをホストが利用している場合は、当該箇所に内部LUの識別子が含められても良い。
(MH3)LUを利用しているホストを識別するためのホスト識別子。
(MH4)LUで動作しているアプリケーションを識別するためのアプリケーション情報。
(MH5)アプリケーションの動作で求められる性能要件を示すIOPS。
図52は、第1実施例に係るセグメント割当傾向情報の一例を示す図である。
セグメント割当傾向情報12110は、仮想内部LUに単位時間に割り当てられるセグメントの量の傾向(増加の傾き)やIOPSを示す情報を格納する。セグメント割当傾向情報12110は、例えば、以下の情報を含む。
(MI1)ストレージシステム1000の識別子。
(MI2)仮想内部LUの識別子。
(MI3)仮想内部LUに割り当てられているSDEVの種別、又はセルモード。
(MI4)セグメント割当量の傾きを調べる単位時間。同図では1時間単位に情報が設定されているが、特にこの期間に限定されない。
(MI5)単位時間に増加したセグメントの割当量。
(MI6)仮想内部LUの単位時間の間の平均IOPS。
図53は、第1実施例に係るティア管理情報の一例を示す図である。
ティア管理情報12120は、ストレージプールに属する記憶領域のうち、同等の性能や信頼性を持つ記憶領域をまとめた集合であるTierの情報を格納する。ティア管理情報12120は、例えば、以下の情報を含む。
(MJ1)ストレージシステム1000の識別子。
(MJ2)ストレージプールの識別子。
(MJ3)ティアの識別子。
(MJ4)当該ティアに含まれるセグメントで要求される性能の範囲。この性能の範囲としては、単位時間あたりのIOPSや累積IO数などが設定される。以降ではこの情報をティアレンジと呼ぶ場合がある。
(MJ5)当該ストレージプールの当該ティアに含まれるセグメントの識別子。
(MJ6)当該セグメントを構成するSDEVの種別、又はセルモード。セルモードを意識しないデータ移動処理の場合にはSDEVの種別が設定される。セルモードを意識したデータ移動処理の場合にはセルモードが設定される。詳細は後述する。
<5.2. ストレージシステムからの管理情報受信>。
システム管理プログラム12010は、以下の処理を行うことでストレージシステム1000の情報を受信する。
システム管理プログラム12010は、ストレージシステム1000からストレージシステムの管理情報を受信する(Step1)。次いで、システム管理プログラム12010は、前述のストレージシステム管理情報に基づいて、以下の情報を作成または更新する(Step2)。
(*)管理側SDEV情報12050
(*)管理側PG構成情報12060
(*)管理側内部LU構成情報12070
(*)管理側LUパス情報12080
(*)管理側セルモード情報12090
(*)管理側プール情報12040A
(*)管理側VL変換情報12040B
(*)セグメント割当傾向情報12110
なお、ストレージシステム1000が送信するストレージシステム管理情報はストレージシステム1000が含む以下の情報に基づいて作成される。
(*)SDEV情報4050
(*)PG構成情報4060
(*)内部LU構成情報4070
(*)LUパス情報4080
(*)セルモード情報4090
(*)プール情報4040A
(*)VL変換情報4040B
ストレージシステム管理情報は、上記情報の一部または全て、または前回送信分からの差分を含むことが考えられるが、これら情報と同じデータ構造やデータ表現形式でストレージシステム管理情報に含める必要は無い。
なお、上記処理は管理者による管理サーバ1200への指示を契機として実施しても良く、また、一部の情報がホスト1100を経由せずに管理者から管理サーバ1200へ入力された情報に基づいても良い。また、上記処理は繰り返し実行してもよい。
なお、セグメント割当傾向情報12110は単位時間当たりの情報であるため、システム管理プログラム12010は、ストレージシステム1000からストレージシステム管理情報を単位時間ごとに繰り返し情報を受信することで、セグメント割当傾向情報12110の値が設定される。
AP性能要件情報12100について、アプリケーション情報はシステム管理プログラム12010がホスト1100のホスト管理プログラム4014から情報を取得する。また、ストレージシステム管理情報はストレージシステム1000が含む以下の情報に基づいて作成される。
(*)SDEV情報4050
(*)内部LU構成情報4070
(*)LUパス情報4080
なお、性能要件の値はユーザ(管理者)がGUIなどで事前に設定しておく。もしくはアプリケーションがデフォルトで持っている値を設定する。
<5.3 ティア定義手順>。
管理サーバ1200のティア管理情報12120の設定方法について説明する。
ティア管理情報12120は、ストレージプール作成時に作成される。ティア管理情報12120のティア識別子とティアレンジは、システム管理プログラム12010が自動的に決定してもよく、ユーザがストレージプール作成時に指定してもよい。
図33は、第1実施例に係るティア情報を設定する処理の一例のフローチャートである。同図に示す処理は、ユーザが指定する場合のフローチャートである。
システム管理プログラム12010は、ユーザから、以下に例示する(引数1)乃至(引数4)の一部または全ての情報を含んだストレージプール作成入力を受信したら(Step33001)、当該入力に付随した情報に基づいて、管理側プール情報12040A及びティア管理情報12120を更新する。
(引数1)ストレージプールの識別子。
(引数2)内部LUのLUID(1つ以上指定)。
(引数3)各内部LUをどのティアとするか、ティア識別子(引数2に対応して1つ以上指定)。
(引数4)ティア識別子の毎のティアレンジ。
次いで、システム管理プログラム12010は、ストレージシステム1000に対して、引数1と引数2の情報を含めたストレージプール定義リクエストを送信する(Step33002)。
これにより、ストレージシステム1000の構成制御プログラム4030は、ストレージプール作成、更新処理(図29参照)を実行する(Step33003)。
次いで、システム管理プログラム12010は、管理側プール情報12040Aに作成したストレージプールの情報を追加し(Step33004)、作成されたストレージプールの情報と引数3と引数4の情報からティア管理情報12120を更新し(Step33005)、処理を終了する。
<5.4 セルモードを含むストレージシステム管理情報の表示>。
次に、管理サーバ1200の管理情報の表示について、表示内容の算出処理と共に説明する。なお、それぞれの管理情報の表示は、管理サーバ1200が有する以下の情報に基づいて行われる。
(*)管理側SDEV情報12050
(*)管理側PG構成情報12060
(*)管理側内部LU構成情報12070
(*)管理側LUパス情報12080
(*)管理側セルモード情報12090
(*)管理側プール情報12040A
(*)管理側VL変換情報12040B
(*)AP性能要件情報12100
(*)セグメント割当傾向情報12110
(*)ティア管理情報12120
なお、以後の説明では、管理サーバ1200が管理する上記情報をまとめてシステム管理情報と呼ぶことがある。なお、このシステム管理情報は上記情報が全て含まれるとは限らない。例えば、本発明は、AP性能要件情報12100や、セグメント割当傾向情報12110を用いない運用も可能であり、また、ホストLUやアプリケーションを考慮せずにセルモードを設定する場合もあるため、そうした実施例の際には、上記全ての情報が必要ではないからである。
図41は、第1実施例に係るストレージプール詳細を示すGUIの一例を示す図である。同図は、管理サーバ1200が、ストレージシステム1000のストレージプール1080に関する情報を入出力装置により表示する画面の一例である。
表示画面41000は、第1ペイン41001、第2ペイン41002、第3ペイン41003、第4ペイン41004、及び第5ペイン41005の5つのいずれか又は全てを含み、それぞれのペインでは以下に示すような情報が表示され、また入出力装置による入力を支援する。
(第1ペイン41001)第1ペイン41001には、管理サーバ1200が管理するストレージシステム1000及びストレージシステム1000のストレージプール、及びストレージプールに関するコンポーネント(たとえばティア)を意味する表示オブジェクトが表示される。なお、図41における表示オブジェクトは、アイコン又は/及び文字列を指すが、他の映像又は音声であってもよい。さらに、第1ペイン41001は、表示オブジェクト間の上位関係、等位関係、又は下位関係を表示する。なお、以後の説明では、第1ペインを用いて指定された表示オブジェクトを第1ペイン指定表示オブジェクトと呼ぶことがある。
(第2ペイン41002)第2ペイン41002には、第1ペイン指定表示オブジェクトに対応するストレージプール1080の管理情報が表示される。図41では、ストレージプール1080が有する管理情報として、ティア識別子、ティアの容量、ティアの空き容量、ティアの空き容量のうちLSB Onlyモードの空き容量、ティアの空き容量のうちLSB/MSBモードの空き容量、ティアの空き容量のうちHDDモードの空き容量を管理情報として表示しているが、これに限定されない。なお、ティアの空き容量とは、ティアに割り当てられた内部LUの全容量のうち、実際に仮想内部LUに割り当てられていないセグメントの容量である。
図示されているように、第2ペインには、セルモード毎のプール内空き容量も表示される。また第2ペインは、各ティアとセルモードとの対応関係についても表示される。
(第3ペイン41003)第3ペイン41003には、第1ペイン指定表示オブジェクトに対応するストレージプール1080の一定時間毎のセグメント割り当て容量が、ストレージプールのティア毎にグラフで表示される。図41では、全てのティア情報を1つのペインで表示しているが、例えば入出力装置にポインティングデバイス(例えばマウス、タッチパッド、タッチスクリーン、ペンタブレット)を含む場合で、第2ペイン41002の管理情報において、或るティアを選択したときに、選択したティアのみの情報を表示するようにしてもよい。なお、必ずしもグラフで表示する必要はなく、例えば単位時間毎の各ティアの容量を表形式で表示してもよい。
(第4ペイン41004)第4ペイン41004には、指定表示オブジェクトに対応するストレージプール1080について、構成要素のSDEVがFMD1030である場合におけるLSB Only又はLSB/MSBのセルモードの比率が表示される。また、そのセルモード比率をユーザが手動で設定するか、管理システムで自動制御するかどうかを選択するためのチェックボックスを表示する。図41では、「ユーザ指定」と書かれたチェックボックスはユーザが手動でセルモード比率を設定することを可能とするチェックボックスである。このチェックボックスにチェックされた場合には、図41の第4ペイン41004のスライダを動かすことが可能となり、セルモード比率変更ボタンをクリックすることにより、ユーザがセルモード比率の変更指示を出すことが可能となる。図41の「Auto」と書かれたチェックボックスがチェックされた場合は、<5.6>で後述するセルモードを意識した記憶領域階層管理を管理システムが実施する。
なお、これらのチェックはチェックボックスに限定されず、例えば、ラジオボタンやその他のアイコンでチェックすることも可能である。また、セルモード比率の変更もスライダに限定されず、例えばテキストボックスにLSB
Only比率を直接値で入力してもよい。また、セルモード比率変更ボタンを押さずにスライドの移動のみでセルモード変更リクエストが送信されてもよい。
(第5ペイン41005)第5ペイン41005には、第1ペイン指定表示オブジェクトに対応するストレージプール1080について、当該ストレージプール1080から作成される仮想内部LUの管理情報が表示される。図41の画面表示では、ストレージプール1080に定義された仮想内部LUの管理情報として、以下の内容が表示される。
(*)仮想内部LU識別子。
(*)仮想内部LUの容量。
(*)仮想内部LUの空き容量(仮想内部LUの容量のうち、実際に仮想内部LUにセグメントが割り当てられていない容量)。
(*)仮想内部LUの実際のIOPSと当該LUで動作しているアプリケーションが要求しているIOPSの値とその比率。
(*)仮想内部LUに割り当てられているセグメントのうち、LSB Onlyのセルモードの割合
(*)仮想内部LUに割り当てられているセグメントのうち、LSB/MSBのセルモードの割合
(*)仮想内部LUに割り当てられているセグメントのうち、HDDのセルモードの割合。
しかし、上記の全てが表示されなくてもよく、また追加の情報が表示されてもよい。なお、実際のIOPSと要求IOPSの比率が1を十分に超えている場合は、要求以上の性能が出ているため問題無いが、1に近いか、1より少ない場合は、要求される性能を満たさない、あるいは満たさなくなる恐れがあるため、例えば、LSB Onlyのセルモードを増やして性能向上を図るという判断をすることが可能となる。
なお、図41又は以後説明する図42乃至図43、図46乃至図50の例ではGUIを想定しているが、コマンドラインインターフェース(CLI)を用いたコンソール出力であってもよい。
図42は、第1実施例に係るティア詳細を示すGUIの一例を示す図である。同図は、管理サーバ1200が、ストレージシステム1000のストレージプール1080に関連するティアの情報を入出力装置により表示する画面の一例である。なお、以後の図では仮想内部LUを「Vol」と表現している。
表示画面42000は、第1ペイン42001、第2ペイン42002、第3ペイン42003、第4ペイン42004、及び第5ペイン42005の5つのいずれか又は全てを含み、それぞれのペインでは以下に示すような情報が表示され、また入出力装置による入力を支援する。
(第1ペイン42001)第1ペイン42001には、図41の第1ペイン41001と同様に、管理サーバ1200が管理するストレージシステム1000及びストレージシステム1000のストレージプール、及びストレージプールに関するコンポーネント(たとえばティア)を意味する表示オブジェクトが表示される。図42ではプールの下位関係としてティアを表示している。
(第2ペイン42002)第2ペイン42002には、第1ペイン指定表示オブジェクトに対応するティアの管理情報が表示される。図42では、ティアの管理情報として以下の情報が表示される。
(*)全容量
(*)空き容量(ティアに割り当てられた内部LUの全容量のうち実際に仮想内部LUに割り当てられていないセグメントの容量)。
(*)セグメントが割り当てられている容量のうちLSB Onlyモードの割合。
(*)セグメントが割り当てられている容量のうちLSB/MSBモードの割合。
(*)セグメントが割り当てられている容量のうちHDDモードの割合。
(*)ティアの空き容量のうちLSB Onlyモードの空き容量。
(*)ティアの空き容量のうちLSB/MSBモードの空き容量。
(*)ティアの空き容量のうちHDDモードの空き容量。
しかし、上記の全てが表示されなくてもよく、また追加の情報が表示されてもよい。
(第3ペイン42003)第3ペイン42003には、第1ペイン指定表示オブジェクトに対応するティアについてのセグメント割り当て容量が時系列でグラフとして表示される。なお、必ずしもグラフで表示する必要はなく、例えば単位時間毎の割り当てセグメント容量を表形式で表示してもよい。
(第4ペイン42004)第4ペイン42004には、第1ペイン指定表示オブジェクトが、ストレージプール1080のティアであり、ティアに含まれるSDEVがFMD1030である場合の、LSB Only又はLSB/MSBのセルモードの比率が表示される。また、そのセルモード比率をユーザが手動で設定するか、ストレージ管理システムで自動制御するかどうかを選択するためのチェックボックスが表示される。機能は図41の第4ペイン41004と同じであるが、当該GUIからはティア単位でセルモード変更を制御するために利用される。
(第5ペイン42005)第5ペイン42005には、第1ペイン指定表示オブジェクトに対応するティアを構成する内部LUの情報が表示される。図42では、ティアを構成する内部LUの情報として、内部LU識別子、内部LUの容量、SDEVの種別、SDEVがFMDの場合はLSB Onlyモードの割合、及びSDEVがFMDの場合はLSB/MSBモードの割合、が管理情報として表示される。しかしこれら全てを表示しなくてもよく、また追加の情報を表示してもよい。なお、ティアを構成する要素が内部LUに限定される必要はなく、例えばParityGroupでも、SDEVそのものでもよい。その場合、それらについての上記項目が管理情報として表示される。
図43は、第1実施例に係る仮想内部LU詳細を示すGUIの一例を示す図である。同図は、管理サーバ1200が、ストレージシステム1000のストレージプール1080から作成する仮想内部LUの管理情報を入出力装置により表示する画面の一例である。
表示画面43000は、第1ペイン43001、第2ペイン43002、第3ペイン43003、及び第4ペイン43004の4つのいずれか又は全てを含み、それぞれのペインでは以下に示すような情報が表示され、また入出力装置による入力を支援する。
(第1ペイン43001)第1ペイン43001には、図41の第1ペイン41001と同様に、管理サーバ1200が管理するストレージシステム1000及びストレージシステム1000のストレージプール、及びストレージプールに関するコンポーネント(たとえばティア)を意味する表示オブジェクトが表示される。図43ではプールの下位関係として仮想内部LUを表示している。なお、仮想内部LUの数は数万個を超えることもある。このとき第1ペイン43001に必ずしも全てを一度に表示しなくてもよく、千個又は百個単位等でまとめる表示オブジェクトを表示してもよい。そのまとめた表示オブジェクトをクリックすると下位関係要素で1つずつ仮想内部LUの表示オブジェクトが表示されてもよい。
(第2ペイン43002)第2ペイン43002には、第1ペイン指定表示オブジェクトに対応する仮想内部LUの管理情報が表示される。図43では、仮想内部LUの管理情報として以下の内容が表示される。
(*)仮想容量。
(*)空き容量(仮想内部LUにセグメントが割り当てられていない容量)。
(*)ホストのWWN。
(*)LUN。
(*)ストレージシステムが測定したIOPS等のアクセス測定値。
(*)当該仮想内部LU上で動作するアプリケーション。
(*)当該アプリケーションが要求するIOPS。
(*)セグメントが割り当てられている容量のうちLSB Onlyモードの割合。
(*)セグメントが割り当てられている容量のうちLSB/MSBモードの割合。
(*)セグメントが割り当てられている容量のうちHDDモードの割合。
しかし、これら全てが表示されなくてもよく、また、追加の情報が表示されてもよい。これは、例えば、ホストのWWN、当該仮想内部LU上で動作するアプリケーション、及び、当該アプリケーションが要求するIOPSが、管理サーバ1200に表示されない場合である。
(第3ペイン43003)第3ペイン43003には、第1ペイン指定表示オブジェクトに対応する仮想内部LUのセグメント割り当て容量及びIOPSが時系列でグラフとして表示される。なお、必ずしもグラフで表示する必要はなく、例えば単位時間毎の割り当てセグメント容量を表形式で表示してもよい。また、本ペインには、割り当て容量の代わりに仮想容量に対する割合が表示されてもよい。
(第4ペイン43004)第4ペイン43004は、第1ペイン指定表示オブジェクトに対応する仮想内部LUを対象に、仮想内部LUに割り当てられているセグメントのセルモードを制御するためのペインである。機能は図41の第4ペイン41004と同様である。
図46は、第1実施例に係るパリティグループ詳細を示すGUIの一例を示す図である。同図は、管理サーバ1200が、ストレージシステム1000のパリティグループ1060の管理情報を入出力装置により表示する画面の一例である。
表示画面46000は、第1ペイン46001、第2ペイン46002、第3ペイン46003、及び第4ペイン46004の4つのいずれか又は全てを含み、それぞれのペインでは以下に示すような情報が表示され、また入出力装置による入力を支援する。
(第1ペイン46001)第1ペイン46001には、管理サーバ1200が管理するストレージシステム1000及びストレージシステム1000のパリティグループ、及びパリティグループに関するコンポーネント(たとえばSDEV、内部LU)を意味する表示オブジェクトが表示される。図46ではパリティグループの下位関係として内部LUを表示している。なお、内部LUの数は数万個を超えることもある。このとき第1ペイン46001に必ずしも全てを一度に表示しなくてもよく、千個又は百個単位等でまとめる表示オブジェクトを表示してもよい。そのまとめた表示オブジェクトをクリックすると下位関係要素で1つずつ仮想内部LUの表示オブジェクトが表示されてもよい。
(第2ペイン46002)第2ペイン46002には、第1ペイン指定表示オブジェクトに対応するパリティグループの詳細情報が表示される。図46では、パリティグループの管理情報として、全容量、未使用容量(内部LU作成に使用されていない容量)、RAIDレベル、パリティグループ作成に利用されているSDEVのID、LSB Onlyモードの割合、LSB/MSBモードの割合を管理情報として表示しているが、これに限定されない。
(第3ペイン46003)第3ペイン46003には、第1ペイン指定表示オブジェクトに対応するパリティグループの使用容量が時系列でグラフとして表示される。なお、必ずしもグラフで表示する必要はなく、例えば単位時間毎の割り当てセグメント容量を表形式で表示してもよい。
(第4ペイン46004)第4ペイン46004は、第1ペイン指定表示オブジェクトに対応するパリティグループを対象に、セルモードを制御するためのペインである。機能は、図41の第4ペイン41004と同様である。
以上が、パリティグループに関係した表示であるが、図43のように、アプリケーション要求IOPS、LSB Only割合、LSB/MSB割合のいずれか一つ以上が表示されてもよい。
図47は、第1実施例に係る内部LU詳細を示すGUIの一例を示す図である。同図は、管理サーバ1200が、ストレージシステム1000の内部LU1070の管理情報を入出力装置により表示する画面の一例である。なお、本図における「Vol」は内部LUである。ただし、本表示は、内部LUを仮想内部LUを経由せずにホストへ提供する場合、またはストレージプールに含めた内部LUいずれに適用されてもよい。
表示画面47000は、第1ペイン47001、第2ペイン47002、第3ペイン47003、及び第4ペイン47004の4つのいずれか又は全てを含み、それぞれのペインでは以下に示すような情報が表示され、また入出力装置による入力を支援する。
(第1ペイン47001)第1ペイン47001には、図46の第1ペイン46001と同様に、管理サーバ1200が管理するストレージシステム1000及びストレージシステム1000の内部LU、及び内部LUに関するコンポーネントを意味する表示オブジェクトが表示される。
(第2ペイン47002)第2ペイン47002には、第1ペイン指定表示オブジェクトに対応する内部LUの詳細情報が表示される。図47では、内部LUの管理情報として、全容量、未使用容量、内部LU作成元パリティグループ、ホストのWWN、LUN、IOPS、当該仮想内部LU上で動作するアプリケーション、当該アプリケーションが要求するIOPS、LSB Onlyモードの割合、LSB/MSBモードの割合、を管理情報として表示する。しかし、これらの全てが表示されなくてもよく、また追加の情報が表示されてもよい。
(第3ペイン47003)第3ペイン47003には、第1ペイン指定表示オブジェクトに対応する内部LUについて、使用容量及びIOPSが時系列でグラフとして表示される。なお、必ずしもグラフで表示する必要はなく、例えば単位時間毎の割り当てセグメント容量を表形式で表示してもよい。
(第4ペイン47004)第4ペイン47004は、第1ペイン指定表示オブジェクトに対応する内部LUに関して、内部LU単位でセルモードを制御するためのペインである。機能は図41の第4ペイン41004と同様である。
図48は、第1実施例に係るFMD詳細を示すGUIの一例を示す図である。同図は、管理サーバ1200が、ストレージシステム1000のFMD1030の管理情報を入出力装置により表示する画面の一例である。
表示画面48000は、第1ペイン48001、第2ペイン48002、及び第3ペイン48003の3つのいずれか又は全てを含み、それぞれのペインでは以下に示すような情報が表示され、また入出力装置による入力を支援する。
(第1ペイン48001)第1ペイン48001には、図46の第1ペイン46001と同様に、管理サーバ1200が管理するストレージシステム1000及びストレージシステム1000のFMD1030、及びFMD1030に関するコンポーネントを意味する表示オブジェクトを表示する。図48ではパリティグループの下位関係としてFMD1030を表示している。
(第2ペイン48002)第2ペイン48002には、第1ペイン指定表示オブジェクトに対応するFMDの詳細情報が表示される。図48では、FMD1030の管理情報として、全容量、利用されているパリティグループ識別子、利用されているパリティグループに利用されている別のFMD識別子、LSB Onlyモードの割合、LSB/MSBモードの割合、を管理情報として表示している。しかし、これら全てが表示されなくてもよく、また追加の情報が表示されてもよい。
(第3ペイン48003)第3ペイン48003は、第1ペイン48001を用いて入出力装置から指定された表示オブジェクトに対応するFMDに関して、FMD単位でセルモードを制御するためのペインである。機能は、ほぼ図41の第4ペイン41004と同様であるが、同一パリティグループに属する別のFMD1030も同時にセルモードを変更可能とするチェックボックスが記載されている。
以上、本実施例の画面表示について説明してきた。なお、画面表示は、ペインを採用しなくてもよく、管理情報を表示すべきストレージシステム内部のコンポーネント(前述の通り、SDEV、パリティグループ、内部LU、ストレージプール、仮想内部LU)を管理者から入力を受け付けられれば第1ペインが表示されなくてもよい。また、セルモードに関する設定は、前述の通り比率による入力が受け付けられても良いが、よりシンプルに、対象コンポーネントに対してのセルモード自体を管理者に選択させ、その選択結果が入力として受け付けられてもよい。この場合、管理サーバの処理は、セルモード比率が0%か100%で受け付ける場合と同様である。
<5.5 セグメント単位での記憶領域階層管理>。
セグメント単位での記憶領域階層管理について説明する。
図34は、第1実施例に係るセグメント単位の階層管理の概要を示す図である。
ストレージプールPOOL1が3つのティアを持っている。同図では、ストレージプールPOOL1には、SSDティア、FCティア、SATAティアの3つのティアがあり、SSDティアが最も高速、FCティアが次に高速、SATAティアが最も低速という特性を持っている。
仮想内部LUには、ストレージプールPOOL1の各ティアから実記憶領域としてセグメントが割り当てられる。ストレージシステム、必要に応じて管理サーバは、ある一定期間毎に各チャンクのアクセス測定値を参照し、測定値の大きいチャンクを高性能Tierのセグメントへ再配置し、測定値の大きくないチャンクを低性能Tierのセグメントへ再配置することで、仮想内部LUの利用状況に適したセグメントを割り当てる。これをセグメント単位での記憶領域階層管理と呼ぶ。
図35は、第1実施例に係るセグメント単位で移動する対象を判断する処理の一例のフローチャートである。
システム管理プログラム12010は、管理対象ストレージシステム1000におけるLU識別子が最も若い仮想内部LUを選択し(Step35001)、仮想内部LUのチャンクIDが最も若いチャンクを選択する(Step35002)。
次いで、システム管理プログラム12010は、管理側VL変換情報12040Bを利用し、選択中のチャンクに割り当てられているセグメントが適切か否か(言い方を変えれば別なセグメントに移動させるべきか否か)判定する(Step35003)。本ステップは、具体的には選択中のチャンクに割当済みのセグメントを求め、求めたセグメントのティアレンジの条件(ティア管理情報12120に格納)にチャンクのアクセス測定値が含まれるか否かをチェックする。この結果、ティアレンジの条件を満足している場合(Step35003でNO)には、システム管理プログラム12010は、処理をStep35005へ進める。
一方、ティアレンジの条件を満足しておらず、データ移動が必要である場合(Step35003でYES)には、システム管理プログラム12010は、当該チャンクのアクセス測定値を含められるティアレンジを調べ、そのティアへ移動するようにストレージシステム1000に対しデータ移動リクエストを送信する(Step35004)。なお、データ移動リクエストで指定する移動先セグメントは、管理側VL変換情報12040B、管理側セルモード情報12090、管理側PG構成情報12060(RAIDレベル等)を利用し、ティアレンジを満足するセルモード(SDEV情報)であり、且つ未割当のセグメントを探索することで特定される。なお、データ移動リクエストで当該チャンクのIDを指定する。
これにより、構成制御プログラム4030は、データ移動処理(図19)を実行し、レスポンスをシステム管理プログラム12010に返すこととなる。システム管理プログラム12010は、レスポンスが返ってくると、ティア管理情報12120におけるセグメントのティア情報、SDEV情報を更新する。
次いで、システム管理プログラム12010は、1つの仮想内部LUの全てのチャンクIDに関してチェックしたかどうかを確認する(Step35005)。この結果、全てのチャンクIDについてチェックしていない場合(Step35005でNO)には、システム管理プログラム12010は、次の番号のチャンクIDを選択し(Step35006)、処理をStep35003へ進める。
一方、全てのチャンクIDについてチェックした場合(Step35005でYES)には、システム管理プログラム12010は、1つのストレージシステム1000の全ての仮想内部LUに関してチェックしたかを確認する(Step35007)。この結果、全ての仮想内部LUについてチェックしていない場合(Step35007でNO)には、システム管理プログラム12010は、次の仮想内部LUを選択し(Step35008)、処理をStep35002へ進める。
一方、全ての仮想内部LUについてチェックをしている場合(Step35007でYES)には、処理を終了する。
なお、データ移動リクエストに直接的に移動先セグメントのIDを指定できない場合は、他の指定方法で間接的に移動先セグメントを指定しても良い。また、当該リクエストに、移動先セグメントを検索する条件が含まれ、そのストレージシステム1000に送信してもよい。この場合、ストレージコントローラは当該条件に基いて移動先セグメントを検索する。また、システム管理プログラム12010は複数のチャンクについてのデータ移動リクエストをまとめて送信してもよい。
<5.6.セグメント単位での記憶領域階層管理(セルモード変更を考慮)>。
仮想内部LUを利用した運用でのセルモードを考慮した階層管理を説明する。
図36は、第1実施例に係るセルモードを考慮したセグメント単位の階層管理の概要を示す図である。
セルモード変更が可能な場合、従来のティア間でのデータコピーだけではなく、セグメント自身のセルモード変更(LSB Onlyと、LSB/MSBとの変更)によりティアの変更が可能となる。よって、セルモード変更を考慮した階層管理を行う場合は、必ずしもデータコピーが発生しない。ただし、セルモード変更により利用可能な容量及びセル書き換え回数が増減するため、従来のティアレンジ(性能情報)だけではなく、容量やセル書き換え回数を意識して階層管理を行う。
図37は、第1実施例に係るセルモード変更量判断処理の一例のフローチャートである。図38と図39は、第1実施例に係るセルモードをLSB/MSBモードからLSB Onlyモードに変更する処理の一例のフローチャートである。図40は、第1実施例に係るセルモードをLSB OnlyモードからLSB/MSBモードに変更する処理の一例のフローチャートである。概要を説明すると、図37の処理にて、どのぐらいの量のセグメントについて、対応するFMD1030のセルモードを変更すべきかが判断される。その判断の結果、LSB Onlyモードのセグメントを増やすべきと判断された場合は、図38及び39で具体的にLSB Onlyモードに変更するセグメントと、それに伴って行うべきデータ移動が判断される。また、LSB/MSBモードのセグメントを増やすべきと判断した場合は、図40で具体的にLSB/MSBモードに変更するセグメントと、それに伴って行うべきデータ移動が判断される。
これらのフローチャートでは、性能要件はティアレンジの情報を利用せず、アプリケーションで要求される性能要件を利用するが、特にこれに限定されず、ティアレンジの情報を利用してもよいし、別の要件を利用してもよい。
これら図37乃至図40が示す各処理は、定期的に(又はくり返し)、システム管理プログラム12010によって実行される。実行される期間は、ユーザが設定しても、システム管理プログラム12010が自動で決定してもよい。
<5.6.1 セルモード変更判断>。
以下に、図37を説明する。なお、以下のフローでは、仮想内部LU単位で適切なセルモードが判断され、その結果を集約することでストレージプールとしてどのぐらいの量のセグメントについて、対応するFMD1030のセルモードを変更すべきかについて判断される。しかし、仮想内部LUより細かい単位でこうした判断が行われても、また、仮想内部LUより大きい単位でこうした判断が行われてもよい。
システム管理プログラム12010は、管理対象ストレージシステム1000におけるあるストレージプールに対して、LU識別子が最も若い仮想内部LUを選択する(Step37001)。
次いで、システム管理プログラム12010は、セグメント容量使用傾向情報12110を調べ、仮想内部LUに対するセグメント割り当ての増加率を調べ、いずれかのティアが一定時間後にこの仮想内部LUのセグメントの割り当てにより枯渇しないかどうかを確認することで、セグメント使用量増加率の高低を判断する(Step37002)。この一定時間は当該処理が行われる期間でもよいし、別の基準でもよい。また枯渇するかどうかではなく、ある一定の増加率を超えた場合に、セグメント使用量増加率が高いと判断してもよい。
セグメント使用量増加率が高いと判断した場合(Step37002でYES)には、システム管理プログラム12010は、処理をStep37003へ進める一方、セグメント使用量増加率が高くないと判断した場合(Step37002でNO)には、処理をStep37004へ進める。
Step37003では、システム管理プログラム12010は、セグメント容量使用傾向情報12110を利用し、仮想内部LUの平均IOPSを調べ、このIOPSがAP性能要件情報12100の性能要件を満足しているかどうかを調べる。
この結果、IOPSが性能要件を満足している場合(Step37003でYES)には、システム管理プログラム12010は、当該仮想内部LUについて、平均IOPSが要求値よりも大きく、容量増加率が高く今後ティアの枯渇の恐れがあるため、過剰性能かつ容量不足と判断し(Step37005)、処理をStep37009へ進める。
一方、IOPSが性能要件を満足していない場合(Step37003でNO)には、システム管理プログラム12010は、当該仮想内部LUについて、平均IOPSが要求値よりも小さく、容量増加率が高く今後ティアの枯渇の恐れがあるため、性能不足かつ容量不足と判断し(Step37006)、処理をStep37011に進める。
Step37009では、システム管理プログラム12010は、当該仮想内部LUについて、セルモード変更可能かどうかを判断するために、管理側セルモード情報12090と管理側VL変換情報12040Bとを利用し、仮想内部LUに割り当てられているセグメントに対応するセルのセル書き換え回数と所定の閾値と比較する(Step37009)。なお、所定の閾値とは、MSB書き換え時のカタログスペックにおける上限であることが考えられるが、他の値でもよい。なお、この時のカタログスペックとしては、MLCとして用いた場合の値であることが考えられる。しかし、所定の閾値は、他(例えばSLC)のカタログスペック値であってもよい。また、所定の閾値は、ユーザによって設定された上限値であってもよい。
セル書き換え回数が上限に達しているものがない場合(Step37009でYES)には、システム管理プログラム12010は、当該仮想内部LUについて、LSB/MSBモードのセルを増やすべきと判断する(Step37010)。そして当該プログラムは、当該仮想内部LUへの割り当て済みセグメントのうち、LSB
Onlyのセルモードのセグメントの全容量を取得し、変更すべきLSB Only容量(Cap_LSBOnlyと命名)から減算し(Step37014)、処理をStep37016に進める。
一方、セル書き換え回数が上限に達しているものがある場合(Step37009でNO)には、システム管理プログラム12010は、処理をStep37011へ進める。
Step37011では、システム管理プログラム12010は、当該仮想内部LUについて、セルモード変更のみでは当該ボリュームの問題(性能不足、容量不足)は解決できないと判断しユーザへ警告を出す。また、ユーザに対して警告だけではなく、セルモード変更ではなくHDDへの暫定ページの移動による容量不足解決や、FMD追加による性能不足、容量不足問題を解決することなど別途解決案を表示してもよい。その後、システム管理プログラム12010は、処理をStep37016に進める。
一方、Step37004では、システム管理プログラム12010は、セグメント容量使用傾向情報12110を利用し、仮想内部LUの平均IOPSを調べ、このIOPSがAP性能要件情報12100の性能要件を満足しているかどうかを調べる。
この結果、IOPSが性能要件を満足している場合(Step37004でYES)には、システム管理プログラム12010は、当該仮想内部LUについて、平均IOPSが要求値よりも大きく、容量増加率が低く今後ティアの枯渇の恐れが無いため、過剰性能かつ過剰容量と判断し(Step37007)、当該仮想内部LUについて、特にセルモードの変更は不要と判断し(Step37012)、処理をStep37016へ進める。
一方、IOPSが性能要件を満足していない場合(Step37004でNO)には、システム管理プログラム12010は、当該仮想内部LUについて、平均IOPSが要求値よりも小さく、容量増加率が低く今後ティアの枯渇の恐れが無いため、性能不足かつ過剰容量と判断し(Step37008)、当該仮想内部LUについて、LSB Only領域を増やすべきと判断する(Step37013)。
次いで、システム管理プログラム12010は、当該仮想内部LUへの割り当て済みセグメントのうち、LSB
Onlyのセルモードのセグメントの全容量を取得し、変更すべきLSB Only容量(Cap_LSBOnly)へ加算し(Step37015)、処理Step37016に進める。
Step37016では、システム管理プログラム12010は、ストレージプールに属する全ての仮想内部LUに対してチェックしたかどうかを確認する。この結果、全てチェックしていなければ(Step37016でNO)、システム管理プログラム12010は、次の番号の仮想内部LUに対して、Step37002からの処理を実行する。一方、全てチェックしていれば(Step37016でYES)、システム管理プログラム12010は、変更すべきLSB
Only容量(Cap_LSBOnly)の値だけLSB Onlyモードのセルを増加させると判断し(Step37017)、処理を終了する。なお、Cap_LSBOnlyが負の値の場合は、その容量だけLSB/MSBモードセルを増加させると判断する。
以上がセルモード変更量判断処理の説明である。なお、アプリケーションが低負荷で要求性能以上のリード又はライトリクエストを送信しない場合は、仮想内部LUについて性能が不足と判断されてしまう。その対策として、アプリケーションの負荷や処理待ち状況や当該リクエストの送信待ち状況等の負荷状況が測定され、上記低負荷と判断された場合は、低負荷と判断された対象が、本処理の対象から外されても良い。また、IOPSの代わりに、平均レスポンスタイム又は最大レスポンスタイムが用いられても良い。また、その他の方法でこのようなアプリケーション自体が低負荷だが性能不足と判断しないようにされてもよい。
<5.6.2. 変更対象セル探索、変換処理>。
図38、図39、及び図40にセルモード変更量の判断が決まった場合に実行する変更対象セル探索及び変換処理の一例のフローチャートを示す。図38と図39は、図37の処理においてLSB Onlyモードのセルを増やすべきと判断した後の処理の一例のフローチャートである。LSB/MSBモードからLSB Onlyモードへ変更する場合は、MSBに記憶しているデータが無くなるため、MSBにデータが記憶されている場合はデータを移動する必要がある。そこで、図38と図39に示す処理では、セルモード変更時に移動せず変更してよいか、移動するか、移動する場合はどこからどこへ移動するかを判断してセルモードをLSB/MSBモードからLSB Onlyモードへ変更する。以下、詳細に説明する。
図38に示すように、システム管理プログラム12010は、管理側プール情報12040Aを利用し、該当するストレージプールからセグメント番号が最も若いものを選択する(Step38001)。
次いで、システム管理プログラム12010は、管理側セルモード情報12090を利用し、該当するセグメントのセルモードを調べ(Step38002)、セルモードがLSB/MSBである場合(Step38002でYES)には、処理をStep38003に進める一方、セルモードがLSB/MSB以外である場合(Step38002でNO)には、処理をStep38004へ進める。
Step38003では、システム管理プログラム12010は、管理側プール情報12040Aを利用し、該当するセグメントがFMD1030のMSBから構成されているか判断する。MSBから構成されている(つまりMSBセグメントである)場合(YES)はStep38007へ進む一方、LSBから構成されている(つまりLSBセグメントである)場合(NO)はStep38006へ進む。
Step38006では、システム管理プログラム12010は、管理側プール情報12040Aを利用し、該当するセグメントの割り当て状態を調べる。割り当て済みの場合(Step38006でYES)には、システム管理プログラム12010は、管理側プール情報12040Aを利用し、該当するLSBセグメントに対応するMSBセグメントの割り当て状態を調べる(Step38008)。
この結果、割り当て済みではない場合(Step38008でNO)には、システム管理プログラム12010は、管理側セルモード情報12090を利用し、該当するセグメントのセル書き換え回数を保持し、当該セグメントをLSB Only変換候補とし(Step38011)、処理をStep38016に進める。一方、割り当て済みの場合(Step38008でYES)には、システム管理プログラム12010は、管理側セルモード情報12090を利用し、該当するセグメントのセル書き換え回数を保持し、当該セグメントをLSB Only変換候補が少ない場合の移動元候補とし(Step38012)、処理をStep38016に進める。
一方、該当LSBセグメントが割り当て済みではない場合(Step38006でNO)には、システム管理プログラム12010は、管理側プール情報12040Aを利用し、該当するLSBセグメントに対応するMSBセグメントの割り当て状態を調べる(Step38009)。
この結果、調べたMSBセグメントが割り当て済みではない場合(Step38009でNO)には、システム管理プログラム12010は、管理側セルモード情報12090を利用し、該当するセグメントのセル書き換え回数を保持し、当該セグメントをLSB Only変換候補とし(Step38011)、処理をStep38016に進める。一方、調べたMSBセグメントが割り当て済みの場合(Step38009でYES)には、システム管理プログラム12010は、管理側セルモード情報12090を利用し、該当するセグメントのセル書き換え回数を保持し、自分自身がLSBの場合はMSBの内容をデータ移動するよう、データ移動リクエストをストレージシステム1000に送信し、構成制御プログラム4030によるデータ移動処理(図19)の完了後に、LSBの方のページをLSB Only候補とし(Step38013)、処理をStep38016に進める。なお、この時のデータ移動リクエストは、Step38001又はStep38016で選択したセグメントを移動元として指定する。しかし、移動元セグメントが割り当てられたチャンクのIDが調べられ、当該チャンクIDがデータ移動リクエストで指定されてもよい。なお、例えば、この時の移動先セグメントは、未割当のLSBセグメントであることが考えられる。
一方、Step38001又はStep38016で選択したセグメントがMSBセグメントの場合(Step38003)には、システム管理プログラム12010は、管理側プール情報12040Aを利用し、該当するセグメントの割り当て状態を調べる(Step38007)。この結果、割り当て済みの場合(Step38007でYES)には、システム管理プログラム12010は、管理側プール情報12040Aを利用し、該当するMSBセグメントに対応するLSBセグメントの割り当て状態を調べる(Step38010)。
この結果、割り当て済みの場合(Step38010でYES)には、ステム管理プログラム12010は、管理側セルモード情報12090を利用し、該当するセグメントのセル書き換え回数を保持し、当該セグメントをLSB Only変換候補が少ない場合の移動元候補とし(Step38012)、処理をStep38016に進める。一方、割り当て済みでない場合(Step38010でNO)には、既に説明したStep30813を処理し、処理をStep38016に進める。
一方、Step38001又はStep38016で選択したセグメントがMSBセグメントであるが割り当て済みではない場合(Step38007でNO)には、システム管理プログラム12010は、該当するMSBセグメントに対応するLSBセグメントのセル書き換え回数を保持し、そのセグメントをLSB Only候補とし(Step38014)、処理をStep38016に進める。
一方、Step38004では、システム管理プログラム12010は、管理側セルモード情報12090を利用し、該当するセグメントのセルモードを調べ、セルモードがLSB OnlyでなくHDDである場合(Step38004でNO)には、処理を終了する一方、セルモードがLSB Onlyモードである場合(Step38004でYES)には、処理をStep38005へ進める。
Step38005では、システム管理プログラム12010は、管理側プール情報12040Aを利用し、該当するセグメントの割り当て状態を調べる。この結果、割り当て済みの場合(Step38005でYES)には、処理をStep38016に進める。
一方、未割当の場合(Step38005でNO)には、システム管理プログラム12010は、管理側セルモード情報12090を利用し、該当するセグメントのセル書き換え回数を保持し、当該セグメントをLSB Only変換候補が少ない場合の移動先候補とし(Step38015)、処理をStep38016に進める。
Step38016では、システム管理プログラム12010は、1つのストレージプールに属する全てのセグメントのチェックが終わったかどうかを確認する。終わっていれば、システム管理プログラム12010は、処理を図39に示すStep38017へ進める一方、終わっていなければ、次のセグメントIDのセグメントを選択して、処理をStep38002へ進める。
Step38017では、システム管理プログラム12010は、Step38016までの処理で調べたLSB Only変換候補の全容量が、セル増加判断処理(図37)で調べた変更すべきLSB Only容量を満足するか調べる(Step38017)。
この結果、容量を満足していれば(Step38017でYES)、システム管理プログラム12010は、LSB Only変換候補のうち、セル書き換え回数の多いセグメントから必要な容量だけ選択し、LSB Onlyモードへセルモード変更するよう、構成制御プログラム4030へ指示を出し、管理側プール情報12040Aと管理側VL変換情報12040Bと管理側セルモード情報12090を更新し(Step38018)、処理を終了する。なお、書き換え回数の多いセグメントを優先してLSB Onlyモードに変更するのは、LSB Onlyモードのほうが閾値電圧の低下度合いが小さく、データ読み込みエラーが発生しにくいからである。しかし、他のセグメントが優先されてもよい。
一方、容量を満足していなければ(Step38017でNO)、システム管理プログラム12010は、全ての変換候補に対して、LSB Onlyモードへセルモード変更するよう、構成制御プログラム4030へ指示を出し、管理側プール情報12040Aと管理側VL変換情報12040Bと管理側セルモード情報12090を更新する(Step38019)。
次いで、システム管理プログラム12010は、Step38019で不足していた容量分だけ、書き換え回数の多い移動元候補(Step38012で選択)のMSBセグメントから移動先候補(Step38015で選択)のLSBセグメントへデータ移動するよう、データ移動リクエストをストレージシステム1000に送信し、管理側プール情報12040A、管理側VL変換情報12040B、及び管理側セルモード情報12090を更新し(Step38020)、処理を終了する。なお、この時のデータ移動リクエストは、移動元候補セグメントと移動先候補セグメントを指定する。しかし、移動元セグメントが割り当てられたチャンクのIDが調べられ、当該チャンクIDがデータ移動リクエストで指定されてもよい。
なお、セルモードを考慮した階層管理における処理として、仮想内部LUのセグメント単位でのセルモード変更を実行しているが、これに制限されない。階層管理ではない記憶領域の管理として、内部LU単位、パリティグループ単位、FMD単位、FMセル単位でLSB/MSBモードからLSB Onlyモードへ変更する場合にも、入力の単位をそれぞれ、開始―終了アドレス[I]、開始―終了アドレス[G]、開始―終了アドレス[D]または内部LU識別子、パリティグループ識別子、FMD識別子、FMセル識別子を設定してもよい。
図40は、図37の処理においてLSB/MSBモードのセルを増やすべきと判断した後の処理の一例のフローチャートである。なお、LSB OnlyモードからLSB/MSBモードへ変換する場合は、データが減らないためデータの移動は不要である。
システム管理プログラム12010は、管理側プール情報12040Aを利用し、該当するストレージプールからセグメント番号が最も若いものを選択する(Step40001)。次いで、システム管理プログラム12010は、管理側セルモード情報12090を利用し、該当するセグメントのセルモードを調べる(Step40002)。
この結果、セルモードがLSB Only以外だった場合(Step40002でNO)には、システム管理プログラム12010は、処理をStep40006へ進める。一方、セルモードがLSB Onlyモードだった場合(Step40002でYES)には、システム管理プログラム12010は、管理側プール情報12040Aを利用し、該当するセグメントの割り当て状態を調べる(Step40003)。
この結果、未割当の場合(Step40003でYES)には、システム管理プログラム12010は、管理側セルモード情報12090を利用し、該当するセグメントのセル書き換え回数を保持し、当該セグメントをLSB/MSB第一変換候補とし(Step40004)、処理をStep40006に進める。
一方、割り当て済みの場合(Step40003でNO)には、システム管理プログラム12010は、管理側セルモード情報12090を利用し、該当するセグメントのセル書き換え回数を保持し、当該セグメントをLSB/MSB第二変換候補とし(Step40005)、処理をStep40006に進める。
Step40006では、システム管理プログラム12010は、1つのストレージプールに属する全てのセグメントのチェックが終わったかどうかを確認する。終わっていなければ(Step40006でNO)、システム管理プログラム12010は、次のセグメントIDのセグメントを選択し、処理をStep40002へ進める。
一方、終わっていれば(Step40006でYES)、システム管理プログラム12010は、Step40006までで調べたLSB/MSB変換候補の全容量が、セル増加判断処理(図37)で調べた変更すべきLSB/MSB容量を満足するか調べる(Step40007)。
この結果、容量を満足していれば(Step40007でYES)、システム管理プログラム12010は、LSB/MSB第一変換候補のうち、セル書き換え回数の少ないセルから必要な容量だけ選択し、LSB/MSBモードへセルモード変更するよう、構成制御プログラム4030へ指示を出し、管理側プール情報12040Aと管理側VL変換情報12040Bと管理側セルモード情報12090を更新し(Step40008)、処理を終了する。
一方、容量を満足していなければ(Step40007でNO)、システム管理プログラム12010は、全ての第一変換候補に対して、LSB/MSBモードへセルモード変更するよう、構成制御プログラム4030へ指示を出し、管理側プール情報12040Aと管理側VL変換情報12040Bと管理側セルモード情報12090を更新する(Step40009)。
次いで、システム管理プログラム12010は、Step40009で不足していた容量分だけ、書き換え回数の少ないLSB/MSB第二変換候補をLSB/MSBモードへセルモード変更するよう、構成制御プログラム4030へ指示を出し、管理側プール情報12040A、管理側VL変換情報、及び管理側セルモード情報12090を更新し(Step40010)、処理を終了する。
なお、セルモードを考慮した階層管理における処理として、仮想内部LUのセグメント単位でのセルモード変更を実行しているが、これに制限されない。階層管理ではない記憶領域の管理として、内部LU単位、パリティグループ単位、FMD単位、FMセル単位でLSB/MSBモードからLSB Onlyモードへ変更する場合にも入力の単位をそれぞれ、開始―終了アドレス[I]、開始―終了アドレス[G]、開始―終了アドレス[D]または内部LU識別子、パリティグループ識別子、FMD識別子、FMセル識別子を設定してもよい。
第1実施例によると、ストレージシステム導入後にメモリセルに記憶するビット数を柔軟に変化することのできるストレージシステムを提供することができる。また、このストレージシステムを柔軟に管理することができる。
以上、第1実施例を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、ストレージコントローラ1010は、他の構成を採用することもできる。例えば、上記の構成に代えて、上位装置との通信を制御する複数の第一の制御部(例えば制御回路基板)と、FMD1030との通信を制御する複数の第二の制御部(例えば制御回路基板)と、上位装置とFMD1030との間で授受されるデータを記憶することができるキャッシュメモリと、ストレージシステム1000を制御するためのデータを記憶することができる制御メモリと、各第一の制御部、各第二の制御部、キャッシュメモリ及び制御メモリを接続する接続部(例えば、クロスバスイッチなどのスイッチ)とを含むことができる。この場合、第一の制御部と第二の制御部の一方が、又は双方が協働して、前述したストレージコントローラ1010としての処理を行うことができる。制御メモリは無くても良く、その場合、キャッシュメモリに、制御メモリが記憶する情報を記憶する領域が設けられても良い。
また、FMDのセルモードを管理するのはストレージコントローラ1010ではなくFMDコントローラ2010でもよい。
また、メモリセルの値は、LSBとMSBの2ビットだけではなく、1つのメモリセルに3ビット以上の値をセルプログラミング、セルイレースすることにより、FMDに対応するセルモードを3ビット以上に対応させてもよい。例えば、3ビットの場合は1ビットOnly、2ビット変更可、3ビット変更可の3つのセルモードを指定可能となる。