(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-19
(45)【発行日】2022-12-27
(54)【発明の名称】入出力実行装置、デバイス仮想化システム、入出力実行方法、および、プログラム
(51)【国際特許分類】
G06F 13/12 20060101AFI20221220BHJP
G06F 13/14 20060101ALI20221220BHJP
G06F 13/10 20060101ALI20221220BHJP
G06F 13/36 20060101ALI20221220BHJP
G06F 12/02 20060101ALI20221220BHJP
【FI】
G06F13/12 330P
G06F13/14 320
G06F13/10 330C
G06F13/36 310E
G06F12/02 570M
(21)【出願番号】P 2019560539
(86)(22)【出願日】2018-12-19
(86)【国際出願番号】 JP2018046829
(87)【国際公開番号】W WO2019124450
(87)【国際公開日】2019-06-27
【審査請求日】2020-05-25
(31)【優先権主張番号】P 2017243743
(32)【優先日】2017-12-20
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100109313
【氏名又は名称】机 昌彦
(74)【代理人】
【識別番号】100149618
【氏名又は名称】北嶋 啓至
(72)【発明者】
【氏名】鈴木 順
(72)【発明者】
【氏名】林 佑樹
【審査官】吉田 歩
(56)【参考文献】
【文献】国際公開第2013/150792(WO,A1)
【文献】特表2004-528656(JP,A)
【文献】辻 聡 ほか,“ルートコンプレックスの仮想化によるCPUとI/OデバイスツリーのPCI-Expressプロトコルレベルでの分離”,第78回(平成28年)全国大会講演論文集(1),一般社団法人情報処理学会,2016年03月10日,pp.1-23~1ー24
(58)【調査した分野】(Int.Cl.,DB名)
G06F 13/12
G06F 13/14
G06F 13/10
G06F 13/36
G06F 12/02
(57)【特許請求の範囲】
【請求項1】
NIC(Network Interface Card)を介して接続された入出力デバイスに割当てられている、仮想空間の領域にアクセスすることで当該入出力デバイスに入出力コマンドを発行するデバイスドライバと、
前記領域を、アクセスされるとページフォルトを発生する状態に設定するデバイスメモリ管理手段と、
前記デバイスドライバが前記領域にアクセスしたときに発生する前記ページフォルトを検出して、前記入出力コマンドの発行を検出して、前記入出力コマンドを判別するアクセスインターセプト手段と、
入出力パケットを生成して、前記NICを介して接続された前記入出力デバイスに送信する入出力パケット送受信手段と、を備え、
前記入出力パケットは、前記入出力デバイスがローカル接続された場合に、前記入出力デバイスとローカル接続するブリッジが、前記入出力コマンドを受けると生成する入出力パケットと同じであ
り、
前記NICを介して接続された前記入出力デバイスに割り当てられている前記仮想空間の領域は、ローカル接続された入出力デバイスに割り当てられた前記仮想空間の領域と重ならない領域である入出力実行装置。
【請求項2】
前記デバイスドライバは、前記領域内の所定のアドレスに書き込む、または、前記所定のアドレスから読み込む命令を実行することにより前記入出力コマンドを発行し、
前記アクセスインターセプト手段は、前記ページフォルトを発生した前記命令の種類、及び、前記所定のアドレスに基づいて、前記入出力コマンドを判別する、請求項1に記載の入出力実行装置。
【請求項3】
指定された前記入出力パケットに格納されているデータを、指定されたアドレスのメモリに格納するDMA実行手段を、さらに備え、
前記入出力パケット送受信手段は、前記データと指定された前記アドレスを格納し、前記メモリへデータ書き込みを要求する前記入出力パケットを、前記入出力デバイスから受信すると前記DMA実行手段にDMAの要求を送信する、請求項1乃至請求項2の何れか一項に記載の入出力実行装置。
【請求項4】
前記入出力デバイスとローカル接続する前記ブリッジは、所定入出力バス規格に準拠したバスで前記入出力デバイスと接続されるブリッジである前記請求項1乃至請求項3の何れか一項の入出力実行装置と、
前記NICを介して接続された前記入出力デバイスと、前記入出力デバイスを通信網に接続するリモートブリッジとを備える入出力ボックスと、を含み、
前記入出力パケット送受信手段は、前記入出力コマンドに応じた前記所定入出力バス規格に準拠した前記入出力パケットを生成して前記通信網のフレームに搭載して送信し、前記リモートブリッジは、受信した前記通信網の前記フレームから前記入出力パケットを取り出して前記入出力デバイスに送信する、デバイス仮想化システム。
【請求項5】
前記入出力パケット送受信手段は、PCI Express規格に準拠した入出力パケットを生成する、請求項4に記載のデバイス仮想化システム。
【請求項6】
前記入出力実行装置は、接続されている前記入出力デバイスに割当てられている前記領域のアドレスを記憶するOSをさらに備え、
前記デバイスメモリ管理手段は、前記入出力実行装置の前記仮想空間から、前記入出力実行装置に接続されている前記入出力デバイスに割当てられていない前記領域を検索して、前記リモートブリッジに接続されている前記入出力デバイスに割当てる、請求項4に記載のデバイス仮想化システム。
【請求項7】
NIC(Network Interface Card)を介して接続された入出力デバイスに割当てられている仮想空間の領域を、アクセスされるとページフォルトを発生する状態に設定し、
前記領域をアクセスすることで当該入出力デバイスに入出力コマンドを発行し、
前記領域にアクセスしたときに発生する前記ページフォルトを検出して、前記入出力コマンドの発行を検出して、前記入出力コマンドを判別し、
入出力パケットを生成して、前記NICを介して接続された前記入出力デバイスに送信し、
前記入出力パケットは、前記入出力デバイスがローカル接続された場合に、前記入出力デバイスとローカル接続するブリッジが、前記入出力コマンドを受けると生成する入出力パケットと同じであ
り、
前記NICを介して接続された前記入出力デバイスに割り当てられている前記仮想空間の領域は、ローカル接続された入出力デバイスに割り当てられた前記仮想空間の領域と重ならない領域である入出力実行方法。
【請求項8】
前記領域内の所定のアドレスに書き込む、または、前記所定のアドレスから読み込む命令を実行することにより前記入出力コマンドを発行し、
前記ページフォルトを発生した前記命令の種類、及び、前記所定のアドレスに基づいて、前記入出力コマンドを判別する、請求項7に記載の入出力実行方法。
【請求項9】
NIC(Network Interface Card)を介して接続された入出力デバイスに割当てられている、仮想空間の領域にアクセスすることで当該入出力デバイスに入出力コマンドを発行するデバイスドライバ処理と、
前記領域を、アクセスされるとページフォルトを発生する状態に設定するデバイスメモリ管理処理と、前記領域にアクセスしたときに発生する前記ページフォルトを検出して、前記入出力コマンドの発行を検出して、前記入出力コマンドを判別するアクセスインターセプト処理と、
入出力パケットを生成して、前記NICを介して接続された前記入出力デバイスに送信する入出力パケット送受信処理と、をコンピュータに実行させ、
前記入出力パケットは、前記入出力デバイスがローカル接続された場合に、前記入出力デバイスとローカル接続するブリッジが、前記入出力コマンドを受けると生成する入出力パケットと同じであ
り、
前記NICを介して接続された前記入出力デバイスに割り当てられている前記仮想空間の領域は、ローカル接続された入出力デバイスに割り当てられた前記仮想空間の領域と重ならない領域である入出力実行プログラム。
【請求項10】
前記領域内の所定のアドレスに書き込む、または、前記所定のアドレスから読み込む命令を実行することにより前記入出力コマンドを発行する前記デバイスドライバ処理と、
前記ページフォルトを発生した前記命令の種類、及び、前記所定のアドレスに基づいて、前記入出力コマンドを判別する前記アクセスインターセプト処理をコンピュータに実行させる、請求項9に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、入出力実行装置、デバイス仮想化システム、入出力実行方法、および、入出力実行プログラム、特にブリッジに接続されていない入出力デバイスとブリッジに接続されている入出力デバイスの入出力を同様に実行できる装置、システム、方法、および、プログラムに関する。
【背景技術】
【0002】
特許文献1(第17-18頁、及び、
図3参照)は、入出力デバイスを仮想化するシステムの一例を開示する。
図9は、この入出力デバイス仮想化システムを簡単化して示す。この入出力デバイス仮想化システムはコンピュータであるホスト4と、ホスト4の内部で動作する仮想マシン401と、仮想マシンモニタ402と、ハードウェアであるCPU(Central Processing Unit)107と、メモリ108と、ブリッジ109と、入出力デバイス110とを含む。
【0003】
仮想マシン401は内部で仮想的なホストの環境を提供するソフトウェアである。仮想マシン401は入出力デバイス110を制御する入出力デバイスドライバ4012と、OS(Operating System) 4011と、入出力デバイス110を利用するアプリケーション101とを含む。仮想マシンモニタ402は仮想マシン401によるホスト4のハードウェア資源へのアクセスを仲介する。仮想マシン401と、仮想マシンモニタ402と、入出力デバイスドライバ4012と、OS4011と、アプリケーション101は、プログラムがメモリ108に記憶され、CPU107が読み込むことで実行される。
【0004】
このような構成を有する、入出力デバイス仮想化システムは次のように動作する。
【0005】
仮想マシンモニタ402は仮想マシン401のメモリ空間に入出力デバイス110をマップする。アプリケーション101は、入出力デバイスドライバ4012に入出力デバイス110の使用を要求する。入出力デバイスドライバ4012は、マップされたメモリ空間に対してメモリライトまたはリードを行う事で入出力コマンドを発行する。ブリッジ109は、発行された入出力コマンドに対応する入出力パケットを作成して入出力デバイス110に送信する。
【0006】
非特許文献1は、入出力インタフェース仕様である、PCI Express(登録商標)の規格を開示する。
【先行技術文献】
【特許文献】
【0007】
【非特許文献】
【0008】
【文献】A PCI Express Base Specification Revision 2.0, PCI-SIG, December 20, 2006
【発明の概要】
【発明が解決しようとする課題】
【0009】
特許文献1に記載された入出力デバイス仮想化システムは、ブリッジに接続されていない入出力デバイスを制御対象とすることが出来ない。すなわち、当該システムは、例えば、通信網を介してリモート接続されている入出力デバイスを仮想化できない。
【0010】
本発明は、上記課題を解決する、入出力実行装置や、デバイス仮想化システム等を提供することを目的とする。
【課題を解決するための手段】
【0011】
本発明の一つの実施の形態の入出力実行装置は、入出力デバイスに割当てられている、仮想空間の領域にアクセスすることで当該入出力デバイスに入出力コマンドを発行するデバイスドライバと、前記領域を、アクセスされるとページフォルトを発生する状態に設定するデバイスメモリ管理手段と、前記デバイスドライバが前記領域にアクセスしたときに発生する前記ページフォルトを検出して、前記入出力コマンドの発行を検出して、前記入出力コマンドを判別するアクセスインターセプト手段と、前記入出力デバイスを接続するブリッジが、判別された前記入出力コマンドを受けた場合に生成する入出力パケットを生成して、前記ブリッジではない接続手段で接続されている前記入出力デバイスに送信する入出力パケット送受信手段と、を備える。
【0012】
本発明の一つの実施の形態の入出力実行方法は、入出力デバイスに割当てられている仮想空間の領域を、アクセスされるとページフォルトを発生する状態に設定し、前記領域をアクセスすることで当該入出力デバイスに入出力コマンドを発行し、前記領域にアクセスしたときに発生する前記ページフォルトを検出して、前記入出力コマンドの発行を検出して、前記入出力コマンドを判別し、前記入出力デバイスを接続するブリッジが、判別された前記入出力コマンドを受けた場合に生成する入出力パケットを生成して、前記ブリッジではない接続手段で接続されている前記入出力デバイスに送信する。
【0013】
本発明の一つの実施の形態の入出力実行プログラムは、入出力デバイスに割当てられている、仮想空間の領域にアクセスすることで当該入出力デバイスに入出力コマンドを発行するデバイスドライバと、前記領域を、アクセスされるとページフォルトを発生する状態に設定するデバイスメモリ管理処理と、前記デバイスドライバが前記領域にアクセスしたときに発生する前記ページフォルトを検出して、前記入出力コマンドの発行を検出して、前記入出力コマンドを判別するアクセスインターセプト処理と、前記入出力デバイスを接続するブリッジが、判別された前記入出力コマンドを受けた場合に生成する入出力パケットを生成して、前記ブリッジではない接続手段で接続されている前記入出力デバイスに送信する入出力パケット送受信処理と、をコンピュータに実行させる。
【発明の効果】
【0014】
本発明にかかる入出力実行装置は、デバイスドライバ等が、ブリッジに接続されていない入出力デバイスとブリッジに接続されている入出力デバイスを同じインタフェースで入出力できるようにする。
【図面の簡単な説明】
【0015】
【
図1】
図1は、第一の実施の形態にかかるデバイス仮想化システム6の構成を示す図である。
【
図2】
図2は、入出力実行装置1の仮想メモリ空間5を示す図である。
【
図3】
図3は、ページアドレス変換テーブル15の構成を示す図である。
【
図4】
図4は、アドレス管理テーブル145の構成を示す図である。
【
図5】
図5は、デバイスメモリ管理部141が入出力デバイスA 32を入出力実行装置1のメモリ空間にマップする動作を示した流れ図である。
【
図6】
図6は、デバイスAドライバ13がリモート接続された入出力デバイスA 32に入出力コマンドを発行する動作を示した流れ図である。
【
図7】
図7は、入出力デバイスA 32が入出力実行装置1に入出力パケットを送信する動作を示した流れ図である。
【
図8】
図8は、本実施の形態の入出力実行装置1の構成図である。
【
図9】
図9は、特許文献1が開示する入出力デバイス仮想化システムを示す図である。
【発明を実施するための形態】
【0016】
<第一の実施の形態>
<全体構成>
図1は、本実施の形態にかかるデバイス仮想化システム6の構成を示す図である。デバイス仮想化システム6は、コンピュータである入出力実行装置1と、入出力ボックス3と、を含む。入出力ボックス3は、入出力実行装置1と通信網2経由でリモート接続される入出力デバイスA 32を収容する。通信網2は、例えばイーサネット(登録商標)であるが、IP(Internet Protocol)ネットワーク等、他のネットワークであっても良い。
【0017】
入出力実行装置1には、ネットワークの通信を行うための入出力デバイスであるNIC(Network Interface Card)22が接続されている。入出力実行装置1は、NIC22経由で通信網2に接続されている。入出力実行装置1には、通信網2を介さずに他の入出力デバイス、例えば、入出力デバイスB 21がローカル接続されていても良い。入出力デバイスA 32、及び入出力デバイスB 21は、各々、NICやストレージインタフェース、シリアルバスインタフェースである。また入出力デバイスB 21の数は2つ以上でも良い。
【0018】
入出力実行装置1は、アプリケーションプログラム11と、OS12と、デバイスAドライバ13と、ページアドレス変換テーブル15と、NICドライバ16とを含む。アプリケーションプログラム11は、業務処理プログラムであり、例えば、リモート接続された入出力デバイスA 32や、ローカル接続された入出力デバイスB 21を使用する。OS12は入出力実行装置1のオペレーティングシステムである。デバイスAドライバ13は、リモート接続した入出力デバイスA 32を制御する。アクセス擬似部14は、リモート接続した入出力デバイスA 32をローカル接続されているかのように擬似(仮想化)する。ページアドレス変換テーブル15は、ソフトウェアがアクセスする仮想アドレスを物理アドレスに変換するための対応情報を保持する。NICドライバ16は、NIC22を制御する。
【0019】
また、入出力実行装置1は、計算を行うCPU17と、プログラムやデータを記憶するメモリ18と、CPU17と入出力デバイスを接続するブリッジ19と、を含む。入出力実行装置1にローカル接続されている入出力デバイスB 21及びNIC22は、入出力実行装置1の入出力スロットに挿入されて、ブリッジ19と所定入出力バス規格、例えばPCI Express(登録商標、以下PCIeと略記)規格に準拠する入出力バスによって接続されている。入出力バスは、他の規格に準拠していても良い。
【0020】
アクセス擬似部14は、デバイスメモリ管理部141と、アクセスインターセプト部142と、入出力パケット送受信部144と、DMA(Direct Memory Access)実行部143と、アドレス管理テーブル145と、を含む。
【0021】
デバイスメモリ管理部141は、リモート接続した入出力デバイスをマップするメモリ空間を管理する。入出力実行装置1は、メモリマップト入出力方式を使用しており、CPU17は入出力デバイスに割当てられた特定のメモリ領域を対象に読み込み(メモリリード)、または、書き出し(メモリライト)の命令を実行することで、当該入出力デバイスに対し、入出力の指示を行う。例えば、ディスプレイ装置に輝度を指示したいときに、デバイスドライバ等のソフトウェアは、輝度の指定値CをA番地にメモリライトする。また、プリンタのステータス情報を得たいときに、デバイスドライバ等は、B番地をメモリリードする。
【0022】
以降、『入出力コマンド』は入出力の指示を意味する。『入出力コマンドの発行』は入出力コマンドを入出力デバイスに指示する為に行う、入出力コマンドに応じたメモリライト命令、または、メモリリード命令を実行することを意味する。例えば、ディスプレイ装置に対する輝度の指示は、『入出力コマンド』であり、輝度の指定値CをA番地にメモリライトする命令を実行することは『入出力コマンドの発行』である。さらに、プリンタに対するステータス情報取得の指示は、『入出力コマンド』であり、B番地をメモリリードする命令を実行することは『入出力コマンドの発行』である。類似の表現も同様である。また、『入出力デバイスをマップするメモリ空間』は、入出力デバイスに割り当てられたメモリ領域を、『入出力デバイスをマップする』は、入出力デバイスにメモリ領域を割り当てることを意味する。メモリアクセス、または、単にアクセスは、メモリライトとメモリリードの何れか一方、または両方を意味する。
【0023】
アクセスインターセプト部142は、デバイスAドライバ13が、リモート接続した入出力デバイスA 32へ入出力コマンドを発行したことを検出する。すなわち、アクセスインターセプト部142は、デバイスAドライバ13が、入出力コマンドの内容に応じたメモリアクセスの命令を実行したことを検出する。入出力パケット送受信部144は、発行された入出力コマンドをリモート接続した入出力デバイスA 32に送信する為の入出力パケットを作成して送信し、入出力デバイスA 32から受信した入出力パケットが指示する内容を判別する。
【0024】
DMA実行部143は、リモート接続した入出力デバイスA 32がDMAを要求した場合に、要求されたDMAを実行する。アドレス管理テーブル145は、入出力パケット送受信部144がリモート接続した入出力デバイスA 32に入出力パケットを送信する際に、宛先として使用するアドレスを保持する。なお、入出力パケットは、通信網2のフレームあるいはパケット(以降、単にフレーム)にペイロードとして搭載されて、すなわち、カプセル化されて、送受信される。なお、デカプセル化は、カプセル化とは逆に、フレームからペイロードとして搭載されている入出力パケットを取り出すことを意味する。カプセル化、デカプセル化は、I/O(Input/Output)パケットの暗号化/復号を含んでいても良い。
【0025】
ここで、アプリケーションプログラム11と、OS12と、デバイスAドライバ13と、NICドライバ16とは、メモリ18に記憶され、CPU17に読み込まれて実行されるプログラムである。
また、ページアドレス変換テーブル15と、アドレス管理テーブル145とは、メモリ18に記憶されるデータ構造である。
【0026】
デバイスメモリ管理部141と、アクセスインターセプト部142と、入出力パケット送受信部144と、DMA実行部143は、メモリ18に記憶されCPU17に読み込まれて実行される入出力実行プログラムであっても良いし、ファームウェアで制御される専用処理装置や論理回路であっても良い。
【0027】
入出力ボックス3は、前述した入出力デバイスA 32以外に、リモートブリッジ31を含む。リモートブリッジ31は、入出力デバイスA 32を通信網2に接続する。すなわち、入出力デバイスA 32は、リモートブリッジ31、通信網2、NIC22を経由して入出力実行装置1に接続されている。入出力デバイスA 32とリモートブリッジ31は、ブリッジ19と入出力デバイス間と同じ、例えば、PCIe規格に準拠する入出力バスによって接続されている。
【0028】
<仮想メモリ空間5の構成>
図2は、入出力実行装置1の仮想メモリ空間5を示す図である。メモリマップト方式の入出力実行装置1の仮想メモリ空間5には、ローカル接続されている入出力デバイスがマップされている領域が存在する。入出力実行装置1の構成が
図1に示す通りである場合、入出力実行装置1の仮想メモリ空間5には、入出力デバイスB 21に割当てられている領域であるマップ空間B 51と、NIC22に割当てられている領域であるマップ空間N 52が存在する。一方、リモート接続されている入出力デバイスA 32に割当てられている領域は存在しない。仮想メモリ空間5の割当情報は、OS12が管理する情報に登録されている。
【0029】
しかし、本実施の形態の入出力実行装置1においては、デバイスメモリ管理部141が、リモート接続した入出力デバイスA 32を仮想メモリ空間5にマップする。デバイスメモリ管理部141は、OS12が管理する情報を参照して、仮想メモリ空間5からローカル接続されている入出力デバイスに割当てられている領域、例えばマップ空間B 51とマップ空間N 52と重ならない領域を検索して入出力デバイスA 32に割当てる。この領域が、
図2におけるマップ空間A 53である。デバイスメモリ管理部141は、マップ空間A 53をOS12が管理する情報に登録することで入出力デバイスA 32を仮想メモリ空間5にマップする。
【0030】
<ページアドレス変換テーブル15の構成と役割>
デバイスメモリ管理部141はまた、入出力デバイスA 32をマップしたマップ空間A 53にCPU17がアクセスした場合にページフォルト割込みを発生するようにページアドレス変換テーブル15を設定する。入出力デバイスA 32のデバイスAドライバ13を実行するCPU17は、入出力コマンド発行時にマップ空間A 53の一部にアクセスする。アクセスされるマップ空間A 53の一部とは、入出力コマンド発行時にメモリアクセスされるアドレスの領域、すなわちメモリライトまたはメモリリード命令の宛先アドレス(オペランドのアドレス)の領域であり、例えば、上述した例におけるA番地とかB番地の領域である。アクセスインターセプト部142は、入出力コマンド発行時のメモリアクセス命令で発生するページフォルト割込みにより、入出力 コマンドの発行を検出できるようになる。
【0031】
図3は、ページアドレス変換テーブル15の構成を示す図である。ページアドレス変換テーブル15は、仮想メモリ空間5の仮想アドレスを物理アドレスに変換する情報を保持する。
図3に示すように仮想アドレスはインデックスオフセット、ページテーブルオフセット、ページ内オフセットから構成される。ページアドレス変換テーブル15は、インデックス部151と、ページテーブル152とを含む。インデックス部151には、仮想アドレスのインデックスオフセットから一意に算出される値が格納されており、この値は、当該インデックスオフセットを共有する仮想アドレスの変換に用いるページテーブル152を指定する。
【0032】
指定されたページテーブル152において、例えば、仮想アドレスVのページテーブルオフセットに対応するエントリには、仮想アドレスVのアクセス時に変換される物理メモリページの先頭物理アドレスが格納されている。ページはメモリを管理する単位で、例えば、4キロバイトである。この先頭物理アドレスに仮想アドレスVのページ内オフセットを加算した値が、仮想アドレスVに対応する物理アドレスの値である。
【0033】
このようなページアドレス変換テーブル15が保持する情報を用いた仮想アドレスと物理アドレスの変換は、CPU17に内蔵されたメモリ管理ユニットMMU(Memory Management Unit、図には不記載)にページアドレス変換テーブル15が読み込まれることで実行される。なお、ページテーブル152は、各メモリページの物理アドレスの他にプレゼントフラグを保持している。このフラグがFalse(F)の場合、CPU17で動作するソフトウェアが対応するメモリ空間にアクセスした場合にCPU17にページフォルト割込みが発生する。デバイスメモリ管理部141は、入出力デバイスA 32のマップ領域A53の上述した一部に対応するページテーブル152のエントリのプレゼントフラグをFに設定する。
【0034】
<入出力コマンド発行の検出時の各部の連携とアドレス管理テーブルの構成>
アプリケーションプログラム11は、OS12が提供するインタフェースを介し、デバイスAドライバ13に入出力デバイスA 32を使用する要求を行う。
【0035】
デバイスAドライバ13はアプリケーションプログラム11からの要求を受け、入出力デバイスA 32に入出力コマンドの発行を行い、また入出力デバイスA 32からコマンド実行完了の応答を受信する。デバイスAドライバ13が入出力デバイスA 32に入出力コマンドを発行時には、前述したように入出力デバイスA 32のマップ空間A 53にメモリアクセスする。
【0036】
アクセスインターセプト部142は、例えば、ページフォルト割込みに対する割込み処理ルーチンとしてOS12に登録され、デバイスAドライバ13が入出力デバイスA 32に入出力コマンドを発行したことをページフォルトにより検出する。デバイスAドライバ13がメモリアクセスを行ったマップ空間A 53は、対応するページアドレス変換テーブル15のページテーブル152のエントリのプレゼントフラグがFに設定されている。従って、アクセスが発生するとCPU17が内蔵するMMUがページフォルト割込みを発生し、アクセスインターセプト部142が呼び出される。
【0037】
アクセスインターセプト部142は、ページフォルト割込みを発生させたメモリアクセス命令を調査し、例えば、命令の種類、及び、命令がアクセスしたアドレス、当該アドレスに格納されているデータの値から入出力コマンドの内容を判別する。割込み発生時、CPU17は割込み発生アドレスを所定のメモリ領域に格納する。アクセスインターセプト部142は、この割込み発生アドレスからページフォルト割込みを発生させたメモリアクセス命令を取得して調査する。
【0038】
命令の具体的な調査方法は、入出力コマンドの発行に使用されるメモリアクセス命令の仕様に依存する。なおここで、命令の種類とは、例えば、メモリライトかメモリリードかの違い、及び、対象データ長の違いである。また、命令がライトまたはリードしたアドレスは、例えば、前述例のA番地、B番地である。当該アドレスに格納されているデータの値とは、例えば、前述例の値Cである。
【0039】
またアクセスインターセプト部142は、入出力パケット送受信部144に、判別した入出力コマンドを入出力デバイスA 32宛てに送信することを依頼する。入出力コマンドが完了同期を必要とするとき、アクセスインターセプト部142は、入出力パケット送受信部144から入出力コマンドの実行完了通知を受信するまでスリープ状態となる。例えば、入出力デバイスA 32に送信した入出力コマンドが、ステータス情報取得である場合、アクセスインターセプト部142は、ステータス情報が受信されるまで、スリープ状態となる。
【0040】
入出力コマンド送信の依頼を受けた入出力パケット送受信部144は、当該入出力コマンドを実行する為に、入出力コマンドに応じた所定入出力バス規格準拠の入出力パケットを作成し、入出力デバイスA 32との間で授受する。ここで入出力パケット送受信部144が作成し、授受する入出力パケットは、ブリッジ19が同じ入出力コマンドを受けたときに作成し、授受する入出力パケットと同じものである。
【0041】
即ち、入出力パケット送受信部144とブリッジ19は、同じ入出力デバイスに対する同じ入出力コマンドに応じて同じ入出力パケットを生成して、入出力デバイスA 32との間で授受するのである。その意味で、入出力パケット送受信部144は、仮想的なブリッジ19として機能する。入出力パケットは、ブリッジ19が入出力デバイスA 32を接続する場合の入出力バス規格に準拠する。この規格は、例えばPCIe規格であり、非特許文献1が示すように、PCIe規格ではメモリアクセスに対応するパケットが規定されている。
【0042】
図4は、アドレス管理テーブル145の構成を示す図である。アドレス管理テーブル145は、リモート接続されている入出力デバイスごとに、当該入出力デバイスに割当てられているマップ空間の仮想アドレス範囲、当該入出力デバイスのアドレス、当該入出力デバイスを含む入出力ボックス3のリモートブリッジ31の通信アドレスを含む。バス規格がPCIe規格の場合、入出力デバイスのアドレスはBDF(登録商標)番号(Bus番号、Device番号、Function番号の組)である。通信網2がイーサネットである場合、リモートブリッジ31の通信アドレスはMACアドレスである。
【0043】
入出力パケット送受信部144は、
図4に示すアドレス管理テーブル145を参照し、作成した入出力パケットのヘッダに記載した宛先のメモリアドレスに対応するリモートブリッジ31のアドレスを検索する。この宛先のメモリアドレスは、入出力コマンド発行時にアクセスされたマップ空間A内のアドレスである。
【0044】
入出力パケット送受信部144は、検索したリモートブリッジ31のアドレスを宛先とし、作成した入出力パケットをカプセル化する通信網2用のフレーム、例えば、イーサネットフレームを作成する。入出力パケット送受信部144はまた、作成したフレームの送信をNICドライバ16に依頼する。
【0045】
入出力パケット送受信部144はまた、入出力デバイスA 32が発行した入出力パケットをカプセル化した通信網2用のフレームを受信し、フレームをデカプセル化して入出力パケットを取り出す。取り出した入出力パケットの指示が、デバイスAドライバ13が発行した入出力コマンドに対する完了通知の場合、入出力パケット送受信部144は、アクセスインターセプト部142に通知する。
【0046】
また、入出力パケットの指示が入出力デバイスA 32によるメモリ18へのDMAの場合、入出力パケット送受信部144は、指示されたDMAを実行するようDMA実行部143に依頼して完了後、DMA実行部143から完了応答通知を受信する。入出力パケット送受信部144は、DMAの完了応答通知を入出力デバイスA 32に通知する入出力パケットを作成して、通信網2用のフレームにカプセル化し当該フレームをリモートブリッジ31宛てに送信するようNICドライバ16に依頼する。
【0047】
このとき入出力パケット送受信部144は、入出力デバイスA 32のデバイスアドレス、例えば、PCIe規格のバスにおけるBDF番号をキーとしてアドレス管理テーブル145を検索し、リモートブリッジ31の宛先を取得する。入出力デバイスA 32のデバイスアドレスは、DMA実行部143から渡される。
【0048】
DMA実行部143は、メモリ18へのデータ書き込みを依頼された場合、入出力パケットから書き込み先のメモリアドレス、書き込み対象データを取り出してデータ書き込みを実行する。メモリ18からのデータ読み出しを依頼された場合、入出力パケットから読み出し元のメモリアドレスを取り出して、当該アドレスに格納されているデータを入出力パケット送受信部144が指定したバッファに格納する。
【0049】
DMA実行部143は、依頼されたDMAが完了すると、完了通知を入出力パケット送受信部144に通知する。DMA実行部143は、このとき入出力パケットから入出力デバイスA 32のデバイスアドレスを取り出して、入出力パケット送受信部144に通知する。
【0050】
NICドライバ16は、通信網2に対しフレームを送受信するデバイスであるNIC22の制御を行う。NICドライバ16は入出力パケット送受信部144の依頼を受け、リモートブリッジ31に入出力パケットがカプセル化されたイーサネットフレームを送信するようNIC22を制御する。また、NICドライバ16は、NIC22が受信した入出力パケットがカプセル化されたフレームを入出力パケット送受信部144に渡す。
【0051】
リモートブリッジ31は、通信網2から入出力デバイスA 32を宛先とする入出力パケットがカプセル化されたフレーム、例えば、イーサネットフレームを受信し、デカプセル化してフレームから入出力パケットを取り出して入出力デバイスA 32に渡す。リモートブリッジ31はまた、入出力デバイスA 32から入出力実行装置1を宛先とする入出力パケットを受信し、NIC22のアドレスを宛先とするフレームに搭載してカプセル化し、通信網2に送信する。
【0052】
<動作>
次に、図面を参照して本実施の形態の動作について詳細に説明する。
【0053】
図5は、デバイスメモリ管理部141が入出力デバイスA 32を入出力実行装置1のメモリ空間にマップする動作を示した流れ図である。デバイスメモリ管理部141は、入出力実行装置1の入出力スロットに挿入されたローカル接続されている入出力デバイスがマップされている仮想メモリ空間5のアドレス範囲を、OS12が管理している情報から取得する(ステップA1)。続いてデバイスメモリ管理部141は、仮想メモリ空間5から空いている領域を選択し、リモート接続した入出力デバイスA 32をマップするマップ空間A 53として、その範囲をOS12が管理する情報に登録する(ステップA2)。続いてデバイスメモリ管理部141は、マップ空間A 53に対応するページアドレス変換テーブル15のページテーブル152のエントリのプレゼントフラグをFに設定する(ステップA3)。なお、デバイスメモリ管理部141は、入出力デバイスA 32に入出力コマンドを発行するときにメモリアクセスするアドレス範囲にのみプレゼントフラグをFに設定すれば良い。
【0054】
図6は、デバイスAドライバ13がリモート接続された入出力デバイスA 32に入出力コマンドを発行する動作を示した流れ図である。アプリケーションプログラム11は入出力デバイスA 32を使用する要求を、OS12が提供するインタフェースを介してデバイスAドライバ13に行う(ステップB1)。デバイスAドライバ13は入出力コマンドを入出力デバイスA 32に発行する(ステップB2)。入出力コマンドの発行は、マップ空間A 53にメモリアクセスを行うことで実現する。
【0055】
アクセスインターセプト部142は、ページフォルトの発生によりデバイスAドライバ13による入出力デバイスA 32への入出力コマンド発行を検出し、入出力コマンドを判別する(ステップB3)。アクセスインターセプト部142は、CPU17にページフォルトを発生させたメモリアクセスの命令を解析することでデバイスAドライバ13が発行した入出力コマンドを判別する。ここで、アクセスインターセプト部142は、入出力コマンドの種類、パラメータの値等を解析する。アクセスインターセプト部142は、入出力パケット送受信部144に発行された入出力コマンドに応じた入出力パケットの生成と送信を依頼する(ステップB4)。このときアクセスインターセプト部142は、入出力コマンドを発行したメモリアクセス命令の情報、例えば宛先アドレス、メモリライトするデータを渡す。
【0056】
入出力パケット送受信部144は、アクセスインターセプト部142から依頼された入出力コマンドに応じた入出力パケットを作成する(ステップB5)。
【0057】
続いて入出力パケット送受信部144は、作成した入出力パケットを、入出力デバイスA 32が接続されているリモートブリッジ31のアドレスを宛先としたフレームに搭載してカプセル化する。このとき入出力パケット送受信部144は、リモートブリッジ31の通信アドレスをアドレス管理テーブル145から取得する。アドレス管理テーブル145が保持するエントリの中で、入出力コマンドを発行したメモリアクセス命令の宛先メモリアドレスに対応する通信アドレスが検索対象のアドレスである。入出力パケット送受信部144は、入出力パケットをカプセル化したフレームをリモートブリッジ31宛てに送信する(ステップB6)。ここで、入出力パケット送受信部144は、フレームを通信網2に送信するようNICドライバ16に依頼し、NICドライバ16が依頼されたフレームを通信網2に送信する。
【0058】
続いて、通信網2は送信されたフレームをリモートブリッジ31に伝送する(ステップB7)。リモートブリッジ31は、入出力パケットがカプセル化されたイーサネットフレームを受信し、入出力パケットをデカプセル化して取り出し、入出力パケットを入出力デバイスA 32に送信する(ステップB8)。入出力デバイスA 32は入出力パケットを受信し、入出力パケットが指示する入出力を実行する(ステップB9)。
【0059】
図7は、入出力デバイスA 32が入出力実行装置1に入出力パケットを送信する動作を示した流れ図である。入出力デバイスA 32が、受信した入出力コマンドの応答等で入出力パケットを発行すると(ステップC1)、リモートブリッジ31が当該入出力パケットをNIC22のアドレスを宛先とする通信網2のフレームにカプセル化して通信網2に送信する(ステップC2)。通信網2は入出力パケットがカプセル化されたフレームを入出力実行装置1に伝送する(ステップC3)。
【0060】
NICドライバ16はNIC22で受信したフレームを入出力パケット送受信部144に渡す。入出力パケット送受信部144は、フレームから入出力パケットをデカプセル化して取り出し、入出力パケットの指示を判定する(ステップC4)。
【0061】
入出力パケット送受信部144は、入出力パケットの指示が、デバイスAドライバ13が以前発行した入出力コマンドに対する応答であれば(ステップC5でYes)、アクセスインターセプト部142に応答を通知する。指示がステータス等の情報を要求する入出力コマンドに対する応答データであれば、入出力パケット送受信部144は受信した応答データをアクセスインターセプト部142に渡す。アクセスインターセプト部142は応答を受信し、スリープ状態を解除してページフォルト割込みから復帰して、デバイスAドライバ13の処理を継続する(ステップC6)。このときアクセスインターセプト部142は、応答データ、例えば入出力デバイスA 32のステータス情報であれば、応答データを、入出力コマンドを発行したメモリリード命令が指定するメモリ18にコピーする。メモリ18のこの部分は、ページフォルトになっていないマップ空間A 53内の領域であっても良いし、入出力実行装置1の仮想メモリ空間5内の他の領域であっても良い。こうすることにより、ページフォルト割込みから復帰したデバイスAドライバ13が応答データを参照することが出来る。
【0062】
またステップC5において、受信した入出力パケットが、デバイスAドライバ13が以前発行した入出力コマンドの応答パケットでなければ(ステップC5でNo)、受信した入出力パケットはDMAの実行を要求する入出力パケットである。この場合、入出力パケット送受信部144は、受信したDMAの要求をDMA実行部143に送信する。DMA実行部143は、送信されたDMAの要求を実行する(ステップC7)。DMAの要求がメモリ18への書き込み要求である場合、DMA実行部143は入出力パケットに格納されているデータを、入出力パケットに格納されている宛先アドレスのメモリ18に送信する。
【0063】
一方、DMAの要求がメモリ18からの読み出し要求である場合、DMA実行部143は入出力パケットに格納されている宛先アドレスのメモリ18に格納されているデータを入出力パケット送受信部144に渡す。入出力パケット送受信部144は、受け取ったデータを入出力パケットに格納して、入出力デバイスA 32に返信する。また、入出力パケット送受信部144は、要求されたDMAに応答の入出力パケットが必要であれば、作成して入出力デバイスA 32に送信する。DMAの要求がメモリ18からの読み出し要求である場合、応答の入出力パケットにリードしたデータを格納する。
【0064】
ここで作成された応答の入出力パケットがフレームにカプセル化されて通信網2を用いて入出力デバイスA 32に届けられる過程は、
図6に示した入出力コマンドの送信時と同じである。
【0065】
<変形例>
入出力ボックス3は、NIC22、及び、通信網2を介してではなく、他のインタフェースで入出力実行装置1に接続されていても良い。例えば、入出力ボックス3は、SCSI(Small Computer System Interface)規格の入出力制御ボード経由で入出力実行装置1に接続されていても良い。
【0066】
マップ空間A 53は、予めデバイス仮想化システム6に設定されたパラメータ等で固定的に与えられていても良い。この場合、管理者が入出力実行装置1にローカル接続される入出力デバイスを考慮して空いている仮想メモリ空間5を判断して、マップ空間A 53を決定しパラメータ設定等をする。
【0067】
入出力デバイスA 32は、必ずしもDMA転送をする入出力デバイスである必要は無い。入出力コマンドで、データの送受信を実施するような入出力デバイスでも良い。この場合、DMA実行部143は、無くても良い。
【0068】
<効果>
本実施の形態の入出力実行装置1は、ブリッジ19に接続されていない入出力デバイスA 32、例えば、通信網2を介してリモート接続されている入出力デバイスA 32を、ブリッジ19に接続されているかのように仮想化できる。すなわち、入出力実行装置1は、例えば、イーサネットを介してリモート接続されている入出力デバイスA 32を、ブリッジ19に接続されているかのように仮想化できる。その結果、入出力実行装置1は、デバイスAドライバ13等が、ブリッジ19に接続されていない入出力デバイスと接続されている入出力デバイスを同じインタフェースで入出力できるようにする。
【0069】
その理由は、アクセスインターセプト部142が、デバイスAドライバ13が、入出力デバイスA 32に割当てられた領域(マップ空間A 53)にアクセスしたときに発生するページフォルトを検出して、入出力コマンドの発行を検出して当該コマンドを判別するからである。そして、入出力パケット送受信部144が、入出力デバイスA 32を接続するブリッジ19が、判別された入出力コマンドを受けた場合に生成する入出力パケットを生成して、ブリッジではない接続手段、例えば、通信網2で接続されている入出力デバイスA 32に送信するからである。
【0070】
この結果、本実施の形態にかかる入出力実行装置1は、デバイス仮想化システム6における入出力デバイスの配置自由度を向上させる。入出力実行装置1は、例えば、ブリッジ19に接続していた入出力デバイスを、デバイスドライバに影響することなく、通信網2経由の接続に変更することを可能とする。
【0071】
さらに、本実施の形態にかかる入出力実行装置1は、既に運転中のデバイス仮想化システム6の、入出力デバイスの配置自由度も向上させる。その理由は、アクセス擬似部14の導入に当たり、既に使用中のデバイスドライバを変更する必要が無いからである。
【0072】
<第二の実施形態>
図8は、本実施の形態の入出力実行装置10の構成図である。入出力実行装置10は、デバイスAドライバ13と、デバイスメモリ管理部141と、アクセスインターセプト部142と、入出力パケット送受信部144と、を備える。
【0073】
デバイスAドライバ13は、入出力デバイスA 32-2に割当てられている、仮想空間の領域にアクセスすることで入出力コマンドを発行する。デバイスメモリ管理部141は、仮想空間の当該領域をアクセスされるとページフォルトを発生する状態に設定する。アクセスインターセプト部142は、デバイスAドライバ13が当該領域にアクセスしたときに発生するページフォルトを検出して、入出力コマンドの発行を検出して、入出力コマンドを判別する。入出力パケット送受信部144は、入出力デバイスA 32-1を接続するブリッジ19が、判別された入出力コマンドを受けた場合に生成する入出力パケットを生成して、ブリッジではない接続手段24で接続されている入出力デバイスA 32-2に送信する。
【0074】
ここで、入出力デバイスA 32-1と、入出力デバイスA 32-2は、同じ種類の入出力デバイスである。なお、入出力実行装置10は入出力デバイスA 32-1に接続しているブリッジ19を、備えている必要は無い。また、ブリッジではない接続手段24は、例えば、
図1におけるNIC22と通信網2である。
【0075】
本実施の形態の入出力実行装置10は、ブリッジ19に接続されていない入出力デバイスA 32-2を、ブリッジ19に接続されている入出力デバイスA 32-1であるかのように仮想化できる。その結果、入出力実行装置10は、デバイスAドライバ13等が、ブリッジ19に接続されていない入出力デバイスと接続されている入出力デバイスを同じインタフェースで入出力できるようにする。
【0076】
その理由は、アクセスインターセプト部142が、デバイスAドライバ13が入出力デバイスA 32-2に割当てられた領域(マップ空間A 53)にアクセスしたときに発生するページフォルトを検出して、入出力コマンドの発行を検出して当該コマンドを判別するからである。そして、入出力パケット送受信部144が、入出力デバイスA 32-1を接続するブリッジ19が、判別された入出力コマンドを受けた場合に生成する入出力パケットを生成して、ブリッジではない接続手段24で接続されている入出力デバイスA 32-2に送信するからである。
【0077】
この結果、本実施の形態にかかる入出力実行装置10は、デバイス仮想化システム6における入出力デバイスの配置自由度を向上させる。入出力実行装置10は、例えば、ブリッジ19に接続していた入出力デバイスを、デバイスドライバに影響することなく、通信網2経由の接続に変更することを可能とする。
【0078】
さらに、本実施の形態にかかる入出力実行装置10は、既に運転中のデバイス仮想化システム6の、入出力デバイスの配置自由度も向上させる。その理由は、アクセス擬似部14の導入に当たり、既に使用中のデバイスドライバを変更する必要が無いからである。
【0079】
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【0080】
この出願は、2017年12月20日に出願された日本出願特願2017-243743を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【0081】
1 入出力実行装置
2 通信網
3 入出力ボックス
4 ホスト
5 仮想メモリ空間
6 デバイス仮想化システム
10 入出力実行装置
11 アプリケーションプログラム
12 OS
13 デバイスAドライバ
14 アクセス擬似部
15 ページアドレス変換テーブル
16 NICドライバ
17 CPU
18 メモリ
19 ブリッジ
21 入出力デバイスB
22 NIC
24 ブリッジではない接続手段
31 リモートブリッジ
32 入出力デバイスA
32-1 入出力デバイスA
32-2 入出力デバイスA
51 マップ空間B
52 マップ空間N
53 マップ空間A
101 アプリケーション
107 CPU
108 メモリ
109 ブリッジ
110 入出力デバイス
145 アドレス管理テーブル
151 インデックス部
152 ページテーブル
401 仮想マシン
402 仮想マシンモニタ
4011 OS
4012 入出力デバイスドライバ