(57)【要約】【課題】単位記憶領域を仮想記憶装置に効率的に割り当てる。【解決手段】仮想記憶装置への単位記憶領域の割り当て要求がされる前に、複数の記憶領域３１にそれぞれ備えられる単位記憶領域のうち、未使用単位記憶領域の少なくとも一部に予約情報を設定する設定部２０３と、割り当て要求を受け付けると、予約情報が設定された単位記憶領域を仮想記憶装置に割り当てる割当部２０３とを備える。【選択図】図１
2018169637.tif 000002
【特許請求の範囲】
【請求項１】
仮想記憶装置への単位記憶領域の割り当て要求がされる前に、複数の記憶領域にそれぞれ備えられる単位記憶領域のうち、未使用単位記憶領域の少なくとも一部に予約情報を設定する設定部と、
前記割り当て要求を受け付けると、前記予約情報が設定された前記単位記憶領域を仮想記憶装置に割り当てる割当部と
を備える、情報処理装置。
【請求項２】
前記予約情報が前記仮想記憶装置に割り当てられる順序を示し、
前記設定部が、前記複数の記憶領域が平準化されていない場合には、同一記憶領域に先に設定されている予約情報の最大値と、データ分散数と、記憶領域の削除許容数との合計以上の値を前記予約情報として設定する
ことを特徴とする、請求項１記載の情報処理装置。
【請求項３】
前記予約情報が前記仮想記憶装置に割り当てられる順序を示し、
前記設定部が、前記複数の記憶領域が平準化されている場合には、前記複数の記憶領域から割り当てを行なう単位記憶領域を均等に選択する
ことを特徴とする、請求項１または２記載の情報処理装置。
【請求項４】
前記設定部が、記憶領域の追加が行なわれた場合に前記予約情報の設定を行なう
ことを特徴とする、請求項１〜３のいずれか１項に記載の情報処理装置。
【請求項５】
前記割当部が、前記複数の記憶領域を管理する記憶領域管理情報に、割り当てを行なう前記複数の記憶領域の情報を一括で登録する
ことを特徴とする、請求項１〜４のいずれか１項に記載の情報処理装置。
【請求項６】
仮想記憶装置への単位記憶領域の割り当て要求がされる前に、複数の記憶領域にそれぞれ備えられる単位記憶領域のうち、未使用単位記憶領域の少なくとも一部に予約情報を設定し、
前記割り当て要求を受け付けると、前記予約情報が設定された前記単位記憶領域を仮想記憶装置に割り当てる
処理をコンピュータに実行させる、仮想化プログラム。
【請求項７】
仮想記憶装置への単位記憶領域の割り当て要求がされる前に、複数の記憶領域にそれぞれ備えられる単位記憶領域のうち、未使用単位記憶領域の少なくとも一部に予約情報を設定する処理と、
前記割り当て要求を受け付けると、前記予約情報が設定された前記単位記憶領域を仮想記憶装置に割り当てる処理と
を備える、仮想化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置，仮想化プログラムおよび仮想化方法に関する。
【背景技術】
【０００２】
仮想化処理機能をそなえ、実ストレージ（実ディスク）を仮想化して仮想ストレージを形成する仮想化ストレージ管理システムが知られている。
【０００３】
仮想化ストレージ装置において、稼働ストレージであるＶＤＩＳＫ（Virtual Disk）を作成するためには、ＶＤＩＳＫを構成するためのセグメントを複数のＬＵＮ（Logical Unit Number）に割り当てる。
【０００４】
従来、複数のＬＵＮにセグメントの割り当てを行なう場合には、例えば、空き容量で複数のＬＵＮをソートし、空容量の大きいＬＵＮから順に、セグメントを１つずつ取得し、取得したセグメントにＶＤＩＳＫ内インデックスを割り当てる処理を、繰り返し行なう。
【０００５】
なお、セグメントについての情報は、例えば、ストレージ装置に備えられたデータベースにおいてＬＵＮ毎に管理されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１０／１０６５７４号
【特許文献２】特表２００８−５３９５３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＶＤＩＳＫとして要求されるサイズは、以前は数１００ＧＢ程度が一般的であったが、近年では１０ＴＢを超えることもあり、今後は、さらに増加することが見込まれる。
【０００８】
ＶＤＩＳＫのサイズが大きくなるほど、ＶＤＩＳＫを構築するためのセグメント割り当て時のデータベースへのアクセス回数が増加し、そのため、セグメント割り当てに要する時間も増大する。これにより、顧客への応答遅延や、データベースの長時間負荷が発生する。
【０００９】
１つの側面では、本発明は、単位記憶領域を仮想記憶装置に効率的に割り当てることを目的とする。
【課題を解決するための手段】
【００１０】
このため、この情報処理装置は、仮想記憶装置への単位記憶領域の割り当て要求がされる前に、複数の記憶領域にそれぞれ備えられる単位記憶領域のうち、未使用単位記憶領域の少なくとも一部に予約情報を設定する設定部と、前記割り当て要求を受け付けると、前記予約情報が設定された前記単位記憶領域を仮想記憶装置に割り当てる割当部とを備える。
【発明の効果】
【００１１】
一実施形態によれば、単位記憶領域を仮想記憶装置に効率的に割り当てることができる。
【図面の簡単な説明】
【００１２】
【図１】実施形態の一例としてのストレージシステムの機能構成を示す図である。
【図２】実施形態の一例としてのストレージシステムのハードウェア構成の一部を示す図である。
【図３】ＶＤＩＳＫの構成を説明するための図である。
【図４】実施形態の一例としてのストレージシステムの拡張を例示する図である。
【図５】実施形態の一例としてのストレージシステムにおけるＬＵＮの容量管理手法を示す図である。
【図６】実施形態の一例としてのストレージシステムにおけるセグメント情報を例示する図である。
【図７】実施形態の一例としてのストレージシステムにおけるＬＵＮ情報を例示する図である。
【図８】実施形態の一例としてのストレージシステムにおける割当部が管理するＬＵＮ情報を例示する図である。
【図９】実施形態の一例としてのストレージシステムにおける割当部による事前割り当て方法を説明するための図である。
【図１０】実施形態の一例としてのストレージシステムにおける事前割り当て数を説明するための図である。
【図１１】実施形態の一例としてのストレージシステムにおけるセグメント割り当て方法を説明するための図である。
【図１２】実施形態の一例としてのストレージシステムにおける割当部による一括割り当て方法を説明するための図である。
【図１３】実施形態の一例としてのストレージシステムにおける割当部による事前割り当て処理を説明するフローチャートである。
【図１４】実施形態の一例としてのストレージシステムにおける割当部の実割り当て処理を説明するフローチャートである。
【発明を実施するための形態】
【００１３】
以下、図面を参照して本情報処理装置，仮想化プログラムおよび仮想化方法にかかる実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００１４】
（Ａ）構成
まず、図１および図２を参照しながら、本実施形態のストレージシステム（情報処理装置）１の構成について説明する。なお、図１は本実施形態のストレージシステム１の機能構成を示す図、図２はそのハードウェア構成の一部を示す図である。
【００１５】
本ストレージシステム１は、ストレージユニット（Storage Unit：ＳＵ）３０の記憶領域を用いて仮想的なボリューム（Virtual Disk；以下、ＶＤＩＳＫと呼ぶ）を構築し、このＶＤＩＳＫを提供する仮想化ストレージシステムである。仮想化ストレージシステムは、ストレージの物理的なボリューム構成や容量に制限されることなく、自由な容量および構成を実現する。
【００１６】
ストレージシステム１は、基本ノード４ａおよび拡張ノード４ｂをそなえ、ＶＤＩＳＫを、上位装置であるホスト装置（業務サーバ）２に提供する。
【００１７】
仮想ストレージ環境においては、物理的なストレージのボリューム構成や容量に縛られることなく、自由な容量、構成を実現することができる。
【００１８】
図３はＶＤＩＳＫの構成を説明するための図である。
【００１９】
上述の基本ノード４ａおよび拡張ノード４ｂは、例えば、ワイドストライピングによるデータアクセスを行なう。ワイドストライピングとは、１つのボリュームに対するデータアクセスを、複数のＬＵＮに分散し、固定長のストリップと呼ばれる単位でアクセスする技術である。
【００２０】
図３に示すように、ＶＤＩＳＫは、それぞれが、所定サイズ（例えば２ギガバイト（ＧＢ））のセグメントセットの集合体である。セグメントセットは、それぞれが、所定サイズ（例えば２５６メガバイト（ＭＢ））の所定数（図３に示す例では＃１〜＃８の８つ）のセグメントの集合体である。そして、各セグメント＃１〜＃８はＳＵ３０内のＬＵＮ３１毎に割り当てられている。ユーザのデータは、固定長のストリップ（例えば１ＭＢ）単位で記録され、このストリップはセグメントを順に利用する形でストライピングされる。
【００２１】
ＶＤＩＳＫは、後述するエージェント２１０の仮想化部２１１（図１参照）としての機能により実現され、本ストレージシステム１において管理される仮想的なボリュームとＳＵ３０上の物理的な記憶領域との対応付けが行なわれる。
【００２２】
本ストレージシステム１は、１以上（図１に示す例では１つ）のホスト装置２に対して通信可能に接続されている。ホスト装置２とストレージシステム１とは、後述するＣＡ（Communication Adapter）１０１，１０２により接続されている。
【００２３】
ホスト装置２は、例えば、サーバ機能を備えた情報処理装置であり、本ストレージシステム１との間において、ＮＡＳ（Network Attached Storage）やＳＡＮ（Storage Area Network）等のコマンドを送受信する。ホスト装置２は、例えば、ストレージシステム１に対してＮＡＳにおけるリード／ライト等のストレージアクセスコマンドを送信することにより、ストレージシステム１が提供する記憶領域（ボリューム）にデータの書込または読出を行なう。
【００２４】
ホスト装置２は、不図示の業務アプリケーションを実行しており、例えば、図示しないＣＰＵ（Central Processing Unit），メモリ，ディスクドライブ，ディスプレイ，インタフェース（Interface；Ｉ／Ｆ），キーボード，マウス等をそなえる。
【００２５】
そして、本ストレージシステム１は、ホスト装置２からボリュームに対して行なわれる入出力要求（例えば、書込み要求や読出し要求）に応じて、このボリュームに対応するＬＵＮ３１に対して、データの読出（リード）や書込（ライト）等の処理を行なう。なお、以下では、ホスト装置２からの入出力要求のことをＩ／Ｏ要求という場合がある。
【００２６】
また、ストレージシステム１には、管理端末３が通信可能に接続されている。管理端末３は、キーボードやマウス等の入力装置や、表示装置を備える情報処理装置であって、システム管理者等のユーザが各種情報の入力操作を行なう。例えば、ユーザは、管理端末３を介して、各種設定等にかかる情報を入力する。入力された情報は、ホスト装置２やストレージシステム１に送信される。
【００２７】
本ストレージシステム１は、スケールアウト型のストレージシステムとして構成されており、拡張ノード４ｂ（図４参照）を増設することで、仮想ボリュームの容量等や各種性能を拡張（スケールアウト）することができる。例えば、追加の記憶領域が必要になったときに、スケールアウトを行なう。
【００２８】
図４は実施形態の一例としてのストレージシステム１の拡張を例示する図である。
【００２９】
スケールアウト型のストレージシステム１は、例えば、クラウドシステムに用いて好適であり、ＶＤＩＳＫを仮想システムのシステムディスクや拡張ディスクとして利用することができる。
【００３０】
図４の例では、図１のストレージシステム１の基本ノード４ａに対して、ＰＵ（Processor Unit）１００およびＳＵ３０を有する複数の拡張ノード４ｂを追加することができることを示している。
【００３１】
なお、図４に示す例においては、基本ノード４ａにおいて、ＰＵ１００−１，１００−２とＳＵ３０−１とは、スイッチ（ＳＷ）を介して接続されている例を示している。スイッチは、スイッチング機能を有するネットワークスイッチである。
【００３２】
例えば、本ストレージシステム１をＩａａＳ（Infrastructure as a Service）に適用する場合には、顧客が管理端末３等を用いて仮想システム（ＶＤＩＳＫ）の作成要求を入力する。ストレージシステム１においては、この仮想システム（ＶＤＩＳＫ）の作成要求を受け付けた際に、ＶＤＩＳＫを形成するディスク域としてＳＵ３０のＬＵＮ３１（セグメント）を論理ボリューム（ＶＤＩＳＫ）に割り当てる。
【００３３】
また、例えば、リソース管理機能を有するミドルウェア等からＶＤＩＳＫ作成要求を入力してもよい。このようなＶＤＩＳＫ作成要求を受け付けると、本ストレージシステム１においては、ＳＵ３０において分散されたＬＵＮ３１からセグメントを集めてＶＤＩＳＫを構成する。
【００３４】
なお、一のＶＤＩＳＫを構成するためのセグメントは、Ｉ／Ｏ平準化のために、可能な限り分散したＬＵＮ３１から割り当てることが望ましい。
【００３５】
図１に示すように、本ストレージシステム１は、基本ノード４ａおよび拡張ノード４ｂを備える。
【００３６】
基本ノード４ａはＰＵ１００−１，１００−２およびＳＵ３０−１を備える。また、拡張ノード４ｂは、ＰＵ１００−３およびＳＵ３０−２を備える。
【００３７】
本ストレージシステム１においては、基本ノード４ａに対して拡張ノード（拡張セット）４ｂを増設することで、実ストレージ装置であるＳＵ３０−２とこのＳＵ３０−２を管理するＰＵ１００−３とが１つのセットとして拡張される。これにより、本システムの全体性能と容量を拡大することができる。
【００３８】
図１に示す例においては、１つの拡張ノード４ｂを備えているが、これに限定されるものではなく、２つ以上の拡張ノード４ｂを備えてもよく、また、拡張ノード４ｂの増設を省略してもよい。
【００３９】
本ストレージシステム１は、図１に示すように、複数（本実施形態では３つ）のＰＵ１００−１〜１００−３および１つ以上（図１に示す例では１つ）のＳＵ３０−１，３０−２を備える。以下、ＳＵを示す符号としては、複数のＳＵのうち１つを特定する場合には符号３０−１，３０−２を用い、任意のＳＵを指すときには符号３０を用いる。
【００４０】
ＰＵ１００−１〜１００−３は、ストレージシステム１内の動作を制御する制御装置（情報処理装置，コンピュータ，コントローラ，ストレージ制御装置）であり、後述するＳＵ３０を制御してＶＤＩＳＫを提供する。ＰＵ１００−１〜１００−３は、ホスト装置２から送信されるリード／ライト等の入出力（Input/Output；Ｉ／Ｏ）コマンドを受け取り、種々の制御を行なう。すなわち、ＰＵ１００−１〜１００−３は、Ｉ／Ｏ要求に従って、ＳＵ３０のＬＵＮ３１へのデータアクセス制御等、各種制御を行なう。
【００４１】
また、図２に示すように、ＰＵ１００−１〜１００−３は互いに同様のハードウェア構成を有している。なお、図２においては、便宜上、拡張ノード４ｂの図示を省略している。
【００４２】
以下、ＰＵを示す符号としては、複数のＰＵのうち１つを特定する場合には符号１００−１，１００−２，１００−３を用い、任意のＰＵを指すときには符号１００を用いる。また、ＰＵ１００−１をＰＵ＃１と、ＰＵ１００−２をＰＵ＃２と、ＰＵ１００−３をＰＵ＃３と、それぞれ表す場合がある。
【００４３】
ＰＵ１００は、図２に示すように、ＣＡ１０１，１０２と複数（図２に示す例では２つ）のＤＡ１０３，１０３とを備えるとともに、ＣＰＵ１０５，メモリ１０６，フラッシュメモリ１０７およびＩＯＣ（Input Output Controller）１０８を備える。ＣＡ１０１，１０２，ＤＡ１０３，ＣＰＵ１０５，メモリ１０６，フラッシュメモリ１０７，ＩＯＣ１０８は、例えばＰＣＩｅインタフェース１０４を介して相互に通信可能に接続される。
【００４４】
ＣＡ１０１，１０２は、ホスト装置２や管理端末３等から送信されたデータを受信したり、ＰＵ１００から出力するデータをホスト装置２や管理端末３等に送信したりするアダプタである。すなわち、ＣＡ１０１，１０２は、ホスト装置２等の外部装置との間でのデータの入出力を制御する。
【００４５】
ＣＡ１０１は、例えば、ＮＡＳを介してホスト装置２や管理端末３と通信可能に接続するネットワークアダプタであり、ＬＡＮ（Local Area Network）インタフェース等である。各ＰＵ１００は、ＣＡ１０１により通信回線を介してホスト装置２等とＮＡＳにより接続され、Ｉ／Ｏ要求の受信やデータの送受信等を行なう。図１に示す例においては、ＰＵ１００ａ，１００ｂのそれぞれに２つのＣＡ１０１，１０１が備えられている。
【００４６】
ＣＡ１０２は、ＳＡＮを介してホスト装置２と通信可能に接続するネットワークアダプタであり、例えば、ｉＳＣＳＩ（Internet Small Computer System Interface）インタフェースやＦＣ（Fibre Channel）インタフェースである。各ＰＵ１００は、ＣＡ１０２により図示しない通信回線を介してホスト装置２等とＳＡＮにより接続され、Ｉ／Ｏ要求の受信やデータの送受信等を行なう。図１に示す例においては、ＰＵ１００ａ，１００ｂのそれぞれに１つのＣＡ１０２が備えられている。
【００４７】
ＤＡ１０３は、ＳＵ３０と通信可能に接続するためのインタフェースである。ＤＡ１０３にはＳＵ３０が接続され、各ＰＵ１００は、ホスト装置２から受信したＩ／Ｏ要求に基づき、ＳＵ３０に対するアクセス制御を行なう。
【００４８】
また、図１に示す例においては、ＰＵ１００ａ，１００ｂのそれぞれに２つのＤＡ１０３，１０３が備えられている。そして、ＰＵ１００ａ，１００ｂのそれぞれにおいて、各ＤＡ１０３にＳＵ３０が接続されている。
【００４９】
ＳＵ３０は、例えば、ＨＤＤ（Hard Disk Drive），ＳＳＤ（Solid State Drive）等の記憶装置（ストレージ，実ストレージ装置）であり、種々のデータを格納する。
【００５０】
ＳＵ３０は、１以上（図１に示す例では４つ）のＬＵＮ３１を備え、これらのＬＵＮ３１の記憶領域を、本ストレージシステム１に対して提供する。ＬＵＮ３１を論理ディスク３１と表現してもよい。
【００５１】
例えば、ＳＵ３０は、複数段のスロット（図示省略）を備えるデバイスエンクロージャに搭載され、これらのスロットに、記憶装置を着脱することにより、実ボリューム容量を随時変更し、ＬＵＮの追加や削除を行なうことができる。また、複数の記憶装置を用いてＲＡＩＤ（Redundant Arrays of Inexpensive Disks）を構成することができる。
【００５２】
各ＳＵ３０は、ＰＵ１００ａのデバイスアダプタＤＡ１０３，１０３とＰＵ１００ｂのＤＡ１０３，１０３とそれぞれ接続されている。そして、各ＳＵ３０には、ＰＵ１００ａ，１００ｂのいずれからもアクセスして、データの書込や読出を行なうことができる。すなわち、ＳＵ３０の各ＬＵＮ３１に対して、ＰＵ１００ａ，１００ｂのそれぞれを接続することにより、ＬＵＮ３１へのアクセス経路が冗長化されている。
【００５３】
これにより、ＳＵ３０の各ＬＵＮ３１には、ＰＵ１００ａ，１００ｂのいずれからもデータの書込や読出を行なうことができる。
【００５４】
フラッシュメモリ１０７は、ＣＰＵ１０５が実行するプログラムや種々のデータ等を格納する記憶装置である。
【００５５】
メモリ１０６はＲＯＭ（Read Only Memory）およびＲＡＭ（Random Access Memory）を含む記憶メモリである。メモリ１０６のＲＯＭには、仮想化制御にかかるソフトウェアプログラム（制御プログラム）やこのプログラム用のデータ類が書き込まれている。
【００５６】
制御プログラムは、例えば、本実施形態の制御機能（例えば、図１に示すセグメント管理部２０２や仮想化部２１１としての機能）を実現すべくＣＰＵ１０５が実行するプログラムであり、メモリ１０６あるいはフラッシュメモリ１０７に保存される。
【００５７】
メモリ１０６上のソフトウェアプログラムは、ＣＰＵ１０５に適宜読み込まれて実行される。また、メモリ１０６のＲＡＭは、一次記憶メモリあるいはワーキングメモリとして利用される。また、メモリ１０６のＲＡＭは、キャッシュ領域を有し、ホスト装置２から受信したデータや、ホスト装置２に対して送信するデータが一時的に格納される。
【００５８】
ＩＯＣ１０８は、各ＰＵ１００内におけるデータ転送を制御する制御装置であり、例えば、メモリ１０６に格納されたデータをＣＰＵ１０５を介することなく転送させるＤＭＡ（Direct Memory Access）転送を実現する。
【００５９】
ＣＰＵ１０５は、種々の制御や演算を行なう処理装置であり、例えばマルチコアプロセッサ（マルチコアＣＰＵ）である。ＣＰＵ１０５は、メモリ１０６，フラッシュメモリ１０７等に格納されたＯＳ（Operating System）やプログラムを実行することにより、種々の機能を実現する。特に、本実施形態において、ＣＰＵ１０５は、制御プログラムを実行することで、後述するセグメント管理部２０２としての機能、もしくは仮想化部２１１としての機能を果たす。
【００６０】
すなわち、ＰＵ１００ａが制御プログラムのマネージャ用モジュール（仮想化プログラム）を実行することで、図２に示すように、ＰＵ１００ａがマネージャ２００として機能し、セグメント管理部２０２としての機能が実現される。また、ＰＵ１００ｂが制御プログラムのエージェント用モジュールを実行することで、ＰＵ１００ｂがエージェント２１０として機能し、仮想化部２１１としての機能が実現される。
【００６１】
セグメント管理部２０２は、データベース２０１および割当部２０３を備える。
【００６２】
割当部２０３は、ＶＤＩＳＫに対してＬＵＮ３１のセグメントを割り当てるセグメント割り当て処理を行なう。以下、ＶＤＩＳＫに既に割り当てられている（割り当て済みの）セグメントを割り当て済セグメントという。また、これに対して、ＶＤＩＳＫに割り当てがされていない（未割り当ての）セグメントを空きセグメントという場合がある。
【００６３】
本ストレージシステム１においては、割当部２０３は、ＶＤＩＳＫへのセグメントの割り当てを、事前割り当てと実割り当てとの２つのフェーズに分けて行なうことで、割り当て処理の高速化を実現する。
【００６４】
割当部２０３は、空きセグメントの少なくとも一部に対して、ＶＤＩＳＫに割り当てられる順序を予め決定し、データベース２０１に設定する事前割り当てを行なう。以下、空セグメントであって事前割り当てが行なわれているセグメントを事前割り当て済セグメントという場合がある。
【００６５】
割当部２０３は、空きセグメントに対して採番を行なうことで順序付けを行なう。このように空きセグメントに予め設定された割り当て順序を事前割り当て順序という場合がある。事前割り当て順序は、例えばシーケンシャルな整数で表され、この事前割り当て順序を示す数値を事前割り当てインデックスという場合がある。
【００６６】
すなわち、割当部２０３は、空きセグメントの少なくとも一部に対して事前割り当てインデックスを設定することで、事前割り当てを行なう。
【００６７】
割当部２０３は、ＶＤＩＳＫを作成する際に、実割り当てフェーズにおいて、事前割り当てインデックスが設定されたセグメントを、事前割り当てインデックスが示す順序に従ってＶＤＩＳＫに割り当てる。従って、事前割り当てインデックスは、ＶＤＩＳＫに割り当てる順序を、ＶＤＩＳＫの作成前に予め規定する予約情報（予約番号）として機能する。
【００６８】
割当部２０３は、空きセグメントの中からＶＤＩＳＫに優先して割り当てるセグメントを選択し、シーケンシャルな事前割り当てインデックスを設定することで、ＶＤＩＳＫに割り当てられる順番予約を行なう。なお、事前割り当てを事前予約といってもよい。
【００６９】
割当部２０３は、ＶＤＩＳＫの構築を行なう際に、事前割り当てにおいて設定された事前割り当て順序（事前割り当てインデックス）に従って、事前割り当て済セグメントを選択し、ＶＤＩＳＫに割り当てる。このように、セグメントをＶＤＩＳＫに割り当てることを実割り当てという。
【００７０】
実割り当てにおいて、割当部２０３は、事前割り当てインデックスが設定されたセグメントを、各事前割り当てインデックスの順序に従ってセグメントを割り当てる。すなわち、値が小さい事前割り当てインデックスが設定された事前割り当てインデックスから順番に選択してＶＤＩＳＫに割り当てる。
【００７１】
これにより、実割り当て時のセグメント選択コストをなくしＶＤＩＳＫ作成にかかる時間を削減することができるのである。
【００７２】
セグメント管理部２０２は、ＶＤＩＳＫを構成するセグメントおよびそのセグメントが属するＬＵＮ３１を管理する。
【００７３】
セグメント管理部２０２は、データベース２０１を用いてセグメントの管理を行なう。
【００７４】
図５は実施形態の一例としてのストレージシステム１におけるＬＵＮ３１の容量管理手法を示す図である。
【００７５】
上述の如く、ＬＵＮ３１内のセグメントは、セグメント管理部２０２が、ＬＵＮ３１内のセグメントをＶＤＩＳＫに割り当てることで割り当て済セグメントとなり、事前割り当てを行なうことで事前割り当て済セグメントとなる。また、ＶＤＩＳＫへの割り当ても事前割り当ても行なわれていないセグメントが空きセグメントとして扱われる。
【００７６】
本ストレージシステム１においては、ＬＵＮ３１における割当済セグメントの容量を割り当て済容量といい、また、ＬＵＮ３１における事前割り当て済セグメントの容量を事前割り当て済容量という。さらに、ＬＵＮ３１において、割り当て済セグメントでも事前割り当て済セグメントでもない空きセグメントの容量を空き容量という。
【００７７】
事前割り当て済容量は、実際にはＶＤＩＳＫに割り当たっていないが、事前割り当てが行なわれたセグメントの領域の合計値である。また、空き容量は、ＬＵＮ３１の全領域の容量から事前割り当て済容量および割り当て済容量を除いた値となる。
【００７８】
データベース２０１は、セグメント情報３０１およびＬＵＮ情報３０２を管理する。
【００７９】
図６は実施形態の一例としてのストレージシステム１におけるセグメント情報３０１を例示する図、図７はそのＬＵＮ情報３０２を例示する図である。
【００８０】
セグメント情報３０１はセグメントに関する情報である。図６に例示するセグメント情報３０１は、ＬＵＮ名，ＬＵＮ内インデックス，ＶＤＩＳＫ名，ＶＤＩＳＫ内インデックスおよび事前割り当てインデックスを関連付けて構成されており、セグメント毎にこれらの情報が登録される。
【００８１】
ＬＵＮ名はそのセグメントを含むＬＵＮ３１を特定する情報である。ＬＵＮ内インデックスは、そのセグメントのＬＵＮ３１内における位置（格納位置）を示す。ＶＤＩＳＫ名は、ＶＤＩＳＫを特定するための情報であり、そのセグメントがＶＤＩＳＫに割り当てられている場合に、その割り当て先のＶＤＩＳＫのＶＤＩＳＫ名が登録される。
【００８２】
ＶＤＩＳＫ内インデックスは、そのセグメントのＶＤＩＳＫ内における位置（格納位置）を示し、そのセグメントがＶＤＩＳＫに割り当てられている場合に、その割り当て先のＶＤＩＳＫにおける位置（インデックス）が登録される。
【００８３】
事前割り当てインデックスは、上述の如く、事前割り当て順序を示す数値であり、そのセグメントが事前割り当てされている場合に設定される。
【００８４】
例えば、図６に例示するセグメント情報３０１において、先頭のエントリが示すセグメントは、ＬＵＮ名が“LUN１”であるＬＵＮ３１のインデックス“122”に位置する。また、このセグメントには事前割り当てが行なわれており、事前割り当てインデックス“1”が設定されている。
【００８５】
また、図６に例示するセグメント情報３０１において、最後尾（最下部）のエントリが示すセグメントは、ＬＵＮ名が“LUN3”であるＬＵＮ３１のインデックス“2”に位置する。また、このセグメントは、ＶＤＩＳＫ名が“VDISK4”のＶＤＩＳＫに割り当てられており、この“VDISK4”のインデックス“2”に対応する。
【００８６】
ＬＵＮ情報３０２は、ＬＵＮ３１におけるセグメントに関する情報である。図７に例示するＬＵＮ情報３０２は、ＬＵＮ名，全セグメント数，空セグメント数および事前割り当てセグメント数を関連付けて構成されている。
【００８７】
ＬＵＮ名は、ＬＵＮ３１を特定する情報である。全セグメント数は、そのＬＵＮ３１が有するセグメントの総数である。空セグメント数は、そのＬＵＮ３１における空きセグメントの数であり、事前割り当てセグメント数は、そのＬＵＮ３１における事前割り当て済セグメントの数である。
【００８８】
（ａ）事前割り当て
以下に、割当部２０３による事前割り当てについて説明する。
【００８９】
ストレージ装置の運用中においては、装置内のＬＵＮ数やＬＵＮ内の空き容量が動的に変化する。このため、従来においては、ＶＤＩＳＫを作成するためにセグメントの割り当てを行なう際に、その都度、複数のＬＵＮを空き容量が大きい順にソートし、セグメントセット単位でセグメント割り当てを実施していた。
【００９０】
ここで、ＬＵＮ数やＬＵＮ内の空き容量は、主に、ＬＵＮ追加，ＬＵＮ削除，ＶＤＩＳＫ作成およびＶＤＩＳＫ削除を行なう際に変化する。しかし、実際の運用ではＬＵＮ追加と、それ以外であるＬＵＮ削除，ＶＤＩＳＫ作成およびＶＤＩＳＫ削除とでは実行頻度は大きく異なる。すなわち、装置運用の本番が始まると、容量追加はほとんどなく、ＬＵＮの追加が実行されることは少ない。
【００９１】
さて、ストレージシステムにおいてセグメントが増加するタイミングは、主にＬＵＮ追加およびＶＤＩＳＫ削除である。
【００９２】
ＬＵＮ追加は他のＬＵＮと比較して空き容量が極端に大きくなる可能性がある。そのため、即時にセグメント割り当てへの考慮が必要であり、それまでに行なった事前割り当てを、全て一旦やり直し、平準化を進める必要がある。
【００９３】
一方、ＶＤＩＳＫ削除により増加する空きセグメントは、すでにストライピングされており平準化された状態であるため、全体としてのＬＵＮの偏りに影響がない。従って、即時のセグメント割り当てを考慮する必要はなく、次に事前割り当てを行なう際に考慮すればよい。また、ＶＤＩＳＫ作成は、既に事前に割り当てたセグメントから取得するため、ＬＵＮの偏りに影響を与えない。
【００９４】
本ストレージシステム１においては、事前割り当てによる事前割り当てインデックスの決め直しが頻発すると、後述する実割り当ての妨げとなるおそれがあるので、割当部２０３は、ＬＵＮ３１の追加が行なわれた場合に事前割り当てを行なう。すなわち、割当部２０３は、ＶＤＩＳＫの作成要求（セグメントの割り当て要求）が管理端末３等から入力される前に、事前割り当てを行なう。
【００９５】
ＬＵＮ削除はＬＵＮ３１の空き容量の偏りへの影響がないが、単純にＬＵＮ３１を削除するだけでは事前に割り当てたセグメントの順序どおりに実割り当てを行なった場合にストライプ幅を維持できなくなる。
【００９６】
そこで、本ストレージシステム１においては、割当部２０３は、事前割り当てを行なうに際して、ＬＵＮ３１が削除されることを想定し、ストライプ幅より削除されるＬＵＮ数（例えばβとする）分多くセグメントを割り当てる。これにより、事前割り当て順序が設定されたセグメントにおいては、ＬＵＮ３１が削除された場合においてもストライプ幅を維持できる。
【００９７】
このため、割当部２０３は、ＬＵＮ３１毎に、同一のＬＵＮ３１内に既に設定されている事前割り当てインデックスの最大値を管理する。以下、ＬＵＮ３１内に既に設定されている事前割り当てインデックスの最大値を事前割り当て最大インデックスといい、また、この事前割り当て最大インデックスを符号ａを用いて表す場合がある。
【００９８】
図８は実施形態の一例としてのストレージシステム１における割当部２０３が管理するＬＵＮ情報３０４を例示する図である。
【００９９】
割当部２０３は、例えば、この図８に例示するＬＵＮ情報３０４を用いて、各ＬＵＮ３１のセグメントの状態等を管理する。
【０１００】
図８に例示するＬＵＮ情報３０４は、ＬＵＮ名，全セグメント数，空セグメント数，事前割り当てセグメント数および事前割り当て最大インデックスを関連付けて構成されている。
【０１０１】
すなわち、このＬＵＮ情報３０４は、図７に例示したＬＵＮ情報３０２に、管理項目としてさらに事前割り当て最大インデックスを加えたものである。なお、図中、記述の項目と同一の項目は同様の内容を示しているので、その説明は省略する。
【０１０２】
事前割り当て最大インデックスは、そのＬＵＮ３１内に既に設定されている事前割り当てインデックスの最大値である。
【０１０３】
なお、ＬＵＮ情報３０４において、ＬＵＮ名，全セグメント数，空セグメント数および事前割り当てセグメント数の各情報は、例えば、データベース２０１からＬＵＮ情報３０２を読み出すことにより取得することができる。ＬＵＮ情報３０４は、例えば、メモリ１０６のＲＡＭに格納される。
【０１０４】
そして、割当部２０３は、セグメントに対して事前割り当てインデックスを設定する際に、事前割り当てインデックスが、「事前割り当て最大インデックスａ+ストライプ幅γ＋削除を許容するＬＵＮ数β」以上となるように設定する。
【０１０５】
ここで、ストライプ幅γは、１つのデータを分割（ストライピング）して同時に書き込む際の分割数もしくは分散数である。以下、ストライプ幅γを単にγと表す場合がある。
【０１０６】
削除を許容するＬＵＮ数βとは、削除してもストライピング違反が生じないＬＵＮ３１の数の上限値であり、ＬＵＮ３１の削除（ＬＵＮ抜き）に関する自由度を示す。本ストレージシステム１においては、削除を許容するＬＵＮ数βとして自然数の固定値が予め設定される。以下、削除を許容するＬＵＮ数βを、単にβと表す場合がある。βの値は、実際のシステム運用においてＬＵＮ３１の削除が行なわれる頻度等にもとづいて見積もり、予め設定することが望ましい。
【０１０７】
ただし、割当部２０３によるセグメントの事前割り当てが開始されてから実割り当てが行なわれるまでの間に、βより大きい回数、ＬＵＮ３１の削除が実施された場合には、本ストレージシステム１の全セグメントセットについて完全にストライピングされていることを保証できなくなる。そこで、βの値は、システム管理者等が任意に設定（調節）できることが望ましい。
【０１０８】
図９は実施形態の一例としてのストレージシステム１における割当部２０３による事前割り当て方法を説明するための図である。
【０１０９】
この図９において、符号（Ａ）は、セグメントに対して事前割り当てを行なう際に、事前割り当て最大インデックスａやストライプ幅γ，削除を許容するＬＵＮ数βを考慮することなく事前割り当てインデックスを設定する例を示す。
【０１１０】
符号（Ａ）に示す例においては、lun1〜lun8の８つのＬＵＮが備えられ、lun1，lun2，lun3，lun4，lun5，lun6，lun7，lun8の順で空き容量が大きいものとする。また、ストライプ幅γ＝8であるものとする。
【０１１１】
例えば、lun1に事前割り当てインデックス“1”および“9”が設定されている。同様に、lun2に事前割り当てインデックス“2”および“10”が、lun3に事前割り当てインデックス“3”および“11”が、lun4に事前割り当てインデックス“4”および“12”が、lun5に事前割り当てインデックス“5”および“13”が、それぞれ設定されている。さらに、lun6に事前割り当てインデックス“6”および“14”が、lun7に事前割り当てインデックス“7”および“15”が、lun8に事前割り当てインデックス“8”および“16”が、それぞれ設定されている。
【０１１２】
このような状態において、例えば、lun2が削除（ＬＵＮ抜き）された場合には、割当部２０３は、事前割り当てインデックス“1”，“3”，“4”，“5”，“6”，“7”，“8”，“9”のセグメントを実割り当てする。この際、事前割り当てインデックス“1”のセグメントと事前割り当てインデックス“9”のセグメントとが同一のlun1となる。これにより、ストライピングにかかるストレージポリシーに違反し、システムの信頼性が低下することになる。
【０１１３】
一方、図９において、符号（Ｂ）は本ストレージシステム１の割当部２０３による事前割り当て例を示す。割当部２０３は、各ＬＵＮ３１のセグメントに事前割り当てを行なう際に、「同一ＬＵＮ３１における事前割り当て最大インデックスａ＋ストライプ幅γ＋削除を許容するＬＵＮ数β」以上となる事前割り当てインデックスを設定する。
【０１１４】
図９の符号（Ｂ）においては、lun1〜lun13の１３個のＬＵＮ３１のセグメントに事前割り当てを行なう例を示している。
【０１１５】
例えば、lun8においては、先に事前割り当てインデックス（事前割り当て最大インデックス）“4”が設定されている。ここで、ストライプ幅γ=8であり、削除を許容するＬＵＮ数β=1とする場合に、セグメント管理部２０２は、このlun8のセグメントに、次は13（=4+8+1）以上の事前割り当てインデックスを設定する。
【０１１６】
このようにして、図９の符号（Ｂ）においては、lun1に事前割り当てインデックス“8”が設定されている。同様に、lun2に事前割り当てインデックス“5”が、lun3に事前割り当てインデックス“3”が、lun4に事前割り当てインデックス“9”が、lun5に事前割り当てインデックス“10”が、それぞれ設定されている。また、lun6に事前割り当てインデックス“11”が、lun7に事前割り当てインデックス“12”が、lun8に事前割り当てインデックス“4”および“13”が、それぞれ設定されている。さらに、lun9に事前割り当てインデックス“14”が、lun10に事前割り当てインデックス“7”が、lun11に事前割り当てインデックス“6”および“15”が、lun12に事前割り当てインデックス“1”および“16”が、lun13に事前割り当てインデックス“2”が、それぞれ設定されている。
【０１１７】
なお、事前割り当てインデックス“1〜5”が設定されたセグメントは実割り当て済みであるものとする。
【０１１８】
ここで、例えば、lun6が削除（ＬＵＮ抜き）された場合には、割当部２０３により、事前割り当てインデックス“6”，“7”，“8”，“9”，“10”，“12”，“13”，“14”のセグメントが実割り当てされる。この際、同一ＬＵＮ３１に割り当てられるセグメントはなく、ストライピングにかかるストレージポリシーに違反することもない。
【０１１９】
すなわち、各ＬＵＮ３１のセグメントに対して、事前割り当て最大インデックスとの差が「ストライプ幅（γ＝8）＋削除を許容するＬＵＮ数（β＝1）」となる事前割り当てインデックスを設定することで、ＬＵＮ３１が１つ削除されてもストライピングを維持することができる。
【０１２０】
また、割当部２０３は、複数のＬＵＮ３１間における空き容量の平準化の度合いにより動的に事前割り当て数を変更する。
【０１２１】
複数のＬＵＮ３１間において、空き容量の偏りが大きく、平準化できていない間は、セグメント管理部２０２は、先ず、複数のＬＵＮ３１を空き容量が多い順にソートする。
【０１２２】
そして、セグメント管理部２０２は、１回のソートで１度に事前割り当てるセグメント数を少なくする。例えば、１つのＬＵＮ３１から１セグメントを取得する。これにより同じＬＵＮ３１が選択される頻度をあげ、早く割り当てることよりも早く平準化することを優先する。なお、このように平準化を優先する間は、ソート回数が増える。
【０１２３】
一方、平準化がされている場合には、割当部２０３は、事前割り当て速度を優先し、１回のソートで１度に割り当てるセグメント数を多くする。すなわち、割当部２０３は、各ＬＵＮ３１から割り当てを行なうセグメントを均等に選択する。
なお、平準化がされているか否かは、例えば、全ＬＵＮ３１を対象としたＬＵＮの空き容量の最大値と最小値との差で判断する。空き容量の最大値と最小値との差が閾値Ｆ以下であれば平準化されたと判断し、空き容量の最大値と最小値との差がＦより大きければ平準化されていないと判断する。閾値Ｆとしては、例えば、１セグメントのサイズを用いてもよく、例えば、256MBである。
【０１２４】
平準化ができていない間において、１回のソートで１度に異なったＬＵＮ３１に対して事前割り当てするセグメント数をαとする。
【０１２５】
事前割り当て時には、割当部２０３は、全ＬＵＮ３１の事前割り当て最大インデックスをメモリ上に記憶しておく（ＬＵＮ情報３０４参照）。
【０１２６】
そして、割当部２０３は、新たに選択したセグメントについて、事前割り当てインデックスの候補値αと、そのセグメントが属するＬＵＮ３１の事前割り当て最大インデックスａとを比較する。割当部２０３は、事前割り当てインデックスの候補値αと、事前割り当て最大インデックスａとが“ストライプ幅γ+削除を許容するＬＵＮ数β”以上の差がある場合に、その事前割り当てインデックスの候補値αを選択したセグメントに事前割り当てインデックスとして設定する。すなわち、事前割り当てを行なう。
【０１２７】
なお、割当部２０３は、この割り当てに併せて、ＬＵＮ情報３０４における事前割り当て最大インデックスの更新も行なう。
【０１２８】
また、β本以上ＬＵＮ３１の削除が実施された場合には、割当部２０３（セグメント管理部２０２）は、ＬＵＮ３１の追加が実施されたときと同様に、全ての事前割り当て順序を再設定し直すことで、ストライプ幅を保障する。
【０１２９】
一方、平準化ができている場合には、割当部２０３は、１回のソートで１度に全てのＬＵＮ３１からセグメントを事前割り当てする。
【０１３０】
事前割り当ては、全てのＬＵＮ３１についての、“空き容量＋事前割り当て済容量”の総計に占める“事前割り当て済容量”の総計の割合が、所定値（LIMIT；例えば70%程度）以上になった場合を終了条件とすることが望ましい。これは、あるセグメントに対して事前割り当てが完了してから実割り当てまでの時間を短縮するためであり、ＬＵＮ３１の削除を複数回実行することによって、実割り当て時にストライピングを維持したセグメント割り当てができなくなるリスクを軽減するためである。
【０１３１】
図１０は実施形態の一例としてのストレージシステム１における事前割り当て数を説明するための図である。
【０１３２】
以下、全てのＬＵＮ３１を対象とした、ＬＵＮ３１の空き容量の最大値と最小値との差をｄとする。すなわち、ｄは、空き容量が最も大きいＬＵＮ３１における当該空き容量の値から、空き容量が最も小さいＬＵＮ３１における当該空き容量の値を減算した値である。ＳＵ３０に備えられた複数のＬＵＮ３１において、平準化が進んでいる場合にはｄの値は小さくなる。従って、ｄを平準化の状態を表す指標として用いることができる。
【０１３３】
割当部２０３は、ｄを予め設定した閾値Ｆと比較することで平準化がされているかを判断する。すなわち、割当部２０３は、ｄ≦Ｆの場合には平準化がされた状態であると判断し、ｄ＞Ｆの場合には平準化がされていない状態であると判断する。
【０１３４】
図１０に示すグラフは、ｄと１回のソートで事前割り当てするセグメント数αとの関係を示す。
【０１３５】
上述の説明においては、１回のソートで事前割り当てするセグメント数αを固定値としているが、これに限定されるものではない。
【０１３６】
例えば、ＳＵ３０内のＬＵＮ３１が全て同じサイズである場合には、ｄが大きい間は事前割り当てするセグメント数αを少なくすることで、単位時間当りの特定のＬＵＮ３１の出現数を増やすことが望ましい。また、ＬＵＮ３１のサイズｄが小さくなるに連れて、すなわち平準化されるにつれてセグメント数αを可変にして動的に増やすことが望ましい。これにより、事前割り当てをより短時間で完了させることができる。
【０１３７】
１回のソートで事前割り当てするセグメント数αは、以下の式で求めた値を用いることが望ましい。
【０１３８】
α＝最大ＬＵＮ数−（最大ＬＵＮ数−ストライプ幅γ−β）× d ／ ＬＵＮサイズ
【０１３９】
（ｂ）実割り当て
割当部２０３は、例えば、管理端末３等からＶＤＩＳＫ作成要求を受信すると、ＬＵＮ３１のセグメントをＶＤＩＳＫに割り当てる実割り当てを行なう。
【０１４０】
実割り当てにおいては、割当部２０３は、ＶＤＩＳＫ作成要求に対する処理の延長で行なうセグメント割り当て時には、事前割り当てにおいて事前割り当てインデックス（予約順序）が設定されたセグメントを、その事前割り当てインデックスの順に従って、セグメントをＶＤＩＳＫに割り当てる。すなわち、実割り当てにおいて、割当部２０３は、事前割り当てインデックスを割り当て順序として用いてセグメントをＶＤＩＳＫに割り当てる。
【０１４１】
この実割り当て処理は、データベース２０１に対して１つのＳＱＲ文（１ＳＱＬ文）を発行することにより実現される。この１ＳＱＬ文は、例えば、データベース２０１のセグメント情報３０１に対して、ＶＤＩＳＫへの割り当てられる複数のセグメントのそれぞれについて、ＶＤＩＳＫ名およびＶＤＩＳＫ内インテックスの各を割り当て後の状態に一括で更新する。
【０１４２】
また、割り当てが行なわれたＬＵＮ３１の情報は、データベース２０１のセグメント情報３０１およびＬＵＮ情報３０２に反映される。
【０１４３】
割当部２０３は、例えば、ユーザ操作によりＶＤＩＳＫの作成指示を受け付けると、このＶＤＩＳＫのマップ情報をデータベース２０１から抽出した情報に基づいて作成し、エージェント２１０内の仮想化部２１１に対してＶＤＩＳＫのマップ情報を送信する。
【０１４４】
マップ情報とは、論理アドレスと物理アドレスの変換テーブルである。割当部２０３が、実割り当てを行なうことで、マップ情報が作成される。なお、マップ情報は既知であり、その詳細な説明は省略する。
【０１４５】
以下、仮想化ストレージ装置内の利用可能な全ストレージ領域をストレージプールという。
【０１４６】
割当部２０３は、ＳＵ３０内のＬＵＮ３１を２つのストレージプールＳＰＺ１，ＳＰＺ２とに分け、ストレージプールＳＰＺ１から抽出したセグメントと、ストレージプールＳＰＺ２から抽出したセグメントとをＶＤＩＳＫに割り当てる。
【０１４７】
例えば、ＳＵ３０における奇数番目のＬＵＮ３１をストレージプールＳＰＺ１とし、偶数番目のＬＵＮ３１をストレージプールＳＰＺ２とする。なお、以下、ストレージシステムを示す符号としては、複数のストレージプールのうち１つを特定する必要があるときには符号ＳＰＺ１，ＳＰＺ２を用いるが、任意のストレージプールを指すときには符号ＳＰＺを用いる。
【０１４８】
割当部２０３は、例えば、冗長度２のＶＤＩＳＫを作成する場合は、異なるＳＰＺに属するＬＵＮ３１からセグメントを割り当てる。これにより、ＳＵ３０が故障した場合でもデータにアクセスできる。
【０１４９】
図１１は実施形態の一例としてのストレージシステム１におけるセグメント割り当て方法を説明するための図である。
【０１５０】
図１１においては、ＶＤＩＳＫにおいて、ストレージプールＳＰＺ１から抽出したセグメントと、ストレージプールＳＰＺ２から抽出したセグメントとを用いてペアセグメントを構成している。
【０１５１】
また、ＶＤＩＳＫへの割り当て番号は、１変数で管理することができるように、ＳＰＺ番号が異なる、すなわち、属するストレージプールＳＰＺが異なるセグメントを交互に割り当てる。
【０１５２】
ペアセグメントのＶＤＩＳＫ内インデックスは、データベース２０１上で隣り合うように配置する。これにより、多変数（多次元）配列（変数はＳＰＺ番号、ＶＤＩＳＫ内インデックス）を１変数で実現することができる。
【０１５３】
また、割当部２０３は、以下の理由により、ストレージプールＳＰＺ毎に事前割り当てインデックスを割り当てる。
【０１５４】
事前割り当てをＶＤＩＳＫへの割り当て番号と同じ形で割り当てると、ＬＵＮ３１の削除でセグメントが削除された場合に、下記のようにセグメントの並びが崩れるため、最初から割り当てなおす必要があるからである。
【０１５５】
すなわち、単純に間をつめると、ＳＰＺの並び順が狂い、同一ＳＰＺが連続することになる。また、別のＬＵＮ３１のセグメントを割り当てると、ＬＵＮ３１の使用頻度が均等でなくなる。
【０１５６】
しかし、ＳＰＺ毎に割り当てを行なえば、ＬＵＮ３１の削除でセグメントが削除された場合でも、事前割り当てインデックスの並び順をそのまま使用してセグメント割り当てを行なうことができる。これにより、同一ストレージプールＳＰＺだけで割り当てているため、ストレージプールＳＰＺの並び順が狂うことはない。また、割り当て時に、整列された順に連番を付与すれば番号をつめておく必要はない。さらに、均等なＬＵＮ３１を削除するだけになるので、ＬＵＮ３１間の使用頻度に差はでない。
【０１５７】
図１２は実施形態の一例としてのストレージシステム１における割当部２０３による一括割り当て方法を説明するための図である。
【０１５８】
割当部２０３は、以下の一連の処理１〜３を例えばＳＱＬのようなデータベース言語を用いて実行することで、ＶＤＩＳＫへのセグメントの一括割り当てを行なう。
【０１５９】
処理１：副問い合わせで事前割り当ての行なわれたセグメントを同一ストレージプールＳＰＺの事前割り当てインデックスの小さい方から割り当て数分抽出する。
【０１６０】
なお、図１２に示す例においては、各ストレージプールＳＰＺからの割り当て数は５とする。また、図１２に示す例においては、ストレージプールＳＰＺ１から事前割り当てインデックス４，５，７，１０，１１が抽出され（矢印Ｐ１参照）、ストレージプールＳＰＺ２から事前割り当てインデックス４，５，６，７，８が抽出されている（矢印Ｐ２参照）。
【０１６１】
処理２：抽出したセグメント情報に、例えばＤＢＭS（Data Base Managing System）のウィンドウ関数（row_number()：行番号を順序付け ，over()：事前割り当てインデックスの小さいというルール）を用いて連番を再付与する。
【０１６２】
図１２に示す例においては、ストレージプールＳＰＺ１に関する事前割り当てインデックス４，５，７，１０，１１を、連番１，２，３，４，５に変更する（矢印Ｐ３参照）。同様に、ストレージプールＳＰＺ２に関する事前割り当てインデックス４，５，６，７，８を、連番１，２，３，４，５に変更する（矢印Ｐ４参照）。
【０１６３】
処理３：付与された連番を元にＶＤＩＳＫ内インデックス番号を付与する。
【０１６４】
なお、ＶＤＩＳＫ内インデックス=  ＳＰＺの割り当て開始位置（ＶＤＩＳＫ内インデックス）＋ （連番−1） * 冗長度  である。
【０１６５】
なお、連番はrow_numberにより1から採番される。そのため開始位置から始まるよう1を引いているのである。
【０１６６】
また、割当部２０３は、ストレージプールＳＰＺ１の複数（図１２に示す例では５つ）のセグメントを、ＶＤＩＳＫにおけるインデックス（ＶＤＩＳＫ内インデックス）に１つとばしに一度に割り当てる（図１２の符号Ｐ５参照）。同様に、割当部２０３は、ストレージプールＳＰＺ２の複数（図１２に示す例では５つ）のセグメントを、ＶＤＩＳＫにおける、ストレージプールＳＰＺ１のセグメントの割り当て開始位置に隣接するインデックスを開始位置として、インデックス（ＶＤＩＳＫ内インデックス）に１つとばしに一度に割り当てる（図１２の符号Ｐ６参照）。
【０１６７】
上述の如く、基本ノード４ａのＰＵ１００−２や拡張ノード４ｂのＰＵ１００−３等が制御プログラムのエージェント用モジュールを実行することで、ＰＵ１００ｂがエージェント２１０として機能し、仮想化部２１１としての機能が実現される。
【０１６８】
仮想化部２１１は、ＳＵ３０の各ＬＵＮ３１に対するＩ／Ｏアクセスを管理する。仮想化部２１１は、マネージャ２００のセグメント管理部２０２からマップ情報を受け付けると、メモリ１０６上に展開する。
【０１６９】
仮想化部２１１は、ホスト装置２からＶＤＩＳＫへのＩ／Ｏ要求を受信すると、マップ情報に従って論理アドレスから物理アドレスへの変換を行ない、ＳＵ３０内のＬＵＮ３１へＩ／Ｏを発行する。なお、この仮想化部２１１の処理は既知であり、その詳細な説明は省略する。
【０１７０】
（Ｂ）動作
上述の如く構成された実施形態の一例としてのストレージシステム１における割当部２０３による事前割り当て処理を、図１３に示すフローチャート（ステップＡ１〜Ａ１６）に従って説明する。
【０１７１】
ステップＡ１において、割当部２０３は、ＬＵＮ３１の追加が行なわれたかを確認する。確認の結果、ＬＵＮ３１の追加があった場合には（ステップＡ１のＹＥＳルート参照）、ステップＡ２において、事前割り当てインデックスを全てリセットする。
【０１７２】
ＬＵＮ３１の追加がされていない場合には（ステップＡ１のＮＯルート参照）、ステップＡ３に移行する。ステップＡ３において、割当部２０３は、“空き容量＋事前割り当て済容量”の総計に占める“事前割り当て済容量”の総計の割合が、所定値（LIMIT）未満であるかを確認する。すなわち、割当部２０３は、以下の条件を満たすか否かを確認する。
【０１７３】
（Σ事前割り当て済容量）/（Σ（空き容量＋事前割り当て済容量））*100＜LIMIT
“空き容量＋事前割り当て済容量”の総計に占める“事前割り当て済容量”の総計の割合が、所定値（LIMIT）以上である場合には（ステップＡ３のＮＯルート）、ステップＡ１３に移行し、割り当て処理を終了する。その後、ステップＡ１６に移行する。
【０１７４】
“空き容量＋事前割り当て済容量”の総計に占める“事前割り当て済容量”の総計の割合が、所定値（LIMIT）未満である場合には（ステップＡ３のＹＥＳルート参照）、ステップＡ４に移行する。
【０１７５】
ステップＡ４において、割当部２０３は、各ＬＵＮ３１について「空き容量−事前割り当て済容量」を算出し、その値が大きい順にＬＵＮ３１のソートを行なう。
【０１７６】
ステップＡ５において、割当部２０３は、全ＬＵＮ３１における空き容量の最大値と最小値との差ｄを閾値Ｆと比較する。すなわち、割当部２０３は、ｄ≦Ｆであるかを確認する（ステップＡ５）。これにより、割当部２０３は、ＳＵ３０の複数のＬＵＮ３１間において平準化がされているかを判断する。
【０１７７】
確認の結果、ｄ≦Ｆである場合（ステップＡ５のＹＥＳルート参照）、すなわち、平準化がされている場合には、ステップＡ１４に移行する。ステップＡ１４において、割当部２０３は、全てのＬＵＮ３１から１セグメントずつ１度に割り当てる。
【０１７８】
ステップＡ１５において、割当部２０３は、メモリ１０６上のＬＵＮ情報３０４に、事前割り当て最大インデックスを設定する。すなわち、ＬＵＮ情報３０４の更新を行なう。その後、処理はステップＡ１６に移行する。
【０１７９】
一方、ステップＡ５において、Ｆ＞ｄである場合（ステップＡ５のＮＯルート参照）、すなわち、平準化がされていない場合には、ステップＡ６に移行する。
【０１８０】
ステップＡ６において、割当部２０３は、変数Ｎおよび変数ｉにそれぞれ“0”を設定することで初期化する。
【０１８１】
ここで変数ｉはソート後のＬＵＮ３１のインデックスを示す。また、変数Ｎは、事前割り当てインデックスの設定数を示す。
【０１８２】
ステップＡ７では、ソートされた全ＬＵＮ３１に対して、ステップＡ１１までの制御を、Ｎがαより大きくなるまで（Ｎ＞αになるまで）繰り返し実施するループ処理を開始する。なお、αは、１回のソートで事前割り当てするセグメント数である。
【０１８３】
ステップＡ８では、事前割り当てインデックスの候補値（Ｎ）が、「事前割り当て最大インデックスａ＋ストライプ幅γ＋削除を許容するＬＵＮ数β」以上であるかを確認する。
【０１８４】
確認の結果、事前割り当てインデックスの候補値（Ｎ）が、「事前割り当て最大インデックスａ＋ストライプ幅γ＋削除を許容するＬＵＮ数β」以上である場合（ステップＡ８のＹＥＳルート参照）、ステップＡ９に移行する。
【０１８５】
ステップＡ９において、割当部２０３は、事前割り当てインデックスの候補値（Ｎ）を事前割り当てインデックスとして設定する（割り当てる）。
【０１８６】
ステップＡ１０において、変数Ｎをインクリメント（Ｎ＝Ｎ＋１）し、ステップＡ１１において、変数ｉをインクリメント（ｉ＝ｉ＋１）する。
【０１８７】
なお、ステップＡ１２では、ステップＡ７に対応するループ端処理が実施される。ここで、全ＬＵＮ３１についての処理が完了すると、制御がステップＡ１６に進み、処理をスリープした後、ステップＡ１に戻る。
【０１８８】
次に、実施形態の一例としてのストレージシステム１における割当部２０３の実割り当て処理を、図１４に示すフローチャート（ステップＢ１〜Ｂ４）に従って説明する。
【０１８９】
ステップＢ１において、割当部２０３は、事前割り当てが行なわれた複数のセグメントを１つのＳＱＬ（１ＳＱＬ）でＶＤＩＳＫに割り当て、データベース２０１の更新を行なう。すなわち、割当部２０３は、１ＳＱＬで、ＶＤＩＳＫ内に事前割り当てインデックスが設定されたインデックスを割り当て、データベース２０１のセグメント情報３０１を更新する。
【０１９０】
すなわち、割当部２０３は、セグメント情報３０１において、割り当てを行なったセグメントについてのＶＤＩＳＫ名，ＶＤＩＳＫ内のインデックスを割り当てたＶＤＩＳＫの情報を用いて更新し、また、事前割り当てインデックスを削除する。
【０１９１】
ステップＢ２において、割当部２０３は、ＶＤＩＳＫに割り当てたセグメントについての情報を収集する。すなわち、割当部２０３は、データベース２０１（セグメント情報３０１）を参照して、割り当てたセグメントについてのＬＵＮ名や割り当てたセグメントの数（セグメント数）を取得する。
【０１９２】
ステップＢ３において、割当部２０３は、データベース２０１から読み出したＬＵＮ情報３０２に基づき、ＬＵＮ情報３０４をメモリ１０６に格納する。また、割当部２０３は、割り当てたセグメントについて、メモリ１０６上のＬＵＮ情報３０４を更新する。すなわち、割当部２０３は、ＬＵＮ情報３０４において、空きセグメント数および事前割り当てセグメント数から、割り当てを行なったセグメント数をそれぞれ減算することで、ＬＵＮ情報３０４を更新する。
【０１９３】
ステップＢ４において、割当部２０３は、更新したメモリ上のＬＵＮ情報３０４をデータベース２０１に反映させる。すなわち、データベース２０１におけるＬＵＮ情報３０２を、更新したメモリ上のＬＵＮ情報３０４において更新した情報を用いて更新する。その後、処理を終了する。
【０１９４】
（Ｃ）効果
このように、実施形態の一例としてのストレージシステム１によれば、割当部２０３が、ＬＵＮ３１のセグメントに対して、事前割り当てを行ない、事前割り当てインデックスを予め設定する。
【０１９５】
割当部２０３は、ＶＤＩＳＫの作成要求を受け付けると、事前割り当てインデックスが設定されたセグメントを選択してＶＤＩＳＫに割り当てる。これにより、ＶＤＩＳＫの作成時において、ＶＤＩＳＫ割り当てるセグメントの選択を短時間で行なうことができ、ＶＤＩＳＫの作成に要する時間を短縮することができる。
【０１９６】
また、割当部２０３が、セグメントの事前割り当てを行なうに際して、ＬＵＮ３１が削除されることを想定し、ストライプ幅より削除されるＬＵＮ数（例えばβとする）分多くセグメントを割り当てる。すなわち、ＬＵＮ３１のセグメントに対して、「事前割り当て最大インデックスａ+ストライプ幅γ＋削除を許容するＬＵＮ数β」以上となる事前割り当てインデックスを設定する。ここで、事前割り当てインデックスにストライプ幅γを含めることで、ストライピングにかかるストレージポリシー違反を回避することができる。また、事前割り当てインデックスに削除を許容するＬＵＮ数βを含めることで、ＬＵＮ３１が削除された場合であっても、ストライピングにかかるストレージポリシーに違反することがない。
【０１９７】
また、割当部２０３は、複数のＬＵＮ３１が平準化されていない場合には、複数のＬＵＮ３１を空き容量の大きいものから順にソートを行なった後、１回のソートで１度に事前割り当てるセグメント数を少なくする。これにより同じＬＵＮ３１が選択される頻度をあげ、早く平準化させることができる。
【０１９８】
（Ｄ）その他
そして、開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成および各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【０１９９】
例えば、上述した実施形態においては、割当部２０３が、ＬＵＮ３１の追加が行なわれた場合に、事前割り当てを行なうが、これに限定されるものではない。割当部２０３は、事前割り当てによる事前割り当てインデックスの決め直しが実割り当ての妨げとならない範囲で、ＬＵＮ削除，ＶＤＩＳＫ作成およびＶＤＩＳＫ削除の少なくともいずれかが行なわれたタイミングで事前割り当てを行なってもよい。
【０２００】
また、上述した実施形態では、割当部２０３が、事前割り当てにおいて、空きセグメントの一部に対してシーケンシャルな番号を事前割り当てインデックスとして設定しているが、これに限定されるものではない。割当部２０３は、シーケンシャルな番号に代えて、単に、事前割り当てされたセグメントであることを示す識別子を設定してもよい。割当部２０３は、ＶＤＩＳＫの作成要求を受け付けると、このような事前割り当てされたセグメントであることを示す識別子が設定された複数のセグメントを一括でＶＤＩＳＫに割り当てることで、ＶＤＩＳＫの作成に要する時間を短縮することができる。
【０２０１】
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
【０２０２】
（Ｅ）付記
以上の実施形態に関し、さらに以下の付記を開示する。
【０２０３】
（付記１）
仮想記憶装置への単位記憶領域の割り当て要求がされる前に、複数の記憶領域にそれぞれ備えられる単位記憶領域のうち、未使用単位記憶領域の少なくとも一部に予約情報を設定する設定部と、
前記割り当て要求を受け付けると、前記予約情報が設定された前記単位記憶領域を仮想記憶装置に割り当てる割当部と
を備える、情報処理装置。
【０２０４】
（付記２）
前記予約情報が前記仮想記憶装置に割り当てられる順序を示し、
前記設定部が、前記複数の記憶領域が平準化されていない場合には、同一記憶領域に先に設定されている予約情報の最大値と、データ分散数と、記憶領域の削除許容数との合計以上の値を前記予約情報として設定する
ことを特徴とする、付記１記載の情報処理装置。
【０２０５】
（付記３）
前記予約情報が前記仮想記憶装置に割り当てられる順序を示し、
前記設定部が、前記複数の記憶領域が平準化されている場合には、前記複数の記憶領域から割り当てを行なう単位記憶領域を均等に選択する
ことを特徴とする、付記１または２記載の情報処理装置。
【０２０６】
（付記４）
前記設定部が、記憶領域の追加が行なわれた場合に前記予約情報の設定を行なう
ことを特徴とする、付記１〜３のいずれか１項に記載の情報処理装置。
【０２０７】
（付記５）
前記割当部が、前記複数の記憶領域を管理する記憶領域管理情報に、割り当てを行なう前記複数の記憶領域の情報を一括で登録する
ことを特徴とする、付記１〜４のいずれか１項に記載の情報処理装置。
【０２０８】
（付記６）
仮想記憶装置への単位記憶領域の割り当て要求がされる前に、複数の記憶領域にそれぞれ備えられる単位記憶領域のうち、未使用単位記憶領域の少なくとも一部に予約情報を設定し、
前記割り当て要求を受け付けると、前記予約情報が設定された前記単位記憶領域を仮想記憶装置に割り当てる
処理をコンピュータに実行させる、仮想化プログラム。
【０２０９】
（付記７）
前記予約情報が前記仮想記憶装置に割り当てられる順序を示し、
前記複数の記憶領域が平準化されていない場合には、同一記憶領域に先に設定されている予約情報の最大値と、データ分散数と、記憶領域の削除許容数との合計以上の値を前記予約情報として設定する
処理を前記コンピュータに実行させる、付記６記載の仮想化プログラム。
【０２１０】
（付記８）
前記予約情報が前記仮想記憶装置に割り当てられる順序を示し、
前記複数の記憶領域が平準化されている場合には、前記複数の記憶領域から割り当てを行なう単位記憶領域を均等に選択する
処理を前記コンピュータに実行させる、付記６または７記載の仮想化プログラム。
【０２１１】
（付記９）
記憶領域の追加が行なわれた場合に前記予約情報の設定を行なう
処理を前記コンピュータに実行させる、付記６〜８のいずれか１項に記載の仮想化プログラム。
【０２１２】
（付記１０）
前記複数の記憶領域を管理する記憶領域管理情報に、割り当てを行なう前記複数の記憶領域の情報を一括で登録する
処理を前記コンピュータに実行させる、付記６〜９のいずれか１項に記載の仮想化プログラム。
【０２１３】
（付記１１）
仮想記憶装置への単位記憶領域の割り当て要求がされる前に、複数の記憶領域にそれぞれ備えられる単位記憶領域のうち、未使用単位記憶領域の少なくとも一部に予約情報を設定する処理と、
前記割り当て要求を受け付けると、前記予約情報が設定された前記単位記憶領域を仮想記憶装置に割り当てる処理と
を備える、仮想化方法。
【０２１４】
（付記１２）
前記予約情報が前記仮想記憶装置に割り当てられる順序を示し、
前記複数の記憶領域が平準化されていない場合には、同一記憶領域に先に設定されている予約情報の最大値と、データ分散数と、記憶領域の削除許容数との合計以上の値を前記予約情報として設定する処理
を備える、付記１１記載の仮想化方法。
【０２１５】
（付記１３）
前記予約情報が前記仮想記憶装置に割り当てられる順序を示し、
前記複数の記憶領域が平準化されている場合には、前記複数の記憶領域から割り当てを行なう単位記憶領域を均等に選択する処理
を備える、付記１１または１２記載の仮想化方法。
【０２１６】
（付記１４）
記憶領域の追加が行なわれた場合に前記予約情報の設定を行なう処理
を備える、付記１１〜１３のいずれか１項に記載の仮想化方法。
【０２１７】
（付記１５）
前記複数の記憶領域を管理する記憶領域管理情報に、割り当てを行なう前記複数の記憶領域の情報を一括で登録する処理
を備える、付記１１〜１４のいずれか１項に記載の仮想化方法。
【符号の説明】
【０２１８】
１    ストレージシステム
２    ホスト装置
３    管理端末
３０    ＳＵ
３１    ＬＵＮ
１００，１００ａ，１００ｂ    ＰＵ（情報処理装置）
１０１，１０２    ＣＡ
１０３    ＤＡ
１０４    ＰＣＩｅインタフェース
１０５    ＣＰＵ（コンピュータ）
１０６    メモリ
１０７    フラッシュメモリ
１０８    ＩＯＣ
２００    マネージャ
２０１    データベース
２０２    セグメント管理部
２０３    割当部
２１０    エージェント
２１１    仮想化部
３０１    セグメント情報
３０２，３０４    ＬＵＮ情報
【図１】
2018169637.tif 000003
【図２】
2018169637.tif 000004
【図３】
2018169637.tif 000005
【図４】
2018169637.tif 000006
【図５】
2018169637.tif 000007
【図６】
2018169637.tif 000008
【図７】
2018169637.tif 000009
【図８】
2018169637.tif 000010
【図９】
2018169637.tif 000011
【図１０】
2018169637.tif 000012
【図１１】
2018169637.tif 000013
【図１２】
2018169637.tif 000014
【図１３】
2018169637.tif 000015
【図１４】
2018169637.tif 000016