(57)【特許請求の範囲】
【請求項１】
第１の記憶装置の記憶領域を第１のサイズで分割した複数の単位領域の中から、前記第１の記憶装置とは異なる性能の第２の記憶装置へ第１のデータを移動させる移動対象の単位領域を決定する決定部と、
前記移動対象の単位領域の決定に応じて、前記第１のサイズよりも小さな第２のサイズの領域に記憶された第２のデータを前記第１の記憶装置から前記第２の記憶装置へ移動させる移動要求を発行する制御部と、
前記移動要求に応じて、前記第２のデータの移動を行ない、前記第２のデータの移動中における前記移動要求とは異なる入出力要求への応答性能に関する情報を取得する取得部と、
前記取得部が取得した前記応答性能に関する情報に基づいて、前記第１のデータの移動処理の実行可否を判定する判定部と、
前記判定部の判定結果に応じて、前記第１のデータの移動処理を実行する移動部と、
をそなえることを特徴とする、ストレージ制御装置。
【請求項２】
前記判定部は、前記応答性能に関する情報が前記応答性能の劣化を示す場合、前記第１のデータの移動処理の実行を行なわないと判定することを特徴とする、請求項１記載のストレージ制御装置。
【請求項３】
前記応答性能は応答時間を含み、
前記取得部は、前記第２のデータの移動中における前記応答時間が所定の閾値を超えた回数をカウントするカウンタをそなえ、
前記判定部は、前記カウンタのカウント値に基づいて前記第１のデータの移動処理の実行可否を判定することを特徴とする、請求項１又は請求項２記載のストレージ制御装置。
【請求項４】
前記第１の記憶装置から前記第２の記憶装置への移動対象の単位領域を示す情報を格納するキューをそなえ、
前記制御部は、前記キューに前記単位領域を示す情報が格納されている場合に前記第２のデータの移動要求を発行し、
前記判定部は、前記応答性能に関する情報に基づいて前記第１のデータの移動処理を実行すると判定した場合、前記キューに格納された前記単位領域を示す情報を取り出して前記移動部へ通知する
ことを特徴とする、請求項１〜３のいずれか１項記載のストレージ制御装置。
【請求項５】
前記決定部は、所定のタイミングで、前記第２の記憶装置の記憶領域における前記単位領域ごとの入出力要求数に基づき移動対象の第１領域を決定し、
前記第１領域に基づいて、前記入出力要求数が所定時間後に増加する第２領域を予測する予測部と、
前記決定部が前記第１領域の移動を前記移動部へ指示しなかったタイミングで、当該タイミングから前記所定時間後に前記入出力要求数が増加する第３領域を前記第２領域に基づき取得し、前記第３領域に記憶されたデータの移動を前記移動部へ指示する指示部と、をそなえる
ことを特徴とする、請求項１〜４のいずれか１項記載のストレージ制御装置。
【請求項６】
前記予測部は、前記決定部が複数のタイミングで決定した複数の第１領域に基づいて、前記第２の記憶装置の記憶領域における前記入出力要求数が増加する領域の遷移速度を取得し、取得した前記遷移速度に基づいて、前記第２領域を予測することを特徴とする、請求項５記載のストレージ制御装置。
【請求項７】
前記指示部は、前記予測部が前記第２領域を予測した時刻と現在時刻との差分の時間と、前記予測部が取得した前記遷移速度と、前記第２領域とに基づいて、前記第３領域を決定することを特徴とする、請求項６記載のストレージ制御装置。
【請求項８】
コンピュータに、
第１の記憶装置の記憶領域を第１のサイズで分割した複数の単位領域の中から、前記第１の記憶装置とは異なる性能の第２の記憶装置へ第１のデータを移動させる移動対象の単位領域を決定し、
前記移動対象の単位領域の決定に応じて、前記第１のサイズよりも小さな第２のサイズの領域に記憶された第２のデータについて前記第１の記憶装置から前記第２の記憶装置への移動処理を実行し、
前記第２のデータの移動中における前記移動処理の要求とは異なる入出力要求への応答性能に関する情報を取得し、
取得した前記応答性能に関する情報に基づいて、前記第１のデータの移動処理の実行可否を判定し、
判定結果に応じて、前記第１のデータの移動処理を実行する、
処理を実行させることを特徴とする、ストレージ制御プログラム。
【請求項９】
コンピュータが、
第１の記憶装置の記憶領域を第１のサイズで分割した複数の単位領域の中から、前記第１の記憶装置とは異なる性能の第２の記憶装置へ第１のデータを移動させる移動対象の単位領域を決定し、
前記移動対象の単位領域の決定に応じて、前記第１のサイズよりも小さな第２のサイズの領域に記憶された第２のデータを前記第１の記憶装置から前記第２の記憶装置へ移動させる移動要求を発行し、
前記移動要求に応じて、前記第２のデータの移動を行ない、前記第２のデータの移動中における前記移動要求とは異なる入出力要求への応答性能に関する情報を取得し、
取得した前記応答性能に関する情報に基づいて、前記第１のデータの移動処理の実行可否を判定し、
判定結果に応じて、前記第１のデータの移動処理を実行する、
ことを特徴とする、ストレージ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、ストレージ制御プログラム、及びストレージ制御方法に関する。
【背景技術】
【０００２】
データを格納するストレージシステムとして、複数の記憶媒体（記憶装置）を組み合わせた階層ストレージシステムが用いられることがある。複数の記憶媒体としては、例えば高速アクセスが可能であるが比較的低容量で高価格なＳＳＤ（Solid State Drive）、及び大容量で低価格であるが比較的低速なＨＤＤ（Hard Disk Drive）が挙げられる。
【０００３】
階層ストレージシステムでは、アクセス頻度が低い記憶領域のデータをＨＤＤに配置する一方、アクセス頻度が高い記憶領域のデータをＳＳＤに配置することで、ＳＳＤの使用効率を高め、システム全体の性能を高めることができる。従って、階層ストレージシステムの性能を向上させるには、アクセス頻度が高い記憶領域のデータを効率的にＳＳＤに配置することが望ましい。
【０００４】
アクセス頻度が高いデータをＳＳＤに配置する手法としては、例えば、前日のアクセス頻度に応じて、１日単位でアクセス頻度が高い領域をＳＳＤに配置する手法が知られている。
【０００５】
しかし、ファイル共有等に用いられるストレージシステムへのアクセスパターンにおいては、数分から数十分程度の比較的短時間に記憶領域の狭い範囲へＩＯ（Input Output）要求（以下、単にＩＯと表記する場合がある）が集中し、時間とともに別の領域に移動することがある。このようなワークロードでは、１日等の長い期間のアクセス頻度の集計では追従できない場合が多い。ワークロードとは、記憶装置へのアクセス分布（記憶装置の利用状況）を表す指標であり、時間の経過と記憶装置のオフセット位置（記憶領域）とに応じて変化する。
【０００６】
短時間に負荷が移動するワークロードに対応する技術として、ＩＯ集中の発生を監視し、ＩＯ集中が発生する都度、ＩＯ集中が発生した領域をＨＤＤからＳＳＤへ移動する技術が知られている（例えば、特許文献１参照）。この技術では、ＩＯ集中が収束したら、ＳＳＤに移動した領域をＨＤＤへ移動してＳＳＤ領域を空けておくことで、次のＩＯ集中が発生した領域を速やかにＳＳＤに移動させることができる。また、このとき、高負荷領域の近傍の領域を繋ぎ合わせた領域を移動対象領域として決定する技術も知られている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１４−１６４５１０号公報
【特許文献２】特開２０１４−１９１５０３号公報
【特許文献３】特開２０１４−２２９１４４号公報
【特許文献４】特開２０１３−１７１３０５号公報
【特許文献５】特開平９−２１４９３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した技術では、ユーザＩＯが発生しているときにＨＤＤ−ＳＳＤ間の移動を行なうため、移動中のユーザＩＯレスポンスが悪化してしまう虞がある。
【０００９】
１つの側面では、本発明は、記憶装置間でのデータの移動において、入力される要求への応答性能の劣化を抑制することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、本件のストレージ制御装置は、第１の記憶装置の記憶領域を第１のサイズで分割した複数の単位領域の中から、前記第１の記憶装置とは異なる性能の第２の記憶装置へ第１のデータを移動させる移動対象の単位領域を決定する決定部をそなえる。また、前記ストレージ制御装置は、前記移動対象の単位領域の決定に応じて、前記第１のサイズよりも小さな第２のサイズの領域に記憶された第２のデータを前記第１の記憶装置から前記第２の記憶装置へ移動させる移動要求を発行する制御部をそなえる。さらに、前記ストレージ制御装置は、前記移動要求に応じて、前記第２のデータの移動を行ない、前記第２のデータの移動中における前記移動要求とは異なる入出力要求への応答性能に関する情報を取得する取得部をそなえる。また、前記ストレージ制御装置は、前記取得部が取得した前記応答性能に関する情報に基づいて、前記第１のデータの移動処理の実行可否を判定する判定部と、前記判定部の判定結果に応じて、前記第１のデータの移動処理を実行する移動部とをそなえる。
【発明の効果】
【００１１】
１つの側面では、記憶装置間でのデータの移動において、入力される要求への応答性能の劣化を抑制することができる。
【図面の簡単な説明】
【００１２】
【図１】一実施形態の一例としての階層ストレージシステムの構成例を示す図である。
【図２】ＩＯＤＢのデータ構造の一例を示す図である。
【図３】移動制御部による制御の一例を説明する図である。
【図４】階層テーブルのデータ構造の一例を示す図である。
【図５】ワークロードの分析例を示す図である。
【図６】ワークロードの分析例を示す図である。
【図７】移動制御部による予測移動制御の処理手順の一例を説明する図である。
【図８】予測セグメントのデータ構造の一例を示す図である。
【図９】移動制御部及び観測処理部による観測移動制御の処理手順の一例を説明する図である。
【図１０】一実施形態に係る動的階層制御におけるＳＳＤの消費量と平均応答時間との関係の一例を、所定の閾値ごとに示した図である。
【図１１】図１０に示すワークロードにおけるＳＳＤ消費量の一例を示す図である。
【図１２】移動制御部及び観測処理部による観測移動制御の処理手順の一例を説明する図である。
【図１３】データ収集部によるデータ収集処理の動作例を説明するフローチャートである。
【図１４】ワークロード分析部による移動判定処理の動作例を説明するフローチャートである。
【図１５】移動制御部による予測移動制御処理の動作例を説明するフローチャートである。
【図１６】移動制御部による観測移動制御処理の動作例を説明するフローチャートである。
【図１７】移動指示部による移動指示通知処理の動作例を説明するフローチャートである。
【図１８】観測処理部による観測処理の動作例を説明するフローチャートである。
【図１９】階層ドライバの移動処理部による転送開始処理の動作例を説明するフローチャートである。
【図２０】階層ドライバの移動処理部による転送完了処理の動作例を説明するフローチャートである。
【図２１】ＩＯマップ部によるＩＯ受信処理の動作例を説明するフローチャートである。
【図２２】図１に示す階層ストレージ制御装置のハードウェア構成例を示す図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
【００１４】
〔１〕一実施形態
〔１−１〕階層ストレージシステムの構成例
図１は一実施形態の一例としての階層ストレージシステム１の構成例を示す図である。図１に示すように、階層ストレージシステム１は、例示的に、階層ストレージ制御装置１０、１以上（図１では１つ）のＳＳＤ２０、及び１以上（図１では１つ）のＨＤＤ３０をそなえることができる。
【００１５】
階層ストレージシステム１は、複数の記憶装置をそなえるストレージ装置の一例である。階層ストレージシステム１は、ＳＳＤ２０及びＨＤＤ３０等の互いに性能の異なる複数の記憶装置を搭載し、図示しないホスト装置に対して階層化された記憶装置の記憶領域を提供することができる。一例として、階層ストレージシステム１は、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）を用いて複数の記憶装置にデータを分散又は冗長化した状態で保存し、ホスト装置に対してＲＡＩＤグループに基づく１以上のストレージボリューム（ＬＵＮ；Logical Unit Number）を提供することができる。
【００１６】
階層ストレージ制御装置１０は、ネットワークを介したホスト装置等からのユーザＩＯに応じて、ＳＳＤ２０及びＨＤＤ３０へのリード又はライト等の種々のアクセスを行なうことができる。階層ストレージ制御装置１０としては、ＰＣ（Personal Computer）やサーバ、又はコントローラモジュール（ＣＭ；Controller Module）等の情報処理装置（コンピュータ）が挙げられる。
【００１７】
また、一実施形態に係る階層ストレージ制御装置１０は、ユーザＩＯのアクセス頻度に応じて、アクセス頻度が低い領域をＨＤＤ３０に配置する一方、アクセス頻度が高い領域をＳＳＤ２０に配置する、動的階層制御を行なうことができる。このように、階層ストレージ制御装置１０は、複数の記憶装置間でのデータの移動を制御するストレージ制御装置の一例である。
【００１８】
なお、階層ストレージ制御装置１０はＬｉｎｕｘ（登録商標）に実装されているモジュール（プログラム）であるｄｅｖｉｃｅ−ｍａｐｐｅｒの機能を用いることができる。例えば階層ストレージ制御装置１０は、動的階層制御において、ｄｅｖｉｃｅ−ｍａｐｐｅｒによりストレージボリュームをセグメント（サブＬＵＮ）単位で監視し、高負荷となったセグメントのデータをＨＤＤ３０からＳＳＤ２０へ移動することで高負荷セグメントへのＩＯを処理することができる。
【００１９】
ここで、セグメントは、ストレージボリュームを所定のサイズで分割した領域であり、動的階層制御における階層移動の最小単位の領域（単位領域）である。例えばセグメントは１ＧＢ（Byte）程度のサイズとすることができる。
【００２０】
ＳＳＤ２０は、種々のデータやプログラム等を格納する記憶装置の一例であり、ＨＤＤ３０は、ＳＳＤ２０とは異なる性能の（例えばより低速な）記憶装置の一例である。一実施形態において、互いに異なる記憶装置（以下、便宜上、第１及び第２の記憶装置と表記する場合がある）として、ＳＳＤ２０等の半導体ドライブ装置及びＨＤＤ３０等の磁気ディスク装置をそれぞれ例に挙げているが、これらに限定されるものではない。第１及び第２の記憶装置として、例えばリード／ライトの速度差等の互いに性能差のある種々の記憶装置が用いられてもよい。
【００２１】
ＳＳＤ２０及びＨＤＤ３０は、ストレージボリューム上のセグメントのデータを格納可能な記憶領域を含み、階層ストレージ制御装置１０は、セグメント単位でＳＳＤ２０−ＨＤＤ３０間の領域移動を制御することができる。
【００２２】
なお、図１の例では、階層ストレージシステム１がそれぞれ１つのＳＳＤ２０及びＨＤＤ３０をそなえるものとしているが、これに限定されるものではなく、複数のＳＳＤ２０及び複数のＨＤＤ３０をそなえてもよい。
【００２３】
〔１−２〕階層ストレージ制御装置の機能構成例
次に、階層ストレージ制御装置１０の機能構成例について説明する。
図１に示すように、階層ストレージ制御装置１０は、例示的に、階層管理部１１、階層ドライバ１２、ＳＳＤドライバ１３、及びＨＤＤドライバ１４をそなえることができる。なお、階層管理部１１はユーザ空間で実行されるプログラムとして実現され、階層ドライバ１２、ＳＳＤドライバ１３、及びＨＤＤドライバ１４はＯＳ（Operating System）空間で実行されるプログラムとして実現されてよい。
【００２４】
階層管理部１１は、ストレージボリュームについてトレースされたＩＯの情報に基づいて、領域移動を行なうセグメントを判定し、判定したセグメントのデータの移動を階層ドライバ１２に指示することができる。ＩＯのトレースでは、ブロックＩＯレベルでのＩＯをトレースするコマンドであるｂｌｋｔｒａｃｅが用いられてよい。なお、ｂｌｋｔｒａｃｅに代えて、ディスクＩＯの利用状況を確認するコマンドであるｉｏｓｔａｔが用いられてもよい。ｂｌｋｔｒａｃｅ及びｉｏｓｔａｔはＯＳ空間で実行される。
【００２５】
階層管理部１１は、例示的に、データ収集部１１ａ、ＩＯＤＢ（Database）１１ｂ、ワークロード分析部１１ｃ、移動指示部１１ｄ、及び移動制御部１１ｅをそなえることができる。
【００２６】
データ収集部１１ａは、ｂｌｋｔｒａｃｅを用いてトレースされたＩＯの情報を所定間隔（例えば１分間隔）で収集及び集計して、集計結果をタイムスタンプとともにＩＯＤＢ１１ｂへ格納することができる。
【００２７】
データ収集部１１ａによるＩＯの情報の集計は、収集したＩＯの情報に基づいて、セグメントごとに、例えばセグメントを特定する情報及びＩＯ数の集計を含んでよい。
【００２８】
ＩＯＤＢ１１ｂは、データ収集部１１ａにより集計されたセグメントごとのＩＯ数に関する情報を記憶するものであり、例えば図示しないメモリ等により実現される。
【００２９】
図２は、図１に示すＩＯＤＢ１１ｂの一例を示す図である。図２に示すように、ＩＯＤＢ１１ｂは、セグメントごとに、セグメントを特定する情報、ＩＯ数、及びタイムスタンプを対応させて記憶してよい。一例として、ＩＯＤＢ１１ｂには、セグメント“０”について、合計ＩＯ数“1000、タイムスタンプ“1”が設定されている。
【００３０】
なお、セグメントを特定する情報として、セグメントの番号（ＩＤ；Identifier）を用いているが、これに代えてストレージボリュームの先頭オフセットが用いられてもよい。ＩＯ数は、セグメントに対して１分間に行なわれたＩＯの合計数（ｉｏｐｍ；IO per minute）である。タイムスタンプは、時刻を識別する識別子であり、例えば時刻そのものが設定されてもよい。
【００３１】
ワークロード分析部１１ｃは、ＩＯＤＢ１１ｂが記憶するセグメントから、ＳＳＤ２０又はＨＤＤ３０にデータを移動するセグメントを選択し、選択したセグメントに関する情報を移動指示部１１ｄ又は移動制御部１１ｅへ通知することができる。
【００３２】
一例として、ワークロード分析部１１ｃは、ＳＳＤ２０にデータを移動するセグメントとして、セグメント数が同時に階層移動を行なう最大のセグメント数（所定数）に達するまで、ＩＯ数が多い順にセグメントを抽出することができる。
【００３３】
ワークロード分析部１１ｃによるセグメントの抽出は、ＩＯ数又はアクセスの集中率（全体に対するＩＯ数の割合）が所定の閾値よりも高いセグメントを抽出することを含んでもよい。また、セグメントの抽出は、ＨＤＤ３０にデータを移動するセグメントとして、例えばＩＯ数が上記所定数に入らなかった、又はＩＯ数若しくはアクセスの集中率が所定の閾値以下となった、ＳＳＤ２０上のセグメントを抽出することを含んでもよい。
【００３４】
さらに、セグメントの抽出は、上記のＳＳＤ２０又はＨＤＤ３０にデータを移動するセグメントの抽出条件に所定回数以上連続して該当したときに、当該セグメントを、ＳＳＤ２０又はＨＤＤ３０にデータを移動するセグメントとして抽出することを含んでもよい。なお、上記ＩＯ数等の他に、リードライト比（ｒｗ比）に基づいてセグメントが選択されてもよい。
【００３５】
ここで、ワークロード分析部１１ｃは、移動指示部１１ｄに対して、ＨＤＤ３０内のセグメントについてＳＳＤ２０への階層移動を指示した後、移動制御部１１ｅに対して、ＳＳＤ２０内の他のセグメントについてＨＤＤ３０への階層移動を指示することができる。一方、ワークロード分析部１１ｃは、或るセグメントについてＳＳＤ２０への階層移動を行なっている間に当該セグメントへの負荷が下がると予測される場合には、当該セグメントについてはＨＤＤ３０への階層移動を抑制し、他のセグメントについてＨＤＤ３０への階層移動を指示してもよい。
【００３６】
例えば、ワークロード分析部１１ｃは、スパイクの平均余命時間と階層移動にかかる時間とに基づいて、階層移動中のセグメントへの負荷が下がるか否かを判断できる。なお、スパイクとは、一部のセグメントに負荷が集中することであり、平均余命時間は、負荷が継続する継続時間から既に実行済みの実行時間を減じた時間であり、ワークロードに応じて定まる値である。管理者等は予め平均余命時間を求め、階層ストレージ制御装置１０に設定しておくことができる。
【００３７】
具体的には、ワークロード分析部１１ｃは、ＳＳＤ２０にデータを移動するセグメントを抽出し、抽出したセグメントについてＳＳＤ２０にデータを移動するコスト（時間）を計算する。そして、ワークロード分析部１１ｃは、平均余命時間が移動時間以下になる場合には、ＨＤＤ３０からＳＳＤ２０への階層移動を行なわずに、ＳＳＤ２０からＨＤＤ３０への階層移動を行なうと判断することができる。
【００３８】
このようなワークロード分析部１１ｃの処理は、所定のタイミングで行なわれてよいが、期間によってはＨＤＤ３０からＳＳＤ２０へ移動するセグメント又はＳＳＤ２０からＨＤＤ３０へ移動するセグメントが抽出及び通知されない場合もある。この場合、ワークロード分析部１１ｃは、移動制御部１１ｅに対して通知を行なわなくてもよいし、セグメントを選択しなかった旨を通知してもよい。なお、所定のタイミングには、例えば１分ごと等の所定の周期で到来するタイミングが含まれてよい。
【００３９】
このように、ワークロード分析部１１ｃは、ＳＳＤ２０の記憶領域を第１のサイズで分割した複数のセグメントの中から、ＨＤＤ３０へ第１のデータを移動させる移動対象の単位領域を決定する決定部の一例である。また、この決定部としてのワークロード分析部１１ｃは、所定のタイミングで、ＨＤＤ３０におけるセグメントごとのＩＯ数に基づき、ＨＤＤ３０からＳＳＤ２０への移動対象のセグメントを決定し、決定したセグメントの移動を移動指示部１１ｄへ指示することができる。
【００４０】
移動指示部１１ｄは、ワークロード分析部１１ｃ又は移動制御部１１ｅからの指示に基づいて、階層ドライバ１２に、選択されたセグメントのデータの、ＨＤＤ３０からＳＳＤ２０への移動、又は、ＳＳＤ２０からＨＤＤ３０への移動を指示することができる。
【００４１】
移動指示部１１ｄによる移動の指示は、選択されたセグメントのストレージボリューム上のオフセットをＨＤＤ３０上のオフセットに変換して、セグメントごとにデータの移動を指示することを含んでよい。例えば、ＨＤＤ３０のセクタサイズが５１２Ｂである場合に、ボリューム上のオフセットが１ＧＢであれば、ＨＤＤ３０上でのオフセットは１×１０２４×１０２４×１０２４／５１２＝２０９７１５２となる。
【００４２】
移動制御部１１ｅは、上述したＩＯ数に基づくセグメントごとの階層移動時にユーザＩＯが発生した場合のＩＯレスポンスの劣化を防ぐために、後述する制御を行なうものである。移動制御部１１ｅは、例示的に、予測セグメントＤＢ１１ｆ及び移動キュー１１ｇをそなえることができる。
【００４３】
図３は移動制御部１１ｅによる制御の一例を説明する図である。図３において「ＩＯ分析による移動」の矢印で示すように、ＳＳＤ２０−ＨＤＤ３０間の階層移動は、ワークロード分析部１１ｃによるＩＯ数の分析によって行なわれる。移動制御部１１ｅは、ＩＯ分析による移動に加えて、予測移動（Proactive Migration）制御処理及び観測移動（Observational Migration）制御処理を行なうことができる。
【００４４】
予測移動制御では、ＩＯ分析によるＨＤＤ３０からＳＳＤ２０への移動に加えて、近い将来ＩＯが集中する（ＩＯ数が増加する）セグメントを予測し、ＩＯが集中する前に当該セグメントをＳＳＤ２０へ移動することができる。予測移動制御により、ＩＯが集中する前に当該セグメントのデータをＳＳＤ２０に移行できるため、ＩＯ数の分析によりＩＯが集中しているセグメントのデータを移行するよりもユーザＩＯへの影響を低減させることができる。
【００４５】
観測移動制御では、ＩＯ分析によるＳＳＤ２０からＨＤＤ３０への移動の実行に先立って、セグメントサイズよりも十分小さなサイズでの階層移動を実行してＨＤＤ３０の負荷が低いタイミングを検出し、検出したタイミングでＩＯ分析による移動を行なうことができる。観測移動制御により、ＩＯ分析による移動対象のセグメントの決定直後に移動を実行するよりもユーザＩＯへの影響を低減させることができる。
【００４６】
予測移動制御及び観測移動制御の詳細については後述する。
【００４７】
階層ドライバ１２は、例示的に、ＩＯマップ部１２ａ、ＩＯキュー１２ｂ、階層テーブル１２ｃ、移動処理部１２ｄ、及び観測処理部１２ｅをそなえることができる。
【００４８】
ＩＯマップ部１２ａは、ホスト装置からのストレージボリュームに対するＩＯ要求を処理することができる。例えばＩＯマップ部１２ａは、階層テーブル１２ｃを用いてＩＯ要求をＳＳＤドライバ１３又はＨＤＤドライバ１４に振り分け、ＳＳＤドライバ１３又はＨＤＤドライバ１４からのＩＯレスポンスをホスト装置に返す処理を行なう。
【００４９】
ＩＯキュー１２ｂは、ＩＯ要求を一時的に格納するＦＩＦＯ（First-In First Out）構造の記憶領域であり、図示しないメモリ等により実現される。
【００５０】
一例として、階層移動中のセグメントに対してＩＯ要求が発行されると、ＩＯマップ部１２ａは、当該セグメントのデータの移動が完了するまで、当該ＩＯ要求をＩＯキュー１２ｂに格納し、ＩＯ要求を保留する。データの移動が完了すると、ＩＯマップ部１２ａは、ＩＯキュー１２ｂから当該ＩＯ要求を読み出して、ＳＳＤドライバ１３又はＨＤＤドライバ１４への振り分けを再開する。
【００５１】
階層テーブル１２ｃは、ＩＯマップ部１２ａによるＩＯ要求の振り分け及び移動処理部１２ｄ等による階層制御に用いられるテーブルであり、例えば図示しないメモリ等により実現される。
【００５２】
階層テーブル１２ｃのデータ構造の一例を図４に示す。図４に示すように、階層テーブル１２ｃは、ＳＳＤ２０にデータが移動されたセグメントごとに、ＳＳＤオフセットと、ＨＤＤオフセットと、状態とを対応させて記憶することができる。
【００５３】
ＳＳＤオフセットは、ＳＳＤ２０にデータが移動されたセグメントのＳＳＤ２０におけるオフセットを示す。ＳＳＤオフセットは、ボリューム上のセグメントサイズ（例えば１ＧＢ）に対応するオフセット“2097152”を単位とする固定値であり、例えば、“0”、“2097152”、“4194304”、“6291456”、．．．となる。
【００５４】
ＨＤＤオフセットは、ＳＳＤ２０にデータが移動されたセグメントのＨＤＤ３０におけるオフセットを示す。ＨＤＤオフセットの値“NULL”は、ＳＳＤオフセットで指定されるＳＳＤ２０の領域が未使用であることを示す。
【００５５】
状態は、セグメントの状態を示し、“allocated”、“Moving（HDD→SSD）”、“Moving（SSD→HDD）”、又は“free”を含む。“allocated”はセグメントがＳＳＤ２０に割り当てられていることを示し、“Moving（HDD→SSD）”はセグメントのデータがＨＤＤ３０からＳＳＤ２０に転送中であることを示す。“Moving（SSD→HDD）”はセグメントのデータがＳＳＤ２０からＨＤＤ３０に転送中であることを示し、“free”はＳＳＤオフセットで指定されるＳＳＤ２０の領域が未使用であることを示す。
【００５６】
ＩＯマップ部１２ａは、上述した階層テーブル１２ｃを参照することで、ＩＯ要求をＳＳＤドライバ１３又はＨＤＤドライバ１４のいずれに振り分けるかを判定することができるとともに、ＩＯ要求がセグメント移動中であるか否かを判定することができる。
【００５７】
移動処理部１２ｄは、移動指示部１１ｄからセグメント移動指示を受け取ると、ＨＤＤ３０又はＳＳＤ２０の移動対象の単位領域に記憶されたデータをＳＳＤ２０又はＨＤＤ３０に移動する移動処理を実行することができる。このとき、移動処理部１２ｄは、階層テーブル１２ｃを参照して、セグメントの移動指示で指定されたセグメントのデータをＳＳＤ２０−ＨＤＤ３０間で移動する。
【００５８】
より具体的に、移動処理部１２ｄは、セグメント移動指示を受け取ると、階層テーブル１２ｃ内のＨＤＤオフセットより“NULL”となっているエントリを探し、セグメント移動指示で指定されたＨＤＤオフセット情報と、状態とを登録する。なお、このとき登録される状態は、“Moving（HDD→SSD）”又は“Moving（SSD→HDD）”となる。そして、移動処理部１２ｄは、ＳＳＤ２０−ＨＤＤ３０間のデータの転送指示をｋｃｏｐｙｄに発行する。
【００５９】
また、移動処理部１２ｄは、ｋｃｏｐｙｄにより全ての領域内のデータの転送が完了すると、階層テーブル１２ｃから転送が完了したエントリを探し、状態が“Moving（HDD→SSD）”の場合、当該状態を“allocated”に変更する。一方、移動処理部１２ｄは、状態が“Moving（SSD→HDD）”である場合、当該状態を“free”に変更するとともに、対応するＨＤＤオフセットを“NULL”に設定する。
【００６０】
なお、ｋｃｏｐｙｄは、ｄｅｖｉｃｅ−ｍａｐｐｅｒに実装され、デバイス間のデータコピーを実行するモジュール（プログラム）であり、ＯＳ空間で実行される。
【００６１】
このように、移動指示部１１ｄ及び移動処理部１２ｄは、ワークロード分析部１１ｃ又は移動制御部１１ｅから指示された領域に記憶されたデータを、セグメントごとにＳＳＤ２０及びＨＤＤ３０間で移動する移動部の一例である。
【００６２】
観測処理部１２ｅは、移動制御部１１ｅからの移動指示（観測移動指示）に応じて、ＳＳＤ２０からＨＤＤ３０へセグメントサイズよりも十分小さなサイズの階層移動を行ない、そのときのユーザＩＯレスポンスを観測することができる。
【００６３】
観測処理部１２ｅの詳細については後述する。
【００６４】
ＳＳＤドライバ１３は、階層ドライバ１２からの指示に基づいてＳＳＤ２０へのアクセスを制御する。ＨＤＤドライバ１４は、階層ドライバ１２からの指示に基づいてＨＤＤ３０へのアクセスを制御する。
【００６５】
〔１−３〕予測移動制御及び観測移動制御の説明
次に、予測移動制御及び観測移動制御の詳細について説明する。
【００６６】
（予測移動制御）
はじめに、図５〜図８を参照して、予測移動制御の詳細について説明する。
【００６７】
Ｓａｍｂａ等のソフトウェアを実装したファイルシステムにおける一部のストレージワークロードの分析を行なうと、全ＩＯの半数以上が全記憶容量の数％未満の領域に１０〜５０分程度発生し、その後別の領域に移動することが分かる。
【００６８】
図５は全容量が４．４ＴＢのシステムにおけるストレージワークロードの分析例を示す図である。図５に示すように、数ＧＢの範囲に全ＩＯの半数以上が１０〜５０分程度集中し、別の領域（ボリュームオフセット、ＬＢＡ；Logical Block Address）にそのＩＯ集中が移動することが分かる。
【００６９】
上述したワークロード分析部１１ｃを含むＩＯ分析では、図５に示すようなＩＯ集中をその都度抽出し、ＳＳＤ２０等の高速ストレージに移動することで性能向上を図ることができる。
【００７０】
図６は図５とは異なるストレージワークロードの分析例を示す図である。図６から、ＩＯ集中の発生するＬＢＡが時間経過とともに移動することが容易に読み取れる。また、このＬＢＡの移動速度は略等速度であることが分かる。
【００７１】
そこで、予測移動制御では、ＩＯ数の増加する（ＩＯの集中する）領域が時間とともに移動（遷移）することに着目し、当該領域の遷移速度に基づき近い将来ＩＯ集中が移動する領域を求め、ＩＯ集中が発生する前にＳＳＤ２０へ移動を行なうことができる。
【００７２】
このとき、ＩＯ分析による移動と予測移動制御による移動とを同時に行なうと、かえってユーザＩＯのレスポンスが悪化する可能性がある。そこで、ＩＯ分析による移動がないタイミングで予測移動制御を行なうことで、ＩＯレスポンスの悪化を回避することができる。
【００７３】
次に、図７を参照して、移動制御部１１ｅによる予測移動制御の処理手順の一例について説明する。図７の（ｉ）に示すように、移動制御部１１ｅは、予測移動制御において、プリロードするセグメントを予測し、予測したセグメントのセグメントＩＤ及び現在時刻を予測セグメントＤＢ１１ｆ（図１参照）に格納することができる。
【００７４】
この（ｉ）の処理は、ＩＯ分析によりＨＤＤ３０からＳＳＤ２０への移動対象として選択された（指示された）セグメントの情報（例えばセグメントＩＤ）をワークロード分析部１１ｃから受信したことを契機に実行されてよい。このとき、移動制御部１１ｅは、ワークロード分析部１１ｃから指示されたセグメントに対して、プリロードする幅Ｎを加算した値を予測（proactive）セグメントとして決定することができる。
【００７５】
プリロードする幅（移動幅）Ｎは、指示されたセグメントから何個先のセグメントを事前にロードさせるかを定義する値であり、ＩＯの集中するセグメントの遷移速度から求めることができる。例えば移動幅Ｎは、予測時間ｔ分後にＩＯが発生するセグメントをＨＤＤ３０からＳＳＤ２０へ事前に読み込ませる場合、遷移速度、例えばオフセット上での移動速度Ｋに予測時間ｔを乗じて算出することができる。
【００７６】
セグメントの移動速度Ｋ（又は移動幅Ｎ）は、階層ストレージシステム１の管理者等による事前のワークロードの分析によって予め取得され階層管理部１１に設定されてもよいし、階層管理部１１が算出してもよい。
【００７７】
階層管理部１１が移動速度Ｋを算出する場合、例えば移動制御部１１ｅは、ワークロード分析部１１ｃが複数のタイミングで決定した複数のセグメントに基づいて、ＨＤＤ３０の記憶領域におけるＩＯ数が増加するセグメントの移動速度を取得することができる。
【００７８】
一例として、移動制御部１１ｅは、今回ワークロード分析部１１ｃから指示されたセグメント及び現在時刻と、前回指示されたセグメント及びそのときの時刻との差分から傾きを求めることで移動速度Ｋを算出することができる。例えばセグメントＩＤがＬＢＡの昇順で採番される場合やセグメントＩＤがセグメントの先頭オフセットであるような場合、移動制御部１１ｅは、（今回のセグメントＩＤ−前回のセグメントＩＤ）／（今回の時刻−前回の時刻）の算出によって移動速度Ｋを求めることができる。
【００７９】
なお、移動速度Ｋは、上述したように今回及び前回指示されたセグメントに基づき求められてもよいし、前々回又はそれ以前の一以上のタイミングで指示されたセグメントについても考慮して、近似により求められてもよい。
【００８０】
移動制御部１１ｅは、上述した処理により予測セグメントを算出すると、タイムスタンプとともに予測セグメントＤＢ１１ｆに格納する。
【００８１】
予測セグメントＤＢ１１ｆは、移動制御部１１ｅにより予測された予測セグメントに関する情報を記憶するものであり、例えば図示しないメモリ等により実現される。
【００８２】
予測セグメントＤＢ１１ｆのデータ構造の一例を図８に示す。予測セグメントＤＢ１１ｆは、例示的に、セグメントを特定する情報及びタイムスタンプを記憶することができる。セグメントを特定する情報は、ＩＯＤＢ１１ｂと同様に、例えばセグメントＩＤであってもよいし、セグメントの先頭オフセット等であってもよい。タイムスタンプは、時刻を識別する識別子であり、例えば時刻そのものが設定される。一例として、予測セグメントＤＢ１１ｆには、セグメント“１０”を予測したときの時刻（タイムスタンプ）として“xxxxxx...x”が設定されている。
【００８３】
このように、移動制御部１１ｅは、ワークロード分析部１１ｃが決定したセグメントに基づいて、ＩＯ数が所定時間後に増加するセグメント（予測セグメント）を予測する予測部の一例である。
【００８４】
また、図７の（ii）に示すように、移動制御部１１ｅは、予測移動制御において、ワークロード分析部１１ｃによる移動指示がないタイミングで、移動指示部１１ｄに対してセグメントの移動を指示することができる。
【００８５】
この（ii）の処理において、移動制御部１１ｅは、予測セグメントＤＢ１１ｆからセグメント（予測セグメント）の情報を取り出し、現在時刻及び移動速度Ｋに基づく補正を行なった上で、補正後のセグメントの移動指示を発行することができる。
【００８６】
ここで、予測セグメントＤＢ１１ｆに格納された予測セグメントは、（ｉ）の処理が行なわれたときの時刻（タイムスタンプ）からｔ分後にＩＯが集中すると予測されたセグメントであり、（ｉ）の処理が行なわれた時点でのプリロードに適したセグメントである。
【００８７】
従って、移動制御部１１ｅは、予測セグメントに対して現在時刻でのプリロードに適したセグメントとする補正を行ない、現在時刻からｔ分後にＩＯが集中すると予測される補正後のセグメントを算出することができる。
【００８８】
例えば、移動制御部１１ｅは、（ｉ）の処理が行なわれた時刻から現在時刻までの間に進んだ（移動した）セグメントを、予測セグメントＤＢ１１ｆから取り出した予測セグメントに反映することで、現在時刻からｔ分後にＩＯが集中するセグメントを取得することができる。
【００８９】
一例として、移動制御部１１ｅは、予測セグメントＤＢ１１ｆから取り出したタイムスタンプ（（ｉ）の処理が行なわれた時刻）と現在時刻との差分に対して移動速度Ｋを乗じることで、当該差分の時間に進む（移動する）セグメント数（又はオフセット量）を取得することができる。そして、移動制御部１１ｅは、予測セグメントＤＢ１１ｆから取り出したセグメントと、取得したセグメント数とを加算して、補正後のセグメントを求めることができる。
【００９０】
なお、上述のように、ＩＯ分析による移動と予測移動制御による移動とを同時に行なうと、かえってユーザＩＯのレスポンスが悪化する可能性がある。ワークロード分析部１１ｃにおいては、上述のように１分間隔等の所定の周期で移動するセグメントの選択が行なわれる。しかし、直前の周期からＩＯが集中するセグメントに変化がないような場合には、図７のワークロード分析部１１ｃの処理において「移動無し」とラベルを付した破線矢印の周期のように、移動するセグメントが選択されない場合もある。
【００９１】
そこで、移動制御部１１ｅは、ワークロード分析部１１ｃからセグメントの移動指示がない（セグメントの情報を通知されない又はセグメントを選択しなかったことを通知された）周期で、上記（ii）の処理を行なうことができる。
【００９２】
このように、移動制御部１１ｅは、ワークロード分析部１１ｃがセグメントの移動を移動指示部１１ｄへ指示しなかったタイミングで、予測した予測セグメントに基づくセグメントの移動を移動指示部１１ｄへ指示する指示部の一例である。
【００９３】
以上のように、移動制御部１１ｅによる予測移動制御によれば、近い将来ＩＯの集中が見込まれるセグメントを、ＨＤＤ３０から性能の良いＳＳＤ２０へ事前に移動することができる。従って、ＨＤＤ３０からＳＳＤ２０へのセグメントの移動中におけるユーザＩＯレスポンスの劣化を抑制することができる。
【００９４】
（観測移動制御）
次に、図９〜図１２を参照して、観測移動制御について説明する。
【００９５】
観測移動制御では、予測移動制御とは逆に、ＳＳＤ２０からＨＤＤ３０へのセグメントの移動中におけるユーザＩＯレスポンスの劣化を抑制することができる。
【００９６】
動的階層移動では、上述のように移動の最小単位としてセグメントが用いられる。セグメントは１ＧＢ程度の比較的大きな単位であるため、ＨＤＤ３０負荷が高いときに階層移動を実行してしまうと、大量のユーザＩＯのレスポンスが悪化する可能性がある。
【００９７】
そこで、観測移動制御では、セグメントサイズよりも十分小さなサイズ（以下、観測移動サイズと表記する）での観測移動をＳＳＤ２０及びＨＤＤ３０の空き領域間で実行し、そのときのユーザＩＯレスポンスが悪化しなければ引き続き本来の（指示された）移動を実行することができる。
【００９８】
なお、観測移動サイズとしては、セグメントサイズが１ＧＢである場合、例えば２００ＭＢ（セグメントサイズの１／５）以下、好ましくは５０ＭＢ（セグメントサイズの１／２０）程度のサイズとすることができる。
【００９９】
但し、観測移動サイズが小さ過ぎる場合、ＨＤＤ３０において負荷が生じる前に移動が完了してしまい、ユーザＩＯレスポンスの観測が正しく行なわれない可能性がある。従って、観測移動サイズは、ＨＤＤ３０に負荷を生じさせ、且つ階層ストレージシステム１全体のユーザＩＯレスポンスに大きな影響を与えない範囲で決定されることが好ましい。
【０１００】
図９を参照して、移動制御部１１ｅ及び観測処理部１２ｅによる観測移動制御の処理手順の一例について説明する。図９の（Ｉ）に示すように、移動制御部１１ｅは、観測移動制御において、ＳＳＤ２０からＨＤＤ３０へのセグメントの移動前に、階層ドライバ１２（観測処理部１２ｅ）へ観測移動を指示することができる（図１２の（１）参照）。
【０１０１】
この（Ｉ）の処理は、ＩＯ分析によりＳＳＤ２０からＨＤＤ３０への移動対象として選択された（指示された）セグメントの情報（例えばセグメントＩＤ）をワークロード分析部１１ｃから受信したことを契機に実行されてよい。このとき、移動制御部１１ｅは、ワークロード分析部１１ｃから指示されたセグメントの情報を、移動キュー１１ｇ（図１参照）に格納することができる。
【０１０２】
移動キュー１１ｇは、ワークロード分析部１１ｃによりＳＳＤ２０からＨＤＤ３０への移動対象として指示されたセグメントを示す情報を一時的に記憶するＦＩＦＯ構造の記憶領域であり、例えば図示しないメモリ等により実現される。移動キュー１１ｇによって、階層移動に係るセグメントの情報をキューイングすることにより、階層移動のタイミングを調整することができる。
【０１０３】
一例として、移動制御部１１ｅは、ＨＤＤ３０へ移動するセグメントの情報をワークロード分析部１１ｃから受信すると、受信順に当該セグメントの情報を移動キュー１１ｇに格納する。また、移動制御部１１ｅは、移動キュー１１ｇにセグメントの情報が１つでも格納されている場合、階層ドライバ１２に対して観測移動を指示する。
【０１０４】
階層ドライバ１２（観測処理部１２ｅ）は、移動制御部１１ｅからの観測移動の指示に応じて、ＳＳＤ２０からＨＤＤ３０への空き領域間での観測移動を、例えばｋｃｏｐｙｄへ指示し（図１２の（２）参照）、ｋｃｏｐｙｄに観測移動を行なわせることができる（図１２の（３）参照）。なお、観測処理部１２ｅは、移動指示とともにＩＯ分析による移動対象のセグメントの情報を受信した場合、当該移動対象のセグメントのうちの一部の領域を観測移動サイズとして選択してもよい。観測移動が行なわれる領域としては上述したものに限定されず、任意の領域が選択されてよい。
【０１０５】
観測処理部１２ｅは、ユーザＩＯの応答性能に関する情報を観測するために、カウンタ１２ｆをそなえることができる（図１参照）。カウンタ１２ｆは、観測移動サイズのデータの移動中においてユーザＩＯに対する応答時間が所定の閾値を超えた回数をカウントすることができる。
【０１０６】
例えば観測処理部１２ｅは、移動制御部１１ｅからの観測指示に応じて、観測移動サイズでの移動を行なう。また、観測処理部１２ｅは、図９の（II）に示すように、所定期間、例えば数秒〜数十秒程度の間、ユーザＩＯへの応答時間を計測し（図１２の（４）参照）、応答時間が所定の閾値を超えた回数をカウンタ１２ｆによりカウントする（図１２の（５）参照）。所定期間を満了すると、観測処理部１２ｅは、カウンタ１２ｆのカウント値を移動制御部１１ｅへ通知することができる（図１２の（６）参照）。なお、所定期間の間、選択した領域の観測移動は繰り返し行なわれてもよい。
【０１０７】
所定の閾値としては、例えば数十ｍｓ〜数百ｍｓ、一例として３００ｍｓ（ミリ秒）程度が挙げられる。
【０１０８】
移動制御部１１ｅは、図９の（III）に示すように、観測指示を発行してから所定期間経過後、観測処理部１２ｅからカウント値を受信すると、受信したカウント値に基づいてセグメントサイズでの階層移動の実行可否を判定することができる。
【０１０９】
例えば移動制御部１１ｅは、受信したカウント値がレスポンスの劣化を示さない値、一例として０である場合、応答の遅いユーザＩＯが発生しなかったため、セグメントサイズでの階層移動の処理を行なうと判定することができる（図９の（III−２）参照）。一方、移動制御部１１ｅは、受信したカウント値がレスポンスの劣化を示す値、一例として０よりも大きい値である場合、応答の遅いユーザＩＯが発生したため、現在のインターバル（周期）でのセグメントサイズでの階層移動の処理を行なわないと判定することができる（図９の（III−１）参照）。
【０１１０】
なお、移動制御部１１ｅは、階層移動の処理を行なうと判定した場合、移動キュー１１ｇに格納されたセグメントの情報を取り出して移動指示部１１ｄへ順次通知し、階層移動を指示することができる（図１２の（７）参照）。指示を受けた移動指示部１１ｄは、上述のように階層ドライバ１２に対して階層移動を指示し（図１２の（８）参照）、移動処理部１２ｄが例えばｋｃｏｐｙｄへ転送を指示して（図１２の（９）参照）、階層移動が実施される（図１２の（１０）参照）。
【０１１１】
一方、移動制御部１１ｅは、階層移動の処理を行なわないと判定した場合、移動キュー１１ｇに格納されたセグメントの情報を取り出さず（階層移動を中止し）、次回の周期まで待機することができる。
【０１１２】
このように、移動制御部１１ｅは、ＳＳＤ２０からＨＤＤ３０への階層移動の指示をワークロード分析部１１ｃから受信すると、階層移動に係るセグメントの情報をキューイングし、観測処理部１２ｅに対してセグメントサイズよりも十分に小さいサイズの移動を空き領域に実行させることができる。そして、移動制御部１１ｅは、ユーザＩＯの悪化が観測された場合には階層移動を中止し、ユーザＩＯの悪化が観測されない場合に、ＩＯ分析で指定されたセグメントの移動を指示することができる。
【０１１３】
従って、ＨＤＤ３０の負荷状況をリアルタイムに検出してＳＳＤ２０からＨＤＤ３０への階層移動の可否を判定し、ユーザＩＯレスポンスに影響を与えないタイミングで階層移動を行なうことができ、ユーザＩＯレスポンスの悪化を抑制することができる。
【０１１４】
以上のように、移動制御部１１ｅは、階層移動処理において、移動対象のセグメントの決定に応じて、第１のサイズよりも小さな第２のサイズの領域に記憶された第２のデータをＳＳＤ２０からＨＤＤ３０へ移動させる移動指示を発行する制御部の一例である。
【０１１５】
また、観測処理部１２ｅは、移動制御部１１ｅからの移動指示に応じて、第１のサイズよりも小さな第２のサイズの領域に記憶されたデータをＳＳＤ２０からＨＤＤ３０へ移動し、当該データの移動中における応答性能に関する情報を取得する取得部の一例である。
【０１１６】
さらに、移動制御部１１ｅは、観測処理部１２ｅが取得した応答性能に関する情報に基づいて、階層移動処理の実行可否を判定する判定部の一例である。
【０１１７】
なお、上述した観測移動サイズやカウンタ１２ｆの所定の閾値の最適値は、階層ストレージシステム１で使用される機器（例えばＳＳＤ２０やＨＤＤ３０、バス、その他の装置等）やワークロードによって変動することが容易に想像できる。一実施形態に係る構成では、１ＧＢのセグメントサイズに対して観測移動サイズを５０ＭＢとし、カウンタ１２ｆの閾値を３００ｍｓとしているが、使用する機器等の条件に応じて、これらのパラメータは適宜変化させてよい。
【０１１８】
図１０は一実施形態に係る動的階層制御（予測移動制御及び観測移動制御を含む）におけるＳＳＤ２０の消費量（ＧＢ）と平均応答時間（ｍｓ）との関係の一例を、所定の閾値ごとに示す図（表）である。また、図１０においては、ＨＤＤに加えてライトバック方式のキャッシュとしてＳＳＤを実装するＦＡＣＥＢＯＯＫ（登録商標）  ＦｌａｓｈＣａｃｈｅでの評価結果を対比例として示している。
【０１１９】
なお、図１０に示す評価では、以下の構成のシステムを用いている。
・ＰＣ…ＣＰＵ（Central Processing Unit）：Ｉｎｔｅｌ（登録商標）  Ｘｅｏｎ（登録商標）  Ｅ５−２６５０Ｌ×２，メモリ：３２ＧＢ，ＯＳ：Ｃｅｎｔ−ＯＳ  ５．４（６４ｂｉｔ）
・ＨＤＤ３０…ＳＡＳ（Serial Attached SCSI（Small Computer Storage Interface））対応，１０，０００ｒｐｍ，４５０ＧＢ×４，ＲＡＩＤ０構成
・ＳＳＤ２０…２４０ＧＢ
【０１２０】
さらに、対象となるワークロードはリードライト比が５６：４４であり、ワークロード容量が２９３ＧＢである。
【０１２１】
図１０において、「ＳＳＤ消費量」は予測移動制御及び観測移動制御を用いて割り当てられるＳＳＤ２０の最大消費量であり、ＦｌａｓｈＣａｃｈｅにも同じ値がセットされている。「ユーザＩＯ閾値」は観測移動制御での所定の閾値である。
【０１２２】
図１０に示すように、ＳＳＤ消費量が７５ＧＢ以上であると、予測・観測移動制御での平均応答時間はＦｌａｓｈＣａｃｈｅよりも短くなり、特に、ＳＳＤ消費量が９９ＧＢの場合には、予測・観測移動制御での平均応答時間はＦｌａｓｈＣａｃｈｅより４５．９％も高速となることが分かる。
【０１２３】
図１１は図１０に示すワークロードにおけるＳＳＤ消費量の一例を示す図である。図１１に示すように、移動制御部１１ｅによる予測移動制御及び観測移動制御が実施されている場合、ユーザＩＯレスポンスが所定の閾値を下回ると、２０分程度でＳＳＤ消費量が０まで減少することが分かる。また、図１１において、所定の閾値が大きいほどＳＳＤ２０の使用量は減少し、使用量が０になるまでの時間も短くなることが分かる。
【０１２４】
図１０及び図１１に示す評価結果から、所定の閾値を小さくするとＳＳＤ消費量は増加するが応答時間は短くなり、所定の閾値を大きくするとＳＳＤ消費量は減少するが応答時間は長くなることが分かる。
【０１２５】
従って、所定の閾値は、ＳＳＤ２０の容量と要求される応答時間とのトレードオフの関係を考慮して設定されることが好ましい。このため、階層管理部１１及び階層ドライバ１２は、観測移動サイズやカウンタ１２ｆの所定の閾値等のパラメータを最適値に調整する機能をそなえてもよい。
【０１２６】
以上のように、一実施形態に係る階層ストレージシステム１によれば、キャッシングを実装するＦｌａｓｈＣａｃｈｅに対して、平均ユーザＩＯレスポンスを約４０％向上できることが分かる。
【０１２７】
〔１−４〕階層ストレージシステムの動作例
次に、上述の如く構成された階層ストレージシステム１の動作例を、図１３〜図２１を参照して説明する。
【０１２８】
はじめに、図１３を参照してデータ収集部１１ａによるデータ収集処理の動作例を説明する。なお、データ収集部１１ａは、ｂｌｋｔｒａｃｅコマンドを所定時間（例えば６０秒間）実行して、終了することを条件として起動され、データ収集処理を実行するものとする。
【０１２９】
図１３に示すように、データ収集部１１ａは、ｂｌｋｔｒａｃｅコマンドの実行により得られたトレース結果を取り出す（ステップＳ１）。次いで、データ収集部１１ａは、１ＧＢオフセット単位（セグメント単位）で各セグメントのＩＯ数を集計し（ステップＳ２）、タイムスタンプとともにＩＯＤＢ１１ｂに書き込み（ステップＳ３）、このインターバルでの処理が終了する。
【０１３０】
このように、データ収集部１１ａは、定期的に各セグメントについてＩＯ数を監視することで、流動的に変化するワークロードがユーザＩＯに与える影響をワークロード分析部１１ｃにフィードバックすることができる。
【０１３１】
次に、図１４を参照してワークロード分析部１１ｃによる移動判定処理の動作例を説明する。図１４に示すように、ワークロード分析部１１ｃは、ＩＯＤＢ１１ｂから直近のタイムスタンプのセグメントについてＩＯ数を取り出し（ステップＳ１１）、セグメント数が所定数に達するまで、ＩＯ数が多い順に候補セグメントを抽出する（ステップＳ１２）。
【０１３２】
次いで、ワークロード分析部１１ｃは、予め求められた平均余命時間が全候補セグメントに係る移動時間よりも大きいか否かを判定する（ステップＳ１３）。
【０１３３】
平均余命時間が当該移動時間以下の場合（ステップＳ１３のＮｏルート）、処理がステップＳ１５に移行する。一方、平均余命時間が当該移動時間よりも大きい場合（ステップＳ１３のＹｅｓルート）、ワークロード分析部１１ｃは、候補セグメントの情報を移動指示部１１ｄ及び移動制御部１１ｅへそれぞれ通知し、データの移動（ＨＤＤ３０からＳＳＤ２０）を指示し（ステップＳ１４）、処理がステップＳ１５に移行する。
【０１３４】
ステップＳ１５では、ワークロード分析部１１ｃは、ＳＳＤ２０上のセグメントから候補セグメントに含まれないセグメント、例えばＩＯ数が比較的少ないセグメントを抽出する。そして、ワークロード分析部１１ｃは、抽出したセグメントの情報を移動制御部１１ｅへ通知し、データの移動（ＳＳＤ２０からＨＤＤ３０）を指示する（ステップＳ１６）。
【０１３５】
次いで、ワークロード分析部１１ｃは、所定時間、例えば６０秒スリープし（ステップＳ１７）、処理がステップＳ１１に移行する。
【０１３６】
なお、ワークロード分析部１１ｃは、ステップＳ１２において、ＩＯ数又はアクセスの集中率（全体に対するＩＯ数の割合）が所定の閾値よりも高いセグメントを抽出してもよい。また、ワークロード分析部１１ｃは、ステップＳ１５において、ＨＤＤ３０にデータを移動するセグメントとして、例えばＩＯ数又はアクセスの集中率が所定の閾値以下となったＳＳＤ２０上のセグメントを抽出してもよい。さらに、ワークロード分析部１１ｃは、ステップＳ１２及びＳ１５で抽出するセグメントとして、当該抽出条件に所定回数以上連続して該当したセグメントを選択してもよい。
【０１３７】
このように、ワークロード分析部１１ｃは、ＩＯの集中度が高いセグメントのデータをＨＤＤ３０からＳＳＤ２０に移動するように移動指示部１１ｄ及び移動制御部１１ｅに指示することによって、ユーザはＨＤＤ３０のデータに高速にアクセスすることができる。
【０１３８】
また、ワークロード分析部１１ｃは、ＩＯの集中度が低くなったセグメントのデータをＳＳＤ２０からＨＤＤ３０に移動するように移動制御部１１ｅに指示することによって、比較的高価格、低容量のＳＳＤ２０を有効利用することができる。
【０１３９】
次に、図１５を参照して移動制御部１１ｅによる予測移動制御処理の動作例を説明する。図１５に示すように、移動制御部１１ｅは、ワークロード分析部１１ｃから移動指示（ＨＤＤ３０からＳＳＤ２０）を受信したか否かを判定し（ステップＳ２１）、移動指示を受信している場合（ステップＳ２１のＹｅｓルート）、処理がステップＳ２２に移行する。
【０１４０】
ステップＳ２２では、移動制御部１１ｅは、予測移動を行なうセグメントのＩＤ“p_seg_id”を下記（１）式から算出する。
【０１４１】
p_seg_id=seg_id+N      （１）
【０１４２】
ここで、“seg_id”はワークロード分析部１１ｃから移動を指示されたセグメントのＩＤであり、“N”は予測移動（ＨＤＤ３０からＳＳＤ２０へのプリロード）を行なう幅である。なお、セグメントの移動速度を“K”とし、予測時間“t”分後にＩＯが発生するセグメントをプリロードする場合、“N”は下記（２）式から算出される。
【０１４３】
N=K*t      （２）
【０１４４】
次いで、移動制御部１１ｅは、算出した予測セグメントのＩＤ“p_seg_id”を現在時刻“timestamp”とともに予測セグメントＤＢ１１ｆへ格納し（ステップＳ２３）、ワークロード分析部１１ｃが次の移動判定を行なうまでスリープして（ステップＳ２７）、処理がステップＳ２１に移行する。
【０１４５】
一方、ステップＳ２１において、ワークロード分析部１１ｃから移動指示を受信していない場合（ステップＳ２１のＮｏルート）、移動制御部１１ｅは、予測セグメントＤＢ１１ｆ内に予測移動待ちのセグメントが存在するか否かを判定する（ステップＳ２４）。
【０１４６】
予測移動待ちのセグメントが存在しない場合（ステップＳ２４のＮｏルート）、処理がステップＳ２７に移行する。一方、予測移動待ちのセグメントが存在する場合（ステップＳ２４のＹｅｓルート）、移動制御部１１ｅは、予測移動待ちの“p_seg_id”を予測セグメントＤＢ１１ｆから１つ取り出し、下記（３）式を算出する（ステップＳ２５）。
【０１４７】
new_p_seg_id=p_seg_id+(current time - timestamp)*K      （３）
【０１４８】
そして、移動制御部１１ｅは、算出した“new_p_seg_id”を移動処理部１２ｄへ通知し、データの移動（ＨＤＤ３０からＳＳＤ２０）を指示して（ステップＳ２６）、処理がステップＳ２４に移行する。
【０１４９】
このように、移動制御部１１ｅは、ＨＤＤ３０からＳＳＤ２０への移動を指示されたセグメントの情報に基づき予測移動を行なう予測セグメントを算出し、移動指示の無いタイミングで、予測セグメントに基づくセグメントの移動を移動指示部１１ｄへ指示することができる。従って、ワークロード分析部１１ｃの分析による階層移動の動作には影響を与えずに、近い将来ＩＯが集中するセグメントについて効果的な階層移動を行なうことができる。
【０１５０】
次に、図１６を参照して移動制御部１１ｅによる観測移動制御処理の動作例を説明する。図１６に示すように、移動制御部１１ｅは、ワークロード分析部１１ｃから移動指示（ＳＳＤ２０からＨＤＤ３０）を受信したか否かを判定し（ステップＳ３１）、移動指示を受信していない場合（ステップＳ３１のＮｏルート）、処理がステップＳ３３に移行する。
【０１５１】
一方、移動指示を受信している場合（ステップＳ３１のＹｅｓルート）、移動制御部１１ｅは、ワークロード分析部１１ｃから移動を指示されたセグメントのＩＤ“seg_id”を全て移動キュー１１ｇへ挿入し（ステップＳ３２）、処理がステップＳ３３に移行する。
【０１５２】
ステップＳ３３では、移動制御部１１ｅは、移動キュー１１ｇにＨＤＤ３０への移動待ちの“seg_id”が存在するか否かを判定する。移動待ちの“seg_id”が存在しない場合（ステップＳ３３のＮｏルート）、移動制御部１１ｅは、ワークロード分析部１１ｃが次の移動判定を行なうまでスリープし（ステップＳ３７）、処理がステップＳ３１に移行する。
【０１５３】
ステップＳ３３において、移動待ちの“seg_id”が存在する場合（ステップＳ３３のＹｅｓルート）、移動制御部１１ｅは、階層ドライバ１２の観測処理部１２ｅに対して、ＳＳＤ２０及びＨＤＤ３０の空き領域間の移動を指示し、所定時間、例えばＭ秒（Ｍは０以上の実数）スリープする（ステップＳ３４）。
【０１５４】
なお、ステップＳ３４において、移動制御部１１ｅは、移動待ちの“seg_id”の少なくとも１つの情報を観測処理部１２ｅへ通知し、通知したセグメントにおける観測サイズの領域について観測移動を指示してもよい。また、移動制御部１１ｅは、ＳＳＤ２０の空き領域のボリューム上のオフセットをＨＤＤ３０上のオフセットに変換し、変換したオフセットを観測移動の指示に含めてもよい。
【０１５５】
次いで、移動制御部１１ｅは、観測処理部１２ｅから通知されたカウンタ１２ｆのカウント値が０であるか否かを判定する（ステップＳ３５）。カウント値が０ではない場合（ステップＳ３５のＮｏルート）、処理がステップＳ３７に移行する。一方、カウント値が０である場合（ステップＳ３５のＹｅｓルート）、移動制御部１１ｅは、移動キュー１１ｇ内の“seg_id”を順番に取り出して移動指示部１１ｄへ通知し、データの移動（ＳＳＤ２０からＨＤＤ３０）を指示して（ステップＳ３６）、処理がステップＳ３７に移行する。
【０１５６】
なお、ステップＳ３５におけるカウント値の判定閾値は０に限定されるものではなく、観測処理部１２ｅでのカウンタ１２ｆの所定の閾値との関係で他の値が設定されてもよい。
【０１５７】
このように、移動制御部１１ｅは、ＳＳＤ２０からＨＤＤ３０へのセグメントの移動前に、観測処理部１２ｅに対して観測サイズでの観測移動を指示し、観測移動中のユーザＩＯの応答性能に関する情報に応じてセグメントの移動を行なうことができる。従って、ワークロード分析部１１ｃの分析による階層移動の動作を、ユーザＩＯレスポンスへの影響が無い（小さい）タイミングで実施することができる。
【０１５８】
次に、図１７を参照して移動指示部１１ｄによる移動指示通知処理の動作例を説明する。図１７に示すように、移動指示部１１ｄは、ワークロード分析部１１ｃ又は移動制御部１１ｅからの移動指示を待ち受け（ステップＳ４１）、移動指示を受け取ると、各セグメントのボリューム上のオフセットをＨＤＤ３０上のオフセットに変換する（ステップＳ４２）。
【０１５９】
そして、移動指示部１１ｄは、セグメントごとに、ＨＤＤ３０上のオフセットと、データの移動方向とを階層ドライバ１２（移動処理部１２ｄ）へ通知し（ステップＳ４３）、処理がステップＳ４１に移行する。このとき移動処理部１２ｄへ通知されるデータの移動方向は、ＨＤＤ３０からＳＳＤ２０、又は、ＳＳＤ２０からＨＤＤ３０となる。
【０１６０】
このように、移動指示部１１ｄが各セグメントのボリューム上のオフセットをＨＤＤ３０上のオフセットに変換することによって、階層ドライバ１２はＳＳＤ２０とＨＤＤ３０との間でデータを移動することができる。
【０１６１】
次に、図１８を参照して観測処理部１２ｅによる観測処理の動作例を説明する。図１８に示すように、観測処理部１２ｅは、移動制御部１１ｅからのＳＳＤ２０及びＨＤＤ３０の空き領域間の移動指示（観測移動指示）を待ち受け（ステップＳ５１）、観測移動指示を受け取ると、カウンタ１２ｆを初期化する（ステップＳ５２）。
【０１６２】
次いで、観測処理部１２ｅは、ＳＳＤ２０の空き領域からＨＤＤ３０の空き領域へのデータの転送指示をｋｃｏｐｙｄに対して行なう（ステップＳ５３）。このとき、観測処理部１２ｅは、所定時間、例えばＭ秒のカウントを行なう。なお、観測処理部１２ｅは、移動する対象領域の特定に移動制御部１１ｅから通知されたオフセットの情報を用いてもよく、階層テーブル１２ｃを参照してもよい。また、観測移動の観測サイズはセグメントサイズよりも十分小さいサイズであり、一実施形態の例では、１ＧＢのセグメントサイズに対して、観測サイズは２００〜５０ＭＢ程度となる。
【０１６３】
そして、観測処理部１２ｅは、観測移動中のユーザＩＯレスポンスを監視し、所定の閾値を超えたユーザＩＯレスポンスをカウンタ１２ｆにより計数して（ステップＳ５４）、Ｍ秒が経過したか否かを判定する（ステップＳ５５）。
【０１６４】
Ｍ秒経過していない場合（ステップＳ５５のＮｏルート）、処理がステップＳ５４に移行する。一方、Ｍ秒経過した場合（ステップＳ５５のＹｅｓルート）、観測処理部１２ｅは、カウント値を移動制御部１１ｅへ通知し（ステップＳ５６）、処理がステップＳ５１に移行する。
【０１６５】
このように、観測処理部１２ｅは、観測移動中のユーザＩＯレスポンスをリアルタイムに観測することができるため、階層移動（ＳＳＤ２０からＨＤＤ３０）を行なう最適なタイミングを精度よく検出することができる。
【０１６６】
次に、図１９を参照して階層ドライバ１２の移動処理部１２ｄによる転送開始処理の動作例を説明する。図１９に示すように、移動処理部１２ｄは、移動指示部１１ｄからの移動指示を待ち受け（ステップＳ６１）、移動指示を受け取ると、ＨＤＤ３０からＳＳＤ２０へのデータの移動であるか否かを判定する（ステップＳ６２）。
【０１６７】
ＨＤＤ３０からＳＳＤ２０へのデータの移動である場合（ステップＳ６２のＹｅｓルート）、移動処理部１２ｄは、移動を指示されたセグメントがＳＳＤ２０へ移動済みであるか否かを判定する（ステップＳ６３）。移動済みである場合（ステップＳ６３のＹｅｓルート）、処理がステップＳ６１に移行する。
【０１６８】
一方、移動済みでない場合（ステップＳ６３のＮｏルート）、移動処理部１２ｄは、階層テーブル１２ｃ内のＨＤＤオフセットより“NULL”となっているエントリを探索し、ＨＤＤオフセット情報と状態とを登録する。このとき移動処理部１２ｄが登録する状態は“Moving（HDD→SSD）”となる。そして、移動処理部１２ｄは、ＨＤＤ３０からＳＳＤ２０へのデータの転送指示をｋｃｏｐｙｄへ発行し（ステップＳ６４）、処理がステップＳ６１に移行する。
【０１６９】
ステップＳ６２において、移動指示がＨＤＤ３０からＳＳＤ２０へのデータの移動ではない場合（ステップＳ６２のＮｏルート）、移動処理部１２ｄは、階層テーブル１２ｃ内のＨＤＤオフセットよりセグメントを探索し、ＨＤＤオフセット情報と状態とを登録する。このとき移動処理部１２ｄが登録する状態は“Moving（SSD→HDD）”となる。そして、移動処理部１２ｄは、ＳＳＤ２０からＨＤＤ３０へのデータの転送指示をｋｃｏｐｙｄへ発行し（ステップＳ６５）、処理がステップＳ６１に移行する。
【０１７０】
次に、図２０を参照して階層ドライバ１２の移動処理部１２ｄによる転送完了処理の動作例を説明する。図２０に示すように、移動処理部１２ｄは、ｋｃｏｐｙｄによる転送の完了を待ち（ステップＳ７１）、転送が完了すると、転送が完了した階層テーブル１２ｃのエントリをＨＤＤオフセットを用いて探索する（ステップＳ７２）。
【０１７１】
そして、移動処理部１２ｄは、探索したエントリについて、状態が“Moving（HDD→SSD）”であるか否かを判定する（ステップＳ７３）。状態が“Moving（HDD→SSD）”である場合（ステップＳ７３のＹｅｓルート）、移動処理部１２ｄは、状態を“allocated”に変更し（ステップＳ７４）、処理がステップＳ７１に移行する。
【０１７２】
一方、状態が“Moving（HDD→SSD）”ではない（“Moving（SSD→HDD）”である）場合（ステップＳ７３のＮｏルート）、移動処理部１２ｄは、状態を“free”に変更し、且つ、対応するＨＤＤオフセットを“NULL”に設定して（ステップＳ７５）、処理がステップＳ７１に移行する。
【０１７３】
このように、階層ドライバ１２（移動処理部１２ｄ）が階層テーブル１２ｃを用いてＳＳＤ２０とＨＤＤ３０との間でデータを転送することにより、ワークロード分析部１１ｃ及び移動制御部１１ｅによる動的階層制御が実現される。
【０１７４】
最後に、図２１を参照してＩＯマップ部１２ａによるＩＯ受信処理の動作例を説明する。図２１に示すように、ＩＯマップ部１２ａは、ユーザＩＯの受信を待ち受け（ステップＳ８１）、ユーザＩＯを受け取ると、ユーザＩＯで指定されるオフセットと階層テーブル１２ｃに登録されている各オフセット＋セグメントサイズとを比較する（ステップＳ８２）。
【０１７５】
そして、ＩＯマップ部１２ａは、比較結果に基づき、階層テーブル１２ｃに一致するオフセットが存在し、且つ状態が“allocated”であるか否かを判定する（ステップＳ８３）。一致するオフセットが存在し、且つ状態が“allocated”である場合（ステップＳ８３のＹｅｓルート）、ＩＯマップ部１２ａは、ＳＳＤドライバ１３へＩＯ要求を送付し（ステップＳ８４）、処理がステップＳ８１に移行する。
【０１７６】
一方、一致するオフセットが存在せず、又は状態が“allocated”ではない場合（ステップＳ８３のＮｏルート）、ＩＯマップ部１２ａは、状態が“Moving(HDD→SSD)”又は“Moving(SSD→HDD)”であるか否かを判定する（ステップＳ８５）。状態が“Moving(HDD→SSD)”又は“Moving(SSD→HDD)”ではない場合（ステップＳ８５のＮｏルート）、ＩＯマップ部１２ａは、ＨＤＤドライバ１４へＩＯ要求を送付し（ステップＳ８６）、処理がステップＳ８１に移行する。
【０１７７】
また、ステップＳ８５において、状態が“Moving(HDD→SSD)”又は“Moving(SSD→HDD)”である場合（ステップＳ８５のＹｅｓルート）、ＩＯマップ部１２ａは、当該状態が“free”又は“allocated”に変化するまでＩＯ要求をＩＯキュー１２ｂに格納する。すなわち、ＩＯマップ部１２ａは、ＩＯ要求に係るセグメントの階層移動が完了するまで、ＩＯ要求を保留する（ステップＳ８７）。階層移動が完了すると、ＩＯマップ部１２ａは、ＩＯキュー１２ｂに格納したＩＯ要求を取り出し、処理がステップＳ８３に移行する。
【０１７８】
〔１−５〕階層ストレージ制御装置のハードウェア構成例
次に、図２２を参照して、図１に示す階層ストレージ制御装置１０のハードウェア構成例について説明する。図２２に示すように、階層ストレージ制御装置１０は、例示的に、ＣＰＵ１０ａ、メモリ１０ｂ、記憶部１０ｃ、インタフェース部１０ｄ、及び入出力部１０ｅをそなえることができる。
【０１７９】
ＣＰＵ１０ａは、種々の制御や演算を行なうプロセッサの一例である。ＣＰＵ１０ａは、階層ストレージ制御装置１０内の各ブロックとバスで相互に通信可能に接続されてよい。なお、プロセッサとしては、ＣＰＵ１０ａに代えて、電子回路、例えばＭＰＵ（Micro Processing Unit）等の集積回路（ＩＣ；Integrated Circuit）が用いられてもよい。
【０１８０】
メモリ１０ｂは、種々のデータやプログラムを格納するハードウェアの一例である。図１に示すＩＯＤＢ１１ｂ、予測セグメントＤＢ１１ｆ、移動キュー１１ｇ、及びＩＯキュー１２ｂの少なくとも１つは、メモリ１０ｂの記憶領域によって実現されてもよい。メモリ１０ｂとしては、例えばＲＡＭ（Random Access Memory）等の揮発性メモリが挙げられる。
【０１８１】
記憶部１０ｃは、種々のデータやプログラム等を格納するハードウェアの一例である。記憶部１０ｃとしては、例えばＨＤＤ等の磁気ディスク装置、ＳＳＤ等の半導体ドライブ装置、フラッシュメモリやＲＯＭ（Read Only Memory）等の不揮発性メモリ等の各種記憶装置が挙げられる。
【０１８２】
例えば記憶部１０ｃは、階層ストレージ制御装置１０の各種機能の全部若しくは一部を実現するストレージ制御プログラム１００を格納してもよい。この場合、ＣＰＵ１０ａは、記憶部１０ｃに格納されたストレージ制御プログラム１００をメモリ１０ｂに展開して実行することにより、階層ストレージ制御装置１０の機能を実現することができる。
【０１８３】
インタフェース部１０ｄは、ＳＳＤ２０、ＨＤＤ３０、図示しないホスト装置、又は作業者の作業端末等との間の接続及び通信の制御等を行なう通信インタフェースの一例である。例えばインタフェース部１０ｄは、各種コントローラ、デバイスを接続するアダプタ、及び記録媒体１０ｆに記録されたデータやプログラムを読み出す読取部をそなえてよい。コントローラは、例えばＳＳＤ２０及びＨＤＤ３０との間の通信を制御するＩＯＣ（I/O Controller）を含んでよく、アダプタは、例えばＳＳＤ２０及びＨＤＤ３０を接続するＤＡ（Device Adapter）、及びホスト装置を接続するＣＡ（Channel Adapter）等を含んでよい。なお、ＣＡとしては、例えばＬＡＮ（Local Area Network）、ＳＡＮ（Storage Area Network）、ＦＣ（Fibre Channel）、インフィニバンド（InfiniBand）等に準拠したＣＡが挙げられる。
【０１８４】
読取部は、コンピュータ読取可能な記録媒体１０ｆを接続又は挿入可能な接続端子又は装置を含んでよい。読取部としては、例えばＵＳＢ（Universal Serial Bus）等に準拠したアダプタ、記録ディスクへのアクセスを行なうドライブ装置、ＳＤカード等のフラッシュメモリへのアクセスを行なうカードリーダ等が挙げられる。なお、記録媒体１０ｆにはストレージ制御プログラム１００が格納されてもよい。
【０１８５】
入出力部１０ｅは、マウス、キーボード、操作ボタン等の入力部、並びにディスプレイ等の出力部の少なくとも一部を含むことができる。例えば入力部は、使用者又はオペレータ等による設定の登録や変更、システムのモード選択（切替）等の各種操作やデータの入力等の作業に用いられてもよく、出力部は、作業者等による設定の確認や各種通知等の出力に用いられてもよい。
【０１８６】
なお、上述した階層ストレージ制御装置１０のハードウェア構成は例示である。従って、階層ストレージ制御装置１０内でのハードウェアの増減（例えば任意のブロックの追加や省略）、分割、任意の組み合わせでの統合、バスの追加又は省略等は適宜行なわれてもよい。
【０１８７】
〔２〕その他
上述した一実施形態に係る技術は、以下のように変形、変更して実施することができる。
【０１８８】
例えば、図１に示す階層ストレージ制御装置１０の各機能ブロックは、それぞれ任意の組み合わせで併合してもよく、分割してもよい。
【０１８９】
また、ワークロード分析部１１ｃ及び移動処理部１２ｄは、移動対象の領域をセグメント単位で決定し、移動指示部１１ｄへ階層移動を指示するものとして説明したが、これに限定されるものではない。
【０１９０】
例えばワークロード分析部１１ｃにより特定される移動対象の領域は、高負荷領域の近傍の領域を繋ぎ合わせた領域であってもよい。この場合、ワークロード分析部１１ｃは、移動対象のセグメントの情報として、例えばセグメントＩＤ又はオフセットの範囲を表す情報を移動制御部１１ｅ又は移動指示部１１ｄへ通知してもよい。
【０１９１】
移動制御部１１ｅは、予測移動制御においては、通知された範囲に含まれる複数のセグメントの情報及び当該範囲の領域サイズに基づいて、将来ＩＯが集中する同じサイズの領域を予測すればよい。
【０１９２】
この予測の手法としては、例えば通知された範囲の先頭オフセット、中間のオフセット、又は最終オフセット等の任意のセグメントを代表セグメントとし、代表セグメントについて、移動制御部１１ｅが予測セグメントを算出することが挙げられる。この場合、移動制御部１１ｅは、通知された範囲に含まれるセグメントの数に基づき、補正後の予測セグメントの範囲を求めて移動指示部１１ｄへ通知すればよい。
【０１９３】
或いは、移動制御部１１ｅは、通知された範囲に含まれる複数のセグメントの各々について、それぞれ予測セグメントを求めてもよい。
【０１９４】
また、観測移動制御においては、通知された範囲に含まれる複数のセグメントの各々の情報が移動キュー１１ｇに格納される。従って、移動制御部１１ｅは、ＩＯレスポンスの悪化を検出しない場合には、一実施形態で説明したように、移動キュー１１ｇ内の各セグメントを順番に読み出して移動指示部１１ｄへ階層移動を指示すればよい。
【０１９５】
なお、移動指示部１１ｄは、通知された範囲に含まれる複数のセグメントの各々について、階層ドライバ１２へ移動指示を発行すればよい。
【０１９６】
〔３〕付記
以上の実施形態に関し、更に以下の付記を開示する。
【０１９７】
（付記１）
第１の記憶装置の記憶領域を第１のサイズで分割した複数の単位領域の中から、前記第１の記憶装置とは異なる性能の第２の記憶装置へ第１のデータを移動させる移動対象の単位領域を決定する決定部と、
前記移動対象の単位領域の決定に応じて、前記第１のサイズよりも小さな第２のサイズの領域に記憶された第２のデータを前記第１の記憶装置から前記第２の記憶装置へ移動させる移動指示を発行する制御部と、
前記移動指示に応じて、前記第２のデータの移動を行ない、前記第２のデータの移動中における入出力要求への応答性能に関する情報を取得する取得部と、
前記取得部が取得した前記応答性能に関する情報に基づいて、前記第１のデータの移動処理の実行可否を判定する判定部と、
前記判定部の判定結果に応じて、前記第１のデータの移動処理を実行する移動部と、
をそなえることを特徴とする、ストレージ制御装置。
【０１９８】
（付記２）
前記判定部は、前記応答性能に関する情報が前記応答性能の劣化を示す場合、前記第１のデータの移動処理の実行を行なわないと判定することを特徴とする、付記１記載のストレージ制御装置。
【０１９９】
（付記３）
前記応答性能は応答時間を含み、
前記取得部は、前記第２のデータの移動中における前記応答時間が所定の閾値を超えた回数をカウントするカウンタをそなえ、
前記判定部は、前記カウンタのカウント値に基づいて前記第１のデータの移動処理の実行可否を判定することを特徴とする、付記１又は付記２記載のストレージ制御装置。
【０２００】
（付記４）
前記第１の記憶装置から前記第２の記憶装置への移動対象の単位領域を示す情報を格納するキューをそなえ、
前記制御部は、前記キューに前記単位領域を示す情報が格納されている場合に前記第２のデータの移動指示を発行し、
前記判定部は、前記応答性能に関する情報に基づいて前記第１のデータの移動処理を実行すると判定した場合、前記キューに格納された前記単位領域を示す情報を取り出して前記移動部へ通知する
ことを特徴とする、付記１〜３のいずれか１項記載のストレージ制御装置。
【０２０１】
（付記５）
前記決定部は、所定のタイミングで、前記第２の記憶装置の記憶領域における前記単位領域ごとの入出力要求数に基づき移動対象の第１領域を決定し、
前記第１領域に基づいて、前記入出力要求数が所定時間後に増加する第２領域を予測する予測部と、
前記決定部が前記第１領域の移動を前記移動部へ指示しなかったタイミングで、前記第２領域に基づき取得した第３領域に記憶されたデータの移動を前記移動部へ指示する指示部と、をそなえる
ことを特徴とする、付記１〜４のいずれか１項記載のストレージ制御装置。
【０２０２】
（付記６）
前記決定部は、前記第２の記憶装置から前記第１の記憶装置への前記第１領域に記憶されたデータの移動を前記移動部へ指示し、
前記移動部は、前記決定部から指示された前記第１領域に記憶されたデータ、又は、前記指示部から指示された前記第３領域に記憶されたデータを、互いに異なるタイミングで、前記第２の記憶装置から前記第１の記憶装置へ移動する
ことを特徴とする、付記５記載のストレージ制御装置。
【０２０３】
（付記７）
前記予測部は、前記決定部が複数のタイミングで決定した複数の第１領域に基づいて、前記第２の記憶装置の記憶領域における前記入出力要求数が増加する領域の遷移速度を取得し、取得した前記遷移速度に基づいて、前記第２領域を予測することを特徴とする、付記５又は付記６記載のストレージ制御装置。
【０２０４】
（付記８）
前記指示部は、前記予測部が前記第２領域を予測した時刻と現在時刻との差分の時間と、前記予測部が取得した前記遷移速度と、前記第２領域とに基づいて、前記第３領域を決定することを特徴とする、付記７記載のストレージ制御装置。
【０２０５】
（付記９）
コンピュータに、
第１の記憶装置の記憶領域を第１のサイズで分割した複数の単位領域の中から、前記第１の記憶装置とは異なる性能の第２の記憶装置へ第１のデータを移動させる移動対象の単位領域を決定し、
前記移動対象の単位領域の決定に応じて、前記第１のサイズよりも小さな第２のサイズの領域に記憶された第２のデータについて前記第１の記憶装置から前記第２の記憶装置への移動処理を実行し、
前記第２のデータの移動中における入出力要求への応答性能に関する情報を取得し、
取得した前記応答性能に関する情報に基づいて、前記第１のデータの移動処理の実行可否を判定し、
判定結果に応じて、前記第１のデータの移動処理を実行する、
処理を実行させることを特徴とする、ストレージ制御プログラム。
【０２０６】
（付記１０）
前記判定において、前記応答性能に関する情報が前記応答性能の劣化を示す場合、前記第１のデータの移動処理の実行を行なわないと判定することを特徴とする、付記９記載のストレージ制御プログラム。
【０２０７】
（付記１１）
前記応答性能は応答時間を含み、
前記取得において、前記第２のデータの移動中における前記応答時間が所定の閾値を超えた回数をカウントし、
前記判定において、前記カウント値に基づいて前記第１のデータの移動処理の実行可否を判定することを特徴とする、付記９又は付記１０記載のストレージ制御プログラム。
【０２０８】
（付記１２）
前記コンピュータに、
前記第１の記憶装置から前記第２の記憶装置への移動対象の単位領域を示す情報を格納するキューに前記単位領域を示す情報が格納されている場合に、前記第２のデータの移動処理を実行し、
前記応答性能に関する情報に基づいて前記第１のデータの移動処理を実行すると判定した場合、前記キューに格納された前記単位領域を示す情報を取り出して、前記第１のデータの移動処理を実行する、
処理を実行させることを特徴とする、付記９〜１１のいずれか１項記載のストレージ制御プログラム。
【０２０９】
（付記１３）
前記コンピュータに、
所定のタイミングで、前記第２の記憶装置の記憶領域における前記単位領域ごとの入出力要求数に基づき移動対象の第１領域を決定し、
前記第１領域に基づいて、前記入出力要求数が所定時間後に増加する第２領域を予測し、
前記第１領域の移動を前記移動部へ指示しなかったタイミングで、前記第２領域に基づき取得した第３領域に記憶されたデータの移動処理を実行する、
処理を実行させることを特徴とする、付記９〜１２のいずれか１項記載のストレージ制御プログラム。
【０２１０】
（付記１４）
前記コンピュータに、
前記第１領域に記憶されたデータ、又は、前記第３領域に記憶されたデータを、互いに異なるタイミングで、前記第２の記憶装置から前記第１の記憶装置へ移動する、
処理を実行させることを特徴とする、付記１３記載のストレージ制御プログラム。
【０２１１】
（付記１５）
前記コンピュータに、
複数のタイミングで決定した複数の第１領域に基づいて、前記第２の記憶装置の記憶領域における前記入出力要求数が増加する領域の遷移速度を取得し、
取得した前記遷移速度に基づいて、前記第２領域を予測する、
処理を実行させることを特徴とする、付記１３又は付記１４記載のストレージ制御プログラム。
【０２１２】
（付記１６）
前記コンピュータに、
前記第２領域を予測した時刻と現在時刻との差分の時間と、取得した前記遷移速度と、前記第２領域とに基づいて、前記第３領域を決定する、
処理を実行させることを特徴とする、付記１５記載のストレージ制御プログラム。
【０２１３】
（付記１７）
第１の記憶装置の記憶領域を第１のサイズで分割した複数の単位領域の中から、前記第１の記憶装置とは異なる性能の第２の記憶装置へ第１のデータを移動させる移動対象の単位領域を決定し、
前記移動対象の単位領域の決定に応じて、前記第１のサイズよりも小さな第２のサイズの領域に記憶された第２のデータを前記第１の記憶装置から前記第２の記憶装置へ移動させる移動指示を発行し、
前記移動指示に応じて、前記第２のデータの移動を行ない、前記第２のデータの移動中における入出力要求への応答性能に関する情報を取得し、
取得した前記応答性能に関する情報に基づいて、前記第１のデータの移動処理の実行可否を判定し、
判定結果に応じて、前記第１のデータの移動処理を実行する、
ことを特徴とする、ストレージ制御方法。
【符号の説明】
【０２１４】
１    階層ストレージシステム
１０    階層ストレージ制御装置
１０ａ    ＣＰＵ
１０ｂ    メモリ
１０ｃ    記憶部
１０ｄ    インタフェース部
１０ｅ    入出力部
１０ｆ    記録媒体
１１    階層管理部
１１ａ    データ収集部
１１ｂ    ＩＯＤＢ
１１ｃ    ワークロード分析部
１１ｄ    移動指示部
１１ｅ    移動制御部
１１ｆ    予測セグメントＤＢ
１１ｇ    移動キュー
１２    階層ドライバ
１２ａ    ＩＯマップ部
１２ｂ    ＩＯキュー
１２ｃ    階層テーブル
１２ｄ    移動処理部
１２ｅ    観測処理部
１２ｆ    カウンタ
１３    ＳＳＤドライバ
１４    ＨＤＤドライバ
１００    ストレージ制御プログラム
２０    ＳＳＤ
３０    ＨＤＤ
【図１】
0006497233.tif 000002
【図２】
0006497233.tif 000003
【図３】
0006497233.tif 000004
【図４】
0006497233.tif 000005
【図５】
0006497233.tif 000006
【図６】
0006497233.tif 000007
【図７】
0006497233.tif 000008
【図８】
0006497233.tif 000009
【図９】
0006497233.tif 000010
【図１０】
0006497233.tif 000011
【図１１】
0006497233.tif 000012
【図１２】
0006497233.tif 000013
【図１３】
0006497233.tif 000014
【図１４】
0006497233.tif 000015
【図１５】
0006497233.tif 000016
【図１６】
0006497233.tif 000017
【図１７】
0006497233.tif 000018
【図１８】
0006497233.tif 000019
【図１９】
0006497233.tif 000020
【図２０】
0006497233.tif 000021
【図２１】
0006497233.tif 000022
【図２２】
0006497233.tif 000023