以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
〔1〕一実施形態
〔1−1〕階層ストレージシステムの構成例
図1は一実施形態の一例としての階層ストレージシステム1の構成例を示す図である。図1に示すように、階層ストレージシステム1は、例示的に、階層ストレージ制御装置10、1以上(図1では1つ)のSSD20、及び1以上(図1では1つ)のHDD30をそなえることができる。
階層ストレージシステム1は、複数の記憶装置をそなえるストレージ装置の一例である。階層ストレージシステム1は、SSD20及びHDD30等の互いに性能の異なる複数の記憶装置を搭載し、図示しないホスト装置に対して階層化された記憶装置の記憶領域を提供することができる。一例として、階層ストレージシステム1は、RAID(Redundant Arrays of Inexpensive Disks)を用いて複数の記憶装置にデータを分散又は冗長化した状態で保存し、ホスト装置に対してRAIDグループに基づく1以上のストレージボリューム(LUN;Logical Unit Number)を提供することができる。
階層ストレージ制御装置10は、ネットワークを介したホスト装置等からのユーザIOに応じて、SSD20及びHDD30へのリード又はライト等の種々のアクセスを行なうことができる。階層ストレージ制御装置10としては、PC(Personal Computer)やサーバ、又はコントローラモジュール(CM;Controller Module)等の情報処理装置(コンピュータ)が挙げられる。
また、一実施形態に係る階層ストレージ制御装置10は、ユーザIOのアクセス頻度に応じて、アクセス頻度が低い領域をHDD30に配置する一方、アクセス頻度が高い領域をSSD20に配置する、動的階層制御を行なうことができる。このように、階層ストレージ制御装置10は、SSD20とHDD30との間で、複数のセグメント(単位領域)におけるデータを移動させる情報処理装置の一例である。
なお、階層ストレージ制御装置10はLinux(登録商標)に実装されているモジュール(プログラム)であるdevice−mapperの機能を用いることができる。例えば階層ストレージ制御装置10は、動的階層制御において、device−mapperによりストレージボリュームをセグメント(サブLUN;sub_LUN)単位で監視し、高負荷となったセグメントのデータをHDD30からSSD20へ移動することで高負荷セグメントへのIOを処理することができる。
ここで、セグメントは、ストレージボリュームを所定のサイズで分割した領域であり、動的階層制御における階層移動の最小単位の領域(単位領域)である。例えばセグメントは1GB(Byte)程度のサイズとすることができる。
SSD20は、種々のデータやプログラム等を格納する記憶装置の一例であり、HDD30は、SSD20とは異なる性能の(例えばより低速な)記憶装置の一例である。一実施形態において、互いに異なる記憶装置(以下、便宜上、第1及び第2の記憶装置と表記する場合がある)として、SSD20等の半導体ドライブ装置及びHDD30等の磁気ディスク装置をそれぞれ例に挙げているが、これらに限定されるものではない。第1及び第2の記憶装置として、例えばリード/ライトの速度差等の互いに性能差のある種々の記憶装置が用いられてもよい。
SSD20及びHDD30は、ストレージボリューム上のセグメントのデータを格納可能な記憶領域を含み、階層ストレージ制御装置10は、セグメント単位でSSD20−HDD30間の領域移動を制御することができる。
なお、図1の例では、階層ストレージシステム1がそれぞれ1つのSSD20及びHDD30をそなえるものとしているが、これに限定されるものではなく、複数のSSD20及び複数のHDD30をそなえてもよい。
〔1−2〕階層ストレージ制御装置の機能構成例
次に、階層ストレージ制御装置10の機能構成例について説明する。
図1に示すように、階層ストレージ制御装置10は、例示的に、階層管理部11、階層ドライバ12、SSDドライバ13、及びHDDドライバ14をそなえることができる。なお、階層管理部11はユーザ空間で実行されるプログラムとして実現され、階層ドライバ12、SSDドライバ13、及びHDDドライバ14はOS(Operating System)空間で実行されるプログラムとして実現されてよい。
階層管理部11は、ストレージボリュームについてトレースされたIOの情報に基づいて、領域移動を行なうセグメントを判定し、判定したセグメントのデータの移動を階層ドライバ12に指示することができる。IOのトレースでは、ブロックIOレベルでのIOをトレースするコマンドであるblktraceが用いられてよい。なお、blktraceに代えて、ディスクIOの利用状況を確認するコマンドであるiostatが用いられてもよい。blktrace及びiostatはOS空間で実行される。
階層管理部11は、例示的に、データ収集部11a、IODB(Database)11b、ワークロード分析部11c(遷移速度算出部11hおよび成長時間算出部11i)、移動指示部11d、及び移動制御部11eとしての機能をそなえることができる。これらの機能は、階層ストレージ制御装置10におけるCPU10a(図30参照)がストレージ制御プログラム100(図30参照)を実行することで実現可能になっている。
データ収集部11aは、blktraceを用いてトレースされたIOの情報を所定間隔(例えば1分間隔)で収集及び集計して、集計結果をタイムスタンプとともにIODB11bへ、アクセスログとして格納することができる。
データ収集部11aによるIOの情報の集計は、収集したIOの情報に基づいて、セグメントごとに、例えばセグメントを特定する情報及びIO数の集計を含んでよい。
IODB11bは、データ収集部11aにより集計されたセグメントごとのIO数に関する情報を記憶するものであり、例えば図示しないメモリ等により実現される。
図2は、図1に示すIODB11bの一例を示す図である。図2に示すように、IODB11bは、セグメントごとに、セグメントを特定する情報、IO数、及びタイムスタンプ(timestamp)を対応させて記憶してよい。一例として、IODB11bには、セグメント“0”について、合計IO数“1000、タイムスタンプ“1”が設定されている。
このように、データ収集部11aは、複数のセグメントのそれぞれについてのアクセスログ(IO数)を、一定時間間隔(例えば1分間隔)の所定タイミング毎に収集する収集部の一例である。
なお、セグメントを特定する情報として、セグメントの番号(ID;Identifier)を用いているが、これに代えてストレージボリュームの先頭オフセットが用いられてもよい。IO数は、セグメントに対して1分間に行なわれたIOの合計数(iopm;IO per minute)である。タイムスタンプは、時刻を識別する識別子であり、例えば時刻そのものが設定されてもよい。以下では、セグメントを特定するセグメントの番号を、セグメントID、sub_LUN_IDもしくはseg_idと表記する場合がある。
ワークロード分析部11cは、IODB11bが記憶するセグメントから、SSD20又はHDD30にデータを移動するセグメントを選択し、選択したセグメントに関する情報を移動指示部11d又は移動制御部11eへ通知することができる。
一例として、ワークロード分析部11cは、SSD20にデータを移動するセグメントとして、セグメント数が同時に階層移動を行なう最大のセグメント数(所定数)に達するまで、IO数が多い順にセグメントを抽出することができる。
ワークロード分析部11cによるセグメントの抽出は、IO数又はアクセスの集中率(全体に対するIO数の割合)が所定の閾値よりも高いセグメントを抽出することを含んでもよい。また、セグメントの抽出は、HDD30にデータを移動するセグメントとして、例えばIO数が上記所定数に入らなかった、又はIO数若しくはアクセスの集中率が所定の閾値以下となった、SSD20上のセグメントを抽出することを含んでもよい。
さらに、セグメントの抽出は、上記のSSD20又はHDD30にデータを移動するセグメントの抽出条件に所定回数以上連続して該当したときに、当該セグメントを、SSD20又はHDD30にデータを移動するセグメントとして抽出することを含んでもよい。なお、上記IO数等の他に、リードライト比(rw比)に基づいてセグメントが選択されてもよい。
ここで、ワークロード分析部11cは、移動指示部11dに対して、HDD30内のセグメントについてSSD20への階層移動を指示した後、移動制御部11eに対して、SSD20内の他のセグメントについてHDD30への階層移動を指示することができる。一方、ワークロード分析部11cは、或るセグメントについてSSD20への階層移動を行なっている間に当該セグメントへの負荷が下がると予測される場合には、当該セグメントについてはHDD30への階層移動を抑制し、他のセグメントについてHDD30への階層移動を指示してもよい。
例えば、ワークロード分析部11cは、スパイクの平均余命時間と階層移動にかかる時間とに基づいて、階層移動中のセグメントへの負荷が下がるか否かを判断できる。なお、スパイクとは、一部のセグメントに負荷が集中することであり、平均余命時間は、負荷が継続する継続時間から既に実行済みの実行時間を減じた時間であり、ワークロードに応じて定まる値である。管理者等は予め平均余命時間を求め、階層ストレージ制御装置10に設定しておくことができる。
具体的には、ワークロード分析部11cは、SSD20にデータを移動するセグメントを抽出し、抽出したセグメントについてSSD20にデータを移動するコスト(時間)を計算する。そして、ワークロード分析部11cは、平均余命時間が移動時間以下になる場合には、HDD30からSSD20への階層移動を行なわずに、SSD20からHDD30への階層移動を行なうと判断することができる。
このようなワークロード分析部11cの処理は、所定のタイミングで行なわれてよいが、期間によってはHDD30からSSD20へ移動するセグメント又はSSD20からHDD30へ移動するセグメントが抽出及び通知されない場合もある。この場合、ワークロード分析部11cは、移動制御部11eに対して通知を行なわなくてもよいし、セグメントを選択しなかった旨を通知してもよい。なお、所定のタイミングには、例えば1分ごと等の所定の周期で到来するタイミングが含まれてよい。
このように、ワークロード分析部11cは、所定のタイミングで、HDD30におけるセグメントごとのIO数(アクセスログ)に基づき、複数のセグメントの中から、アクセスが集中する集中状態の単位領域を、HDD30からSSD20への移動対象の単位領域として決定する決定部の一例である。また、この決定部としてのワークロード分析部11cは、SSD20の記憶領域を第1のサイズで分割した複数のセグメントの中から、HDD30へデータを移動させる移動対象の単位領域を決定することができる。ワークロード分析部11cは、決定した単位領域の移動を移動指示部11dへ指示することができる。
さらに、ワークロード分析部11cは、例示的に、遷移速度算出部11h及び成長時間算出部11iをそなえることができる。
遷移速度算出部11hは、一定時間間隔の所定タイミング毎に、IODB11bに保存されるアクセスログに基づき、複数のセグメントにおける、アクセス集中状態のセグメントの遷移速度を算出する。算出された遷移速度は、例えば図示しないメモリ等に設定登録され保存される。遷移速度や、その算出手法/算出手順については、図8、図16〜図18及び図20を参照しながら後述する。なお、以下では、遷移速度を“pm (proactive migration)_speed”と表記する場合がある。
成長時間算出部11iは、一定時間間隔の所定タイミング毎に、IODB11bに保存されるアクセスログに基づき、所定タイミングでアクセス集中状態にあるセグメントが、アクセスのほぼ無い状態からアクセス集中状態になるまでに要する成長時間を算出する。アクセスのほぼ無い状態とは、例えば、当該セグメントに対する単位時間あたりのアクセス数(IO数)が所定値以下の状態と定義される。ここで、例えば、単位時間は60秒、所定値は20とすることが考えられるが、これらの値に限定されるものではない。算出された成長時間は、例えば図示しないメモリ等に設定登録され保存される。成長時間や、その算出手法/算出手順については、図8、図19及び図21を参照しながら後述する。なお、以下では、成長時間を“pm_growth”と表記する場合がある。なお、アクセス集中状態とは、例えば、当該セグメントに対する単位時間あたりのアクセス数(IO数)が、上記所定値よりも大きい異なる所定値以上の状態と定義してもよい。
移動指示部11dは、ワークロード分析部11c又は移動制御部11eからの指示に基づいて、階層ドライバ12に、選択されたセグメントのデータの、HDD30からSSD20への移動、又は、SSD20からHDD30への移動を指示することができる。
移動指示部11dによる移動の指示は、選択されたセグメントのストレージボリューム上のオフセットをHDD30上のオフセットに変換して、セグメントごとにデータの移動を指示することを含んでよい。例えば、HDD30のセクタサイズが512Bである場合に、ボリューム上のオフセットが1GBであれば、HDD30上でのオフセットは1×1024×1024×1024/512=2097152となる。
移動制御部11eは、上述したIO数に基づくセグメントごとの階層移動時にユーザIOが発生した場合のIOレスポンスの劣化を防ぐために、図9を参照しながら後述する制御を行なうものである。移動制御部11eは、例示的に、予測セグメントDB11f及び移動キュー11gをそなえることができる。
図3は移動制御部11eによる制御の一例を説明する図である。図3において「IO分析による移動」の矢印で示すように、SSD20−HDD30間の階層移動は、ワークロード分析部11cによるIO数(アクセスログ)の分析によって行なわれる。移動制御部11eは、IO分析による移動に加えて、予測移動(Proactive Migration)制御処理及び観測移動(Observational Migration)制御処理を行なうことができる。
予測移動制御では、IO分析によるHDD30からSSD20への移動に加えて、近い将来IOが集中する(IO数が増加する)セグメントを予測し、IOが集中する前に当該セグメントをSSD20へ移動することができる。予測移動制御により、IOが集中する前に当該セグメントのデータをSSD20に移行できるため、IO数の分析によりIOが集中しているセグメントのデータを移行するよりもユーザIOへの影響を低減させることができる。このとき、本実施形態の予測移動制御では、図示しないメモリ等に登録保存された遷移速度および成長時間に基づき、アクセス集中状態のセグメントが、ワークロード11cによって決定された移動対象のセグメントから遷移する遷移先セグメントが予測される。そして、予測された遷移先セグメントのデータが、SSD20に移動される。
観測移動制御では、IO分析によるSSD20からHDD30への移動の実行に先立って、セグメントサイズよりも十分小さなサイズでの階層移動を実行してHDD30の負荷が低いタイミングを検出し、検出したタイミングでIO分析による移動を行なうことができる。観測移動制御により、IO分析による移動対象のセグメントの決定直後に移動を実行するよりもユーザIOへの影響を低減させることができる。
予測移動制御及び観測移動制御の詳細については後述する。
階層ドライバ12は、例示的に、IOマップ部12a、IOキュー12b、階層テーブル12c、移動処理部12d、及び観測処理部12eをそなえることができる。
IOマップ部12aは、ホスト装置からのストレージボリュームに対するIO要求を処理することができる。例えば、IOマップ部12aは、階層テーブル12cを用いてIO要求をSSDドライバ13又はHDDドライバ14に振り分け、SSDドライバ13又はHDDドライバ14からのIOレスポンスをホスト装置に返す処理を行なう。
IOキュー12bは、IO要求を一時的に格納するFIFO(First-In First Out)構造の記憶領域であり、図示しないメモリ等により実現される。
一例として、階層移動中のセグメントに対してIO要求が発行されると、IOマップ部12aは、当該セグメントのデータの移動が完了するまで、当該IO要求をIOキュー12bに格納し、IO要求を保留する。データの移動が完了すると、IOマップ部12aは、IOキュー12bから当該IO要求を読み出して、SSDドライバ13又はHDDドライバ14への振り分けを再開する。
階層テーブル12cは、IOマップ部12aによるIO要求の振り分け及び移動処理部12d等による階層制御に用いられるテーブルであり、例えば図示しないメモリ等により実現される。
階層テーブル12cのデータ構造の一例を図4に示す。図4に示すように、階層テーブル12cは、SSD20にデータが移動されたセグメントごとに、SSDオフセットと、HDDオフセットと、状態とを対応させて記憶することができる。
SSDオフセットは、SSD20にデータが移動されたセグメントのSSD20におけるオフセットを示す。SSDオフセットは、ボリューム上のセグメントサイズ(例えば1GB)に対応するオフセット“2097152”を単位とする固定値であり、例えば、“0”、“2097152”、“4194304”、“6291456”、...となる。
HDDオフセットは、SSD20にデータが移動されたセグメントのHDD30におけるオフセットを示す。HDDオフセットの値“NULL”は、SSDオフセットで指定されるSSD20の領域が未使用であることを示す。
状態は、セグメントの状態を示し、“allocated”、“Moving(HDD→SSD)”、“Moving(SSD→HDD)”、又は“free”を含む。“allocated”はセグメントがSSD20に割り当てられていることを示し、“Moving(HDD→SSD)”はセグメントのデータがHDD30からSSD20に転送中であることを示す。“Moving(SSD→HDD)”はセグメントのデータがSSD20からHDD30に転送中であることを示し、“free”はSSDオフセットで指定されるSSD20の領域が未使用であることを示す。
IOマップ部12aは、上述した階層テーブル12cを参照することで、IO要求をSSDドライバ13又はHDDドライバ14のいずれに振り分けるかを判定することができるとともに、IO要求がセグメント移動中であるか否かを判定することができる。
移動処理部12dは、移動指示部11dからセグメント移動指示を受け取ると、HDD30又はSSD20の移動対象の単位領域に記憶されたデータをSSD20又はHDD30に移動する移動処理を実行することができる。このとき、移動処理部12dは、階層テーブル12cを参照して、セグメントの移動指示で指定されたセグメントのデータをSSD20−HDD30間で移動する。
より具体的に、移動処理部12dは、セグメント移動指示を受け取ると、階層テーブル12c内のHDDオフセットより“NULL”となっているエントリを探し、セグメント移動指示で指定されたHDDオフセット情報と、状態とを登録する。なお、このとき登録される状態は、“Moving(HDD→SSD)”又は“Moving(SSD→HDD)”となる。そして、移動処理部12dは、SSD20−HDD30間のデータの転送指示をkcopydに発行する。
また、移動処理部12dは、kcopydにより全ての領域内のデータの転送が完了すると、階層テーブル12cから転送が完了したエントリを探し、状態が“Moving(HDD→SSD)”の場合、当該状態を“allocated”に変更する。一方、移動処理部12dは、状態が“Moving(SSD→HDD)”である場合、当該状態を“free”に変更するとともに、対応するHDDオフセットを“NULL”に設定する。
なお、kcopydは、device−mapperに実装され、デバイス間のデータコピーを実行するモジュール(プログラム)であり、OS空間で実行される。
このように、移動指示部11d及び移動処理部12dは、ワークロード分析部11c又は移動制御部11eから指示された領域に記憶されたデータを、セグメントごとにSSD20及びHDD30間で移動する。
観測処理部12eは、移動制御部11eからの移動指示(観測移動指示)に応じて、SSD20からHDD30へセグメントサイズよりも十分小さなサイズの階層移動を行ない、そのときのユーザIOレスポンスを観測することができる。
観測処理部12eの詳細については後述する。
SSDドライバ13は、階層ドライバ12からの指示に基づいてSSD20へのアクセスを制御する。HDDドライバ14は、階層ドライバ12からの指示に基づいてHDD30へのアクセスを制御する。
〔1−3〕予測移動制御の説明
次に、図5〜図10を参照して、予測移動制御の詳細について説明する。
Samba等のソフトウェアを実装したファイルシステムにおける一部のストレージワークロードの分析を行なうと、全IOの半数以上が全記憶容量の数%未満の領域に10〜50分程度発生し、その後、別の領域に移動することが分かる。
図5は全容量が4.4TBのシステムにおけるストレージワークロードの分析例を示す図である。図5に示すように、数GBの範囲に全IOの半数以上が10〜50分程度集中し、別の領域(ボリュームオフセット、LBA;Logical Block Address)にそのIO集中が移動することが分かる。
上述したワークロード分析部11cを含むIO分析では、図5に示すようなIO集中をその都度抽出し、SSD20等の高速ストレージに移動することで性能向上を図ることができる。
図6は図5とは異なるストレージワークロードの分析例を示す図である。図6から、IO集中の発生するLBAが時間経過とともに移動することが容易に読み取れる。また、このLBAの移動速度は略等速度であることが分かる。
そこで、予測移動制御では、IO数の増加する(IOの集中する)領域が時間とともに移動(遷移)することに着目し、当該領域の遷移速度及び成長時間に基づき近い将来IO集中が移動する領域を求め、IO集中が発生する前にSSD20へ移動を行なうことができる。なお、以下では、IO集中をアクセス集中という場合がある。
このとき、IO分析による移動と予測移動制御による移動とを同時に行なうと、かえってユーザIOのレスポンスが悪化する可能性がある。そこで、IO分析による移動がないタイミングで予測移動制御を行なうことで、IOレスポンスの悪化を回避することができる。
上述したように、予測移動は、現在アクセス集中の発生している領域がごく近い将来どのセグメント(sub_LUN)に遷移するのかを予測し、予測した遷移先セグメントのデータを、当該セグメントがアクセス集中状態になる前にHDD30からSSD20へ移動する機能である。当該機能により、遷移先セグメントでアクセス集中が発生する前に、当該遷移先セグメントのデータのSSD20への移動が完了する。このため、セグメントの移動に伴うIOアクセス性能の低下はほとんど発生せず、遷移先セグメントに対するIOアクセスの発生当初からSSD20でヒットする。したがって、予測移動によれば、大幅な性能向上を期待することができる。
本実施形態において、遷移先となるセグメント(sub_LUN)の予測は、図7に示すように、アクセス集中の発生する領域の遷移速度(pm_speed)と、当該領域に対する単位時間あたりのIO数が所定値以下の状態からアクセス集中状態になるまでに要する成長時間(pm_growth)とを用いて行なわれる。これらの遷移速度pm_speed及び成長時間pm_growthは、IO集中領域(遷移先セグメント)を予測するために用いられるパラメータである。なお、図7は、図6に示すワークロードの分析例の要部を拡大して、遷移速度pm_speed及び成長時間pm_growthを説明する図である。
このとき、データ収集部11aは、アクセス集中領域に対応する各セグメントのアクセス数(IO数)を一定時間間隔(抽出間隔)で算出集計し、集計した各セグメントのIO数をタイムスタンプとともに、IODB11bに格納する。
ワークロード分析部11c(遷移速度算出部11h)は、アクセス集中領域を構成するセグメント群(sub_LUN group)の中で最もIO数の多いセグメントを、抽出間隔毎に抽出する。そして、ワークロード分析部11c(遷移速度算出部11h)は、抽出間隔毎に抽出されたセグメントについての、経過時間の差分とセグメントの遷移距離(移動距離;セグメントIDの差分)とに基づき、遷移速度pm_speedを算出する(図7参照)。
また、ワークロード分析部11c(成長時間算出部11i)は、あるタイミングで抽出された最もIO数の多いセグメントについて、過去のIO数(過去のアクセスログ;アクセスログの履歴)を参照する。これにより、ワークロード分析部11c(成長時間算出部11i)は、当該セグメントが、当該セグメントに対する単位時間あたりのIO数が所定値以下の状態から前記セグメント群の中で最もIO数が多くなるまでに要する時間を、成長時間pm_growthとして算出する(図7参照)。
ワークロード分析部11cは、上述のごとく図示しないメモリ等に登録設定される遷移速度pm_speed及び成長時間pm_growthを、それぞれ、アクセス集中領域の検出に伴って算出された遷移速度pm_speed及び成長時間pm_growthに更新する。
次に、図8および図9を参照して、移動制御部11eによる予測移動制御の処理手順の一例について説明する。図8は、図7に示すワークロードの分析例に対する予測移動制御の処理手順の一例を説明する図である。図9は、移動制御部による予測移動制御の処理手順の一例を説明する図である。
ワークロード分析部11cは、IOアクセス集中を検出すると(図8の(i)参照)、当該IOアクセス集中の発生したセグメントを抽出し、移動指示部11dに対し、抽出したセグメントのSSD20への移動を依頼する。これに伴い、第1タイミングで、IOアクセス集中に対応するセグメントのデータは、SSD20へ移動される(図8の(ii)及び図9の上段参照)。このとき、図9の(i)に示すように、移動制御部11eは、ワークロード分析部11cから、抽出したセグメントのセグメントIDを受け取る。そして、移動制御部11eは、受け取ったセグメントIDを、現在時刻(timestamp;SSD20への移動時刻に対応)とともに、予測セグメントDB11f(図1参照)に格納し保存することができる。
図9の(i)の処理は、IO分析によりHDD30からSSD20への移動対象として選択された(指示された)セグメントの情報(例えばセグメントID(sub_LUN_ID))をワークロード分析部11cから受信したことを契機に実行されてよい。このとき、移動制御部11eは、ワークロード分析部11cから指示されたセグメントのセグメントIDを現在時刻とともに予測セグメントDB11fに保存する。
予測セグメントDB11fは、ワークロード分析部11cから指示されたセグメントに関する情報を記憶するものであり、例えば図示しないメモリ等により実現される。
予測セグメントDB11fのデータ構造の一例を図10に示す。予測セグメントDB11fは、例示的に、セグメントを特定する情報及びタイムスタンプを記憶することができる。セグメントを特定する情報は、IODB11bと同様に、例えばセグメントIDであってもよいし、セグメントの先頭オフセット等であってもよい。タイムスタンプは、時刻を識別する識別子であり、例えば時刻そのものが設定される。一例として、予測セグメントDB11fには、セグメント“10”を予測したときの時刻(タイムスタンプ)として“xxxxxx...x”が設定されている。
また、図9の(ii)に示すように、移動制御部11eは、予測移動制御において、ワークロード分析部11cによる移動指示がないタイミング(上記第1タイミングとは異なる第2タイミング)で、移動指示部11dに対してセグメントの移動を指示することができる(図8の(iii)参照)。
図9の(ii)の処理において、移動制御部11eは、予測セグメントDB11fからセグメントの情報、つまりsub_LUN_IDおよびtimestampを取り出す。そして、移動制御部11eは、現在時刻current_time、遷移速度pm_speed及び成長時間pm_growthに基づき、遷移先セグメントのセグメントIDの予測を行なった上で、予測された遷移先セグメントの移動指示を発行することができる。
ここで、遷移先セグメントのセグメントID(遷移先単位領域の識別情報の数値new_sub_LUN_ID)は、下記計算式(1)によって算出され予測決定される。
new_sub_LUN_ID
=sub_LUN_ID + ((current_time - timestamp) + pm_growth) * pm_speed (1)
上記計算式(1)によって、移動制御部11eは、sub_LUN_IDを保存した時刻timestampと現在時刻current_timeとの差分に成長時間pm_growthを加算することで、IO集中が発生する前のsub_LUN_IDを求めることができる。
この後、移動制御部11eは、ワークロード分析部11cによる移動指示がない第2タイミングで、移動指示部11dに対し、予測した遷移先セグメントのSSD20への移動を依頼することで、移動処理部12dによって当該遷移先セグメントのSSD20への移動が実行される。これに伴い、第2タイミングで、遷移先セグメントのデータは、SSD20へ移動される(図8の(iii)及び図9の下段参照)。
このように、移動指示部11dと当該移動指示部11dからのセグメント移動指示を受けて動作する移動処理部12dとは、下記移動部の一例である。当該移動部は、第1タイミングで、ワークロード分析部11cのIO分析で決定された移動対象のセグメントのデータをHDD30からSSD20へ移動する。一方、当該移動部は、第1タイミングとは異なる第2タイミングで、移動制御部11eによって予測された遷移先セグメントのデータをHDD30からSSD20へ移動する。
上述したように、例えば、移動制御部11eは、図9の(i)の処理が行なわれた時刻から現在時刻までの間に進んだ(移動した)セグメントを、予測セグメントDB11fから取り出したセグメントIDに反映することができる。さらに、移動制御部11eは、成長時間pm_growthを算出して用いることで、遷移先セグメントでアクセス集中が発生する前に、当該遷移先セグメントのデータのSSD20への移動を確実に完了させることができる。このため、セグメントの移動に伴うIOアクセス性能の低下はほとんど発生せず、遷移先セグメントに対するIOアクセスの発生当初からSSD20でヒットする。
また、本実施形態では、ワークロード分析部11cによって、IO集中領域を予測するために用いられるパラメータである遷移速度pm_speed及び成長時間pm_growthが、一定時間間隔毎に、アクセスログに基づいて自律的に設定することができる。これにより、オペレータがパラメータを設定する必要が無くなるだけでなく、遷移するIO集中領域を精度よく予測して追従することができる。これに伴い、IOが集中する前にIO集中領域のデータをSSDに適切に移動することができ、予測移動による性能向上を実現することができる。
なお、IO分析による移動と予測移動制御による移動とを同時に行なうと、かえってユーザIOのレスポンスが悪化する可能性がある。ワークロード分析部11cにおいては、上述のように1分間隔等の所定の周期で移動するセグメントの選択が行なわれる。しかし、直前の周期からIOが集中するセグメントに変化がないような場合には、図9のワークロード分析部11cの処理において「移動無し」とラベルを付した破線矢印の周期のように、移動するセグメントが選択されない場合もある。
そこで、移動制御部11eは、ワークロード分析部11cからセグメントの移動指示がない(セグメントの情報を通知されない又はセグメントを選択しなかったことを通知された)周期で、図9の(ii)の処理を行なうことができる。
以上のように、移動制御部11eによる予測移動制御によれば、近い将来IOの集中が見込まれるセグメントを、HDD30から性能の良いSSD20へ事前に移動することができる。従って、HDD30からSSD20へのセグメントの移動中におけるユーザIOレスポンスの劣化を抑制することができる。
〔1−4〕観測移動制御の説明
次に、図11〜図14を参照して、観測移動制御について説明する。
観測移動制御では、予測移動制御とは逆に、SSD20からHDD30へのセグメントの移動中におけるユーザIOレスポンスの劣化を抑制することができる。
動的階層移動では、上述のように移動の最小単位としてセグメントが用いられる。セグメントは1GB程度の比較的大きな単位であるため、HDD30の負荷が高いときに階層移動を実行してしまうと、大量のユーザIOのレスポンスが悪化する可能性がある。
そこで、観測移動制御では、セグメントサイズよりも十分小さなサイズ(以下、観測移動サイズと表記する)での観測移動をSSD20及びHDD30の空き領域間で実行し、そのときのユーザIOレスポンスが悪化しなければ引き続き本来の(指示された)階層移動を実行することができる。
なお、観測移動サイズとしては、セグメントサイズが1GBである場合、例えば200MB(セグメントサイズの1/5)以下、好ましくは50MB(セグメントサイズの1/20)程度のサイズとすることができる。
但し、観測移動サイズが小さ過ぎる場合、HDD30において負荷が生じる前に移動が完了してしまい、ユーザIOレスポンスの観測が正しく行なわれない可能性がある。従って、観測移動サイズは、HDD30に負荷を生じさせ、且つ階層ストレージシステム1全体のユーザIOレスポンスに大きな影響を与えない範囲で決定されることが好ましい。
図11を参照して、移動制御部11e及び観測処理部12eによる観測移動制御の処理手順の一例について説明する。図11の(I)に示すように、移動制御部11eは、観測移動制御において、SSD20からHDD30へのセグメントの移動前に、階層ドライバ12(観測処理部12e)へ観測移動を指示することができる(図14の(1)参照)。
図11の(I)の処理は、IO分析によりSSD20からHDD30への移動対象として選択された(指示された)セグメントの情報(例えばセグメントID)をワークロード分析部11cから受信したことを契機に実行されてよい。このとき、移動制御部11eは、ワークロード分析部11cから指示されたセグメントの情報を、移動キュー11g(図1参照)に格納することができる。
移動キュー11gは、ワークロード分析部11cによりSSD20からHDD30への移動対象として指示されたセグメントを示す情報を一時的に記憶するFIFO構造の記憶領域であり、例えば図示しないメモリ等により実現される。移動キュー11gによって、階層移動に係るセグメントの情報をキューイングすることにより、階層移動のタイミングを調整することができる。
一例として、移動制御部11eは、HDD30へ移動するセグメントの情報をワークロード分析部11cから受信すると、受信順に当該セグメントの情報を移動キュー11gに格納する。また、移動制御部11eは、移動キュー11gにセグメントの情報が1つでも格納されている場合、階層ドライバ12に対して観測移動を指示する。
階層ドライバ12(観測処理部12e)は、移動制御部11eからの観測移動の指示に応じて、SSD20からHDD30への空き領域間での観測移動を、例えばkcopydへ指示し(図14の(2)参照)、kcopydに観測移動を行なわせることができる(図14の(3)参照)。なお、観測処理部12eは、移動指示とともにIO分析による移動対象のセグメントの情報を受信した場合、当該移動対象のセグメントのうちの一部の領域を観測移動サイズとして選択してもよい。観測移動が行なわれる領域としては上述したものに限定されず、任意の領域が選択されてよい。
観測処理部12eは、ユーザIOの応答性能に関する情報を観測するために、カウンタ12fをそなえることができる(図1参照)。カウンタ12fは、観測移動サイズのデータの移動中においてユーザIOに対する応答時間が所定の閾値を超えた回数をカウントすることができる。
例えば観測処理部12eは、移動制御部11eからの観測指示に応じて、観測移動サイズでの移動を行なう。また、観測処理部12eは、図11の(II)に示すように、所定期間、例えば数秒〜数十秒程度の間、ユーザIOへの応答時間を計測し(図14の(4)参照)、応答時間が所定の閾値を超えた回数をカウンタ12fによりカウントする(図14の(5)参照)。所定期間を満了すると、観測処理部12eは、カウンタ12fのカウント値を移動制御部11eへ通知することができる(図14の(6)参照)。なお、所定期間の間、選択した領域の観測移動は繰り返し行なわれてもよい。
所定の閾値としては、例えば数十ms〜数百ms、一例として300ms(ミリ秒)程度が挙げられる。
移動制御部11eは、図11の(III)に示すように、観測指示を発行してから所定期間経過後、観測処理部12eからカウント値を受信すると、受信したカウント値に基づいてセグメントサイズでの階層移動の実行可否を判定することができる。
例えば移動制御部11eは、受信したカウント値がレスポンスの劣化を示さない値、一例として0である場合、応答の遅いユーザIOが発生しなかったため、セグメントサイズでの階層移動の処理を行なうと判定することができる(図11の(III−2)参照)。一方、移動制御部11eは、受信したカウント値がレスポンスの劣化を示す値、一例として0よりも大きい値である場合、応答の遅いユーザIOが発生したため、現在のインターバル(周期)でのセグメントサイズでの階層移動の処理を行なわないと判定することができる(図11の(III−1)参照)。
なお、移動制御部11eは、階層移動の処理を行なうと判定した場合、移動キュー11gに格納されたセグメントの情報を取り出して移動指示部11dへ順次通知し、階層移動を指示することができる(図14の(7)参照)。指示を受けた移動指示部11dは、上述のように階層ドライバ12に対して階層移動を指示し(図14の(8)参照)、移動処理部12dが例えばkcopydへ転送を指示して(図14の(9)参照)、階層移動が実施される(図14の(10)参照)。
一方、移動制御部11eは、階層移動の処理を行なわないと判定した場合、移動キュー11gに格納されたセグメントの情報を取り出さず(階層移動を中止し)、次回の周期まで待機することができる。
このように、移動制御部11eは、SSD20からHDD30への階層移動の指示をワークロード分析部11cから受信すると、階層移動に係るセグメントの情報をキューイングし、観測処理部12eに対してセグメントサイズよりも十分に小さいサイズの移動を空き領域に実行させることができる。そして、移動制御部11eは、ユーザIOの悪化が観測された場合には階層移動を中止し、ユーザIOの悪化が観測されない場合に、IO分析で指定されたセグメントの移動を指示することができる。
従って、HDD30の負荷状況をリアルタイムに検出してSSD20からHDD30への階層移動の可否を判定し、ユーザIOレスポンスに影響を与えないタイミングで階層移動を行なうことができ、ユーザIOレスポンスの悪化を抑制することができる。
なお、上述した観測移動サイズやカウンタ12fの所定の閾値の最適値は、階層ストレージシステム1で使用される機器(例えばSSD20やHDD30、バス、その他の装置等)やワークロードによって変動することが容易に想像できる。一実施形態に係る構成では、1GBのセグメントサイズに対して観測移動サイズを50MBとし、カウンタ12fの閾値を300msとしているが、使用する機器等の条件に応じて、これらのパラメータは適宜変化させてよい。
図12は一実施形態に係る動的階層制御(予測移動制御及び観測移動制御を含む)におけるSSD20の消費量(GB)と平均応答時間(ms)との関係の一例を、所定の閾値ごとに示す図(表)である。また、図12においては、HDDに加えてライトバック方式のキャッシュとしてSSDを実装するFACEBOOK(登録商標) FlashCacheでの評価結果を対比例として示している。
なお、図12に示す評価では、以下の構成のシステムを用いている。
・PC…CPU(Central Processing Unit):Intel(登録商標) Xeon(登録商標) E5−2650L×2,メモリ:32GB,OS:Cent−OS 5.4(64bit)
・HDD30…SAS(Serial Attached SCSI(Small Computer Storage Interface))対応,10,000rpm,450GB×4,RAID0構成
・SSD20…240GB
さらに、対象となるワークロードはリードライト比が56:44であり、ワークロード容量が293GBである。
図12において、「SSD消費量」は予測移動制御及び観測移動制御を用いて割り当てられるSSD20の最大消費量であり、FlashCacheにも同じ値がセットされている。「ユーザIO閾値」は観測移動制御での所定の閾値である。
図12に示すように、SSD消費量が75GB以上であると、予測・観測移動制御での平均応答時間はFlashCacheよりも短くなり、特に、SSD消費量が99GBの場合には、予測・観測移動制御での平均応答時間はFlashCacheより45.9%も高速となることが分かる。
図13は図12に示すワークロードにおけるSSD消費量の一例を示す図である。図13に示すように、移動制御部11eによる予測移動制御及び観測移動制御が実施されている場合、ユーザIOレスポンスが所定の閾値を下回ると、20分程度でSSD消費量が0まで減少することが分かる。また、図13において、所定の閾値が大きいほどSSD20の使用量は減少し、使用量が0になるまでの時間も短くなることが分かる。
図12及び図13に示す評価結果から、所定の閾値を小さくするとSSD消費量は増加するが応答時間は短くなり、所定の閾値を大きくするとSSD消費量は減少するが応答時間は長くなることが分かる。
従って、所定の閾値は、SSD20の容量と要求される応答時間とのトレードオフの関係を考慮して設定されることが好ましい。このため、階層管理部11及び階層ドライバ12は、観測移動サイズやカウンタ12fの所定の閾値等のパラメータを最適値に調整する機能をそなえてもよい。
以上のように、一実施形態に係る階層ストレージシステム1によれば、キャッシングを実装するFlashCacheに対して、平均ユーザIOレスポンスを約40%向上できることが分かる。
〔1−5〕階層ストレージシステムの動作例
次に、上述の如く構成された階層ストレージシステム1の動作例を、図15〜図29を参照して説明する。
はじめに、図15を参照してデータ収集部11aによるデータ収集処理及びワークロード分析部11cによるパラメータ更新処理の動作例を説明する。なお、データ収集部11aは、blktraceコマンドを所定時間(例えば60秒間)実行して、終了することを条件として起動され、データ収集処理を実行するものとする。
図15に示すように、データ収集部11aは、blktraceコマンドの実行により得られたトレース結果を取り出す(ステップS1)。次いで、データ収集部11aは、1GBオフセット単位(セグメント単位)で各セグメントのIO数を集計し(ステップS2)、タイムスタンプとともにIODB11bに書き込み(ステップS3)、このインターバルでの処理が終了する。
このように、データ収集部11aは、定期的に各セグメントについてIO数を監視することで、流動的に変化するワークロードがユーザIOに与える影響をワークロード分析部11cにフィードバックすることができる。
このとき、一定時間間隔(抽出間隔)で各セグメントについてのIO数が集計されてIODB11bにアクセスログとして格納される都度、ワークロード分析部11cは、最新の遷移速度pm_speed及び成長時間pm_growthを算出する。つまり、ワークロード分析部11cは、今回IODB11bに格納されたIO数を含む過去のアクセスログに基づき、最新の遷移速度pm_speed及び成長時間pm_growthを以下のように算出して更新する(ステップS100)。
ここで、まず、図16〜図18を参照して遷移速度pm_speedの算出手法について説明する。
各セグメントには、上述したセグメントID(sub_LUN ID)が、各セグメントを特定する識別情報として割り当てられている。セグメントIDは、セグメントの配置順に対応して変化する昇順または降順の数値である。
ワークロード分析部11cの遷移速度算出部11hは、IODB11bのアクセスログから、所定タイミング毎に、複数のセグメントのうちアクセス数が最大のセグメントID(単位領域の識別情報)を抽出する(図18参照)。図16に示す例では、時刻tから時刻t+1までの1分間で最もIO数が多かったセグメントIDが、時刻tのtop sub_LUNとして示され、時刻t+1から時刻t+2までの1分間で最もIO数が多かったセグメントIDが、時刻t+1のtop sub_LUNとして示されている。
遷移速度算出部11hは、所定タイミング毎に抽出されたセグメントIDの数値から、前後する二つのセグメントIDの数値の差が所定範囲PM_SIZE(例えば5)内である、連続する二以上のセグメントIDの数値を含むグループ(sub_LUN group;セグメント群)を抽出する。このようなグループが抽出された場合、遷移速度算出部11hは、以下のようにして遷移速度pm_speedを算出する。つまり、遷移速度算出部11hは、当該グループの終点におけるセグメントIDの数値と当該グループの始点におけるセグメントIDの数値との差分を、当該グループの始点から終点までに要する経過時間で除算することで、遷移速度pm_speedを算出する(図17参照)。
例えば図16に示すように、前後する二つのセグメントIDの数値の差が所定範囲PM_SIZE(例えば5)内に入っていれば、遷移速度算出部11hは、当該前後する二つのセグメント間でIOアクセス集中が継続していると判断する。一方、前後する二つのセグメントIDの数値の差が所定範囲PM_SIZE外であれば、遷移速度算出部11hは、当該前後する二つのセグメント間でIOアクセス集中が途切れていると判断する。
例えば図17に示すように、時刻tから時刻t+5までの経過時間(Elapsed times (min))6分の間に亘って、IOアクセス集中が継続し、当該経過時間の間にsub_LUN_IDの数値が6増加している場合(6 sub_LUN)、遷移速度算出部11hは、遷移速度pm_speedとして、6 sub_LUN/6 (分)=+1 sub_LUN/分を算出する。なお、経過時間6分の間に、sub_LUN_IDの数値が6減少している場合、遷移速度pm_speedとして、−1 sub_LUN/分が算出される。
ワークロード分析部11cは、最新の遷移速度pm_speed及び成長時間pm_growthを算出するのに先立ち、最新の情報を含む過去のアクセスログを参照し、例えば図18に示すように、IO数の大きい上位n個のセグメントID(sub_LUN_ID)を抽出する。図18に示す例では、時刻14〜時刻25のそれぞれについて、IO数の大きい上位20個のセグメントID(sub_LUN_ID)が、IO数の大きい順に並べ替えられて示されている。なお、図18では、紙面の都合上、上位15個のセグメントID(sub_LUN_ID)が示されている。
図18に示す例について遷移速度pm_speedを算出する場合、時刻15と時刻16との間で、前後する二つのtop sub_LUN_IDの差92−76=16がPM_SIZE=5を超えているため、遷移速度算出部11hは、IOアクセス集中が時刻15と時刻16との間で途切れていると判断する。
また、時刻16から時刻24までの間では、前後する二つのtop sub_LUN_IDの差はいずれもPM_SIZE=5以下であるため、遷移速度算出部11hは、IOアクセス集中が時刻16から時刻24まで継続していると判断する。
そして、時刻24と時刻25との間で、前後する二つのtop sub_LUN_IDの差102−3=99がPM_SIZE=5を超えているため、遷移速度算出部11hは、IOアクセス集中が時刻24と時刻25との間で途切れていると判断する。
このとき、終点におけるセグメントIDの数値102と当該グループの始点におけるセグメントIDの数値92との差分は10となる。これ伴い、遷移速度算出部11hは、遷移速度pm_speedとして、10/9=1.11sub_LUN/分を算出する。
ついで、図19を参照して成長時間pm_growthの算出手法について説明する。
ワークロード分析部11cの成長時間算出部11iは、IODB11bのアクセスログから、一定時間間隔の所定タイミング毎に、IO数の大きい順に全てのセグメントのセグメントID(sub_LUN_ID)及びIO数を抽出する。
成長時間算出部11iは、アクセスログから、最新の所定タイミングでIO数が最大のセグメントの最新セグメントID及びIO数を抽出する。また、成長時間算出部11iは、所定タイミング毎に抽出された全てのセグメントのセグメントID及びIO数を参照することで、最新の所定タイミングよりも前のタイミングにおいて、前記最新セグメントIDのセグメントのIO数が所定値(例えば20)を超える最古の所定タイミングを求める。そして、成長時間算出部11iは、最新の所定タイミングと最古の所定タイミングとの差分時間に基づき、成長時間pm_growthを算出する。
例えば、最新の所定タイミングが時刻20の時点で、図19に示すように、IO数の大きい上位n個のセグメントID(sub_LUN_ID)が抽出されている。図19に示す例では、時刻18〜時刻20のそれぞれについて、IO数の大きい上位20個のセグメントID(sub_LUN_ID)が、IO数の大きい順に並べ替えられて示されている。なお、図19でも、紙面の都合上、上位15個のセグメントID(sub_LUN_ID)が示されている。
このとき、成長時間算出部11iによって、最新の所定タイミングである時刻20の時点でIO数が最大のセグメントの最新セグメントID“96”が抽出される。また、成長時間算出部11iによって、過去の所定タイミングである時刻19および時刻18の時点で抽出された上位20個のセグメントIDが参照される。これにより、最新の所定タイミング(時刻20)よりも前のタイミングにおいて、最新セグメントID“96”が現れる最古の所定タイミングが求められる。
図19に示す例では、最新セグメントID“96”は、時刻19の時点で6位に現れ、最新セグメントID“96”のセグメントのIO数は所定値20を超えているものとする。しかし、時刻18の時点では、最新セグメントID“96”のセグメントのIO数は所定値20以下であるとする。この場合、最新セグメントID“96”のセグメントのIO数が所定値20を超える最古の所定タイミングは時刻19であり、最新セグメントID“96”のセグメントが、そのIO数が最大になる1分前から、そのIO数は所定値20を超えている。このため、成長時間pm_growthとして、最新の所定タイミングと最古の所定タイミングとの差分時間である1分に1分を加算して得られる値2分が算出される。
このように、成長時間算出部11iによれば、図19に示すように最大IO数のセグメントIDの履歴を辿ることで、当該セグメントIDのセグメントに対するIO数が何分前から増加し始めたかを、成長時間pm_growthとして把握することができる。そして、成長時間pm_growthを遷移先セグメントの予測に反映することで、遷移先セグメントでアクセス集中が発生する前に、当該遷移先セグメントのデータのSSD20への移動を確実に完了することができる。
次に、図20に示すフローチャート(ステップS101〜S109)を参照して遷移速度算出部11hによる遷移速度の算出手順の一例を説明する。図20において、PM_SIZE=5、一定時間間隔(Interval)=60秒である。“Start_sub_LUN_ID”は、前記グループの始点におけるセグメントIDの数値に対応し、初期値としては−1を設定される。“End_sub_LUN_ID”は、前記グループの終点におけるセグメントIDの数値に対応し、初期値としては“−1”を設定される。
遷移速度算出部11hは、一定時間間隔毎に、IO数が最も多いセグメントのセグメントID(sub_LUN_ID)を獲得する(ステップS101)。以下では、ステップS101で獲得されたセグメントID(sub_LUN_ID)を“A”と表記する。
そして、遷移速度算出部11hは、“Start_sub_LUN_ID”が−1であるか否かを判定する(ステップS102)。“Start_sub_LUN_ID”が“−1”である場合(ステップS102のYesルート)、遷移速度算出部11hは、“Start_sub_LUN_ID”及び“End_sub_LUN_ID”を、いずれも“A”に設定するとともに、経過時間を計数するカウンタによるカウント値“count”を“1”に設定する(ステップS103)。この後、遷移速度算出部11hは、所定時間、例えば60秒スリープし(ステップS109)、ステップS101の処理に移行する。
“Start_sub_LUN_ID”が“−1”でない場合(ステップS102のNoルート)、遷移速度算出部11hは、今回獲得されたセグメントID“A”と“End_sub_LUN_ID”との差がPM_SIZE(例えば5)以内であるか否かを判定する(ステップS104)。当該差がPM_SIZE(例えば5)以内である場合(ステップS104のYesルート)、遷移速度算出部11hは、カウント値“count”に1を加算するとともに、“End_sub_LUN_ID”を、今回獲得されたセグメントID“A”に設定する(ステップS105)。この後、遷移速度算出部11hは、所定時間、例えば60秒スリープし(ステップS109)、ステップS101の処理に移行する。
当該差がPM_SIZE(例えば5)を超える場合(ステップS104のNoルート)、遷移速度算出部11hは、カウント値“count”が“1”であるか否かを判定する(ステップS106)。カウント値“count”が“1”である場合(ステップS106のYesルート)、遷移速度算出部11hは、“Start_sub_LUN_ID”及び“End_sub_LUN_ID”を、いずれも“A”に設定するとともに、カウント値“count”を“1”に設定する(ステップS108)。この後、遷移速度算出部11hは、所定時間、例えば60秒スリープし(ステップS109)、ステップS101の処理に移行する。
カウント値“count”が“1”でない場合(ステップS106のNoルート)、遷移速度算出部11hは、遷移速度pm_speedとして(End_sub_LUN_ID − Start_sub_LUN_ID)/countを算出してから、ステップS108の処理へ移行する。
図20に示すフローチャートに、図18に示す具体的なアクセスログを適用した場合、以下のように動作する。ここでは、例えば、図18に示すアクセスログの時刻14に、図20に示すフローチャートによる処理を開始した場合の動作について説明する。処理の開始時点には、“Start_sub_LUN_ID”及び“End_sub_LUN_ID”に初期値“−1”が設定される。
まず、時刻14には、ステップS101において「IO数が最も多いsub_LUN ID(A)」として“76”が獲得され、ステップS102において“Start_sub_LUN_ID”が“−1”であると判定される(Yesルート)。これに伴い、ステップS103において、“Start_sub_LUN_ID”及び“End_sub_LUN_ID”がいずれも“76”に設定されるとともに、カウント値“count”が“1”に設定される。
時刻15には、ステップS101において「IO数が最も多いsub_LUN ID(A)」として“76”が獲得され、ステップS102において“Start_sub_LUN_ID”が“−1”でないと判定される(Noルート)。そして、ステップS104において、A=“76”と“End_sub_LUN_ID”=“76”との差“0”がPM_SIZE=5以内であると判定される(Yesルート)。これに伴い、ステップS105において、“End_sub_LUN_ID”が“76”に設定されるとともに、カウント値“count”が“2”に設定される。
時刻16には、ステップS101において「IO数が最も多いsub_LUN ID(A)」として“92”が獲得され、ステップS102において“Start_sub_LUN_ID”が“−1”でないと判定される(Noルート)。そして、ステップS104において、A=“92”と“End_sub_LUN_ID”=“76”との差“16”がPM_SIZE=5を超えると判定される(Noルート)。さらに、ステップS106において、カウント値“count”=“2”が1でないと判定される(Noルート)。これに伴い、ステップS107において、遷移速度pm_speed=(End_sub_LUN_ID − Start_sub_LUN_ID)/count=(76−76)/2=0sub_LUN/分が算出される。この後、ステップS108において、“Start_sub_LUN_ID”及び“End_sub_LUN_ID”がいずれも“92”に設定されるとともに、カウント値“count”が“1”に設定される。
時刻17には、ステップS101において「IO数が最も多いsub_LUN ID(A)」として“92”が獲得され、ステップS102において“Start_sub_LUN_ID”が“−1”でないと判定される(Noルート)。そして、ステップS104において、A=“92”と“End_sub_LUN_ID”=“92”との差“0”がPM_SIZE=5以内であると判定される(Yesルート)。これに伴い、ステップS105において、“End_sub_LUN_ID”が“92”に設定されるとともに、カウント値“count”が“2”に設定される。
時刻18には、ステップS101において「IO数が最も多いsub_LUN ID(A)」として“95”が獲得され、ステップS102において“Start_sub_LUN_ID”が“−1”でないと判定される(Noルート)。そして、ステップS104において、A=“95”と“End_sub_LUN_ID”=“92”との差“3”がPM_SIZE=5以内であると判定される(Yesルート)。これに伴い、ステップS105において、“End_sub_LUN_ID”が“95”に設定されるとともに、カウント値“count”が“3”に設定される。
以下、同様の動作を繰り返し実行し、時刻24には、ステップS101において「IO数が最も多いsub_LUN ID(A)」として“102”が獲得され、ステップS102において“Start_sub_LUN_ID”が“−1”でないと判定される(Noルート)。そして、ステップS104において、A=“102”と“End_sub_LUN_ID”=“101”との差“1”がPM_SIZE=5以内であると判定される(Yesルート)。これに伴い、ステップS105において、“End_sub_LUN_ID”が“102”に設定されるとともに、カウント値“count”が“9”に設定される。
時刻25には、ステップS101において「IO数が最も多いsub_LUN ID(A)」として“3”が獲得され、ステップS102において“Start_sub_LUN_ID”が“−1”でないと判定される(Noルート)。そして、ステップS104において、A=“3”と“End_sub_LUN_ID”=“102”との差“89”がPM_SIZE=5を超えると判定される(Noルート)。さらに、ステップS106において、カウント値“count”=“9”が1でないと判定される(Noルート)。これに伴い、ステップS107において、遷移速度pm_speed=(End_sub_LUN_ID − Start_sub_LUN_ID)/count=(102−92)/9=10/9=1.11sub_LUN/分が算出される。この後、ステップS108において、“Start_sub_LUN_ID”及び“End_sub_LUN_ID”がいずれも“3”に設定されるとともに、カウント値“count”が“1”に設定される。
次に、図21に示すフローチャート(ステップS111〜S117)を参照して成長時間算出部11iによる成長時間の算出手順の一例を説明する。
成長時間算出部11iは、一定時間間隔毎に、IO数が最も多いセグメントのセグメントID(sub_LUN_ID)を獲得し(ステップS111)、i=1を設定する(ステップS112)。以下では、ステップS111で獲得されたセグメントID(sub_LUN_ID)を“A”と表記する。
そして、成長時間算出部11iは、i分前の時刻における全てのセグメント(sub_LUN)の履歴(例えば図19のアクセスログ参照)を参照する。これにより、成長時間算出部11iは、i分前の時刻における全てのセグメントの中から、そのセグメントID(sub_LUN_ID)がAと一致するセグメント(sub_LUN)を検索する(ステップS113)。
成長時間算出部11iは、ステップS113で検索したセグメント(sub_LUN)のIO数が所定値20以下であるか否かを判定する(ステップS114)。IO数が所定値20を超える場合(ステップS114のNOルート)、成長時間算出部11iは、iをi+1に置き換えてから(ステップS115)、ステップS113の処理に戻る。
一方、IO数が所定値20以下の場合(ステップS114の“YES”ルート)、成長時間算出部11iは、成長時間pm_growthとして“i”を算出する(ステップS116)。この後、成長時間算出部11iは、所定時間、例えば60秒スリープし(ステップS117)、ステップS111の処理に移行する。
図21に示すフローチャートに、図19に示す具体的なアクセスログを適用した場合、以下のように動作する。ここでは、例えば、図19に示すアクセスログの時刻20に、図21に示すフローチャートによる処理を開始した場合の動作について説明する。
時刻20には、ステップS111において「IO数が最も多いsub_LUN ID(A)」として“96”が獲得され、ステップS112においてi=1が設定される。
この後、ステップS113において、1分前の時刻19における全てのセグメントの履歴を参照する。このとき、1分前の時刻19における全てのセグメントの中から、“96”と一致するセグメントIDをもつセグメントが検索され、そのIO数は20を超えると判定される(ステップS114のNOルート)。これに伴い、ステップS115においてi=1+1=2が設定される。
そして、ステップS113において、2分前の時刻18における全てのセグメントの履歴を参照する。このとき、2分前の時刻18における上位20個のセグメントの中に、“96”と一致するセグメントIDをもつセグメントが検索され、そのIO数は所定値20以下であると判定される(ステップS114のYESルート)。これに伴い、ステップS116において、成長時間pm_growthとして“2”が算出される。
このようにして、最新の所定タイミングである時刻20の時点でIO数が最大のセグメントの最新セグメントID“96”が抽出され、過去の所定タイミングである時刻19および時刻18の時点で抽出された全てのセグメントIDが参照される。これにより、最新の所定タイミング(時刻20)よりも前のタイミングにおいて、最新セグメントID“96”のセグメントのIO数が所定値20を超える最古の所定タイミングが求められ、成長時間pm_growthが算出される。
次に、図22を参照してワークロード分析部11cによる移動判定処理の動作例を説明する。図22に示すように、ワークロード分析部11cは、IODB11bから直近のタイムスタンプのセグメントについてIO数を取り出し(ステップS11)、セグメント数が所定数に達するまで、IO数が多い順に候補セグメントを抽出する(ステップS12)。
次いで、ワークロード分析部11cは、予め求められた平均余命時間が全候補セグメントに係る移動時間よりも大きいか否かを判定する(ステップS13)。
平均余命時間が当該移動時間以下の場合(ステップS13のNoルート)、処理がステップS15に移行する。一方、平均余命時間が当該移動時間よりも大きい場合(ステップS13のYesルート)、ワークロード分析部11cは、候補セグメントの情報を移動指示部11d及び移動制御部11eへそれぞれ通知し、データの移動(HDD30からSSD20)を指示し(ステップS14)、処理がステップS15に移行する。
ステップS15では、ワークロード分析部11cは、SSD20上のセグメントから候補セグメントに含まれないセグメント、例えばIO数が比較的少ないセグメントを抽出する。そして、ワークロード分析部11cは、抽出したセグメントの情報を移動制御部11eへ通知し、データの移動(SSD20からHDD30)を指示する(ステップS16)。
次いで、ワークロード分析部11cは、所定時間、例えば60秒スリープし(ステップS17)、処理がステップS11に移行する。
なお、ワークロード分析部11cは、ステップS12において、IO数又はアクセスの集中率(全体に対するIO数の割合)が所定の閾値よりも高いセグメントを抽出してもよい。また、ワークロード分析部11cは、ステップS15において、HDD30にデータを移動するセグメントとして、例えばIO数又はアクセスの集中率が所定の閾値以下となったSSD20上のセグメントを抽出してもよい。さらに、ワークロード分析部11cは、ステップS12及びS15で抽出するセグメントとして、当該抽出条件に所定回数以上連続して該当したセグメントを選択してもよい。
このように、ワークロード分析部11cは、IOの集中度が高いセグメントのデータをHDD30からSSD20に移動するように移動指示部11d及び移動制御部11eに指示することによって、ユーザはHDD30のデータに高速にアクセスすることができる。
また、ワークロード分析部11cは、IOの集中度が低くなったセグメントのデータをSSD20からHDD30に移動するように移動制御部11eに指示することによって、比較的高価格、低容量のSSD20を有効利用することができる。
次に、図23を参照して移動制御部11eによる予測移動制御処理の動作例を説明する。図23に示すように、移動制御部11eは、ワークロード分析部11cから移動指示(HDD30からSSD20)を受信したか否かを判定し(ステップS21)、移動指示を受信している場合(ステップS21のYesルート)、処理がステップS22に移行する。
ステップS22では、移動制御部11eは、ワークロード分析部11cから移動を指示されたセグメントのID“seg_id”(=sub_LUN_ID)を、タイムスタンプ(timestamp)とともに予測セグメントDB11fに格納する。この後、移動制御部11eは、ワークロード分析部11cが次の移動判定を行なうまでスリープして(ステップS26)、処理がステップS21に移行する。
一方、ステップS21において、ワークロード分析部11cから移動指示を受信していない場合(ステップS21のNoルート)、移動制御部11eは、予測セグメントDB11f内に予測移動待ちのセグメントが存在するか否かを判定する(ステップS23)。
予測移動待ちのセグメントが存在しない場合(ステップS23のNoルート)、処理がステップS26に移行する。一方、予測移動待ちのセグメントが存在する場合(ステップS23のYesルート)、移動制御部11eは、予測移動待ちの“seg_id”を予測セグメントDB11fから一つ取り出し、上記計算式(1)によって、遷移先セグメントのID“new_seg_id”(=new_sub_LUN_ID)を算出する(ステップS24)。
そして、移動制御部11eは、算出した“new_seg_id”を移動指示部11dへ通知し、データの移動(HDD30からSSD20)を指示して(ステップS25)、処理がステップS23に移行する。
このように、移動制御部11eは、HDD30からSSD20への移動を指示されたセグメントの情報に基づき予測移動を行なう予測セグメントを算出し、移動指示の無いタイミングで、予測セグメント(遷移先セグメント)に基づくセグメントの移動を移動指示部11dへ指示することができる。従って、ワークロード分析部11cの分析による階層移動の動作には影響を与えずに、近い将来IOが集中するセグメントについて効果的な階層移動を行なうことができる。
次に、図24を参照して移動制御部11eによる観測移動制御処理の動作例を説明する。図24に示すように、移動制御部11eは、ワークロード分析部11cから移動指示(SSD20からHDD30)を受信したか否かを判定し(ステップS31)、移動指示を受信していない場合(ステップS31のNoルート)、処理がステップS33に移行する。
一方、移動指示を受信している場合(ステップS31のYesルート)、移動制御部11eは、ワークロード分析部11cから移動を指示されたセグメントのID“seg_id”を全て移動キュー11gへ挿入し(ステップS32)、処理がステップS33に移行する。
ステップS33では、移動制御部11eは、移動キュー11gにHDD30への移動待ちの“seg_id”が存在するか否かを判定する。移動待ちの“seg_id”が存在しない場合(ステップS33のNoルート)、移動制御部11eは、ワークロード分析部11cが次の移動判定を行なうまでスリープし(ステップS37)、処理がステップS31に移行する。
ステップS33において、移動待ちの“seg_id”が存在する場合(ステップS33のYesルート)、移動制御部11eは、階層ドライバ12の観測処理部12eに対して、SSD20及びHDD30の空き領域間の移動を指示し、所定時間、例えばM秒(Mは0以上の実数)スリープする(ステップS34)。
なお、ステップS34において、移動制御部11eは、移動待ちの“seg_id”の少なくとも1つの情報を観測処理部12eへ通知し、通知したセグメントにおける観測サイズの領域について観測移動を指示してもよい。また、移動制御部11eは、SSD20の空き領域のボリューム上のオフセットをHDD30上のオフセットに変換し、変換したオフセットを観測移動の指示に含めてもよい。
次いで、移動制御部11eは、観測処理部12eから通知されたカウンタ12fのカウント値が0であるか否かを判定する(ステップS35)。カウント値が0ではない場合(ステップS35のNoルート)、処理がステップS37に移行する。一方、カウント値が0である場合(ステップS35のYesルート)、移動制御部11eは、移動キュー11g内の“seg_id”を順番に取り出して移動指示部11dへ通知し、データの移動(SSD20からHDD30)を指示して(ステップS36)、処理がステップS37に移行する。
なお、ステップS35におけるカウント値の判定閾値は0に限定されるものではなく、観測処理部12eでのカウンタ12fの所定の閾値との関係で他の値が設定されてもよい。
このように、移動制御部11eは、SSD20からHDD30へのセグメントの移動前に、観測処理部12eに対して観測サイズでの観測移動を指示し、観測移動中のユーザIOの応答性能に関する情報に応じてセグメントの移動を行なうことができる。従って、ワークロード分析部11cの分析による階層移動の動作を、ユーザIOレスポンスへの影響が無い(小さい)タイミングで実施することができる。
次に、図25を参照して移動指示部11dによる移動指示通知処理の動作例を説明する。図25に示すように、移動指示部11dは、ワークロード分析部11c又は移動制御部11eからの移動指示を待ち受け(ステップS41)、移動指示を受け取ると、各セグメントのボリューム上のオフセットをHDD30上のオフセットに変換する(ステップS42)。
そして、移動指示部11dは、セグメントごとに、HDD30上のオフセットと、データの移動方向とを階層ドライバ12(移動処理部12d)へ通知し(ステップS43)、処理がステップS41に移行する。このとき移動処理部12dへ通知されるデータの移動方向は、HDD30からSSD20、又は、SSD20からHDD30となる。
このように、移動指示部11dが各セグメントのボリューム上のオフセットをHDD30上のオフセットに変換することによって、階層ドライバ12はSSD20とHDD30との間でデータを移動することができる。
次に、図26を参照して観測処理部12eによる観測処理の動作例を説明する。図26に示すように、観測処理部12eは、移動制御部11eからのSSD20及びHDD30の空き領域間の移動指示(観測移動指示)を待ち受け(ステップS51)、観測移動指示を受け取ると、カウンタ12fを初期化する(ステップS52)。
次いで、観測処理部12eは、SSD20の空き領域からHDD30の空き領域へのデータの転送指示をkcopydに対して行なう(ステップS53)。このとき、観測処理部12eは、所定時間、例えばM秒のカウントを行なう。なお、観測処理部12eは、移動する対象領域の特定に移動制御部11eから通知されたオフセットの情報を用いてもよく、階層テーブル12cを参照してもよい。また、観測移動の観測サイズはセグメントサイズよりも十分小さいサイズであり、一実施形態の例では、1GBのセグメントサイズに対して、観測サイズは200〜50MB程度となる。
そして、観測処理部12eは、観測移動中のユーザIOレスポンスを監視し、所定の閾値を超えたユーザIOレスポンスをカウンタ12fにより計数して(ステップS54)、M秒が経過したか否かを判定する(ステップS55)。
M秒経過していない場合(ステップS55のNoルート)、処理がステップS54に移行する。一方、M秒経過した場合(ステップS55のYesルート)、観測処理部12eは、カウント値を移動制御部11eへ通知し(ステップS56)、処理がステップS51に移行する。
このように、観測処理部12eは、観測移動中のユーザIOレスポンスをリアルタイムに観測することができるため、階層移動(SSD20からHDD30)を行なう最適なタイミングを精度よく検出することができる。
次に、図27を参照して階層ドライバ12の移動処理部12dによる転送開始処理の動作例を説明する。図27に示すように、移動処理部12dは、移動指示部11dからの移動指示を待ち受け(ステップS61)、移動指示を受け取ると、HDD30からSSD20へのデータの移動であるか否かを判定する(ステップS62)。
HDD30からSSD20へのデータの移動である場合(ステップS62のYesルート)、移動処理部12dは、移動を指示されたセグメントがSSD20へ移動済みであるか否かを判定する(ステップS63)。移動済みである場合(ステップS63のYesルート)、処理がステップS61に移行する。
一方、移動済みでない場合(ステップS63のNoルート)、移動処理部12dは、階層テーブル12c内のHDDオフセットより“NULL”となっているエントリを探索し、HDDオフセット情報と状態とを登録する。このとき移動処理部12dが登録する状態は“Moving(HDD→SSD)”となる。そして、移動処理部12dは、HDD30からSSD20へのデータの転送指示をkcopydへ発行し(ステップS64)、処理がステップS61に移行する。
ステップS62において、移動指示がHDD30からSSD20へのデータの移動ではない場合(ステップS62のNoルート)、移動処理部12dは、階層テーブル12c内のHDDオフセットよりセグメントを探索し、HDDオフセット情報と状態とを登録する。このとき移動処理部12dが登録する状態は“Moving(SSD→HDD)”となる。そして、移動処理部12dは、SSD20からHDD30へのデータの転送指示をkcopydへ発行し(ステップS65)、処理がステップS61に移行する。
次に、図28を参照して階層ドライバ12の移動処理部12dによる転送完了処理の動作例を説明する。図28に示すように、移動処理部12dは、kcopydによる転送の完了を待ち(ステップS71)、転送が完了すると、転送が完了した階層テーブル12cのエントリをHDDオフセットを用いて探索する(ステップS72)。
そして、移動処理部12dは、探索したエントリについて、状態が“Moving(HDD→SSD)”であるか否かを判定する(ステップS73)。状態が“Moving(HDD→SSD)”である場合(ステップS73のYesルート)、移動処理部12dは、状態を“allocated”に変更し(ステップS74)、処理がステップS71に移行する。
一方、状態が“Moving(HDD→SSD)”ではない(“Moving(SSD→HDD)”である)場合(ステップS73のNoルート)、移動処理部12dは、状態を“free”に変更し、且つ、対応するHDDオフセットを“NULL”に設定して(ステップS75)、処理がステップS71に移行する。
このように、階層ドライバ12(移動処理部12d)が階層テーブル12cを用いてSSD20とHDD30との間でデータを転送することにより、ワークロード分析部11c及び移動制御部11eによる動的階層制御が実現される。
最後に、図29を参照してIOマップ部12aによるIO受信処理の動作例を説明する。図29に示すように、IOマップ部12aは、ユーザIOの受信を待ち受け(ステップS81)、ユーザIOを受け取ると、ユーザIOで指定されるオフセットと階層テーブル12cに登録されている各オフセット+セグメントサイズとを比較する(ステップS82)。
そして、IOマップ部12aは、比較結果に基づき、階層テーブル12cに一致するオフセットが存在し、且つ状態が“allocated”であるか否かを判定する(ステップS83)。一致するオフセットが存在し、且つ状態が“allocated”である場合(ステップS83のYesルート)、IOマップ部12aは、SSDドライバ13へIO要求を送付し(ステップS84)、処理がステップS81に移行する。
一方、一致するオフセットが存在せず、又は状態が“allocated”ではない場合(ステップS83のNoルート)、IOマップ部12aは、状態が“Moving(HDD→SSD)”又は“Moving(SSD→HDD)”であるか否かを判定する(ステップS85)。状態が“Moving(HDD→SSD)”及び“Moving(SSD→HDD)”以外の状態である場合(ステップS85のNoルート)、IOマップ部12aは、HDDドライバ14へIO要求を送付し(ステップS86)、処理がステップS81に移行する。
また、ステップS85において、状態が“Moving(HDD→SSD)”又は“Moving(SSD→HDD)”である場合(ステップS85のYesルート)、IOマップ部12aは、当該状態が“free”又は“allocated”に変化するまでIO要求をIOキュー12bに格納する。すなわち、IOマップ部12aは、IO要求に係るセグメントの階層移動が完了するまで、IO要求を保留する(ステップS87)。階層移動が完了すると、IOマップ部12aは、IOキュー12bに格納したIO要求を取り出し、処理がステップS83に移行する。
〔1−6〕階層ストレージ制御装置のハードウェア構成例
次に、図30を参照して、図1に示す階層ストレージ制御装置10のハードウェア構成例について説明する。図30に示すように、階層ストレージ制御装置10は、例示的に、CPU10a、メモリ10b、記憶部10c、インタフェース部10d、及び入出力部10eをそなえることができる。
CPU10aは、種々の制御や演算を行なうプロセッサの一例である。CPU10aは、階層ストレージ制御装置10内の各ブロックとバスで相互に通信可能に接続されてよい。なお、プロセッサとしては、CPU10aに代えて、電子回路、例えばMPU(Micro Processing Unit)等の集積回路(IC;Integrated Circuit)が用いられてもよい。
メモリ10bは、種々のデータやプログラムを格納するハードウェアの一例である。図1に示すIODB11b、予測セグメントDB11f、移動キュー11g、及びIOキュー12bの少なくとも1つは、メモリ10bの記憶領域によって実現されてもよい。メモリ10bとしては、例えばRAM(Random Access Memory)等の揮発性メモリが挙げられる。
記憶部10cは、種々のデータやプログラム等を格納するハードウェアの一例である。記憶部10cとしては、例えばHDD等の磁気ディスク装置、SSD等の半導体ドライブ装置、フラッシュメモリやROM(Read Only Memory)等の不揮発性メモリ等の各種記憶装置が挙げられる。
例えば記憶部10cは、階層ストレージ制御装置10の各種機能の全部若しくは一部を実現するストレージ制御プログラム100を格納してもよい。この場合、CPU10aは、記憶部10cに格納されたストレージ制御プログラム100をメモリ10bに展開して実行することにより、階層ストレージ制御装置10の機能を実現することができる。
インタフェース部10dは、SSD20、HDD30、図示しないホスト装置、又は作業者の作業端末等との間の接続及び通信の制御等を行なう通信インタフェースの一例である。例えばインタフェース部10dは、各種コントローラ、デバイスを接続するアダプタ、及び記録媒体10fに記録されたデータやプログラムを読み出す読取部をそなえてよい。コントローラは、例えばSSD20及びHDD30との間の通信を制御するIOC(I/O Controller)を含んでよく、アダプタは、例えばSSD20及びHDD30を接続するDA(Device Adapter)、及びホスト装置を接続するCA(Channel Adapter)等を含んでよい。なお、CAとしては、例えばLAN(Local Area Network)、SAN(Storage Area Network)、FC(Fibre Channel)、インフィニバンド(InfiniBand)等に準拠したCAが挙げられる。
読取部は、コンピュータ読取可能な記録媒体10fを接続又は挿入可能な接続端子又は装置を含んでよい。読取部としては、例えばUSB(Universal Serial Bus)等に準拠したアダプタ、記録ディスクへのアクセスを行なうドライブ装置、SDカード等のフラッシュメモリへのアクセスを行なうカードリーダ等が挙げられる。なお、記録媒体10fにはストレージ制御プログラム100が格納されてもよい。
入出力部10eは、マウス、キーボード、操作ボタン等の入力部、並びにディスプレイ等の出力部の少なくとも一部を含むことができる。例えば入力部は、使用者又はオペレータ等による設定の登録や変更、システムのモード選択(切替)等の各種操作やデータの入力等の作業に用いられてもよく、出力部は、作業者等による設定の確認や各種通知等の出力に用いられてもよい。
なお、上述した階層ストレージ制御装置10のハードウェア構成は例示である。従って、階層ストレージ制御装置10内でのハードウェアの増減(例えば任意のブロックの追加や省略)、分割、任意の組み合わせでの統合、バスの追加又は省略等は適宜行なわれてもよい。
〔2〕その他
上述した一実施形態に係る技術は、以下のように変形、変更して実施することができる。
例えば、図1に示す階層ストレージ制御装置10の各機能ブロックは、それぞれ任意の組み合わせで併合してもよく、分割してもよい。
また、ワークロード分析部11c及び移動処理部12dは、移動対象の領域をセグメント単位で決定し、移動指示部11dへ階層移動を指示するものとして説明したが、これに限定されるものではない。
例えばワークロード分析部11cにより特定される移動対象の領域は、高負荷領域の近傍の領域を繋ぎ合わせた領域であってもよい。この場合、ワークロード分析部11cは、移動対象のセグメントの情報として、例えばセグメントID又はオフセットの範囲を表す情報を移動制御部11e又は移動指示部11dへ通知してもよい。
移動制御部11eは、予測移動制御においては、通知された範囲に含まれる複数のセグメントの情報及び当該範囲の領域サイズに基づいて、将来IOが集中する同じサイズの領域を予測すればよい。
この予測の手法としては、例えば通知された範囲の先頭オフセット、中間のオフセット、又は最終オフセット等の任意のセグメントを代表セグメントとし、代表セグメントについて、移動制御部11eが予測セグメントを算出することが挙げられる。この場合、移動制御部11eは、通知された範囲に含まれるセグメントの数に基づき、補正後の予測セグメントの範囲を求めて移動指示部11dへ通知すればよい。
或いは、移動制御部11eは、通知された範囲に含まれる複数のセグメントの各々について、それぞれ予測セグメントを求めてもよい。
また、観測移動制御においては、通知された範囲に含まれる複数のセグメントの各々の情報が移動キュー11gに格納される。従って、移動制御部11eは、IOレスポンスの悪化を検出しない場合には、一実施形態で説明したように、移動キュー11g内の各セグメントを順番に読み出して移動指示部11dへ階層移動を指示すればよい。
なお、移動指示部11dは、通知された範囲に含まれる複数のセグメントの各々について、階層ドライバ12へ移動指示を発行すればよい。
上述した実施形態では、遷移速度算出部11h及び成長時間算出部11iとしての機能をワークロード分析部11cにそなえた場合について説明したが、これに限定されるものではない。遷移速度算出部11h及び成長時間算出部11iとしての機能は、階層管理部11内(例えば移動制御部11e等)にそなえられていればよい。
また、上述した実施形態では、本発明を階層ストレージに適用した場合について説明したが、これに限定されるものでなく、本発明は、SSD等の第1の記憶装置がキャッシュメモリである場合についても上述した実施形態と同様に適用され、上述した実施形態と同様の作用効果を得ることができる。
〔3〕付記
以上の実施形態に関し、更に以下の付記を開示する。
(付記1)
第1の記憶装置と、前記第1の記憶装置とは異なる性能の第2の記憶装置との間で、複数の単位領域におけるデータを移動させる情報処理装置であって、
前記複数の単位領域のそれぞれについてのアクセスログを、一定時間間隔の所定タイミング毎に収集する収集部と、
前記アクセスログに基づき、前記複数の単位領域の中から、アクセスが集中する集中状態の単位領域を、前記第2の記憶装置から前記第1の記憶装置への移動対象の単位領域として決定する決定部と、
前記アクセスログに基づき、前記複数の単位領域における、前記集中状態の単位領域の遷移速度を算出する遷移速度算出部と、
前記アクセスログに基づき、前記所定タイミングで前記集中状態の単位領域が、当該単位領域に対する単位時間あたりのアクセス数が所定値以下の状態から前記集中状態になるまでに要する成長時間を算出する成長時間算出部と、
前記遷移速度および前記成長時間に基づき、前記集中状態の単位領域が、前記決定部によって決定された前記移動対象の単位領域から遷移する遷移先単位領域を予測する予測部と、をそなえる、情報処理装置。
(付記2)
第1タイミングで、前記決定部によって決定された前記移動対象の単位領域の前記データを前記第2の記憶装置から前記第1の記憶装置へ移動する一方、前記第1タイミングとは異なる第2タイミングで、前記予測部によって予測された前記遷移先単位領域の前記データを前記第2の記憶装置から前記第1の記憶装置へ移動する移動部をそなえる、付記1に記載の情報処理装置。
(付記3)
前記複数の単位領域のそれぞれには、前記複数の単位領域の配置順に対応して変化する昇順または降順の数値が、各単位領域を特定する識別情報として割り当てられ、
前記遷移速度算出部は、
前記アクセスログから、前記所定タイミング毎に、前記複数の単位領域のうちアクセス数が最大の単位領域の識別情報を抽出し、
前記所定タイミング毎に抽出された複数の識別情報の数値から、前後する二つの識別情報の数値の差が所定範囲内である、連続する二以上の識別情報の数値を含むグループが抽出された場合、前記グループの終点における前記識別情報の数値と前記グループの始点における前記識別情報の数値との差分と、前記グループの始点から終点までに要する経過時間と、に基づき、前記遷移速度を算出する、付記1または付記2に記載の情報処理装置。
(付記4)
前記成長時間算出部は、
前記アクセスログから、前記所定タイミング毎に、全ての単位領域の識別情報及びアクセス数を抽出し、
前記アクセスログから、最新の所定タイミングでアクセス数が最大の単位領域の最新識別情報を抽出し、
前記所定タイミング毎に抽出された前記全ての単位領域の識別情報及びアクセス数を参照することで、前記最新の所定タイミングよりも前のタイミングにおいて、前記最新識別情報の単位領域のアクセス数が前記所定値を超える最古の所定タイミングを求め、
前記最新の所定タイミングと前記最古の所定タイミングとの差分時間に基づき、前記成長時間を算出する、付記3に記載の情報処理装置。
(付記5)
前記予測部は、下記計算式によって、前記遷移先単位領域の識別情報の数値を算出し、前記遷移先単位領域を予測する、付記4に記載の情報処理装置。
[前記遷移先単位領域の識別情報の数値]
=[前記移動対象の単位領域の識別情報の数値]
+([現在時刻]-[前記移動対象の単位領域の移動時刻]+[前記成長時間])*[前記遷移速度]
(付記6)
第1の記憶装置と、前記第1の記憶装置とは異なる性能の第2の記憶装置との間で、複数の単位領域におけるデータを移動させるコンピュータに、
前記複数の単位領域のそれぞれについてのアクセスログを、一定時間間隔の所定タイミング毎に収集し、
前記アクセスログに基づき、前記複数の単位領域の中から、アクセスが集中する集中状態の単位領域を、前記第2の記憶装置から前記第1の記憶装置への移動対象の単位領域として決定し、
前記アクセスログに基づき、前記複数の単位領域における、前記集中状態の単位領域の遷移速度を算出し、
前記アクセスログに基づき、前記所定タイミングで前記集中状態の単位領域が、当該単位領域に対する単位時間あたりのアクセス数が所定値以下の状態から前記集中状態になるまでに要する成長時間を算出し、
前記遷移速度および前記成長時間に基づき、前記集中状態の単位領域が、決定された前記移動対象の単位領域から遷移する遷移先単位領域を予測する、
処理を実行させる、ストレージ制御プログラム。
(付記7)
第1タイミングで、決定された前記移動対象の単位領域の前記データを前記第2の記憶装置から前記第1の記憶装置へ移動する一方、前記第1タイミングとは異なる第2タイミングで、予測された前記遷移先単位領域の前記データを前記第2の記憶装置から前記第1の記憶装置へ移動する、
処理を、前記コンピュータに実行させる、付記6に記載のストレージ制御プログラム。
(付記8)
前記複数の単位領域のそれぞれには、前記複数の単位領域の配置順に対応して変化する昇順または降順の数値が、各単位領域を特定する識別情報として割り当てられ、
前記遷移速度の算出に際し、
前記アクセスログから、前記所定タイミング毎に、前記複数の単位領域のうちアクセス数が最大の単位領域の識別情報を抽出し、
前記所定タイミング毎に抽出された複数の識別情報の数値から、前後する二つの識別情報の数値の差が所定範囲内である、連続する二以上の識別情報の数値を含むグループが抽出された場合、前記グループの終点における前記識別情報の数値と前記グループの始点における前記識別情報の数値との差分と、前記グループの始点から終点までに要する経過時間と、に基づき、前記遷移速度を算出する、
処理を、前記コンピュータに実行させる、付記6または付記7に記載のストレージ制御プログラム。
(付記9)
前記成長時間の算出に際し、
前記アクセスログから、全ての単位領域の識別情報及びアクセス数を抽出し、
前記アクセスログから、最新の所定タイミングでアクセス数が最大の単位領域の最新識別情報を抽出し、
前記所定タイミング毎に抽出された前記全ての識別情報及びアクセス数を参照することで、前記最新の所定タイミングよりも前のタイミングにおいて、前記最新識別情報の単位領域のアクセス数が前記所定値を超える最古の所定タイミングを求め、
前記最新の所定タイミングと前記最古の所定タイミングとの差分時間に基づき、前記成長時間を算出する、
処理を、前記コンピュータに実行させる、付記8に記載のストレージ制御プログラム。
(付記10)
下記計算式によって、前記遷移先単位領域の識別情報の数値を算出し、前記遷移先単位領域を予測する、
処理を、前記コンピュータに実行させる、付記9に記載のストレージ制御プログラム。
[前記遷移先単位領域の識別情報の数値]
=[前記移動対象の単位領域の識別情報の数値]
+([現在時刻]-[前記移動対象の単位領域の移動時刻]+[前記成長時間])*[前記遷移速度]
(付記11)
第1の記憶装置と、前記第1の記憶装置とは異なる性能の第2の記憶装置との間で、複数の単位領域におけるデータを移動させるストレージ制御方法であって、
前記複数の単位領域のそれぞれについてのアクセスログを、一定時間間隔の所定タイミング毎に収集し、
前記アクセスログに基づき、前記複数の単位領域の中から、アクセスが集中する集中状態の単位領域を、前記第2の記憶装置から前記第1の記憶装置への移動対象の単位領域として決定し、
前記アクセスログに基づき、前記複数の単位領域における、前記集中状態の単位領域の遷移速度を算出し、
前記アクセスログに基づき、前記所定タイミングで前記集中状態の単位領域が、当該単位領域に対する単位時間あたりのアクセス数が所定値以下の状態から前記集中状態になるまでに要する成長時間を算出し、
前記遷移速度および前記成長時間に基づき、前記集中状態の単位領域が、決定された前記移動対象の単位領域から遷移する遷移先単位領域を予測する、ストレージ制御方法。
(付記12)
第1タイミングで、決定された前記移動対象の単位領域の前記データを前記第2の記憶装置から前記第1の記憶装置へ移動する一方、前記第1タイミングとは異なる第2タイミングで、予測された前記遷移先単位領域の前記データを前記第2の記憶装置から前記第1の記憶装置へ移動する、付記11に記載のストレージ制御方法。
(付記13)
前記複数の単位領域のそれぞれには、前記複数の単位領域の配置順に対応して変化する昇順または降順の数値が、各単位領域を特定する識別情報として割り当てられ、
前記遷移速度の算出に際し、
前記アクセスログから、前記所定タイミング毎に、前記複数の単位領域のうちアクセス数が最大の単位領域の識別情報を抽出し、
前記所定タイミング毎に抽出された複数の識別情報の数値から、前後する二つの識別情報の数値の差が所定範囲内である、連続する二以上の識別情報の数値を含むグループが抽出された場合、前記グループの終点における前記識別情報の数値と前記グループの始点における前記識別情報の数値との差分と、前記グループの始点から終点までに要する経過時間と、に基づき、前記遷移速度を算出する、付記11または付記12に記載のストレージ制御方法。
(付記14)
前記成長時間の算出に際し、
前記アクセスログから、前記所定タイミング毎に、全ての単位領域の識別情報及びアクセス数を抽出し、
前記アクセスログから、最新の所定タイミングでアクセス数が最大の単位領域の最新識別情報を抽出し、
前記所定タイミング毎に抽出された前記上位n個の単位領域の識別情報及びアクセス数を参照することで、前記最新の所定タイミングよりも前のタイミングにおいて、前記最新識別情報の単位領域のアクセス数が前記所定値を超える最古の所定タイミングを求め、
前記最新の所定タイミングと前記最古の所定タイミングとの差分時間に基づき、前記成長時間を算出する、付記13に記載のストレージ制御方法。
(付記15)
下記計算式によって、前記遷移先単位領域の識別情報の数値を算出し、前記遷移先単位領域を予測する、付記14に記載のストレージ制御方法。
[前記遷移先単位領域の識別情報の数値]
=[前記移動対象の単位領域の識別情報の数値]
+([現在時刻]-[前記移動対象の単位領域の移動時刻]+[前記成長時間])*[前記遷移速度]