(57)【要約】【課題】仮想ボリュームを使用するファイルシステムのフォーマットにおいて、割り当てられた領域に未使用部分が生じることと、割り当てられる実領域の数が増大することとの両方を抑える。【解決手段】仮想ボリュームのフォーマットであるか否かを判断し、仮想ボリュームのフォーマットであると判断された場合に、複数の実領域のうちの未割当ての実領域を管理情報から特定し、特定された未割当ての実領域を複数のサブ領域に分割し、仮想ボリュームにおいて規則的な間隔で並んだそれぞれの連続領域に、複数のサブ領域をそれぞれ割当てる。【選択図】図５
2008059353.tif 000002
【特許請求の範囲】
【請求項１】
上位装置に提供される仮想ボリュームに対する書込み要求の書込み先に複数の実領域のうちの未割当ての実領域を割り当てる仮想化システムであって、
前記仮想ボリュームに対する書込み要求を受信する要求受信部と、
前記仮想ボリュームに対する書込み要求を受信した場合に、前記仮想ボリュームのフォーマットであるか否かを判断する判断部と、
前記複数の実領域の各々について未割当てか否かを表す情報を含んだ管理情報を記憶する記憶部と、
前記仮想ボリュームのフォーマットであると判断された場合に、前記複数の実領域のうちの未割当ての実領域を前記管理情報から特定し、特定された未割当ての実領域を複数のサブ領域に分割し、前記複数のサブ領域をそれぞれ割当てる領域割当て制御部と
を備える仮想化システム。
【請求項２】
前記領域割当て制御部は、前記仮想ボリュームのフォーマットではないと判断された場合には、前記仮想ボリュームに対する書込み要求に応答して、該書込み要求の書込み先に、前記特定された未割当ての実領域それ自体を割り当てる、
請求項１記載の仮想化システム。
【請求項３】
前記実領域の記憶容量及び前記サブ領域の記憶容量の両方がそれぞれ固定値である、
請求項１記載の仮想化システム。
【請求項４】
前記領域割当て制御部は、前記仮想ボリュームの最初の連続領域における、前記フォーマットでのそれぞれの書き込み先に、連続したサブ領域を割り当てていき、次の連続領域の初めの書き込み先にサブ領域を割り当てたときに、該書き込み先と、前記最初の連続領域の初めの書き込み先との差分である連続領域間隔を求め、前記次の連続領域以降のそれぞれの連続領域に対し、前記最初の連続領域に割り当てたサブ領域数の連続したサブ領域を割り当てる、
請求項１記載の仮想化システム。
【請求項５】
前記領域割当て制御部は、前記次以降の連続領域のそれぞれに対する書込み要求を受信することに先駆けて、前記次の連続領域以降のそれぞれの連続領域に連続したサブ領域を割り当てる、
請求項４記載の仮想化システム。
【請求項６】
前記領域割当て制御部は、前記次の連続領域以降の連続領域に連続したサブ領域を割り当てた後、前記フォーマットであるにも関わらず、受信した書込み要求の書込み先が、連続領域と異なる場所である場合には、該書込み先には、未割当ての実領域を割り当てる、
請求項４記載の仮想化システム。
【請求項７】
受信した書込み要求の書込み先が連続領域と異なる場所である回数をカウントするカウント部を更に備え、
前記判断部は、前記回数が、所定の値を超えている場合に、前記フォーマットでないと判断する、
請求項６記載の仮想化システム。
【請求項８】
前記仮想ボリュームのフォーマット開始の通知とフォーマット終了の通知を前記上位装置或いはそれとは異なる外部の装置から受ける通知受信部を更に備え、
前記判断部は、前記フォーマット開始の通知を受信した場合、前記フォーマット終了の通知を受信するまで、前記フォーマットであると判断する、
請求項１記載の仮想化システム。
【請求項９】
或る連続領域の基点とその次の連続領域の基点との差分である連続領域間隔と、或る一つの連続領域に割り当てられたサブ領域の数とを所定の計算機に通知する通知部を更に備える、
請求項１記載の仮想化システム。
【請求項１０】
連続領域間隔とサブ領域数とを前記仮想化システムの外部から入力する入力部を更に備え、
前記領域割当て制御部は、前記入力された連続領域間隔で、前記入力されたサブ領域数の連続したサブ領域を割り当てる、
請求項１記載の仮想化システム。
【請求項１１】
前記仮想化システムは、ストレージシステムであり、
前記ストレージシステムは、複数の記憶装置と、コントローラとを備え、
前記複数の記憶装置には、前記複数の実領域で構成される一以上の論理ボリュームが用意され、
前記コントローラが、前記要求受信部と、前記判断部と、前記記憶部と、前記領域割当て制御部とを有し、該領域割当て制御部が、割り当てたサブ領域に、前記要求受信部が受信した書込み要求に従うデータを書込む、
請求項１記載の仮想化システム。
【請求項１２】
前記仮想化システムは、外部のストレージシステムに接続されたストレージシステムであり、
前記ストレージシステムは、複数の記憶装置と、コントローラとを備え、
前記外部のストレージシステムには、前記複数の実領域で構成される一以上の論理ボリュームが用意され、
前記コントローラが、前記要求受信部と、前記判断部と、前記記憶部と、前記領域割当て制御部とを有し、該領域割当て制御部が、割り当てたサブ領域に、前記要求受信部が受信した書込み要求に従うデータを書込む、
請求項１記載の仮想化システム。
【請求項１３】
前記仮想化システムは、前記上位装置とストレージシステムとの間に介在するスイッチ装置であり、
前記複数の実領域は、前記ストレージシステムに備えられる一以上の論理ボリュームの構成要素である、
請求項１記載の仮想化システム。
【請求項１４】
前記仮想化システムは、前記上位装置とストレージシステムとの間に介在するスイッチ装置と、前記スイッチ装置と通信可能に接続された管理装置とで構成されており、
前記スイッチ装置が、前記要求受信部と、前記仮想ボリュームのフォーマットであるか否かの判断を依頼する依頼部とを有し、
前記管理装置が、前記依頼に応答して前記判断を行う前記判断部と、前記記憶部と、前記領域割当て制御部とを有する、
請求項１記載の仮想化システム。
【請求項１５】
前記管理情報には、前記仮想ボリュームに対する実領域それ自体の割当てを管理するための第一の管理サブ情報と、前記仮想ボリュームに対するサブ領域の割当てを管理するための第二の管理サブ情報が含まれ、
前記領域割当て制御部は、前記仮想ボリュームに前記未割当ての実領域それ自体を割り当てた場合、前記第一の管理サブ情報を更新し、前記仮想ボリュームにサブ領域を割り当てた場合、前記第二の管理サブ情報を更新する、
請求項１記載の仮想化システム。
【請求項１６】
前記第二の管理サブ情報には、或る連続領域の基点とその次の連続領域の基点との差分である連続領域間隔と、或る一つの連続領域に割り当てられたサブ領域の数とが含まれる、
請求項１５記載の仮想化システム。
【請求項１７】
前記実領域の記憶容量及び前記サブ領域の記憶容量の両方がそれぞれ固定値であり、
前記管理情報には、前記仮想ボリュームに対する実領域それ自体の割当てを管理するための第一の管理サブ情報と、前記仮想ボリュームに対するサブ領域の割当てを管理するための第二の管理サブ情報が含まれ、
前記領域割当て制御部は、以下の（Ａ）乃至（Ｃ）の処理、
（Ａ）前記仮想ボリュームのフォーマットではないと判断された場合には、前記仮想ボリュームに対する書込み要求に応答して、該書込み要求の書込み先に、前記特定された未割当ての実領域それ自体を割り当て、
（Ｂ）前記仮想ボリュームのフォーマットであると判断された場合に、前記仮想ボリュームの最初の連続領域における、前記フォーマットでのそれぞれの書き込み先に、連続したサブ領域を割り当てていき、次の連続領域の初めの書き込み先にサブ領域を割り当てたときに、該書き込み先と、前記最初の連続領域の初めの書き込み先との差分である連続領域間隔を求め、前記次以降の連続領域のそれぞれに対する書込み要求を受信することに先駆けて、前記次の連続領域以降のそれぞれの連続領域に対し、前記最初の連続領域に割り当てたサブ領域数の連続したサブ領域を割り当て、
（Ｃ）前記仮想ボリュームに前記未割当ての実領域それ自体を割り当てた場合、前記第一の管理サブ情報を更新し、前記仮想ボリュームにサブ領域を割り当てた場合、前記第二の管理サブ情報を更新する、
を実行する、
請求項１記載の仮想化システム。
【請求項１８】
上位装置に提供される仮想ボリュームに対する書込み要求の書込み先に複数の実領域のうちの未割当ての実領域を割り当てる方法であって、
前記仮想ボリュームのフォーマットであるか否かを判断し、
前記仮想ボリュームのフォーマットであると判断された場合に、前記複数の実領域の各々について未割当てか否かを表す情報を含んだ管理情報から、前記複数の実領域のうちの未割当ての実領域を特定し、
特定された未割当ての実領域を複数のサブ領域に分割し、
前記仮想ボリュームにおいて規則的な間隔で並んだそれぞれの連続領域に、前記複数のサブ領域をそれぞれ割当てる、
領域割当て制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Thin Provisioning技術に関わり、具体的には、ホスト計算機が使用する仮想的な記憶装置に対して記憶領域を割り当てる技術に関する。
【背景技術】
【０００２】
ホスト計算機に対して仮想的な記憶装置（以下、仮想ボリューム）を提供する仮想化装置として、例えば、文献１（特開２００５−１１３１６号公報）に開示の装置が知られている。
【０００３】
この仮想化装置は、複数の論理的な記憶領域（実領域）を有するストレージシステムに接続されている。仮想化装置は、仮想ボリュームに対する書込み要求を受けた場合、仮想ボリュームに、ストレージシステムにおける実領域を割り当てる。この文献１の技術では、実領域のサイズを可変にすることができる。仮想化装置は、所定の処理、例えばフォーマット処理に基づく書込み要求を受けた場合には、実領域のサイズを縮小し、縮小された実領域を、仮想ボリュームに割り当てる。
【０００４】
【特許文献１】特開２００５−１１３１６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
仮想ボリュームを使用するファイルシステムのフォーマット（初期化）では、メタデータと呼ばれる小サイズの管理データが仮想ボリュームに書かれ、且つ、メタデータの書込み先は、規則的な間隔で遷移する。このため、実領域のサイズを縮小して仮想ボリュームに割り当てるようにすることで、サイズを縮小しないで実領域を割り当てることに比して、割り当てられた実領域内での未使用領域のサイズを小さくすることができる。
【０００６】
しかし、実領域を縮小して仮想ボリュームに割り当てていくと、サイズを縮小しないで実領域を仮想ボリュームに割り当てることに比して、仮想ボリュームに割り当てられる実領域の数は多くなる場合がある。
【０００７】
仮想ボリュームに割り当てられる実領域の数が多くなると、割り当てた実領域を管理するための情報（以下、管理情報）のサイズも増大し、それ故、割当て管理情報を記憶する記憶領域に多くの記憶容量が必要となる。
【０００８】
また、管理情報には、複数の実領域のうちのどれが未割り当てであるかも含まれる。仮想ボリュームに割り当てられる実領域の数が多くなると、仮想ボリュームに割り当てる未割当ての実領域を探すために管理情報へアクセスすることが多くなるので、その分、割当てに要する時間も長くなる。
【０００９】
これらの問題点を解消する方法として、実領域を縮小することなく仮想ボリュームに割り当てる方法が考えられる。しかし、そうすると、割り当てられた実領域内での未使用部分のサイズが大きくなってしまうという問題が発生してしまう。
【００１０】
従って、本発明の目的は、仮想ボリュームを使用するファイルシステムのフォーマットにおいて、割り当てられた領域に未使用部分が生じることと、割り当てられる実領域の数が増大することとの両方を抑えることにある。
【００１１】
本発明の他の目的は、後の説明から明らかになるであろう。
【課題を解決するための手段】
【００１２】
本発明に従う仮想化システムは、上位装置に提供される仮想ボリュームに対する書込み要求の書込み先に複数の実領域のうちの未割当ての実領域を割り当てる仮想化システムであり、前記仮想ボリュームに対する書込み要求を受信する要求受信部と、前記仮想ボリュームに対する書込み要求を受信した場合に、前記仮想ボリュームのフォーマットであるか否かを判断する判断部と、前記複数の実領域の各々について未割当てか否かを表す情報を含んだ管理情報を記憶する記憶部と、領域割当て制御部とを備える。領域割当て制御部は、前記仮想ボリュームのフォーマットであると判断された場合に、前記複数の実領域のうちの未割当ての実領域を前記管理情報から特定し、特定された未割当ての実領域を複数のサブ領域に分割し、前記仮想ボリュームにおいて規則的な間隔で並んだそれぞれの連続領域に、前記複数のサブ領域をそれぞれ割当てる。
【００１３】
第一の実施態様では、前記領域割当て制御部は、前記仮想ボリュームのフォーマットではないと判断された場合には、前記仮想ボリュームに対する書込み要求に応答して、該書込み要求の書込み先に、前記特定された未割当ての実領域それ自体を割り当てる。
【００１４】
第二の実施態様では、前記実領域の記憶容量及び前記サブ領域の記憶容量の両方がそれぞれ固定値である。
【００１５】
第三の実施態様では、前記領域割当て制御部は、前記仮想ボリュームの最初の連続領域における、前記フォーマットでのそれぞれの書き込み先に、連続したサブ領域を割り当てていき、次の連続領域の初めの書き込み先にサブ領域を割り当てたときに、該書き込み先と、前記最初の連続領域の初めの書き込み先との差分である連続領域間隔を求め、前記次の連続領域以降のそれぞれの連続領域に対し、前記最初の連続領域に割り当てたサブ領域数の連続したサブ領域を割り当てる。
【００１６】
第四の実施態様では、前記第三の実施態様において、前記領域割当て制御部は、前記次以降の連続領域のそれぞれに対する書込み要求を受信することに先駆けて、前記次の連続領域以降のそれぞれの連続領域に連続したサブ領域を割り当てる。
【００１７】
第五の実施態様では、前記第三の実施態様において、前記領域割当て制御部は、前記次の連続領域以降の連続領域に連続したサブ領域を割り当てた後、前記フォーマットであるにも関わらず、受信した書込み要求の書込み先が、連続領域と異なる場所である場合には、該書込み先には、未割当ての実領域を割り当てる。
【００１８】
第六の実施態様では、前記第五の実施態様において、仮想化システムが、受信した書込み要求の書込み先が連続領域と異なる場所である回数をカウントするカウント部を更に備える。前記判断部は、前記回数が、所定の値を超えている場合に、前記フォーマットでないと判断する。
【００１９】
第七の実施態様では、仮想化システムが、前記仮想ボリュームのフォーマット開始の通知とフォーマット終了の通知を前記上位装置或いはそれとは異なる外部の装置から受ける通知受信部を更に備える。前記判断部は、前記フォーマット開始の通知を受信した場合、前記フォーマット終了の通知を受信するまで、前記フォーマットであると判断する。
【００２０】
第八の実施態様では、仮想化システムが、或る連続領域の基点とその次の連続領域の基点との差分である連続領域間隔と、或る一つの連続領域に割り当てられたサブ領域の数とを所定の計算機に通知する通知部を更に備える。
【００２１】
第九の実施態様では、仮想化システムが、連続領域間隔とサブ領域数とを前記仮想化システムの外部から入力する入力部を更に備える。前記領域割当て制御部は、前記入力された連続領域間隔で、前記入力されたサブ領域数の連続したサブ領域を割り当てる。
【００２２】
第十の実施態様では、前記仮想化システムは、ストレージシステムである。前記ストレージシステムは、複数の記憶装置と、コントローラとを備える。前記複数の記憶装置には、前記複数の実領域で構成される一以上の論理ボリュームが用意される。前記コントローラが、前記要求受信部と、前記判断部と、前記記憶部と、前記領域割当て制御部とを有する。該領域割当て制御部が、割り当てたサブ領域に、前記要求受信部が受信した書込み要求に従うデータを書込む。
【００２３】
第十一の実施態様では、前記仮想化システムは、外部のストレージシステムに接続されたストレージシステムである。前記ストレージシステムは、複数の記憶装置と、コントローラとを備える。前記外部のストレージシステムには、前記複数の実領域で構成される一以上の論理ボリュームが用意される。前記コントローラが、前記要求受信部と、前記判断部と、前記記憶部と、前記領域割当て制御部とを有する。該領域割当て制御部が、割り当てたサブ領域に、前記要求受信部が受信した書込み要求に従うデータを書込む。
【００２４】
第十二の実施態様では、前記仮想化システムは、前記上位装置とストレージシステムとの間に介在するスイッチ装置である。前記複数の実領域は、前記ストレージシステムに備えられる一以上の論理ボリュームの構成要素である。
【００２５】
第十三の実施態様では、前記仮想化システムは、前記上位装置とストレージシステムとの間に介在するスイッチ装置と、前記スイッチ装置と通信可能に接続された管理装置とで構成されている。前記スイッチ装置が、前記要求受信部と、前記仮想ボリュームのフォーマットであるか否かの判断を依頼する依頼部とを有する。前記管理装置が、前記依頼に応答して前記判断を行う前記判断部と、前記記憶部と、前記領域割当て制御部とを有する。
【００２６】
第十四の実施態様では、前記管理情報には、前記仮想ボリュームに対する実領域それ自体の割当てを管理するための第一の管理サブ情報と、前記仮想ボリュームに対するサブ領域の割当てを管理するための第二の管理サブ情報が含まれる。前記領域割当て制御部は、前記仮想ボリュームに前記未割当ての実領域それ自体を割り当てた場合、前記第一の管理サブ情報を更新し、前記仮想ボリュームにサブ領域を割り当てた場合、前記第二の管理サブ情報を更新する。
【００２７】
第十五の実施態様では、前記第十四の実施態様において、前記第二の管理サブ情報には、或る連続領域の基点とその次の連続領域の基点との差分である連続領域間隔と、或る一つの連続領域に割り当てられたサブ領域の数とが含まれる。
【００２８】
上述した仮想化システムが備える記憶部は、例えば、メモリなどの記憶資源により構築することができる。また、他の各部は、ハードウェア、コンピュータプログラム又はそれらの組み合わせ（例えば一部をコンピュータプログラムにより実現し残りをハードウェアで実現すること）により構築することができる。コンピュータプログラムは、所定のプロセッサに読み込まれて実行される。また、コンピュータプログラムがプロセッサに読み込まれて行われる情報処理の際、適宜に、メモリ等のハードウェア資源上に存在する記憶域が使用されてもよい。また、コンピュータプログラムは、ＣＤ−ＲＯＭ等の記録媒体から計算機にインストールされてもよいし、通信ネットワークを介して計算機にダウンロードされてもよい。
【発明の効果】
【００２９】
本発明によれば、仮想ボリュームを使用するファイルシステムのフォーマットにおいて、割り当てられた領域に未使用部分が生じることと、割り当てられる実領域の数が増大することとの両方を抑えることができる。
【発明を実施するための最良の形態】
【００３０】
以下、図面を参照して、本発明の幾つかの実施例を説明する。尚、本発明は以下に説明する実施例に限定されるものではない。
【実施例１】
【００３１】
まず、この第一実施例の概要を述べる。なお、以下の説明では、便宜上、フォーマット処理に基づく書込み要求を、「フォーマット書込み要求」と称し、そうではない書込み要求を、「通常書込み要求」と称することにする。
【００３２】
仮想化装置に、ホストプロセッサとストレージシステムが接続される。ストレージシステムは、複数の論理的な記憶装置（以下、ＬＵ（論理ユニット））を備える。仮想化装置は、各ＬＵについて、ＬＵを構成する複数の記憶領域を管理する。それら複数の記憶領域の各々を、便宜上、「チャンク」と呼ぶ。このチャンクが、上記実領域に相当する。
【００３３】
仮想化装置は、仮想ボリュームに対して通常書込み要求を受けた場合には、仮想ボリュームに対する記憶領域割当てをチャンク単位で行う。具体的には、仮想化装置は、その通常書込み要求に従う、仮想ボリュームにおける書込み先に、ストレージシステムにおける複数のチャンクのうちの未割当てのチャンクを割り当てる。そして、仮想化装置は、該割り当てたチャンクに該通常書込み要求に従うデータを書き込むための書込み要求を、ストレージシステムに送信し、それにより、該割り当てたチャンクに、該通常書込み要求に従うデータを書き込む。
【００３４】
一方、仮想化装置は、仮想ボリュームに対してフォーマット書込み要求を受けた場合には、仮想ボリュームに対する記憶領域割当てを、チャンク単位で行うのではなく、ページ単位で行う。本実施例で言う「ページ」とは、チャンクを分割することにより生成された複数のサブ領域の各々を意味する。すなわち、仮想化装置は、仮想ボリュームに対してフォーマット書込み要求を受けた場合には、未割当てのチャンクを複数のページに分割し、分割することにより得られた各ページを、仮想ボリュームに割り当てる。仮想化装置は、管理情報を記憶する記憶部を有し、該管理情報には、複数のチャンクのどれが未割り当てであるかなど、チャンク単位で情報要素が含まれる。しかし、複数のページについては、複数のページのどれが未割り当てであるかなど、ページ単位で情報要素は含まれない。
【００３５】
この第一実施例では、仮想ボリュームを使用するファイルシステムのフォーマットでは、チャンクよりも小サイズの記憶領域であるページが割り当てられるので、割り当てられた領域に未使用部分が生じることを抑えることができる。また、管理情報には、チャンク単位で情報要素が含まれるが、ページ単位で情報要素は含まれないので、ページを割り当てる都度に管理情報にアクセスする必要は無いので、その分、割当てに要する時間を抑えることができる。
【００３６】
以下、この第一実施例について詳述する。
【００３７】
図１は、本発明の第一実施例に係る仮想化装置が適用された計算機システムの構成例を示す。
【００３８】
この計算機システムは、仮想化装置１１、少なくとも１台のホストプロセッサ１２、少なくとも１台のストレージシステム１３、コンソール１４及び管理サーバ１６で構成されている。仮想化装置１１に、少なくとも１台のホストプロセッサ１２と、少なくとも１台のストレージシステム１３とが接続される。また、通信ネットワーク（例えばＬＡＮ（Local Area Network））１５に、仮想化装置１１のＮＩＣ（Network Interface Card）１５１と、コンソール１４のＮＩＣ１５１と、管理サーバ１６のＮＩＣ１５１とが接続される。
【００３９】
ホストプロセッサ１２は、ストレージシステム１３に格納されたデータを使用する計算機である。ホストプロセッサ１２は、Ｉ／Ｏ要求（書込み要求／読出し要求）を、仮想化装置１２に発行する。ホストプロセッサ１２は、仮想化装置１１が提供する記憶領域を仮想化装置１１に接続されていない他の計算機に提供する機能を有するファイルサーバでも良い。
【００４０】
ストレージシステム１３は、複数の記憶装置を備えたシステムである。複数の記憶装置のうちの二以上の記憶装置で、ＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）の規則に従うグループ（ＲＡＩＤグループ）が構成されている。ＲＡＩＤグループにより提供される記憶資源により、一又は複数の論理的な記憶装置（以下、論理ユニット（ＬＵ））１３１が形成される。ＬＵ１３１は、複数のチャンク１３２から構成される。本実施形態では、各チャンク１３２のサイズは一様且つ固定であるが、複数のチャンク１３２のサイズはそれぞれ異なっても良いし、可変であっても良い。各チャンク１３２は、連続したアドレスをもつ領域である。
【００４１】
仮想化装置１１は、ホストプロセッサ１２とストレージシステム１３との間に介在するスイッチである（後述するように、仮想化装置１１の機能がストレージシステム１３に搭載されることにより、仮想化装置が、ストレージシステムであってもよい）。仮想化装置１１は、一又は複数の仮想ボリューム１００を管理する。仮想化装置１１は、仮想ボリューム１００に対する書込み要求に応じて、仮想ボリューム１００に、一以上のストレージシステム１３における複数のチャンク１３２のうち、未割り当てのチャンク１３２、或いは、該チャンク１３２を分割することにより生成したページを割り当てる。そして、仮想化装置１１は、割り当てたチャンク１３２或いはページ内のアドレスを指定した書込み要求を、そのチャンク１３２或いはページを有するストレージシステム１３に送信し、それにより、割り当てたチャンク１３２或いはページにデータを書き込むことができる。このように、仮想化装置１１は、仮想ボリューム１００に対する書込み要求に応じてチャンク１３２或いはページを割り当てることができる。
【００４２】
コンソール１４は、仮想ボリューム１００を作成（設定）するためにシステム管理者によって使用される計算機であり、表示装置と入力装置を備える。
【００４３】
管理サーバ１６は、仮想化装置１１を管理するための計算機である。管理サーバ１６は、仮想化装置１１から情報を受信し、受信した情報をコンソール１４に送信することができる。
【００４４】
図２は、仮想化装置１１の内部構成例を示す。
【００４５】
仮想化装置１１は、入力ポート２４０と、出力ポート２５０と、スイッチ２３０と、プロセッサパッケージ２１０と、共有メモリ２２０とを備える。
【００４６】
入力ポート２４０は、仮想化装置１１がホストプロセッサ１２と通信するための通信線と接続されるポートである。出力ポート２５０は、仮想化装置１１がストレージシステム１３と通信するための通信線と接続されるポートである。尚、入力ポート２４０及び出力ポート２５０を構成する装置は、同一であっても良い。この場合、どのポートを入力ポートあるいは出力ポートとして使用するかは、使用者が選択してよい。仮想化装置１１は、入力ポート２４０及び出力ポート２５０を、それぞれ、一又は複数個備えることができる。入力ポート２４０及び出力ポート２５０のうちの少なくとも一方が、プロセッサパッケージ２１０にあってもよい。
【００４７】
スイッチ２３０は、例えば、ＬＳＩ（Large Scale Integration）で構成することができる。スイッチ２３０は、入力ポート２４０がホストプロセッサ１２から受信したＩ／Ｏ要求を、Ｉ／Ｏ要求に従うアクセス先のストレージシステム１３と仮想化装置１１との間の通信に使用される出力ポート２５０へ転送する。また、スイッチ２３０は、出力ポート２５０がストレージシステム１３から受信した応答情報やデータを、データ等を受信すべきホストプロセッサ１２と仮想化装置１１の間の通信に使用される入力ポート２４０へ転送する。
【００４８】
プロセッサパッケージ２１０は、プロセッサ２１１及びメモリ（以下、ローカルメモリ（ＬＭ））２１５を備える回路基板とすることができる。ＬＭ２１５には、プロセッサ２１１で実行される制御プログラム２１２が記憶される。また、ＬＭ２１５には、共有メモリ２２０に記憶されている各テーブルのエントリをキャッシュすることができる記憶領域（以下、エントリキャッシュ領域）２１３を設けることができる。プロセッサ２１１は、制御プログラム２１２を実行することにより、エントリキャッシュ領域２１３にキャッシュされている情報を参照して、ホストプロセッサ１２からのＩ／Ｏ要求のアクセス先アドレスを変換する処理を行うことができる。
【００４９】
共有メモリ２２０は、プロセッサパッケージ２１０が複数個存在する場合にそれら複数のプロセッサパッケージ２１０がアクセスすることができるメモリである。本実施例では、２２０を便宜上「共有メモリ」と称しているが、プロセッサパッケージ２１０が一つである等の場合には、共有としてのメモリでなくてもよい。共有メモリ２２０は、仮想ボリューム管理テーブル２２１、チャンク管理テーブル２２２及びアクセス変換テーブル２２４を記憶する。
【００５０】
アクセス変換テーブル２２４は、仮想ボリューム１００毎に存在するが、それに限らず、他種の単位、例えば、入力ポート２４０毎にあってもよい。アクセス変換テーブル２２４は、非周期割当てアクセス変換リスト３３１０と、周期割当てアクセス変換リスト３３１１と、このテーブル２２４に対応する仮想ボリューム１００の仮想ボリューム識別子を登録するエントリ３３２とを保持する。
【００５１】
非周期割当てアクセス変換リスト３３１０には、図３Ａに例示するように、１又は複数のエントリ３３１があり、個々のエントリ３３１には、仮想ボリューム１００内のアドレス範囲と、そのアドレス範囲に対応するチャンク１３２が属するＬＵ１３１の識別子（ＬＵアドレス）と、そのチャンク１３２のそのＬＵ１３１内における位置を示すＬＵ内アドレスとが登録される。エントリ３３１は、例えば、仮想ボリューム１００に割り当てられるチャンク１３２毎に存在してもよい。以下、仮想ボリュームにおけるアドレスを「仮想アドレス」と言うことがある。また、ＬＵアドレスは、例えば、ＷＷＮ（World Wide Name）ポートＩＤ及びＬＵＮ（論理ユニット番号）の組み合わせで表すことができる。
【００５２】
また、この第一実施例では、「周期割当て」という言葉と、「非周期割当て」という２種類の割当てがある。「周期割当て」とは、フォーマット書込み要求に従う書き込みに応じた割当てのことであり、具体的には、データの書込み先が規則的な間隔で遷移するが故に、仮想ボリュームに対するページの割当て先も規則的な間隔で遷移する割当てのことである。この第一実施例において、割当てについての「周期」とは、フォーマット処理においてページが連続して割り当てられた仮想アドレス範囲（以下、ページ連続割当て領域）の先頭仮想アドレスから次のページ連続割当て領域における先頭仮想アドレスとの間隔を意味し、時間を意味するわけではない。しかし、この第一実施例において、フォーマット書込み要求に従う書き込みに応じた領域割当てを、周期的に行うことが可能であるので、便宜上、「周期割当て」という言葉を使用している。それに対し、「非周期割当て」とは、通常書込み要求に従う書き込みに応じた領域割当てのことである。通常書込み要求は、通常、周期的に発生するＩ／Ｏ要求ではないし、書き込み先仮想アドレスも、規則的に遷移するわけではないので、この第一実施例では、便宜上、「非周期割当て」という言葉を使用している。
【００５３】
周期割当てアクセス変換リスト３３１１には、図３Ｂに例示するように、１又は複数のエントリ３３３があり、個々のエントリ３３３には、仮想ボリューム１００内のアドレス範囲と、ページの連続割当て数（以下、単に「ページ数」と言う場合がある）と、周期（ページ連続割当て領域の先頭仮想アドレスと次のページ連続割当て領域の先頭アドレスとの間隔）と、そのアドレス範囲に対応するチャンク１３２が属するＬＵ１３１の識別子（ＬＵアドレス）と、そのチャンク１３２のそのＬＵ１３１内における位置を示すＬＵ内アドレスとが登録される。エントリ３３３は、例えば、仮想ボリューム１００に割り当てられるチャンク１３２に存在しても良い。なお、周期割当てで割り当てられるのは、チャンク１３２ではなくページなので、ここで言う「割り当てられるチャンク」というのは、実際には、割り当てられたページの元となっているチャンクのことである。
【００５４】
チャンク管理テーブル２２２は、ＬＵ１３１ごとに存在するが、他種の単位で用意されて良い。チャンク管理テーブル２２２は、ＬＵ１３１に含まれるチャンク１３２を管理するために使用されるテーブルである。各チャンク管理テーブル２２２には、ストレージシステムＩＤが登録されるエントリ３２１と、ＬＵアドレスが登録されるエントリ３２２と、チャンクリスト３２４とがある。エントリ３２１のストレージシステムＩＤは、このテーブル２２２が対応するＬＵ１３１を有するストレージシステム１３を識別するＩＤである。チャンクリスト３２４には、このテーブル２２２が対応するＬＵ１３１に含まれる各チャンク１３２毎にエントリ３２５がある。各エントリ３２５には、そのエントリ３２５が対応するチャンクのＩＤと、そのチャンクが割り当てられている仮想ボリュームのＩＤとが登録される。チャンクが未割当ての場合には、仮想ボリュームＩＤとして、未割り当てを示す値（例えば「null」）が登録される。このように、チャンク管理テーブル２２２は、ＬＵ１３１に属する各チャンク１３２が仮想ボリューム１００に割り当てられているか否かを示す情報を保持しており、仮想化装置１１が、仮想化ボリューム１００に新たに割当てるチャンク１３２を選択する際に利用される。
【００５５】
仮想ボリューム管理テーブル２２１は、仮想ボリューム１００ごとに存在するが、他種の単位で存在してよい。各仮想ボリューム管理テーブル２２１には、識別子エントリ３１１、非周期割当てチャンクリスト３１５、及び周期割当てチャンクリスト３３１２が格納される。
【００５６】
識別子エントリ３１１には、仮想ボリューム管理テーブル２２１に対応する仮想ボリューム１００の仮想ボリューム識別子が登録される。
【００５７】
非周期割当てチャンクリスト３１５は、仮想ボリューム管理テーブル２２１に対応する仮想ボリューム１００にどのチャンク１３２が割当てられているかを示すリストである。非周期割当てチャンクリスト３１５内では、図３Ｃに例示するように、仮想ボリューム１００上の仮想アドレス順に、対応するチャンク１３２のエントリ３１７が並び、各エントリ３１７には、仮想アドレスに対応するチャンク１３２のチャンクＩＤが格納されている。
【００５８】
周期割当てチャンクリスト３３１２には、図３Ｄに例示するように、一又は複数のエントリ３１８の各エントリ３１８に、仮想ボリューム管理テーブル２２１に対応する仮想ボリューム１００にどのアドレス範囲にどのチャンクからのページが割り当てられているかが登録される。各エントリ３１８には、更に、前述したページ数及び周期が登録される。このページ数としては、後述するように、あるチャンクを周期割り当てする際に、周期を決定する前に割り当てているページ数も表す。すなわち周期割当てチャンクリスト３３１２には、周期割り当てしようとしているチャンクが存在する場合に、そのチャンクをどのように割り当てるか決定するための情報も含む。
【００５９】
このように、仮想ボリューム管理テーブル２２１は、仮想ボリューム１００の記憶領域がどのチャンク１３２と対応付けられているかを示す情報を保持しており、仮想化装置１１が、周期割り当てする際、どのように割り当てるかを決定するために用いる。
【００６０】
図４は、ストレージシステム１３の構成例を示す。
【００６１】
ストレージシステム１３は、複数の記憶装置１２４０と、仮想化装置１１から記憶装置１２４０へのアクセスを制御するコントローラ１２１０とを備える。
【００６２】
記憶装置１２４０は、物理的な記憶装置であり、例えば、ハードディスク或いはフラッシュメモリである。複数の記憶装置１２４０には、異なる種類の記憶装置が混在しても良い。複数の記憶装置１２４０のうちの二以上の記憶装置１２４０により、ＲＡＩＤグループ（パリティグループ或いはアレイグループと呼ばれることもある）が構成される。ＲＡＩＤグループは、ＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）の規則に基づくグループであり、或るＲＡＩＤレベルを有する。ＲＡＩＤグループにより提供される記憶資源から、一又は複数のＬＵ１３１が提供される。ストレージシステム１３に存在する複数のＬＵ１３１のうちの少なくとも一つが、所定サイズのチャンク１３２により構成される。各チャンク１３２は、仮想ボリューム１００に対する書込み要求に応じて動的に割り当てられる領域である。複数のチャンク１３２により構成される記憶領域をプール１２６０と呼ぶことにする。
【００６３】
コントローラ１２１０は、上位Ｉ／Ｆ１２０７と、下位Ｉ／Ｆ１２０６と、ＣＰＵ１２０と、メモリ１２０４と、転送回路１２０８とを備える。上位Ｉ／Ｆ１２０７は、一又は複数の通信ポートを有し、上位装置（本実施例では仮想化装置１１）との通信インタフェースである。ＬＵアドレスは、通信ポートのＩＤと、上位Ｉ／Ｆ１２０７のＷＷＮと、その通信ポートに割り当てられたＬＵＮとで構成することができる。下位Ｉ／Ｆ１２０６は、一又は複数の通信ポートを有し、記憶装置１２４０との通信インタフェースである。転送回路１２０８は、上位Ｉ／Ｆ１２０７、下位Ｉ／Ｆ１２０６、メモリ１２０４及びＣＰＵ１２０３間の通信を切り替えるＬＳＩである。メモリ１２０４には、ＣＰＵ１２０３にて実行される種々のコンピュータプログラムが記憶される。ＣＰＵ１２０３は、メモリ１２０４内のコンピュータプログラムを実行することにより、仮想化装置１１から記憶装置１２４０へのアクセスを制御する。
【００６４】
以上が、第一実施例に係る計算機システムや、その計算機システムの構成要素についての説明であるが、種々の構成は、前述した説明に限定しなくてもよい。例えば、コントローラ１２１０が、上記の構成に代えて、上位装置との通信を制御する複数の第一の制御部（例えば制御回路基板）と、記憶装置１２４０との通信を制御する複数の第二の制御部（例えば制御回路基板）と、上位装置と記憶装置１２４０との間で授受されるデータを記憶することができるキャッシュメモリと、ストレージシステム１３を制御するためのデータを記憶することができる制御メモリと、各第一の制御部、各第二の制御部、キャッシュメモリ及び制御メモリを接続する接続部（例えば、クロスバスイッチなどのスイッチ）とを備えることができる。この場合、第一の制御部と第二の制御部の一方が、又は双方が協働して、後述するコントローラ１２１０としての処理を行うことができる。制御メモリは無くても良く、その場合、キャッシュメモリに、制御メモリが記憶する情報を記憶する領域が設けられても良い。
【００６５】
さて、この第一実施例では、周期割当ての処理が特徴の一つである。以下、周期割当てについて説明する。なお、以下、コンピュータプログラムが主語になる場合は、実際にはそのコンピュータプログラムを実行するプロセッサ（ＣＰＵ）によって処理が行われるものとする。
【００６６】
図５は、周期割当ての説明図である。
【００６７】
例えば、ホストプロセッサ１２或いは管理コンソール１４から、仮想ボリューム１００に対するフォーマット命令を受けた場合に、制御プログラム２１２によって、仮想ボリューム１００を使用するファイルシステムの初期化、つまりフォーマットが行われる。具体的には、仮想ボリューム１００を使用するファイルシステム上のファイル及びディレクトリを全て消去し、新規にファイル及びディレクトリを作成可能な状態となるように、ホストプロセッサ１２は、仮想ボリューム１００に、メタデータを書き込むためのＩ／Ｏ要求（つまりフォーマット書込み要求）を仮想化装置１１に対して発行する。
【００６８】
制御プログラム２１２は、そのフォーマット書込み要求に従って、仮想ボリューム１００に、一定の仮想アドレス間隔で、メタデータを書いていく。具体的には、例えば、制御プログラム２１２は、仮想ボリューム１００の先頭仮想アドレスから、第一のメタデータを書いていき、該第一のメタデータを書き終えた後、先頭仮想アドレスから所定の仮想アドレスをオフセットした仮想アドレスから、第二のメタデータを書く。このようにメタデータを書いていく際に、制御プログラム２１２は、未割り当てのチャンク１３２から切り出したページ１２６１を割り当てていく。
【００６９】
より具体的には、例えば、ステップ（１）に示すように、制御プログラム２１２は、仮想ボリューム１００に第一のメタデータを書く場合、未割当てのチャンク１３２を複数のページ１２６１に分割し、分割された複数のページ１２６１のうちの１番目のページ１２６１（その未割当てのチャンク１３２における先頭のページ）を、仮想ボリューム１００の先頭仮想アドレスに割り当てる。
【００７０】
次に、ステップ（２）に示すように、制御プログラム２１２は、フォーマット書込み要求に従って、第一のページ連続割当て領域（連続した仮想アドレス範囲）に第一のメタデータを書くことになる。そのため、制御プログラム２１２は、その第一のページ連続割当て領域に、２番目のページ１２６１、３番目のページ１２６１、…のように、次々に、ページを割り当てていく。これにより、第一のページ連続割当て領域に、複数のページが割り当てられる。なお、このステップ（２）において、制御プログラム２１２は、割り当てたページの数をカウントしていく。
【００７１】
第一のメタデータの書込みが完了し、第二のメタデータを仮想ボリューム１００に書く場合、ステップ（３）に示すように、フォーマット書込み要求に従う書込み先の仮想アドレスが、第一のページ連続割当て領域から離れた別の仮想アドレスになる。つまり、第一のページ連続割当て領域から離れた別の仮想アドレスから、第二のページ連続割当て領域が始まることになる。この場合、制御プログラム２１２は、その別の仮想アドレスに対して、第一のページ連続割当て領域の最後に割り当てたページの次のページを割り当てる。
【００７２】
この時点で、ページ数（ｃ）と、周期（ｄ）とがわかる。具体的には、例えば、ページ数（ｃ）は、第一のページ連続割当て領域に割り当てられたページのカウント値とすることができる。また、制御プログラム２１２は、第一のページ連続割当て領域の先頭仮想アドレスと第二のページ連続割当て領域の先頭仮想アドレスとの差分（例えば、その差分は、ＬＢＡで表される）を算出することにより、周期（ｄ）を求めることができる。
【００７３】
以後、制御プログラム２１２は、第二のページ連続割当て領域の先頭仮想アドレスより後については、求められたページ数（ｃ）及び周期（ｄ）を基に、次々にページ１２６１を割り当てていく。具体的には、制御プログラム２１２は、第二のページ連続割当て領域に、（ページ数（ｃ）−１）のページを割当て、以後、周期（ｄ）の間隔で、ページ数（ｃ）のページ１２６１を連続して割り当てていく。つまり、第二のページ連続割当て領域の先頭仮想アドレスより後の仮想アドレスに対して、実際にフォーマット書込み要求が発生していなくても、ページ１２６１を割り当てていくことができる。このような割当てによれば、チャンク１３２のどのページ１２６１からが未割り当てかを、共有メモリ２２０内のいずれのテーブルでも管理しなくて済むので、テーブルのサイズを抑えることができるというメリットがある。もし、フォーマット書込み要求に応じてページを割り当てていくならば、チャンク１３２のどのページ１２６１からが未割り当てかを管理する必要が生じてしまう。それ故、上記のように、求められたページ数（ｃ）及び周期（ｄ）を基に次々にページ１２６１を割り当てていくのは、テーブルサイズを抑える上でメリットである。
【００７４】
なお、この周期割り当てにおいて、もし、一つのチャンク１３２に未割当てのページ１２６１が無くなった場合には、制御プログラム２１２が、別の未割当てのチャンク１３２を探し、その探し出されたチャンク１３２から複数のページ１２６１を生成し、それら複数のページ１２６１を順次に割り当てていくことができる。この場合、周期割当てアクセス変換リスト３３１１の一つのエントリ３３３（図３Ｂ参照）や、周期割当てチャンクリスト３３１２の一つのエントリ３１８（図３Ｄ参照）には、制御プログラム２１２によって、複数のチャンク１３２に関する情報（ＬＵ内アドレス又はチャンクＩＤ）が登録されても良いし、あくまでも一つのエントリでは一つのチャンクを管理するようにするために、周期割当てで複数のチャンクを使用するようになった場合には、複数のエントリを用意しても良い。
【００７５】
以上が、周期割当ての説明である。なお、この図５において、（ａ）は、フォーマット処理の範囲の先頭の仮想アドレスを表し、（ｂ）は、フォーマット処理の範囲の末尾の仮想アドレスを表す。この例では、仮想ボリューム１００全体がフォーマット処理の対象なので、（ａ）は、仮想ボリューム１００の先頭の仮想アドレスであり、（ｂ）は、仮想ボリューム１００の末尾の仮想アドレスである。これに限らず、フォーマット処理の範囲は、仮想ボリューム１００の一部であっても良い。例えば、一つの仮想ボリューム１００を、第一と第二のファイルシステムが使用する場合には、第一のファイルシステムが使用する範囲の先頭仮想アドレス及び末尾仮想アドレスが、上記（ａ）、（ｂ）であってもよい。つまり、第一のファイルシステムが使用する範囲についてのみ、周期割当てが発生しても良い。同様に、フォーマット処理の中で周期割り当てを行う部分は、上記（ａ）を先頭にせず、中間の位置にあってもよい。これは、本実施例での周期割り当てが、ある書き込みが発生した箇所（例えば、後述のS６０７で割り当てる位置）を基準にして、そこから連続して割り当てるページ数と周期を決定（例えば、後述のS６０８）しており、この書き込みは仮想ボリューム１００の中の任意の位置であっても周期割り当てが可能であることに起因する。
【００７６】
以下、この第一実施例で行われる処理の流れを説明する。
【００７７】
図６は、Ｉ／Ｏ要求を受信した制御プログラム２１２によって行われる処理の流れの一例を示す。
【００７８】
制御プログラム２１２は、Ｉ／Ｏ要求を受信した場合、そのＩ／Ｏ要求が、書込み要求か読出し要求かを判断する（Ｓ１００）。読出し要求と判断した場合（Ｓ１００でＮＯ）、制御プログラム２１２は、後述するＳ７００を実行する。
【００７９】
一方、書込み要求と判断した場合（Ｓ１００でＹＥＳ）、制御プログラム２１２は、周期割当てアクセス変換リスト３３１１を参照して、受信した書込み要求に従う仮想アドレスに、領域が割当て済みであるか否かを判断する（Ｓ２００）。制御プログラム２１２は、割当て済みであれば（Ｓ３００でＹＥＳ）、Ｓ７００を実行し、割当て済みでなければ（Ｓ３００でＮＯ）、Ｓ４００を実行する。このＳ２００での処理については、後に図７を参照して詳述する。
【００８０】
Ｓ４００では、制御プログラム２１２は、非周期割当てアクセス変換リスト３３１０を参照して、上記受信した書込み要求に従う仮想アドレスに、領域が割当て済みであるか否かを判断する。制御プログラム２１２は、割当て済みであれば（Ｓ５００でＹＥＳ）、Ｓ７００を実行し、割当て済みでなければ（Ｓ５００でＮＯ）、Ｓ６００を実行する。
【００８１】
Ｓ６００では、制御プログラム２１２は、領域割り当て処理を行う。このＳ６００での処理については、後に図８を参照して詳述する。
【００８２】
Ｓ７００では、制御プログラム２１２は、アドレス変換、及び、Ｉ／Ｏ処理を行う。
【００８３】
なお、ここで言うアドレス変換とは、受信したＩ／Ｏ要求のアクセス先アドレスを、仮想アドレスから、ストレージシステム１３におけるアドレス（例えば、ＬＵアドレス及びＬＵ内アドレスのセット）に変換することを言う。具体的には、例えば、Ｓ３００でＹＥＳになった後のＳ７００では、制御プログラム２１２は、Ｉ／Ｏ要求で指定されている仮想アドレスをアドレス範囲として有するエントリ３３３（周期割当てアクセス変換リスト３３１１のエントリ３３３）から、ページ数、周期、ＬＵアドレス及びＬＵ内アドレスを特定し、特定されたページ数、周期、ＬＵアドレス及びＬＵ内アドレスを用いた計算（例えば後述するＳ２０３での計算）を行うことで、上記指定されている仮想アドレスを、該仮想アドレスを含んだ領域（仮想ボリューム１００における領域）に割り当てられた実アドレス（割り当てられたページに対応するアドレス）に変換することができる。
【００８４】
また、Ｉ／Ｏ処理とは、アドレス変換後のアドレスを指定したＩ／Ｏ要求を、ストレージシステム１３に送信する処理である。
【００８５】
図７は、図６のＳ２００での処理の詳細を示す。
【００８６】
制御プログラム２１２は、対象ＬＢＡを含むエントリを、周期割当てアクセス変換リスト３３１１から検索する（Ｓ２０１）。対象ＬＢＡとは、受信した書込み要求で指定されているＬＢＡであり、仮想アドレスである。
【００８７】
制御プログラム２１２は、対象ＬＢＡを含む、仮想ボリューム内のアドレス範囲を有したエントリが、周期割当てアクセス変換リスト３３１１から見つかった場合には、Ｓ２０３を実行する。見つからなかった場合は（Ｓ２０２）、図６のＳ３００でＮＯ、すなわち、図６のＳ２００において、未割り当てという判断結果になる。
【００８８】
Ｓ２０３では、制御プログラム２１２は、以下の式を計算する。
u = 対象LBA - (a);
v = u / (d);
w = u mod (d);
x = w / (ページサイズ)
y = w mod (ページサイズ)
チャンク内のページ番号 = v ×(c) + x
ページ内のオフセット = y 
この計算式において、（ａ）は、仮想ボリューム内のアドレス範囲の先頭ＬＢＡ（先頭仮想アドレス）である。（ｂ）は、そのアドレス範囲の末尾ＬＢＡ（末尾仮想アドレス）である。（ｃ）は、ページ数、すなわち、一つのページ連続割当て領域に割り当てられたページの数である。（ｄ）は、周期、すなわち、第一のページ連続割当て領域の基点（例えば先頭ＬＢＡ）から次の第二のページ連続割当て領域の基点（例えば先頭ＬＢＡ）までのアドレス範囲である。また、（ページサイズ）は、一つのページのサイズ（記憶容量）である。なお、この第一実施例では、チャンクのサイズもページのサイズも一様且つ固定値であるため、各種テーブルにおいて、チャンクやページについてサイズを管理する必要がない。しかし、それに限らず、例えば、チャンク及びページのうちの少なくとも一方が可変値であっても良い。その際、全てのチャンク或いはページを可変値にしても良いが、それらのうちの一つ或いは複数が、可変値であっても良い。
【００８９】
Ｓ２０３の計算において、もし、ｘ＞（ｃ）となったら（Ｓ２０４でＹＥＳ）、図６のＳ３００でＮＯとなるが、そうならずにｙが算出されれば（Ｓ２０４でＮＯ）、図６のＳ３００でＹＥＳ、つまり、対象ＬＢＡにはページが割り当てられていることになる。
【００９０】
図８は、図６のＳ６００での処理の詳細を示す。
【００９１】
制御プログラム２１２は、フォーマット中か否かを判断する（Ｓ６０１）。フォーマット中か否かの判断方法には、幾つかのバリエーションがあり、各バリエーションについては、後述する。
【００９２】
制御プログラム２１２は、フォーマット中ではないと判断した場合（Ｓ６０１でＮＯ）、チャンク管理テーブル２２２から未割当てのチャンクを探し、探し出されたチャンクを、該通常ライト要求に従う仮想アドレスに対して割り当てる（Ｓ６０３）。フォーマット中ではない場合のライト要求は、通常ライト要求ということになるためである。このＳ６０３では、制御プログラム２１２は、非周期割当てアクセス変換リスト３３１０及び非周期割当てチャンクリスト３１５を更新する。
【００９３】
一方、制御プログラム２１２は、フォーマット中であると判断した場合（Ｓ６０１でＹＥＳ）、対象ＬＢＡが、周期割当て済みのページに挟まれているか否か（つまり、ページ連続割当て領域同士の間にあるか否か）を判断する（Ｓ６０２）。具体的には、例えば、以下の（Ｐ）及び（Ｑ）、
（Ｐ）周期割当てアクセス変換リスト３３１１に、対象ＬＢＡを含む、仮想ボリューム内のアドレス範囲を有したエントリ３３３の次のエントリ３３３が設定済みである、
（Ｑ）図７のＳ２０３の計算において、ｘ＞（ｃ）となった、
のいずれかに該当する場合には、対象ＬＢＡが周期割当て済みのページに挟まれている、という判断結果になる。そのような判断結果が得られた場合（Ｓ６０２でＹＥＳ）、制御プログラム２１２は、前述したＳ６０３を実行する。
【００９４】
一方、対象ＬＢＡが周期割当て済みのページに挟まれていない、という判断結果が得られた場合（Ｓ６０２でＮＯ）、制御プログラム２１２は、直前に周期割当てされたページを有するチャンク内に、未割当てのページがあるか否かを判断する（Ｓ６０６）。具体的には、例えば、制御プログラム２１２は、チャンクから複数のページを生成した場合、各ページに連続したページ番号を割り振り、未割り当てのページ番号があるか否かを判断する。
未割当てのページがないと判断した場合（Ｓ６０６でＮＯ）、制御プログラム２１２は、未割当てのチャンクを新たに探し、新たに探し出された未割当てのチャンクから複数のページを生成し、それら複数のページのうちの最初のページを割り当てる（Ｓ６０７）。
【００９５】
つまり、例えば、最初のページ連続割当て領域に割り当て続けるページがチャンクに無い場合に、別のチャンクからページを割り当てる。或いは、最初のページ連続割当て領域にページを割り当て続けることが終了し、次のページ連続割当て領域の最初からページを割り当てる際に、ページがチャンクに無い場合に、別のチャンクからページを割り当てる。これらのような状況は、例えば、ページ連続割当て領域のサイズに比してチャンクのサイズが小さい場合、或いは、ページ連続割当て領域のサイズとチャンクのサイズとが同じ場合に生じ得る。
【００９６】
一方、Ｓ６０６において、未割当てのページがある場合、制御プログラム２１２は、対象ＬＢＡの直前のページ（対象ＬＢＡに連続した直前の仮想アドレスに割り当てられたページ）が、当該チャンクで最初の連続しているページか否か（すなわち、周期が未確定で、対応するページのアドレスが連続か否か）を判断する（Ｓ６０４）。別の言い方をすれば、制御プログラム２１２は、チャンクに存在する一以上の未割当てのページのうちの先頭ページの直前にある割当て済みページの割当て先仮想アドレスが、対象ＬＢＡに連続した直前の仮想アドレスか否かを判断する。つまり、このＳ６０４では、図５のステップ（２）の書込みが発生しているのかどうかが判断される。具体的には、図９に例示するように、周期割当てが全くされていない場合には、周期割当てアクセス変換リスト３３１１において、三行目のエントリに示すように、ページ数及び周期のそれぞれの値が“０”であり、それ以外の各他の項目の値は、“NULL”となっている。それに対し、フォーマット中において、チャンクが割当て済みとなった場合、２行目のエントリに示すように、ＬＵアドレス及びＬＵ内アドレスが、割り当てられたチャンクを有するＬＵアドレスと、そのチャンクを示すＬＵ内アドレスに更新される。また、周期が未確定の場合（すなわち、最初のページ連続割当て領域にページを割り当て中の場合）、ページの割当てに応じて、ページ数が更新されるが、周期の値は“０”のままである。
【００９７】
Ｓ６０４において、最初の連続したページであると判断した場合（Ｓ６０４でＹＥＳ）、すなわち、図９において、周期割当てアクセス変換リスト３３１１が２行目のエントリの状態であれば、制御プログラム２１２は、直前のページの次のページを、対象ＬＢＡに対して割り当てる（Ｓ６０５）。すなわち、最初のページ連続割当て領域にページを割り当てることが継続される。
【００９８】
一方、Ｓ６０４において、最初の連続したページではないと判断した場合（Ｓ６０４でＮＯ）、制御プログラム２１２は、周期割当て処理を実行する（Ｓ６０８）。すなわち、制御プログラム２１２は、直前のページ連続割当て領域の先頭アドレスと、現在のページの割当て先仮想アドレスとのオフセットを周期とし、その周期で、チャンクの残りのページを割り当て、周期割当てアクセス変換リスト３３１１と周期割当てチャンクリスト３３１２を更新する。このＳ６０８では、最初のページ連続割当て領域に割り当てたページ数の単位で、周期間隔で、ページを割り当てていく。このＳ６０８での周期割当ては、フォーマット書込み要求が実際に発生する前に行われる。言い換えれば、このＳ６０８の周期割当ての最中或いはそれが終了した後に、制御プログラム２１２が、フォーマット書込み要求を受信することになる。このため、その受信したフォーマット書込み要求に従う書込み先アドレスには、既に、ページが割り当たっていることになり、その割り当たっているページに、データが書き込まれることになる。周期が確定した場合、図９の周期割当てアクセス変換リスト３３１１の１行目のエントリに示すように、周期の値が０でなくなる。また、Ｓ６０８の周期割当てが終了した場合、仮想ボリューム内のアドレス範囲の末尾ＬＢＡが書かれる。この末尾アドレスは、このＳ６０８の処理の開始前にわかっている（例えば、仮想ボリューム１００全体がフォーマットの対象である）等の場合には、Ｓ６０８の終了時点に限らず、それよりも前の時点で書き込まれても良い。
【００９９】
以上が、図６のＳ６００の処理の詳細の説明である。なお、Ｓ６０１において、フォーマット中か否かの判断方法のバリエーションとして、例えば以下の第一〜第三のバリエーションがある。
【０１００】
第一のバリエーションを、図１０を参照して説明する。これは、仮想化装置１１が、管理サーバ１６から通知された情報から、フォーマット中か否かを判断する方法である。具体的には、管理サーバ１６が、フォーマット開始通知を仮想化装置１１に送信し（Ｓ８０１）、仮想化装置１１が、フォーマット開始通知を受信したことに応答して、フォーマット開始応答を管理サーバ１６に送信する（Ｓ８０２）。この時点が、フォーマット中であると判断される開始時点となる。以後、管理サーバ１６が、フォーマット開始要求をホストプロセッサ１２に送信する（Ｓ８０３）。そのフォーマット開始要求を受けたホストプロセッサ１２が、フォーマット処理（Ｓ８０４）として、フォーマット書込み要求を仮想化装置１１に送信する。ホストプロセッサ１２は、フォーマット処理を終えた場合、フォーマット完了応答を管理サーバ１６に送信する（Ｓ８０５）。管理サーバ１６は、フォーマット完了応答の受信に応答して、フォーマット完了通知を仮想化装置１１に送信する（Ｓ８０６）。仮想化装置１１がフォーマット完了通知を受信した時点が、フォーマット中であるとの判断の終了時点となる。仮想化装置１１は、フォーマット完了応答を管理サーバ１６に送信する（Ｓ８０７）。
【０１０１】
第二のバリエーションは、仮想化装置１１が、ホストプロセッサ１２から通知された情報から、フォーマット中か否かを判断する方法である。具体的には、例えば、図１０の処理の流れにおいて、管理サーバ１６が実行する処理を、ホストプロセッサ１２が実行する。その際、図１０における、管理サーバ１６とホストプロセッサ１２との間のやり取りは省略しても差し支えない。要するに、ホストプロセッサ１２が、フォーマット開始通知やフォーマット完了通知を仮想化装置１１に通知することで、仮想化装置１１に、フォーマット中であるとの開始時点と終了時点の契機を与えることができる。
【０１０２】
第三のバリエーションは、周期割当て（Ｓ６０８）を開始した後（例えばそれを終了した後）に非周期割当て（Ｓ６０３）を行った回数が、所定の閾値を超えていないかどうかで、フォーマット中であるか否かを判断する方法である。具体的には、例えば、制御プログラム２１２は、周期割当てを開始した後、非周期割当て（Ｓ６０３）を行った回数をカウントする。そのカウントされた回数が、所定の閾値を超えるまでは、制御プログラム２１２は、フォーマット中と判断し、超えた後は、フォーマット中ではないと判断する。なお、実際にフォーマット中であっても、全ての周期及び全てのページ数が必ずしも一様であるとは限らない場合もある。例えば、第一と第二のページ連続割当て領域の周期（距離）と、第三と第四のページ連続割当て領域の周期は、必ずしも同じではあるとは限らない。同様に、例えば、第一のページ連続割当て領域に割り当てられたページの数と、第二のページ連続割当て領域に割り当てられたページの数が、必ずしも同じとは限らない。このような場合、周期割当て後に受信したフォーマット書込み要求に従う書込みでは、ページの割当て先アドレスとは異なる、領域が未割り当てのアドレスが、対象ＬＢＡとなり、故に、ページではなくチャンクが割り当てられてしまうことになる。しかし、これにより、周期割当てによってページが割り当てられた場所からずれた場所が、実際のフォーマット書込み要求に従う書込み先であっても、書き込み（フォーマット）に失敗してしまうことを救うことができる。また、非周期割当てが行われるケースは、少なくとも、通常書込み要求に従う書込みが行われる程多くは無い。そのため、前述した所定の閾値は、こういった点を考慮した値とされる。この第三のバリエーションでは、上記のように、フォーマット書込み要求に従う書込みに失敗してしまうことを救いつつ、フォーマット中であるか否かを適切に判断することができる。
【０１０３】
以上が、第一実施例についての説明である。この第一実施例では、ページのサイズは、例えば、少なくとも、フォーマットの際に書き込まれる一つのメタデータのサイズ以下とすることができる。
【０１０４】
以上、上述した第一実施例によれば、仮想ボリュームのフォーマット中での領域割当てにおいて、チャンクよりも小サイズの記憶領域であるページが割り当てられるので、割り当てられた領域に未使用部分が生じることを抑えることができる。また、フォーマット中での領域割当てでは、一つのチャンクから複数のページを切り出して順次に割り当てていくため、一つのページを割り当てる都度に共有メモリ２２０にアクセスする必要は無く、ページの元となる未割当てのチャンクを探す場合にアクセスすれば良い。このため、フォーマット中において、共有メモリ２２０へのアクセス回数を抑えることができる。
【実施例２】
【０１０５】
以下、本発明の第二実施例を説明する。その際、第一実施例との相違点を主に説明し、第一実施例との共通点については、説明を省略或いは簡略する（これは、第二実施例に限らず、後の第三実施例以降についても同様である）。
【０１０６】
図１１は、本発明の第二実施例で行われる処理の流れの一例を示す。
【０１０７】
仮想化装置１１の制御プログラム２１２が、或る仮想ボリュームがフォーマット中でなくなった場合に、その仮想ボリュームでの周期割当ての周期と、１周期あたりのページ数（すなわち、１周期に存在する一つのページ連続割当て領域に割り当てられたページの数）とを表す情報（以下、周期・ページ数情報）を、管理サーバ１６に送信する（Ｓ９０１）。
【０１０８】
管理サーバ１６は、受信した周期・ページ数情報をコンソール１４に送信し、その周期・ページ数情報を表示することをコンソール１４に指示する（Ｓ９０２）。
【０１０９】
コンソール１４は、管理サーバ１６からの指示に従って、管理サーバ１６から受信した周期・ページ数情報を表示する（Ｓ９０３）。
【０１１０】
以上が、第二実施例の説明である。なお、Ｓ９０１を開始するタイミングは、或る仮想ボリュームがフォーマット中でなくなったタイミングに限らず、別のタイミングでもよい。例えば、フォーマット中であっても、周期とページ数がわかった時点で、Ｓ９０１が行われても良い。
【０１１１】
また、この第二実施例では、制御プログラム２１２は、管理サーバ１６に送る周期とページ数を、それぞれ、以下のようにして選ぶことができる。具体的には、例えば、制御プログラム２１２は、或るタイミングで使用した周期とページ数（例えば、最後に周期割り当てを行ったチャンクの周期とページ数）を、送信対象として選択することができる。或いは、例えば、制御プログラム２１２は、最も多くのチャンクで使われた周期とページ数を、送信対象として選択することができる。最も多くのチャンクで使われた周期とページ数は、例えば、周期とページ数を連結したバイト列をインデクスとし、採用したチャンク数を値とするテーブルを作成することで、特定することができる。すなわち、ページの基とするチャンクを探した場合に、そのチャンクから切り出したページの割当てでのページ数と周期に対応する場所の値（チャンク数）を更新し、最も大きい更新後の値に対応したページ数と周期の組を特定することができる。
【０１１２】
以上、この第二実施例では、コンソール１４に表示された周期・ページ数情報を閲覧した管理者が、別の仮想ボリュームのフォーマットの際に、コンソール１４を操作して、この表示された周期とページ数で周期割当てを行うことを、その別の仮想ボリュームを有する仮想化装置１１に指示することができる。すなわち、第一実施例では、仮想化装置１１が、周期及びページ数を学習し、学習した結果に基づいて周期割当てを行ったが、この第二実施例では、仮想化装置１１が、コンソール１４から指定された周期及びページ数で周期割当てを行うことができる。つまり、この第二実施例では、最初のページ連続割当て領域から、周期割当てでページを割り当てていくことができる。
【実施例３】
【０１１３】
図１２Ａは、本発明の第三実施例で行われる処理の流れの一例の一部を示す。図１２Ｂは、その処理の流れの一例の残りの一部を示す。
【０１１４】
図１２Ａに示すように、仮想化装置１１の制御プログラム２１２が、或る仮想ボリュームがフォーマット中でなくなった場合に、その仮想ボリュームでの周期割当ての周期と、１周期あたりのページ数とを表す周期・ページ数情報を、管理サーバ１６に送信する（Ｓ１００１）。送信対象とする周期とページ数は、第二実施例と同様の方法で選択することができる。
【０１１５】
管理サーバ１６は、受信した周期・ページ数情報と、上記或る仮想ボリュームをフォーマットしたサーバの種類を表す情報（以下、サーバ種類情報）とを、管理記憶装置に出力する（Ｓ１００２）。これにより、周期・ページ数情報とサーバ種類情報との情報セットが、管理記憶装置に格納される。なお、サーバ種類情報が表すサーバ種類とは、フォーマット開始要求をホストプロセッサに出した、或いは、フォーマット処理をホストプロセッサに代わって行ったサーバの種類（例えばそのサーバが搭載するＯＳ（オペレーティングシステム）の種類）とすることができる。また、管理記憶装置とは、管理サーバ１６に内蔵された記憶装置、或いは、管理サーバ１６の外部にあって管理サーバ１６と通信可能な記憶装置である。その記憶装置は、据置型であっても良いし、可搬型であっても良い。
【０１１６】
図１２Ｂに示すように、管理サーバ１６は、管理記憶装置から、周期・ページ数情報とホストプロセッサ種類情報との情報セットを読み出す（Ｓ１０１１）。ここで読み出される情報セットは、その仮想ボリュームをフォーマットしたホストプロセッサ１２の種類を表すホストプロセッサ種類情報を含んだ情報セットである。
【０１１７】
管理サーバ１６は、読み出した情報セット中の周期・ページ数情報を、仮想化装置１１に送信する（Ｓ１０１２）。
【０１１８】
仮想化装置１１の制御プログラム２１２は、受信した周期・ページ数情報が表す周期且つページ数で、周期割当てを行う（Ｓ１０１３）。なお、ここで周期割当てがされる仮想ボリュームは、所定の仮想ボリュームであっても良いし、管理サーバ１６から指定された仮想ボリュームであっても良い。
【０１１９】
図１３は、第三実施例での領域割当て処理の流れを示す。なお、この図１３は、図８との相違点を示す。
【０１２０】
すなわち、図８のＳ６０２でＮＯの場合、制御プログラム２１２は、周期・ページ数情報を受信済みか否か判断する（Ｓ６５１）。受信済みでなければ（Ｓ６５１でＮＯ）、図８のＳ６０３が行われ、受信済みであれば、Ｓ６５２が行われる。
【０１２１】
Ｓ６５２では、制御プログラム２１２は、受信済みの周期・ページ数情報が表す周期・ページ数を基に、周期割当てを行う。その際、制御プログラム２１２は、周期割当てアクセス変換リスト３３１１や、周期割当てチャンクリスト３３１２を更新する。
【実施例４】
【０１２２】
図１４は、本発明の第四実施例に係る計算機システムの構成例を示す。
【０１２３】
この計算機システムによれば、仮想化装置１１に、通信ネットワーク１５を介して、管理ボリューム管理サーバ５００１が接続される。仮想ボリューム管理サーバ５００１は、仮想ボリューム１００への領域割り当てを制御する。仮想ボリューム管理サーバ５００１と仮想化装置１１は、通信ネットワーク１５を介して互いに通信が可能である。
【０１２４】
図１５は、仮想化装置１１と仮想ボリューム管理サーバ５００１の構成例を示す。
【０１２５】
仮想化装置１１は、アクセス変換テーブル２２４を有し、仮想ボリューム管理サーバ５００１が、メモリ５０１に、全てのテーブル２２４，２２２，２２１を有する。仮想ボリューム管理サーバ５００１が持つアクセス変換テーブル２２４は、仮想化装置１１が持つアクセス変換テーブル２２４と同一内容とすることができる。それに代えて、仮想ボリューム管理サーバ５００１は、アクセス変換テーブル２２４を持たずに、仮想ボリューム管理サーバ５００１は、仮想化装置１１のアクセス変換テーブル２２４を参照してもよい。
【０１２６】
以上のように、第一実施例で説明した各種テーブル２２４、２２２、２２１のうち、少なくともチャンク管理テーブル２２２及び仮想ボリューム管理テーブル２２１が、仮想ボリューム管理サーバ５０１のメモリ５０１（それに代えて別種の記憶資源でも良い）に記憶される。仮想ボリューム管理サーバ５００１のプロセッサ５０３が、そのテーブル２２２、２２１を参照して、処理を実行することができる。
【０１２７】
図１６は、第四実施例において、Ｉ／Ｏ要求を受信した制御プログラム２１２によって行われる処理の流れの一例を示す。図１６は、第一実施例との相違点を主に示す。
【０１２８】
図６のＳ５００でＮＯの場合、制御プログラム２１２が、仮想ボリューム管理サーバ５００１に、領域割当てを依頼する（Ｓ６００Ａ）。その依頼に従って、仮想ボリューム管理サーバ５００１が、図６のＳ６００と同様の流れで、領域割当て処理を実行する。この領域割当て処理では、仮想ボリューム管理サーバ５００１におけるアクセス変換テーブル２２４が更新されることになる。仮想ボリューム管理サーバ５００１は、更新前のアクセス変換テーブル２２４と更新後のアクセス変換テーブル２２４との差分（以下、テーブル差分）を、仮想化装置１１に送信する。
【０１２９】
制御プログラム２１２は、仮想ボリューム管理サーバ５００１から、テーブル差分を受け取る（Ｓ６００Ｂ）。そして、制御プログラム２１２は、テーブル差分を、仮想化装置１１におけるアクセス変換テーブル２２４に反映する（Ｓ６００Ｃ）。これにより、仮想化装置１１におけるアクセス変換テーブル２２４の内容が、仮想ボリューム管理サーバ５００１における更新後のアクセス変換テーブル２２４の内容と同一になる。
【０１３０】
以上、この第四実施例では、領域割当て処理や、アクセス変換テーブル２２４における各種リスト３３１０、３３１１を参照する処理を、仮想化装置１１ではなく、仮想ボリューム管理サーバ５００１が行うことができる。
【０１３１】
以上、本発明の好適な幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【０１３２】
例えば、仮想化装置としての機能が、ストレージシステム１３のコントローラに搭載されても良い。この場合、コントローラのメモリに、前述した各種テーブル２２１、２２２、２２４や、制御プログラム２１２が記憶され、コントローラのＣＰＵで、その制御プログラム２１２が実行されても良い。
【０１３３】
また、例えば、そのストレージシステム１３には、外部のストレージシステムが接続されても良い。その場合、該外部のストレージシステムに、複数のチャンクが存在し、ストレージシステム１３が、その外部ストレージシステムに存在する未割当てのチャンクからページを切り出して仮想ボリュームに割り当てても良い。
【図面の簡単な説明】
【０１３４】
【図１】図１は、本発明の第一実施例に係る仮想化装置が適用された計算機システムの構成例を示す。
【図２】図２は、仮想化装置１１の内部構成例を示す。
【図３】図３Ａは、非周期割当てアクセス変換リストの構成例を示す。図３Ｂは、周期割当てアクセス変換リストの構成例を示す。図３Ｃは、非周期割当てチャンクリストの構成例を示す。図３Ｄは、周期割当てアクセス変換リストの構成例を示す。
【図４】図４は、ストレージシステム１３の構成例を示す。
【図５】図５は、周期割当ての説明図である。
【図６】図６は、Ｉ／Ｏ要求を受信した制御プログラム２１２によって行われる処理の流れの一例を示す。
【図７】図７は、図６のＳ２００での処理の詳細を示す。
【図８】図８は、図６のＳ６００での処理の詳細を示す。
【図９】図９は、周期割当てアクセス変換リストの更新の様子の一例を示す。
【図１０】図１０は、フォーマット中か否かの判断方法の第一のバリエーションの説明図である。
【図１１】図１１は、本発明の第二実施例で行われる処理の流れの一例を示す。
【図１２】図１２Ａは、本発明の第三実施例で行われる処理の流れの一例の一部を示す。図１２Ｂは、その処理の流れの一例の残りの一部を示す。
【図１３】図１３は、第三実施例での領域割当て処理の流れを示す。
【図１４】図１４は、本発明の第四実施例に係る計算機システムの構成例を示す。
【図１５】図１５は、仮想化装置１１と仮想ボリューム管理サーバ５００１の構成例を示す。
【図１６】図１６は、第四実施例において、Ｉ／Ｏ要求を受信した制御プログラム２１２によって行われる処理の流れの一例を示す。
【符号の説明】
【０１３５】
１１…仮想化装置  １２…ホストプロセッサ  １３…ストレージ装置  ２１０…プロセッサパッケージ  ２２０…共有メモリ  ２１２…制御プログラム  ２２１…仮想ボリューム管理テーブル  ２２２…チャンク管理テーブル  ２２４…アクセス変換テーブル
【図１】
2008059353.tif 000003
【図２】
2008059353.tif 000004
【図３】
2008059353.tif 000005
【図４】
2008059353.tif 000006
【図５】
2008059353.tif 000007
【図６】
2008059353.tif 000008
【図７】
2008059353.tif 000009
【図８】
2008059353.tif 000010
【図９】
2008059353.tif 000011
【図１０】
2008059353.tif 000012
【図１１】
2008059353.tif 000013
【図１２】
2008059353.tif 000014
【図１３】
2008059353.tif 000015
【図１４】
2008059353.tif 000016
【図１５】
2008059353.tif 000017
【図１６】
2008059353.tif 000018