(57)【特許請求の範囲】
【請求項１】
複数の記憶装置それぞれから所定サイズの記憶域が割り当てられた論理領域に対する情報処理装置からのアクセスの制御に用いられるストレージ制御装置であって、
前記情報処理装置からのアクセスの内容に基づいて、第１の論理領域に対するランダムアクセスの回数を示す情報および前記ランダムアクセスの対象となったデータのサイズを示す情報を取得して記憶手段に格納する取得手段と、
前記記憶手段を参照して、前記第１の論理領域への総アクセス回数に対する前記ランダムアクセスの回数の割合が閾値以上になると、前記ランダムアクセスの対象となったデータのサイズを示す情報に基づいて第２の論理領域に割り当てる記憶域のサイズを決定し、複数の記憶装置を用いて前記第２の論理領域を作成し、前記第１の論理領域へアクセスする代わりに前記第２の論理領域へアクセスするように前記情報処理装置からのアクセスを制御する制御手段と、
を有するストレージ制御装置。
【請求項２】
前記ランダムアクセスの対象となったデータのサイズを示す情報は、各ランダムアクセスの対象となったデータのサイズの平均値であり、
前記制御手段は、前記平均値よりも大きな値を前記第２の論理領域に割り当てる記憶域のサイズと決定する、
請求項１記載のストレージ制御装置。
【請求項３】
適用可能な記憶域のサイズとして、複数のサイズが予め決まっており、
前記取得手段は、前記複数のサイズのうち、最大サイズのｎ（ｎは１より大きな実数）分の１よりも小さいサイズのデータに対するランダムアクセスについて、前記ランダムアクセスの回数を示す情報および前記ランダムアクセスの対象となったデータのサイズを示す情報を取得し、
前記制御手段は、前記複数のサイズのうち前記平均値のｎ倍よりも大きな最小のサイズを前記第２の論理領域に割り当てる記憶域のサイズと決定する、
請求項２記載のストレージ制御装置。
【請求項４】
前記制御手段は、前記第１の論理領域のサイズと前記第２の論理領域のサイズとが同じサイズになるように前記第２の論理領域に割り当てる記憶域の個数を決定する、請求項１乃至３の何れか一項に記載のストレージ制御装置。
【請求項５】
前記制御手段は、前記第１の論理領域に格納されたデータについて、前記第１の論理領域内の先頭位置に対する前記第１の論理領域内での当該データの相対的な位置関係を示す論理アドレスを取得し、当該論理アドレスに基づいて前記第２の論理領域に当該データを格納する、請求項１乃至４の何れか一項に記載のストレージ制御装置。
【請求項６】
前記制御手段は、前記情報処理装置からのアクセスで指定される論理領域の識別子と前記第１の論理領域との対応関係に代えて前記論理領域の識別子と前記第２の論理領域との対応関係を示す情報を作成し、新たに作成した対応関係に基づいてアクセス先を決定することで、前記情報処理装置からのアクセスを制御する、請求項１乃至５の何れか一項に記載のストレージ制御装置。
【請求項７】
複数の記憶装置を備えており複数の記憶装置それぞれの記憶域が割り当てられた論理領域に対する情報処理装置からのアクセスを制御するストレージシステムであって、
前記情報処理装置からのアクセスの内容に基づいて、第１の論理領域に対するランダムアクセスの回数を示す情報および前記ランダムアクセスの対象となったデータのサイズを示す情報を取得し、前記第１の論理領域への総アクセス回数に対する前記ランダムアクセスの回数の割合が閾値以上になると、前記ランダムアクセスの対象となったデータのサイズを示す情報に基づいて第２の論理領域に割り当てる記憶域のサイズを決定し、複数の記憶装置を用いて前記第２の論理領域を作成し、前記第１の論理領域へアクセスする代わりに前記第２の論理領域へアクセスするように前記情報処理装置からのアクセスを制御するストレージ制御装置、
を有するストレージシステム。
【請求項８】
複数の記憶装置それぞれから所定サイズの記憶域が割り当てられた論理領域に対する情報処理装置からのアクセスの制御に用いられるストレージ制御装置であって、
前記情報処理装置からのアクセスの内容に基づいて、第１の論理領域に対するランダムアクセスの頻度を示す情報および前記ランダムアクセスの対象となったデータのサイズを示す情報を取得して記憶手段に格納する取得手段と、
前記記憶手段を参照して、前記ランダムアクセスの頻度が閾値以上になると、前記ランダムアクセスの対象となったデータのサイズを示す情報に基づいて第２の論理領域に割り当てる記憶域のサイズを決定し、複数の記憶装置を用いて前記第２の論理領域を作成し、前記第１の論理領域へアクセスする代わりに前記第２の論理領域へアクセスするように前記情報処理装置からのアクセスを制御する制御手段と、を有し、
前記ランダムアクセスの対象となったデータのサイズを示す情報は、各ランダムアクセスの対象となったデータのサイズの平均値であり、
前記制御手段は、前記平均値よりも大きな値を前記第２の論理領域に割り当てる記憶域のサイズと決定する、
ストレージ制御装置。
【請求項９】
複数の記憶装置を備えており複数の記憶装置それぞれの記憶域が割り当てられた論理領域に対する情報処理装置からのアクセスを制御するストレージシステムであって、
前記情報処理装置からのアクセスの内容に基づいて、第１の論理領域に対するランダムアクセスの頻度を示す情報および前記ランダムアクセスの対象となったデータのサイズを示す情報を取得し、前記ランダムアクセスの頻度が閾値以上になると、前記ランダムアクセスの対象となったデータのサイズを示す情報に基づいて第２の論理領域に割り当てる記憶域のサイズを決定し、複数の記憶装置を用いて前記第２の論理領域を作成し、前記第１の論理領域へアクセスする代わりに前記第２の論理領域へアクセスするように前記情報処理装置からのアクセスを制御するストレージ制御装置を有し、
前記ランダムアクセスの対象となったデータのサイズを示す情報は、各ランダムアクセスの対象となったデータのサイズの平均値であり、
前記ストレージ制御装置は、前記平均値よりも大きな値を前記第２の論理領域に割り当てる記憶域のサイズと決定する、
ストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージ制御装置、およびストレージシステムに関する。
【背景技術】
【０００２】
現在、データを蓄積・利用するためのストレージシステムが利用されている。ストレージシステムは、複数の記憶装置と複数の記憶装置に格納されたデータへのアクセスを制御するストレージ制御装置とを含む。ストレージシステムでは、ＲＡＩＤ（Redundant Arrays of Independent Disks）の技術を利用することがある。ＲＡＩＤでは、複数の記憶装置に分散してデータを配置することがある。この手法をストライピング（Striping）と呼ぶことがある。ストライピングにより、例えば、アクセスに伴う負荷の複数の記憶装置への分散化を図れ、アクセスの高速化を図れる。
【０００３】
ストライピングでは各記憶装置の記憶領域を所定サイズに分割する。分割された所定サイズの記憶域をストリップ（strip）と呼ぶことがある。ストリップのサイズをストリップサイズ（strip size）またはストライプ深度（Stripe depth）などと呼ぶことがある。異なる記憶装置上の分割した記憶域（ストリップ）を組み合わせてストライプ（Stripe）と呼ばれる１つの論理的な記憶領域とする。例えば、ＲＡＩＤ０の場合、１つのストライプの記憶容量は、ストリップサイズと当該ストライプに記憶域を提供する記憶装置の数との積である。ストライプを複数組み合わせて１つの論理的な記憶領域とすることもできる。
【０００４】
ストリップサイズを調整することで、データへのアクセスの効率化を図れる場合がある。例えば、比較的大きなサイズ（例えば、１ストライプの記憶容量以上のサイズ）のデータに対する複数のアクセスが重複して発生すると、複数のアクセスを並行に処理できないことがある。一方、比較的小さなサイズのデータに対するアクセスが特定の記憶装置に集中すると、複数の記憶装置に並行してアクセスしないことがある。この場合、ストライピングによる負荷の分散化を十分に図れていない可能性がある。そこで、アクセスログに基づき、サポートするストリップサイズ別にアクセスサイズをカウントし、要求されたアクセスサイズの発生頻度によりアクセスの傾向を把握して、ストリップサイズを変更する提案がある。
【０００５】
また、書き込みまたは読み出しのコマンドを監視し、特定のサイズのデータが規定の割合を超えると、アレイのストリップサイズを変更する提案がある。
なお、ホスト装置からのアクセス情報に基づいて、パウンダリ（ストレージ装置上のキャッシュメモリへのデータの書き込み開始位置のずれ）の有無やパウンダリの大きさを解析する提案がある。更に、ストレージシステムの負荷が低い時間帯に、ストレージ装置の構成情報をストレージ装置から取得する提案もある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１１−１５４０５７号公報
【特許文献２】特開平８−１２９４６１号公報
【特許文献３】特開２００８−２６９０１５号公報
【特許文献４】特開２００６−１３４０２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ストライピングによる論理的な記憶領域（論理領域と呼ぶことがある）は、複数作成できる。各論理領域は種々の用途に用いられる。用途によってはランダムアクセスが頻発する論理領域も存在し得る。例えば、論理領域をデータベースに用いる場合、当該論理領域に対してランダムアクセスが頻発し得る。論理領域に対してランダムアクセスが頻発すると、現在のストリップサイズでは当該論理領域のデータへのアクセスが非効率になることがある。そこで、ランダムアクセスされる論理領域について、ストリップサイズの調整をどのようにして効率的に行うかが問題となる。
【０００８】
例えば、ランダムアクセスでは比較的小さなサイズのデータへアクセスすることがある。比較的小さなサイズのデータへアクセスする場合、各記憶装置において記憶域を物理的に探索するための所要時間がアクセス性能に及ぼす影響が大きくなる。したがって、アクセス対象となる論理領域内の範囲が複数の記憶装置上の記憶域に跨ると、複数の記憶装置で記憶域の探索を行うことになり、そのオーバーヘッドでアクセス性能が悪化し得る。このため、例えば、ランダムアクセスされるサイズに対してストリップサイズが小さいと、ストライピングによるアクセス性能を十分に発揮できないことがある。
【０００９】
一側面によれば、本発明は、ランダムアクセスされる論理領域のチューニングを効率的に行うことができるストレージ制御装置、およびストレージシステムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
一実施態様によれば、複数の記憶装置それぞれから所定サイズの記憶域が割り当てられた論理領域に対する情報処理装置からのアクセスの制御に用いられるストレージ制御装置が提供される。ストレージ制御装置は、取得手段と制御手段とを有する。取得手段は、情報処理装置からのアクセスの内容に基づいて、第１の論理領域に対するランダムアクセスの回数を示す情報およびランダムアクセスの対象となったデータのサイズを示す情報を取得して記憶手段に格納する。制御手段は、記憶手段を参照して、第１の論理領域への総アクセス回数に対するランダムアクセスの回数の割合が閾値以上になると、ランダムアクセスの対象となったデータのサイズを示す情報に基づいて第２の論理領域に割り当てる記憶域のサイズを決定し、複数の記憶装置を用いて第２の論理領域を作成し、第１の論理領域へアクセスする代わりに第２の論理領域へアクセスするように情報処理装置からのアクセスを制御する。
【００１１】
また、一実施態様によれば、複数の記憶装置を備えており複数の記憶装置それぞれの記憶域が割り当てられた論理領域に対する情報処理装置からのアクセスを制御するストレージシステムが提供される。ストレージシステムはストレージ制御装置を有する。ストレージ制御装置は、情報処理装置からのアクセスの内容に基づいて、第１の論理領域に対するランダムアクセスの回数を示す情報およびランダムアクセスの対象となったデータのサイズを示す情報を取得し、第１の論理領域への総アクセス回数に対するランダムアクセスの回数の割合が閾値以上になると、ランダムアクセスの対象となったデータのサイズを示す情報に基づいて第２の論理領域に割り当てる記憶域のサイズを決定し、複数の記憶装置を用いて第２の論理領域を作成し、第１の論理領域へアクセスする代わりに第２の論理領域へアクセスするように情報処理装置からのアクセスを制御する。
【発明の効果】
【００１３】
一実施態様によれば、ランダムアクセスされる論理領域のチューニングを効率的に行うことができる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態のストレージ制御装置を示す図である。
【図２】第２の実施の形態のストレージシステムを示す図である。
【図３】ストレージシステムのハードウェア例を示す図である。
【図４】ＣＥのソフトウェア例を示す図である。
【図５】論理ボリュームの例を示す図である。
【図６】読み出しリクエストの例を示す図である。
【図７】利用可能ストリップサイズの例を示す図である。
【図８】ＲＡＩＤグループ管理テーブルの例を示す図である。
【図９】論理ボリューム管理テーブルの例を示す図である。
【図１０】アクセス管理テーブルの例を示す図である。
【図１１】ランダムアクセス閾値の例を示す図である。
【図１２】アクセス統計テーブルの例を示す図である。
【図１３】読み出しアクセス受信時の処理例を示すフローチャートである。
【図１４】チューニング実行時間の決定例を示すフローチャートである。
【図１５】チューニングの処理例を示すフローチャートである。
【図１６】チューニングの第１の具体例を示す図である。
【図１７】チューニングの第２の具体例を示す図である。
【図１８】論理ボリュームの他の例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージ制御装置を示す図である。ストレージ制御装置１は、情報処理装置２および記憶装置３，４，５，６を含む複数の記憶装置と接続される。ストレージ制御装置１は、論理領域Ｂ１に対する情報処理装置２からのアクセスの制御に用いられる。論理領域Ｂ１は、記憶装置３，４，５，６を用いて作成される。記憶装置３，４，５，６は、所定サイズの記憶域を有する。記憶装置３は記憶域Ｂ１１を有する。記憶装置４は記憶域Ｂ１２を有する。記憶装置５は記憶域Ｂ１３を有する。記憶装置６は記憶域Ｂ１４を有する。論理領域Ｂ１は、記憶域Ｂ１１，Ｂ１２，Ｂ１３，Ｂ１４が割り当てられた論理的な記憶領域である。論理領域Ｂ１のサイズは、記憶域Ｂ１１，Ｂ１２，Ｂ１３，Ｂ１４のサイズの合計となる。論理領域Ｂ１は、ストライピングにより作成された領域であるということができる。
【００１６】
ストレージ制御装置１は、取得手段１ａ、記憶手段１ｂおよび制御手段１ｃを有する。
取得手段１ａは、情報処理装置２からのアクセスの内容に基づいて、論理領域Ｂ１に対するランダムアクセスの頻度を示す情報を記憶手段１ｂに格納する。また、取得手段１ａは、当該ランダムアクセスの対象となったデータのサイズを示す情報を取得して記憶手段１ｂに格納する。
【００１７】
記憶手段１ｂは、取得手段１ａが取得したランダムアクセスの頻度を示す情報およびランダムアクセスの対象となったデータのサイズを示す情報を、論理領域Ｂ１を示す情報に対応付けて記憶する。
【００１８】
制御手段１ｃは、記憶手段１ｂを参照して、ランダムアクセスの頻度が閾値以上になると、ランダムアクセスの対象となったデータのサイズを示す情報に基づいて、論理領域Ｂ２に割り当てる記憶域のサイズを決定する。
【００１９】
ここで、ランダムアクセスの頻度とは、例えば、全体のアクセス総数に対するランダムアクセス数の割合である。また、例えば、ある一定期間におけるランダムアクセスの回数をランダムアクセスの頻度としてもよい。
【００２０】
論理領域Ｂ２は、論理領域Ｂ１に代替するための論理領域である。例えば、制御手段１ｃは、ランダムアクセスの対象となった複数のデータのサイズを示す情報に基づき当該サイズの平均値を求め、その平均値よりも大きな値を論理領域Ｂ２に割り当てる記憶域のサイズと決定することが考えられる。ランダムアクセスの対象となるデータが２以上の記憶装置に跨って配置される可能性を低減できるからである。例えば、平均値の２倍以上になるように決定してもよい。
【００２１】
また、記憶域Ｂ１１，Ｂ１２，Ｂ１３，Ｂ１４が十分大きいと判断できる場合には、記憶域Ｂ１１，Ｂ１２，Ｂ１３，Ｂ１４それぞれのサイズよりも小さなサイズを論理領域Ｂ２に割り当てる記憶域のサイズと決定してもよい。なぜなら、ストリップサイズが大き過ぎると、特定の記憶装置にアクセスが集中する可能性が高まる。よって、この場合、特定の記憶装置の負荷が高まる可能性もあり、アクセス性能が悪化し得るからである。
【００２２】
制御手段１ｃは、記憶装置３，４，５，６および記憶装置３，４，５，６以外の複数の他の記憶装置の少なくとも一部を用いて、論理領域Ｂ２を作成する。例えば、制御手段１ｃは、記憶域Ｂ２１，Ｂ２２を作成して論理領域Ｂ２に割り当てる。記憶域Ｂ２１，Ｂ２２のサイズを記憶域Ｂ１１，Ｂ１２，Ｂ１３，Ｂ１４の現サイズよりも大きくする場合、例えば、当該現サイズの２倍とする。具体的には、制御手段１ｃは、記憶域Ｂ１１，Ｂ１２を結合した領域に対応する記憶域Ｂ２１を作成して記憶装置３に格納する。また、制御手段１ｃは、記憶域Ｂ１３，Ｂ１４を結合した領域に対応する記憶域Ｂ２２を作成して記憶装置４に格納する。論理領域Ｂ２のサイズは、例えば論理領域Ｂ１と同じである。
【００２３】
制御手段１ｃは、論理領域Ｂ１へアクセスする代わりに論理領域Ｂ２へアクセスするように情報処理装置２からのアクセスを制御する。例えば、情報処理装置２が論理領域Ｂ１に対応付けられた所定の識別子を用いて論理領域Ｂ１へアクセスしているとする。その場合、例えば、当該識別子と論理領域Ｂ１（例えば、論理領域Ｂ１を示すアドレスなど）との対応関係が記憶手段１ｂに格納される。例えば、制御手段１ｃは論理領域Ｂ２を作成した後、当該識別子と論理領域Ｂ１との対応関係を変更して当該識別子を論理領域Ｂ２に対応付ける。このようにして、制御手段１ｃは、情報処理装置２が当該識別子を用いて論理領域Ｂ２へアクセスできるようにする。
【００２４】
ストレージ制御装置１によれば、取得手段１ａにより、情報処理装置２からのアクセスの内容に基づいて、論理領域Ｂ１に対するランダムアクセスの頻度を示す情報およびランダムアクセスの対象となったデータのサイズを示す情報が取得されて記憶手段１ｂに格納される。制御手段１ｃにより、記憶手段１ｂが参照されて、ランダムアクセスの頻度が閾値以上になると、ランダムアクセスの対象となったデータのサイズを示す情報に基づいて論理領域Ｂ２に割り当てる記憶域のサイズが決定される。制御手段１ｃにより、複数の記憶装置を用いて論理領域Ｂ２が作成される。制御手段１ｃにより、論理領域Ｂ１にアクセスする代わりに論理領域Ｂ２へアクセスするように情報処理装置２からのアクセスが制御される。
【００２５】
これにより、ランダムアクセスされる論理領域のチューニングを効率的に行うことができる。ある記憶領域のランダムアクセスの頻度が高い場合には、シーケンシャルアクセスに比べてランダムアクセスが高い論理領域であると判断できる。この場合には、ランダムアクセスに、より特化したチューニングを行うことで当該論理領域に対するアクセス性能を向上し得る。そこで、ランダムアクセスの頻度が高い論理領域を取得し、ランダムアクセスの対象となったデータサイズに応じたサイズの記憶域を割り当てなおして論理領域を作り変える。このように、論理領域ごとのランダムアクセスの状況に応じて、論理領域ごとのストリップサイズを調整する作業の省力化を図れる。
【００２６】
ここで、ランダムアクセスでは比較的小さなサイズでデータアクセスを行うことがある。その場合、アクセス対象となる論理領域内の範囲が複数の記憶装置上の記憶域に跨ると、各記憶装置において記憶域（アクセス先のデータが格納された位置）を探索するための所要時間がアクセス性能に及ぼす影響が大きくなる。
【００２７】
例えば、論理領域Ｂ１に対してランダムアクセスＡ１，Ａ２，Ａ３，Ａ４，Ａ５が発生したとする。ランダムアクセスＡ１は、アクセス対象となる論理領域Ｂ１内の範囲が記憶域Ｂ１１，Ｂ１２に跨る。ランダムアクセスＡ２は、アクセス対象となる論理領域Ｂ１内の範囲が記憶域Ｂ１２内のみに収まる。ランダムアクセスＡ３は、アクセス対象となる論理領域Ｂ１内の範囲が記憶域Ｂ１２，Ｂ１３に跨る。ランダムアクセスＡ４は、アクセス対象となる論理領域Ｂ１内の範囲が記憶域Ｂ１３，Ｂ１４に跨る。ランダムアクセスＡ５は、アクセス対象となる論理領域Ｂ１内の範囲が記憶域Ｂ１４内に収まる。ランダムアクセスＡ１，Ａ３，Ａ４のように２以上の記憶域に跨って比較的小さなデータにランダムアクセスする場合、各記憶装置から各記憶域内を物理的に探索してデータへアクセス（例えば、読み出し）するための所要時間がアクセス性能に及ぼす影響が大きくなる。
【００２８】
具体的には、記憶装置３，４，５，６が磁気ディスク装置であれば、アクセス時間とデータ転送時間との和でアクセス性能を評価することがある。アクセス時間は、情報処理装置２からデータ転送要求を受けて転送を開始するまでの時間である。アクセス時間は、シーク時間（磁気ヘッドの位置決め時間）とディスクの回転待ち時間（トラック上のセクタの位置決め時間）との和である。転送するデータ量が小さい程（すなわち、データ転送時間が小さい程）、アクセス性能へのアクセス時間（記憶域を探索するための所要時間）の影響が大きくなる。例えば、ランダムアクセスＡ１の対象となるデータを記憶装置３，４から並行して読み出したとしても、アクセス時間が遅い方の記憶装置からの読み出しが完了するまで、ランダムアクセスＡ１の対象となるデータの読み出しは完了しないことになる。すなわち、遅い方のアクセス時間でアクセス性能が決まってしまう。ランダムアクセスが頻発すると、このオーバーヘッドによるアクセス時間の遅延が顕著になり、ストライピングによるアクセス性能を十分に発揮できないことがある。すなわち、このような場合には、１つのランダムアクセス（例えば、ランダムアクセスＡ１）により１つの記憶装置のみにアクセスする方が、複数の記憶装置にアクセスするよりも効率的である。
【００２９】
そこで、ストレージ制御装置１は、論理領域Ｂ２を作成し、論理領域Ｂ１の代わりとする。例えば、論理領域Ｂ２に対してランダムアクセスＡ１ａ，Ａ２ａ，Ａ３ａ，Ａ４ａ，Ａ５ａが発生したとする。ランダムアクセスＡ１，Ａ１ａのアクセス対象データは同じである。ランダムアクセスＡ２，Ａ２ａのアクセス対象データは同じである。ランダムアクセスＡ３，Ａ３ａのアクセス対象データは同じである。ランダムアクセスＡ４，Ａ４ａのアクセス対象データは同じである。ランダムアクセスＡ５，Ａ５ａのアクセス対象データは同じである。ランダムアクセスＡ１ａは、アクセス対象となる論理領域Ｂ２内の範囲が記憶域Ｂ２１内に収まる。ランダムアクセスＡ２ａは、アクセス対象となる論理領域Ｂ２内の範囲が記憶域Ｂ２１内に収まる。ランダムアクセスＡ３ａは、アクセス対象となる論理領域Ｂ２内の範囲が記憶域Ｂ２１，Ｂ２２に跨る。ランダムアクセスＡ４ａは、アクセス対象となる論理領域Ｂ２内の範囲が記憶域Ｂ２２内に収まる。ランダムアクセスＡ５ａは、アクセス対象となる論理領域Ｂ２内の範囲が記憶域Ｂ２２内に収まる。
【００３０】
論理領域Ｂ２では、ランダムアクセスの対象となる領域が１つの記憶装置上の記憶域に収まる場合が、論理領域Ｂ１に比べて多い。すなわち、論理領域Ｂ２では２以上の記憶域を跨ったランダムアクセスが発生する可能性が論理領域Ｂ１よりも低く、アクセス時間の短縮化を図れる。
【００３１】
このようにして、論理領域ごとのランダムアクセスに対するストリップサイズの調整を効率的に行うことができる。また、当該論理領域に対するアクセス性能の向上を図ることができる。
【００３２】
［第２の実施の形態］
図２は、第２の実施の形態のストレージシステムを示す図である。第２の実施の形態のストレージシステムは、コントローラエンクロージャ（ＣＥ：Controller Enclosure）１００およびディスクエンクロージャ（ＤＥ：Disk Enclosure）２００，３００を含む。ＣＥ１００とＤＥ２００とはケーブル１１を用いて接続されている。ＤＥ２００，３００はケーブル１２を用いて接続されている。また、ＣＥ１００はスイッチ装置４００にケーブル１３を用いて接続されている。スイッチ装置４００にはサーバ５００がケーブル１４を用いて接続されている。ケーブル１１，１２，１３，１４は複数でもよい。
【００３３】
ケーブル１１，１２には、例えばｉｎｆｉｎｉＢａｎｄやＦＣ（Fibre Channel）などに対応したケーブルを用いることができる。ケーブル１３，１４には、例えばＦＣ、ＳＡＳ（Serial Attached Small Computer System Interface）、ｉＳＣＳＩ（Internet Small Computer System Interface）およびＦＣｏＥ（Fibre Channel over Ethernet）（Ｅｔｈｅｒｎｅｔは登録商標）などに対応したケーブルを用いることができる。
【００３４】
ＣＥ１００は、サーバ５００からのＤＥ２００，３００へのアクセスを制御するストレージ制御装置である。
ＤＥ２００，３００は、複数のディスク装置を収納可能なストレージ装置である。ＤＥ２０，３００は、ディスクシェルフと呼ばれることもある。
【００３５】
スイッチ装置４００は、ＣＥ１００およびサーバ５００の間の通信を中継する中継装置である。例えば、スイッチ装置４００にサーバ５００以外のサーバコンピュータを接続することで、当該サーバコンピュータからもストレージシステムへアクセス可能となる。
【００３６】
サーバ５００は、ストレージシステムへアクセスするサーバコンピュータである。
ＣＥ１００、ＤＥ２００，３００、スイッチ装置４００およびサーバ５００は、例えばラックに収納される。ただし、各装置はタワー型でもよい。
【００３７】
以下の説明では、各装置を接続するケーブルの符号を省略する。
図３は、ストレージシステムのハードウェア例を示す図である。ＣＥ１００は、ＣＭ（Contoller Module）１１０，１２０を有する。ＣＭ１１０，１２０は、ＤＥ２００，３００が備える複数のディスク装置に対するサーバ５００からのアクセスを制御するモジュールである。ＣＭ１１０，１２０は、冗長化されており、サーバ５００からの複数のアクセスを分担して並列に処理することができる。ＣＭ１１０，１２０はＣＥ１００内部のバスを介して接続されている。ＣＭ１１０は、ＣＰＵ（Central Processing Unit）１１１、メモリ１１２、ＣＡ（Channel Adaptor）１１３，１１４およびＤＡ（Disk Adaptor）１１５，１１６を有する。ＣＰＵ１１１は、ＣＭ１１０内のバスを介して他のユニットと接続されている。
【００３８】
ＣＰＵ１１１は、ＣＭ１１０の情報処理を制御するプロセッサである。ＣＭ１１０は、複数のプロセッサを設けて、プログラムを分散して実行してもよい。
メモリ１１２は、不揮発性メモリおよび揮発性メモリを含む。不揮発性メモリにはＣＰＵ１１１が実行するファームウェアのプログラムや処理に用いるデータを記憶する。揮発性メモリは、ＣＰＵ１１１が実行するファームウェアのプログラムや処理に用いるデータを一時的に記憶する。ＣＭ１１０は、複数個のメモリを備えていてもよい。
【００３９】
ＣＡ１１３，１１４は、スイッチ装置４００を介してサーバ５００と通信を行う通信インタフェースである。ＣＡ１１３，１１４は冗長化されており、両方をアクティブとすることができる。
【００４０】
ＤＡ１１５，１１６は、ＤＥ２００と通信を行う通信インタフェースである。ＤＡ１１５，１１６は冗長化されており、両方をアクティブとすることができる。
ＣＭ１２０は、ＣＰＵ１２１、メモリ１２２、ＣＡ１２３，１２４およびＤＡ１２５，１２６を有する。ここで、ＣＰＵ１２１、メモリ１２２、ＣＡ１２３，１２４およびＤＡ１２５，１２６のそれぞれは、ＣＰＵ１１１、メモリ１１２、ＣＡ１１３，１１４およびＤＡ１１５，１１６と同様であるため、説明を省略する。なお、ＣＰＵ１１１，１２１はＣＥ１００内部のバスを介して通信できる。
【００４１】
ＤＥ２００は、ＩＯＭ（Input/Output Module）２１０，２２０およびＨＤＤ（Hard Disk Drive）２３０，２４０，２５０，２６０，・・・を有する。
ＩＯＭ２１０，２２０は、ＣＥ１００からの指示に基づいて、ＨＤＤ２３０，２４０，２５０，２６０，・・・に対するデータの書き込み（Ｗｒｉｔｅ）や読み出し（Ｒｅａｄ）を実行するモジュールである。例えば、ＩＯＭ２１０，２２０は、書き込みや読み出しを実行するＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などを含む。ＩＯＭ２１０，２２０は、ＩＯＭ２１０，２２０内のメモリに格納されたファームウェアなどのプログラムを実行する汎用のプロセッサを含んでもよい。また、ＩＯＭ２１０，２２０は、ＣＥ１００およびＤＥ３００と接続して通信を行うための通信インタフェースを含む。ＩＯＭ２１０は、ＤＡ１１５，１１６と接続される。ＩＯＭ２２０は、ＤＡ１２５，１２６と接続される。
【００４２】
ＨＤＤ２３０，２４０，２５０，２６０，・・・は、サーバ５００や他のサーバコンピュータの処理に用いるデータを格納するためのディスク装置である。
ＤＥ３００は、ＩＯＭ３１０，３２０およびＨＤＤ３３０，３４０，３５０，３６０，・・・を有する。
【００４３】
ＩＯＭ３１０，３２０は、ＩＯＭ２１０，２２０と同様であるため説明を省略する。ただし、ＩＯＭ３１０，３２０は、ＩＯＭ２１０，２２０と接続されている。ＣＥ１００は、ＤＥ２００を介して、ＤＥ３００と通信する。
【００４４】
ＨＤＤ３３０，３４０，３５０，３６０は、サーバ５００や他のサーバコンピュータの処理に用いるデータを格納するためのディスク装置である。
ＤＥ２００，３００では、ストライピングの技術により各ＨＤＤを用いて複数の論理ボリュームが作成されている。ＲＡＩＤレベルは、例えば、ＲＡＩＤ０である。あるいは、ＲＡＩＤ４、ＲＡＩＤ５、ＲＡＩＤ６の何れかのＲＡＩＤレベルでもよい。また、これらのＲＡＩＤレベルに更にミラーリング（ＲＡＩＤ１）を適用したＲＡＩＤ０＋１、ＲＡＩＤ４＋１、ＲＡＩＤ５＋１、ＲＡＩＤ６＋１などでもよい。
【００４５】
なお、ＣＥ１００に複数のＨＤＤを収納可能としてもよい。ＣＭ１１０，１２０は、サーバ５００からＣＥ１００に収納された複数のＨＤＤに対するアクセスを制御してもよい。
【００４６】
また、ＣＥ１００およびＤＥ２００，３００は、ＨＤＤに代えて、または、ＨＤＤと併せてＳＳＤ（Solid State Drive）などの他の記憶装置を備えてもよい。
図４は、ＣＥのソフトウェア例を示す図である。図４では、スイッチ装置４００およびＤＥ３００の図示を省略している。図４に示すユニットの一部または全部は、ＣＰＵ１１１が実行するプログラムのモジュールであってもよい。また、図４に示すユニットの一部または全部は、ＦＰＧＡやＡＳＩＣなどの電子回路であってもよい。ＣＭ１２０もＣＭ１１０と同様のユニットを用いて実装できる。ただし、ＣＭ１２０はＩＯＭ２２０と通信することで、ＣＭ１２０と同様の制御を行う。
【００４７】
ＣＭ１１０は、記憶部１３０、アクセス処理部１４０、ボリューム制御部１５０および同期部１６０を有する。
記憶部１３０は、アクセス処理部１４０、ボリューム制御部１５０および同期部１６０の処理に用いる各種のデータを記憶する。記憶部１３０は、メモリ１１２の記憶領域を用いて実装できる。
【００４８】
アクセス処理部１４０は、データの書き込みや読み出しなどのアクセス要求（リクエストということがある）をサーバ５００から受信する。アクセス処理部１４０は、記憶部１３０に記憶された情報に基づいて、アクセス要求に応じたデータの書き込みや読み出しの実行をＩＯＭ２１０に指示する。ＩＯＭ２１０は、アクセス処理部１４０からの書き込みの指示に応じて、ＨＤＤ２３０，２４０，２５０，２６０，・・・にデータを書き込み、書き込みの実行結果をアクセス処理部１４０に応答する。ＩＯＭ２１０は、アクセス処理部１４０からの読み出しの指示に応じて、ＨＤＤ２３０，２４０，２５０，２６０，・・・からデータを読み出し、読み出したデータをアクセス処理部１４０に応答する。アクセス処理部１４０は、書き込みの実行結果や読み出されたデータをサーバ５００に応答する。
【００４９】
また、アクセス処理部１４０は、サーバ５００から連続して受信する論理ボリュームごとの読み出しリクエストに基づいて、当該リクエストに係る連続したアクセスがランダムアクセスであるかシーケンシャルアクセスであるかを判断する。更に、アクセス処理部１４０は、ランダムアクセスが比較的小さいサイズのデータへのアクセスである場合には、当該ランダムアクセスに関する情報を取得し、論理ボリュームに対応付けて記憶部１３０に記録する。また、アクセス処理部１４０は、アクセス要求の統計を取って、記憶部１３０に記録する。
【００５０】
ボリューム制御部１５０は、記憶部１３０に記憶された情報に基づいて、論理ボリュームごとのストリップサイズの変更を制御する。ボリューム制御部１５０は、ＩＯＭ２１０に対して、ストリップサイズの変更を指示し、ストリップサイズを変更させる。この処理を、単に「ボリューム制御部１５０がストリップサイズを変更する」ということがある。
【００５１】
ボリューム制御部１５０は、ＤＥ２００における全てのＨＤＤのストリップサイズの変更を制御する。すなわち、ＣＭ１２０が備えるボリューム制御部は、ボリューム制御部１５０の待機系として利用する。ただし、ボリューム制御部１５０とＣＭ１２０が備えるボリューム制御部とを両方アクティブとして、ストリップサイズの変更を制御する対象のＨＤＤや論理ボリュームなどを分担してもよい。
【００５２】
同期部１６０は、ＣＭ１２０と情報を同期し共有する。具体的には、同期部１６０は、ＣＭ１２０が備える記憶部と記憶部１３０とのうち、ＣＭ１２０が備える記憶部だけに記憶された情報を記憶部１３０に記録する。また、同期部１６０は、記憶部１３０側だけに記憶された情報をＣＭ１２０に提供する。同期のタイミングは、所定の周期（例えば、１分、１０分、３０分）でもよく、同期対象の情報に更新が発生したタイミングでもよい。
【００５３】
図５は、論理ボリュームの例を示す図である。論理ボリューム６００は、ＨＤＤ２３０，２４０，２５０，２６０にストライピング（ＲＡＩＤ０）を適用して作成された論理領域である。当該論理領域は、ＬＵ（Logical Unit）と呼ばれることもある。ここで、あるＲＡＩＤを適用するＨＤＤの集合をＲＡＩＤグループと呼ばれる単位で管理する。ＨＤＤ２３０，２４０，２５０，２６０はＲＡＩＤグループ＃０に属する。ＨＤＤ２３０，２４０，２５０，２６０には、各ＨＤＤを識別するためのディスク番号が付与されている。ＨＤＤ２３０はディスク＃０である。ＨＤＤ２４０はディスク＃１である。ＨＤＤ２５０はディスク＃２である。ＨＤＤ２６０はディスク＃３である。
【００５４】
論理ボリューム６００には、ストレージシステム内で論理ボリュームを識別するための識別子である論理ユニット番号（ＬＵＮ：Logical Unit Number）が付与されている。論理ボリューム６００は、ＬＵＮ０である。
【００５５】
論理ボリューム６００は、ＨＤＤ２３０，２４０，２５０，２６０上でストリップサイズ単位に分割された複数の記憶域の集合である。ＨＤＤ２３０，２４０，２５０，２６０上の各記憶域をストリップ（strip）と呼ぶことがある。
【００５６】
ＨＤＤ２３０は、ストリップ２３１，２３２，・・・を有する。ストリップ２３１の識別子は“ＳＰ００”である。ストリップ２３２の識別子は“ＳＰ０４”である。
ＨＤＤ２４０は、ストリップ２４１，２４２，・・・を有する。ストリップ２４１の識別子は“ＳＰ０１”である。ストリップ２４２の識別子は“ＳＰ０５”である。
【００５７】
ＨＤＤ２５０は、ストリップ２５１，２５２，・・・を有する。ストリップ２５１の識別子は“ＳＰ０２”である。ストリップ２５２の識別子は“ＳＰ０６”である。
ＨＤＤ２６０は、ストリップ２６１，２６２，・・・を有する。ストリップ２６１の識別子は“ＳＰ０３”である。ストリップ２６２の識別子は“ＳＰ０７”である。
【００５８】
論理ボリューム６００は、これらストリップの集合である。具体的には、論理ボリューム６００は、ストリップ２３１，２４１，２５１，２６１，２３２，・・・を含む。ストリップの順番は、論理ボリューム６００内の位置を示す論理ブロックアドレス（ＬＢＡ：Logical Block Addressing）の順である。論理ボリューム６００の先頭のＬＢＡは、ストリップ２３１の先頭のＬＢＡである。ストリップ２３１の最後のＬＢＡの次のＬＢＡは、ストリップ２４１の先頭のＬＢＡである。ストリップ２６１の最後のＬＢＡの次のＬＢＡは、ストリップ２３２の先頭のＬＢＡである。
【００５９】
図５の例では、ストリップ２３１，２４１，２５１，２６１を組み合わせた論理領域を１つのストライプ（ストライプ“１”）と呼ぶことができる。よって、１つのストライプのサイズ（ストライプ幅と呼ぶことがある）は、ストリップサイズ×４である。ストリップ２３２，２４２，２５２，２６２を組み合わせた論理領域も１つのストライプ（ストライプ“２”）である。
【００６０】
論理ボリューム６００は、当該ストライプを１またはそれ以上組み合わせた論理領域である。論理ボリューム６００のサイズは、ストライプ幅×ストライプ数である。
図６は、読み出しリクエストの例を示す図である。読み出しリクエスト７００は、サーバ５００により生成されＣＥ１００に送信される。読み出しリクエスト７００は、ＬＵＮ、論理ボリュームの先頭からのオフセットおよび読み出しバイト数のフィールドを含む。
【００６１】
ＬＵＮのフィールドには、読み出し対象のデータを格納した論理ボリュームを指定するための情報が設定される。ＬＵＮのフィールドに設定される情報は、ＬＵＮそのものでもよいし、ＣＥ１００がＬＵＮに対応付けて管理する所定の論理ボリューム名でもよい。論理ボリュームの先頭からのオフセットのフィールドには、当該論理ボリューム内の領域のうち、読み出しを開始する位置を示すＬＢＡが設定される。ここで指定されるＬＢＡは、論理ボリュームの先頭ＬＢＡを０としたときの相対的なＬＢＡ（オフセット）である。読み出しバイト数のフィールドには、当該オフセットから読み出すデータのサイズが設定される。
【００６２】
例えば、読み出しリクエスト７００には、論理ボリュームの先頭からのオフセットが“６７８”、読み出しバイト数が“７２ＫＢ（KiloBytes）”という情報が設定されている。以下の説明では、論理ボリュームの先頭からのオフセットを単にオフセットということがある。
【００６３】
図７は、利用可能ストリップサイズの例を示す図である。利用可能ストリップサイズリスト１３１は、記憶部１３０に予め格納される。利用可能ストリップサイズリスト１３１は、利用可能な（すなわち、ストリップに対して適用可能な）ストリップサイズの一覧である。利用可能ストリップサイズリスト１３１は、利用可能なストリップサイズが予め定められていることが分かり易いように図示したものであり、利用可能なストリップサイズをこのようなリストを用いずに管理してもよい。この例では、ストリップサイズの最小値は６４ＫＢであり、最大値は１０２４ＫＢである。他のストリップサイズはその整数倍である。ストリップサイズとして６４ＫＢ、１２８ＫＢ、２５６ＫＢ、５１２ＫＢ、１０２４ＫＢを利用可能である。
【００６４】
図８は、ＲＡＩＤグループ管理テーブルの例を示す図である。ＲＡＩＤグループ管理テーブル１３２は、記憶部１３０に格納される。ＲＡＩＤグループ管理テーブル１３２は、ＲＡＩＤグループ、ディスク番号およびＬＢＡ数の項目を含む。
【００６５】
ＲＡＩＤグループの項目には、ＲＡＩＤグループ番号が登録される。ディスク番号の項目には、当該ＲＡＩＤグループ番号で示されるＲＡＩＤグループに属するＨＤＤのディスク番号が登録される。ＬＢＡ数の項目には、当該ＲＡＩＤグループ番号で示されるＲＡＩＤグループにおけるＬＢＡの総数が登録される。１ＬＢＡは、ＨＤＤ上の１つのセクタに対応する。したがって、１セクタのサイズにＬＢＡ数を乗じた数が当該ＲＡＩＤグループで利用可能な記憶容量である。
【００６６】
例えば、ＲＡＩＤグループ管理テーブル１３２には、ＲＡＩＤグループが“０”、ディスク番号が“０，１，２，３”、ＬＢＡ数が“５２４２８８”という情報が登録されている。これは、ＲＡＩＤグループ＃０のＲＡＩＤグループに、ディスク＃０，１，２，３のＨＤＤ２３０，２４０，２５０，２６０が属しており、ＬＢＡ数が５２４２８８であることを示す。例えば、１セクタのサイズが５１２Ｂであれば、５１２Ｂ×５２４２８８＝２６８ＭＢ（MegaBytes）が当該ＲＡＩＤグループ＃０で利用可能な全記憶容量である。
【００６７】
図９は、論理ボリューム管理テーブルの例を示す図である。論理ボリューム管理テーブル１３３は、記憶部１３０に格納される。論理ボリューム管理テーブル１３３には、ＬＵＮ、ＲＡＩＤグループ、先頭ＬＢＡおよび総ＬＢＡ数の項目を含む。
【００６８】
ＬＵＮの項目には、ＬＵＮが登録される。ＲＡＩＤグループの項目には、当該論理ボリュームが属するＲＡＩＤグループのＲＡＩＤグループ番号が登録される。先頭ＬＢＡの項目には、ＲＡＩＤグループ内における当該論理ボリュームの先頭ＬＢＡが登録される。総ＬＢＡ数の項目には、当該論理ボリュームの総ＬＢＡ数が登録される。
【００６９】
例えば、論理ボリューム管理テーブル１３３には、ＬＵＮが“０”、ＲＡＩＤグループが“０”、先頭ＬＢＡが“０”、総ＬＢＡ数が“１３１０７２”という情報が登録される。これは、ＬＵＮ０で識別される論理ボリューム６００がＲＡＩＤグループ＃０のＲＡＩＤグループに属していること、当該ＲＡＩＤグループのＬＢＡ“０”を先頭として、総ＬＢＡ数“１３１０７２”分の領域が確保されていることを示す。例えば、１セクタのサイズが５１２Ｂであれば、５１２Ｂ×１３１０７２＝６７ＭＢが論理ボリューム６００で利用可能な記憶容量である。
【００７０】
１つのＲＡＩＤグループには、複数の論理ボリュームを作成することができる。論理ボリューム管理テーブル１３３によれば、ＲＡＩＤグループ＃０には、ＬＵＮ１の論理ボリュームも存在している。
【００７１】
図１０は、アクセス管理テーブルの例を示す図である。アクセス管理テーブル１３４は、記憶部１３０に格納される。アクセス管理テーブル１３４は、ＲＡＩＤグループ、ＬＵＮ、総アクセス回数、ランダムアクセス回数、平均読み出しバイト数、ストリップサイズおよび調整フラグの項目を含む。
【００７２】
ＲＡＩＤグループの項目には、ＲＡＩＤグループ番号が登録される。ＬＵＮの項目には、論理ボリュームのＬＵＮが登録される。総アクセス回数の項目には、当該論理ボリュームに対する総読み出しアクセス回数が登録される。ランダムアクセス回数の項目には、当該論理ボリュームに対する読み出しのランダムアクセス回数が登録される。総アクセス回数およびランダムアクセス回数は、読み出しリクエストを受信するごとにカウントされる。ただし、ランダムアクセス回数は読み出しリクエストが所定の条件（後述する）を満たす場合にカウントされる。平均読み出しバイト数の項目には、ランダムアクセスとしてカウントされたアクセスについての平均読み出しバイト数が登録される。ストリップサイズの項目には、当該論理ボリュームの現在のストリップサイズが登録される。調整フラグの項目には、当該論理ボリュームがストリップサイズのチューニング対象であるか否かを示すフラグが登録される。フラグ“ｔｒｕｅ”はチューニング対象であることを示す。フラグ“ｆａｌｓｅ”はチューニング対象外であることを示す。
【００７３】
例えば、アクセス管理テーブル１３４には、ＲＡＩＤグループが“０”、ＬＵＮが“０”、総アクセス回数が“６１２８７”、ランダムアクセス回数が“５５８１７”、平均読み出しバイト数が“７８ＫＢ”、ストリップサイズが“１２８ＫＢ”、調整フラグが“ｔｒｕｅ”という情報が登録される。これは、ＲＡＩＤグループ＃０のＬＵＮ０で識別される論理ボリューム６００に対して、読み出しの総アクセス回数が６１２８７回であり、カウント対象となった読み出しのランダムアクセス回数が５５８１７回であることを示す。また、当該読み出しのランダムアクセスについての平均読み出しバイト数が７８ＫＢであることを示す。更に、現在のストリップサイズが１２８ＫＢであること、ストリップサイズのチューニング対象であることを示す。ここで、論理ボリューム６００のサイズが例えば６７ＭＢであれば、論理ボリューム６００のストリップ総数は６７ＭＢ÷１２８ＫＢ＝５２４個程度である。
【００７４】
図１１は、ランダムアクセス閾値の例を示す図である。ランダムアクセス閾値１３５は、記憶部１３０に格納される。ランダムアクセス閾値１３５は、論理ボリュームのストリップサイズのチューニングを行うか否かを判断するために用いるパラメータである。例えば、ランダムアクセス閾値１３５として、総アクセス回数の８０％という情報が登録される。これは、カウント対象となったランダムアクセス回数が総アクセス回数の８０％以上となる場合に、チューニング対象とすることを示す。なお、ランダムアクセス閾値１３５をストレージシステムの運用に応じて異なる値に変更可能としてもよい。また、ランダムアクセス閾値１３５を論理ボリュームごとに登録可能としてもよい。
【００７５】
図１２は、アクセス統計テーブルの例を示す図である。アクセス統計テーブル１３６は、記憶部１３０に格納される。アクセス統計テーブル１３６は、ＲＡＩＤグループ、ＬＵＮ、曜日、時間帯およびアクセス回数の項目を含む。
【００７６】
ＲＡＩＤグループの項目には、ＲＡＩＤグループ番号が登録される。ＬＵＮの項目には、論理ボリュームのＬＵＮが登録される。曜日の項目には、曜日が登録される。時間帯の項目には、時間帯（例えば、１時間刻み）が登録される。アクセス回数の項目には、当該曜日・当該時間帯における総アクセス回数が登録される。
【００７７】
例えば、アクセス統計テーブル１３６には、ＲＡＩＤグループが“０”、ＬＵＮが“０”、曜日が“月”、時間帯が“０：００”、アクセス回数が“５２３７”という情報が登録される。これは、ＲＡＩＤグループ＃０のＬＵＮ０で識別される論理ボリューム６００に対して、月曜日の０時００分００秒〜０時５９分５９秒の間に５２３７回のアクセスがあったことを示す。
【００７８】
なお、アクセス回数を曜日単位以外で取得してもよい。例えば、日付単位や第１週，第２週などの週単位で取得してもよい。また、アクセス回数を１時間刻み以外の時間帯（例えば、２時間、３時間、６時間など）を単位として取得してもよい。
【００７９】
図１３は、読み出しアクセス受信時の処理例を示すフローチャートである。以下、図１３に示す処理をステップ番号に沿って説明する。
（ステップＳ１１）アクセス処理部１４０は、読み出しリクエスト７００をサーバ５００から受信する。アクセス処理部１４０は、読み出しリクエスト７００に応じて、ＤＥ２００にデータの読み出しを指示する。アクセス処理部１４０は、読み出されたデータをＤＥ２００から取得すると、取得したデータをサーバ５００に応答する。なお、アクセス処理部１４０は、現在のストリップサイズやストライピングに用いているＨＤＤの数に基づき所定の演算を行うことで、何れのストリップから読み出しを行えばよいかを判断することができる。
【００８０】
（ステップＳ１２）アクセス処理部１４０は、記憶部１３０に記憶されたアクセス管理テーブル１３４において、読み出しリクエスト７００で指定された論理ボリューム６００（ＬＵＮ０）に対応する総アクセス回数を更新する。具体的には、ＬＵＮ０に対応する総アクセス回数に１を加算する。
【００８１】
（ステップＳ１３）アクセス処理部１４０は、記憶部１３０に記憶されたアクセス統計テーブル１３６において、現在の曜日／時間帯に対応するアクセス回数を更新する。具体的には、現在の曜日／時間帯に対応するアクセス回数に１を加算する。
【００８２】
（ステップＳ１４）アクセス処理部１４０は、読み出しリクエスト７００がランダムアクセスであるか否かを判定する。ランダムアクセスである場合、処理をステップＳ１５に進める。ランダムアクセスでない場合（シーケンシャルアクセスである場合）、処理を終了する。アクセス処理部１４０は、読み出しリクエスト７００の１つ前のＬＵＮ０に対する読み出しリクエスト（前回の読み出しリクエスト）と、読み出しリクエスト７００とを対比することで、読み出しリクエスト７００がランダムアクセスであるか否かを判定できる。具体的には、前回のオフセットに対し、前回の読み出しバイト数に相当するＬＢＡを加算した値が読み出しリクエスト７００で指定されるオフセットに一致する場合、読み出しリクエスト７００はシーケンシャルアクセスである。一方、一致しない場合、読み出しリクエスト７００はランダムアクセスである。なお、前回の読み出しバイト数に相当するＬＢＡは、例えば、１セクタのサイズが５１２Ｂであれば、前回の読み出しバイト数を５１２Ｂで割った商である。
【００８３】
（ステップＳ１５）アクセス処理部１４０は、読み出しリクエスト７００で指定された読み出しバイト数（アクセスサイズということがある）が閾値以下であるか否かを判定する。閾値以下である場合、処理をステップＳ１６に進める。閾値よりも大きい場合、処理を終了する。ここで、ステップＳ１５で用いる閾値は、利用可能ストリップサイズの最大値の１／ｎ（ｎは１よりも大きな実数）とする。例えば、利用可能ストリップサイズリスト１３１によれば、利用可能ストリップサイズの最大値は１０２４ＫＢである。例えば、ｎ＝２のとき、ステップＳ１５で用いる閾値は１０２４ＫＢ／２＝５１２ＫＢである。
【００８４】
（ステップＳ１６）アクセス処理部１４０は、アクセス管理テーブル１３４において、読み出しリクエスト７００で指定された論理ボリューム６００に対応するランダムアクセス回数を更新する。具体的には、ＬＵＮ０に対応するランダムアクセス回数に１を加算する。
【００８５】
（ステップＳ１７）アクセス処理部１４０は、読み出しリクエスト７００で指定された読み出しバイト数と、アクセス管理テーブル１３４に登録されたＬＵＮ０の平均読み出しバイト数と、の値を用いて、当該平均読み出しバイト数を更新する。
【００８６】
（ステップＳ１８）アクセス処理部１４０は、アクセス管理テーブル１３４を参照して、読み出しリクエスト７００で指定された論理ボリューム６００について、ランダムアクセス回数が閾値以上であるか否かを判定する。閾値以上である場合、処理をステップＳ１９に進める。閾値よりも小さい場合、処理を終了する。ここで、ステップＳ１８で用いる閾値は、記憶部１３０に記憶されたランダムアクセス閾値１３５（総アクセス回数の８０％）である。
【００８７】
（ステップＳ１９）アクセス処理部１４０は、記憶部１３０に記憶されたアクセス管理テーブル１３４において、読み出しリクエスト７００で指定された論理ボリューム６００をチューニング対象に設定する。具体的には、調整フラグを“ｆａｌｓｅ”から“ｔｒｕｅ”に変更する。これにより、論理ボリューム６００はストリップサイズの変更対象として登録されたことになる。
【００８８】
このようにして、アクセス処理部１４０は、サーバ５００から読み出しリクエスト７００を受信するたびに、ランダムアクセス性を判定し、ストリップサイズの変更の要否を決定する。同期部１６０は、アクセス管理テーブル１３４が更新されると更新内容をＣＭ１２０に提供して、情報の共有を図る。ＣＭ１１０で障害が発生しても、ＣＭ１２０でストリップサイズのチューニングを行えるようにするためである。
【００８９】
ボリューム制御部１５０は、記憶部１３０に記憶されたアクセス統計テーブル１３６に基づいて、チューニング実行時間を決定する。次にそのための手順を説明する。ボリューム制御部１５０は、例えば、新たにチューニング対象となった論理ボリュームが発生した際に当該論理ボリュームについて以下の手順を実行する。または、所定の周期（例えば、１日、１週間など）でチューニング対象となっている論理ボリュームに対し一括して以下の手順を実行してもよい。
【００９０】
図１４は、チューニング実行時間の決定例を示すフローチャートである。以下、図１４に示す処理をステップ番号に沿って説明する。
（ステップＳ２１）ボリューム制御部１５０は、記憶部１３０に記憶されたアクセス統計テーブル１３６を参照して、チューニング対象の論理ボリューム６００（ＬＵＮ０）についてアクセス数が最小の曜日・時間帯を取得する。
【００９１】
（ステップＳ２２）ボリューム制御部１５０は、ステップＳ２１で取得した曜日・時間帯を論理ボリューム６００のチューニング実行時間に決定する。例えば、ボリューム制御部１５０は、論理ボリューム６００にチューニング実行時間を対応付けた情報を作成して、記憶部１３０に格納する。
【００９２】
このようにして、ボリューム制御部１５０は、論理ボリュームごとにチューニング実行時間を決定する。論理ボリュームに対する負荷が最小の時間帯にチューニングを行うことで、サーバ５００から当該論理ボリュームへのアクセスに対するチューニングの処理の影響を軽減することができる。ボリューム制御部１５０は、論理ボリューム６００についてチューニング実行時間になると、次の手順を実行して論理ボリューム６００のストリップサイズを変更する。
【００９３】
図１５は、チューニングの処理例を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。
（ステップＳ３１）ボリューム制御部１５０は、論理ボリューム６００の容量を取得する。上述したように論理ボリューム６００の容量は、例えば６７ＭＢ程度である。
【００９４】
（ステップＳ３２）ボリューム制御部１５０は、変更後のストリップサイズを決定する。ここで、図１３のステップＳ１５では、比較的小さなランダムアクセスを検出するためのアクセスサイズの閾値を利用可能な最大ストリップサイズの１／ｎとしている。そこで、ステップＳ３２では、論理ボリューム６００についてアクセス管理テーブル１３４に登録された平均読み出しバイト数のｎ倍より大きな最小の利用可能ストリップサイズを変更後のストリップサイズとする。例えば、ステップＳ１５において、利用可能な最大ストリップサイズの１／２を閾値に用いている場合、平均読み出しバイト数の２倍より大きな最小の利用可能ストリップサイズとする。より具体的には、アクセス管理テーブル１３４によれば、論理ボリューム６００について、平均読み出しバイト数は７８ＫＢである。ｎ＝２のとき、７８ＫＢ×２＝１５６ＫＢであるから、１５６ＫＢよりも大きな最小の利用可能ストリップサイズである２５６ＫＢを変更後のストリップサイズと決定する。この場合、変更後のストリップサイズ２５６ＫＢは、変更前のストリップサイズ１２８ＫＢよりも大きい。したがって、ストリップサイズを拡大することになる。一方、変更後のストリップサイズが変更前のストリップサイズよりも小さくなることもある。この場合、ストリップサイズを縮小することになる。
【００９５】
（ステップＳ３３）ボリューム制御部１５０は、ステップＳ３１，Ｓ３２の結果に基づいて、変更後のストリップの個数を決定する。例えば、論理ボリューム６００の容量は、約６７ＭＢである。変更後のストリップサイズは２５６ＫＢである。よって、変更後のストリップの個数は、６７ＭＢ÷２５６ＫＢ＝２６２個程度である。
【００９６】
（ステップＳ３４）ボリューム制御部１５０は、論理ボリューム６００の現在のストリップの一部（ただし、ステップＳ３５，Ｓ３６の未処理部分）をメモリ１１２の作業領域に格納する。
【００９７】
（ステップＳ３５）ボリューム制御部１５０は、メモリ１１２に格納されたストリップを分割／結合して、ステップＳ３２で決定されたストリップサイズでストリップを生成する。ステップＳ３３の例では、変更後のストリップサイズ２５６ＫＢは、変更前のストリップサイズ１２８ＫＢの２倍である。したがって、現在の２つのストリップを結合して、１つのストリップを作成すればよい。例えば、ストリップ２３１，２４１を結合して１つのストリップを生成する。また、ストリップ２５１，２６１を結合して１つのストリップを生成する。ボリューム制御部１５０は、新たなストリップに格納されるデータのＬＢＡのオフセットと、元のストリップに格納されていた同一データのＬＢＡのオフセットとが同一になるようにする。すなわち、ストリップサイズを変更しても、変更前後での論理ボリューム内のデータのオフセットを維持する。更に、現在のストリップの１．５個分や２．５個分などを変更後のストリップとする場合には、３個、５個などのストリップを結合した後に、決定したストリップサイズとなるように分割すればよい。ストリップサイズを縮小する場合には、１つのストリップ（または、複数のストリップを結合したストリップ）を、決定したストリップサイズとなるように分割すればよい。
【００９８】
（ステップＳ３６）ボリューム制御部１５０は、ステップＳ３５で生成したストリップをＨＤＤ２３０，２４０，２５０，２６０に書き込む。書き込み位置は、ＨＤＤ２３０，２４０，２５０，２６０の空いた領域でもよいし、元のストリップが存在していた領域に上書きしてもよい。更に、論理ボリューム６００の格納位置を別のＲＡＩＤグループに変更してもよい。
【００９９】
（ステップＳ３７）ボリューム制御部１５０は、論理ボリューム６００内の全ストリップについて、ステップＳ３５，Ｓ３６の処理を完了したか否かを判定する。完了した場合、処理をステップＳ３８に進める。未完了のストリップがある場合、処理をステップＳ３４に進める。
【０１００】
（ステップＳ３８）ボリューム制御部１５０は、アクセス管理テーブル１３４において、論理ボリューム６００のストリップサイズを２５６ＫＢに変更する。以後、アクセス処理部１４０は、論理ボリューム６００のアクセス先のストリップを計算する際に用いるストリップサイズとして２５６ＫＢを使用することになる。更に、ステップＳ３６でＬＵＮ０の書き込み位置を別のＬＢＡ範囲に変更した場合、論理ボリューム管理テーブル１３３を更新してＬＵＮ０につき新たなＬＢＡ範囲を登録する（先頭ＬＢＡの変更）。ＲＡＩＤグループを変更した場合には、当該ＲＡＩＤグループの変更も反映させる。これにより、チューニング後のＬＵＮ０へアクセス可能となる。
【０１０１】
（ステップＳ３９）ボリューム制御部１５０は、アクセス管理テーブル１３４において、チューニングを行ったＬＵＮ０の記録を初期化する。具体的には、総アクセス回数およびランダムアクセス回数を“０”にリセットする。平均読み出しバイト数を“０Ｂ”とする。調整フラグを“ｆａｌｓｅ”とする。
【０１０２】
このようにして、ボリューム制御部１５０は、論理ボリュームごとにストリップサイズのチューニングを行う。
なお、ステップＳ３２では、平均読み出しバイト数のｎ倍としたが、その理由は平均読み出しバイト数が小さい程、より大きな定数を乗じてストリップサイズを決定することで、現状のストリップサイズに対するチューニング後のアクセス効率をより向上させるためである。ただし、ステップＳ３２において、チューニングのストリップサイズを平均読み出しバイト数のｍ倍（ｍはｎと異なる１よりも大きな実数）としてもよい。例えば、ステップＳ１５でｎ＝３を採用して、ステップＳ３２においてｍ＝２を採用してもよい。
【０１０３】
次に、チューニングの具体例を説明する。
図１６は、チューニングの第１の具体例を示す図である。図１６では、ストリップサイズを２倍にする場合を例示している。
【０１０４】
ボリューム制御部１５０は、メモリ１１２に論理ボリューム６００の一部を格納する。例えば、メモリ１１２には、ストリップ２３１，２４１，２５１，２６１，２３２，・・・が格納されている。ボリューム制御部１５０は、次のように現ストリップを結合して、新たなストリップを生成する。
【０１０５】
すなわち、ストリップ２３１，２４１を結合して、ストリップ２３１ａを生成する。ストリップ２３１ａの識別子は“ＳＰ００ａ”である。また、ストリップ２５１，２６１を結合して、ストリップ２４１ａを生成する。ストリップ２４１ａの識別子は“ＳＰ０１ａ”である。ストリップ２３２，２４２を結合して、ストリップ２５１ａを生成する。ストリップ２５１ａの識別子は“ＳＰ０２ａ”である。ストリップ２５２，２６２を結合して、ストリップ２６１ａを生成する。ストリップ２６１ａの識別子は“ＳＰ０３ａ”である。このようにして、論理ボリューム６００内の連続するストリップを結合または分割して新たなストリップを生成する。
【０１０６】
ボリューム制御部１５０は、生成したストリップをＨＤＤ２３０，２４０，２５０，２６０にＬＢＡ順を維持して格納する。ＨＤＤ２３０にはストリップ２３１ａを格納する。ＨＤＤ２４０にはストリップ２４１ａを格納する。ＨＤＤ２５０にはストリップ２５１ａを格納する。ＨＤＤ２６０にはストリップ２６１ａを格納する。他のストリップも順番にＨＤＤ２３０，２４０，２５０，２６０に格納する。
【０１０７】
そして、ボリューム制御部１５０は、チューニング前のストリップ２３１，２３２，２４１，２４２，２５１，２５２，２６１，２６２，・・・を無効化し、チューニング後のストリップ２３１ａ，２４１ａ，２５１ａ，２６１ａ，・・・を有効化する。
【０１０８】
このように、ボリューム制御部１５０は、チューニングの前後で論理ボリュームのサイズを維持するようにストリップの数を決定する。このため、ストリップサイズを拡大することで論理ボリュームのサイズが拡大し、ＲＡＩＤグループ内の記憶容量を圧迫するような事態を避けられる。
【０１０９】
また、ボリューム制御部１５０は、論理ボリューム６００に格納されたデータについて、論理ボリューム６００の先頭ＬＢＡに対する当該データのオフセットを取得し、当該オフセットを維持するようにチューニング後の論理ボリュームを作成する。このため、論理ボリューム管理テーブル１３３において、論理ボリューム６００（ＬＵＮ０）の先頭ＬＢＡを変更することで、チューニング後の論理ボリュームのＬＢＡを容易に指定できる。すなわち、論理ボリューム６００とＬＢＡとの対応関係を更新する処理を簡便に行える。また、サーバ５００は、論理ボリューム６００におけるストリップサイズの変更を意識せずに、論理ボリューム６００に継続してアクセス可能となる。
【０１１０】
図１７は、チューニングの第２の具体例を示す図である。図１７では、ストリップサイズを１／２にする場合を例示している。
ボリューム制御部１５０は、メモリ１１２に論理ボリューム６００の一部を格納する。例えば、メモリ１１２には、ストリップ２３１，２３２，・・・が格納されている。ボリューム制御部１５０は、次のように現ストリップを分割して、新たなストリップを生成する。
【０１１１】
すなわち、ストリップ２３１を分割して、ストリップ２３１ｂ，２４１ｂを生成する。ストリップ２３１ｂの識別子は“ＳＰ００ｂ”である。ストリップ２４１ｂの識別子は“ＳＰ０１ｂ”である。ストリップ２４１を分割して、ストリップ２５１ｂ，２６１ｂを生成する。ストリップ２５１ｂの識別子は“ＳＰ０２ｂ”である。ストリップ２６１ｂの識別子は“ＳＰ０３ｂ”である。ストリップ２５１を分割して、ストリップ２３２ｂ，２４２ｂを生成する。ストリップ２３２ｂの識別子は“ＳＰ０４ｂ”である。ストリップ２４２ｂの識別子は“ＳＰ０５ｂ”である。ストリップ２６１を分割して、ストリップ２５２ｂ，２６２ｂを生成する。ストリップ２５２ｂの識別子は“ＳＰ０６ｂ”である。ストリップ２６２ｂの識別子は“ＳＰ０７ｂ”である。このようにして、論理ボリューム６００内の連続するストリップを結合または分割して新たなストリップを生成する。
【０１１２】
ボリューム制御部１５０は、生成したストリップをＨＤＤ２３０，２４０，２５０，２６０にＬＢＡ順を維持して格納する。ＨＤＤ２３０にはストリップ２３１ｂ，２３２ｂを格納する。ＨＤＤ２４０にはストリップ２４１ｂ，２４２ｂを格納する。ＨＤＤ２５０にはストリップ２５１ｂ，２５２ｂを格納する。ＨＤＤ２６０にはストリップ２６１ｂ，２６２ｂを格納する。他のストリップも順番にＨＤＤ２３０，２４０，２５０，２６０に格納する。
【０１１３】
そして、ボリューム制御部１５０は、チューニング前のストリップ２３１，２４１，２５１，２６１，・・・を無効化し、チューニング後のストリップ２３１ｂ，２３２ｂ，２４１ｂ，２４２ｂ，２５１ｂ，２５２ｂ，２６１ｂ，２６２ｂ，・・・を有効化する。
【０１１４】
このように、ボリューム制御部１５０は、ストリップサイズがランダムアクセスされるデータのサイズに比べて十分に大きいと判断できる場合に、ストリップサイズを縮小する。これにより、１つのＨＤＤにアクセスが集中するのを抑えられる。特に、論理ボリューム６００の用途やアクセスの特性（ランダムアクセスされるデータのサイズ）は、時間の経過とともに変化し得る。すなわち、ストリップサイズをチューニングして大きくしたとしても、そのストリップサイズが恒常的に適切であるとは限らない。
【０１１５】
この点、ＣＥ１００によれば、論理ボリュームごとのストリップサイズを、当該論理ボリュームに対するランダムアクセスのアクセス特性に応じて、効率的にチューニングすることが可能となる。また、ランダムアクセスによるアクセス性能の向上を図ることができる。更に、論理領域ごとにストリップサイズをチューニングする作業の省力化を図れる。
【０１１６】
なお、上記の例では、ランダムアクセスのアクセス特性を判断するために、読み出しリクエストのみを用いたが、読み出しリクエストに代えて、または、読み出しリクエストと併せて、書き込みリクエストを用いてもよい。
【０１１７】
ところで、上記の例では、複数のストリップを束ねて１つの論理ボリュームを作成し、当該論理ボリュームに対してサーバ５００がアクセスする場合を説明した。これは言い換えると、ストリップは物理的な記憶域であるため、サーバ５００と物理的な記憶域との間に論理ボリュームが一層設けられている場合である。一方、ストレージシステムにおいて実現する種々の機能に応じて、論理ボリュームが複数階層設けられることがある。
【０１１８】
図１８は、論理ボリュームの他の例を示す図である。図１８では、ＲＡＩＤグループ＃１０が例示されている。ＲＡＩＤグループ＃１０にはＨＤＤ２７０，２８０，２９０が属している。
【０１１９】
ＨＤＤ２７０はストリップ２７１を有する。ストリップ２７１の識別子は“ＳＰ１０”である。ＨＤＤ２８０はストリップ２８１を有する。ストリップ２８１の識別子は“ＳＰ１１”である。ＨＤＤ２９０はストリップ２９１を有する。ストリップ２９１の識別子は“ＳＰ１２”である。
【０１２０】
ここで、図１８では、論理ボリュームを２階層設ける場合を例示している。例えば、サーバ５００は、ＯＬＵ（Open Logical Unit）８００にアクセスする。ＯＬＵ８００は、１つ目の階層の論理ボリュームである。ＯＬＵ８００には、ＳＬＵ（Shared Logical Unit）８１０，８２０，８３０が割り当てられている。
【０１２１】
ＳＬＵ８１０，８２０，８３０は、２つ目の階層の論理ボリュームである。ＳＬＵ８１０には、ストリップ２７１，２８１，２９１が割り当てられている。ＳＬＵ８２０，８３０にも同様にして、何れかのＲＡＩＤグループからストリップが割り当てられている（図示を省略している）。
【０１２２】
このように、ストリップを複数束ねて第１層の論理ボリューム（ＳＬＵ）を作成し、当該第１層の論理ボリューム（ＳＬＵ）を複数束ねて第２層の論理ボリューム（ＯＬＵ）を作成する。この場合、ＣＥ１００は、ＲＡＩＤグループとＳＬＵ、ＳＬＵとＯＬＵの対応関係を管理する。サーバ５００は、ＯＬＵ８００を指定して書き込みや読み出しのリクエストをＣＥ１００に送信する。ＣＥ１００は、各層を辿って各ＨＤＤへアクセスする。
【０１２３】
論理ボリュームをこのように管理する場合にも、上記と同様にストリップサイズの変更を行える。この場合、ＣＥ１００は、ＳＬＵ８１０，８２０，８３０について、アクセス管理テーブル１３４に相当する情報を作成すればよい。このようにすれば、ＳＬＵ単位でランダムアクセスの特性に応じたチューニングを行うことができる。すなわち、論理ボリュームを複数階層設ける場合にも、最下層（ストリップを束ねた階層）における論理ボリュームごとのストリップサイズを、当該論理ボリュームに対するランダムアクセスのアクセス特性に応じて、効率的にチューニングすることが可能となる。
【符号の説明】
【０１２４】
１  ストレージ制御装置
１ａ  取得手段
１ｂ  記憶手段
１ｃ  制御手段
２  情報処理装置
３，４，５，６  記憶装置
Ａ１，Ａ１ａ，Ａ２，Ａ２ａ，Ａ３，Ａ３ａ，Ａ４，Ａ４ａ，Ａ５，Ａ５ａ  ランダムアクセス
Ｂ１，Ｂ２  論理領域
Ｂ１１，Ｂ１２，Ｂ１３，Ｂ１４，Ｂ２１，Ｂ２２  記憶域
【図１】
0005884602.tif 000002
【図２】
0005884602.tif 000003
【図３】
0005884602.tif 000004
【図４】
0005884602.tif 000005
【図５】
0005884602.tif 000006
【図６】
0005884602.tif 000007
【図７】
0005884602.tif 000008
【図８】
0005884602.tif 000009
【図９】
0005884602.tif 000010
【図１０】
0005884602.tif 000011
【図１１】
0005884602.tif 000012
【図１２】
0005884602.tif 000013
【図１３】
0005884602.tif 000014
【図１４】
0005884602.tif 000015
【図１５】
0005884602.tif 000016
【図１６】
0005884602.tif 000017
【図１７】
0005884602.tif 000018
【図１８】
0005884602.tif 000019