(57)【要約】【課題】互いに性能の異なる複数の記憶装置間でのデータ移動の効率化を図る。【解決手段】第１記憶装置３０の記憶領域に対する書込アクセス有無を、第１サイズの記憶領域を所定の大きさで分割した第２サイズの部分領域毎に管理する管理情報１２３を記憶し、前記第１記憶装置３０から低速な第２記憶装置２０への前記第１サイズの対象データの移動の実行指示に応じて、前記管理情報１２３を参照し、前記対象データの記憶領域において書込アクセスがあった部分領域数が閾値よりも大きい場合、前記対象データを前記第１サイズ単位で移動し、前記部分領域数が前記閾値以下の場合、前記対象データのうちの前記書込アクセスがあった部分領域のデータを前記第２サイズ単位で移動し、前記第１記憶装置３０から前記第２記憶装置２０へ、前記第１サイズ単位及び前記第２サイズ単位で移動されるデータの各移動時間を算出し、算出結果に基づき前記閾値を変更する。【選択図】図１８
2020149075.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；不揮発性メモリ）等の半導体メモリモジュールが用いられてよい。一実施形態において、ＤＩＭＭ３０は、例示的に、ＤＩＭＭ３０の記憶領域に複数のブロックデバイス（ＢＤ；Block Device）が作成されてよく、当該記憶領域には、ＢＤ単位でアクセスされてよい。
【００２２】
ＳＳＤ２０は、ＤＩＭＭ３０とは異なる性能の（例えばよりアクセス速度が低い）低速記憶装置又は第２記憶装置（第２記憶部）の一例である。一実施形態において、ＳＳＤ２０は、例示的に、ＰＣＩｅ（Peripheral Component Interconnect Express）を利用したＮＶＭｅ（NVM Express）に準拠した規格により階層ストレージ制御装置１０に接続されてよい。
【００２３】
一実施形態において、互いに異なる記憶装置の組み合わせとして、ＤＩＭＭ３０等の半導体メモリモジュール、ＳＳＤ２０等の半導体ドライブ装置をそれぞれ例に挙げているが、これに限定されるものではない。第１及び第２記憶装置として、互いに性能差（例えばリード／ライト等のＩＯアクセスの速度差）のある種々の記憶装置が用いられてよい。
【００２４】
上述したＳＳＤ２０及びＤＩＭＭ３０は、階層ストレージ装置１におけるストレージボリュームを構成してよい。
【００２５】
以下、ホスト装置２等から認識される１つのストレージボリュームをＬＵＮ（Logical Unit Number）という。さらに、ＬＵＮを予め決められたサイズで分割した１単位（単位領域）をサブＬＵＮ（ｓｕｂ  ＬＵＮ）という。なお、サブＬＵＮのサイズは、例えば、ＭＢ（MegaByte）〜ＧＢ（GigaByte）のオーダで適宜変更して実施することができる。なお、サブＬＵＮは、セグメント又は単位領域と称されてもよい。
【００２６】
ＳＳＤ２０及びＤＩＭＭ３０の各々は、ストレージボリューム上のサブＬＵＮ（単位領域）のデータを格納可能な記憶領域を含む。階層ストレージ制御装置１０は、サブＬＵＮ単位で、ＳＳＤ２０とＤＩＭＭ３０との間の領域移動を制御してよい。以下、ＳＳＤ２０の記憶領域とＤＩＭＭ３０の記憶領域との間におけるデータの移動をマイグレーション（Migration）という場合がある。
【００２７】
なお、図２では、階層ストレージ装置１がそれぞれ１つのＳＳＤ２０及びＤＩＭＭ３０をそなえるものとしているが、これに限定されるものではなく、それぞれ複数のＳＳＤ２０及びＤＩＭＭ３０をそなえてもよい。
【００２８】
次に、階層ストレージ制御装置１０の詳細について説明する。階層ストレージ制御装置１０は、図２に示すように、例示的に、階層管理部１１、階層ドライバ１２、ＳＳＤドライバ１３、ＤＩＭＭドライバ１４、及び、移動処理部１５をそなえてよい。なお、例えば、階層管理部１１は、ユーザ空間で実行されるプログラムとして実現されてよく、階層ドライバ１２、ＳＳＤドライバ１３、ＤＩＭＭドライバ１４、及び、移動処理部１５は、ＯＳ（Operating System）空間で実行されるプログラムとして実現されてよい。
【００２９】
本実施形態においては、階層ストレージ制御装置１０は、例えば、Ｌｉｎｕｘ（登録商標）  ｄｅｖｉｃｅ−ｍａｐｐｅｒの機能を用いるものとする。ｄｅｖｉｃｅ−ｍａｐｐｅｒがストレージボリュームをサブＬＵＮ単位で監視し、高負荷となったサブＬＵＮのデータをＳＳＤ２０からＤＩＭＭ３０へ移動することで高負荷領域へのＩＯを処理する。なお、ｄｅｖｉｃｅ−ｍａｐｐｅｒはコンピュータプログラムとして実装されてよい。
【００３０】
階層管理部１１は、サブＬＵＮに対するデータアクセスを分析することで、ＳＳＤ２０からＤＩＭＭ３０へデータを移動させるサブＬＵＮを特定（移動候補抽出）してよい。また、階層管理部１１は、ＳＳＤ２０からＤＩＭＭ３０に対して、又は、ＤＩＭＭ３０からＳＳＤ２０に対して、サブＬＵＮのデータを移動させる制御を行なってよい。
【００３１】
階層管理部１１は、例えば、ＳＳＤ２０又は／及びＤＩＭＭ３０についてトレースされたＩＯの情報に基づいて、領域移動を行なうサブＬＵＮを判定し、判定したサブＬＵＮのデータの移動を階層ドライバ１２に指示する。
【００３２】
階層ドライバ１２は、ユーザからのストレージボリュームに対するＩＯ要求をＳＳＤドライバ１３又はＤＩＭＭドライバ１４に振り分け、ＳＳＤドライバ１３又はＤＩＭＭドライバ１４からのＩＯレスポンスをユーザに返す。
【００３３】
また、階層ドライバ１２は、階層管理部１１からサブＬＵＮの移動指示（セグメント移動指示）を受け取ると、ＤＩＭＭ３０又はＳＳＤ２０の移動対象の単位領域に記憶されたデータをＳＳＤ２０又はＤＩＭＭ３０に移動する移動処理を実行する。移動処理には、移動処理部１５に対する、データの転送指示の発行が含まれてよい。
【００３４】
ＳＳＤドライバ１３は、階層ドライバ１２の指示に基づいてＳＳＤ２０へのアクセスを制御する。例えば、ＳＳＤドライバ１３は、ＮＶＭｅに準拠したデバイスドライバを含んでもよい。当該ドライバは、例えば、Ｌｉｎｕｘ上においてはＮＶＭｅドライバとして実装されてよい。
【００３５】
ＤＩＭＭドライバ１４は、階層ドライバ１２の指示に基づいてＤＩＭＭ３０へのアクセスを制御する。例えば、ＤＩＭＭドライバ１４は、ＤＩＭＭ３０の記憶領域に複数のＢＤを作成し、ＢＤ単位で記憶領域にアクセスを行なうドライバを含んでもよい。当該ドライバは、例えば、Ｌｉｎｕｘ上においてはＢＲＤドライバとして実装されてよい。
【００３６】
移動処理部１５は、ＳＳＤ２０−ＨＤＤ３０間においてデータの移動（転送）を行なう。なお、移動処理部１５は、データの転送が完了すると、階層ドライバ１２に対して、完了報告を送信してよい。移動処理部１５としては、例えば、ｄｅｖｉｃｅ−ｍａｐｐｅｒに実装されるｋｃｏｐｙｄが挙げられる。ｋｃｏｐｙｄは、デバイス間のデータコピーを実行するモジュール（プログラム）であり、ＯＳ空間で実行される。
【００３７】
〔１−２−１〕階層管理部の説明
階層管理部１１は、図２に示すように、例示的に、データ収集部１１ａ、移動判定部１１ｂ、キュー制御部１１ｃ、キュー１１ｄ、及び、移動指示部１１ｅとしての機能をそなえてよい。
【００３８】
階層管理部１１は、例えば、Ｌｉｎｕｘ上においてはログプール（Log Pool）、サブＬＵＮ移動判定、及び、サブＬＵＮ移動指示の３つのコンポーネントを有する分割・構成変更エンジンとして実装されてよい。そして、これらのログプール、サブＬＵＮ移動判定、及び、サブＬＵＮ移動指示の各コンポーネントが、図２に示すデータ収集部１１ａ、移動判定部１１ｂ及びキュー１１ｄ、並びに、移動指示部１１ｅとしての機能をそれぞれ実現してよい。
【００３９】
（データ収集部１１ａの説明）
データ収集部１１ａは、ＳＳＤ２０又は／ＤＩＭＭ３０に対するＩＯアクセスの情報（ＩＯアクセス情報）を収集し、収集した情報に基づいて、サブＬＵＮごとのＩＯアクセス数を集計してよい。
【００４０】
例えば、データ収集部１１ａは、Ｌｉｎｕｘのｂｌｋｔｒａｃｅを用いてＳＳＤ２０又は／及びＤＩＭＭ３０についてトレースされたＩＯの情報を収集してよい。データ収集部１１ａは、ＩＯトレースにより、例えばｔｉｍｅｓｔａｍｐやＬＢＡ（Logical Block Addressing）、ｒ／ｗ（ｒｅａｄ／ｗｒｉｔｅ）、ｌｅｎｇｔｈ等の情報を採取してよい。なお、ＬＢＡからはサブＬＵＮ  ＩＤを求めることができる。
【００４１】
ここで、ｂｌｋｔｒａｃｅは、ブロックＩＯレベルでのＩＯをトレースするコマンドである。なお、データ収集部１１ａは、ｂｌｋｔｒａｃｅに代えて、ディスクＩＯの利用状況を確認するコマンドであるｉｏｓｔａｔ等の他の手法を用いてＩＯアクセス情報を収集してもよい。なお、ｂｌｋｔｒａｃｅ及びｉｏｓｔａｔはＯＳ空間で実行されてよい。
【００４２】
データ収集部１１ａは、一定時間間隔（ｔ）ごとにサブＬＵＮ単位でＩＯアクセスに関する情報を収集してよい。例えば、階層管理部１１がＴ秒（Ｔは１以上の整数）間隔でサブＬＵＮの移動判定を行なう場合には、一定時間間隔（ｔ）はＴ秒に設定されてよい。
【００４３】
なお、データ収集部１１ａは、各セグメント又は／及び全セグメントへのＩＯのリードライト比（ｒｗ比）を集計し、上述した情報に含めてもよい。
【００４４】
データ収集部１１ａは、収集したＩＯアクセス情報を、例えば移動判定部１１ｂの後述するＤＢ１０１に格納してよい。
【００４５】
図３は一実施形態に係るＩＯアクセス情報の一例を示す図である。ＩＯアクセス情報は、ＳＳＤ２０において発生中のＩＯアクセスに関する情報である。なお、図３には、ＩＯアクセス情報をテーブル形式で例示しているが、これに限定されるものではなく、ＩＯアクセス情報は配列等の種々の形態でＤＢ１０１に格納されてよい。
【００４６】
図３に示すように、ＩＯアクセス情報は、項目として、サブＬＵＮごとに、サブＬＵＮ  ＩＤ、ＩＯ数、及びタイムスタンプをそなえてよい。図３の例では、サブＬＵＮ  ＩＤ“0”について、ＩＯ数“10”、タイムスタンプ“1”が設定されている。
【００４７】
サブＬＵＮ  ＩＤは、サブＬＵＮ（エントリ）を特定するための識別情報である。ＩＤとして、例えばストレージボリュームの先頭オフセット等の識別情報が用いられてもよい。ＩＯ数は、例示的に、サブＬＵＮに対して１秒間に行なわれたＩＯの合計数（ＩＯＰＳ；IO Per Second）であってよい。タイムスタンプは、時刻を識別する識別子である。タイムスタンプとして、例えば時刻そのものが用いられてもよい。
【００４８】
このように、データ収集部１１ａは、ＳＳＤ２０又はＤＩＭＭ３０で使用される領域を所定の大きさで分割した複数の単位領域について、入力されたＩＯアクセス要求に関する情報を収集する収集部の一例である。
【００４９】
（移動判定部１１ｂの説明）
移動判定部１１ｂは、データ収集部１１ａによって収集されたＩＯアクセス情報に基づき、ＳＳＤ２０又はＤＩＭＭ３０におけるデータの移動元となるサブＬＵＮを選択し、選択したサブＬＵＮに関する情報をキュー１１ｄに格納する。キュー１１ｄに格納された情報は、後述する優先度に従って、移動指示部１１ｅに出力される。
【００５０】
移動判定部１１ｂは、図２に示すように、データベース（ＤＢ；Database）１０１、検出部１０２、Ｕｐ判定部１０３、Ｄｏｗｎ判定部１０４、及び、予測移動判定部１０５をそなえてよい。検出部１０２、Ｕｐ判定部１０３、Ｄｏｗｎ判定部１０４、及び、予測移動判定部１０５は、ＩＯアクセス情報が更新される一定時間間隔（ｔ）ごとに、後述する動作を行なってよい。以下、階層管理部１１による一定時間間隔（ｔ）ごとの処理を、１サイクル（インターバル）の処理という場合がある。
【００５１】
ＤＢ１０１は、データ収集部１１ａにより集計されたサブＬＵＮごとのＩＯ数に関する情報を記憶するものであり、例えば図示しないメモリ等により実現される。
【００５２】
検出部１０２は、サブＬＵＮ単位のＩＯアクセスについてのＩＯアクセス情報に基づき、ＳＳＤ２０におけるＩＯアクセス集中の発生を検出する。
【００５３】
ここで、ＩＯアクセス集中とは、例えば、全ボリューム容量の所定％（例えば、０．１％程度〜数％）までの範囲領域に全ＩＯアクセスの半分以上が集まった状態をいう。
【００５４】
検出部１０２は、例えば、上述した所定の範囲領域に、所定の閾値以上（例えば、全ＩＯアクセスの５０％〜９０％程度）のアクセスが集中した状態（ＩＯアクセス集中状態）を検出してよい。
【００５５】
なお、ＩＯアクセスの集中を判断するための範囲領域としては、連続した１つの範囲領域を対象として判断してもよく、また、互いに離散した複数の範囲領域の合計を対象として判断してもよい。１つのＩＯアクセスの継続時間は、非限定的な一例として、最大で８０分前後であり、短いケースでは、１分未満で終息してしまう場合もある。
【００５６】
また、検出部１０２は、ＩＯアクセス集中の終息についても検出してよい。ＩＯアクセス集中の終息とは、今までＩＯアクセスが集中していた範囲領域に関して、ＩＯアクセス数が、上述した閾値未満となった状態をいう。
【００５７】
なお、ＩＯアクセス数が一瞬低下した後に、すぐに回復するケースもある。そこで、検出部１０２は、例えば、今までＩＯアクセスが集中していた範囲領域に関して、ＩＯアクセス数が、上述した閾値未満となってから所定時間（例えば、Ｔ秒間）経過した時点で、ＩＯアクセス集中が終息したと判断してよい。
【００５８】
例えば、検出部１０２は、以下の（Ａ）〜（Ｄ）の手順により特定される領域において、ＩＯアクセス集中の発生を検出してよい。当該手順により特定される領域は、ＳＳＤ２０又はＤＩＭＭ３０への移動候補の領域となる。例えば、検出部１０２は、特定した領域に関する情報（移動候補情報）をＤＢ１０１等に格納してもよい。
【００５９】
（Ａ）検出部１０２は、ＬＵＮ全体のＩＯＰＳが予め定めた閾値ｉ（ｉは正の実数）以上か否かを判定する。なお、ＬＵＮ全体のＩＯＰＳが閾値ｉを超えていない場合、検出部１０２は、処理を終了してよい。この場合、検出部１０２は、次のサイクル（例えばＴ秒後）に再び（Ａ）の処理を行なってよい。
【００６０】
（Ｂ）ＬＵＮ全体のＩＯＰＳが閾値ｉを超えた場合、検出部１０２は、ＩＯアクセス情報を、サブＬＵＮごとに、発生したＩＯアクセス数の多い順に並べ替え、上位ｎ（ｎは整数）までのサブＬＵＮを抽出する。ｎは、１度に移動可能な最大サブＬＵＮ数であり、サブＬＵＮごとのＩＯ数を集計する間隔であるＴ（秒）を、ＳＳＤ２０からＤＩＭＭ３０へのサブＬＵＮ内のデータの移動速度（秒／サブＬＵＮ）で除算して求められてよい。
【００６１】
（Ｃ）検出部１０２は、ＩＯアクセス数が多い順に上位ｎのサブＬＵＮ同士を結合し、１つの領域（以下、サブＬＵＮグループという場合がある）として扱う。また、検出部１０２は、サブＬＵＮグループ内でＩＯアクセス数を合計し、ＩＯアクセス数が多い順にサブＬＵＮグループを並べ替える。
【００６２】
（Ｄ）検出部１０２は、ＩＯアクセス数の多い順にサブＬＵＮグループのＩＯアクセス数を累積していき、全ＩＯのｍ（ｍは正の実数）％を超えたところまでに入ったサブＬＵＮグループを移動候補として特定する。ｍは、移動候補にするサブＬＵＮグループをカットオフするための値である。
【００６３】
図４は移動候補情報の一例を示す図である。図４に示す例においては、便宜上、移動候補情報をテーブルとして示している。以下、移動候補情報をテーブル状に示した情報を移動候補テーブルという。
【００６４】
図４に示すように、移動候補情報は、項目として、サブＬＵＮグループごとに、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）構造の記憶領域であり、図示しないメモリ等により実現されてよい。
【０１０６】
キュー１１ｄは、ＤＩＭＭ３０と、ＤＩＭＭ３０よりもアクセス速度の低いＳＳＤ２０と、の間でデータを移動させる移動処理を指示するための移動指示を格納してよい。
【０１０７】
図２に示すように、キュー１１ｄは、例示的に、高優先キュー１０６及び低優先キュー１０７をそなえてよい。
【０１０８】
高優先キュー１０６は、移動指示部１１ｅにより優先的に読み出される（出力される）サブＬＵＮ  ＩＤが挿入されるキューであり、予測移動用キュー１０６ａ及び高ＩＯアクセス用キュー１０６ｂを含んでよい。
【０１０９】
予測移動用キュー１０６ａには、予測移動対象のサブＬＵＮ  ＩＤが挿入される。高ＩＯアクセス用キュー１０６ｂには、Ｕｐ対象のサブＬＵＮ  ＩＤの中で優先度の高いサブＬＵＮ  ＩＤが挿入される。
【０１１０】
高優先キュー１０６において、予測移動用キュー１０６ａ及び高ＩＯアクセス用キュー１０６ｂの間では、どちらを優先させてもよい。一実施形態では、予測移動用キュー１０６ａ内のサブＬＵＮ  ＩＤが全て出力されてから、高ＩＯアクセス用キュー１０６ｂ内のサブＬＵＮ  ＩＤが全て出力されるものとするが、これに限定されるものではない。
【０１１１】
例えば、高ＩＯアクセス用キュー１０６ｂ内のサブＬＵＮ  ＩＤが全て出力されてから、予測移動用キュー１０６ａ内のサブＬＵＮ  ＩＤが全て出力されてもよい。或いは、予測移動用キュー１０６ａ及び高ＩＯアクセス用キュー１０６ｂから、交互にサブＬＵＮ  ＩＤが出力されてもよい。
【０１１２】
低優先キュー１０７は、高優先キュー１０６よりも優先度の低いキューであり、その他用キュー１０７ａ及びＤｏｗｎ用キュー１０７ｂを含んでよい。低優先キュー１０７に挿入されたサブＬＵＮ  ＩＤは、高優先キュー１０６からサブＬＵＮ  ＩＤが全て出力されてから（高優先キュー１０６が空になってから）、出力されてよい。
【０１１３】
その他用キュー１０７ａには、Ｕｐ対象のサブＬＵＮ  ＩＤの中で優先度の低いサブＬＵＮ  ＩＤが挿入される。Ｄｏｗｎ用キュー１０７ｂには、Ｄｏｗｎ対象のサブＬＵＮ  ＩＤが挿入される。
【０１１４】
低優先キュー１０７において、その他用キュー１０７ａ及びＤｏｗｎ用キュー１０７ｂの間では、どちらを優先させてもよい。一実施形態では、その他用キュー１０７ａ及びＤｏｗｎ用キュー１０７ｂから、交互にサブＬＵＮ  ＩＤが出力されるものとするが、これに限定されるものではない。例えば、その他用キュー１０７ａ内のサブＬＵＮ  ＩＤが全て出力されてから、Ｄｏｗｎ用キュー１０７ｂ内のサブＬＵＮ  ＩＤが全て出力されてもよいし、逆順であってもよい。
【０１１５】
なお、図２の例では、便宜上、キュー１１ｄが符号１０６ａ、１０６ｂ、１０７ａ、１０７ｂの４つの記憶領域をそなえるものとしたが、これに限定されるものではない。例えば、キュー１１ｄは、１つ以上のＦＩＦＯ構造のメモリの記憶領域を、４つの領域（範囲）に区画して、それぞれの領域を符号１０６ａ、１０６ｂ、１０７ａ、１０７ｂに割り当てたものであってよい。この場合、４つの領域の各々において、サブＬＵＮ  ＩＤの格納位置をポインタによって指定可能であってよい。
【０１１６】
（移動指示部１１ｅの説明）
移動指示部１１ｅは、一定時間間隔（ｔ）（インターバル）ごとに、当該インターバルにおいて可能な範囲で、キュー１１ｄに蓄積されたサブＬＵＮ  ＩＤを順次読み出し、階層ドライバ１２に対して、読み出したサブＬＵＮのデータの階層移動を指示する。
【０１１７】
例えば、移動指示部１１ｅは、インターバルが開始すると、高優先キュー１０６からサブＬＵＮ  ＩＤを１つ取り出し、階層ドライバ１２に当該サブＬＵＮのデータのＤＩＭＭ３０への移動を指示してよい。移動指示部１１ｅは、インターバルの残り時間から移動の実行時間を減算し、残り時間が０になる、或いは、高優先キュー１０６にサブＬＵＮ  ＩＤが存在しなくなるまで、高優先キュー１０６に存在するサブＬＵＮ  ＩＤの移動を指示してよい。
【０１１８】
また、移動指示部１１ｅは、高優先キュー１０６にサブＬＵＮ  ＩＤが存在しなくなると、低優先キュー１０７からサブＬＵＮ  ＩＤを１つ取り出し、階層ドライバ１２に当該サブＬＵＮのデータのＤＩＭＭ３０又はＳＳＤ２０への移動を指示してよい。移動指示部１１ｅは、インターバルの残り時間から移動の実行時間を減算し、残り時間が０になる、或いは、低優先キュー１０７にサブＬＵＮ  ＩＤが存在しなくなるまで、低優先キュー１０７に存在するサブＬＵＮ  ＩＤの移動を指示してよい。
【０１１９】
このように、移動指示部１１ｅは、キュー１１ｄに格納された移動指示を読み出し、当該移動指示に従った移動処理の実行を制御する実行制御部の一例である。
【０１２０】
図９は、階層管理部１１の動作の一例を説明する図である。なお、図９においては、便宜上、一部の構成の図示を省略している。
【０１２１】
上述した一実施形態に係る手法によれば、図９に例示するように、階層管理部１１において、一定時間間隔（例えばＴ秒間隔）で移動判定部１１ｂにＩＯアクセスログが供給される（図９の矢印（１）参照）。
【０１２２】
移動判定部１１ｂでは、一定時間間隔で移動判定が行なわれ、移動対象として決定されたサブＬＵＮの情報が、キュー制御部１１ｃによる振り分けによってキュー１１ｄにプッシュされる（図９の矢印（２）参照）。
【０１２３】
キュー１１ｄに蓄積されたサブＬＵＮの情報は、移動指示部１１ｅにより、一定時間内に実行可能な分だけ読み出され、当該サブＬＵＮのデータのマイグレーションが指示される（図９の矢印（３）参照）。マイグレーションの指示により、階層ドライバ１２（図示省略）及び移動処理部１５によって、ＳＳＤ２０−ＤＩＭＭ３０間においてサブＬＵＮのデータのマイグレーションが実行される。
【０１２４】
一定時間が経過すると、移動指示部１１ｅにより、Ｕｐ処理用のキュー（予測移動用キュー１０６ａ、高ＩＯアクセス用キュー１０６ｂ、その他用キュー１０７ａ）の内容がクリアされる（図９の符号（４−１）参照）。また、移動指示部１１ｅにより、Ｄｏｗｎ処理用のキュー（Ｄｏｗｎ用キュー１０７ｂ）の内容は維持される（図９の符号（４−２）参照）。
【０１２５】
換言すれば、移動判定部１１ｂは、ＳＳＤ２０からＤＩＭＭ３０への移動指示における対象データと、当該対象データの優先度とを決定し、キュー制御部１１ｃは、決定した対象データについての移動指示を優先度ごとにキュー１１ｄに格納する。そして、移動指示部１１ｅは、キュー１１ｄから、優先度の高い移動指示を全て読み出してから、優先度の低い移動指示を読み出す。
【０１２６】
このように、キュー制御部１１ｃ、キュー１１ｄ、及び、移動指示部１１ｅによれば、Ｕｐ対象のサブＬＵＮグループの中で、性能向上効果が大きいサブＬＵＮを優先してＤＩＭＭ３０に配置することができる。また、Ｕｐ対象のサブＬＵＮグループにおける残りのサブＬＵＮを、Ｄｏｗｎ対象のサブＬＵＮとともに、低優先キュー１０７から公平にＤＩＭＭ３０又はＳＳＤ２０に配置することができる。
【０１２７】
これにより、階層ストレージ制御装置１０の性能を維持したまま、ＤＩＭＭ３０の消費量を引き下げることができるため、階層間でのデータ移動の効率化を図ることができる。
【０１２８】
〔１−２−２〕階層ドライバの説明
図１０は、階層ドライバ１２の機能構成例を示す図である。なお、図１０においては、便宜上、移動判定部１１ｂ及びキュー１１ｄがそなえる各構成（図２参照）の図示を省略している。
【０１２９】
ここで、一実施形態では、階層ドライバ１２には、上述した構成及び手法に従い階層管理部１１から発行されたデータ移動指示（マイグレーション指示）が入力されるものとして説明するが、これに限定されるものではない。
【０１３０】
例えば、階層ドライバ１２には、ＳＳＤ２０−ＤＩＭＭ３０間におけるサブＬＵＮ単位でのデータの移動指示が入力されればよく、図２〜図９を参照して説明した階層管理部１１とは異なる（例えば従来の）階層管理部から発行された移動指示が入力されてもよい。
【０１３１】
図１０に示すように、階層ドライバ１２は、例示的に、ＩＯアクセス制御部１２１、移動制御部１２２、ＢＭＰ１２３、ＢＭＰ管理部１２４、移動領域決定部１２５、及び、階層ＴＢＬ１２６をそなえてよい。なお、ＢＭＰはビットマップ（Bitmap）の略称であり、ＴＢＬはテーブル（Table）の略称である。
【０１３２】
ＩＯアクセス制御部１２１は、ＩＯアクセスに関するユーザ（ホスト装置２）との間の種々の制御を行なう。例えば、ＩＯアクセス制御部１２１は、ユーザからのストレージボリュームに対するＩＯ要求を、階層ＴＢＬ１２６を参照してＳＳＤドライバ１３又はＤＩＭＭドライバ１４に振り分ける。また、ＩＯアクセス制御部１２１は、ＳＳＤドライバ１３又はＤＩＭＭドライバ１４からのＩＯレスポンスをユーザに返す。
【０１３３】
移動制御部１２２は、ＳＳＤ２０−ＤＩＭＭ３０間のデータ移動処理に関する種々の制御を行なう。データ移動処理において、移動制御部１２２は、移動指示部１１ｅからの指示に応じて、階層ＴＢＬ１２６を参照して、サブＬＵＮ単位で階層移動（マイグレーション）を行なう。例えば、移動制御部１２２は、移動指示部１１ｅからサブＬＵＮの移動指示（セグメント移動指示）を受け取ると、ＤＩＭＭ３０又はＳＳＤ２０の移動対象の単位領域に記憶されたデータをＳＳＤ２０又はＤＩＭＭ３０に移動する移動処理を実行する。
【０１３４】
ところで、移動制御部１２２は、既知の手法等によれば、ＤＩＭＭ３０からＳＳＤ２０への移動処理（Ｄｏｗｎ処理）において、Ｄｏｗｎ対象のサブＬＵＮに１度でもデータ書き込みが発生した場合、当該サブＬＵＮの全領域をＳＳＤ２０に書き戻すことになる。
【０１３５】
上述のように、サブＬＵＮは、例えば１ＧＢ程度のサイズであるため、データ書き込みが発生した領域サイズが比較的小さい場合には、当該サブＬＵＮの全領域のデータをＤＩＭＭ３０からＳＳＤ２０に書き戻す処理の処理負荷や処理時間が増加し、非効率となる。
【０１３６】
そこで、一実施形態において、階層ドライバ１２は、ＢＭＰ１２３、ＢＭＰ管理部１２４、移動領域決定部１２５、及び、階層ＴＢＬ１２６の構成をそなえることで、移動制御部１２２に対して、Ｄｏｗｎ処理を効率的に実施させることができる。
【０１３７】
ＢＭＰ１２３は、ＤＩＭＭ３０に配置された第１サイズのサブＬＵＮにおいて書き込み（Ｗｒｉｔｅ）ＩＯアクセスの発生した領域（部分領域）を管理するための情報であり、例えば、図示しないメモリ等の記憶領域に記憶されてよい。ＢＭＰ１２３を記憶する記憶領域は、第１メモリ部と称されてもよい。
【０１３８】
換言すれば、ＢＭＰ１２３は、ＤＩＭＭ３０における移動処理の対象データの記憶領域であって、第１サイズの記憶領域に対する書き込みアクセスの有無を、対象データの記憶領域を所定の大きさで分割した第２サイズの部分領域ごとに管理する管理情報の一例である。
【０１３９】
ＢＭＰ１２３は、例えば、サブＬＵＮの記憶領域を所定数Ｍ（Ｍは２以上の整数。一例として、Ｍ＝１００等）に分割した部分領域の各々に対応するビットを有してよい。部分領域は、サブＬＵＮを分割した記憶領域であるため、ｓｕｂ−ｓｕｂ−ＬＵＮと表記されてもよい。
【０１４０】
ＢＭＰ管理部１２４は、ＢＭＰ１２３の管理を行なう。例えば、ＢＭＰ管理部１２４は、書き込みＩＯアクセスにより更新のあったサブＬＵＮの部分領域に対応する、ＢＭＰ１２３のビットをＯＮに設定する。
【０１４１】
移動領域決定部１２５は、Ｄｏｗｎ対象のサブＬＵＮについて、階層ＴＢＬ１２６及びＢＭＰ１２３を参照して、ＢＭＰ１２３においてＯＮに設定されたビット数をカウントする。そして、移動領域決定部１２５は、カウント値に応じて、ビットがＯＮの部分領域、及び、サブＬＵＮの全領域、のいずれか一方を、Ｄｏｗｎ対象の移動領域として決定する。
【０１４２】
図１１は、階層ドライバ１２の動作の一例を説明する図である。なお、図１１においては、便宜上、一部の構成の図示を省略している。
【０１４３】
図１１に例示するように、階層ドライバ１２において、ＳＳＤ２０のデータが、サブＬＵＮ単位でＤＩＭＭ３０にマイグレーション（Ｕｐ処理）される（図１１の矢印（１）参照）。
【０１４４】
ＢＭＰ管理部１２４は、ＳＳＤ２０のサブＬＵＮ２１のデータがＤＩＭＭ３０に配置（移動）された場合、ＤＩＭＭ３０に配置されたサブＬＵＮ３１に対して、ＢＭＰ１２３の記憶領域を割り当てる（図１１の矢印（２）参照）。
【０１４５】
ＤＩＭＭ３０に対して書き込みＩＯアクセスが発生した場合、ＢＭＰ管理部１２４は、サブＬＵＮ３１における、書き込みＩＯアクセスが発生した部分領域３１ａに対応するＢＭＰ１２３のビットをＯＮに設定する（図１１の矢印（３）参照）。
【０１４６】
サブＬＵＮ３１がＳＳＤ２０にマイグレーション（Ｄｏｗｎ処理）される場合、移動領域決定部１２５は、ＢＭＰ１２３を参照して、Ｄｏｗｎ対象のサブＬＵＮ３１に割り当てられた複数のビットのうち、ＯＮに設定されているビット数をカウントする。
【０１４７】
移動領域決定部１２５は、カウント値が所定数（Ｎ；Ｎは自然数）以下の場合、ＢＭＰ１２３においてＯＮに設定されているビットに対応する、サブＬＵＮ３１の部分領域３１ａを、Ｄｏｗｎ対象の移動領域に決定する。
【０１４８】
一方、移動領域決定部１２５は、カウント値が所定数（Ｎ）よりも大きい場合、Ｄｏｗｎ対象のサブＬＵＮ３１の領域全体を、Ｄｏｗｎ対象の移動領域に決定する。
【０１４９】
そして、移動領域決定部１２５は、決定したＤｏｗｎ対象の移動領域に対するＤｏｗｎ処理の実行を、移動制御部１２２に指示する。
【０１５０】
移動制御部１２２は、Ｄｏｗｎ対象のサブＬＵＮ３１について、移動領域決定部１２５から指示された移動領域（１以上の部分領域３１ａ、又は、サブＬＵＮ３１の全領域）のＤｏｗｎ処理（Ｅｖｉｃｔ）を実行する（図１１の矢印（４−１）参照）。Ｄｏｗｎ処理では、移動制御部１２２は、移動処理部１５に対して、移動領域決定部１２５から指示された移動領域のデータをＤＩＭＭ３０からＳＳＤ２０に転送させる転送指示を送信してよい。また、移動制御部１２２は、例えば移動処理部１５において移動領域のデータ転送が完了し、移動処理部１５から完了報告を受信すると、ＤＩＭＭ３０に対して、Ｄｏｗｎ処理を行なったサブＬＵＮ３１を解放してよい。
【０１５１】
なお、移動領域決定部１２５は、Ｄｏｗｎ処理が行なわれたサブＬＵＮ３１の情報をＢＭＰ管理部１２４に通知してよい。ＢＭＰ管理部１２４は、移動領域決定部１２５から通知されたサブＬＵＮ３１の、ＢＭＰ１２３への割り当てをクリア（解放）する（図１１の矢印（４−２）参照）。なお、割り当てがクリアされたＢＭＰ１２３の記憶領域は、ＢＭＰ管理部１２４により、Ｕｐ処理が行なわれたサブＬＵＮ３１に対して割り当て可能に管理される。
【０１５２】
このように、一実施形態に係る手法によれば、移動領域決定部１２５は、ＢＭＰ１２３により、ＤＩＭＭ３０に配置されたサブＬＵＮ３１の部分領域３１ａへの書き込み有無を判断する。そして、Ｄｏｗｎ対象のサブＬＵＮ３１において書き込みが行なわれた部分領域３１ａの数が所定数Ｎ以下の場合、Ｄｏｗｎ処理の移動領域が、サブＬＵＮ３１の全領域ではなく、書き込みが行なわれた部分領域３１ａに制限される。
【０１５３】
換言すれば、移動領域決定部１２５は、ＢＭＰ１２３を参照して、当該移動指示における対象データについて、書き込みアクセスがあった部分領域３１ａの数が閾値Ｎ以下の場合、対象データのうち、書き込みアクセスがあった部分領域３１ａのデータを、ＤＩＭＭ３０からＳＳＤ２０に移動させる。
【０１５４】
これにより、ＩＯアクセスにより変化のあった領域の範囲に応じて、効率的にＤｏｗｎ処理を実行することが可能となる。
【０１５５】
以上のように、移動制御部１２２、移動領域決定部１２５、及び、移動処理部１５は、以下の（ｉ）〜（iii）の処理を行なう移動実行部の一例である。
【０１５６】
（ｉ）移動実行部は、ＤＩＭＭ３０からＳＳＤ２０への第１サイズの対象データの移動の実行指示に応じて、ＢＭＰ１２３を参照して、対象データのサブＬＵＮにおいて書き込みアクセスがあった部分領域３１ａの数が閾値Ｎ以下か否かを判定する。
【０１５７】
（ii）移動実行部は、書き込みアクセスがあった部分領域３１ａの数が閾値Ｎよりも大きい場合、対象データを第１サイズ単位でＤＩＭＭ３０からＳＳＤ２０へ移動する。
【０１５８】
（iii）移動実行部は、書き込みアクセスがあった部分領域３１ａの数が閾値Ｎ以下の場合、対象データのうちの書き込みアクセスがあった部分領域３１ａのデータを第２サイズ単位でＤＩＭＭ３０からＳＳＤ２０へ移動する。
【０１５９】
階層ＴＢＬ１２６は、ＩＯアクセス制御部１２１によるＩＯアクセスの振り分け、及び、移動制御部１２２又は移動領域決定部１２５等による階層制御に用いられるテーブルであり、例えば図示しないメモリ等により実現されてよい。
【０１６０】
図１２は、階層ＴＢＬ１２６の一例を示す図である。図１２に示すように、階層ＴＢＬ１２６は、ＤＩＭＭ３０にデータが移動されたセグメントごとに、ＤＩＭＭオフセットと、ＳＳＤオフセットと、状態とを対応させて記憶することができる。なお、図１２には、階層ＴＢＬ１２６をテーブル形式で例示しているが、これに限定されるものではなく、階層ＴＢＬ１２６は配列やＤＢ等の種々の形態でメモリ等に格納されてよい。
【０１６１】
ＤＩＭＭオフセットは、ＤＩＭＭ３０にデータが移動されたセグメントのＤＩＭＭ３０におけるオフセットを示す。ＤＩＭＭオフセットは、ボリューム上のセグメントサイズ（例えば１ＧＢ）に対応するオフセット“2097152”を単位とする固定値であってよく、例えば、“0”、“2097152”、“4194304”、“6291456”、．．．となる。
【０１６２】
ＳＳＤオフセットは、ＤＩＭＭ３０にデータが移動されたセグメントのＳＳＤ２０におけるオフセットを示す。ＳＳＤオフセットの値“NULL”は、ＤＩＭＭオフセットで指定されるＤＩＭＭ３０の領域が未使用であることを示す。
【０１６３】
状態は、セグメントの状態を示し、例えば、“allocated”、“Moving（SSD→DIMM）”、“Moving（DIMM→SSD）”、又は“free”を含んでよい。“allocated”はセグメントがＤＩＭＭ３０に割り当てられていることを示し、“Moving（SSD→DIMM）”はセグメントのデータがＳＳＤ２０からＤＩＭＭ３０に転送中（Ｕｐ処理中）であることを示す。“Moving（DIMM→SSD）”はセグメントのデータがＤＩＭＭ３０からＳＳＤ２０に転送中（Ｄｏｗｎ処理中）であることを示し、“free”はＤＩＭＭオフセットで指定されるＤＩＭＭ３０の領域が未使用であることを示す。
【０１６４】
ＩＯアクセス制御部１２１は、上述した階層ＴＢＬ１２６を参照することで、ＩＯアクセスをＳＳＤドライバ１３及びＤＩＭＭドライバ１４のいずれに振り分けるかを判定することができる。また、ＩＯアクセス制御部１２１は、上述した階層ＴＢＬ１２６を参照することで、ＩＯアクセスがセグメント移動中であるか否かを判定することができる。
【０１６５】
（階層ドライバ１２の詳細な説明）
上述した例において、階層間の移動領域を決定するための閾値Ｎは、事前評価等によって、適切（適当）な値が事前に定められるものとする。
【０１６６】
しかしながら、階層ストレージ装置１において使用される装置構成や、運用されるワークロード等に依存して、適切なＮの値は変動し得る。また、上述した例では、Ｎの値を運用中に変更することは困難である。
【０１６７】
そこで、一実施形態に係る階層ドライバ１２は、以下のように、階層ストレージ装置１の運用中において適切な（例えば最適な）Ｎの値を算出して適用してよい。
【０１６８】
なお、前提として、サブＬＵＮ３１のサイズ＝Ｓ、部分領域３１ａのサイズ＝ｓとすると、下記式（１）の関係であるものとする。一例として、Ｓ＝１ＧＢの場合、ｓ＝１ＭＢ程度となる。
【０１６９】
Ｓ  ＞＞  ｓ                                            （１）
【０１７０】
図１３は、サブＬＵＮ３１全体のＤｏｗｎ処理（置換処理）の処理時間=ＥＴ、部分領域３１ａのＤｏｗｎ処理（置換処理）の処理時間＝ｅｔとした場合における処理時間ＥＴ及びｅｔの内訳を例示する図である。なお、図１３は、階層ドライバ１２及び移動処理部１５における処理に対する、アプリケーションからのＩＯアクセスの影響が小さい場合の例を示す。
【０１７１】
図１３に例示するように、処理時間ＥＴ及びｅｔは、それぞれ、ソフトウェア（ＳＷ；Software）による遅延時間（斜線領域参照）、及び、データ転送による遅延時間（白塗り領域参照）を含む。
【０１７２】
データ転送による遅延時間は、移動領域のデータサイズ（換言すればサブＬＵＮ３１全体であるのか部分領域３１ａであるのか）に応じて変化する遅延時間である。一方、ＳＷによる遅延時間は、例えば、ｋｃｏｐｙｄ等の移動処理部１５における内部処理、等による遅延時間であり、移動領域のデータサイズに依らず（換言すれば処理時間ＥＴ及びｅｔにおいて）、一定又は略一定である。
【０１７３】
従って、１つのサブＬＵＮ３１のうちの移動領域の部分領域３１ａの数に比例して、ＳＷによる遅延時間（オーバヘッド）が増加することとなる。このため、処理時間ＥＴ及びｅｔは、下記式（２）に示すように、１つのサブＬＵＮ３１のうちの部分領域３１ａを全て転送するよりも、当該サブＬＵＮ３１の全体を一括で転送する方が、処理時間が短い（処理が高速である）といえる。なお、下記式において、Ｍは、サブＬＵＮ３１の分割数である。
【０１７４】
ＥＴ  ＜  ｅｔ  ＊  Ｍ                                  （２）
【０１７５】
そこで、移動制御部１２２は、下記式（３）に示す状態となる閾値Ｎ（ＮはＭ未満の整数）を運用中に求め、Ｎの値の適宜更新する。
【０１７６】
ＥＴ  ＝  ｅｔ  ＊  Ｎ  （Ｎ  ＜  Ｍ）                  （３）
【０１７７】
一実施形態では、上述のように、階層ストレージ装置１の運用中に、ＤＩＭＭ３０からＳＳＤ２０へのサブＬＵＮ３１の置換を行なうことを想定する。
【０１７８】
このため、階層ドライバ１２に対するＩＯアクセスパターンの影響により、図１４に例示するように、サブＬＵＮ３１のデータをサブＬＵＮ２１に移動する処理時間ＥＴ、及び、部分領域３１ａのデータを部分領域２１ａに移動する処理時間ｅｔが変化し得る。すなわち、効果的なＮの値は、アクセスパターンの変化に応じて変動することになる。
【０１７９】
図１５は、処理時間ＥＴ及びｅｔの変動要因の例を説明する図である。以下、図１５を参照して、処理時間ＥＴ及びｅｔの変動要因について説明する。
【０１８０】
（第１の要因）
図１５に例示するように、アプリケーションからのＩＯアクセス（符号Ａで示す白抜き及び破線の矢印参照）と、移動処理（符号Ｂで示す実線及び網掛けの矢印参照）とは、同じデバイス（ＳＳＤ２０又はＤＩＭＭ３０）に対して、並行して実施される場合がある。
【０１８１】
このため、アプリケーションからのＩＯアクセスの増減に応じて、ＳＳＤドライバ１３及び／又はＤＩＭＭドライバ１４における処理負荷が増減するため、移動処理（マイグレーション）におけるＩＯアクセス時間も変動することになる。
【０１８２】
図１６は、第１の要因による移動処理の遅延時間の一例を示す図である。図１６に示すように、ＳＳＤドライバ１３やＤＩＭＭドライバ１４では、アプリケーションからのＩＯアクセスと、移動処理におけるデータ転送との競合により、処理時間ＥＴ及びｅｔの値がそれぞれ遅延する。なお、第１の要因による遅延は、図１６に示すように、処理時間ｅｔよりもデータ転送時間が長い処理時間ＥＴに与える影響の方が大きい。
【０１８３】
（第２の要因）
階層ストレージ制御装置１０におけるプロセッサの処理負荷が高まると、ＯＳ（例えばカーネル；Kernel）内部のタスクスケジューリングの遅延が発生する可能性が高くなる。移動処理部１５（例えばｋｃｏｐｙｄ）等のモジュール（例えばカーネルドライバ）は、内部でＳＷ割り込みを多用しており、これらの割り込みの呼び出しが遅延することで、移動処理のＩＯアクセス時間が増加する。
【０１８４】
なお、ＩＯアクセスには、ＳＳＤ２０又はＤＩＭＭ３０に対するシーケンシャルアクセス及びランダムアクセス、並びに、これらが混在したアクセス、等のように、様々なアクセスパターンが存在する。これらのアクセスパターンに応じて、ＳＳＤドライバ１３、ＤＩＭＭドライバ１４、及び移動処理部１５における処理負荷の変動の傾向も異なる。
【０１８５】
図１７は、第２の要因による移動処理の遅延時間の一例を示す図である。図１７に示すように、ｋｃｏｐｙｄ等のカーネルドライバの割り込みスケジューリングの遅延等の影響により、処理時間ＥＴ及びｅｔの値がそれぞれ遅延する。なお、図１７に示すように、第２の要因によるＩＯアクセス時間の増加量（遅延量）は、プロセッサの処理負荷の大きさ、ＯＳの実装、及び、タイミング等に依存し、一意に定まらないため、ＩＯアクセスの遅延時間を推定することは困難である。
【０１８６】
そこで、一実施形態に係る階層ドライバ１２は、以下に例示する手法によって、効果的なＮの値の算出及び更新を行なう。なお、Ｎの初期値は、事前評価等によって、適切（適当）な値が事前に設定されるものとする。
【０１８７】
図１８は、一実施形態に係る階層ドライバ１２における移動制御部１２２の動作例を説明するブロック図である。図１８に示すように、移動制御部１２２は、例示的に、測定部１２２ａ、測定データ記憶部１２２ｂ、及び、更新部１２２ｃをそなえてよい。
【０１８８】
測定部１２２ａは、ＤＩＭＭ３０からＳＳＤ２０への移動領域（１以上の部分領域３１ａ、又は、サブＬＵＮ３１の全領域）のＤｏｗｎ処理を実行する際に、Ｄｏｗｎ処理にかかった時間を測定し、測定データを測定データ記憶部１２２ｂに格納する。一例として、測定部１２２ａは、測定データとして、移動処理部１５に対して転送指示を送信してから、移動処理部１５から完了報告を受信するまでの時間を測定してよい。
【０１８９】
測定データ記憶部１２２ｂは、測定部１２２ａによる算出結果を記憶する第２メモリ部の一例であり、例えば、図１９に示す測定データを記憶してよい。
【０１９０】
図１９は、測定データ記憶部１２２ｂが記憶する測定データの一例を示す図である。図１９に示すように、測定データ記憶部１２２ｂは、例えば、測定部１２２ａによる測定データとして、サブＬＵＮ３１の階層移動の処理時間ＥＴ［ｍｓ］、及び、部分領域３１ａの階層移動の処理時間ｅｔ［ｍｓ］、をそれぞれ蓄積する。なお、図１９には、測定データをテーブル形式で例示しているが、これに限定されるものではなく、測定データは配列やＤＢ等の種々の形態でメモリ等に格納されてよい。
【０１９１】
測定部１２２ａは、処理時間を測定した移動領域がサブＬＵＮ３１の場合には、測定データ記憶部１２２ｂに測定データとして処理時間ＥＴ［ｍｓ］を格納し、移動領域が部分領域３１ａの場合には測定データとして処理時間ｅｔ［ｍｓ］を格納してよい。
【０１９２】
なお、図１９に示すように、測定データ記憶部１２２ｂは、測定データのタイムスタンプを格納してもよい。タイムスタンプは、測定の開始若しくは終了時刻、又は、測定データの格納時刻、等を示す情報であってよい。
【０１９３】
また、測定データ記憶部１２２ｂは、処理時間ＥＴ［ｍｓ］と、処理時間ｅｔ［ｍｓ］とを、別々のテーブル、配列、又はＤＢ等に格納してもよい。
【０１９４】
以上のように、測定部１２２ａは、ＤＩＭＭ３０からＳＳＤ２０へ、第１サイズ単位で移動されるデータの移動時間、及び、第２サイズ単位で移動されるデータの移動時間、をそれぞれ算出する算出部の一例である。
【０１９５】
更新部１２２ｃは、測定データ記憶部１２２ｂに格納された測定データ数が一定数に達した場合に、測定データに基づいて、Ｎの値を更新する。
【０１９６】
例えば、更新部１２２ｃは、測定部１２２ａ又は測定データ記憶部１２２ｂを監視し、処理時間ＥＴの測定データ数がＥＴｎに達した場合、及び、処理時間ｅｔの測定データ数がｅｔｎに達した場合、の一方又は双方を満たす場合に、Ｎの値を算出してよい。なお、ＥＴｎ及びｅｔｎは、同一の値であってもよいし、異なる値であってもよい。
【０１９７】
例えば、更新部１２２ｃは、下記式（４）及び式（５）によって、ＥＴ及びｅｔのそれぞれの平均値ＥＴａｖｅ及びｅｔａｖｅを算出してよい。なお、下記式（４）又は式（５）において、ＥＴ１，ＥＴ２，・・・，ＥＴｎ、又は、ｅｔ１，ｅｔ２，・・・，ｅｔｎは、処理時間ＥＴ又はｅｔの各測定データを示す。また、ａｖｅｒａｇｅ関数は、処理時間ＥＴの測定データの平均値、又は、処理時間ｅｔの測定データの平均値、を出力する。
【０１９８】
ＥＴａｖｅ  ＝  ａｖｅｒａｇｅ（ＥＴ１，ＥＴ２，・・・，ＥＴｎ）    （４）
ｅｔａｖｅ  ＝  ａｖｅｒａｇｅ（ｅｔ１，ｅｔ２，・・・，ｅｔｎ）    （５）
【０１９９】
そして、更新部１２２ｃは、上記式（４）及び式（５）の算出結果を用いて、下記式（６）に基づき、Ｎの値を算出してよい。なお、ｉｎｔ関数は、ＥＴａｖｅ  ／  ｅｔａｖｅの結果を超える最小の整数、換言すれば、ＥＴａｖｅ  ／  ｅｔａｖｅの算出結果のうちの小数点以下を切り上げて得られる整数、を出力する。
【０２００】
Ｎ  ＝  ｉｎｔ（ＥＴａｖｅ  ／  ｅｔａｖｅ）  −  １              （６）
【０２０１】
上記式（４）〜式（６）に示すように、更新部１２２ｃは、第１サイズ単位で移動されるデータの移動時間の算出結果の平均値を、第２サイズ単位で移動されるデータの移動時間の算出結果の平均値で除算した結果に基づき、閾値Ｎを変更するといえる。
【０２０２】
或いは、更新部１２２ｃは、測定データの数がＥＴｎ及び／又はｅｔｎに達した場合にＮの値を算出するのではなく、一定時間ごとに、測定データ記憶部１２２ｂにおける直近の一定時間内に測定された測定データを用いて、Ｎの値を算出してもよい。また、更新部１２２ｃは、上記式（４）及び式（５）において、直近の測定データに近いほどウェイトが大きくなる加重平均をとってもよい。
【０２０３】
そして、更新部１２２ｃは、算出したＮの値を、移動領域決定部１２５に通知することで、移動領域決定部１２５で用いるＮの値を更新してよい。
【０２０４】
また、更新部１２２ｃは、Ｎの値を算出又は更新すると、測定データ記憶部１２２ｂに格納（蓄積）された測定データをクリア、例えば、消去又は無効化してよい。
【０２０５】
以上のように、更新部１２２ｃは、測定部１２２ａによる算出結果に基づいて、閾値Ｎを変更する変更部の一例である。
【０２０６】
移動制御部１２２は、運用中に、測定部１２２ａ及び更新部１２２ｃによる上述した処理を繰り返し（例えば定期的に）実行することで、効果的なＮの値の算出及び更新を行なうことができる。
【０２０７】
また、Ｎの値の算出及び更新の１サイクルごとに、測定データ記憶部１２２ｂに格納された測定データが消去又は無効化されるため、直前に測定された遅延時間をＮの値の算出に反映させることができる。これにより、時間的局所性又は空間的局所性のあるＩＯアクセスパターンに追従して、柔軟にＮの値を算出することができる。
【０２０８】
〔１−３〕階層ストレージ制御装置のハードウェア構成例
次に、図２０を参照して、図２及び図１０に示す階層ストレージ制御装置１０のハードウェア構成について説明する。図２０は一実施形態の一例としての階層ストレージ装置１における階層ストレージ制御装置１０のハードウェア構成例を示す図である。
【０２０９】
階層ストレージ制御装置１０は、図２０に示すように、プロセッサ１０ａ、メモリ１０ｂ、記憶部１０ｃ、ＩＦ（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）等が挙げられる。フラッシュメモリとしては、例示的に、ＵＳＢメモリやＳＤカード等が挙げられる。なお、ＣＤとしては、例示的に、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ等が挙げられる。また、ＤＶＤとしては、例示的に、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等が挙げられる。
【０２２１】
なお、階層ストレージ制御装置１０の上述したハードウェア構成は例示である。従って、階層ストレージ制御装置１０内でのハードウェアの増減（例えば任意のブロックの追加や省略）、分割、任意の組み合わせでの統合、バスの追加又は省略等は適宜行なわれてもよい。
【０２２２】
〔２〕動作例
次に、図２１〜図２７を参照して、上述の如く構成された一実施形態に係る階層ストレージ装置１の動作例を説明する。
【０２２３】
〔２−１〕キュー制御部の動作例
図２１に示すように、キュー制御部１１ｃは、移動判定部１１ｂから以下の情報を受信する（ステップＳ１）。
【０２２４】
（１）予測移動対象のサブＬＵＮ。
（２）Ｕｐ対象のサブＬＵＮ、及び、各サブＬＵＮのＩＯアクセス数。
（３）Ｄｏｗｎ対象のサブＬＵＮ。
【０２２５】
キュー制御部１１ｃは、上記（１）及び（２）のインターバル（第１のタイミング）で決定されたサブＬＵＮ  ＩＤと、低優先キュー１０７（Ｄｏｗｎ用キュー１０７ｂ）に登録済みの過去のインターバル（第２のタイミング）で決定されたサブＬＵＮ  ＩＤとを比較する（ステップＳ２）。そして、キュー制御部１１ｃは、一致するサブＬＵＮ  ＩＤがあるか否かを判定する（ステップＳ３）。
【０２２６】
一致するサブＬＵＮ  ＩＤがある場合（ステップＳ３でＹｅｓ）、キュー制御部１１ｃは、当該サブＬＵＮ  ＩＤを低優先キュー１０７（Ｄｏｗｎ用キュー１０７ｂ）から削除し（ステップＳ４）、処理がステップＳ５に移行する。一方、一致するサブＬＵＮ  ＩＤがない場合（ステップＳ３でＮｏ）、処理がステップＳ５に移行する。
【０２２７】
ステップＳ５では、キュー制御部１１ｃは、上記（１）を高優先キュー１０６（予測移動用キュー１０６ａ）に全てプッシュする。また、キュー制御部１１ｃは、上記（３）を低優先キュー１０７（Ｄｏｗｎ用キュー１０７ｂ）に全てプッシュする（ステップＳ６）。なお、ステップＳ５及びＳ６は逆順でもよいし、並行して実行されてもよい。
【０２２８】
次いで、キュー制御部１１ｃは、上記（２）の各サブＬＵＮのＩＯアクセス数と閾値Ｔｈとを比較し（ステップＳ７）、ＩＯアクセス数が閾値Ｔｈ以上のサブＬＵＮを高優先キュー１０６（高ＩＯアクセス用キュー１０６ｂ）に全てプッシュする（ステップＳ８）。
【０２２９】
また、キュー制御部１１ｃは、ＩＯアクセス数が閾値Ｔｈ未満のサブＬＵＮを低優先キュー１０７（その他用キュー１０７ａ）に全てプッシュする（ステップＳ９）。なお、ステップＳ８及びＳ９は逆順でもよいし、並行して実行されてもよい。また、ステップＳ５及びＳ６と、ステップＳ７〜Ｓ９とは、逆順でもよいし、並行して実行されてもよい。
【０２３０】
そして、キュー制御部１１ｃは、一定時間（例えばＴ秒）スリープし（ステップＳ１０）、Ｕｐ用のキュー（高優先キュー１０６、低優先キュー１０７のその他用キュー１０７ａ）の内容を全てクリアして（ステップＳ１１）、処理がステップＳ１に移行する。スリープ後のステップＳ１１から、次のループのステップＳ１０（スリープ）までの期間を、１つのインターバルとして捉えた場合、各インターバルにおいて、ステップＳ１で受信する情報は、第１のタイミングで決定された移動対象についての移動指示であるといえる。また、ステップＳ１１の処理は、次のステップＳ１で受信する情報（第１のタイミングで決定された情報）をキュー１１ｄに格納するタイミングに先立って、第１のタイミングよりも前の第２のタイミングで決定された移動指示をキュー１１ｄから削除する処理であるといえる。
【０２３１】
〔２−２〕移動指示部の動作例
図２２に示すように、移動指示部１１ｅは、残り時間（Ｒｔｉｍｅ）にＴ（秒）をセットし（ステップＳ２１）、高優先キュー１０６にサブＬＵＮが存在するか否かを判定する（ステップＳ２２）。
【０２３２】
高優先キュー１０６にサブＬＵＮが存在する場合（ステップＳ２２でＹｅｓ）、移動指示部１１ｅは、高優先キュー１０６からサブＬＵＮを１つ取り出し、階層ドライバ１２に対して当該サブＬＵＮの階層移動を指示する（ステップＳ２３）。
【０２３３】
なお、高優先キュー１０６からサブＬＵＮを取り出す優先順位は、予測移動用キュー１０６ａ及び高ＩＯアクセス用キュー１０６ｂのいずれか一方が高くてもよい。この場合、移動指示部１１ｅは、一方からサブＬＵＮを全て取り出した後に、他方からサブＬＵＮを取り出してよい。或いは、優先順位が同じであってもよく、この場合、移動指示部１１ｅは、予測移動用キュー１０６ａ及び高ＩＯアクセス用キュー１０６ｂから交互にサブＬＵＮを取り出してもよい。
【０２３４】
移動指示部１１ｅは、階層移動の完了を待ち合わせ（ステップＳ２４）、例えば階層ドライバ１２から階層移動完了を通知されると、Ｒｔｉｍｅから階層移動の実行時間（Ｍｔｉｍｅ）を減算して、Ｒｔｉｍｅを更新する（ステップＳ２５）。
【０２３５】
移動指示部１１ｅは、Ｒｔｉｍｅが０よりも大きいか否かを判定する（ステップＳ２６）。Ｒｔｉｍｅが０よりも大きい場合（ステップＳ２６でＹｅｓ）、処理がステップＳ２２に移行する。一方、Ｒｔｉｍｅが０以下の場合（ステップＳ２６でＮｏ）、処理がステップＳ２１に移行する。
【０２３６】
ステップＳ２２において、高優先キュー１０６にサブＬＵＮが存在しない場合（ステップＳ２２でＮｏ）、移動指示部１１ｅは、低優先キュー１０７にサブＬＵＮが存在するか否かを判定する（ステップＳ２７）。
【０２３７】
低優先キュー１０７にサブＬＵＮが存在する場合（ステップＳ２７でＹｅｓ）、移動指示部１１ｅは、低優先キュー１０７からサブＬＵＮを１つ取り出し、階層ドライバ１２に対して当該サブＬＵＮの階層移動を指示する（ステップＳ２８）。
【０２３８】
なお、低優先キュー１０７からサブＬＵＮを取り出す優先順位は、その他用キュー１０７ａ及びＤｏｗｎ用キュー１０７ｂで同じであってもよい。この場合、移動指示部１１ｅは、その他用キュー１０７ａ及びＤｏｗｎ用キュー１０７ｂから交互にサブＬＵＮを取り出してよい。或いは、優先順位はいずれか一方が高くてもよく、この場合、移動指示部１１ｅは、例えば、一方からサブＬＵＮを全て取り出した後に、他方からサブＬＵＮを取り出してもよい。
【０２３９】
移動指示部１１ｅは、階層移動の完了を待ち合わせ（ステップＳ２９）、例えば階層ドライバ１２から階層移動完了を通知されると、Ｒｔｉｍｅから階層移動の実行時間（Ｍｔｉｍｅ）を減算して、Ｒｔｉｍｅを更新する（ステップＳ３０）。
【０２４０】
移動指示部１１ｅは、Ｒｔｉｍｅが０よりも大きいか否かを判定する（ステップＳ３１）。Ｒｔｉｍｅが０よりも大きい場合（ステップＳ３１でＹｅｓ）、処理がステップＳ２７に移行する。一方、Ｒｔｉｍｅが０以下の場合（ステップＳ３１でＮｏ）、処理がステップＳ２１に移行する。
【０２４１】
ステップＳ２７において、低優先キュー１０７にサブＬＵＮが存在しない場合（ステップＳ２７でＮｏ）、移動指示部１１ｅは、Ｒｔｉｍｅの間スリープし（ステップＳ３２）、処理がステップＳ２１に移行する。
【０２４２】
〔２−３〕階層ドライバの動作例
図２３に示すように、階層移動処理において、階層ドライバ１２の移動制御部１２２は、移動指示部１１ｅからの移動指示を待つ（ステップＳ４１）。
【０２４３】
移動指示を受信すると、移動制御部１２２は、指示された移動がＳＳＤ２０からＤＩＭＭ３０への移動（Ｕｐ処理）か否かを判定する（ステップＳ４２）。
【０２４４】
ＳＳＤ２０からＤＩＭＭ３０への移動（Ｕｐ処理）の場合（ステップＳ４２でＹｅｓ）、移動制御部１２２は、移動指示に従って、サブＬＵＮ単位で階層移動（Ｕｐ処理）を行なう（ステップＳ４３）。このとき、移動制御部１２２は、移動処理部１５に対して、サブＬＵＮ単位での転送指示を送信する。
【０２４５】
ＢＭＰ管理部１２４は、階層移動したサブＬＵＮに、ＢＭＰ１２３の領域を割り当て（ステップＳ４４）、処理がステップＳ４１に移行する。
【０２４６】
ステップＳ４２において、ＤＩＭＭ３０からＳＳＤ２０への移動（Ｄｏｗｎ処理）の場合（ステップＳ４２でＮｏ）、移動領域決定部１２５は、Ｄｏｗｎ対象のサブＬＵＮに対応する、ＢＭＰ１２３の領域を参照する。そして、移動領域決定部１２５は、ＢＭＰ１２３の領域のうち、ＯＮに設定されたビットの数をカウントする（ステップＳ４５）。
【０２４７】
移動領域決定部１２５は、カウント値Ｘが閾値Ｎ以下か否かを判定し（ステップＳ４６）、カウント値Ｘが閾値Ｎよりも大きい場合（ステップＳ４６でＮｏ）、移動制御部１２２に対して、移動領域としてサブＬＵＮを通知する。移動制御部１２２は、サブＬＵＮ単位で階層移動（Ｄｏｗｎ処理）を実行し（ステップＳ４７）、処理がステップＳ４９に移行する。ステップＳ４７では、移動制御部１２２は、移動処理部１５に対して、サブＬＵＮ単位での転送指示を送信する。
【０２４８】
一方、カウント値Ｘが閾値Ｎ以下の場合（ステップＳ４６でＹｅｓ）、移動領域決定部１２５は、移動制御部１２２に対して、移動領域として、ＯＮに設定されたビットに対応する部分領域を通知する。移動制御部１２２は、部分領域単位で階層移動（Ｄｏｗｎ処理）を順番に実行し（ステップＳ４８）、処理がステップＳ４９に移行する。ステップＳ４８では、移動制御部１２２は、移動処理部１５に対して、部分領域単位での転送指示を送信する。
【０２４９】
ステップＳ４９では、移動制御部１２２は、ＤＩＭＭ３０におけるＤｏｗｎ対象のサブＬＵＮを解放する。
【０２５０】
ＢＭＰ管理部１２４は、Ｄｏｗｎ対象のサブＬＵＮと、ＢＭＰ１２３の領域との対応関係をクリアし（ステップＳ５０）、処理がステップＳ４１に移行する。なお、ステップＳ４９及びＳ５０は逆順で実行されてもよいし、並行して実行されてもよい。
【０２５１】
図２４に示すように、ＢＭＰ更新処理において、ＢＭＰ管理部１２４は、アプリケーションからのＩＯ要求の受信を待ち受ける（ステップＳ５１、ステップＳ５１でＮｏ）。
【０２５２】
アプリケーションからＩＯ要求を受信すると（ステップＳ５１でＹｅｓ）、ＢＭＰ管理部１２４は、階層ＴＢＬ１２６を参照して、ＩＯ要求が階層ＴＢＬ１２６に登録済のサブＬＵＮの範囲か否かを判定する（ステップＳ５２）。ＩＯ要求が範囲外の場合（ステップＳ５２でＮｏ）、処理がステップＳ５１に移行する。
【０２５３】
一方、ＩＯ要求が階層ＴＢＬ１２６に登録済のサブＬＵＮの範囲内の場合（ステップＳ５２でＹｅｓ）、ＢＭＰ管理部１２４は、ＩＯ要求がｗｒｉｔｅ処理を対象としているか否かを判定する（ステップＳ５３）。ＩＯ要求がｗｒｉｔｅ処理を対象としていない場合（ステップＳ５３でＮｏ）、処理がステップＳ５１に移行する。
【０２５４】
ＩＯ要求がｗｒｉｔｅ処理を対象としている場合（ステップＳ５３でＹｅｓ）、ＢＭＰ管理部１２４は、ＢＭＰ１２３に対して、ＩＯアクセス対象の部分領域の番号、例えば、sub-sub-LUN番号を計算し、ＢＭＰ１２３における対応するビットをＯＮに設定し（ステップＳ５４）、処理がステップＳ５１に移行する。
【０２５５】
図２５に示すように、サブＬＵＮ転送測定処理において、移動制御部１２２の測定部１２２ａは、移動制御部１２２から移動処理部１５へサブＬＵＮ単位の転送指示が送信されたか否かを判定する（ステップＳ６１）。サブＬＵＮ単位の転送指示が送信されていない場合（ステップＳ６１でＮｏ）、処理がステップＳ６１に移行する。
【０２５６】
サブＬＵＮ単位の転送指示が送信された場合（ステップＳ６１でＹｅｓ；図２３のステップＳ４７参照）、測定部１２２ａは、開始時刻を記録する（ステップＳ６２）。
【０２５７】
次いで、測定部１２２ａは、移動処理部１５から転送完了通知を受信したか否かを判定する（ステップＳ６３）。転送完了通知を受信していない場合（ステップＳ６３でＮｏ）、処理がステップＳ６３に移行する。
【０２５８】
移動処理部１５から転送完了通知を受信した場合（ステップＳ６３でＹｅｓ）、測定部１２２ａは、現在の時刻と、ステップＳ６２で記録した開始時刻との差分を算出データとして算出する。そして、測定部１２２ａは、算出した測定データを測定データ記憶部１２２ｂに記録し（ステップＳ６４）、処理がステップＳ６１に移行する。
【０２５９】
図２６に示すように、部分領域転送測定処理において、測定部１２２ａは、移動制御部１２２から移動処理部１５へ部分領域単位の転送指示が送信されたか否かを判定する（ステップＳ７１）。部分領域単位の転送指示が送信されていない場合（ステップＳ７１でＮｏ）、処理がステップＳ７１に移行する。
【０２６０】
部分領域単位の転送指示が送信された場合（ステップＳ７１でＹｅｓ；図２３のステップＳ４８参照）、測定部１２２ａは、開始時刻を記録する（ステップＳ７２）。
【０２６１】
次いで、測定部１２２ａは、移動処理部１５から転送完了通知を受信したか否かを判定する（ステップＳ７３）。転送完了通知を受信していない場合（ステップＳ７３でＮｏ）、処理がステップＳ７３に移行する。
【０２６２】
移動処理部１５から転送完了通知を受信した場合（ステップＳ７３でＹｅｓ）、測定部１２２ａは、現在の時刻と、ステップＳ７２で記録した開始時刻との差分を算出データとして算出する。そして、測定部１２２ａは、算出した測定データを測定データ記憶部１２２ｂに記録し（ステップＳ７４）、処理がステップＳ７１に移行する。
【０２６３】
図２７に示すように、閾値更新処理において、更新部１２２ｃは、測定データ記憶部１２２ｂにおける、サブＬＵＮの測定データ数がＥＴｎ以上、且つ、部分領域の測定データ数がｅｔｎ以上か否かを判定する（ステップＳ８１）。条件を満たさない場合（ステップＳ８１でＮｏ）、処理がステップＳ８１に移行する。
【０２６４】
条件を満たす場合（ステップＳ８１でＹｅｓ）、更新部１２２ｃは、下記式（７）〜式（９）に基づきＮを算出し、移動領域決定部１２５で用いられるＮの値を更新する（ステップＳ８２）。
【０２６５】
ＥＴａｖｅ  ＝  ａｖｅｒａｇｅ（ＥＴ１，ＥＴ２，・・・，ＥＴｎ）    （７）
ｅｔａｖｅ  ＝  ａｖｅｒａｇｅ（ｅｔ１，ｅｔ２，・・・，ｅｔｎ）    （８）
Ｎ  ＝  ｉｎｔ（ＥＴａｖｅ  ／  ｅｔａｖｅ）  −  １               （９）
【０２６６】
そして、更新部１２２ｃは、測定データ記憶部１２２ｂにおける、サブＬＵＮ及び部分領域の各測定データをクリアし（ステップＳ８３）、処理がステップＳ８１に移行する。
【０２６７】
なお、上記ステップＳ８１において、更新部１２２ｃは、サブＬＵＮの測定データ数がＥＴｎ以上か否か、及び、部分領域の測定データ数がｅｔｎ以上か否か、のいずれか一方の条件を判定してもよいし、他の条件を判定してもよい。
【０２６８】
〔３〕その他
開示の技術は上述した実施形態に限定されるものではなく、一実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。
【０２６９】
例えば、一実施形態において、ＳＳＤ２０及びＤＩＭＭ３０を用いた階層ストレージ装置１について説明したが、これに限定されるものではなく、例えばキャッシュメモリと主記憶装置とを用いた階層記憶システムにも同様に適用することができる。すなわち、一実施形態は、不揮発性記憶装置の階層記憶システムだけでなく、揮発性記憶装置を含む階層記憶システムにも同様に適用することができる。
【０２７０】
また、一実施形態に係る階層ストレージ装置１は、ＳＳＤ２０及びＤＩＭＭ３０の他に、速度差のある記憶装置にも適用することが可能である。例えばＳＳＤ２０と、ＳＳＤよりも低速なアクセス速度を有するＨＤＤとを用いた階層ストレージ装置等にも適用することが可能である。また、ＳＳＤ２０と、ＳＳＤよりも大容量だが低速なテープドライブ等の磁気記録装置とを用いた階層ストレージ装置等にも適用してもよい。
【０２７１】
さらに、一実施形態において、階層ストレージ制御装置１０の動作を１つのＳＳＤ２０及び１つのＤＩＭＭ３０に着目して説明したが、複数のＳＳＤ２０及び複数のＤＩＭＭ３０が階層ストレージ装置１にそなえられる場合も同様である。
【０２７２】
また、上述した実施形態においては、階層ストレージ制御装置１０がＬｉｎｕｘ  ｄｅｖｉｃｅ−ｍａｐｐｅｒ等の機能を用いる例を示したが、これに限定されるものではない。例えば、他のボリューム管理用ドライバや他のＯＳの機能を用いてもよく、種々変形して実施することができる。
【０２７３】
また、図２、図１０、及び図１８に示す階層ストレージ制御装置１０の各機能ブロックは、それぞれ任意の組み合わせで併合してもよく、分割してもよい。
【０２７４】
上述した実施形態では、ＤＢ１０１、検出部１０２、Ｕｐ判定部１０３、Ｄｏｗｎ判定部１０４、及び、予測移動判定部１０５としての機能を移動判定部１１ｂにそなえた場合について説明したが、これに限定されるものではない。例えば、これらの機能は、階層管理部１１内にそなえられていればよい。また、キュー制御部１１ｃは、移動判定部１１ｂ又はキュー１１ｄにそなえられてもよく、或いは、移動判定部１１ｂ及びキュー１１ｄに分散してそなえられてもよい。
【０２７５】
上述した実施形態では、測定部１２２ａ、測定データ記憶部１２２ｂ、及び、更新部１２２ｃとしての機能を移動制御部１２２にそなえた場合について説明したが、これに限定されるものではない。例えば、これらの機能は、階層ドライバ１２内にそなえられていればよい。また、移動領域決定部１２５は、移動制御部１２２内にそなえられてもよい。
【０２７６】
さらに、一実施形態において、階層ドライバ１２のＢＭＰ１２３、ＢＭＰ管理部１２４、及び、移動領域決定部１２５としての機能は、階層管理部１１とは独立した機能と捉えることができる。すなわち、上述したように、階層管理部１１に代えて、従来の階層管理部１１が用いられた場合でも、上述した階層ドライバ１２による効果と同様の効果を奏することができる。
【０２７７】
また、上述した実施形態では、階層ストレージに適用した場合について説明したが、これに限定されるものでない。例えば、ＤＩＭＭ等の第１の記憶装置がキャッシュメモリである場合についても、上述した実施形態と同様に適用可能であり、上述した実施形態と同様の効果を奏することができる。
【０２７８】
また、上述した開示により一実施形態を当業者によって実施・製造することが可能である。
【０２７９】
〔４〕付記
以上の実施形態に関し、更に以下の付記を開示する。
【０２８０】
（付記１）
第１記憶装置における記憶領域に対する書き込みアクセスの有無を、第１サイズの記憶領域を所定の大きさで分割した第２サイズの部分領域ごとに管理する管理情報を記憶する第１メモリ部と、
前記第１記憶装置から前記第１記憶装置よりもアクセス速度の低い第２記憶装置への前記第１サイズの対象データの移動の実行指示に応じて、前記管理情報を参照して、前記対象データの記憶領域において書き込みアクセスがあった部分領域の数が閾値よりも大きい場合、前記対象データを前記第１サイズ単位で前記第１記憶装置から前記第２記憶装置へ移動し、前記書き込みアクセスがあった部分領域の数が前記閾値以下の場合、前記対象データのうちの前記書き込みアクセスがあった部分領域のデータを前記第２サイズ単位で前記第１記憶装置から前記第２記憶装置へ移動する移動実行部と、
前記第１記憶装置から前記第２記憶装置へ、前記第１サイズ単位で移動されるデータの移動時間、及び、前記第２サイズ単位で移動されるデータの移動時間、をそれぞれ算出する算出部と、
前記算出部による算出結果に基づいて、前記閾値を変更する変更部と、をそなえる
情報処理装置。
【０２８１】
（付記２）
前記変更部は、前記第１サイズ単位で移動されるデータの移動時間の算出結果の数が第１の所定数に達した場合、及び、前記第２サイズ単位で移動されるデータの移動時間の算出結果の数が第２の所定数に達した場合、の少なくとも一方の場合に、前記算出部による算出結果に基づいて、前記閾値を変更する、付記１に記載の情報処理装置。
【０２８２】
（付記３）
前記変更部は、前記第１サイズ単位で移動されるデータの移動時間の算出結果の平均値を、前記第２サイズ単位で移動されるデータの移動時間の算出結果の平均値で除算した結果に基づき、前記閾値を変更する、付記２に記載の情報処理装置。
【０２８３】
（付記４）
前記算出部による算出結果を記憶する第２メモリ部をそなえ、
前記変更部は、前記第２メモリ部に記憶される算出結果に基づいて、前記閾値を変更し、前記閾値を変更すると、前記第２メモリ部に記憶される算出結果をクリアする、付記１〜３のいずれか１項に記載の情報処理装置。
【０２８４】
（付記５）
前記第１記憶装置と、前記第２記憶装置と、の間でデータを移動させる移動処理を指示するための移動指示を格納するキューと、
前記移動処理の対象データを決定し、決定した対象データについての移動指示を前記キューに格納する決定部と、
第１のタイミングで決定された対象データについての移動指示が前記キューに格納されるタイミングに先立って、前記キューに格納された移動指示のうち、前記第１のタイミングよりも前の第２のタイミングで決定された前記第２記憶装置から前記第１記憶装置への移動指示を削除対象として前記キューから削除する削除部と、
前記キューに格納された移動指示を読み出し、当該移動指示に従った前記移動処理の実行を制御する実行制御部と、をそなえ、
前記第２記憶装置から前記第１記憶装置への移動指示における対象データは、前記第１記憶装置において、アクセス集中が発生しているデータ、又は、アクセス集中の発生が予測されるデータである、付記１〜４のいずれか１項に記載の情報処理装置。
【０２８５】
（付記６）
第１記憶装置における記憶領域に対する書き込みアクセスの有無を、第１サイズの記憶領域を所定の大きさで分割した第２サイズの部分領域ごとに管理する管理情報を第１メモリ部に記憶し、
前記第１記憶装置から前記第１記憶装置よりもアクセス速度の低い第２記憶装置への前記第１サイズの対象データの移動の実行指示に応じて、前記管理情報を参照して、前記対象データの記憶領域において書き込みアクセスがあった部分領域の数が閾値よりも大きい場合、前記対象データを前記第１サイズ単位で前記第１記憶装置から前記第２記憶装置へ移動し、
前記書き込みアクセスがあった部分領域の数が前記閾値以下の場合、前記対象データのうちの前記書き込みアクセスがあった部分領域のデータを前記第２サイズ単位で前記第１記憶装置から前記第２記憶装置へ移動し、
前記第１記憶装置から前記第２記憶装置へ、前記第１サイズ単位で移動されるデータの移動時間、及び、前記第２サイズ単位で移動されるデータの移動時間、をそれぞれ算出し、
算出結果に基づいて、前記閾値を変更する、
処理をコンピュータに実行させる、情報処理プログラム。
【０２８６】
（付記７）
前記変更は、前記第１サイズ単位で移動されるデータの移動時間の算出結果の数が第１の所定数に達した場合、及び、前記第２サイズ単位で移動されるデータの移動時間の算出結果の数が第２の所定数に達した場合、の少なくとも一方の場合に、前記算出結果に基づいて、前記閾値を変更する、付記６に記載の情報処理プログラム。
【０２８７】
（付記８）
前記変更は、前記第１サイズ単位で移動されるデータの移動時間の算出結果の平均値を、前記第２サイズ単位で移動されるデータの移動時間の算出結果の平均値で除算した結果に基づき、前記閾値を変更する、付記７に記載の情報処理プログラム。
【０２８８】
（付記９）
前記算出結果を第２メモリ部に記憶し、
前記第２メモリ部に記憶される算出結果に基づいて、前記閾値を変更し、
前記閾値を変更すると、前記第２メモリ部に記憶される算出結果をクリアする、
処理を前記コンピュータに実行させる、付記６〜８のいずれか１項に記載の情報処理プログラム。
【０２８９】
（付記１０）
前記第１記憶装置と、前記第２記憶装置と、の間でデータを移動させる移動処理の対象データを決定し、
第１のタイミングで決定された対象データについての移動指示をキューに格納し、
前記キューに格納された移動指示のうち、前記第１のタイミングよりも前の第２のタイミングで決定された前記第２記憶装置から前記第１記憶装置への移動指示を削除対象として前記キューから削除し、
前記キューに格納された移動指示を読み出し、当該移動指示に従った前記移動処理の実行を制御する、
処理を前記コンピュータに実行させ、
前記第２記憶装置から前記第１記憶装置への移動指示における対象データは、前記第１記憶装置において、アクセス集中が発生しているデータ、又は、アクセス集中の発生が予測されるデータである、付記６〜９のいずれか１項に記載の情報処理プログラム。
【符号の説明】
【０２９０】
１    階層ストレージ装置
２    ホスト装置
１０    階層ストレージ制御装置
１１    階層管理部
１１ａ    データ収集部
１１ｂ    移動判定部
１１ｃ    キュー制御部
１１ｄ    キュー
１１ｅ    移動指示部
１００    ストレージシステム
１０１    ＤＢ
１０２    検出部
１０３    Ｕｐ判定部
１０４    Ｄｏｗｎ判定部
１０５    予測移動判定部
１０６    高優先キュー
１０６ａ    予測移動用キュー
１０６ｂ    高ＩＯアクセス用キュー
１０７    低優先キュー
１０７ａ    その他用キュー
１０７ｂ    Ｄｏｗｎ用キュー
１２    階層ドライバ
１２１    ＩＯアクセス制御部
１２２    移動制御部
１２２ａ    測定部
１２２ｂ    測定データ記憶部
１２３ｃ    更新部
１２３    ビットマップ
１２４    ビットマップ管理部
１２５    移動領域決定部
１２６    階層テーブル
１３    ＳＳＤドライバ
１４    ＨＤＤドライバ
１５    移動処理部
２０    ＳＳＤ
３０    ＤＩＭＭ
【図１】
2020149075.tif 000003
【図２】
2020149075.tif 000004
【図３】
2020149075.tif 000005
【図４】
2020149075.tif 000006
【図５】
2020149075.tif 000007
【図６】
2020149075.tif 000008
【図７】
2020149075.tif 000009
【図８】
2020149075.tif 000010
【図９】
2020149075.tif 000011
【図１０】
2020149075.tif 000012
【図１１】
2020149075.tif 000013
【図１２】
2020149075.tif 000014
【図１３】
2020149075.tif 000015
【図１４】
2020149075.tif 000016
【図１５】
2020149075.tif 000017
【図１６】
2020149075.tif 000018
【図１７】
2020149075.tif 000019
【図１８】
2020149075.tif 000020
【図１９】
2020149075.tif 000021
【図２０】
2020149075.tif 000022
【図２１】
2020149075.tif 000023
【図２２】
2020149075.tif 000024
【図２３】
2020149075.tif 000025
【図２４】
2020149075.tif 000026
【図２５】
2020149075.tif 000027
【図２６】
2020149075.tif 000028
【図２７】
2020149075.tif 000029