(57)【要約】      （修正有）【課題】互いに性能の異なる複数の記憶装置間でのデータ移動の効率化を図る。【解決手段】階層ストレージ装置の階層管理部は、第１記憶装置３０と、アクセス速度の低い第２記憶装置２０との間でデータを移動させる移動処理を指示するための移動指示を格納するキュー１１ｄをそなえ、移動処理の対象データを決定し、決定した対象データについての移動指示をキューに格納し、第１のタイミングで決定された対象データについての移動指示がキューに格納されるタイミングに先立って、第１のタイミングよりも前の第２のタイミングで決定された第２記憶装置から第１記憶装置への移動指示をキューから削除し、キューに格納された移動指示を読み出し、移動指示に従った移動処理の実行を制御する。第２から第１記憶装置への移動指示における対象データは、第１記憶装置において、アクセス集中が発生しているデータ、又は、アクセス集中の発生が予測されるデータである。【選択図】図９
2020046929.tif 000002
【特許請求の範囲】
【請求項１】
第１記憶装置と、前記第１記憶装置よりもアクセス速度の低い第２記憶装置と、の間でデータを移動させる移動処理を指示するための移動指示を格納するキューと、
前記移動処理の対象データを決定し、決定した対象データについての移動指示を前記キューに格納する決定部と、
第１のタイミングで決定された対象データについての移動指示が前記キューに格納されるタイミングに先立って、前記キューに格納された移動指示のうち、前記第１のタイミングよりも前の第２のタイミングで決定された前記第２記憶装置から前記第１記憶装置への移動指示を削除対象として前記キューから削除する削除部と、
前記キューに格納された移動指示を読み出し、当該移動指示に従った前記移動処理の実行を制御する実行制御部と、をそなえ、
前記第２記憶装置から前記第１記憶装置への移動指示における対象データは、前記第１記憶装置において、アクセス集中が発生しているデータ、又は、アクセス集中の発生が予測されるデータである、情報処理装置。
【請求項２】
前記削除部は、前記キューに格納された前記第２のタイミングで決定された移動指示のうち、前記第１記憶装置から前記第２記憶装置への移動指示を前記削除対象から除外する、請求項１に記載の情報処理装置。
【請求項３】
前記削除部は、前記第２記憶装置から前記第１記憶装置への前記第１のタイミングで決定された移動指示が示す記憶領域と、前記第２のタイミングで決定された前記第１記憶装置から前記第２記憶装置への移動指示が示す記憶領域と、が一致する場合、前記第１記憶装置から前記第２記憶装置への移動指示を前記キューから削除する、請求項２に記載の情報処理装置。
【請求項４】
前記決定部は、前記第２記憶装置から前記第１記憶装置への移動指示における対象データと、当該対象データの優先度とを決定し、決定した対象データについての移動指示を優先度ごとに前記キューに格納し、
前記実行制御部は、前記キューから、優先度の高い移動指示を全て読み出してから、優先度の低い移動指示を読み出す、請求項１〜３のいずれか１項に記載の情報処理装置。
【請求項５】
前記決定部は、前記第２記憶装置から前記第１記憶装置への移動指示における対象データの優先度を、前記第１記憶装置において当該対象データに発生したアクセス数に基づき設定する、請求項１〜４のいずれか１項に記載の情報処理装置。
【請求項６】
前記第１記憶装置における前記対象データの記憶領域に対する書き込みアクセスの有無を、前記対象データの記憶領域を所定の大きさで分割した部分領域ごとに管理する管理情報を記憶する記憶領域をそなえ、
前記実行制御部は、前記第１記憶装置から前記第２記憶装置への移動指示に従って前記移動処理の実行を制御する際に、前記管理情報を参照して、当該移動指示における対象データについて、書き込みアクセスがあった部分領域の数が閾値未満の場合、前記対象データのうち、前記書き込みアクセスがあった部分領域のデータを、前記第１記憶装置から前記第２記憶装置に移動させる、請求項１〜５のいずれか１項に記載の情報処理装置。
【請求項７】
第１記憶装置と、前記第１記憶装置よりもアクセス速度の低い第２記憶装置と、の間でデータを移動させる移動処理の対象データを決定し、
第１のタイミングで決定された対象データについての移動指示をキューに格納し、
前記キューに格納された移動指示のうち、前記第１のタイミングよりも前の第２のタイミングで決定された前記第２記憶装置から前記第１記憶装置への移動指示を削除対象として前記キューから削除し、
前記キューに格納された移動指示を読み出し、当該移動指示に従った前記移動処理の実行を制御する、
処理をコンピュータに実行させ、
前記第２記憶装置から前記第１記憶装置への移動指示における対象データは、前記第１記憶装置において、アクセス集中が発生しているデータ、又は、アクセス集中の発生が予測されるデータである、情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理プログラムに関する。
【背景技術】
【０００２】
データを格納するストレージシステムとして、複数の記憶媒体（記憶装置）を組み合わせた階層ストレージシステムが用いられることがある。複数の記憶媒体には、例えば高速アクセスが可能な高速記憶装置（第１記憶装置）、及び、比較的低速な低速記憶装置（第２記憶装置）、が含まれてよい。
【０００３】
階層ストレージシステムにおいては、ＩＯ（Input Output）アクセスが特定の狭い記憶領域に集中して発生する場合がある。例えば、アクセス頻度が低い記憶領域のデータを低速記憶装置に配置する一方、アクセスが集中発生する領域のデータを高速記憶装置に配置することで、高速記憶装置の使用効率を高め、ＩＯアクセスの集中による性能低下を回避する手法が知られている。
【０００４】
また、このようなＩＯアクセス集中が発生する記憶領域を予測し、低速記憶装置に配置する候補（Ｄｏｗｎ候補）の記憶領域と、高速記憶装置に配置する候補（Ｕｐ候補）の記憶領域とを決定する手法が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１７−０１０１９６号公報
【特許文献２】特開２０１２−０３８２１２号公報
【特許文献３】特開２０１７−０２７３０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記の手法では、例えば、Ｄｏｗｎ候補の記憶領域と、Ｕｐ候補の記憶領域とが同時に存在する場合、Ｕｐ候補が優先され、当該Ｕｐ候補の記憶領域のデータが高速記憶装置に配置される。
【０００７】
しかしながら、Ｕｐ候補の記憶領域の中には、ＩＯアクセス数がそれほど多くなく、高速記憶領域に配置したとしても階層ストレージシステムの性能向上（例えば平均応答時間の削減）効果の小さい記憶領域が含まれることがある。このような記憶領域が高速記憶装置に配置される場合、高速記憶装置の消費量が増加することになり、高速記憶装置及び低速記憶領域間でのデータ移動が非効率となる場合がある。
【０００８】
１つの側面では、本発明は、互いに性能の異なる複数の記憶装置間でのデータ移動の効率化を図ることを目的とする。
【課題を解決するための手段】
【０００９】
１つの側面では、情報処理装置は、キューと、決定部と、削除部と、実行制御部と、をそなえてよい。前記キューは、第１記憶装置と、前記第１記憶装置よりもアクセス速度の低い第２記憶装置と、の間でデータを移動させる移動処理を指示するための移動指示を格納してよい。前記決定部は、前記移動処理の対象データを決定し、決定した対象データについての移動指示を前記キューに格納してよい。前記削除部は、第１のタイミングで決定された対象データについての移動指示が前記キューに格納されるタイミングに先立って、前記キューに格納された移動指示のうち、前記第１のタイミングよりも前の第２のタイミングで決定された前記第２記憶装置から前記第１記憶装置への移動指示を削除対象として前記キューから削除してよい。前記実行制御部は、前記キューに格納された移動指示を読み出し、当該移動指示に従った前記移動処理の実行を制御してよい。前記第２記憶装置から前記第１記憶装置への移動指示における対象データは、前記第１記憶装置において、アクセス集中が発生しているデータ、又は、アクセス集中の発生が予測されるデータであってよい。
【発明の効果】
【００１０】
１つの側面では、互いに性能の異なる複数の記憶装置間でのデータ移動を効率化できる。
【図面の簡単な説明】
【００１１】
【図１】一実施形態の一例としての階層ストレージシステムの構成例を示すブロック図である。
【図２】一実施形態の一例としての階層ストレージ装置の構成例を示すブロック図である。
【図３】ＩＯアクセス情報の一例を示す図である。
【図４】移動候補テーブルの一例を示す図である。
【図５】ＩＯアクセス集中の一例を示す図である。
【図６】ＩＯアクセス集中の一例を示す図である。
【図７】サブＬＵＮの高優先キュー及び低優先キューへの振り分けの一例を示す図である。
【図８】ＩＯアクセス集中が発生するサブＬＵＮの移動例を示す図である。
【図９】一実施形態に係る階層管理部の動作例を説明する図である。
【図１０】一実施形態の一例としての階層ドライバの構成例を示すブロック図である。
【図１１】一実施形態に係る階層ドライバの動作例を説明する図である。
【図１２】図１に示す階層ストレージ装置のハードウェア構成例を示すブロック図である。
【図１３】キュー制御部による処理の動作例を説明するフローチャートである。
【図１４】移動指示部による処理の動作例を説明するフローチャートである。
【図１５】階層ドライバによる階層移動処理の動作例を説明するフローチャートである。
【図１６】階層ドライバよるビットマップ更新処理の動作例を説明するフローチャートである。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図はない。例えば、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
【００１３】
〔１〕構成
〔１−１〕ストレージシステムの構成例
図１は一実施形態の一例としての階層ストレージ装置１をそなえるストレージシステム１００の構成を例示する図である。
【００１４】
図１に示すように、ストレージシステム１００は、例示的に、ＰＣ（Personal Computer）又はサーバ等のホスト装置２と階層ストレージ装置１とをそなえてよい。ホスト装置２と階層ストレージ装置１とは、例えば、ＳＡＳ（Serial Attached Small Computer System Interface）やＦＣ（Fibre Channel）等のインタフェース（ＩＦ；Interface）を介して接続されてよい。
【００１５】
ホスト装置２は、図示しないＣＰＵ（Central Processing Unit）等のプロセッサをそなえてよく、プロセッサによりアプリケーション３を実行することで、種々の機能を実現してよい。
【００１６】
階層ストレージ装置１は、ストレージ装置の一例であり、後述の如く、互いに性能の異なる複数種類の記憶装置をそなえてよく、これらの記憶装置の記憶領域をホスト装置２に提供してよい。階層ストレージ装置１が提供する記憶領域には、ホスト装置２においてアプリケーション３の実行により生成されたデータや、アプリケーション３を実行するために用いられるデータ等が格納されてよい。
【００１７】
ホスト装置２が階層ストレージ装置１の記憶領域に対してデータのライトやリードを行なうことで、ＩＯアクセスが生じる。
【００１８】
〔１−２〕階層ストレージ装置の機能構成例
図２は一実施形態の一例としての階層ストレージ装置１の機能構成を示す図である。図２に示すように、階層ストレージ装置１は、例示的に、階層ストレージ制御装置１０、ＳＳＤ（Solid State Drive）２０、及び、ＤＩＭＭ（Dual Inline Memory Module）３０をそなえてよい。
【００１９】
階層ストレージ制御装置１０は、ホスト装置２からのＩＯアクセスに応じて、ＳＳＤ２０及びＤＩＭＭ３０への種々のアクセスを行なうストレージ制御装置の一例である。例えば、階層ストレージ制御装置１０は、ＳＳＤ２０及びＤＩＭＭ３０へのリード又はライト等のアクセスを行なってよい。階層ストレージ制御装置１０としては、例えば、ＰＣやサーバ、又はコントローラモジュール（ＣＭ；Controller Module）等の情報処理装置が挙げられる。
【００２０】
また、本実施形態に係る階層ストレージ制御装置１０は、ＩＯアクセスの頻度に応じて、アクセス頻度が低い領域をＳＳＤ２０に配置する一方、アクセス頻度が高い領域をＤＩＭＭ３０に配置する、動的階層制御を実現してよい。
【００２１】
ＤＩＭＭ３０は、種々のデータやプログラム等を格納する高速記憶装置又は第１記憶装置（第１記憶部）の一例である。例えば、ＤＩＭＭ３０としては、ＮＶＭ（Non-Volatile Memory；不揮発性メモリ）等の半導体メモリモジュールが用いられてよい。
【００２２】
ＳＳＤ２０は、ＤＩＭＭ３０とは異なる性能の（例えばよりアクセス速度が低い）低速記憶装置又は第２記憶装置（第２記憶部）の一例である。
【００２３】
一実施形態において、互いに異なる記憶装置の組み合わせとして、ＤＩＭＭ３０等の半導体メモリモジュール、ＳＳＤ２０等の半導体ドライブ装置をそれぞれ例に挙げているが、これに限定されるものではない。第１及び第２記憶装置として、互いに性能差（例えばリード／ライト等のＩＯアクセスの速度差）のある種々の記憶装置が用いられてよい。
【００２４】
上述したＳＳＤ２０及びＤＩＭＭ３０は、階層ストレージ装置１におけるストレージボリュームを構成してよい。
【００２５】
以下、ホスト装置２等から認識される１つのストレージボリュームをＬＵＮ（Logical Unit Number）という。さらに、ＬＵＮを予め決められたサイズで分割した１単位（単位領域）をサブＬＵＮ（ｓｕｂ  ＬＵＮ）という。なお、サブＬＵＮのサイズは、例えば、ＭＢ（MegaByte）〜ＧＢ（GigaByte）のオーダで適宜変更して実施することができる。
なお、サブＬＵＮは、セグメント又は単位領域と称されてもよい。
【００２６】
ＳＳＤ２０及びＤＩＭＭ３０の各々は、ストレージボリューム上のサブＬＵＮ（単位領域）のデータを格納可能な記憶領域を含む。階層ストレージ制御装置１０は、サブＬＵＮ単位で、ＳＳＤ２０とＤＩＭＭ３０との間の領域移動を制御してよい。以下、ＳＳＤ２０の記憶領域とＤＩＭＭ３０の記憶領域との間におけるデータの移動をマイグレーション（Migration）という場合がある。
【００２７】
なお、図２では、階層ストレージ装置１がそれぞれ１つのＳＳＤ２０及びＤＩＭＭ３０をそなえるものとしているが、これに限定されるものではなく、それぞれ複数のＳＳＤ２０及びＤＩＭＭ３０をそなえてもよい。
【００２８】
次に、階層ストレージ制御装置１０の詳細について説明する。階層ストレージ制御装置１０は、図２に示すように、例示的に、階層管理部１１、階層ドライバ１２、ＳＳＤドライバ１３及びＤＩＭＭドライバ１４をそなえてよい。なお、例えば、階層管理部１１は、ユーザ空間で実行されるプログラムとして実現されてよく、階層ドライバ１２、ＳＳＤドライバ１３、及び、ＤＩＭＭドライバ１４は、ＯＳ（Operating System）空間で実行されるプログラムとして実現されてよい。
【００２９】
本実施形態においては、階層ストレージ制御装置１０は、例えば、Ｌｉｎｕｘ（登録商標）  ｄｅｖｉｃｅ−ｍａｐｐｅｒの機能を用いるものとする。ｄｅｖｉｃｅ−ｍａｐｐｅｒがストレージボリュームをサブＬＵＮ単位で監視し、高負荷となったサブＬＵＮのデータをＳＳＤ２０からＤＩＭＭ３０へ移動することで高負荷領域へのＩＯを処理する。なお、ｄｅｖｉｃｅ−ｍａｐｐｅｒはコンピュータプログラムとして実装されてよい。
【００３０】
階層管理部１１は、サブＬＵＮに対するデータアクセスを分析することで、ＳＳＤ２０からＤＩＭＭ３０へデータを移動させるサブＬＵＮを特定（移動候補抽出）してよい。また、階層管理部１１は、ＳＳＤ２０からＤＩＭＭ３０に対して、又は、ＤＩＭＭ３０からＳＳＤ２０に対して、サブＬＵＮのデータを移動させる制御を行なってよい。
【００３１】
階層管理部１１は、例えば、ＳＳＤ２０又は／及びＤＩＭＭ３０についてトレースされたＩＯの情報に基づいて、領域移動を行なうサブＬＵＮを判定し、判定したサブＬＵＮのデータの移動を階層ドライバ１２に指示する。
【００３２】
階層ドライバ１２は、ユーザからのストレージボリュームに対するＩＯ要求をＳＳＤドライバ１３又はＤＩＭＭドライバ１４に振り分け、ＳＳＤドライバ１３又はＤＩＭＭドライバ１４からのＩＯレスポンスをユーザに返す。
【００３３】
また、階層ドライバ１２は、階層管理部１１からサブＬＵＮの移動指示（セグメント移動指示）を受け取ると、ＤＩＭＭ３０又はＳＳＤ２０の移動対象の単位領域に記憶されたデータをＳＳＤ２０又はＤＩＭＭ３０に移動する移動処理を実行する。
【００３４】
ＳＳＤドライバ１３は、階層ドライバ１２の指示に基づいてＳＳＤ２０へのアクセスを制御する。ＤＩＭＭドライバ１４は、階層ドライバ１２の指示に基づいてＤＩＭＭ３０へのアクセスを制御する。
【００３５】
〔１−２−１〕階層管理部の説明
階層管理部１１は、図２に示すように、例示的に、データ収集部１１ａ、移動判定部１１ｂ、キュー制御部１１ｃ、キュー１１ｄ、及び、移動指示部１１ｅとしての機能をそなえてよい。
【００３６】
階層管理部１１は、例えば、Ｌｉｎｕｘ上においてはログプール（Log Pool）、サブＬＵＮ移動判定、及び、サブＬＵＮ移動指示の３つのコンポーネントを有する分割・構成変更エンジンとして実装されてよい。そして、これらのログプール、サブＬＵＮ移動判定、及び、サブＬＵＮ移動指示の各コンポーネントが、図２に示すデータ収集部１１ａ、移動判定部１１ｂ及びキュー１１ｄ、並びに、移動指示部１１ｅとしての機能をそれぞれ実現してよい。
【００３７】
（データ収集部１１ａの説明）
データ収集部１１ａは、ＳＳＤ２０又は／ＤＩＭＭ３０に対するＩＯアクセスの情報（ＩＯアクセス情報）を収集し、収集した情報に基づいて、サブＬＵＮごとのＩＯアクセス数を集計してよい。
【００３８】
例えば、データ収集部１１ａは、Ｌｉｎｕｘのｂｌｋｔｒａｃｅを用いてＳＳＤ２０又は／及びＤＩＭＭ３０についてトレースされたＩＯの情報を収集してよい。データ収集部１１ａは、ＩＯトレースにより、例えばｔｉｍｅｓｔａｍｐやＬＢＡ（Logical Block Addressing）、ｒ／ｗ（ｒｅａｄ／ｗｒｉｔｅ）、ｌｅｎｇｔｈ等の情報を採取してよい。なお、ＬＢＡからはサブＬＵＮ  ＩＤを求めることができる。
【００３９】
ここで、ｂｌｋｔｒａｃｅは、ブロックＩＯレベルでのＩＯをトレースするコマンドである。なお、データ収集部１１ａは、ｂｌｋｔｒａｃｅに代えて、ディスクＩＯの利用状況を確認するコマンドであるｉｏｓｔａｔ等の他の手法を用いてＩＯアクセス情報を収集してもよい。なお、ｂｌｋｔｒａｃｅ及びｉｏｓｔａｔはＯＳ空間で実行されてよい。
【００４０】
データ収集部１１ａは、一定時間間隔（ｔ）ごとにサブＬＵＮ単位でＩＯアクセスに関する情報を収集してよい。例えば、階層管理部１１がＮ秒（Ｎは１以上の整数）間隔でサブＬＵＮの移動判定を行なう場合には、一定時間間隔（ｔ）はＮ秒に設定されてよい。
【００４１】
なお、データ収集部１１ａは、各セグメント又は／及び全セグメントへのＩＯのリードライト比（ｒｗ比）を集計し、上述した情報に含めてもよい。
【００４２】
データ収集部１１ａは、収集したＩＯアクセス情報を、例えば移動判定部１１ｂの後述するＤＢ１０１に格納してよい。
【００４３】
図３は実施形態に係るＩＯアクセス情報の一例を示す図である。ＩＯアクセス情報は、ＳＳＤ２０において発生中のＩＯアクセスに関する情報である。なお、図３には、ＩＯアクセス情報をテーブル形式で例示しているが、これに限定されるものではなく、ＩＯアクセス情報は配列等の種々の形態でＤＢ１０１に格納されてよい。
【００４４】
図３に示すように、ＩＯアクセス情報は、項目として、サブＬＵＮごとに、サブＬＵＮ  ＩＤ、ＩＯ数、及びタイムスタンプをそなえてよい。図３の例では、サブＬＵＮ  ＩＤ“0”について、ＩＯ数“10”、タイムスタンプ“1”が設定されている。
【００４５】
サブＬＵＮ  ＩＤは、サブＬＵＮ（エントリ）を特定するための識別情報である。ＩＤとして、例えばストレージボリュームの先頭オフセット等の識別情報が用いられてもよい。ＩＯ数は、例示的に、サブＬＵＮに対して１秒間に行なわれたＩＯの合計数（ＩＯＰＳ；IO Per Second）であってよい。タイムスタンプは、時刻を識別する識別子である。タイムスタンプとして、例えば時刻そのものが用いられてもよい。
【００４６】
このように、データ収集部１１ａは、ＳＳＤ２０又はＤＩＭＭ３０で使用される領域を所定の大きさで分割した複数の単位領域について、入力されたＩＯアクセス要求に関する情報を収集する収集部の一例である。
【００４７】
（移動判定部１１ｂの説明）
移動判定部１１ｂは、データ収集部１１ａによって収集されたＩＯアクセス情報に基づき、ＳＳＤ２０又はＤＩＭＭ３０におけるデータの移動元となるサブＬＵＮを選択し、選択したサブＬＵＮに関する情報をキュー１１ｄに格納する。キュー１１ｄに格納された情報は、後述する優先度に従って、移動指示部１１ｅに出力される。
【００４８】
移動判定部１１ｂは、図２に示すように、データベース（ＤＢ）１０１、検出部１０２、Ｕｐ判定部１０３、Ｄｏｗｎ判定部１０４、及び、予測移動判定部１０５をそなえてよい。検出部１０２、Ｕｐ判定部１０３、Ｄｏｗｎ判定部１０４、及び、予測移動判定部１０５は、ＩＯアクセス情報が更新される一定時間間隔（ｔ）ごとに、後述する動作を行なってよい。以下、階層管理部１１による一定時間間隔（ｔ）ごとの処理を、１サイクル（インターバル）の処理という場合がある。
【００４９】
ＤＢ１０１は、データ収集部１１ａにより集計されたサブＬＵＮごとのＩＯ数に関する情報を記憶するものであり、例えば図示しないメモリ等により実現される。
【００５０】
検出部１０２は、サブＬＵＮ単位のＩＯアクセスについてのＩＯアクセス情報に基づき、ＳＳＤ２０におけるＩＯアクセス集中の発生を検出する。
【００５１】
ここで、ＩＯアクセス集中とは、例えば、全ボリューム容量の所定％（例えば、０．１％程度〜数％）までの範囲領域に全ＩＯアクセスの半分以上が集まった状態をいう。
【００５２】
検出部１０２は、例えば、上述した所定の範囲領域に、所定の閾値以上（例えば、全ＩＯアクセスの５０％〜９０％程度）のアクセスが集中した状態（ＩＯアクセス集中状態）を検出してよい。
【００５３】
なお、ＩＯアクセスの集中を判断するための範囲領域としては、連続した１つの範囲領域を対象として判断してもよく、また、互いに離散した複数の範囲領域の合計を対象として判断してもよい。１つのＩＯアクセスの継続時間は、非限定的な一例として、最大で８０分前後であり、短いケースでは、１分未満で終息してしまう場合もある。
【００５４】
また、検出部１０２は、ＩＯアクセス集中の終息についても検出してよい。ＩＯアクセス集中の終息とは、今までＩＯアクセスが集中していた範囲領域に関して、ＩＯアクセス数が、上述した閾値未満となった状態をいう。
【００５５】
なお、ＩＯアクセス数が一瞬低下した後に、すぐに回復するケースもある。そこで、検出部１０２は、例えば、今までＩＯアクセスが集中していた範囲領域に関して、ＩＯアクセス数が、上述した閾値未満となってから所定時間（例えば、Ｎ秒間）経過した時点で、ＩＯアクセス集中が終息したと判断してよい。
【００５６】
例えば、検出部１０２は、以下の（Ａ）〜（Ｄ）の手順により特定される領域において、ＩＯアクセス集中の発生を検出してよい。当該手順により特定される領域は、ＳＳＤ２０又はＤＩＭＭ３０への移動候補の領域となる。例えば、検出部１０２は、特定した領域に関する情報（移動候補情報）をＤＢ１０１等に格納してもよい。
【００５７】
（Ａ）検出部１０２は、ＬＵＮ全体のＩＯＰＳが予め定めた閾値ｉ（ｉは正の実数）以上か否かを判定する。なお、ＬＵＮ全体のＩＯＰＳが閾値ｉを超えていない場合、検出部１０２は、処理を終了してよい。この場合、検出部１０２は、次のサイクル（例えばＮ秒後）に再び（Ａ）の処理を行なってよい。
【００５８】
（Ｂ）ＬＵＮ全体のＩＯＰＳが閾値ｉを超えた場合、検出部１０２は、ＩＯアクセス情報を、サブＬＵＮごとに、発生したＩＯアクセス数の多い順に並べ替え、上位ｎ（ｎは整数）までのサブＬＵＮを抽出する。ｎは、１度に移動可能な最大サブＬＵＮ数であり、サブＬＵＮごとのＩＯ数を集計する間隔であるＮ（秒）を、ＳＳＤ２０からＤＩＭＭ３０へのサブＬＵＮ内のデータの移動速度（秒／サブＬＵＮ）で除算して求められてよい。
【００５９】
（Ｃ）検出部１０２は、ＩＯアクセス数が多い順に上位ｎのサブＬＵＮ同士を結合し、１つの領域（以下、サブＬＵＮグループという場合がある）として扱う。また、検出部１０２は、サブＬＵＮグループ内でＩＯアクセス数を合計し、ＩＯアクセス数が多い順にサブＬＵＮグループを並べ替える。
【００６０】
（Ｄ）検出部１０２は、ＩＯアクセス数の多い順にサブＬＵＮグループのＩＯアクセス数を累積していき、全ＩＯのｍ（ｍは正の実数）％を超えたところまでに入ったサブＬＵＮグループを移動候補として特定する。ｍは、移動候補にするサブＬＵＮグループをカットオフするための値である。
【００６１】
図４は移動候補情報の一例を示す図である。図４に示す例においては、便宜上、移動候補情報をテーブルとして示している。以下、移動候補情報をテーブル状に示した情報を移動候補テーブルという。
【００６２】
図４に示すように、移動候補情報は、項目として、サブＬＵＮグループごとに、Group ID、Start sub-LUN、End sub-LUN、及び、ＩＯ数をそなえてよい。図４の例では、Group ID“0”について、Start sub-LUN“4”、終了位置（終了サブＬＵＮ  ＩＤ）“6”、ＩＯ数“50”が設定されている。
【００６３】
Group IDは、サブＬＵＮグループ（エントリ）を特定するための識別情報である。Start sub-LUNは、ＩＯアクセス集中領域の始点となるサブＬＵＮを特定する情報であり、End sub-LUNは、End sub-LUN は、ＩＯアクセス集中領域の終点となるサブＬＵＮを特定する情報である。従って、（End sub-LUN - Start sub-LUN）は、ＩＯアクセス集中が発生している領域の数（領域の大きさ）を表す。ＩＯ数は、例示的に、サブＬＵＮグループに対して１秒間に行なわれたＩＯの合計数（ＩＯＰＳ）であってよい。
【００６４】
検出部１０２は、上述した（Ａ）〜（Ｄ）の手順により特定した移動候補情報を、移動候補テーブルに対して登録してよい。
【００６５】
Ｕｐ判定部１０３は、移動候補情報に基づき、移動候補のサブＬＵＮグループの継続時間を評価し、予め決められた閾値を超えてＩＯアクセス集中が継続するサブＬＵＮグループを移動対象のサブＬＵＮグループと判定する。また、Ｕｐ判定部１０３は、判定したサブＬＵＮグループの情報（例えば、サブＬＵＮグループを構成するサブＬＵＮ  ＩＤ）、及び、当該サブＬＵＮのＩＯアクセス数の情報を、キュー制御部１１ｃに送信する。なお、Ｕｐ判定部１０３は、例えば、ＤＢ１０１に格納されたＩＯアクセス情報からサブＬＵＮのＩＯアクセス数の情報を読み出すことで特定してよい。
【００６６】
例えば、Ｕｐ判定部１０３は、所定の時間に亘ってＩＯアクセス集中が継続した移動候補のサブＬＵＮグループを、ＳＳＤ２０からＤＩＭＭ３０に移動させる移動対象（Ｕｐ対象）として決定してよい。所定の時間は、例えば、サブＬＵＮごとのＩＯ数の集計間隔（ｔ）（Ｎ秒）と、ＩＯアクセス集中として検出された回数（ｃ）（インターバル数）と、の積により決定されてよい。例えば、ｃ＝３の場合、Ｕｐ判定部１０３は、ＩＯアクセス集中が３回に亘って検出されたサブＬＵＮグループをＵｐ対象に決定してよい。
【００６７】
なお、Ｕｐ判定部１０３は、ＩＯアクセス集中の残り継続時間と階層移動にかかる時間とに基づいて、階層移動の間にＩＯアクセス集中が終息するか否かを判定してもよい。残り継続時間は、ＩＯアクセス集中が継続する継続時間から既に実行済みの実行時間を減じた時間であり、ワークロードに応じて定まる値である。
【００６８】
例えば、Ｕｐ判定部１０３は、移動候補のサブＬＵＮグループについてＤＩＭＭ３０に移動するコスト（移動時間）を計算し、残り継続時間が移動時間以下になる場合には、ＳＳＤ２０からＤＩＭＭ３０への階層移動を抑止してもよい。
【００６９】
残り継続時間の算出、及び、残り継続時間を用いたサブＬＵＮの移動制御については、既知の種々の手法により実現可能であり、その詳細な説明を省略する。
【００７０】
Ｄｏｗｎ判定部１０４は、ＤＩＭＭ３０に移動されたサブＬＵＮから、ＳＳＤ２０への移動対象（Ｄｏｗｎ対象）となるサブＬＵＮを判定する。
【００７１】
例えば、Ｄｏｗｎ判定部１０４は、所定の回数（例えば１０回等）に亘って、連続してＵｐ対象のサブＬＵＮグループに含まれない（サブＬＵＮグループの範囲から外れた）サブＬＵＮを、Ｄｏｗｎ対象に決定してよい。なお、Ｄｏｗｎ判定部１０４は、例えば、Ｕｐ対象のサブＬＵＮグループの範囲から外れたサブＬＵＮと、連続して外れた回数とを対応付けた削除情報（図示省略）を管理してよく、削除情報を用いて、Ｄｏｗｎ対象のサブＬＵＮを決定してよい。また、Ｄｏｗｎ判定部１０４は、削除情報に含まれるサブＬＵＮがＵｐ対象のサブＬＵＮグループに含まれることになった場合、当該サブＬＵＮを削除情報から削除してよい。
【００７２】
Ｄｏｗｎ判定部１０４は、Ｄｏｗｎ対象に決定したサブＬＵＮの情報を、キュー制御部１１ｃに送信してよい。
【００７３】
予測移動判定部１０５は、検出部１０２及びＵｐ判定部１０３により判定されたＵｐ対象のサブＬＵＮの移動に加えて、近い将来ＩＯアクセス集中が発生する（ＩＯ数が増加する）サブＬＵＮを予測する。そして、予測移動判定部１０５は、予測したサブＬＵＮの情報を、キュー制御部１１ｃに送信してよい。
【００７４】
予測移動判定部１０５により予測されたサブＬＵＮは、当該サブＬＵＮにおけるＩＯアクセス集中が発生する前に、ＳＳＤ２０からＤＩＭＭ３０に移動される。
【００７５】
予測移動制御により、ＩＯアクセス集中が発生する前に当該サブＬＵＮのデータをＤＩＭＭ３０に移行できるため、現時点でＩＯアクセス集中が発生しているサブＬＵＮのデータをＤＩＭＭ３０に移行するよりもユーザＩＯへの影響を低減させることができる。
【００７６】
なお、図５に例示するように、ＩＯアクセス集中の発生するサブＬＵＮが時間経過とともに移動することがわかる。また、このサブＬＵＮの移動速度は略等速度である。
【００７７】
そこで、予測移動判定部１０５は、ＩＯアクセス集中が発生する領域の遷移速度に基づき、近い将来ＩＯアクセス集中が移動する移動先領域を求め、ＩＯアクセス集中が発生する前に当該移動先領域のデータをＤＩＭＭ３０に移動させる制御を行なう。
【００７８】
予測移動判定部１０５による予測移動制御については、例えば、上述した特許文献１に記載された手法を用いることができる。
【００７９】
（キュー制御部１１ｃの説明）
キュー制御部１１ｃは、移動判定部１１ｂから送信された、ＳＳＤ２０からＤＩＭＭ３０、又は、ＤＩＭＭ３０からＳＳＤ２０への移動対象となるサブＬＵＮの情報を、キュー１１ｄに格納（挿入、プッシュ）する制御を行なう。
【００８０】
例えば、キュー制御部１１ｃは、予測移動判定部１０５から受信した、予測移動対象のサブＬＵＮの情報を、キュー１１ｄの高優先キュー１０６（予測移動用キュー１０６ａ）に格納する。また、キュー制御部１１ｃは、Ｄｏｗｎ判定部１０４から受信した、Ｄｏｗｎ対象のサブＬＵＮの情報を、キュー１１ｄの低優先キュー１０７（Ｄｏｗｎ用キュー１０７ｂ）に格納する。
【００８１】
さらに、キュー制御部１１ｃは、Ｕｐ判定部１０３から受信した、Ｕｐ対象のサブＬＵＮの情報を、キュー１１ｄの高優先キュー１０６（高ＩＯアクセス用キュー１０６ｂ）、又は、低優先キュー１０７（その他用キュー１０７ａ）に選択的に格納する。
【００８２】
図５及び図６は、ＩＯアクセス集中の一例を示す図である。図５及び図６に示すように、ｃ＝２の場合、インターバル２の段階で、インターバル１及び２の連続する２つのインターバルに亘ってＩＯアクセス集中が検出されたサブＬＵＮグループ（サブＬＵＮ  ＩＤ“4”〜“7”を含むグループ）がＵｐ対象して決定される。
【００８３】
ここで、検出部１０２によりＩＯアクセス集中と判定され、Ｕｐ判定部１０３によりＵｐ対象に決定されたサブＬＵＮグループの中でも、サブＬＵＮ間でＩＯアクセス数に偏りが生じる場合がある。
【００８４】
そこで、一実施形態においては、キュー制御部１１ｃは、Ｕｐ対象に決定されたサブＬＵＮグループ内の複数のサブＬＵＮを、ＩＯアクセス数に応じて優先度ごとにグルーピングし、それぞれのグループを互いに優先度の異なるキューに登録する。
【００８５】
換言すれば、キュー制御部１１ｃは、ＳＳＤ２０からＤＩＭＭ３０への移動指示における対象データの優先度を、ＤＩＭＭ３０において当該対象データに発生したアクセス数に基づき設定する。
【００８６】
例えば、キュー制御部１１ｃは、ＩＯアクセス数が予め決められた閾値以上のサブＬＵＮを高優先グループに分類し、ＩＯアクセス数が閾値未満のサブＬＵＮを低優先グループに分類してよい。なお、キュー制御部１１ｃは、例えば、Ｕｐ判定部１０３から受信した、Ｕｐ対象のサブＬＵＮグループを構成する各サブＬＵＮのＩＯ数と、閾値Ｔｈとを比較することで、高優先グループ又は低優先グループへの分類（振り分け）を行なってよい。なお、この閾値Ｔｈは、例えば、検出部１０２による上記（Ａ）の手順で用いられる閾値ｉと同一であってもよい。或いは、閾値Ｔｈは、全ＩＯアクセス数のＸＸ％（例えば５％）等の数であってもよい。
【００８７】
図７は、キュー制御部１１ｃによる、サブＬＵＮの高優先又は低優先キューへの振り分けの一例を示す図である。図７の例では、ＩＯアクセス集中が発生したサブＬＵＮグループ内のサブＬＵＮ  ＩＤ“4”〜“7”のうち、サブＬＵＮ  ＩＤ“4”のＩＯ数が閾値以上であり、サブＬＵＮ  ＩＤ“5”〜“7”のＩＯ数が閾値未満である場合を示す。この場合、キュー制御部１１ｃは、サブＬＵＮ  ＩＤ“4”を高優先グループに分類し、ＩＯ数が閾値以上であり、サブＬＵＮ  ＩＤ“5”〜“7”を低優先グループに分類する。
【００８８】
そして、キュー制御部１１ｃは、高優先グループのサブＬＵＮの情報を、キュー１１ｄの高優先キュー１０６（高ＩＯアクセス用キュー１０６ｂ）に登録してよい。また、キュー制御部１１ｃは、低優先グループのサブＬＵＮの情報を、キュー１１ｄの低優先キュー１０７（その他用キュー１０７ａ）に登録してよい。キュー１１ｄの詳細は後述する。
【００８９】
このように、移動判定部１１ｂ及びキュー制御部１１ｃは、移動処理の対象データを決定し、決定した対象データについての移動指示をキュー１１ｄに格納する決定部の一例である。
【００９０】
図８は、ＩＯアクセス集中が発生するサブＬＵＮの移動例を示す図である。図８に示すように、ＩＯアクセス集中となったサブＬＵＮは、時間経過とともに移動する可能性がある。このため、キュー１１ｄにおいて過去（前回及びそれよりも前）に移動できなかったサブＬＵＮが蓄積されてしまうと、移動判定のタイミングと移動実行のタイミングとにずれが生じることがある。
【００９１】
なお、移動判定のタイミングと移動実行のタイミングとにずれが生じる、とは、移動判定と移動実行とが、互いに異なるインターバル（階層管理部１１による１サイクルの処理）で行なわれる場合をいうものとする。一方、移動判定のタイミングと移動実行のタイミングとが同じである、とは、移動判定と移動実行とが同じインターバル内で行なわれる場合をいうものとする。
【００９２】
図８に示す例では、移動判定が行なわれたタイミングにおいてＩＯアクセス集中が発生しているサブＬＵＮと、移動の実行が行なわれるタイミングにおいてＩＯアクセス集中が発生しているサブＬＵＮとが異なっている。
【００９３】
このように、移動を判定したタイミングと、移動を実行するタイミングとにずれが生じた場合、移動を判定したタイミングでキュー１１ｄに挿入されたＩＤのサブＬＵＮに対して階層移動を行なっても、性能向上効果が得られない可能性がある。
【００９４】
そこで、一実施形態において、キュー制御部１１ｃは、一定時間（例えばＮ秒）ごとに、キュー１１ｄに蓄積されている、予測移動対象及びＵｐ対象のサブＬＵＮ  ＩＤを全てクリア（削除或いは無効化等）してよい。キュー制御部１１ｃによるクリア対象のキュー１１ｄの記憶領域としては、例えば、高優先キュー１０６の予測移動用キュー１０６ａ及び高ＩＯアクセス用キュー１０６ｂ、並びに、低優先キュー１０７のその他用キュー１０７ａが挙げられる。
【００９５】
換言すれば、キュー制御部１１ｃは、第１のタイミングで決定された対象データについての移動指示がキュー１１ｄに格納されるタイミングに先立って、キュー１１ｄに格納された移動指示のうち、第１のタイミングよりも前の第２のタイミングで決定されたＳＳＤ２０からＤＩＭＭ３０への移動指示を削除対象としてキュー１１ｄから削除する削除部の一例である。ここで、ＳＳＤ２０からＤＩＭＭ３０への移動指示における対象データは、ＤＩＭＭ３０において、アクセス集中が発生しているデータ、又は、アクセス集中の発生が予測されるデータである。
【００９６】
これにより、ＤＩＭＭ３０への移動を行なうサブＬＵＮを、移動実行と同一のインターバル内で移動判定されたサブＬＵＮに限定することができ、階層ストレージ制御装置１０の性能向上効果が得られる確率を高めることができる。
【００９７】
なお、低優先キュー１０７のＤｏｗｎ用キュー１０７ｂは、クリア対象となっておらず、キュー制御部１１ｃは、Ｄｏｗｎ対象のサブＬＵＮ  ＩＤをキュー１１ｄに残す、すなわち、削除対象から除外する。このため、Ｄｏｗｎ用キュー１０７ｂには、過去にＳＳＤ２０へ移動できなかったＤｏｗｎ対象のサブＬＵＮの情報が蓄積されることがある。
【００９８】
上述のように、ＩＯアクセス集中が発生するサブＬＵＮは、時間経過とともに移動する傾向があるため、当該Ｄｏｗｎ対象のサブＬＵＮと同一のサブＬＵＮが、今回の移動判定処理により予測移動対象又はＵｐ対象として決定されることがある。
【００９９】
そこで、キュー制御部１１ｃは、キュー１１ｄにおいて、同一のサブＬＵＮ  ＩＤが、予測移動対象又はＵｐ対象用の高優先キュー１０６及びその他用キュー１０７ａと、Ｄｏｗｎ対象用のＤｏｗｎ用キュー１０７ｂと、に重複して登録されることを抑止してよい。
【０１００】
例えば、キュー制御部１１ｃは、現在のＤｏｗｎ用キュー１０７ｂに登録されているサブＬＵＮ  ＩＤの各々と、予測移動判定部１０５及びＵｐ判定部１０３からそれぞれ受信した、予測移動対象及びＵｐ対象のサブＬＵＮ  ＩＤとを比較する。そして、キュー制御部１１ｃは、比較の結果、一致したサブＬＵＮ  ＩＤについては、Ｄｏｗｎ用キュー１０７ｂから削除してよい。
【０１０１】
換言すれば、キュー制御部１１ｃは、第１のタイミングで決定されたＳＳＤ２０からＤＩＭＭ３０への移動指示が示す記憶領域と、キュー１１ｄに格納された第１のタイミングよりも前の第２のタイミングで決定されたＤＩＭＭ３０からＳＳＤ２０への移動指示が示す記憶領域と、が一致する場合、ＤＩＭＭ３０からＳＳＤ２０への移動指示をキュー１１ｄから削除する。
【０１０２】
これにより、ＤＩＭＭ３０に移動される又は移動されたＩＯアクセス集中が発生するサブＬＵＮのデータが、過去にＤｏｗｎ用キュー１０７ｂに登録された指示によってＳＳＤ２０に移動されることを抑制できる。従って、階層ストレージ制御装置１０の性能低下のリスクを下げることができる。
【０１０３】
（キュー１１ｄの説明）
キュー１１ｄは、移動対象のサブＬＵＮの情報（例えばＩＤ）を一時的に格納するＦＩＦＯ（First-In First Out）構造の記憶領域であり、図示しないメモリ等により実現されてよい。
【０１０４】
キュー１１ｄは、ＤＩＭＭ３０と、ＤＩＭＭ３０よりもアクセス速度の低いＳＳＤ２０と、の間でデータを移動させる移動処理を指示するための移動指示を格納してよい。
【０１０５】
図２に示すように、キュー１１ｄは、例示的に、高優先キュー１０６及び低優先キュー１０７をそなえてよい。
【０１０６】
高優先キュー１０６は、移動指示部１１ｅにより優先的に読み出される（出力される）サブＬＵＮ  ＩＤが挿入されるキューであり、予測移動用キュー１０６ａ及び高ＩＯアクセス用キュー１０６ｂを含んでよい。
【０１０７】
予測移動用キュー１０６ａには、予測移動対象のサブＬＵＮ  ＩＤが挿入される。高ＩＯアクセス用キュー１０６ｂには、Ｕｐ対象のサブＬＵＮ  ＩＤの中で優先度の高いサブＬＵＮ  ＩＤが挿入される。
【０１０８】
高優先キュー１０６において、予測移動用キュー１０６ａ及び高ＩＯアクセス用キュー１０６ｂの間では、どちらを優先させてもよい。一実施形態では、予測移動用キュー１０６ａ内のサブＬＵＮ  ＩＤが全て出力されてから、高ＩＯアクセス用キュー１０６ｂ内のサブＬＵＮ  ＩＤが全て出力されるものとするが、これに限定されるものではない。
【０１０９】
例えば、高ＩＯアクセス用キュー１０６ｂ内のサブＬＵＮ  ＩＤが全て出力されてから、予測移動用キュー１０６ａ内のサブＬＵＮ  ＩＤが全て出力されてもよい。或いは、予測移動用キュー１０６ａ及び高ＩＯアクセス用キュー１０６ｂから、交互にサブＬＵＮ  ＩＤが出力されてもよい。
【０１１０】
低優先キュー１０７は、高優先キュー１０６よりも優先度の低いキューであり、その他用キュー１０７ａ及びＤｏｗｎ用キュー１０７ｂを含んでよい。低優先キュー１０７に挿入されたサブＬＵＮ  ＩＤは、高優先キュー１０６からサブＬＵＮ  ＩＤが全て出力されてから（高優先キュー１０６が空になってから）、出力されてよい。
【０１１１】
その他用キュー１０７ａには、Ｕｐ対象のサブＬＵＮ  ＩＤの中で優先度の低いサブＬＵＮ  ＩＤが挿入される。Ｄｏｗｎ用キュー１０７ｂには、Ｄｏｗｎ対象のサブＬＵＮ  ＩＤが挿入される。
【０１１２】
低優先キュー１０７において、その他用キュー１０７ａ及びＤｏｗｎ用キュー１０７ｂの間では、どちらを優先させてもよい。一実施形態では、その他用キュー１０７ａ及びＤｏｗｎ用キュー１０７ｂから、交互にサブＬＵＮ  ＩＤが出力されるものとするが、これに限定されるものではない。例えば、その他用キュー１０７ａ内のサブＬＵＮ  ＩＤが全て出力されてから、Ｄｏｗｎ用キュー１０７ｂ内のサブＬＵＮ  ＩＤが全て出力されてもよいし、逆順であってもよい。
【０１１３】
なお、図２の例では、便宜上、キュー１１ｄが符号１０６ａ、１０６ｂ、１０７ａ、１０７ｂの４つの記憶領域をそなえるものとしたが、これに限定されるものではない。例えば、キュー１１ｄは、１つ以上のＦＩＦＯ構造のメモリの記憶領域を、４つの領域（範囲）に区画して、それぞれの領域を符号１０６ａ、１０６ｂ、１０７ａ、１０７ｂに割り当てたものであってよい。この場合、４つの領域の各々において、サブＬＵＮ  ＩＤの格納位置をポインタによって指定可能であってよい。
【０１１４】
（移動指示部１１ｅの説明）
移動指示部１１ｅは、一定時間間隔（ｔ）（インターバル）ごとに、当該インターバルにおいて可能な範囲で、キュー１１ｄに蓄積されたサブＬＵＮ  ＩＤを順次読み出し、階層ドライバ１２に対して、読み出したサブＬＵＮのデータの階層移動を指示する。
【０１１５】
例えば、移動指示部１１ｅは、インターバルが開始すると、高優先キュー１０６からサブＬＵＮ  ＩＤを１つ取り出し、階層ドライバ１２に当該サブＬＵＮのデータのＤＩＭＭ３０への移動を指示してよい。移動指示部１１ｅは、インターバルの残り時間から移動の実行時間を減算し、残り時間が０になる、或いは、高優先キュー１０６にサブＬＵＮ  ＩＤが存在しなくなるまで、高優先キュー１０６に存在するサブＬＵＮ  ＩＤの移動を指示してよい。
【０１１６】
また、移動指示部１１ｅは、高優先キュー１０６にサブＬＵＮ  ＩＤが存在しなくなると、低優先キュー１０７からサブＬＵＮ  ＩＤを１つ取り出し、階層ドライバ１２に当該サブＬＵＮのデータのＤＩＭＭ３０又はＳＳＤ２０への移動を指示してよい。移動指示部１１ｅは、インターバルの残り時間から移動の実行時間を減算し、残り時間が０になる、或いは、低優先キュー１０７にサブＬＵＮ  ＩＤが存在しなくなるまで、低優先キュー１０７に存在するサブＬＵＮ  ＩＤの移動を指示してよい。
【０１１７】
このように、移動指示部１１ｅは、キュー１１ｄに格納された移動指示を読み出し、当該移動指示に従った移動処理の実行を制御する実行制御部の一例である。
【０１１８】
図９は、階層管理部１１の動作の一例を説明する図である。なお、図９においては、便宜上、一部の構成の図示を省略している。
【０１１９】
上述した一実施形態に係る手法によれば、図９に例示するように、階層管理部１１において、一定時間間隔（例えばＮ秒間隔）で移動判定部１１ｂにＩＯアクセスログが供給される（図９の矢印（１）参照）。
【０１２０】
移動判定部１１ｂでは、一定時間間隔で移動判定が行なわれ、移動対象として決定されたサブＬＵＮの情報が、キュー制御部１１ｃによる振り分けによってキュー１１ｄにプッシュされる（図９の矢印（２）参照）。
【０１２１】
キュー１１ｄに蓄積されたサブＬＵＮの情報は、移動指示部１１ｅにより、一定時間内に実行可能な分だけ読み出され、当該サブＬＵＮのデータのマイグレーションが指示される（図９の矢印（３）参照）。マイグレーションの指示により、階層ドライバ１２（図示省略）によって、ＳＳＤ２０−ＤＩＭＭ３０間においてサブＬＵＮのデータのマイグレーションが実行される。
【０１２２】
一定時間が経過すると、移動指示部１１ｅにより、Ｕｐ処理用のキュー（予測移動用キュー１０６ａ、高ＩＯアクセス用キュー１０６ｂ、その他用キュー１０７ａ）の内容がクリアされる（図９の符号（４−１）参照）。また、移動指示部１１ｅにより、Ｄｏｗｎ処理用のキュー（Ｄｏｗｎ用キュー１０７ｂ）の内容は維持される（図９の符号（４−２）参照）。
【０１２３】
換言すれば、移動判定部１１ｂは、ＳＳＤ２０からＤＩＭＭ３０への移動指示における対象データと、当該対象データの優先度とを決定し、キュー制御部１１ｃは、決定した対象データについての移動指示を優先度ごとにキュー１１ｄに格納する。そして、移動指示部１１ｅは、キュー１１ｄから、優先度の高い移動指示を全て読み出してから、優先度の低い移動指示を読み出す。
【０１２４】
このように、キュー制御部１１ｃ、キュー１１ｄ、及び、移動指示部１１ｅによれば、Ｕｐ対象のサブＬＵＮグループの中で、性能向上効果が大きいサブＬＵＮを優先してＤＩＭＭ３０に配置することができる。また、Ｕｐ対象のサブＬＵＮグループにおける残りのサブＬＵＮを、Ｄｏｗｎ対象のサブＬＵＮとともに、低優先キュー１０７から公平にＤＩＭＭ３０又はＳＳＤ２０に配置することができる。
【０１２５】
これにより、階層ストレージ制御装置１０の性能を維持したまま、ＤＩＭＭ３０の消費量を引き下げることができるため、階層間でのデータ移動の効率化を図ることができる。
【０１２６】
〔１−２−２〕階層ドライバの説明
図１０は、階層ドライバ１２の機能構成例を示す図である。なお、図１０においては、便宜上、階層ストレージ制御装置１０における階層管理部１１等の図示を省略している。
【０１２７】
図１０に示すように、階層ドライバ１２は、例示的に、ＩＯアクセス制御部１２１、移動制御部１２２、ビットマップ１２３、ビットマップ管理部１２４、及び、移動領域決定部１２５をそなえてよい。
【０１２８】
ＩＯアクセス制御部１２１は、ＩＯアクセスに関するユーザ（ホスト装置２）との間の種々の制御を行なう。例えば、ＩＯアクセス制御部１２１は、ユーザからのストレージボリュームに対するＩＯ要求をＳＳＤドライバ１３又はＤＩＭＭドライバ１４に振り分け、ＳＳＤドライバ１３又はＤＩＭＭドライバ１４からのＩＯレスポンスをユーザに返す。
【０１２９】
移動制御部１２２は、ＳＳＤ２０−ＤＩＭＭ３０間のデータ移動処理に関する種々の制御を行なう。データ移動処理において、移動制御部１２２は、移動指示部１１ｅ（図示省略）からの指示に応じて、サブＬＵＮ単位で階層移動（マイグレーション）を行なう。例えば、移動制御部１２２は、移動指示部１１ｅからサブＬＵＮの移動指示（セグメント移動指示）を受け取ると、ＤＩＭＭ３０又はＳＳＤ２０の移動対象の単位領域に記憶されたデータをＳＳＤ２０又はＤＩＭＭ３０に移動する移動処理を実行する。
【０１３０】
ＩＯアクセス制御部１２１及び移動制御部１２２による処理は、既知の種々の手法により実現可能であり、その詳細な説明を省略する。
【０１３１】
ところで、移動制御部１２２は、既知の手法等によれば、ＤＩＭＭ３０からＳＳＤ２０への移動処理（Ｄｏｗｎ処理）において、Ｄｏｗｎ対象のサブＬＵＮに１度でもデータ書き込みが発生した場合、当該サブＬＵＮの全領域をＳＳＤ２０に書き戻すことになる。
【０１３２】
上述のように、サブＬＵＮは、例えば１ＧＢ程度のサイズであるため、データ書き込みが発生した領域サイズが比較的小さい場合には、当該サブＬＵＮの全領域のデータをＤＩＭＭ３０からＳＳＤ２０に書き戻す処理の処理負荷や処理時間が増加し、非効率となる。
【０１３３】
そこで、一実施形態において、階層ドライバ１２は、ビットマップ１２３、ビットマップ管理部１２４、及び、移動領域決定部１２５の構成をそなえることで、移動制御部１２２に対して、Ｄｏｗｎ処理を効率的に実施させることができる。
【０１３４】
ビットマップ１２３は、ＤＩＭＭ３０に配置されたサブＬＵＮにおいて書き込み（Ｗｒｉｔｅ）ＩＯアクセスの発生した領域（部分領域）を管理するための情報であり、例えば、図示しないメモリ等の記憶領域に記憶されてよい。
【０１３５】
換言すれば、ビットマップ１２３は、ＤＩＭＭ３０における移動処理の対象データの記憶領域に対する書き込みアクセスの有無を、対象データの記憶領域を所定の大きさで分割した部分領域ごとに管理する管理情報の一例である。
【０１３６】
ビットマップ１２３は、例えば、サブＬＵＮの記憶領域を所定数（一例として、１００等）に分割した部分領域の各々に対応するビットを有してよい。
【０１３７】
ビットマップ管理部１２４は、ビットマップ１２３の管理を行なう。例えば、ビットマップ管理部１２４は、書き込みＩＯアクセスにより更新のあったサブＬＵＮの部分領域に対応する、ビットマップ１２３のビットをＯＮに設定する。
【０１３８】
移動領域決定部１２５は、Ｄｏｗｎ対象のサブＬＵＮについて、ビットマップ１２３を参照して、ＯＮに設定されたビット数をカウントする。そして、移動領域決定部１２５は、カウント値に応じて、ビットがＯＮの部分領域、及び、サブＬＵＮの全領域、のいずれか一方を、Ｄｏｗｎ対象の移動領域として決定する。
【０１３９】
図１１は、階層ドライバ１２の動作の一例を説明する図である。なお、図１１においては、便宜上、一部の構成の図示を省略している。
【０１４０】
図１１に例示するように、階層ドライバ１２において、ＳＳＤ２０のデータが、サブＬＵＮ単位でＤＩＭＭ３０にマイグレーション（Ｕｐ処理）される（図１１の矢印（１）参照）。
【０１４１】
ビットマップ管理部１２４は、ＳＳＤ２０のサブＬＵＮ２１のデータがＤＩＭＭ３０に配置（移動）された場合、ＤＩＭＭ３０に配置されたサブＬＵＮ３１に対して、ビットマップ１２３の記憶領域を割り当てる（図１１の矢印（２）参照）。
【０１４２】
ＤＩＭＭ３０に対して書き込みＩＯアクセスが発生した場合、ビットマップ管理部１２４は、サブＬＵＮ３１における、書き込みＩＯアクセスが発生した部分領域に対応するビットマップ１２３のビットをＯＮに設定する（図１１の矢印（３）参照）。
【０１４３】
サブＬＵＮ３１がＳＳＤ２０にマイグレーション（Ｄｏｗｎ処理）される場合、移動領域決定部１２５は、ビットマップ１２３を参照して、Ｄｏｗｎ対象のサブＬＵＮ３１に割り当てられた複数のビットのうち、ＯＮに設定されているビット数をカウントする。
【０１４４】
移動領域決定部１２５は、カウント値が所定数（Ｍ；Ｍは自然数）未満の場合、ビットマップ１２３においてＯＮに設定されているビットに対応する、サブＬＵＮの部分領域を、Ｄｏｗｎ対象の移動領域に決定する。
【０１４５】
一方、移動領域決定部１２５は、カウント値が所定数（Ｍ）以上の場合、Ｄｏｗｎ対象のサブＬＵＮの領域全体を、Ｄｏｗｎ対象の移動領域に決定する。
【０１４６】
そして、移動領域決定部１２５は、決定したＤｏｗｎ対象の移動領域に対するＤｏｗｎ処理の実行を、移動制御部１２２に指示する。
【０１４７】
移動制御部１２２は、Ｄｏｗｎ対象のサブＬＵＮについて、移動領域決定部１２５から指示された移動領域（１以上の部分領域、又は、サブＬＵＮの全領域）のＤｏｗｎ処理（Ｅｖｉｃｔ）を実行する（図１１の矢印（４−１）参照）。また、移動制御部１２２は、ＤＩＭＭ３０に対して、Ｄｏｗｎ処理を行なったサブＬＵＮ３１を解放する。
【０１４８】
なお、移動領域決定部１２５は、Ｄｏｗｎ処理が行なわれたサブＬＵＮの情報をビットマップ管理部１２４に通知してよい。ビットマップ管理部１２４は、移動領域決定部１２５から通知されたサブＬＵＮの、ビットマップ１２３への割り当てをクリア（解放）する（図１１の矢印（４−２）参照）。なお、割り当てがクリアされたビットマップ１２３の記憶領域は、ビットマップ管理部１２４により、Ｕｐ処理が行なわれたサブＬＵＮ３１に対して割り当て可能に管理される。
【０１４９】
このように、一実施形態に係る手法によれば、移動領域決定部１２５は、ビットマップ１２３により、ＤＩＭＭ３０に配置されたサブＬＵＮ３１の部分領域への書き込み有無を判断する。そして、Ｄｏｗｎ対象のサブＬＵＮ３１において書き込みが行なわれた部分領域の数が少ない場合、Ｄｏｗｎ処理の移動領域が、サブＬＵＮ３１の全領域ではなく、書き込みが行なわれた部分領域に制限される。
【０１５０】
換言すれば、移動領域決定部１２５は、ビットマップ１２３を参照して、当該移動指示における対象データについて、書き込みアクセスがあった部分領域の数が閾値未満の場合、対象データのうち、書き込みアクセスがあった部分領域のデータを、ＤＩＭＭ３０からＳＳＤ２０に移動させる。
【０１５１】
これにより、ＩＯアクセスにより変化のあった領域の範囲に応じて、効率的にＤｏｗｎ処理を実行することが可能となる。
【０１５２】
〔１−３〕階層ストレージ制御装置のハードウェア構成例
次に、図１２を参照して、図２に示す階層ストレージ制御装置１０のハードウェア構成について説明する。図１２は実施形態の一例としての階層ストレージ装置１における階層ストレージ制御装置１０のハードウェア構成例を示す図である。
【０１５３】
階層ストレージ制御装置１０は、図１２に示すように、プロセッサ１０ａ、メモリ１０ｂ、記憶部１０ｃ、ＩＦ（Interface；インタフェース）部１０ｄ、入出力部１０ｅ、及び、読取部１０ｆをそなえてよい。
【０１５４】
プロセッサ１０ａは、対応する各ブロック１０ｂ〜１０ｆとバス１０ｉを介して相互に通信可能に接続され、種々の制御や演算を行なう演算処理装置の一例である。プロセッサ１０ａは、メモリ１０ｂ、記憶部１０ｃ、記録媒体１０ｈ、又は、図示しないＲＯＭ（Read Only Memory）等に格納されたプログラムを実行することにより、階層ストレージ制御装置１０における種々の機能を実現する。
【０１５５】
なお、プロセッサ１０ａは、複数のプロセッサを含むマルチプロセッサであってもよいし、複数のプロセッサコアを有するマルチコアプロセッサであってもよく、或いは、マルチコアプロセッサを複数有する構成であってもよい。
【０１５６】
プロセッサ１０ａとしては、例えば、ＣＰＵ、ＭＰＵ、ＧＰＵ、ＡＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡ等の集積回路が挙げられる。ＣＰＵはCentral Processing Unitの略称であり、ＭＰＵはMicro Processing Unitの略称である。ＧＰＵはGraphics Processing Unitの略称であり、ＡＰＵはAccelerated Processing Unitの略称である。ＤＳＰはDigital Signal Processorの略称であり、ＡＳＩＣはApplication Specific ICの略称であり、ＦＰＧＡはField-Programmable Gate Arrayの略称である。
【０１５７】
メモリ１０ｂは、種々のデータやプログラムを格納する記憶装置である。プロセッサ１０ａは、プログラムを実行する際に、メモリ１０ｂにデータやプログラムを格納し展開する。なお、メモリ１０ｂとしては、例えばＲＡＭ（Random Access Memory）等の揮発性メモリが挙げられる。
【０１５８】
記憶部１０ｃは、種々のデータやプログラム等を格納するハードウェアである。記憶部１０ｃとしては、例えばＨＤＤ（Hard Disk Drive）等の磁気ディスク装置、ＳＳＤ等の半導体ドライブ装置、フラッシュメモリ等の不揮発性メモリ等の各種デバイスが挙げられる。なお、記憶部１０ｃとして複数のデバイスが用いられてもよく、これらのデバイスでＲＡＩＤ（Redundant Arrays of Inexpensive Disks）が構成されてもよい。また、記憶部１０ｃは、ストレージクラスメモリ（Storage Class Memory：ＳＣＭ）であってもよく、また、図２に示すＳＳＤ２０及びＤＩＭＭ３０を含んでもよい。
【０１５９】
記憶部１０ｃには、一実施形態に係る階層ストレージ制御装置１０の各種機能の全部もしくは一部を実現する情報処理プログラム１０ｇが格納されてもよい。例えば、プロセッサ１０ａは、記憶部１０ｃから読み出した情報処理プログラム１０ｇを、メモリ１０ｂ等の記憶装置に展開して実行することができる。これにより、コンピュータ（プロセッサ１０ａ、情報処理装置、各種端末を含む）は、上述した階層ストレージ制御装置１０の機能を実現することができる。
【０１６０】
なお、図２に例示するＤＢ１０１、及び、図１０に例示するビットマップ１２３は、それぞれ、メモリ１０ｂ及び記憶部１０ｃの少なくとも一方の記憶領域により実現されてよい。
【０１６１】
ＩＦ部１０ｄは、有線又は無線による、ネットワーク（図示省略）や他の情報処理装置との間の接続及び通信の制御等を行なうものである。ＩＦ部１０ｄとしては、例えば、ＬＡＮ（Local Area Network）、ファイバチャネル（ＦＣ）、インフィニバンド（InfiniBand）等に準拠したアダプタが挙げられる。
【０１６２】
入出力部１０ｅは、マウスやキーボード等の入力装置及びディスプレイやプリンタ等の出力装置の少なくとも一方を含んでよい。例えば、入出力部１０ｅは、階層ストレージ制御装置１０の使用者又は管理者等による種々の作業に用いられる。
【０１６３】
読取部１０ｆは、コンピュータ読取可能な記録媒体１０ｈに記録されたデータやプログラムを読み出す装置である。記録媒体１０ｈには、情報処理プログラム１０ｇが格納されてもよい。例えば、プロセッサ１０ａは、読取部１０ｆを介して記録媒体１０ｈから読み出したプログラムを、メモリ１０ｂ等の記憶装置に展開して実行してもよい。
【０１６４】
記録媒体１０ｈとしては、例示的に、磁気／光ディスクやフラッシュメモリ等の非一時的な記録媒体が挙げられる。磁気／光ディスクとしては、例示的に、フレキシブルディスク、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ブルーレイディスク、ＨＶＤ（Holographic Versatile Disc）等が挙げられる。フラッシュメモリとしては、例示的に、ＵＳＢメモリやＳＤカード等が挙げられる。なお、ＣＤとしては、例示的に、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ等が挙げられる。また、ＤＶＤとしては、例示的に、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等が挙げられる。
【０１６５】
なお、階層ストレージ制御装置１０の上述したハードウェア構成は例示である。従って、階層ストレージ制御装置１０内でのハードウェアの増減（例えば任意のブロックの追加や省略）、分割、任意の組み合わせでの統合、バスの追加又は省略等は適宜行なわれてもよい。
【０１６６】
〔２〕動作例
次に、図１３〜図１６を参照して、上述の如く構成された一実施形態に係る階層ストレージ装置１の動作例を説明する。
【０１６７】
〔２−１〕キュー制御部の動作例
図１３に示すように、キュー制御部１１ｃは、移動判定部１１ｂから以下の情報を受信する（ステップＳ１）。
【０１６８】
（１）予測移動対象のサブＬＵＮ。
（２）Ｕｐ対象のサブＬＵＮ、及び、各サブＬＵＮのＩＯアクセス数。
（３）Ｄｏｗｎ対象のサブＬＵＮ。
【０１６９】
キュー制御部１１ｃは、上記（１）及び（２）のインターバル（第１のタイミング）で決定されたサブＬＵＮ  ＩＤと、低優先キュー１０７（Ｄｏｗｎ用キュー１０７ｂ）に登録済みの過去のインターバル（第２のタイミング）で決定されたサブＬＵＮ  ＩＤとを比較する（ステップＳ２）。そして、キュー制御部１１ｃは、一致するサブＬＵＮ  ＩＤがあるか否かを判定する（ステップＳ３）。
【０１７０】
一致するサブＬＵＮ  ＩＤがある場合（ステップＳ３でＹｅｓ）、キュー制御部１１ｃは、当該サブＬＵＮ  ＩＤを低優先キュー１０７（Ｄｏｗｎ用キュー１０７ｂ）から削除し（ステップＳ４）、処理がステップＳ５に移行する。一方、一致するサブＬＵＮ  ＩＤがない場合（ステップＳ３でＮｏ）、処理がステップＳ５に移行する。
【０１７１】
ステップＳ５では、キュー制御部１１ｃは、上記（１）を高優先キュー１０６（予測移動用キュー１０６ａ）に全てプッシュする。また、キュー制御部１１ｃは、上記（３）を低優先キュー１０７（Ｄｏｗｎ用キュー１０７ｂ）に全てプッシュする（ステップＳ６）。なお、ステップＳ５及びＳ６は逆順でもよいし、並行して実行されてもよい。
【０１７２】
次いで、キュー制御部１１ｃは、上記（２）の各サブＬＵＮのＩＯアクセス数と閾値Ｔｈとを比較し（ステップＳ７）、ＩＯアクセス数が閾値Ｔｈ以上のサブＬＵＮを高優先キュー１０６（高ＩＯアクセス用キュー１０６ｂ）に全てプッシュする（ステップＳ８）。
【０１７３】
また、キュー制御部１１ｃは、ＩＯアクセス数が閾値Ｔｈ未満のサブＬＵＮを低優先キュー１０７（その他用キュー１０７ａ）に全てプッシュする（ステップＳ９）。なお、ステップＳ８及びＳ９は逆順でもよいし、並行して実行されてもよい。また、ステップＳ５及びＳ６と、ステップＳ７〜Ｓ９とは、逆順でもよいし、並行して実行されてもよい。
【０１７４】
そして、キュー制御部１１ｃは、一定時間（例えばＮ秒）スリープし（ステップＳ１０）、Ｕｐ用のキュー（高優先キュー１０６、低優先キュー１０７のその他用キュー１０７ａ）の内容を全てクリアして（ステップＳ１１）、処理がステップＳ１に移行する。スリープ後のステップＳ１１から、次のループのステップＳ１０（スリープ）までの期間を、１つのインターバルとして捉えた場合、各インターバルにおいて、ステップＳ１で受信する情報は、第１のタイミングで決定された移動対象についての移動指示であるといえる。また、ステップＳ１１の処理は、次のステップＳ１で受信する情報（第１のタイミングで決定された情報）をキュー１１ｄに格納するタイミングに先立って、第１のタイミングよりも前の第２のタイミングで決定された移動指示をキュー１１ｄから削除する処理であるといえる。
【０１７５】
〔２−２〕移動指示部の動作例
図１４に示すように、移動指示部１１ｅは、残り時間（Ｒｔｉｍｅ）にＮ（秒）をセットし（ステップＳ２１）、高優先キュー１０６にサブＬＵＮが存在するか否かを判定する（ステップＳ２２）。
【０１７６】
高優先キュー１０６にサブＬＵＮが存在する場合（ステップＳ２２でＹｅｓ）、移動指示部１１ｅは、高優先キュー１０６からサブＬＵＮを１つ取り出し、階層ドライバ１２に対して当該サブＬＵＮの階層移動を指示する（ステップＳ２３）。
【０１７７】
なお、高優先キュー１０６からサブＬＵＮを取り出す優先順位は、予測移動用キュー１０６ａ及び高ＩＯアクセス用キュー１０６ｂのいずれか一方が高くてもよい。この場合、移動指示部１１ｅは、一方からサブＬＵＮを全て取り出した後に、他方からサブＬＵＮを取り出してよい。或いは、優先順位が同じであってもよく、この場合、移動指示部１１ｅは、予測移動用キュー１０６ａ及び高ＩＯアクセス用キュー１０６ｂから交互にサブＬＵＮを取り出してもよい。
【０１７８】
移動指示部１１ｅは、階層移動の完了を待ち合わせ（ステップＳ２４）、例えば階層ドライバ１２から階層移動完了を通知されると、Ｒｔｉｍｅから階層移動の実行時間（Ｍｔｉｍｅ）を減算して、Ｒｔｉｍｅを更新する（ステップＳ２５）。
【０１７９】
移動指示部１１ｅは、Ｒｔｉｍｅが０よりも大きいか否かを判定する（ステップＳ２６）。Ｒｔｉｍｅが０よりも大きい場合（ステップＳ２６でＹｅｓ）、処理がステップＳ２２に移行する。一方、Ｒｔｉｍｅが０以下の場合（ステップＳ２６でＮｏ）、処理がステップＳ２１に移行する。
【０１８０】
ステップＳ２２において、高優先キュー１０６にサブＬＵＮが存在しない場合（ステップＳ２２でＮｏ）、移動指示部１１ｅは、低優先キュー１０７にサブＬＵＮが存在するか否かを判定する（ステップＳ２７）。
【０１８１】
低優先キュー１０７にサブＬＵＮが存在する場合（ステップＳ２７でＹｅｓ）、移動指示部１１ｅは、低優先キュー１０７からサブＬＵＮを１つ取り出し、階層ドライバ１２に対して当該サブＬＵＮの階層移動を指示する（ステップＳ２８）。
【０１８２】
なお、低優先キュー１０７からサブＬＵＮを取り出す優先順位は、その他用キュー１０７ａ及びＤｏｗｎ用キュー１０７ｂで同じであってもよい。この場合、移動指示部１１ｅは、その他用キュー１０７ａ及びＤｏｗｎ用キュー１０７ｂから交互にサブＬＵＮを取り出してよい。或いは、優先順位はいずれか一方が高くてもよく、この場合、移動指示部１１ｅは、例えば、一方からサブＬＵＮを全て取り出した後に、他方からサブＬＵＮを取り出してもよい。
【０１８３】
移動指示部１１ｅは、階層移動の完了を待ち合わせ（ステップＳ２９）、例えば階層ドライバ１２から階層移動完了を通知されると、Ｒｔｉｍｅから階層移動の実行時間（Ｍｔｉｍｅ）を減算して、Ｒｔｉｍｅを更新する（ステップＳ３０）。
【０１８４】
移動指示部１１ｅは、Ｒｔｉｍｅが０よりも大きいか否かを判定する（ステップＳ３１）。Ｒｔｉｍｅが０よりも大きい場合（ステップＳ３１でＹｅｓ）、処理がステップＳ２７に移行する。一方、Ｒｔｉｍｅが０以下の場合（ステップＳ３１でＮｏ）、処理がステップＳ２１に移行する。
【０１８５】
ステップＳ２７において、低優先キュー１０７にサブＬＵＮが存在しない場合（ステップＳ２７でＮｏ）、移動指示部１１ｅは、Ｒｔｉｍｅの間スリープし（ステップＳ３２）、処理がステップＳ２１に移行する。
【０１８６】
〔２−３〕階層ドライバの動作例
図１５に示すように、階層移動処理において、階層ドライバ１２の移動制御部１２２は、移動指示部１１ｅからの移動指示を待つ（ステップＳ４１）。
【０１８７】
移動指示を受信すると、移動制御部１２２は、指示された移動がＳＳＤ２０からＤＩＭＭ３０への移動（Ｕｐ処理）か否かを判定する（ステップＳ４２）。
【０１８８】
ＳＳＤ２０からＤＩＭＭ３０への移動（Ｕｐ処理）の場合（ステップＳ４２でＹｅｓ）、移動制御部１２２は、移動指示に従って、サブＬＵＮ単位で階層移動（Ｕｐ処理）を行なう（ステップＳ４３）。
【０１８９】
ビットマップ管理部１２４は、階層移動したサブＬＵＮに、ビットマップ１２３の領域を割り当て（ステップＳ４４）、処理がステップＳ４１に移行する。
【０１９０】
ステップＳ４２において、ＤＩＭＭ３０からＳＳＤ２０への移動（Ｄｏｗｎ処理）の場合（ステップＳ４２でＮｏ）、移動領域決定部１２５は、Ｄｏｗｎ対象のサブＬＵＮに対応する、ビットマップ１２３の領域を参照する。そして、移動領域決定部１２５は、ビットマップ１２３の領域のうち、ＯＮに設定されたビットの数をカウントする（ステップＳ４５）。
【０１９１】
移動領域決定部１２５は、カウント値が閾値Ｍ以上か否かを判定し（ステップＳ４６）、カウント値が閾値Ｍ以上の場合（ステップＳ４６でＹｅｓ）、移動制御部１２２に対して、移動領域としてサブＬＵＮを通知する。移動制御部１２２は、サブＬＵＮ単位で階層移動（Ｄｏｗｎ処理）を実行し（ステップＳ４７）、処理がステップＳ４９に移行する。
【０１９２】
一方、カウント値が閾値Ｍ未満の場合（ステップＳ４６でＮｏ）、移動領域決定部１２５は、移動制御部１２２に対して、移動領域として、ＯＮに設定されたビットに対応する部分領域を通知する。移動制御部１２２は、部分領域単位で階層移動（Ｄｏｗｎ処理）を実行し（ステップＳ４８）、処理がステップＳ４９に移行する。
【０１９３】
ステップＳ４９では、移動制御部１２２は、ＤＩＭＭ３０におけるＤｏｗｎ対象のサブＬＵＮを解放する。
【０１９４】
ビットマップ管理部１２４は、Ｄｏｗｎ対象のサブＬＵＮと、ビットマップ１２３の領域との対応関係をクリアし（ステップＳ５０）、処理がステップＳ４１に移行する。なお、ステップＳ４９及びＳ５０は逆順で実行されてもよいし、並行して実行されてもよい。
【０１９５】
図１６に示すように、ビットマップ更新処理において、ビットマップ管理部１２４は、ＤＩＭＭ３０への書き込みＩＯアクセスを待つ（ステップＳ５１）。
【０１９６】
書き込みＩＯアクセスが発生すると、ビットマップ管理部１２４は、ビットマップ１２３に対して、書き込みＩＯアクセス対象の部分領域に対応するビットをＯＮに設定し（ステップＳ５２）、処理がステップＳ５１に移行する。
【０１９７】
〔３〕その他
開示の技術は上述した実施形態に限定されるものではなく、一実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。
【０１９８】
例えば、一実施形態において、ＳＳＤ２０及びＤＩＭＭ３０を用いた階層ストレージ装置１について説明したが、これに限定されるものではなく、例えばキャッシュメモリと主記憶装置とを用いた階層記憶システムにも同様に適用することができる。すなわち、一実施形態は、不揮発性記憶装置の階層記憶システムだけでなく、揮発性記憶装置を含む階層記憶システムにも同様に適用することができる。
【０１９９】
また、一実施形態に係る階層ストレージ装置１は、ＳＳＤ２０及びＤＩＭＭ３０の他に、速度差のある記憶装置にも適用することが可能である。例えばＳＳＤ２０と、ＳＳＤよりも低速なアクセス速度を有するＨＤＤとを用いた階層ストレージ装置等にも適用することが可能である。また、ＳＳＤ２０と、ＳＳＤよりも大容量だが低速なテープドライブ等の磁気記録装置とを用いた階層ストレージ装置等にも適用してもよい。
【０２００】
さらに、一実施形態において、階層ストレージ制御装置１０の動作を１つのＳＳＤ２０及び１つのＤＩＭＭ３０に着目して説明したが、複数のＳＳＤ２０及び複数のＤＩＭＭ３０が階層ストレージ装置１にそなえられる場合も同様である。
【０２０１】
また、上述した実施形態においては、階層ストレージ制御装置１０がＬｉｎｕｘ  ｄｅｖｉｃｅ−ｍａｐｐｅｒ等の機能を用いる例を示したが、これに限定されるものではない。例えば、他のボリューム管理用ドライバや他のＯＳの機能を用いてもよく、種々変形して実施することができる。
【０２０２】
また、図２に示す階層ストレージ制御装置１０の各機能ブロックは、それぞれ任意の組み合わせで併合してもよく、分割してもよい。
【０２０３】
上述した実施形態では、ＤＢ１０１、検出部１０２、Ｕｐ判定部１０３、Ｄｏｗｎ判定部１０４、及び、予測移動判定部１０５としての機能を移動判定部１１ｂにそなえた場合について説明したが、これに限定されるものではない。例えば、これらの機能は、階層管理部１１内にそなえられていればよい。また、キュー制御部１１ｃは、移動判定部１１ｂ又はキュー１１ｄにそなえられてもよく、或いは、移動判定部１１ｂ及びキュー１１ｄに分散してそなえられてもよい。
【０２０４】
さらに、一実施形態において、階層ドライバ１２のビットマップ１２３、ビットマップ管理部１２４、及び、移動領域決定部１２５としての機能は、階層管理部１１とは独立した機能と捉えることができる。すなわち、階層ドライバ１２に代えて、従来の階層ドライバが用いられた場合でも、上述した階層管理部１１による効果と同様の効果を奏することができる。
【０２０５】
また、上述した実施形態では、階層ストレージに適用した場合について説明したが、これに限定されるものでない。例えば、ＤＩＭＭ等の第１の記憶装置がキャッシュメモリである場合についても、上述した実施形態と同様に適用可能であり、上述した実施形態と同様の効果を奏することができる。
【０２０６】
また、上述した開示により一実施形態を当業者によって実施・製造することが可能である。
【０２０７】
〔４〕付記
以上の実施形態に関し、更に以下の付記を開示する。
【０２０８】
（付記１）
第１記憶装置と、前記第１記憶装置よりもアクセス速度の低い第２記憶装置と、の間でデータを移動させる移動処理を指示するための移動指示を格納するキューと、
前記移動処理の対象データを決定し、決定した対象データについての移動指示を前記キューに格納する決定部と、
第１のタイミングで決定された対象データについての移動指示が前記キューに格納されるタイミングに先立って、前記キューに格納された移動指示のうち、前記第１のタイミングよりも前の第２のタイミングで決定された前記第２記憶装置から前記第１記憶装置への移動指示を削除対象として前記キューから削除する削除部と、
前記キューに格納された移動指示を読み出し、当該移動指示に従った前記移動処理の実行を制御する実行制御部と、をそなえ、
前記第２記憶装置から前記第１記憶装置への移動指示における対象データは、前記第１記憶装置において、アクセス集中が発生しているデータ、又は、アクセス集中の発生が予測されるデータである、情報処理装置。
【０２０９】
（付記２）
前記削除部は、前記キューに格納された前記第２のタイミングで決定された移動指示のうち、前記第１記憶装置から前記第２記憶装置への移動指示を前記削除対象から除外する、付記１に記載の情報処理装置。
【０２１０】
（付記３）
前記削除部は、前記第２記憶装置から前記第１記憶装置への前記第１のタイミングで決定された移動指示が示す記憶領域と、前記第２のタイミングで決定された前記第１記憶装置から前記第２記憶装置への移動指示が示す記憶領域と、が一致する場合、前記第１記憶装置から前記第２記憶装置への移動指示を前記キューから削除する、付記２に記載の情報処理装置。
【０２１１】
（付記４）
前記決定部は、前記第２記憶装置から前記第１記憶装置への移動指示における対象データと、当該対象データの優先度とを決定し、決定した対象データについての移動指示を優先度ごとに前記キューに格納し、
前記実行制御部は、前記キューから、優先度の高い移動指示を全て読み出してから、優先度の低い移動指示を読み出す、付記１〜３のいずれか１項に記載の情報処理装置。
【０２１２】
（付記５）
前記決定部は、前記第２記憶装置から前記第１記憶装置への移動指示における対象データの優先度を、前記第１記憶装置において当該対象データに発生したアクセス数に基づき設定する、付記１〜４のいずれか１項に記載の情報処理装置。
【０２１３】
（付記６）
前記第１記憶装置における前記対象データの記憶領域に対する書き込みアクセスの有無を、前記対象データの記憶領域を所定の大きさで分割した部分領域ごとに管理する管理情報を記憶する記憶領域をそなえ、
前記実行制御部は、前記第１記憶装置から前記第２記憶装置への移動指示に従って前記移動処理の実行を制御する際に、前記管理情報を参照して、当該移動指示における対象データについて、書き込みアクセスがあった部分領域の数が閾値未満の場合、前記対象データのうち、前記書き込みアクセスがあった部分領域のデータを、前記第１記憶装置から前記第２記憶装置に移動させる、付記１〜５のいずれか１項に記載の情報処理装置。
【０２１４】
（付記７）
第１記憶装置と、前記第１記憶装置よりもアクセス速度の低い第２記憶装置と、の間でデータを移動させる移動処理の対象データを決定し、
第１のタイミングで決定された対象データについての移動指示をキューに格納し、
前記キューに格納された移動指示のうち、前記第１のタイミングよりも前の第２のタイミングで決定された前記第２記憶装置から前記第１記憶装置への移動指示を削除対象として前記キューから削除し、
前記キューに格納された移動指示を読み出し、当該移動指示に従った前記移動処理の実行を制御する、
処理をコンピュータに実行させ、
前記第２記憶装置から前記第１記憶装置への移動指示における対象データは、前記第１記憶装置において、アクセス集中が発生しているデータ、又は、アクセス集中の発生が予測されるデータである、情報処理プログラム。
【０２１５】
（付記８）
前記キューに格納された前記第２のタイミングで決定された移動指示のうち、前記第１記憶装置から前記第２記憶装置への移動指示を前記削除対象から除外する、
処理を前記コンピュータに実行させる、付記７に記載の情報処理プログラム。
【０２１６】
（付記９）
前記第２記憶装置から前記第１記憶装置への前記第１のタイミングで決定された移動指示が示す記憶領域と、前記第２のタイミングで決定された前記第１記憶装置から前記第２記憶装置への移動指示が示す記憶領域と、が一致する場合、前記第１記憶装置から前記第２記憶装置への移動指示を前記キューから削除する、
処理を前記コンピュータに実行させる、付記８に記載の情報処理プログラム。
【０２１７】
（付記１０）
前記第２記憶装置から前記第１記憶装置への移動指示における対象データと、当該対象データの優先度とを決定し、決定した対象データについての移動指示を優先度ごとに前記キューに格納し、
前記キューから、優先度の高い移動指示を全て読み出してから、優先度の低い移動指示を読み出す、
処理を前記コンピュータに実行させる、付記７〜９のいずれか１項に記載の情報処理プログラム。
【０２１８】
（付記１１）
前記第２記憶装置から前記第１記憶装置への移動指示における対象データの優先度を、前記第１記憶装置において当該対象データに発生したアクセス数に基づき設定する、
処理を前記コンピュータに実行させる、付記７〜１０のいずれか１項に記載の情報処理プログラム。
【０２１９】
（付記１２）
管理情報を用いて、前記第１記憶装置における前記対象データの記憶領域に対する書き込みアクセスの有無を、前記対象データの記憶領域を所定の大きさで分割した部分領域ごとに管理し、
前記第１記憶装置から前記第２記憶装置への移動指示に従って前記移動処理の実行を制御する際に、前記管理情報を参照して、当該移動指示における対象データについて、書き込みアクセスがあった部分領域の数が閾値未満の場合、前記対象データのうち、前記書き込みアクセスがあった部分領域のデータを、前記第１記憶装置から前記第２記憶装置に移動させる、
処理を前記コンピュータに実行させる、付記７〜１１のいずれか１項に記載の情報処理プログラム。
【符号の説明】
【０２２０】
１    階層ストレージ装置
２    ホスト装置
１０    階層ストレージ制御装置
１１    階層管理部
１１ａ    データ収集部
１１ｂ    移動判定部
１１ｃ    キュー制御部
１１ｄ    キュー
１１ｅ    移動指示部
１００    ストレージシステム
１０１    ＤＢ
１０２    検出部
１０３    Ｕｐ判定部
１０４    Ｄｏｗｎ判定部
１０５    予測移動判定部
１０６    高優先キュー
１０６ａ    予測移動用キュー
１０６ｂ    高ＩＯアクセス用キュー
１０７    低優先キュー
１０７ａ    その他用キュー
１０７ｂ    Ｄｏｗｎ用キュー
１２    階層ドライバ
１２１    ＩＯアクセス制御部
１２２    移動制御部
１２３    ビットマップ
１２４    ビットマップ管理部
１２５    移動領域決定部
１３    ＳＳＤドライバ
１４    ＨＤＤドライバ
２０    ＳＳＤ
３０    ＤＩＭＭ
【図１】
2020046929.tif 000003
【図２】
2020046929.tif 000004
【図３】
2020046929.tif 000005
【図４】
2020046929.tif 000006
【図５】
2020046929.tif 000007
【図６】
2020046929.tif 000008
【図７】
2020046929.tif 000009
【図８】
2020046929.tif 000010
【図９】
2020046929.tif 000011
【図１０】
2020046929.tif 000012
【図１１】
2020046929.tif 000013
【図１２】
2020046929.tif 000014
【図１３】
2020046929.tif 000015
【図１４】
2020046929.tif 000016
【図１５】
2020046929.tif 000017
【図１６】
2020046929.tif 000018