(57)【要約】【課題】ＨＤＤ３００から高負荷領域及びその近傍のデータをＳＳＤ２００へ移動する際に、高負荷領域の近傍を適切に選択すること。【解決手段】データ収集部１１１が、ＩＯ数が閾値ｐを上回るセグメントに関して、隣接間距離ｓ以内のセグメントを繋ぎ合わせ、繋ぎ合わせたセグメントとその外側のｓまでの範囲をｎ＿セグメントとして抽出する。そして、ワークロード分析部１１３が、ｎ＿セグメントを単位として、ＨＤＤ３００からＳＳＤ２００にデータを移動する対象を決定する。【選択図】図２
2014191503.tif 000002
【特許請求の範囲】
【請求項１】
ストレージ制御装置の制御プログラムにおいて、
前記ストレージ制御装置に、
第１の記憶装置で使用される領域を所定の大きさで分割した複数の単位領域について単位領域ごとに入出力数を集計させ、
前記入出力数が第１の閾値より大きな単位領域を高負荷領域として特定させ、
特定させた高負荷領域と所定の距離内にある単位領域を繋ぎ合わせた拡張領域と該拡張領域とつながる他の拡張領域とを合わせた領域を移動領域として特定させ、
特定させた移動領域のデータを第１の記憶装置より高速な第２の記憶装置に移動させることを特徴とするストレージ制御装置の制御プログラム。
【請求項２】
前記ストレージ制御装置の制御プログラムはさらに、
前記移動領域が時間の経過とともに拡大した場合に、前記ストレージ制御装置に、拡大した移動領域のデータを第２の記憶装置に移動させることを特徴とする請求項１記載のストレージ制御装置の制御プログラム。
【請求項３】
前記ストレージ制御装置に、
複数の移動領域のうち、全体の入出力数に対して入出力数の和の比率が第２の閾値を超える複数の移動領域のデータを第２の記憶装置に移動させることを特徴とする請求項１記載のストレージ制御装置の制御プログラム。
【請求項４】
前記ストレージ制御装置に、
前記移動領域を一定の時間間隔で特定させ、
前記比率が所定の閾値を超える移動領域のうち、前記時間間隔で所定の回数連続して該閾値を超える移動領域のデータを第２の記憶装置に移動させることを特徴とする請求項３記載のストレージ制御装置の制御プログラム。
【請求項５】
前記ストレージ制御装置に、
前記回数連続して前記閾値を超える移動領域のうち、データを第２の記憶装置に移動させる時間より長い時間、入出力数が前記第１の閾値を超えると予想される移動領域のデータを第２の記憶装置に移動させることを特徴とする請求項４記載のストレージ制御装置の制御プログラム。
【請求項６】
ストレージ制御装置の制御方法において、
前記ストレージ制御装置が、
第１の記憶装置で使用される領域を所定の大きさで分割した複数の単位領域について単位領域ごとに入出力数を集計し、
前記入出力数が第１の閾値より大きな単位領域を高負荷領域として特定し、
特定した高負荷領域と所定の距離内にある単位領域を繋ぎ合わせた拡張領域と該拡張領域とつながる他の拡張領域とを合わせた領域を移動領域として特定し、
特定した移動領域のデータを第１の記憶装置より高速な第２の記憶装置に移動することを特徴とするストレージ制御装置の制御方法。
【請求項７】
第１の記憶装置で使用される領域を所定の大きさで分割した複数の単位領域について単位領域ごとに入出力数を集計する集計部と、
前記集計部により集計された入出力数が第１の閾値より大きな単位領域を高負荷領域として特定する高負荷領域特定部と、
前記高負荷領域特定部により特定された高負荷領域と所定の距離内にある単位領域を繋ぎ合わせた拡張領域と該拡張領域とつながる他の拡張領域とを合わせた領域を移動領域として特定する移動領域特定部と、
前記移動領域特定部により特定された移動領域のデータを第１の記憶装置より高速な第２の記憶装置に移動する移動部と
を備えたことを特徴とするストレージ制御装置。
【請求項８】
第１の記憶装置と、第１の記憶装置より高速な第２の記憶装置と、第１の記憶装置と第２の記憶装置との間のデータの移動を制御するストレージ制御装置とを備えたストレージシステムにおいて、
前記ストレージ制御装置は、
第１の記憶装置で使用される領域を所定の大きさで分割した複数の単位領域について単位領域ごとに入出力数を集計する集計部と、
前記集計部により集計された入出力数が第１の閾値より大きな単位領域を高負荷領域として特定する高負荷領域特定部と、
前記高負荷領域特定部により特定された高負荷領域と所定の距離内にある単位領域を繋ぎ合わせた拡張領域と該拡張領域とつながる他の拡張領域とを合わせた領域を移動領域として特定する移動領域特定部と、
前記移動領域特定部により特定された移動領域のデータを第１の記憶装置より高速な第２の記憶装置に移動する移動部と
を備えたことを特徴とするストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置の制御プログラム、ストレージ制御装置の制御方法、ストレージ制御装置及びストレージシステムに関する。
【背景技術】
【０００２】
ＨＤＤ（Hard  Disk  Drive）などのストレージ装置のワークロード分析を行うと、一部の領域に負荷が偏ることが多く見られる。図１４は、ワークロードの分析例を示す図であり、縦軸は下に向かってオフセットを示し、横軸は経過時間を示す。ここで、オフセットは、利用者に割り当てられたボリュームの先頭アドレスからの差を表す。また、経過時間の単位は分である。
【０００３】
図１４では黒い部分が負荷が高い領域であり、図１４には高負荷領域として３つの塊がある。高負荷領域のうち毎日同様に発生する領域については、静的階層制御が有効である。ここで、静的階層制御とは、毎日決まった時間にそれまでの統計情報を用いて負荷の高い領域のデータをＳＳＤ（Solid  State  Drive）などＨＤＤと比較して高速なストレージ装置に移動する技術である。
【０００４】
例えば、図１４において、３つの塊のうち塊Ａ及び塊Ｂが毎日同様に発生する場合には、塊Ａ及び塊Ｂに対応するデータをＳＳＤに移動することによって、頻繁にアクセスされるデータが高速にアクセスされることになる。したがって、静的階層制御を用いることにより、情報処理システムの性能を向上させることができる。
【０００５】
一方、図１４において、塊Ｃが当日だけに発生する場合には、静的階層制御で塊ＣをＳＳＤに移動しておくことはできない。このため、塊Ｃに対しては、リアルタイムに測定した負荷に基づいて高負荷領域のデータをＳＳＤに移動する動的階層制御が行われる（例えば、非特許文献１参照。）。
【０００６】
また、高アクセス頻度ファイルへのアクセスが発生した時点で、ディスクアレイ装置が、ファイルの使用するセクター等の関連情報を元に、ハードディスク内の所定近傍に位置するセクターに格納されているデータをキャッシュに読み込む従来技術がある。また、アクセスされた論理トラックが存在する割合である存在密度が増加又は一定値以上であれば順アクセス又は大局的な順アクセスと判断し、データが存在するブロック近傍を外部記憶装置から先読みする従来技術がある。また、キュッシュを有するディスク制御装置で、アクセスする物理的な領域の周辺部も併せてロードする従来技術がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００２−２０７６２０号公報
【特許文献２】特開２００２−１８２９７８号公報
【特許文献３】特開平６−１１９２４４号公報
【非特許文献】
【０００８】
【非特許文献１】Kazuichi  Oe，Kazutaka  Ogihara，Yasuo  Noguchi  and  Toshihiro  Ozawa，”Poposal  for  a  hierarchical  storage  system  that  can  move  a  spike  to  high-speed  storage  in  real  time”，the  Annual  Symposium  on  Advanced  Computing  Systems  and  Infrastructures  (SACSIS2012)，Kobe，Japan，May  2012.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
リアルタイムに測定した負荷に基づいて高負荷領域のデータをＳＳＤに移動する動的階層制御に、高負荷領域の近傍のデータも移動する従来技術を適用することにより、情報処理システムの性能を向上させることができる。しかしながら、高負荷領域の近傍のデータをＳＳＤに移動するためには、近傍として適切な領域を選択する必要がある。
【００１０】
本発明は、１つの側面では、高負荷領域の近傍を適切に選択するストレージ制御装置の制御プログラム、ストレージ制御装置の制御方法、ストレージ制御装置及びストレージシステムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本願の開示するストレージ制御装置の制御プログラムは、１つの態様において、ストレージ制御装置に、第１の記憶装置で使用される領域を所定の大きさで分割した複数の単位領域について単位領域ごとに入出力数を集計させる。そして、制御プログラムは、ストレージ制御装置に、前記入出力数が第１の閾値より大きな単位領域を高負荷領域として特定させる。そして、制御プログラムは、ストレージ制御装置に、特定させた高負荷領域と所定の距離内にある単位領域を繋ぎ合わせた拡張領域と該拡張領域とつながる他の拡張領域とを合わせた領域を移動領域として特定させる。そして、制御プログラムは、ストレージ制御装置に、特定させた移動領域のデータを第１の記憶装置より高速な第２の記憶装置に移動させる。
【発明の効果】
【００１２】
１実施態様によれば、高負荷領域の近傍を適切に選択することができる。
【図面の簡単な説明】
【００１３】
【図１Ａ】図１Ａは、実施例に係る階層ストレージ制御装置による動的階層制御を説明するための図である。
【図１Ｂ】図１Ｂは、実施例に係る階層ストレージ制御装置による動的階層制御を説明するための図である。
【図２】図２は、実施例に係る階層ストレージ制御装置の機能構成を示す図である。
【図３】図３は、データベースの一例を示す図である。
【図４】図４は、候補テーブルの一例を示す図である。
【図５】図５は、管理テーブルの一例を示す図である。
【図６】図６は、階層テーブルの一例を示す図である。
【図７】図７は、データ収集部の処理手順を示すフローチャートである。
【図８】図８は、ワークロード分析部の処理手順を示すフローチャートである。
【図９】図９は、移動指示部の処理手順を示すフローチャートである。
【図１０Ａ】図１０Ａは、移動指示を受け取ったときの階層ドライバの処理手順を示すフローチャートである。
【図１０Ｂ】図１０Ｂは、転送指示後に転送完了通知を受け取ったときの階層ドライバの処理手順を示すフローチャートである。
【図１１】図１１は、ユーザＩＯを受け取ったときの階層ドライバの処理手順を示すフローチャートである。
【図１２】図１２は、塊の拡大を行う階層ストレージ制御装置による動的階層制御を説明するための図である。
【図１３】図１３は、階層ストレージ制御プログラムを実行するコンピュータのハードウェア構成を示す図である。
【図１４】図１４は、ワークロードの分析例を示す図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示するストレージ制御装置の制御プログラム、ストレージ制御装置の制御方法、ストレージ制御装置及びストレージシステムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１５】
まず、実施例に係る階層ストレージ制御装置による動的階層制御について説明する。図１Ａ及び図１Ｂは、実施例に係る階層ストレージ制御装置による動的階層制御を説明するための図である。
【００１６】
図１Ａは、ストレージ装置のワークロードの分析例を示す図であり、縦軸は下に向かってオフセットを示し、横軸は経過時間を示す。図１Ａにおいて、網掛けの領域１が高負荷領域を示す。実施例に係る階層ストレージ制御装置は、図の矢印２が示すように、高負荷領域からある決めた範囲を拡張領域とする。
【００１７】
そして、実施例に係る階層ストレージ制御装置は、拡張領域と、拡張領域とつながる別の拡張領域とを合わせて１つの拡張領域とみなす。そして、実施例に係る階層ストレージ制御装置は、拡張領域をＳＳＤにデータを移動する移動領域とする。図１Ａでは、上下の破線の間の領域が移動領域である。
【００１８】
また、実施例に係る階層ストレージ制御装置は、ある時点で移動領域を決定すると、一定時間高負荷が発生しなくなるまで、移動領域を維持する。すなわち、実施例に係る階層ストレージ制御装置は、高負荷領域が消滅し、一定時間高負荷が発生しないと高負荷は消滅したとみなす。図１Ａでは、タイムアウトの矢印が高負荷が発生しない一定時間を示す。
【００１９】
図１Ｂは、ストレージ装置のワークロードの他の分析例を示す図であり、縦軸は上に向かってオフセットを示し、横軸は経過時間を示す。また、ボリュームは１ＧＢ（ギガバイト）単位のセグメントに分割され、経過時間は１分間を単位としている。すなわち、図１Ｂにおいて、網掛けの正方形領域３は、１つのセグメントが１分間高負荷であったことを示す。また、ｓは高負荷領域から拡張領域として拡張するセグメント数を示し、図１Ｂではｓ＝１である。
【００２０】
そして、実施例に係る階層ストレージ制御装置は、高負荷領域のセグメント間で距離がｓ以内のものを繋ぎ合わせてｎ＿セグメントを作成する。ｎ＿セグメントは、ＳＳＤにデータが移動される移動領域であり、データの移動について一体制御される。ｎ＿セグメントのセグメント数は２ｓ＋１以上となる。図１Ｂでは、セグメント数が５の２つのｎ＿セグメントが特定されている。
【００２１】
このように、実施例に係る階層ストレージ制御装置は、ＳＳＤにデータを移動する領域としてｎ＿セグメントを特定することにより、高負荷領域の近傍として適切な領域を選択することができる。
【００２２】
次に、実施例に係る階層ストレージ制御装置の機能構成について説明する。図２は、実施例に係る階層ストレージ制御装置の機能構成を示す図である。図２に示すように、階層ストレージ制御装置１００は、階層管理部１１０と、階層ドライバ１２０と、ＳＳＤドライバ１３０と、ＨＤＤドライバ１４０とを有する。
【００２３】
なお、階層ストレージ制御装置１００は、ＳＳＤ２００及びＨＤＤ３００とともに階層ストレージシステムを形成する。また、階層ストレージ制御装置１００は、階層ストレージ制御装置１００と同様の機能構成を有する階層ストレージ制御プログラムがコンピュータで実行されることにより実現される。また、階層管理部１１０は、ユーザ空間で実行されるプログラムとして実現され、階層ドライバ１２０、ＳＳＤドライバ１３０、ＨＤＤドライバ１４０はＯＳ空間で実行されるプログラムとして実現される。
【００２４】
階層管理部１１０は、blktrace又はiostatを用いてＨＤＤ３００についてトレースされたＩＯの情報に基づいて、ＳＳＤ２００にデータを移動するｎ＿セグメントを決定し、決定したｎ＿セグメントのデータの移動を階層ドライバ１２０に指示する。ここで、blktraceはブロックＩ／ＯレイヤレベルでのＩＯをトレースするコマンドであり、iostatはディスクＩ／Ｏの利用状況を確認するコマンドである。blktrace及びiostatはＯＳ空間で実行される。
【００２５】
階層管理部１１０は、データ収集部１１１と、データベース１１２と、ワークロード分析部１１３と、移動指示部１１６とを有する。
【００２６】
データ収集部１１１は、blktrace又はiostatを用いてＨＤＤ３００についてトレースされたＩＯの情報を１分間隔で収集し、収集した情報に基づいてｎ＿セグメントを特定する。そして、データ収集部１１１は、特定したｎ＿セグメントについてｎ＿セグメント番号を採番し、ｎ＿セグメント番号、セグメント範囲、ＩＯ数をタイムスタンプとともにデータベース１１２に書き込む。
【００２７】
ここで、ｎ＿セグメント番号は、ｎ＿セグメントを識別する番号であり、セグメント範囲は、ｎ＿セグメントの先頭セグメント及び最終セグメントのオフセットである。ＩＯ数は、ｎ＿セグメントに対して１分間に行われたＩＯの合計数であり、タイムスタンプは、時刻を識別する識別子である。ただし、データ収集部１１１は、過去に採番したｎ＿セグメントとセグメント範囲が同じｎ＿セグメントについては、新たに採番することなく、過去に採番したｎ＿セグメント番号を用いる。
【００２８】
データ収集部１１１は、図１Ｂに示したように、高負荷領域のセグメント間で距離がｓ以内のものを繋ぎ合わせてｎ＿セグメントを作成する。データ収集部１１１が、高負荷領域のセグメント間で距離がｓ以内のものを繋ぎ合わせてｎ＿セグメントを作成することによって、階層ストレージ制御装置１００は、高負荷領域の近傍として適切な領域を選択することができる。
【００２９】
データベース１１２は、データ収集部１１１により特定されたｎ＿セグメントに関する情報を記憶する。図３は、データベース１１２の一例を示す図である。図３に示すように、データベース１１２は、ｎ＿セグメント毎に、ｎ＿セグメント番号、セグメント範囲、ＩＯ数及びタイムスタンプを対応させて記憶する。例えば、ｎ＿セグメント番号が「１」であるｎ＿セグメントは、先頭セグメントのオフセットが「３」であり、最終セグメントのオフセットが「５」であり、ＩＯ数が「１０００」であり、タイムスタンプが「１」である。
【００３０】
ワークロード分析部１１３は、データベース１１２が記憶するｎ＿セグメントから、ＳＳＤ２００にデータを移動するｎ＿セグメントを選択し、選択したｎ＿セグメントに関する情報を移動指示部１１６に渡す。
【００３１】
具体的には、ワークロード分析部１１３は、ＩＯ数が多い順にｎ＿セグメントを並べ替える。そして、ワークロード分析部１１３は、以下の計算をｍがmax＿seg＿numに達するか、io＿rateがio＿rate＿valueを超えるまで行う。
【数１】
2014191503.tif 000003
ここで、max＿seg＿numは、同時にＳＳＤ２００へデータの移動を行うｎ＿セグメント数である。また、seg＿sort(k)は、ｋ番目にアクセス数が多いｎ＿セグメントのＩＯ数である。io＿concentrationは、トップｋ個のｎ＿セグメントのＩＯ数の合計であり、この数が多いほどトップｋ個のｎ＿セグメントにアクセスが集中していることを示す。また、ｉｏ＿ａｌｌは、ＩＯ数を全ｎ＿セグメントについて合計した総数であり、io＿rateは、トップｋ個のｎ＿セグメントのＩＯ数の合計の総数に対する割合を％表示したものである。したがって、io＿rateの値が大きいほどトップｋ個のｎ＿セグメントへのアクセスの集中率が高いことを示す。
【００３２】
io＿rate＿valueは、ＳＳＤ２００へデータを移動する候補としてトップｋ個のｎ＿セグメントを選択するか否かの閾値である。すなわち、ワークロード分析部１１３は、io＿rateがio＿rate＿valueを超えた場合は、トップｋ個のｎ＿セグメントへのアクセスの集中率が高いので、トップｋ個のｎ＿セグメントをＳＳＤ２００へデータを移動する候補とする。
【００３３】
また、ワークロード分析部１１３は、候補テーブル１１４及び管理テーブル１１５を有し、ＳＳＤ２００へデータを移動する候補を候補テーブル１１４に登録し、ＳＳＤ２００へデータを移動する対象として選択したｎ＿セグメントを管理テーブル１１５に登録する。
【００３４】
図４は、候補テーブル１１４の一例を示す図である。図４に示すように、候補テーブル１１４は、ｎ＿セグメント毎に、ｎ＿セグメント番号と、先頭セグメント番号と、セグメント数と、連続数とを対応させて記憶する。ここで、先頭セグメント番号は、ｎ＿セグメントの先頭セグメントのオフセットである。セグメント数は、ｎ＿セグメントに含まれるセグメントの個数である。
【００３５】
また、連続数は、候補として連続して候補テーブル１１４に登録された回数を示す。ワークロード分析部１１３は、１分間隔で特定のタイムスタンプの全てのｎ＿セグメントを取り出し、io＿concentration及びio＿rateを計算する。そして、ワークロード分析部１１３は、io＿rateがio＿rate＿valueを超える候補を特定して候補テーブル１１４に登録する場合に、以前に登録されているｎ＿セグメントについては連続数に「１」を加える。また、ワークロード分析部１１３は、候補を候補テーブル１１４に登録する場合に、候補が未登録である場合には、新たにエントリを作成して連続数を「０」にする。また、ワークロード分析部１１３は、候補テーブル１１４に登録されていて、今回は候補として特定されなかったｎ＿セグメントについては連続数を「０」にリセットする。なお、連続数の初期値は「０」である。
【００３６】
そして、ワークロード分析部１１３は、連続数が所定の閾値を超え、かつ、ＩＯの集中率が高い状態がデータをＳＳＤ２００に移動するために必要な時間より長く続くことが期待されるｎ＿セグメントを、ＳＳＤ２００にデータを移動する対象として選択する。そして、ワークロード分析部１１３は、移動対象として選択したｎ＿セグメントを管理テーブル１１５に登録する。
【００３７】
図５は、管理テーブル１１５の一例を示す図である。図５に示すように、管理テーブル１１５は、ｎ＿セグメント毎に、ｎ＿セグメント番号と、先頭セグメント番号と、セグメント数と、連続数とを対応させて記憶する。
【００３８】
ここで、連続数は、トップｋ個の候補が選択された場合に、連続して候補として選択されなかった回数を示す。すなわち、ワークロード分析部１１３は、トップｋ個の候補を選択した場合に、候補として選択されなかったｎ＿セグメントの連続数に「１」を加え、候補として選択されｎ＿セグメントの連続数を「０」にリセットする。なお、連続数の初期値は「０」である。
【００３９】
そして、ワークロード分析部１１３は、連続数が所定の閾値を超えているｎ＿セグメントのデータをＳＳＤ２００からＨＤＤ３００に移動するように移動指示部１１６に指示し、そのｎ＿セグメントを管理テーブル１１５から削除する。
【００４０】
図２に戻って、移動指示部１１６は、ワークロード分析部１１３からの指示に基づいて、階層ドライバ１２０に、ｎ＿セグメントのデータの、ＨＤＤ３００からＳＳＤ２００への移動、又は、ＳＳＤ２００からＨＤＤ３００への移動を指示する。
【００４１】
その際、移動指示部１１６は、ｎ＿セグメントに属する各セグメントのボリューム上のオフセットをＨＤＤ３００上のオフセットに変換してセグメント毎にデータの移動を指示する。例えば、ＨＤＤ３００のセクターサイズが５１２Ｂである場合に、ボリューム上のオフセットが１ＧＢであれば、ＨＤＤ３００上でのオフセットは１×１０２４×１０２４×１０２４／５１２＝２０９７１５２となる。
【００４２】
階層ドライバ１２０は、階層テーブル１２１を有し、ユーザからの階層ストレージに対するＩＯを階層テーブル１２１を用いてＨＤＤドライバ１４０又はＳＳＤドライバ１３０に振り分ける。また、階層ドライバ１２０は、移動指示部１１６からのセグメント移動指示を階層テーブル１２１、ＳＳＤドライバ１３０及びＨＤＤドライバ１４０を用いて実行する。
【００４３】
図６は、階層テーブル１２１の一例を示す図である。図６に示すように、階層テーブル１２１は、ＳＳＤ２００にデータが移動されたセグメント毎に、ＳＳＤオフセットと、ＨＤＤオフセットと、状態を対応させて記憶する。
【００４４】
ＳＳＤオフセットは、ＳＳＤ２００にデータが移動されたセグメントのＳＳＤ２００におけるオフセットを示す。ＳＳＤオフセットは、ボリューム上のサイズ１ＧＢに対応するオフセット２０９７１５２を単位とする固定値であり、「０」、「２０９７１５２」、「４１９４３０４」、「６２９１４５６」、．．．である。
【００４５】
ＨＤＤオフセットは、ＳＳＤ２００にデータが移動されたセグメントのＨＤＤ３００におけるオフセットを示す。ＨＤＤオフセットの値「NULL」は、ＳＳＤオフセットで指定されるＳＳＤ２００の領域が未使用であることを示す。
【００４６】
状態は、セグメントの状態を示し、「allocated」、「Moving（HDD→SSD）」、「Moving（SSD→HDD）」又は「free」である。「allocated」はセグメントがＳＳＤに割り当てられていることを示し、「Moving（HDD→SSD）」はセグメントのデータがＨＤＤ３００からＳＳＤ２００に転送中であることを示す。「Moving（SSD→HDD）」はセグメントのデータがＳＳＤ２００からＨＤＤ３００に転送中であることを示し、「free」はＳＳＤオフセットで指定されるＳＳＤ２００の領域が未使用であることを示す。
【００４７】
図２に戻って、ＳＳＤドライバ１３０は、階層ドライバ１２０の指示に基づいてＳＳＤ２００へのアクセスを制御する。ＨＤＤドライバ１４０は、階層ドライバ１２０の指示に基づいてＨＤＤ３００へのアクセスを制御する。
【００４８】
次に、データ収集部１１１の処理手順について説明する。図７は、データ収集部１１１の処理手順を示すフローチャートである。なお、データ収集部１１１は、blktraceコマンドを６０秒間実行したことを条件として起動される。
【００４９】
図７に示すように、データ収集部１１１は、blktraceコマンドの実行により得られたトレース結果を取り出し、１ＧＢオフセット単位すなわちセグメント単位で各セグメントのＩＯ数を抽出する（ステップＳ１）。
【００５０】
そして、データ収集部１１１は、セグメント毎にＩＯ数が閾値ｐを上回るかどうかを判定し、ｐを上回ったセグメントの抽出を行う（ステップＳ２）。ＩＯ数が閾値ｐを上回ったセグメントは高負荷領域である。
【００５１】
そして、データ収集部１１１は、抽出したセグメントに関して、隣接間距離がｓ以内となったセグメントを繋ぎ合わせていく（ステップＳ３）。そして、データ収集部１１１は、繋ぎ合わせたセグメントとその外側のｓまでの範囲のセグメントをｎ＿セグメントと定義し、抽出順にｎ＿セグメント番号を採番する（ステップＳ４）。
【００５２】
そして、データ収集部１１１は、ｎ＿セグメント毎にｎ＿セグメント番号、セグメント範囲、ＩＯ数をタイムスタンプと共にデータベース１１２に書き込む（ステップＳ５）。
【００５３】
このように、データ収集部１１１は、高負荷のセグメントに関して隣接間距離がｓ以内となったセグメントを繋ぎ合わせてｎ＿セグメントを抽出することにより、高負荷のセグメントの近傍を適切に選択することができる。
【００５４】
次に、ワークロード分析部１１３の処理手順について説明する。図８は、ワークロード分析部１１３の処理手順を示すフローチャートである。図８に示すように、ワークロード分析部１１３は、データベース１１２から直近のタイムスタンプのｎ＿セグメントについてＩＯ数を取り出し（ステップＳ１１）、ＩＯ数が多い順にｎ＿セグメントを並べ替える（ステップＳ１２）。
【００５５】
そして、ワークロード分析部１１３は、各ｎ＿セグメントのＩＯ数を合計することでｉｏ＿ａｌｌを求める（ステップＳ１３）。そして、ワークロード分析部１１３は、以下の計算をｍがmax＿seg＿numに到達するか、io＿rateがio＿rate＿valueを超えるまで行う（ステップＳ１４）。
【００５６】
【数２】
2014191503.tif 000004
【００５７】
そして、io＿rateがio＿rate＿valueを超えた場合には、ワークロード分析部１１３は、以下のステップＳ１５〜ステップＳ２２を行い、ｍがmax＿seg＿numに到達した場合には、ステップＳ２３に移動する。すなわち、io＿rateがio＿rate＿valueを超えた場合には、ワークロード分析部１１３は、対応するｎ＿セグメント番号が連続して何回このトップｋに入ったのかを候補テーブル１１４に記録する（ステップＳ１５）。また、ワークロード分析部１１３は、前タイムスライスでトップｋに入ったｎ＿セグメントで今回トップｋから外れたｎ＿セグメントは、連続数をリセットする（ステップＳ１６）。
【００５８】
そして、ワークロード分析部１１３は、連続数が所定の閾値ｔ1を超えたｎ＿セグメントを移動候補として抽出し、抽出したｎ＿セグメントに含まれるセグメント数をｎとし、ｎ＿セグメントのデータの移動時間Tiering＿timeを計算する（ステップＳ１７）。
【００５９】
ここで、Tiering＿time＝seg＿move＿time×ｎ＋検出遅延であり、seg＿move＿timeは、１セグメントのデータをＨＤＤ３００からＳＳＤ２００へ移動するのに要する時間である。また、検出遅延は、移動候補の検出に要する時間であり、ここではデータの収集間隔の６０秒とする。
【００６０】
そして、ワークロード分析部１１３は、Tiering＿timeとＩＯの集中率が高い状態が続くと期待される時間Life＿ex＿timeとを比較する（ステップＳ１８）。そして、Tiering＿timeがLife＿ex＿timeより小さくない場合には、ワークロード分析部１１３は、ステップＳ２１へ進む。一方、Tiering＿timeがLife＿ex＿timeより小さい場合には、ワークロード分析部１１３は、移動候補ｎ＿セグメントの情報を移動指示部１１６へ送付し、移動候補ｎ＿セグメントのデータのＨＤＤ３００からＳＳＤ２００への移動を指示する（ステップＳ１９）。また、ワークロード分析部１１３は、ＳＳＤ２００へのデータの移動を指示したｎ＿セグメントの情報を管理テーブル１１５に記録する（ステップＳ２０）。
【００６１】
そして、ワークロード分析部１１３は、トップｋに入ったｎ＿セグメント番号と管理テーブル１１５に登録されているｎ＿セグメント番号の突合せを行う。そして、ワークロード分析部１１３は、管理テーブル１１５に登録されているｎ＿セグメント毎にトップｋに入らなかったｎ＿セグメント番号の連続数を「＋１」し、トップｋに入っていたら連続数を「０」にリセットする（ステップＳ２１）。
【００６２】
そして、ワークロード分析部１１３は、管理テーブル１１５に登録されているｎ＿セグメント番号毎に連続数が所定の閾値ｔ2を超えているかどうかの判断を行う。そして、ワークロード分析部１１３は、連続数が所定の閾値ｔ2を超えている場合は、ｎ＿セグメント番号を移動指示部１１６に送付してＳＳＤ２００からＨＤＤ３００へのデータの移動を指示する。また、ワークロード分析部１１３は、管理テーブル１１５に登録されているｎ＿セグメントの情報を削除する（ステップＳ２２）。そして、ワークロード分析部１１３は、６０秒スリープし、ステップＳ１１に戻る。
【００６３】
このように、ワークロード分析部１１３がＩＯの集中度が高いｎ＿セグメントのデータをＨＤＤ３００からＳＳＤ２００に移動するように移動指示部１１６に指示することによって、ユーザはＨＤＤ３００のデータに高速にアクセスすることができる。
【００６４】
次に、移動指示部１１６の処理手順について説明する。図９は、移動指示部１１６の処理手順を示すフローチャートである。図９に示すように、移動指示部１１６は、ワークロード分析部１１３からの移動指示を待つ（ステップＳ３１）。
【００６５】
そして、移動指示があると、移動指示部１１６は、ｎ＿セグメント番号に属する各セグメントのボリューム上のオフセットをＨＤＤ３００上のオフセットに変換する（ステップＳ３２）。
【００６６】
そして、移動指示部１１６は、セグメント毎に、セグメント番号に対応するＨＤＤ３００上のオフセットと、データの移動方向を階層ドライバ１２０に伝達する（ステップＳ３３）。ここで、データの移動方向は、ＨＤＤ３００からＳＳＤ２００か、又は、ＳＳＤ２００からＨＤＤ３００である。そして、移動指示部１１６は、ステップＳ３１に戻り、ワークロード分析部１１３からの移動指示を待つ。
【００６７】
このように、移動指示部１１６が各セグメントのボリューム上のオフセットをＨＤＤ３００上のオフセットに変換することによって、階層ドライバ１２０はＳＳＤ２００とＨＤＤ３００との間でデータを移動することができる。
【００６８】
次に、移動指示を受け取ったときの階層ドライバ１２０の処理手順について図１０Ａ及び図１０Ｂを用いて説明する。図１０Ａは、移動指示を受け取ったときの階層ドライバ１２０の処理手順を示すフローチャートである。
【００６９】
図１０Ａに示すように、階層ドライバ１２０は、移動指示部１１６からの移動指示を待ち（ステップＳ４１）、移動指示があると、ＨＤＤ３００からＳＳＤ２００へのデータの移動であるか否かを判定する（ステップＳ４２）。
【００７０】
その結果、ＨＤＤ３００からＳＳＤ２００へのデータの移動である場合には、階層ドライバ１２０は、移動を指示されたセグメントはＳＳＤ２００へ移動済みであるか否かを判定し（ステップＳ４３）、移動済みである場合には、ステップＳ４１に戻る。
【００７１】
一方、移動済みでない場合には、階層ドライバ１２０は、階層テーブル１２１内のＨＤＤオフセットより「NULL」となっているエントリを探して、ＨＤＤオフセット情報と状態を登録する。登録する状態は、「Moving（HDD→SSD）」である。そして、階層ドライバ１２０は、ＨＤＤ３００からＳＳＤ２００へのデータの転送指示をＨＤＤドライバ１４０及びＳＳＤドライバ１３０に行い（ステップＳ４４）、ステップＳ４１に戻る。
【００７２】
また、ＨＤＤ３００からＳＳＤ２００へのデータの移動でない場合には、階層ドライバ１２０は、階層テーブル１２１内のＨＤＤオフセットよりセグメントを探して、ＨＤＤオフセット情報と状態を登録する。登録する状態は、「Moving（SSD→HDD）」である。そして、階層ドライバ１２０は、ＳＳＤ２００からＨＤＤ３００へのデータの転送指示をＨＤＤドライバ１４０及びＳＳＤドライバ１３０に行い（ステップＳ４５）、ステップＳ４１に戻る。
【００７３】
次に、転送指示後に転送完了通知を受け取ったときの階層ドライバ１２０の処理手順について説明する。図１０Ｂは、転送指示後に転送完了通知を受け取ったときの階層ドライバ１２０の処理手順を示すフローチャートである。
【００７４】
図１０Ｂに示すように、階層ドライバ１２０は、ＳＳＤドライバ１３０及びＨＤＤドライバ１４０からの転送完了通知を待つ（ステップＳ５１）。そして、階層ドライバ１２０は、転送が完了した階層テーブル１２１のエントリをＨＤＤオフセットを用いて探し、状態がMoving（HDD→SSD）の時は状態を「allocated」に変更する。一方、階層ドライバ１２０は、状態がMoving（SSD→HDD）の時は状態を「free」に変更し、対応するHDDオフセットを「NULL」にする（ステップＳ５２）。
【００７５】
このように、階層ドライバ１２０が階層テーブル１２１を用いてＳＳＤ２００とＨＤＤ３００との間でデータを転送することにより、ＩＯが集中するセグメントのデータをＳＳＤ２００に置くことができる。
【００７６】
次に、ユーザＩＯを受け取ったときの階層ドライバ１２０の処理手順について説明する。図１１は、ユーザＩＯを受け取ったときの階層ドライバ１２０の処理手順を示すフローチャートである。
【００７７】
図１１に示すように、階層ドライバ１２０は、ユーザＩＯの受信を待ち（ステップＳ６１）、ユーザＩＯを受信すると、ユーザＩＯのオフセットと階層テーブル１２１に登録されている各オフセット＋セグメントサイズの比較を行う（ステップＳ６２）。
【００７８】
そして、階層ドライバ１２０は、ユーザＩＯのオフセットと一致するオフセットが階層テーブル１２１に登録されているいずれかのセグメント内に存在し、かつ、そのセグメントの状態が「allocated」であるか否かを判定する（ステップＳ６３）。
【００７９】
その結果、ユーザＩＯのオフセットと一致するオフセットが存在し、かつ、状態が「allocated」である場合には、階層ドライバ１２０は、ＳＳＤドライバ１３０へＩＯ命令を送付する（ステップＳ６４）。一方、ユーザＩＯのオフセットと一致するオフセットが存在しないか、又は、状態が「allocated」でない場合には、階層ドライバ１２０は、ＨＤＤドライバ１４０へＩＯ命令を送付する（ステップＳ６５）。そして、階層ドライバ１２０は、ステップＳ６１に戻り、ユーザＩＯの受信を待つ。
【００８０】
上述してきたように、実施例では、データ収集部１１１が、ＩＯ数が閾値ｐを上回るセグメントに関して、隣接間距離ｓ以内のセグメントを繋ぎ合わせ、繋ぎ合わせたセグメントとその外側のｓまでの範囲をｎ＿セグメントとして抽出する。そして、ワークロード分析部１１３が、ｎ＿セグメントを単位として、ＨＤＤ３００からＳＳＤ２００にデータを移動する対象を決定する。したがって、階層ストレージ制御装置１００は、高負荷領域の近傍を適切に選択してＨＤＤ３００からＳＳＤ２００にデータを移動することができ、ＨＤＤ３００へのアクセスを高速化することができる。
【００８１】
なお、実施例では、抽出されたｎ＿セグメントを時間変化させない場合について説明した。しかしながら、ｎ＿セグメントを時間変化させることもできる。そこで、ｎ＿セグメントの時間変化としてｎ＿セグメントを拡大する場合について説明する。
【００８２】
図１２は、ｎ＿セグメントすなわち塊の拡大を行う階層ストレージ制御装置による動的階層制御を説明するための図である。塊の拡大を行う階層ストレージ制御装置は、拡張領域と、拡張領域とつながる別の拡張領域とを合わせて１つの拡張領域とみなす（Ａ）。そして、塊の拡大を行う階層ストレージ制御装置は、拡張領域をＳＳＤにデータを移動する移動領域とする。図１２では、上下の破線の間の領域が移動領域である。
【００８３】
また、塊の拡大を行う階層ストレージ制御装置は、ある時点で塊領域を決定すると、時間の経過とともに塊領域の縮小は行わないが（Ｂ）、塊領域の拡大は行う（Ｃ）。また、塊の拡大を行う階層ストレージ制御装置は、一定時間網掛けの領域１が検出されないと、タイムアウトとみなして塊を終了とみなす。
【００８４】
このような塊の拡大を行う階層ストレージ制御装置は、ワークロード分析部１１３の処理が一部異なる。具体的には、図８のステップＳ２０において、ワークロード分析部１１３は、ＳＳＤ２００へのデータの移動を指示した今回のｎ＿セグメントの情報と管理テーブル１１５の先頭セグメント番号とセグメント数を比較する。
【００８５】
そして、ワークロード分析部１１３は、今回のｎ＿セグメントの情報が管理テーブル１１５のいずれかのエントリと先頭セグメント番号及びセグメント数が完全一致する場合は、ステップＳ２１に進む。あるいは、管理テーブル１１５のいずれかのｎ＿セグメントの領域が今回のｎ＿セグメントの領域より広い場合も、ワークロード分析部１１３は、ステップ２１に進む。
【００８６】
一方、管理テーブル１１５のいずれかのｎ＿セグメントの領域が今回のｎ＿セグメントの領域より狭い場合は、ｎ＿セグメントが拡大したので、ワークロード分析部１１３は、今回のｎ＿セグメントの情報で管理テーブル１１５を更新し、ステップ２１に進む。また、その他の場合には、ワークロード分析部１１３は、今回のｎ＿セグメントの情報を新たなエントリとして管理テーブル１１５に登録し、ステップ２１に進む。
【００８７】
このように、ワークロード分析部１１３は、管理テーブル１１５のいずれかのｎ＿セグメントの領域が今回のｎ＿セグメントの領域より狭い場合に、今回のｎ＿セグメントの情報で管理テーブル１１５を更新する。したがって、階層ストレージ制御装置は、ｎ＿セグメントを時間経過とともに拡大していくことができる。
【００８８】
また、階層ストレージ制御装置１００は、同様の機能を有する階層ストレージ制御プログラムをコンピュータで実行することにより実現される。そこで、階層ストレージ制御プログラムを実行するコンピュータについて説明する。
【００８９】
図１３は、階層ストレージ制御プログラムを実行するコンピュータのハードウェア構成を示す図である。図１３に示すように、コンピュータ４００は、メインメモリ４１０と、ＣＰＵ（Central  Processing  Unit）４２０と、ＬＡＮ（Local  Area  Network）インタフェース４３０と、ＨＤＤ（Hard  Disk  Drive）４４０とを有する。また、コンピュータ４００は、スーパーＩＯ（Input  Output）４５０と、ＤＶＩ（Digital  Visual  Interface）４６０と、ＯＤＤ（Optical  Disk  Drive）４７０とを有する。
【００９０】
メインメモリ４１０は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ４２０は、メインメモリ４１０からプログラムを読み出して実行する中央処理装置である。ＣＰＵ４２０は、メモリコントローラを有するチップセットを含む。
【００９１】
ＬＡＮインタフェース４３０は、コンピュータ４００をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ４４０は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ４５０は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ４６０は、液晶表示装置を接続するインタフェースであり、ＯＤＤ４７０は、ＤＶＤの読み書きを行う装置である。
【００９２】
ＬＡＮインタフェース４３０は、ＰＣＩエクスプレスによりＣＰＵ４２０に接続され、ＨＤＤ４４０及びＯＤＤ４７０は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ４２０に接続される。スーパーＩＯ４５０は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ４２０に接続される。
【００９３】
そして、コンピュータ４００において実行される階層ストレージ制御プログラムは、ＤＶＤに記憶され、ＯＤＤ４７０によってＤＶＤから読み出されてコンピュータ４００にインストールされる。あるいは、階層ストレージ制御プログラムは、ＬＡＮインタフェース４３０を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ４００にインストールされる。そして、インストールされた階層ストレージ制御プログラムは、ＨＤＤ４４０に記憶され、メインメモリ４１０に読み出されてＣＰＵ４２０によって実行される。
【００９４】
また、本実施例では、ＳＳＤ２００とＨＤＤ３００を用いた階層ストレージシステムについて説明したが、本発明はこれに限定されるものではなく、例えば、キャッシュメモリと主記憶装置を用いた階層記憶システムにも同様に適用することができる。すなわち、本発明は、不揮発性記憶装置の階層記憶システムだけでなく、揮発性記憶装置を含む階層記憶システムにも同様に適用することができる。
【００９５】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００９６】
（付記１）ストレージ制御装置の制御プログラムにおいて、
前記ストレージ制御装置に、
第１の記憶装置で使用される領域を所定の大きさで分割した複数の単位領域について単位領域ごとに入出力数を集計させ、
前記入出力数が第１の閾値より大きな単位領域を高負荷領域として特定させ、
特定させた高負荷領域と所定の距離内にある単位領域を繋ぎ合わせた拡張領域と該拡張領域とつながる他の拡張領域とを合わせた領域を移動領域として特定させ、
特定させた移動領域のデータを第１の記憶装置より高速な第２の記憶装置に移動させることを特徴とするストレージ制御装置の制御プログラム。
【００９７】
（付記２）前記ストレージ制御装置の制御プログラムはさらに、前記移動領域が時間の経過とともに拡大した場合に、前記ストレージ制御装置に、拡大した移動領域のデータを第２の記憶装置に移動させることを特徴とする付記１記載のストレージ制御装置の制御プログラム。
【００９８】
（付記３）前記ストレージ制御装置に、
複数の移動領域のうち、全体の入出力数に対して入出力数の和の比率が第２の閾値を超える移動領域のデータを第２の記憶装置に移動させることを特徴とする付記１記載のストレージ制御装置の制御プログラム。
【００９９】
（付記４）前記ストレージ制御装置に、
前記移動領域を一定の時間間隔で特定させ、
前記比率が所定の閾値を超える移動領域のうち、前記時間間隔で所定の回数連続して該閾値を超える移動領域のデータを第２の記憶装置に移動させることを特徴とする付記３記載のストレージ制御装置の制御プログラム。
【０１００】
（付記５）前記ストレージ制御装置に、
前記回数連続して前記閾値を超える移動領域のうち、データを第２の記憶装置に移動させる時間より長い時間、入出力数が前記第１の閾値を超えると予想される移動領域のデータを第２の記憶装置に移動させることを特徴とする付記４記載のストレージ制御装置の制御プログラム。
【０１０１】
（付記６）ストレージ制御装置の制御方法において、
前記ストレージ制御装置が、
第１の記憶装置で使用される領域を所定の大きさで分割した複数の単位領域について単位領域ごとに入出力数を集計し、
前記入出力数が第１の閾値より大きな単位領域を高負荷領域として特定し、
特定した高負荷領域と所定の距離内にある単位領域を繋ぎ合わせた拡張領域と該拡張領域とつながる他の拡張領域とを合わせた領域を移動領域として特定し、
特定した移動領域のデータを第１の記憶装置より高速な第２の記憶装置に移動することを特徴とするストレージ制御装置の制御方法。
【０１０２】
（付記７）第１の記憶装置で使用される領域を所定の大きさで分割した複数の単位領域について単位領域ごとに入出力数を集計する集計部と、
前記集計部により集計された入出力数が第１の閾値より大きな単位領域を高負荷領域として特定する高負荷領域特定部と、
前記高負荷領域特定部により特定された高負荷領域と所定の距離内にある単位領域を繋ぎ合わせた拡張領域と該拡張領域とつながる他の拡張領域とを合わせた領域を移動領域として特定する移動領域特定部と、
前記移動領域特定部により特定された移動領域のデータを第１の記憶装置より高速な第２の記憶装置に移動する移動部と
を備えたことを特徴とするストレージ制御装置。
【０１０３】
（付記８）第１の記憶装置と、第１の記憶装置より高速な第２の記憶装置と、第１の記憶装置と第２の記憶装置との間のデータの移動を制御するストレージ制御装置とを備えた階層ストレージシステムにおいて、
前記ストレージ制御装置は、
第１の記憶装置で使用される領域を所定の大きさで分割した複数の単位領域について単位領域ごとに入出力数を集計する集計部と、
前記集計部により集計された入出力数が第１の閾値より大きな単位領域を高負荷領域として特定する高負荷領域特定部と、
前記高負荷領域特定部により特定された高負荷領域と所定の距離内にある単位領域を繋ぎ合わせた拡張領域と該拡張領域とつながる他の拡張領域とを合わせた領域を移動領域として特定する移動領域特定部と、
前記移動領域特定部により特定された移動領域のデータを第１の記憶装置より高速な第２の記憶装置に移動する移動部と
を備えたことを特徴とするストレージシステム。
【０１０４】
（付記９）ストレージ制御装置の制御プログラムにおいて、
前記ストレージ制御装置に、
第１の記憶装置で使用される領域を所定の大きさで分割した複数の単位領域について単位領域ごとに入出力数を集計させ、
前記入出力数が第１の閾値より大きな単位領域を高負荷領域として特定させ、
特定させた高負荷領域と所定の距離内にある単位領域を繋ぎ合わせた拡張領域と該拡張領域とつながる他の拡張領域とを合わせた領域を移動領域として特定させ、
特定させた移動領域のデータを第１の記憶装置より高速な第２の記憶装置に移動させることを特徴とするストレージ制御装置の制御プログラムを記憶したコンピュータ読み取り可能記憶媒体。
【０１０５】
（付記１０）メモリと該メモリに接続されたＣＰＵとを有するストレージ制御装置において、
前記ＣＰＵに、
第１の記憶装置で使用される領域を所定の大きさで分割した複数の単位領域について単位領域ごとに入出力数を集計させ、
前記入出力数が第１の閾値より大きな単位領域を高負荷領域として特定させ、
特定させた高負荷領域と所定の距離内にある単位領域を繋ぎ合わせた拡張領域と該拡張領域とつながる他の拡張領域とを合わせた領域を移動領域として特定させ、
特定させた移動領域のデータを第１の記憶装置より高速な第２の記憶装置に移動させることを特徴とするストレージ制御装置。
【符号の説明】
【０１０６】
１    網掛けの領域
２    矢印
３    網掛けの正方形領域
１００    階層ストレージ制御装置
１１０    階層管理部
１１１    データ収集部
１１２    データベース
１１３    ワークロード分析部
１１４    候補テーブル
１１５    管理テーブル
１１６    移動指示部
１２０    階層ドライバ
１２１    階層テーブル
１３０    ＳＳＤドライバ
１４０    ＨＤＤドライバ
４００    コンピュータ
４１０    メインメモリ
４２０    ＣＰＵ
４３０    ＬＡＮインタフェース
４４０    ＨＤＤ
４５０    スーパーＩＯ
４６０    ＤＶＩ
４７０    ＯＤＤ
【図１Ａ】
2014191503.tif 000005
【図１Ｂ】
2014191503.tif 000006
【図２】
2014191503.tif 000007
【図３】
2014191503.tif 000008
【図４】
2014191503.tif 000009
【図５】
2014191503.tif 000010
【図６】
2014191503.tif 000011
【図７】
2014191503.tif 000012
【図８】
2014191503.tif 000013
【図９】
2014191503.tif 000014
【図１０Ａ】
2014191503.tif 000015
【図１０Ｂ】
2014191503.tif 000016
【図１１】
2014191503.tif 000017
【図１２】
2014191503.tif 000018
【図１３】
2014191503.tif 000019
【図１４】
2014191503.tif 000020