IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

特許7497637情報処理装置およびアクセス制御プログラム
<>
  • 特許-情報処理装置およびアクセス制御プログラム 図1
  • 特許-情報処理装置およびアクセス制御プログラム 図2
  • 特許-情報処理装置およびアクセス制御プログラム 図3
  • 特許-情報処理装置およびアクセス制御プログラム 図4
  • 特許-情報処理装置およびアクセス制御プログラム 図5
  • 特許-情報処理装置およびアクセス制御プログラム 図6
  • 特許-情報処理装置およびアクセス制御プログラム 図7
  • 特許-情報処理装置およびアクセス制御プログラム 図8
  • 特許-情報処理装置およびアクセス制御プログラム 図9
  • 特許-情報処理装置およびアクセス制御プログラム 図10
  • 特許-情報処理装置およびアクセス制御プログラム 図11
  • 特許-情報処理装置およびアクセス制御プログラム 図12
  • 特許-情報処理装置およびアクセス制御プログラム 図13
  • 特許-情報処理装置およびアクセス制御プログラム 図14
  • 特許-情報処理装置およびアクセス制御プログラム 図15
  • 特許-情報処理装置およびアクセス制御プログラム 図16
  • 特許-情報処理装置およびアクセス制御プログラム 図17
  • 特許-情報処理装置およびアクセス制御プログラム 図18
  • 特許-情報処理装置およびアクセス制御プログラム 図19
  • 特許-情報処理装置およびアクセス制御プログラム 図20
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-03
(45)【発行日】2024-06-11
(54)【発明の名称】情報処理装置およびアクセス制御プログラム
(51)【国際特許分類】
   G06F 13/10 20060101AFI20240604BHJP
   G06F 3/06 20060101ALI20240604BHJP
【FI】
G06F13/10 330C
G06F3/06 301K
G06F3/06 301Z
G06F13/10 340A
【請求項の数】 5
(21)【出願番号】P 2020122440
(22)【出願日】2020-07-16
(65)【公開番号】P2022018964
(43)【公開日】2022-01-27
【審査請求日】2023-04-07
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100104190
【弁理士】
【氏名又は名称】酒井 昭徳
(72)【発明者】
【氏名】鈴木 和宏
【審査官】北村 学
(56)【参考文献】
【文献】特開2010-211767(JP,A)
【文献】特開2013-077076(JP,A)
【文献】特開2016-133976(JP,A)
【文献】国際公開第2010/116402(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 13/10
G06F 3/06
(57)【特許請求の範囲】
【請求項1】
ネットワークを介してストレージデバイスと接続される情報処理装置であって、
自装置で動作するゲストOSからの前記ストレージデバイスへのアクセスにかかる情報をカプセル化したパケットを格納する物理記憶領域に格納された第1パケットのうち、前記アクセスにかかる情報が格納された前記物理記憶領域上のホスト物理アドレスを取得し、取得した前記ホスト物理アドレスを、前記ゲストOSが認識するゲスト物理アドレスに変換し、前記ホスト物理アドレスと前記ゲスト物理アドレスとを対応付けて記憶部に記憶する第1の制御部と、
前記ゲストOSが利用するブロックデバイスのデータ構造体を作成し、前記データ構造体のデータアドレス領域に、前記第1の制御部によって変換された前記ゲスト物理アドレスを格納する第2の制御部と、を有し、
前記第2の制御部は、
前記ゲストOSからの前記ブロックデバイスへのアクセスに応じて前記データアドレス領域に格納された前記ゲスト物理アドレスを読み込んで、読み込んだ前記ゲスト物理アドレスを前記第1の制御部に送信し、
前記第1の制御部は、
前記第2の制御部から前記ゲスト物理アドレスを受信した場合、前記記憶部を参照して、受信した前記ゲスト物理アドレスに対応する前記ホスト物理アドレスを特定し、前記物理記憶領域上の特定した前記ホスト物理アドレスからデータを読み込み、読み込んだ前記データを前記ゲストOSに転送する、
ことを特徴とする情報処理装置。
【請求項2】
前記第1の制御部は、
前記ゲストOSに関する前記ストレージデバイスへのログイン処理を実行し、
前記ストレージデバイスからのログイン応答パケットが前記物理記憶領域に格納された場合に、前記ログイン応答パケットのうち、前記アクセスにかかる情報が格納された前記物理記憶領域上のホスト物理アドレスを取得する、
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記アクセスにかかる情報は、SCSIのコマンドとレスポンスとを含み、
前記パケットは、iSCSIパケットである、
ことを特徴とする請求項1または2に記載の情報処理装置。
【請求項4】
前記第1の制御部は、
前記ゲストOSに関する前記ストレージデバイスへのログイン処理を実行し、
前記ストレージデバイスからのログイン応答パケットが前記物理記憶領域に格納された場合に、前記ゲストOSが利用するブロックデバイスのデータ構造体の作成を前記第2の制御部に依頼し、
前記第2の制御部は、
前記依頼に応じて前記ブロックデバイスのデータ構造体を作成し、
前記ゲストOSのメモリ内に前記パケットのサイズ分のバッファを作成し、
前記バッファの先頭アドレスを示す第1ゲスト物理アドレスと、前記パケットのうち前記ストレージデバイスへのアクセスにかかる情報が格納される前記バッファ上の先頭アドレスを示す第2ゲスト物理アドレスとを取得し、
前記第2ゲスト物理アドレスを前記データ構造体のデータアドレス領域に格納し、
前記第1の制御部は、
前記第2の制御部によって取得された前記第1ゲスト物理アドレスと前記第2ゲスト物理アドレスと前記物理記憶領域を有するデバイスとを対応付けて第2の記憶部に記憶し、
前記ゲストOSからDMAコントローラへの、前記ブロックデバイスを転送元とし、前記データアドレス領域に格納された前記第2ゲスト物理アドレスを転送先とするDMA転送要求を検出した場合、前記記憶部を参照して、前記第2ゲスト物理アドレスに対応する前記第1ゲスト物理アドレスおよび前記デバイスを特定し、
特定した前記デバイスを転送元とし、特定した前記第1ゲスト物理アドレスを転送先とするDMA転送要求を前記DMAコントローラに通知する、
ことを特徴とする請求項1~3のいずれか一つに記載の情報処理装置。
【請求項5】
ネットワークを介してストレージデバイスと接続されるコンピュータに、
前記コンピュータ上で動作するゲストOSからの前記ストレージデバイスへのアクセスにかかる情報をカプセル化したパケットを格納する物理記憶領域に格納された第1パケットのうち、前記アクセスにかかる情報が格納された前記物理記憶領域上のホスト物理アドレスを取得し、
取得した前記ホスト物理アドレスを、前記ゲストOSが認識するゲスト物理アドレスに変換して、前記ホスト物理アドレスと前記ゲスト物理アドレスとを対応付けて記憶部に記憶し、
前記ゲストOSが利用するブロックデバイスのデータ構造体を作成し、前記データ構造体のデータアドレス領域に、変換された前記ゲスト物理アドレスを格納し、
前記ゲストOSからの前記ブロックデバイスへのアクセスに応じて前記データアドレス領域に格納された前記ゲスト物理アドレスを読み込み、
記記憶部を参照して、読み込まれた前記ゲスト物理アドレスに対応する前記ホスト物理アドレスを特定し、
前記物理記憶領域上の特定した前記ホスト物理アドレスからデータを読み込み、読み込んだ前記データを前記ゲストOSに転送する、
処理を実行させることを特徴とするアクセス制御プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置およびアクセス制御プログラムに関する。
【背景技術】
【0002】
従来、IP(Internet Protorol)ネットワークを利用してSAN(Storage Area Network)を構築するプロトコルとして、iSCSI(Internet Small Computer System Interface)がある。iSCSIは、SCSIコマンドとデータを1つのIPパケットにまとめ、TCP(Transmission Control Protocol)/IPを使ってそれらを転送する。
【0003】
先行技術としては、例えば、ストレージ・エリア・ネットワークのネットワーク装置上で記憶の仮想化を実施するためのものがある。また、複数のストレージ仮想化装置に同じ論理的なデバイス構成を構築するための技術がある。
【先行技術文献】
【特許文献】
【0004】
【文献】特表2005-525619号公報
【文献】特開2007-328611号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来技術では、仮想マシン(VM:Virtual Machine)からIPネットワーク上のストレージデバイス(例えば、iSCSIストレージ)を利用する環境において、高速なデータ転送を行うことが難しい。
【0006】
一つの側面では、本発明は、仮想マシンからネットワーク上のストレージデバイスを利用する環境において、高速にアクセス可能にすることを目的とする。
【課題を解決するための手段】
【0007】
1つの実施態様では、ネットワークを介してストレージデバイスと接続される情報処理装置であって、自装置で動作するゲストOSからの前記ストレージデバイスへのアクセスにかかる情報をカプセル化したパケットを格納する物理記憶領域に格納された第1パケットのうち、前記アクセスにかかる情報が格納された前記物理記憶領域上のホスト物理アドレスを取得し、取得した前記ホスト物理アドレスを、前記ゲストOSが認識するゲスト物理アドレスに変換し、前記ホスト物理アドレスと前記ゲスト物理アドレスとを対応付けて記憶部に記憶する第1の制御部と、前記ゲストOSが利用するブロックデバイスのデータ構造体を作成し、前記データ構造体のデータアドレス領域に、前記第1の制御部によって変換された前記ゲスト物理アドレスを格納する第2の制御部と、を有し、前記第1の制御部は、前記データアドレス領域からの読み込みを検知した場合、前記記憶部を参照して、前記データアドレス領域に格納された前記ゲスト物理アドレスに対応する前記ホスト物理アドレスを特定し、前記物理記憶領域上の特定した前記ホスト物理アドレスからデータを読み込み、読み込んだ前記データを前記ゲストOSに転送する、情報処理装置が提供される。
【発明の効果】
【0008】
本発明の一側面によれば、仮想マシンからネットワーク上のストレージデバイスを利用する環境において、高速にアクセス可能にすることができるという効果を奏する。
【図面の簡単な説明】
【0009】
図1図1は、ストレージシステムのシステム構成例を示す説明図である。
図2図2は、情報処理装置101のハードウェア構成例を示すブロック図である。
図3図3は、iSCSIパケットのデータ構造例を示す説明図である。
図4図4は、アドレス管理テーブル400の記憶内容の一例を示す説明図である。
図5図5は、仮想マシン環境のアドレス空間を示す説明図である。
図6図6は、実施の形態1にかかる情報処理装置101の機能的構成例を示すブロック図である。
図7図7は、実施の形態1にかかるストレージシステム100の設定フェーズの動作例を示す説明図(その1)である。
図8図8は、実施の形態1にかかるストレージシステム100の設定フェーズの動作例を示す説明図(その2)である。
図9図9は、実施の形態1にかかるストレージシステム100の設定フェーズの動作例を示す説明図(その3)である。
図10図10は、実施の形態1にかかるストレージシステム100のアクセスフェーズの動作例を示す説明図である。
図11図11は、実施の形態1にかかる情報処理装置101の設定処理手順の一例を示すシーケンス図である。
図12図12は、実施の形態1にかかる情報処理装置101のアクセス処理手順の一例を示すシーケンス図である。
図13図13は、DMAアドレス管理テーブル1300の記憶内容の一例を示す説明図である。
図14図14は、実施の形態2にかかる情報処理装置101の機能的構成例を示すブロック図である。
図15図15は、実施の形態2にかかるストレージシステム100の設定フェーズの動作例を示す説明図(その1)である。
図16図16は、実施の形態2にかかるストレージシステム100の設定フェーズの動作例を示す説明図(その2)である。
図17図17は、実施の形態2にかかるストレージシステム100の設定フェーズの動作例を示す説明図(その3)である。
図18図18は、実施の形態2にかかるストレージシステム100のアクセスフェーズの動作例を示す説明図である。
図19図19は、実施の形態2にかかる情報処理装置101の設定処理手順の一例を示すシーケンス図である。
図20図20は、実施の形態2にかかる情報処理装置101のアクセス処理手順の一例を示すシーケンス図である。
【発明を実施するための形態】
【0010】
以下に図面を参照して、本発明にかかる情報処理装置およびアクセス制御プログラムの実施の形態を詳細に説明する。
【0011】
(実施の形態1)
まず、実施の形態1にかかるストレージシステムのシステム構成例について説明する。本ストレージシステムは、例えば、IaaS(infrastructure as a service)により顧客に仮想マシンを貸し出すサービスに適用される。
【0012】
図1は、ストレージシステムのシステム構成例を示す説明図である。図1において、ストレージシステム100は、情報処理装置101と、ストレージ装置102とを含む。ストレージシステム100において、情報処理装置101およびストレージ装置102は、有線または無線のネットワーク110を介して接続される。ネットワーク110は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。
【0013】
情報処理装置101は、仮想マシンVMを実行可能なコンピュータである。仮想マシンVMは、物理的なコンピュータのハードウェア資源を分割して構築される実行環境で動作する仮想的なコンピュータである。情報処理装置101は、例えば、クラウドコンピューティングのサーバである。
【0014】
具体的には、例えば、情報処理装置101は、ホストOS(Operating System)#と、ハードウェアエミュレータ130とを有する。ホストOS#は、仮想コンピュータ環境で仮想的なOS(例えば、ゲストOS$)を動作させる。例えば、ホストOS#は、ハイパーバイザーが組み込まれたOSである。ハイパーバイザーは、複数の仮想マシンを並列して稼働させるためのソフトウェアである。ただし、ホストOS#の機能は、ハイパーバイザーにより実現されてもよい。
【0015】
ハードウェアエミュレータ130は、ホストOS#の制御に従って、物理ハードウェア140を仮想化して、仮想マシンVMのゲストOS$に見せるソフトウェアである。ゲストOS$は、仮想マシンVM上で動作するOSである。物理ハードウェア140は、例えば、メモリ、NIC(Network Interface Card)、ディスクなどの物理的なデバイスである。なお、物理ハードウェア140についての詳細な説明は、図2を用いて後述する。
【0016】
ストレージ装置102は、ストレージSTを有し、ストレージSTに対するアクセスを制御するコンピュータである。ストレージSTは、データを記憶する記憶装置である。ストレージSTは、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)である。ストレージ装置102は、例えば、サーバである。
【0017】
以下の説明では、ローカルのストレージデバイスにアクセスするプロトコルとして、「SCSI」を例に挙げて説明する。また、ストレージデバイスへのアクセスにかかるデータをIPネットワークに流すプロトコルとして、「iSCSI」を例に挙げて説明する。ただし、ローカルのストレージデバイスにアクセスするプロトコルとして、SCSI以外のプロトコルを用いることにしてもよい。また、ストレージデバイスへのアクセスにかかるデータをIPネットワークに流すプロトコルとして、iSCSI以外のプロトコルを用いることにしてもよい。また、情報処理装置101とIPネットワークを介して接続されるストレージSTを「外部ストレージST」と表記する場合がある。
【0018】
ここで、仮想マシンVMからiSCSIデバイスを利用する場合がある。iSCSIデバイスは、IPネットワークを介してアクセスされるストレージデバイス(例えば、外部ストレージST)である。iSCSIは、SCSIコマンドとデータを1つのIPパケットにまとめ、TCP/IPを使ってそれらを転送する。SCSIコマンドは、ストレージとコンピュータが通信・制御を行う際に利用されるコマンドである。
【0019】
また、仮想マシンVMからiSCSIデバイスを利用するにあたり、インフラがストレージ接続管理を行う場合がある。インフラ(インフラストラクチャー)とは、ストレージシステム100を管理するシステム、例えば、仮想マシンVMを貸し出すサービスを管理するシステムである。
【0020】
インフラからストレージ接続を制御することで、例えば、ノードダウンやマイグレーションが発生した場合にも、ユーザの仮想マシンVMに透過的に接続を回復することができる。すなわち、ノードダウンやマイグレーションが発生した場合に、ユーザ側から接続先のストレージの再設定などを行う必要がなく、ユーザにとって便利である。
【0021】
ここで、インフラがストレージ接続管理を行う環境におけるストレージの接続方法としては、例えば、従来手段1,2がある。
【0022】
従来手段1では、まず、ホストOSが、コマンドを実行して、iSCSIデバイスをマウントすることで、ブロックデバイスとして認識する。外部ストレージを物理サーバにマウントするコマンドとしては、例えば、「iscsiadm --mode discovery --type sendtargets --portal 192.168.1.34 --login」などのiscsiadmコマンドがある。
【0023】
つぎに、ホストOSが、コマンドを実行して、ハードウェアエミュレータに指示を出すことで、認識したブロックデバイス「/dev/sdb」を仮想マシンにアタッチする。仮想マシンにブロックデバイスをアタッチするコマンドとしては、例えば、「virsh attach-disk dom /dev/sdb vdb」などのvirsh attach-diskコマンドがある。
【0024】
これにより、仮想マシンがブロックデバイス「/dev/vdb」を認識する。なお、ホストOS、仮想マシンそれぞれが認識するブロックデバイスを区別するために、例えば、各ブロックデバイスに異なる名称(/dev/sdbと/dev/vdb)が設定される。
【0025】
そして、ホストOSが、物理サーバ上のバッファをゲストOSのバッファにコピーして、仮想マシンからストレージにアクセスさせる。すなわち、外部ストレージのデータを物理サーバ上のバッファにコピーし、物理サーバ上のバッファのデータを仮想マシン上のバッファにコピーすることで、仮想マシンからデータにアクセスさせる。
【0026】
しかしながら、従来手段1では、仮想マシンからストレージへアスクセスするために、ホストOSとゲストOSとの間で、バッファコピーが発生するために、高速にアクセスできないという問題がある。すなわち、インフラがストレージ接続管理を行うために、仮想マシンにブロックデバイス「/dev/sdb」を直接見せないため、バッファコピーが発生する。
【0027】
また、従来手段2として、PCI(Peripheral Component Interconnect)パススルーで、仮想マシンに物理NICをアタッチすることが考えられる。PCIパススルーは、仮想マシンに物理的なデバイスを直接見せる仕組みである。
【0028】
しかしながら、従来手段2では、仮想マシン側でiSCSI接続する必要があるため、インフラから制御することができない。また、インフラから制御しようとすると、ユーザの仮想マシンに手を加える必要がある。例えば、インフラから接続するデバイスの指定を受け付けて、アタッチするコマンドをたたく仕組み(デーモン、エージェントなど)を仮想マシンに導入する必要がある。
【0029】
そこで、実施の形態1では、仮想マシンVMからiSCSIストレージ(外部ストレージST)を利用する環境において、仮想マシンからはiSCSIと意識させることなく、かつ、不要なバッファコピーを削減することで、高速にアクセス可能にする情報処理装置101について説明する。
【0030】
なお、図1の例では、情報処理装置101とストレージ装置102をそれぞれ1台のみ表示したが、これに限らない。例えば、ストレージシステム100には、複数の情報処理装置101と複数のストレージ装置102とが含まれていてもよい。
【0031】
(情報処理装置101のハードウェア構成例)
図2は、情報処理装置101のハードウェア構成例を示すブロック図である。図2において、情報処理装置101は、CPU(Central Processing Unit)201と、メモリ202と、ディスクドライブ203と、ディスク204と、通信I/F(Interface)205と、可搬型記録媒体I/F206と、可搬型記録媒体207と、を有する。また、各構成部は、バス200によってそれぞれ接続される。
【0032】
ここで、CPU201は、情報処理装置101の全体の制御を司る。CPU201は、複数のコアを有していてもよい。メモリ202は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMがOS(Operating System)のプログラムを記憶し、ROMがアプリケーションプログラムを記憶し、RAMがCPU201のワークエリアとして使用される。メモリ202に記憶されるプログラムは、CPU201にロードされることで、コーディングされている処理をCPU201に実行させる。
【0033】
ディスクドライブ203は、CPU201の制御に従ってディスク204に対するデータのリード/ライトを制御する。ディスク204は、ディスクドライブ203の制御で書き込まれたデータを記憶する。ディスク204としては、例えば、磁気ディスク、光ディスクなどが挙げられる。
【0034】
通信I/F205は、通信回線を通じてネットワーク110に接続され、ネットワーク110を介して外部のコンピュータ(例えば、図1に示したストレージ装置102)に接続される。そして、通信I/F205は、ネットワーク110と装置内部とのインターフェースを司り、外部のコンピュータからのデータの入出力を制御する。通信I/F205には、例えば、NIC、LANアダプタなどを採用することができる。
【0035】
可搬型記録媒体I/F206は、CPU201の制御に従って可搬型記録媒体207に対するデータのリード/ライトを制御する。可搬型記録媒体207は、可搬型記録媒体I/F206の制御で書き込まれたデータを記憶する。可搬型記録媒体207としては、例えば、CD(Compact Disc)-ROM、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリなどが挙げられる。
【0036】
なお、情報処理装置101は、上述した構成部のほかに、例えば、SSD(Solid
State Drive)、入力装置、ディスプレイ等を有することにしてもよい。また、情報処理装置101は、上述した構成部のうち、例えば、ディスクドライブ203、ディスク204、可搬型記録媒体I/F206、可搬型記録媒体207を有していなくてもよい。また、図1に示したストレージ装置102についても、情報処理装置101と同様のハードウェア構成により実現することができる。
【0037】
(iSCSIパケットのデータ構造例)
ここで、iSCSIパケットのデータ構造例について説明する。iSCSIパケットは、情報処理装置101とストレージ装置102との間でやり取りされるIPパケットの一例である。
【0038】
図3は、iSCSIパケットのデータ構造例を示す説明図である。図3において、iSCSIパケット300は、SCSIデータ301をIPパケットでカプセル化したものである。SCSIデータ301は、外部ストレージSTへのアクセスにかかる情報(SCSI I/O)であり、SCSIコマンドd1とデータd2とを含む。
【0039】
SCSIコマンドd1は、外部ストレージSTへのSCSIのコマンドである。データd2は、例えば、SCSIコマンドd1に対するレスポンスである。レスポンスは、例えば、SCSIコマンドd1により外部ストレージSTから読み込まれるデータである。また、データd2は、例えば、SCSIコマンドd1により外部ストレージSTに書き込まれるデータである。
【0040】
(アドレス管理テーブル400の記憶内容)
つぎに、ホストOS#が有するアドレス管理テーブル400の記憶内容について説明する。アドレス管理テーブル400は、例えば、図2に示したメモリ202、ディスク204などの記憶装置により実現される。
【0041】
図4は、アドレス管理テーブル400の記憶内容の一例を示す説明図である。図4において、アドレス管理テーブル400は、ゲストID、ホスト物理アドレスおよびゲスト物理アドレスのフィールドを有し、各フィールドに情報を設定することで、アドレス管理情報(例えば、アドレス管理情報400-1,400-2)をレコードとして記憶する。
【0042】
ここで、ゲストIDは、情報処理装置101上で動作するゲストOS$(仮想マシンVM)を一意に識別する識別子である。ホスト物理アドレスは、iSCSIパケット300(図3参照)が格納されたNIC内のバッファのSCSIデータ301が格納されている先頭アドレスを示す。ゲスト物理アドレスは、ホスト物理アドレスをゲスト物理アドレスに変換したものである。
【0043】
(仮想マシン環境のアドレス空間)
つぎに、仮想マシン環境のアドレス空間について説明する。
【0044】
図5は、仮想マシン環境のアドレス空間を示す説明図である。図5において、仮想マシン環境のアドレス空間は、ゲスト仮想アドレス(GVA:Guest Virtual Address)と、ゲスト物理アドレス(GPA:Guest Physical Address)と、ホスト物理アドレス(HPA:Host Physical Address)との3階層のアドレス空間となる。
【0045】
ここで、ゲスト仮想アドレスは、ゲストOS$(図1参照)が管理する仮想アドレス空間である。ゲスト物理アドレスは、ゲストOS$が物理アドレスとして認識するものであり、ホストOS#(ハイパーバイザー)によって提供される仮想アドレス空間である。
【0046】
ホスト物理アドレスは、ホストOS#が認識する物理マシン(情報処理装置101)の物理アドレス空間である。ゲスト仮想アドレスからゲスト物理アドレスへの変換は、ゲストOS$により行われる。ゲスト物理アドレスからホスト物理アドレスへの変換は、ホストOS#により行われる。
【0047】
例えば、ホストOS#は、ホスト物理アドレスを仮想化して、ゲストOS$にゲスト物理アドレスとして見せる。ゲストOS$は、ゲスト物理アドレスを仮想化して、ゲストOS$(仮想マシンVM)上で動作するアプリケーション(以下、「アプリAp」という)にゲスト仮想アドレスとして見せる。
【0048】
(情報処理装置101の機能的構成例)
つぎに、実施の形態1にかかる情報処理装置101の機能的構成例について説明する。
【0049】
図6は、実施の形態1にかかる情報処理装置101の機能的構成例を示すブロック図である。図6において、情報処理装置101は、iSCSI操作部601と、アドレス変換部602と、ブロックデバイス作成部603と、記憶部610と、を含む。iSCSI操作部601~ブロックデバイス作成部603は第1の制御部、第2の制御部となる機能であり、具体的には、例えば、図2に示したメモリ202、ディスク204、可搬型記録媒体207などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、または、通信I/F205により、その機能を実現する。各機能部の処理結果は、例えば、メモリ202、ディスク204などの記憶装置に記憶される。記憶部610は、例えば、メモリ202、ディスク204などの記憶装置により実現される。より詳細に説明すると、例えば、iSCSI操作部601およびアドレス変換部602は、ホストOS#(第1の制御部)上で動作する。ブロックデバイス作成部603は、ハードウェアエミュレータ130(第2の制御部)上で動作する。記憶部610は、例えば、図4に示したアドレス管理テーブル400を記憶する。
【0050】
iSCSI操作部601は、物理記憶領域に格納された第1パケット(iSCSIパケット)から、SCSIデータが格納された物理記憶領域上のホスト物理アドレス(以下、「第1物理アドレス」という)を取得する。ここで、物理記憶領域は、IPネットワークを通じて伝送されるパケットを格納する。第1パケットは、例えば、IPネットワークを通じて伝送されるiSCSIパケットである。物理記憶領域は、例えば、ストレージ装置102(外部ストレージST)からのiSCSIパケットが格納されるNICのバッファである。
【0051】
iSCSIパケットは、IPネットワークを通じて伝送されるパケットであり、外部ストレージSTへのアクセスにかかる情報をカプセル化したパケットである。外部ストレージSTへのアクセスにかかるデータは、例えば、図3に示したSCSIデータ301(SCSIコマンドd1、データd2)である。
【0052】
具体的には、例えば、iSCSI操作部601は、iSCSIログイン処理を行う。iSCSIログイン処理は、例えば、イニシエータとターゲット(外部ストレージST)との間で認証等を行ってセッションを確立し、ターゲットを認識する処理である。iSCSI操作部601は、ログイン処理後、NICに到着するiSCSIパケットを監視する。
【0053】
ここで、iSCSIパケットがNICに到着した場合、iSCSI操作部601は、NICのバッファに格納されたiSCSIパケットから、SCSIデータが格納されたNICのバッファ上の第1物理アドレスを取得する。第1物理アドレスは、例えば、iSCSIパケット内のSCSIデータ301(図3参照)の先頭アドレスを示すホスト物理アドレスである。
【0054】
アドレス変換部602は、取得された第1物理アドレスを、ハードウェアエミュレータ130上で動作するゲストOS$が認識するゲスト物理アドレス(以下、「第2物理アドレス」という)に変換する。そして、アドレス変換部602は、取得された第1物理アドレスと、変換した第2物理アドレスとを対応付けて記憶部610に記憶する。
【0055】
具体的には、例えば、アドレス変換部602は、ホスト物理アドレスとゲスト物理アドレスとの対応関係を示す情報を参照して、取得された第1物理アドレスを対応する第2物理アドレスに変換する。そして、アドレス変換部602は、ゲストOS$のゲストIDと対応付けて、第1物理アドレスと第2物理アドレスとを、図4に示したアドレス管理テーブル400に記憶する。
【0056】
ブロックデバイス作成部603は、ゲストOS$が利用するブロックデバイスのデータ構造体を作成する。ここで、ブロックデバイスのデータ構造体は、ブロックデバイスにアクセスするために、ゲストOS$のメモリ上に格納される情報である。データ構造体は、ブロックデバイスごとに作成される。データ構造体には、例えば、ブロックデバイスを一意に識別するデバイスIDが設定される。
【0057】
以下の説明では、ブロックデバイスのデータ構造体を「ブロックデバイス構造体」と表記する場合がある。
【0058】
ブロックデバイス構造体が作成されると、ゲストOS$がブロックデバイスを認識できるようになる。そして、ブロックデバイス作成部603は、作成したブロックデバイス構造体のデータアドレス領域に、変換された第2物理アドレスを書き込む。データアドレス領域は、データへのポインタを格納する。
【0059】
例えば、Linux(登録商標)では、blkdevs構造体でブロックデバイス上のデータまでたどることができる。なお、ブロックデバイス構造体については、例えば、URL「https://linuxjf.osdn.jp/JFdocs/The-Linux-Kernel-9.html」を参照することができる。
【0060】
また、アドレス変換部602は、ゲストOS$のブロックデバイスのデータアドレス領域からの読み込みを検知した場合、記憶部610を参照して、データアドレス領域に格納された第2物理アドレス(ゲスト物理アドレス)に対応する第1物理アドレス(ホスト物理アドレス)を特定する。そして、アドレス変換部602は、特定した第1物理アドレスに基づいて、物理記憶領域からデータを読み込む。
【0061】
ここで、物理記憶領域には、例えば、外部ストレージSTへのSCSIコマンド(データの読み込み)に対するレスポンスである、外部ストレージSTから読み込まれたデータを含むiSCSIパケットが格納されている。アドレス変換部602は、読み込んだデータをアプリApへ転送する。
【0062】
具体的には、例えば、アドレス変換部602は、ゲストOS$上のアプリApによるブロックデバイスのデータアドレス領域からのゲスト物理アドレスの読み込みを検知した場合、アドレス管理テーブル400を参照して、ゲストOS$のゲストIDに対応するアドレス管理情報を検索する。
【0063】
そして、アドレス変換部602は、検索したアドレス管理情報を参照して、読み込まれたゲスト物理アドレスを対応するホスト物理アドレスに変換する。つぎに、アドレス変換部602は、NICのバッファ内の変換したホスト物理アドレスからデータを直接読み込む。そして、アドレス変換部602は、読み込んだデータをアプリApに転送する。
【0064】
なお、アプリApからブロックデバイスへのデータの書き込みを行う場合、アドレス変換部602は、例えば、アドレス管理テーブル400を参照して、書き込み先のゲスト物理アドレスをホスト物理アドレスに変換する。そして、アドレス変換部602は、NICのバッファ内の変換したホスト物理アドレスにデータを書き込む。この結果、例えば、当該データを含むiSCSIパケットがストレージ装置102に送信され、外部ストレージSTに当該データが書き込まれる。
【0065】
(ストレージシステム100の動作例)
つぎに、実施の形態1にかかるストレージシステム100の動作例について説明する。まず、図7図9を用いて、設定フェーズの動作例について説明する。ここでは、ゲストOS$を「ゲストOS1」とする。
【0066】
図7図9は、実施の形態1にかかるストレージシステム100の設定フェーズの動作例を示す説明図である。図7において、(1)iSCSI操作部601は、iSCSIログイン処理を行う。(2)iSCSI操作部601は、NIC701に到着するiSCSIログイン応答パケットを監視する。NIC701は、ログインしたゲストOS1に対応するiSCSIパケットを送受信するNICである。
【0067】
(3)iSCSI操作部601は、iSCSIログイン応答パケットがNIC701に到着した場合、NIC701のバッファに格納されたiSCSIログイン応答パケット内のSCSIデータの先頭アドレス(address_1)を取得する。このSCSIデータには、例えば、ログイン応答(レスポンス)が含まれる。また、iSCSI操作部601は、取得した先頭アドレス(address_1)をアドレス変換部602に送る。
【0068】
図8において、(4)アドレス変換部602は、先頭アドレス(address_1)をゲスト物理アドレス(ADDRESS_1)に変換し、アドレス管理テーブル400に格納する。(5)アドレス変換部602は、変換したゲスト物理アドレス(ADDRESS_1)をブロックデバイス作成部603に送る。
【0069】
図9において、(6)ブロックデバイス作成部603は、ゲストOS1のメモリ702内にブロックデバイス構造体を作成し、受け取ったゲスト物理アドレス(ADDRESS_1)をブロックデバイス構造体のデータアドレス領域に書き込む。これにより、ゲストOS1によってブロックデバイスが認識される。
【0070】
つぎに、図10を用いて、アクセスフェーズの動作例について説明する。
【0071】
図10は、実施の形態1にかかるストレージシステム100のアクセスフェーズの動作例を示す説明図である。図10において、(1)アプリApは、ブロックデバイスのデータアドレス領域(ADDRESS_1)から読み込む。
【0072】
(2)アドレス変換部602は、データアドレス領域(ADDRESS_1)からの読み込みを検知した場合、アドレス管理テーブル400を参照して、ゲスト物理アドレス(ADDRESS_1)を対応するホスト物理アドレス(address_1)に変換する。
【0073】
(3)アドレス変換部602は、NIC701のバッファ内のホスト物理アドレス(address_1)からデータを直接読み込む。そして、アドレス変換部602は、読み込んだデータをアプリAp(ゲストOS$)に転送する。
【0074】
これにより、仮想マシンVM(ゲストOS1)からiSCSIストレージを利用する環境において、ホストOS/ゲストOS間のバッファコピーが発生しないため、従来手段1(ホストOSがアタッチしたiSCSIデバイスをブロックデバイスとしてVMにアタッチする方式)に比べて、高速なアクセスを実現することができる。
【0075】
(情報処理装置101の処理手順)
つぎに、実施の形態1にかかる情報処理装置101の処理手順について説明する。まず、図11を用いて、情報処理装置101の設定処理手順について説明する。
【0076】
図11は、実施の形態1にかかる情報処理装置101の設定処理手順の一例を示すシーケンス図である。図11において、iSCSI操作部601は、管理者からのマウント指示を受け付ける(ステップS1101)。ここで、マウント指示は、仮想マシンVM(ゲストOS$)にiSCSIターゲットをマウント(アタッチ)するための指示である。iSCSIターゲットは、例えば、外部ストレージSTである。
【0077】
マウント指示には、仮想マシンVMを識別する情報(例えば、ゲストID)と、iSCSIターゲットを識別する情報(例えば、デバイス名、IPアドレス)が含まれる。具体的には、例えば、iSCSI操作部601は、不図示の入力装置を用いた管理者の操作入力により、または、不図示の管理者端末から受信することにより、マウント指示を受け付ける。
【0078】
iSCSI操作部601は、マウント指示を受け付けた場合、iSCSIターゲットへのiSCSIログイン処理を行う(ステップS1102)。つぎに、iSCSI操作部601は、iSCSIログイン応答パケットを待ち受ける(ステップS1103)。そして、iSCSI操作部601は、iSCSIログイン応答パケットがNICに到着した場合、NICのバッファに格納されたiSCSIログイン応答パケット内のSCSIデータの先頭アドレスを取得して、取得した先頭アドレスをアドレス変換部602に送信する(ステップS1104)。
【0079】
アドレス変換部602は、先頭アドレス(ホスト物理アドレス)を受信すると、受信したホスト物理アドレスをゲスト物理アドレスに変換する(ステップS1105)。つぎに、アドレス変換部602は、ゲストIDと、受信したホスト物理アドレスと、変換したゲスト物理アドレスとを対応付けて、アドレス管理テーブル400に格納する(ステップS1106)。ゲストIDは、例えば、マウント指示に含まれる。
【0080】
そして、アドレス変換部602は、変換したゲスト物理アドレスをブロックデバイス作成部603に送信する(ステップS1107)。ブロックデバイス作成部603は、ゲスト物理アドレスを受信すると、ゲストOS$のメモリ内にブロックデバイス構造体を作成する(ステップS1108)。そして、ブロックデバイス作成部603は、受信したゲスト物理アドレスをブロックデバイス構造体のデータアドレス領域に書き込む(ステップS1109)。
【0081】
これにより、iSCSIターゲットをブロックデバイスとして仮想マシンVM(ゲストOS$)に認識させることができる。
【0082】
つぎに、図12を用いて、情報処理装置101のアクセス処理手順について説明する。
【0083】
図12は、実施の形態1にかかる情報処理装置101のアクセス処理手順の一例を示すシーケンス図である。図12において、ブロックデバイス作成部603は、ゲストOS$上のアプリApからブロックデバイスへのアクセスを受け付ける(ステップS1201)。
【0084】
つぎに、ブロックデバイス作成部603は、当該ブロックデバイスのデバイスIDに対応するブロックデバイス構造体のデータアドレス領域のアドレス(ゲスト物理アドレス)を読み込んで、読み込んだアドレスをアドレス変換部602に送信する(ステップS1202)。この際、ブロックデバイス作成部603は、例えば、ゲストOS$のゲストIDをあわせて送信する。
【0085】
アドレス変換部602は、アドレス(ゲスト物理アドレス)を受信すると、アドレス管理テーブル400からゲストIDに対応するアドレス管理情報を検索し、検索したアドレス管理情報を参照して、受信したアドレス(ゲスト物理アドレス)を対応するホスト物理アドレスに変換する(ステップS1203)。
【0086】
つぎに、アドレス変換部602は、ハードウェア(NIC)1210のバッファ内のホスト物理アドレスからデータを読み込む(ステップS1204)。ハードウェア(NIC)1210は、iSCSIターゲットからiSCSIパケットが到着するNICである。そして、アドレス変換部602は、ブロックデバイス作成部603を介して、読み込んだデータをアプリApに転送する(ステップS1205)。
【0087】
これにより、仮想マシンVM(ゲストOS$)からiSCSIストレージを利用する環境において、高速なアクセスを実現することができる。
【0088】
以上説明したように、実施の形態1にかかる情報処理装置101によれば、ホストOS#により、NICのバッファに格納されたiSCSIパケットのうち、SCSIデータが格納されたバッファ上のホスト物理アドレスを取得し、取得したホスト物理アドレスを、ゲストOS$が認識するゲスト物理アドレスに変換し、取得したホスト物理アドレスと、変換したゲスト物理アドレスとを対応付けて記憶部610に記憶することができる。また、情報処理装置101によれば、ハードウェアエミュレータ130により、ゲストOS$が利用するブロックデバイス構造体を作成し、ブロックデバイス構造体のデータアドレス領域に、変換したゲスト物理アドレスを格納することができる。
【0089】
これにより、iSCSIターゲットをブロックデバイスとして仮想マシンVM(ゲストOS$)に認識させることができる。また、ゲストOS$が認識するブロックデバイスと、iSCSIターゲットからのiSCSIパケットが格納されるNICのバッファとの対応関係を記憶することができる。
【0090】
また、情報処理装置101によれば、ホストOS#により、ゲストOS$のブロックデバイスのデータアドレス領域からの読み込みを検知した場合、記憶部610を参照して、データアドレス領域に格納されたゲスト物理アドレスに対応するホスト物理アドレスを特定し、NICのバッファ上の特定したホスト物理アドレスからデータを読み込み、読み込んだデータをゲストOS$に転送することができる。
【0091】
これにより、仮想マシンVM(ゲストOS$)からiSCSIストレージを利用する環境において、ホストOS/ゲストOS間のバッファコピーが発生しないため、従来手段1に比べて、高速なアクセスを実現することができる。
【0092】
また、情報処理装置101によれば、ホストOS#により、ゲストOSに関するiSCSIストレージ(外部ストレージST)へのログイン処理を実行し、iSCSIストレージからのログイン応答パケットがNICのバッファに格納された場合に、ログイン応答パケット(iSCSIパケット)のうち、SCSIデータが格納されたバッファ上のホスト物理アドレスを取得することができる。
【0093】
これにより、ゲストOS$に関するiSCSIストレージへのログイン処理をインフラ側で行って、ストレージ接続管理を行うことができる。また、ユーザ側でログイン処理を行わなくてよいため、ユーザの利便性を向上させることができる。
【0094】
これらのことから、情報処理装置101によれば、仮想マシンVM(ゲストOS$)からiSCSIストレージを利用する環境において、従来手段1(ホストOSがアタッチしたiSCSIデバイスをブロックデバイスとして仮想マシンにアタッチする方式)よりも高速で、かつ、従来手段2(PCIパススルーによって仮想マシンに直接iSCSIデバイスをアタッチする方式)では実現できなかった、インフラからの接続管理を行うことができる。
【0095】
(実施の形態2)
つぎに、実施の形態2にかかる情報処理装置101について説明する。実施の形態2では、iSCSIデバイスを利用する場合において、ゲストOS$がブロックデバイスへのDMA(Direct Memory Access)転送要求を行う場合について説明する。なお、実施の形態1で説明した箇所と同様の箇所については、図示および説明を省略する。
【0096】
(DMAアドレス管理テーブル1300の記憶内容)
まず、ホストOS#が有するDMAアドレス管理テーブル1300の記憶内容について説明する。DMAアドレス管理テーブル1300は、例えば、図2に示したメモリ202、ディスク204などの記憶装置により実現される。
【0097】
図13は、DMAアドレス管理テーブル1300の記憶内容の一例を示す説明図である。図13において、DMAアドレス管理テーブル1300は、ゲストID、SCSIゲスト物理アドレス、iSCSIゲスト物理アドレスおよびデバイスIDのフィールドを有する。各フィールドに情報を設定することで、DMAアドレス管理情報(例えば、DMAアドレス管理情報1300-1,1300-2)がレコードとして記憶される。
【0098】
ここで、ゲストIDは、情報処理装置101上で動作するゲストOS$(仮想マシンVM)を一意に識別する識別子である。SCSIゲスト物理アドレスは、ゲストOS$に確保されたバッファに格納されるiSCSIパケットのうち、SCSIデータが格納されるバッファ上の先頭アドレスを示す。
【0099】
例えば、SCSIゲスト物理アドレスは、iSCSIゲスト物理アドレスからのオフセットを示す情報であってもよい。iSCSIゲスト物理アドレスは、ゲストOS$に確保されたiSCSIパケットを格納するためのバッファの先頭アドレスを示す。デバイスIDは、DMA転送を要求するハードウェアを一意に識別するデバイスIDである。
【0100】
(情報処理装置101の機能的構成例)
つぎに、実施の形態2にかかる情報処理装置101の機能的構成例について説明する。
【0101】
図14は、実施の形態2にかかる情報処理装置101の機能的構成例を示すブロック図である。図14において、情報処理装置101は、iSCSI操作部1401と、ブロックデバイス作成部1402と、DMA変換部1403と、記憶部1410と、を含む。iSCSI操作部1401~ブロックデバイス作成部1402は第1の制御部、第2の制御部となる機能であり、具体的には、例えば、図2に示したメモリ202、ディスク204、可搬型記録媒体207などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、または、通信I/F205により、その機能を実現する。各機能部の処理結果は、例えば、メモリ202、ディスク204などの記憶装置に記憶される。記憶部1410は、例えば、メモリ202、ディスク204などの記憶装置により実現される。より詳細に説明すると、例えば、iSCSI操作部1401およびDMA変換部1403は、ホストOS#(第1の制御部)上で動作する。ブロックデバイス作成部1402は、ハードウェアエミュレータ130(第2の制御部)上で動作する。記憶部1410は、例えば、図13に示したDMAアドレス管理テーブル1300を記憶する。
【0102】
iSCSI操作部1401は、iSCSIログイン処理を行う。iSCSI操作部1401は、ログイン処理後、NIC(物理記憶領域)に到着するiSCSIパケットを監視する。ここで、iSCSIパケット(iSCSIログイン応答パケット)がNICに到着した場合、iSCSI操作部1401は、ブロックデバイス作成部1402にゲストOS向けのブロックデバイス構造体の作成を依頼する。
【0103】
ブロックデバイス作成部1402は、ブロックデバイス構造体の作成の依頼を受け付けると、ゲストOS$が利用するブロックデバイス構造体を作成する。また、ブロックデバイス作成部1402は、ゲストOS$のメモリ内にiSCSIパケットサイズのバッファを作成する。iSCSIパケットサイズは、例えば、予め決められていてもよく、また、ブロックデバイス作成部1402がiSCSI操作部1401に問い合わせることにより取得されることにしてもよい。
【0104】
また、ブロックデバイス作成部1402は、iSCSIパケットが格納されるバッファ上の第1ゲスト物理アドレスを取得する。第1ゲスト物理アドレスは、例えば、ゲストOS$のメモリ内に格納されたiSCSIパケットの先頭アドレスを示すゲスト物理アドレスである。
【0105】
また、ブロックデバイス作成部1402は、作成したバッファに格納されるiSCSIパケットのうち、SCSIデータが格納されるバッファ上の第2ゲスト物理アドレスを取得する。第2ゲスト物理アドレスは、例えば、iSCSIパケット内のSCSIデータの先頭アドレスを示すゲスト物理アドレスである。
【0106】
より詳細に説明すると、例えば、第2ゲスト物理アドレスは、iSCSIパケットを格納するためのバッファの先頭アドレス(第1ゲスト物理アドレス)からのオフセットを示す情報である。第2ゲスト物理アドレス(オフセット)は、例えば、予め決められていてもよく、また、ブロックデバイス作成部1402がiSCSI操作部1401に問い合わせることにより取得されることにしてもよい。
【0107】
そして、ブロックデバイス作成部1402は、作成したブロックデバイス構造体のデータアドレス領域に、取得された第2ゲスト物理アドレスを書き込む。ブロックデバイス構造体が作成されると、ゲストOS$によってブロックデバイスが認識される。また、ブロックデバイス構造体のデータアドレス領域に書き込まれた第2ゲスト物理アドレスは、例えば、当該ブロックデバイスを転送元とするDMA転送の転送先のメモリのアドレスとしてゲストOS$に認識される。
【0108】
DMA変換部1403は、取得された第1ゲスト物理アドレスと、取得された第2ゲスト物理アドレスと、物理記憶領域を有するデバイスとを対応付けて記憶部1410に記憶する。物理記憶領域を有するデバイスは、例えば、iSCSIログイン応答パケットが到着したNICである。例えば、DMA変換部1403は、iSCSI操作部1401を介して、ブロックデバイス作成部1402から、第1ゲスト物理アドレスと第2ゲスト物理アドレスとを受信する。
【0109】
具体的には、例えば、DMA変換部1403は、デバイスIDと、第1ゲスト物理アドレス(iSCSIゲスト物理アドレス)と、第2ゲスト物理アドレス(SCSIゲスト物理アドレス)とを対応付けて、DMAアドレス管理テーブル1300に格納する。デバイスIDは、DMA転送を要求するハードウェアのデバイスIDであり、例えば、iSCSIログイン応答パケットが到着したNICである。DMA転送を要求するハードウェアは、例えば、外部ストレージST(ストレージ装置102)からのiSCSIパケットを受信するNICである。
【0110】
また、DMA変換部1403は、ゲストOS$からのDMA転送要求を検出する。ここで、DMAは、コンピューターシステム内でのデータ転送方法の一つであり、CPUを介さずに、周辺機器やメモリなどの間のデータ転送を直接行う方式である。DMA転送要求は、DMAコントローラ(例えば、後述の図15に示すDMAコントローラ1510)にDMA転送を要求するものである。
【0111】
DMAコントローラは、DMA転送の制御を行う専用回路である。DMAコントローラは、物理ハードウェア140(図1参照)に含まれ、CPU201、メモリ202、周辺機器などに接続される。DMA転送要求には、例えば、DMA転送先アドレスと、ブロックデバイスのデバイスIDとが含まれる。DMA転送先アドレスは、DMA転送先のアドレス(第2ゲスト物理アドレス:SCSIゲスト物理アドレス)である。ブロックデバイスは、DMA転送元となるブロックデバイスである。
【0112】
DMA変換部1403は、DMA転送要求を検出すると、記憶部1410を参照して、DMA転送要求に含まれるDMA転送先である第2ゲスト物理アドレス(SCSIゲスト物理アドレス)に対応する第1ゲスト物理アドレス(iSCSIゲスト物理アドレス)およびデバイスを特定する。
【0113】
具体的には、例えば、DMA変換部1403は、DMA転送要求を検出すると、DMAアドレス管理テーブル1300を参照して、DMA転送要求に含まれるDMA転送先であるSCSIゲスト物理アドレスに対応するDMAアドレス管理情報を検索する。つぎに、DMA変換部1403は、検索したDMAアドレス管理情報を参照して、デバイスIDとiSCSIゲスト物理アドレスとを特定する。
【0114】
そして、DMA変換部1403は、特定したデバイスIDとiSCSIゲスト物理アドレスとをDMAコントローラに通知する。具体的には、例えば、DMA変換部1403は、デバイスID(DMA転送元)とiSCSIゲスト物理アドレス(DMA転送先)とを含むDMA転送要求をDMAコントローラに通知する。
【0115】
DMAコントローラは、デバイスIDとiSCSIゲスト物理アドレスとを受信すると、デバイスIDから識別されるDMA転送元のデータを読み出す。DMA転送元は、DMA転送を要求するハードウェアであり、例えば、外部ストレージST(ストレージ装置102)からのiSCSIパケットを受信するNICである。
【0116】
DMAコントローラは、Vt-d機構により、iSCSIゲスト物理アドレスをマシン物理アドレスに変換する。ここで、Vt-d機構とは、高速なI/Oを仮想マシンVMに提供することを目的とした、I/O仮想化方式(Intel Virtualization Technology for Directed I/O)である。
【0117】
ゲストOSがDMAコントローラにDMA転送要求を出すと、メモリとデバイス間でDMAによりデータ転送を行う。この際、ゲスト物理アドレスが通知されるため、Vt-d機構がホスト物理アドレスに変換することで、予め作成されたゲストOSのメモリ空間にDMA転送することが可能となる。
【0118】
iSCSIゲスト物理アドレスから変換されるマシン物理アドレスは、DMA転送先となるマシン物理アドレス(予め作成されたゲストOS$のメモリ空間)である。そして、DMAコントローラは、変換したマシン物理アドレスが示すゲストOS$のバッファに、読み出したデータをDMA転送する。
【0119】
この結果、iSCSIデバイスのデータ(NICのバッファ内のデータ)が、予め作成されたゲストOS$のメモリ空間にDMA転送される。
【0120】
なお、実施の形態2にかかる情報処理装置101は、実施の形態1にかかる情報処理装置101が有する機能(例えば、iSCSI操作部601、アドレス変換部602、ブロックデバイス作成部603、記憶部610)と同一の機能を有する。ただし、実施の形態2にかかる情報処理装置101は、実施の形態1にかかる情報処理装置101が有する機能を有さないことにしてもよい。
【0121】
(ストレージシステム100の動作例)
つぎに、実施の形態2にかかるストレージシステム100の動作例について説明する。まず、図15図17を用いて、設定フェーズの動作例について説明する。ここでは、ゲストOS$を「ゲストOS1」とする。
【0122】
図15図17は、実施の形態2にかかるストレージシステム100の設定フェーズの動作例を示す説明図である。図15において、(1)iSCSI操作部1401は、iSCSIログイン処理を行う。(2)iSCSI操作部1401は、NIC1501に到着するiSCSIログイン応答パケットを監視する。NIC1501は、ログインしたゲストOS1に対応するiSCSIパケットを送受信するNICである。
【0123】
(3)iSCSI操作部1401は、iSCSIログイン応答パケットがNIC1501に到着した場合、ブロックデバイス作成部1402にゲストOS1向けのブロックデバイス構造体の作成を依頼する。ここでは、NIC1501のデバイスIDを「NIC0」とする。
【0124】
図16において、(4)ブロックデバイス作成部1402は、ゲストOS1向けのブロックデバイス構造体の作成の依頼を受け付けると、ゲストOS1のメモリ1502内に、ゲストOS1が利用するブロックデバイス構造体を作成する。
【0125】
(5)ブロックデバイス作成部1402は、ゲストOS1のメモリ1502内にiSCSIパケットサイズのバッファを作成し、SCSIデータの先頭アドレス(Address_10)をブロックデバイス構造体のデータアドレス領域に格納する。これにより、ゲストOS1によってブロックデバイスが認識される。また、ゲストOS1によって、ブロックデバイス構造体のデータアドレス領域に書き込まれたゲスト物理アドレス(Address_10)が、当該ブロックデバイスを転送元とするDMA転送の転送先のメモリのアドレスとして認識される。
【0126】
図17において、(6)ブロックデバイス作成部1402は、デバイスID(NIC0)とiSCSIバッファのアドレス(address_10)とSCSIデータのアドレス(Address_10)をiSCSI操作部1401に返信する。iSCSI操作部1401は、デバイスID(NIC0)とiSCSIバッファのアドレス(address_10)とSCSIデータのアドレス(Address_10)をDMA変換部1403に転送する。
【0127】
(7)DMA変換部1403は、デバイスID(NIC0)とiSCSIバッファのアドレス(address_10)とSCSIデータのアドレス(Address_10)とを対応付けて、DMAアドレス管理テーブル1300に格納する。これにより、ブロックデバイス(SCSIゲスト物理アドレス、iSCSIゲスト物理アドレス)とNIC1501(デバイスID)との対応関係が記憶される。
【0128】
つぎに、図18を用いて、アクセスフェーズの動作例について説明する。
【0129】
図18は、実施の形態2にかかるストレージシステム100のアクセスフェーズの動作例を示す説明図である。図18において、(1)DMA変換部1403は、ゲストOS1からDMAコントローラ1510へのDMA転送要求1520を検出する。DMA転送要求1520には、DMA転送先アドレス「Address_10」と、転送元であるブロックデバイスのデバイスID「BLK0」とが含まれる。
【0130】
(2)DMA変換部1403は、DMA転送要求1520を検出すると、DMAアドレス管理テーブル1300を参照して、DMA転送要求1520に含まれるDMA転送先アドレス「Address_10」に対応するDMAアドレス管理情報1300-1を検索する。DMA変換部1403は、検索したDMAアドレス管理情報1300-1を参照して、デバイスID「NIC0」とiSCSIゲスト物理アドレス「address_10」とを特定する。
【0131】
(3)DMA変換部1403は、特定したデバイスID「NIC0」とiSCSIゲスト物理アドレス「address_10」とをDMAコントローラ1510に通知する。
【0132】
(4)DMAコントローラ1510は、デバイスID「NIC0」とiSCSIゲスト物理アドレス「address_10」とを受信すると、デバイスID「NIC0」から識別されるNIC1501のバッファからデータを読み出す。DMAコントローラ1510は、Vt-d機構1511により、iSCSIゲスト物理アドレス「address_10」をマシン物理アドレスに変換する。DMAコントローラ1510は、変換したマシン物理アドレスが示すゲストOS1のバッファに、読み出したデータをDMA転送する。
【0133】
これにより、ゲストOS1からのブロックデバイスへのDMA転送要求1520をNIC1501へのDMA転送要求に変換して、NIC1501のデータをゲストOS1のバッファにDMA転送することができる。
【0134】
(情報処理装置101の処理手順)
つぎに、実施の形態2にかかる情報処理装置101の処理手順について説明する。まず、図19を用いて、情報処理装置101の設定処理手順について説明する。
【0135】
図19は、実施の形態2にかかる情報処理装置101の設定処理手順の一例を示すシーケンス図である。図19において、iSCSI操作部1401は、管理者からのマウント指示を受け付ける(ステップS1901)。iSCSI操作部1401は、マウント指示を受け付けた場合、iSCSIターゲットへのiSCSIログイン処理を行う(ステップS1902)。
【0136】
つぎに、iSCSI操作部1401は、iSCSIログイン応答パケットを待ち受ける(ステップS1903)。そして、iSCSI操作部1401は、iSCSIログイン応答パケットがNICに到着した場合、ブロックデバイス作成部1402にブロックデバイス作成依頼を送信する(ステップS1904)。ブロックデバイス作成依頼は、ゲストOS向けのブロックデバイス構造体の作成を依頼するものである。
【0137】
ブロックデバイス作成部1402は、ブロックデバイス作成依頼を受信した場合、ゲストOS$が利用するブロックデバイス構造体を作成する(ステップS1905)。つぎに、ブロックデバイス作成部1402は、ゲストOS$のメモリ内にiSCSIパケット格納バッファを作成し、SCSIデータの先頭アドレスをブロックデバイス構造体のデータアドレスに格納する(ステップS1906)。iSCSIパケット格納バッファは、iSCSIパケットサイズのバッファである。
【0138】
そして、ブロックデバイス作成部1402は、デバイスIDとiSCSIバッファのアドレスとSCSIデータのアドレスをiSCSI操作部1401に返信する(ステップS1907)。iSCSI操作部1401は、デバイスIDとiSCSIバッファのアドレスとSCSIデータのアドレスをDMA変換部1403に転送する。
【0139】
DMA変換部1403は、デバイスIDとiSCSIバッファのアドレスとSCSIデータのアドレスとを対応付けて、DMAアドレス管理テーブル1300に格納する(ステップS1908)。これにより、ブロックデバイス(SCSIゲスト物理アドレス、iSCSIゲスト物理アドレス)と、NIC(デバイスID)との対応関係を記憶することができる。
【0140】
つぎに、図20を用いて、情報処理装置101のアクセス処理手順について説明する。
図20は、実施の形態2にかかる情報処理装置101のアクセス処理手順の一例を示すシーケンス図である。図20において、DMA変換部1403は、ゲストOS$からDMAコントローラ1510へのDMA転送要求を検出する(ステップS2001)。DMA転送要求には、デバイスID(ブロックデバイス)と、転送先アドレス(SCSIゲスト物理アドレス)とが含まれる。
【0141】
つぎに、DMA変換部1403は、DMAアドレス管理テーブル1300を参照して、転送先アドレスに対応するDMAアドレス管理情報を検索し、検索したDMAアドレス管理情報を参照して、デバイスID(NIC)と転送先アドレス(iSCSIゲスト物理アドレス)とを特定する(ステップS2002)。そして、DMA変換部1403は、特定したデバイスID(NIC)と転送先アドレス(iSCSIゲスト物理アドレス)とをDMAコントローラ1510に通知する(ステップS2003)。
【0142】
DMAコントローラ1510は、Vt-d機構1511により、転送先アドレス(iSCSIゲスト物理アドレス)を転送先アドレス(マシン物理アドレス)に変換し、デバイスIDから識別されるデバイス1501(例えば、図15に示したNIC1501に相当)にDMA転送指示を送信する(ステップS2004)。
【0143】
デバイス1501は、DMA転送指示を受信すると、メモリ内の指定された転送先アドレス(マシン物理アドレス)宛に、バッファのデータを転送する(ステップS2005)。メモリ転送が完了すると、デバイス1501からDMAコントローラ1510にメモリ転送完了通知が送信される。DMAコントローラ1510は、メモリ転送完了通知を受信すると、ゲストOS$にDMA転送完了通知を送信する。
【0144】
これにより、ゲストOS$からのブロックデバイスへのDMA転送要求をデバイス1501(NIC)へのDMA転送要求に変換して、デバイス1501のデータをゲストOS$のバッファにDMA転送することができる。
【0145】
以上説明したように、実施の形態2にかかる情報処理装置101によれば、ホストOS#により、ゲストOS$に関するiSCSIストレージ(外部ストレージST)へのログイン処理を実行し、iSCSIストレージからのログイン応答パケットがNICのバッファに格納された場合に、ゲストOS$が利用するブロックデバイス構造体の作成をハードウェアエミュレータ130に依頼することができる。また、情報処理装置101によれば、ハードウェアエミュレータ130により、ホストOS#からの依頼に応じてブロックデバイス構造体を作成し、ゲストOS$のメモリ内にiSCSIパケットのサイズ分のバッファを作成することができる。また、情報処理装置101によれば、ハードウェアエミュレータ130により、バッファの先頭アドレスを示す第1ゲスト物理アドレスと、iSCSIパケットのうちSCSIデータが格納されるバッファ上の先頭アドレスを示す第2ゲスト物理アドレスとを取得し、第2ゲスト物理アドレスをブロックデバイス構造体のデータアドレス領域に格納することができる。また、情報処理装置101によれば、ホストOS#により、ハードウェアエミュレータ130によって取得された第1ゲスト物理アドレスと第2ゲスト物理アドレスとデバイスとを対応付けて記憶部1410に記憶することができる。デバイスは、例えば、ログイン応答パケットが到着したNICである。
【0146】
これにより、ブロックデバイス(SCSIゲスト物理アドレス、iSCSIゲスト物理アドレス)と、NIC(デバイスID)との対応関係を記憶することができる。
【0147】
また、情報処理装置101によれば、ホストOS#により、ゲストOS$からDMAコントローラ1510への、ブロックデバイスを転送元とし、データアドレス領域に格納された第2ゲスト物理アドレスを転送先とするDMA転送要求を検出した場合、記憶部1410を参照して、第2ゲスト物理アドレスに対応する第1ゲスト物理アドレスおよびデバイス(NIC)を特定し、特定したデバイスを転送元とし、特定した第1ゲスト物理アドレスを転送先とするDMA転送要求をDMAコントローラ1510に通知することができる。
【0148】
これにより、ゲストOS$からのブロックデバイスへのDMA転送要求をNICへのDMA転送要求に変換して、NICのバッファのデータをゲストOS$のバッファにDMA転送することができる。
【0149】
なお、本実施の形態で説明したアクセス制御方法は、予め用意されたプログラムを情報処理装置等のコンピュータで実行することにより実現することができる。本アクセス制御プログラムは、ハードディスク、フレキシブルディスク、CD-ROM、DVD、USBメモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本アクセス制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【0150】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0151】
(付記1)ネットワークを介してストレージデバイスと接続される情報処理装置であって、
自装置で動作するゲストOSからの前記ストレージデバイスへのアクセスにかかる情報をカプセル化したパケットを格納する物理記憶領域に格納された第1パケットのうち、前記アクセスにかかる情報が格納された前記物理記憶領域上のホスト物理アドレスを取得し、取得した前記ホスト物理アドレスを、前記ゲストOSが認識するゲスト物理アドレスに変換し、前記ホスト物理アドレスと前記ゲスト物理アドレスとを対応付けて記憶部に記憶する第1の制御部と、
前記ゲストOSが利用するブロックデバイスのデータ構造体を作成し、前記データ構造体のデータアドレス領域に、前記第1の制御部によって変換された前記ゲスト物理アドレスを格納する第2の制御部と、を有し、
前記第1の制御部は、
前記データアドレス領域からの読み込みを検知した場合、前記記憶部を参照して、前記データアドレス領域に格納された前記ゲスト物理アドレスに対応する前記ホスト物理アドレスを特定し、前記物理記憶領域上の特定した前記ホスト物理アドレスからデータを読み込み、読み込んだ前記データを前記ゲストOSに転送する、
ことを特徴とする情報処理装置。
【0152】
(付記2)前記第1の制御部は、
前記ゲストOSに関する前記ストレージデバイスへのログイン処理を実行し、
前記ストレージデバイスからのログイン応答パケットが前記物理記憶領域に格納された場合に、前記ログイン応答パケットのうち、前記アクセスにかかる情報が格納された前記物理記憶領域上のホスト物理アドレスを取得する、
ことを特徴とする付記1に記載の情報処理装置。
【0153】
(付記3)前記アクセスにかかる情報は、SCSIのコマンドとレスポンスとを含み、
前記パケットは、iSCSIパケットである、
ことを特徴とする付記1または2に記載の情報処理装置。
【0154】
(付記4)前記物理記憶領域は、前記ネットワークを介して前記ストレージデバイスとの間で伝送されるパケットを送受信するNICのバッファである、
ことを特徴とする付記1~3のいずれか一つに記載の情報処理装置。
【0155】
(付記5)前記第1の制御部は、
前記ゲストOSに関する前記ストレージデバイスへのログイン処理を実行し、
前記ストレージデバイスからのログイン応答パケットが前記物理記憶領域に格納された場合に、前記ゲストOSが利用するブロックデバイスのデータ構造体の作成を前記第2の制御部に依頼し、
前記第2の制御部は、
前記依頼に応じて前記ブロックデバイスのデータ構造体を作成し、
前記ゲストOSのメモリ内に前記パケットのサイズ分のバッファを作成し、
前記バッファの先頭アドレスを示す第1ゲスト物理アドレスと、前記パケットのうち前記ストレージデバイスへのアクセスにかかる情報が格納される前記バッファ上の先頭アドレスを示す第2ゲスト物理アドレスとを取得し、
前記第2ゲスト物理アドレスを前記データ構造体のデータアドレス領域に格納し、
前記第1の制御部は、
前記第2の制御部によって取得された前記第1ゲスト物理アドレスと前記第2ゲスト物理アドレスと前記物理記憶領域を有するデバイスとを対応付けて第2の記憶部に記憶し、
前記ゲストOSからDMAコントローラへの、前記ブロックデバイスを転送元とし、前記データアドレス領域に格納された前記第2ゲスト物理アドレスを転送先とするDMA転送要求を検出した場合、前記記憶部を参照して、前記第2ゲスト物理アドレスに対応する前記第1ゲスト物理アドレスおよび前記デバイスを特定し、
特定した前記デバイスを転送元とし、特定した前記第1ゲスト物理アドレスを転送先とするDMA転送要求を前記DMAコントローラに通知する、
ことを特徴とする付記1~4のいずれか一つに記載の情報処理装置。
【0156】
(付記6)ネットワークを介してストレージデバイスと接続されるコンピュータに、
前記コンピュータ上で動作するゲストOSからの前記ストレージデバイスへのアクセスにかかる情報をカプセル化したパケットを格納する物理記憶領域に格納された第1パケットのうち、前記アクセスにかかる情報が格納された前記物理記憶領域上のホスト物理アドレスを取得し、
取得した前記ホスト物理アドレスを、前記ゲストOSが認識するゲスト物理アドレスに変換して、前記ホスト物理アドレスと前記ゲスト物理アドレスとを対応付けて記憶部に記憶し、
前記ゲストOSが利用するブロックデバイスのデータ構造体を作成し、前記データ構造体のデータアドレス領域に、変換された前記ゲスト物理アドレスを格納し、
前記データアドレス領域からの読み込みを検知した場合、前記記憶部を参照して、前記データアドレス領域に格納された前記ゲスト物理アドレスに対応する前記ホスト物理アドレスを特定し、
前記物理記憶領域上の特定した前記ホスト物理アドレスからデータを読み込み、読み込んだ前記データを前記ゲストOSに転送する、
処理を実行させることを特徴とするアクセス制御プログラム。
【符号の説明】
【0157】
100 ストレージシステム
101 情報処理装置
102 ストレージ装置
110 ネットワーク
130 ハードウェアエミュレータ
140 物理ハードウェア
200 バス
201 CPU
202 メモリ
203 ディスクドライブ
204 ディスク
205 通信I/F
206 可搬型記録媒体I/F
207 可搬型記録媒体
300 iSCSIパケット
301 SCSIデータ
400 アドレス管理テーブル
601,1401 iSCSI操作部
602 アドレス変換部
603,1402 ブロックデバイス作成部
610,1410 記憶部
701,1501 NIC
1300 DMAアドレス管理テーブル
1403 DMA変換部
1510 DMAコントローラ
1511 Vt-d機構
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20