(57)【要約】【課題】仮想スイッチをオフロードした場合のＩ／Ｏバス帯域の浪費を防ぐこと。【解決手段】仮想ポート３４が片寄された場合の片寄前後のＰＩＤを対応付けて入力ポート変換表及び出力ポート変換表に記憶する。そして、入力ポート番号変換部３６ｂが、入力ポート変換表を用いて片寄後の入力仮想ポート３４のＰＩＤを片寄前のＰＩＤに変換する。そして、検索部３６ｃが、入力ポート番号変換部３６ｂにより変換されたＰＩＤを用いてルールを検索し、出力仮想ポート３４のＰＩＤを特定する。そして、出力ポート番号変換部３６ｄが、検索部３６ｃにより特定されたＰＩＤを出力ポート変換表を用いて片寄後のＰＩＤに変換する。【選択図】図１
2019161319.tif 000002
【特許請求の範囲】
【請求項１】
仮想スイッチの中継処理をオフロードして実行するオフロードデバイスを複数備える情報処理装置において、
前記オフロードデバイスは、
前記情報処理装置で実行される仮想マシンが接続する仮想ポートがオフロードデバイス間で移動された場合の移動前後の仮想ポートを識別する仮想ポート識別子を対応付けるポート変換表と、
パケットが入力された入力仮想ポートを識別する入力仮想ポート識別子を前記ポート変換表に基づいて変換する第１変換部と、
前記パケットの出力仮想ポートを識別する出力仮想ポート識別子を前記第１変換部により変換された入力仮想ポート識別子を用いて検索する検索部と、
前記検索部により検索された出力仮想ポート識別子を前記ポート変換表に基づいて変換する第２変換部と
を備えることを特徴とする情報処理装置。
【請求項２】
前記オフロードデバイスは、オフロードデバイス間のパケットの転送回数を入力仮想ポート識別子と出力仮想ポート識別子の組に対応させて計数する計数部をさらに備え、
前記計数部が計数した転送回数が所定の閾値を超えた場合に、入力仮想ポートと出力仮想ポートを片寄するオフロードデバイス及び移動先の仮想ポートを決定し、移動先の仮想ポートに基づいて前記ポート変換表を更新する制御部を更に備えることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記制御部は、前記仮想ポート識別子と前記検索部で使用される仮想ポート識別子を対応付ける移動管理表を用いて前記ポート変換表を更新することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記オフロードデバイスは、
前記第２変換部により変換された出力仮想ポート識別子により識別される出力仮想ポートへ前記パケットを出力するクロスバースイッチと、
他のオフロードデバイスから受信したパケットを前記クロスバースイッチに渡す転送受信部と
をさらに備えることを特徴とする請求項１、２又は３に記載の情報処理装置。
【請求項５】
複数のＣＰＵを有し、
前記ポート変換表は、異なるＣＰＵでそれぞれ実行される送信側の仮想マシンと受信側の仮想マシンがそれぞれ接続する仮想ポートの一方が他方の仮想ポートを有するオフロードデバイスへ移動された場合の移動前後の仮想ポート識別子を対応付けることを特徴とする請求項１〜４のいずれか１つに記載の情報処理装置。
【請求項６】
仮想スイッチの中継処理をオフロードして実行するオフロードデバイスとプロセッサとメモリとを有する情報処理装置を複数備える情報処理システムにおいて、
前記オフロードデバイスは、
オフロードデバイス間のパケットの転送回数を入力仮想ポート識別子と出力仮想ポート識別子の組に対応させて計数する計数部と、
前記プロセッサで実行される仮想マシンが接続する仮想ポートがオフロードデバイス間で移動された場合の移動前後の仮想ポートを識別する仮想ポート識別子を対応付けるポート変換表と、
パケットが入力された入力仮想ポートを識別する入力仮想ポート識別子を前記ポート変換表に基づいて変換する第１変換部と、
前記パケットの出力仮想ポートを識別する出力仮想ポート識別子を前記第１変換部により変換された入力仮想ポート識別子を用いて検索する検索部と、
前記検索部により検索された出力仮想ポート識別子を前記ポート変換表に基づいて変換する第２変換部とを備え、
前記計数部が計数した転送回数が所定の閾値を超えた場合に、入力仮想ポートと出力仮想ポートを片寄するオフロードデバイス及び移動先の仮想ポートを決定し、移動先の仮想ポートに基づいて前記ポート変換表を更新する制御プログラムをいずれかのプロセッサで実行させることを特徴とする情報処理システム。
【請求項７】
仮想スイッチの中継処理をオフロードして実行するオフロードデバイスが有するコンピュータで実行されるプログラムにおいて、
前記オフロードデバイスを有する情報処理装置で実行される仮想マシンが接続する仮想ポートがオフロードデバイス間で移動された場合の移動前後の仮想ポートを識別する仮想ポート識別子を対応付けるポート変換表を記憶し、
パケットが入力された入力仮想ポートを識別する入力仮想ポート識別子を前記ポート変換表に基づいて変換し、
前記パケットの出力仮想ポートを識別する出力仮想ポート識別子を前記ポート変換表に基づいて変換された入力仮想ポート識別子を用いて検索し、
検索した出力仮想ポート識別子を前記ポート変換表に基づいて変換する
処理を前記コンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム及びプログラムに関する。
【背景技術】
【０００２】
近年、ＮＦＶ（Network  Function  Virtualization）の利用が進んでいる。ＮＦＶは、従来専用装置で実現されていたネットワーク機能を汎用の情報処理装置上のソフトウェアで実装する技術である。ＮＦＶは、情報処理装置の仮想化技術を用いて複数の仮想ネットワーク機能（ＶＮＦ：Virtual  Network  Function）を単一の情報処理装置内で動作させ、仮想スイッチ等でＶＮＦ間、外部ＮＷ（ネットワーク）とＶＮＦの間を接続する。
【０００３】
しかしながら、ソフトウェアで実現される仮想スイッチは、処理遅延が大きく、処理時間のばらつきも大きいので、ＮＦＶで要求される性能を満たすことが困難である。また、ソフトウェアで実現される仮想スイッチは、パケット中継に多大なＣＰＵ（Central  Processing  Unit）能力を必要とし、アプリケーションに対して提供すべきＣＰＵを浪費する。
【０００４】
このため、仮想スイッチの中継機能をＦＰＧＡ（Field  Programmable  Gate  Array）−ＮＩＣ（Network  Interface  Card）、スマートＮＩＣ等にオフロードすることが行われる。ここで、ＮＩＣは通信装置である。また、ＦＰＧＡ−ＮＩＣは、ＦＰＧＡを搭載したＮＩＣであり、仮想スイッチの中継機能をＦＰＧＡにより実現する。また、スマートＮＩＣは、プログラマブルなＮＩＣであり、仮想スイッチの中継機能をプログラムにより実現する。
【０００５】
図１２は、仮想スイッチのオフロードを説明するための図である。図１２において、ＶＭ（Virtual  Machine）＃１及びＶＭ＃２で表されるＶＭ５は、仮想マシンである。ＶＭ５は、ｖｎｉｃ５ａを有する。ｖｎｉｃ５ａは、仮想ＮＩＣである。図１２（ａ）は、仮想スイッチ６の中継部６２がオフロードされない場合を示し、図１２（ｂ）は、仮想スイッチ６の中継部６２がＮＩＣ９にオフロードされた場合を示す。
【０００６】
図１２（ａ）に示すように、仮想スイッチ６は、制御部６１と中継部６２を有する。制御部６１は、仮想スイッチ６を制御する。中継部６２は、ＶＭ５間で転送されるパケットを中継する。中継部６２は、４つのｖｐｏｒｔ６４を有する。ｖｐｏｒｔ６４は、仮想ポートである。中継部６２は、４つ以外のｖｐｏｒｔ６４を有してもよい。
【０００７】
ｖｎｉｃ５ａはｖｐｏｒｔ６４と接続される。ｖｎｉｃ５ａに接続されない２つのｖｐｏｒｔ６４はＮＩＣ＃７１及びＮＩＣ＃７２で表される２つのＮＩＣ７の物理ポート７７とそれぞれ接続される。ＶＭ５は、仮想スイッチ６及びＮＩＣ７を介して他の情報処理装置で動作するＶＭ５と通信する。
【０００８】
図１２（ｂ）に示すように、ＮＩＣ９は、オフロードされたオフロード中継部９６を有する。オフロード中継部９６は２つのｖｐｏｒｔ９４を有する。一方のｖｐｏｒｔ９４はｖｎｉｃ５ａに接続し、他方のｖｐｏｒｔ９４は物理ポート９７に接続する。
【０００９】
仮想スイッチ６の中継部６２がＮＩＣ＃９１及びＮＩＣ＃９２で表される２つのＮＩＣ９にオフロードされることで、制御部６１の機能が変更される。仮想スイッチ制御部８１は、変更後の制御部６１である。仮想スイッチ６の中継部６２が複数のＮＩＣ９にオフロードされると、１つの中継部６２として管理するために、複数のＮＩＣ９が協調動作するような仕組み及び制御が必要になる。
【００１０】
なお、複数のハイパバイザから、複数のＮＩＣのハードウェアオフロード機能の設定に関する設定情報を取得し、ＶＭを配置するハイパバイザを、設定情報に基づいて選択することで、ハードウェアオフロード機能の設定を考慮してＶＭを配置する従来技術がある。
【００１１】
また、ＮＩＣが、通信の接続をポート番号で識別し、ポート毎の接続状態を主記憶上に設けたポートコンテキストにより管理し、該ポートコンテキストを、主記憶上に設けられたポートテーブルにより管理する従来技術がある。この従来技術によれば、通信接続の確立・切断処理をＮＩＣにオフロードし、通信接続の管理を主記憶上で行うことで、プロセッサの通信処理の負荷を低減でき、かつ、維持可能な通信接続数をより多くすることができる。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０１７−１７４３０１号公報
【特許文献２】特開２０１０−１８３４５０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
仮想スイッチ６を図１２に示すようにオフロードし、複数のオフロード中継部９６を協調動作させる場合、Ｉ／Ｏバス折り返しによりＩ／Ｏバス帯域の浪費が発生するという問題がある。図１３は、Ｉ／Ｏバス折り返しによるＩ／Ｏバス帯域の浪費を説明するための図である。図１３は、ＶＭ＃１がＶＭ＃２へデータを転送する場合を示す。ＶＭ＃１のｖｎｉｃ５ａはオフロード中継部＃１に接続し、ＶＭ＃２のｖｎｉｃ５ａはオフロード中継部＃２に接続する。
【００１４】
図１３に示すように、ＣＰＵ５２は、メモリコントローラ５２ａと、Ｉ／Ｏコントローラ＃１及びＩ／Ｏコントローラ＃２で表されるＩ／Ｏコントローラ５２ｂを有する。ＣＰＵ５２で実行されるＶＭ＃１は、送信するデータをメモリ４のリングバッファ４ａに書き込む。リングバッファ４ａに書き込まれたデータは、ＣＰＵ５２のメモリコントローラ５２ａ、Ｉ／Ｏコントローラ＃１、Ｉ／Ｏバス＃１を介してオフロード中継部＃１により読み出される。
【００１５】
そして、オフロード中継部＃１は、Ｉ／Ｏバス＃１、Ｉ／Ｏコントローラ＃１、Ｉ／Ｏコントローラ＃２、Ｉ／Ｏバス＃２を介してオフロード中継部＃２へデータを転送する。そして、オフロード中継部＃２は、Ｉ／Ｏバス＃２、Ｉ／Ｏコントローラ＃２、メモリコントローラ５２ａを介してリングバッファ４ｂへデータを書き込む。そして、ＣＰＵ５２で実行されるＶＭ＃２は、リングバッファ４ｂからデータを読み出す。
【００１６】
このように、異なるＮＩＣ９に接続されるＶＭ５間の通信では、Ｉ／Ｏバス２９上で複数の折り返しが発生し、貴重なＩ／Ｏバス帯域が浪費される。また、異なるＮＩＣ９に接続されるＶＭ５間の通信では、スループットが低下する。
【００１７】
本発明は、１つの側面では、複数のオフロード中継部を協調動作させる場合に発生するＩ／Ｏバス帯域の浪費を防ぐことを目的とする。
【課題を解決するための手段】
【００１８】
１つの態様では、情報処理装置は、仮想スイッチの中継処理をオフロードして実行するオフロードデバイスを複数備え、前記オフロードデバイスは、ポート変換表と、第１変換部と、検索部と、第２変換部とを備える。前記ポート変換表は、前記情報処理装置で実行される仮想マシンが接続する仮想ポートがオフロードデバイス間で移動された場合の移動前後の仮想ポートを識別する仮想ポート識別子を対応付ける。前記第１変換部は、パケットが入力された入力仮想ポートを識別する入力仮想ポート識別子を前記ポート変換表に基づいて変換する。前記検索部は、前記パケットの出力仮想ポートを識別する出力仮想ポート識別子を前記第１変換部により変換された入力仮想ポート識別子を用いて検索する。前記第２変換部は、前記検索部により検索された出力仮想ポート識別子を前記ポート変換表に基づいて変換する。
【発明の効果】
【００１９】
１つの側面では、本発明は、複数のオフロード中継部を協調動作させる場合に発生するＩ／Ｏバス帯域の浪費を防ぐことができる。
【図面の簡単な説明】
【００２０】
【図１】図１は、実施例に係る情報処理装置の構成を示す図である。
【図２】図２は、他のＰＩＤの例を示す図である。
【図３】図３は、仮想ポートの交換例を示す図である。
【図４】図４は、移動管理表の例を示す図である。
【図５】図５は、ＮＩＣ間転送時の後段ＮＩＣにおける検索部のスキップを説明するための図である。
【図６】図６は、ＮＩＣ間転送を記録する処理のフローを示すフローチャートである。
【図７】図７は、制御アプリによる片寄処理のフローを示すフローチャートである。
【図８】図８は、中継処理のフローを示すフローチャートである。
【図９Ａ】図９Ａは、入力側のＮＩＣ間転送処理のフローを示すフローチャートである。
【図９Ｂ】図９Ｂは、出力側のＮＩＣ間転送処理のフローを示すフローチャートである。
【図１０】図１０は、制御アプリを実行する点に焦点をあてた情報処理装置の構成を示す図である。
【図１１】図１１は、ＮＵＭＡ構成の情報処理装置における仮想ポートの片寄を説明するための図である。
【図１２】図１２は、仮想スイッチのオフロードを説明するための図である。
【図１３】図１３は、Ｉ／Ｏバス折り返しによるＩ／Ｏバス帯域の浪費を説明するための図である。
【発明を実施するための形態】
【００２１】
以下に、本願の開示する情報処理装置、情報処理システム及びプログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００２２】
まず、実施例に係る情報処理装置の構成について説明する。図１は、実施例に係る情報処理装置の構成を示す図である。図１に示すように、実施例に係る情報処理装置１は、ＮＩＣ＃１及びＮＩＣ＃２で表される２台のＮＩＣ２ａと、仮想スイッチ制御部２ｂとを有する。なお、情報処理装置１は、３台以上のＮＩＣ２ａを有してもよい。情報処理装置１のＣＰＵではＶＭ（仮想マシン）５が動作する。
【００２３】
ＮＩＣ２ａは、通信を行う装置であり、例えばスマートＮＩＣ、ＦＰＧＡ−ＮＩＣである。ＮＩＣ２ａには、仮想スイッチ６がオフロードされる。ＮＩＣ２ａは、Ｉ／Ｏバス・ＤＭＡ（Direct  Memory  Access）コントローラ３１と、仮想ポート処理部３２と、ＤＭＡメモリ情報テーブル３３と、仮想ポート＃１及び仮想ポート＃２で表される仮想ポート３４と、ＮＩＣ間転送処理部３５とを有する。また、ＮＩＣ２ａは、中継部３６と、物理ポート３７と、ＮＩＣ間転送記憶部３８と、分類部３９とを有する。
【００２４】
Ｉ／Ｏバス・ＤＭＡコントローラ３１は、Ｉ／Ｏバス２９を制御するＩ／Ｏバスコントローラと、ＶＭ５のメモリ領域へのＤＭＡを制御するＤＭＡコントローラである。
【００２５】
仮想ポート処理部３２は、仮想ポート３４に対応するＤＭＡメモリ情報を用いてＩ／Ｏバス・ＤＭＡコントローラ３１を介してＶＭ５のメモリ領域にアクセスし、データの送受信を実行する。ＤＭＡメモリ情報は、仮想ポート３４に対応するＶＭ５のメモリ領域へのＤＭＡを行う場合に用いられる情報である。ＤＭＡメモリ情報テーブル３３は、仮想ポート３４毎にＤＭＡメモリ情報を記憶するテーブルである。
【００２６】
また、仮想ポート処理部３２は、受信パケットに入力仮想ポート３４の番号を要素とするメタデータを付与する。また、仮想ポート処理部３２は、パケットを送信する際にメタデータを削除する。
【００２７】
仮想ポート３４は、ＶＭ５との通信に用いられる仮想的なポートである。ＮＩＣ＃１の２つの仮想ポート３４のＰＩＤ（Port  Identifier）は、それぞれ１及び２であり、ＮＩＣ＃２の２つの仮想ポート３４のＰＩＤは、それぞれ１１及び１２である。ここで、ＰＩＤは、仮想ポート３４を識別する番号である。
【００２８】
ＰＩＤは、情報処理装置１が複数のＮＩＣ２ａを有する場合にも情報処理装置内で一意になるように各仮想ポート３４に設定される。図１では、ＰＩＤの１０の位をＮＩＣ−ＩＤ（ＮＩＣ２ａのＩＤ）とし、１の位をＮＩＣ内のポートＩＤとしている。ＮＩＣ＃１のＮＩＣ−ＩＤは１であり、ＮＩＣ＃２のＮＩＣ−ＩＤは２である。
【００２９】
図２は、他のＰＩＤの例を示す図である。図２では、８ビットのＰＩＤのうち上位２ビットがＮＩＣ−ＩＤを示し、下位６ビットがＮＩＣ２ａ内のポートＩＤを示す。この例では、６４ポート×４ＮＩＣ＝２５６ポートが一意に識別される。また、ＰＩＤの一部をＮＩＣ２ａを識別するためのＮＩＣ−ＩＤとすることで、宛先ポートに応じたＮＩＣ２ａを各ＮＩＣ２ａの中継部３６が判別することができる。
【００３０】
ＮＩＣ間転送処理部３５は、Ｉ／Ｏバス・ＤＭＡコントローラ３１を介して他のＮＩＣ２ａとのパケット送受信を実行する。中継部３６は、仮想スイッチ６の中継機能がオフロードされたオフロード中継部である。中継部３６は、入力パケット情報に対応するアクション（宛先ポートへの出力を含む）を検索し、アクションを実行する。
【００３１】
物理ポート３７は、外部との通信に用いられるポートである。ＮＩＣ間転送記憶部３８は、入力仮想ポート３４と出力仮想ポート３４の組に対応付けてＮＩＣ間の転送回数を記憶する。分類部３９は、受信パケットのヘッダ情報を分析し、仮想ポート処理部３２によって受信パケットに付与されたメタデータにヘッダ情報を追加する。メタデータは、中継部３６で用いられる。
【００３２】
情報処理装置１は、ＣＰＵで動作する２つのＶＭ間の通信において、２つのＶＭ５の接続先のＮＩＣ２ａが異なり、ＶＭ間の通信が頻繁に行われる場合に、ＶＭ５の接続先を一方のＮＩＣ２ａに片寄する。すなわち、情報処理装置１は、２つのＶＭ５が接続する仮想ポート３４が同じＮＩＣ２ａになるように、一方のＶＭ５が接続する仮想ポート３４を移動する。あるいは、移動先のＮＩＣ２ａに空きの仮想ポート３４がない場合には、情報処理装置１は、仮想ポート３４を交換する。情報処理装置１は、通信する２つのＶＭ５の接続先を一方のＮＩＣ２ａに片寄することで、Ｉ／Ｏバス２９の帯域の浪費を防ぐことができる。
【００３３】
中継部３６は、ポート変換表３６ａと、入力ポート番号変換部３６ｂと、検索部３６ｃと、出力ポート番号変換部３６ｄと、クロスバースイッチ３６ｅとを有する。
【００３４】
ポート変換表３６ａは、仮想ポート３４の移動（交換）前後のＰＩＤを記憶する。中継部３６は、ＶＭ再接続（仮想ポート３４の移動又は交換）後も検索のルール及びクロスバースイッチ３６ｅの出力先の整合性を保つためにポート変換表３６ａに基づき移動（交換）前と移動（交換）後のＰＩＤの変換を行う。
【００３５】
図３は、仮想ポート３４の交換例を示す図である。図３は、ＮＩＣ＃２の仮想ポート＃２（ＰＩＤ＝１２）をＮＩＣ＃１の仮想ポート＃２（ＰＩＤ＝２）と交換する場合を示す。図３に示すように、ポート変換表３６ａには、入力ポート変換表と出力ポート変換表がある。入力ポート変換表は、パケットの入力仮想ポート３４のＰＩＤを変換する場合に用いられる。出力ポート変換表は、パケットの出力仮想ポート３４のＰＩＤを変換する場合に用いられる。
【００３６】
ＶＭ５の再接続前は、ＰＩＤの変換は必要ない。このため、ＮＩＣ＃１及びＮＩＣ＃２の入力ポート変換表及び出力ポート変換表のいずれにおいても、変換前と変換後のＰＩＤは同じである。なお、図３は、ＮＩＣ＃１及びＮＩＣ＃２がそれぞれ３つの仮想ポート３４を有する場合を示す。
【００３７】
ＶＭ５の再接続後は、ＮＩＣ＃１及びＮＩＣ＃２の入力ポート変換表及び出力ポート変換表のいずれにおいても、ＰＩＤ＝２はＰＩＤ＝１２に変換され、ＰＩＤ＝１２はＰＩＤ＝２に変換される。
【００３８】
また、仮想ポート３４が交換された場合、ＤＭＡメモリ情報も交換される。ＶＭ５の再接続前は、ＰＩＤ＝１の仮想ポート３４はＶＭ＃１と接続されるため、ＰＩＤ＝１はＶＭ＃１の情報と対応付けられ、ＰＩＤ＝１２の仮想ポート３４はＶＭ＃２と接続されるため、ＰＩＤ＝１２はＶＭ＃２の情報と対応付けられる。なお、ｎ／ａは、仮想ポート３４がＶＭ５に接続されていないことを示す。また、ＴＸＱ情報は送信バッファに関する情報であり、ＲＸＱ情報は受信バッファに関する情報であり、マップ情報は仮想記憶と物理記憶をマッピングする情報である。ＶＭ５の再接続後は、ＰＩＤ＝２の仮想ポート３４はＶＭ＃２と接続されるため、ＰＩＤ＝２はＶＭ＃２の情報と対応付けられ、ＰＩＤ＝１２はｎ／ａと対応付けられる。
【００３９】
図１に戻って、入力ポート番号変換部３６ｂは、ＶＭ５の再接続が行われた場合に検索のルールを変更せずにパケットを中継できるように、移動（交換）後の入力仮想ポート３４のＰＩＤを移動（交換）前の入力仮想ポート３４のＰＩＤに入力ポート変換表を用いて変換する。
【００４０】
検索部３６ｃは、設定済のルールに基づき受信パケットに対応するアクション情報を検索し、受信パケットに対するアクションを決定する。ルールには入力仮想ポート３４のＰＩＤ、ヘッダ情報等が指定される。入力仮想ポート３４のＰＩＤとしては、入力ポート番号変換部３６ｂにより変換されたＰＩＤが用いられる。
【００４１】
出力ポート番号変換部３６ｄは、ＶＭ５の再接続が行われた場合に検索のルールを変更せずに通信できるように、移動（交換）前の出力仮想ポート３４のＰＩＤを移動（交換）後の出力仮想ポート３４のＰＩＤに出力ポート変換表を用いて変換する。
【００４２】
クロスバースイッチ３６ｅは、パケットを出力仮想ポート３４へ転送する。出力仮想ポート３４のＰＩＤとしては、出力ポート番号変換部３６ｄにより変換されたＰＩＤが用いられる。
【００４３】
仮想スイッチ制御部２ｂは、中継部３６を制御する。具体的には、仮想スイッチ制御部２ｂは、入力仮想ポート３４と出力仮想ポート３４の組に対して片寄するか否かを決定する。例えば、仮想スイッチ制御部２ｂは、未使用仮想ポート３４の状況やＮＩＣ２ａ毎のトラフィック量に基づいて、片寄するか否かを決定する。そして、片寄すると決定すると、仮想スイッチ制御部２ｂは、移動管理表２１を更新し、更新した移動管理表２１に基づいて各ＮＩＣ２ａのポート変換表３６ａを設定する。移動管理表２１は、仮想ポート３４の移動（交換）の管理に用いられる。
【００４４】
図４は、移動管理表２１の例を示す図である。図４に示すように、移動管理表２１は、ＰＩＤとＦ−ＰＩＤ（Floating  ＰＩＤ）を対応付ける。ＰＩＤが仮想ポート３４に固定で割り振られる番号であるのに対して、Ｆ−ＰＩＤは、ＶＭ５の接続移動後も検索部３６ｃで使用されるルール等で継続使用されるＰＩＤである。
【００４５】
仮想スイッチ制御部２ｂは、ＶＭ５の接続移動時に、移動管理表２１の移動元ＰＩＤ及び移動先ＰＩＤ（交換される２つのＰＩＤ）に対応するエントリのＦ−ＰＩＤを入れ替える。仮想スイッチ制御部２ｂは、入力ポート変換表にはＰＩＤをＦ−ＰＩＤに変換する情報を設定し、出力ポート変換表にはＦ−ＰＩＤをＰＩＤに変換する情報を設定する。このように、移動管理表２１を用いることで、複数回のＰＩＤの移動（交換）が発生しても、仮想スイッチ制御部２ｂは、検索部３６ｃのルール等で用いられるＦ−ＰＩＤと移動（交換）後のＰＩＤとを正しく対応付けることができる。
【００４６】
図４（ａ）では、ＰＩＤ＝１２とＰＩＤ＝２が交換され、移動管理表２１のＰＩＤ＝２とＰＩＤ＝１２に対応するエントリのＦ−ＰＩＤが入れ替えられる。その結果、移動管理表２１のＰＩＤ＝２に対応するエントリのＦ−ＰＩＤは１２となり、移動管理表２１のＰＩＤ＝１２に対応するエントリのＦ−ＰＩＤは２となる。入力ポート変換表では、変換前のＰＩＤ＝２に対応する変換後のＰＩＤが１２に更新され、変換前のＰＩＤ＝１２に対応する変換後のＰＩＤが２に更新される。出力ポート変換表では、変換前のＰＩＤ＝２に対応する変換後のＰＩＤが１２に更新され、変換前のＰＩＤ＝１２に対応する変換後のＰＩＤが２に更新される。
【００４７】
図４（ｂ）では、さらにＰＩＤ＝１とＰＩＤ＝１２が交換され、移動管理表２１のＰＩＤ＝１とＰＩＤ＝１２に対応するエントリのＦ−ＰＩＤが入れ替えられる。その結果、移動管理表２１のＰＩＤ＝１に対応するエントリのＦ−ＰＩＤは２となり、移動管理表２１のＰＩＤ＝１２に対応するエントリのＦ−ＰＩＤは１となる。入力ポート変換表では、変換前のＰＩＤ＝１に対応する変換後のＰＩＤが２に更新され、変換前のＰＩＤ＝１２に対応する変換後のＰＩＤが１に更新される。出力ポート変換表では、変換前のＰＩＤ＝２に対応する変換後のＰＩＤが１に更新され、変換前のＰＩＤ＝１に対応する変換後のＰＩＤが１２に更新される。
【００４８】
なお、図１では、仮想スイッチ制御部２ｂが移動管理表２１を有する場合を示すが、ＮＩＣ２ａが移動管理表２１を有してもよい。また、仮想スイッチ制御部２ｂは、情報処理装置１が有するＣＰＵが後述する制御アプリを実行することで実現される。
【００４９】
次に、仮想ポート３４の片寄に関する情報処理装置１の動作について説明する。ＮＩＣ間転送処理部３５は、ＮＩＣ間転送を検出し、入力仮想ポート３４と出力仮想ポート３４の組に対して転送回数を記録する。そして、仮想スイッチ制御部２ｂは、所定頻度（例えば、回数／単位時間）を超えた入力・出力仮想ポート３４の組合せに対して片寄を試みる。仮想スイッチ制御部２ｂは、空き仮想ポート３４の状況や各ＮＩＣ２ａの負荷状況等に応じて移動可否の判定及び片寄するＮＩＣ２ａの選択を行う。
【００５０】
例えば、入力仮想ポート３４（ＰＩＤ＝１）と出力仮想ポート３４（ＰＩＤ＝１２）の組に対して出力仮想ポート３４（ＰＩＤ＝１２）の接続をＰＩＤ＝２の仮想ポート３４に移動する。すると、仮想スイッチ制御部２ｂは、ＮＩＣ＃２の仮想ポート＃２（ＰＩＤ＝１２）のＤＭＡメモリ情報とＮＩＣ＃１の仮想ポート＃２（ＰＩＤ＝２）のＤＭＡメモリ情報を交換する。
【００５１】
そして、検索部３６ｃのルールを変更せずに通信を継続できるようにするために、仮想スイッチ制御部２ｂは、接続移動後の仮想ポート３４のＰＩＤから接続移動前の仮想ポート３４のＰＩＤに変換する情報を入力ポート変換表に設定する。同様に、仮想スイッチ制御部２ｂは、検索部３６ｃでヒットした宛先ＰＩＤ（接続移動前の仮想ポート３４のＰＩＤ）を接続移動後の仮想ポート３４のＰＩＤに変換する情報を出力ポート変換表に設定する。
【００５２】
入力ポート番号変換部３６ｂにより接続移動後の仮想ポート３４から入力されたパケットは、検索部３６ｃにおいて接続移動前の仮想ポート３４から入力されたものとして扱われ、適切な宛先が取得される。また、出力ポート番号変換部３６ｄによりアクション適用で取得された宛先が接続移動後の仮想ポート番号に変換され、クロスバースイッチ３６ｅでパケットが適切に移動後の仮想ポート３４に転送される。
【００５３】
次に、ＮＩＣ間転送時の後段ＮＩＣ２ａにおける検索部３６ｃのスキップについて説明する。図５は、ＮＩＣ間転送時の後段ＮＩＣ２ａにおける検索部３６ｃのスキップを説明するための図である。
【００５４】
図５において、仮想ポート受信処理部３２ａは、仮想ポート処理部３２の受信処理を行う部分であり、仮想ポート送信処理部３２ｂは、仮想ポート処理部３２の送信処理を行う部分である。ＮＩＣ間転送受信部３５ａは、ＮＩＣ間転送処理部３５の受信処理を行う部分であり、ＮＩＣ間転送送信部３５ｂは、ＮＩＣ間転送処理部３５の送信処理を行う部分である。
【００５５】
受信ポート＃１及び受信ポート＃２は、パケットを受信する仮想ポート３４である。受信ポート＃３は、パケットを受信する物理ポート３７である。送信ポート＃１及び送信ポート＃２は、パケットを送信する仮想ポート３４である。送信ポート＃３は、パケットを送信する物理ポート３７である。外部Ｉ／Ｆ４０は、外部と通信するインタフェースである。
【００５６】
情報処理装置１は、装置内で一意の仮想ポート番号を有する。また、ＮＩＣ間転送が行われる場合、入力側ＮＩＣ２ａが出力側ＮＩＣ２ａの宛先まで解決する。このため、図５に示すように、ＮＩＣ間転送受信部３５ａは、他のＮＩＣ２ａから受信したパケットを検索部３６ｃをスキップして直接クロスバースイッチ３６ｅへ渡す。したがって、後段ＮＩＣ２ａは、パケットを高速に処理するとができる。
【００５７】
次に、情報処理装置１による処理のフローについて図６〜図９Ｂを用いて説明する。図６は、ＮＩＣ間転送を記録する処理のフローを示すフローチャートである。図６に示すように、ＮＩＣ間転送処理部３５は、受信パケットの入力ポート番号Ｐｉと出力ポート番号Ｐｏを取得する（ステップＳ１）。ここで、入力ポート番号Ｐｉは、入力仮想ポート３４の番号であり、出力ポート番号Ｐｏは、出力仮想ポート３４の番号である。
【００５８】
そして、ＮＩＣ間転送処理部３５は、ＰｉとＰｏの組に対応するエントリをＮＩＣ間転送記憶部３８から取得し（ステップＳ２）、取得したエントリの転送回数をインクリメントする（ステップＳ３）。そして、ＮＩＣ間転送処理部３５は、転送回数が指定閾値を超えたか否かを判定し（ステップＳ４）、転送回数が指定閾値を超えた場合には、ＰｉとＰｏの組を制御アプリに通知する（ステップＳ５）。
【００５９】
そして、ＮＩＣ間転送処理部３５は、タイマが一定時間経過したか否かを判定し（ステップＳ６）、タイマが一定時間経過した場合には、ＮＩＣ間転送記憶部３８の全エントリの転送回数をリセットする（ステップＳ７）。
【００６０】
このように、ＮＩＣ間転送処理部３５が、ＮＩＣ間転送の転送回数をＰｉとＰｏの組毎にカウントし、転送回数が指定閾値を超えたＰｉとＰｏの組を制御アプリに通知するので、制御アプリは仮想ポート３４の片寄を行うことができる。
【００６１】
図７は、制御アプリによる片寄処理のフローを示すフローチャートである。図７に示すように、制御アプリは、ＮＩＣ間転送の転送回数が指定閾値を超えたポート番号の組をＮＩＣ間転送処理部３５から受信する（ステップＳ１１）。そして、制御アプリは、受信したポート番号の組に基づいて、片寄するＮＩＣ２ａ及び移動先ポートを決定する（ステップＳ１２）。ここで、移動先ポートは、移動先の仮想ポート３４である。
【００６２】
そして、制御アプリは、移動管理表２１の移動元ポートと移動先ポートのポート番号に対応するエントリのＦ−ＰＩＤの値を入れ替える（ステップＳ１３）。ここで、移動元ポートは、移動元の仮想ポート３４である。そして、制御アプリは、移動元ポートと移動先ポートのＤＭＡメモリ情報を入れ替えて各ＮＩＣ２ａに設定する（ステップＳ１４）。
【００６３】
そして、制御アプリは、Ｆ−ＰＩＤの値を入れ替えたＰＩＤについて、各ＮＩＣ２ａの入力ポート変換表にＰＩＤからＦ−ＰＩＤに変換する情報を設定する（ステップＳ１５）。そして、制御アプリは、Ｆ−ＰＩＤの値を入れ替えたＰＩＤについて、各ＮＩＣ２ａの出力ポート変換表にＦ−ＰＩＤからＰＩＤに変換する情報を設定する（ステップＳ１６）。
【００６４】
このように、制御アプリが移動管理表２１、ＤＭＡメモリ情報テーブル３３及びポート変換表３６ａを更新するので、中継部３６は仮想ポート３４が片寄された場合にも正しい中継を行うことができる。
【００６５】
図８は、中継処理のフローを示すフローチャートである。図８に示すように、ＮＩＣ２ａは、受信ポートに受信パケットがあるか否かを判定し（ステップＳ２１）、ない場合には処理を終了する。ここで、受信ポートは、仮想ポート３４である。
【００６６】
一方、受信ポートに受信パケットがある場合には、ＮＩＣ２ａは、受信ポート番号Ｐｉを取得し（ステップＳ２２）、受信パケットにＩｎ＿ｐｏｒｔ＝Ｐｉを要素とするメタデータＭを付与する（ステップＳ２３）。ここで、Ｉｎ＿ｐｏｒｔは、メタデータＭの中で受信ポート番号を示す場所である。また、ステップＳ２１〜ステップＳ２３の処理は仮想ポート処理部３２により行われる。
【００６７】
そして、ＮＩＣ２ａは、受信パケットのヘッダ情報を分析し、メタデータＭにヘッダ情報を追加する（ステップＳ２４）。なお、ステップＳ２４の処理は分類部３９により行われる。そして、ＮＩＣ２ａは、入力ポート変換表からメタデータＭのＩｎ＿ｐｏｒｔ：Ｐｉに対応するエントリのＦ−ＰＩＤ（変換後のＰＩＤ）であるＦＰｉを取得し（ステップＳ２５）、メタデータＭのＩｎ＿ｐｏｒｔをＦＰｉで更新する（ステップＳ２６）。なお、ステップＳ２５及びステップＳ２５の処理は入力ポート番号変換部３６ｂにより行われる。
【００６８】
そして、ＮＩＣ２ａは、メタデータＭを用いて検索を実施し、検索がヒットしたか否かを判定する（ステップＳ２７）。そして、検索がミスした場合には、ＮＩＣ２ａは、制御アプリに受信パケットを転送し（ステップＳ２８）、処理を終了する。一方、検索がヒットした場合には、ＮＩＣ２ａは、ヒットしたエントリのアクション情報をメタデータＭに追加する（ステップＳ２９）。なお、アクション情報には出力ポート番号ＦＰｏが含まれる。
【００６９】
そして、ＮＩＣ２ａは、アクション情報に含まれるポート出力以外のアクションを実行する（ステップＳ３０）。アクションには、ヘッダ情報の書換え等がある。そして、ＮＩＣ２ａは、アクションがドロップか否かを判定し（ステップＳ３１）、アクションがドロップである場合には、受信パケットを廃棄し（ステップＳ３２）、処理を終了する。一方、アクションがドロップでない場合には、ＮＩＣ２ａは、ステップＳ３３へ移動する。なお、ステップＳ２７〜ステップＳ３２の処理は検索部３６ｃにより行われる。
【００７０】
そして、ＮＩＣ２ａは、出力ポート変換表からメタデータＭのＯｕｔ＿ｐｏｒｔ：ＦＰｏに対応するエントリのＰＩＤ（変換後のＰＩＤ）であるＰｏを取得する（ステップＳ３３）。そして、ＮＩＣ２ａは、出力ポート変換表からメタデータＭのＩｎ＿ｐｏｒｔ：ＦＰｉに対応するエントリのＰＩＤ（変換後のＰＩＤ）であるＰｉを取得する（ステップＳ３４）。そして、ＮＩＣ２ａは、メタデータＭのＩｎ＿ｐｏｒｔ、Ｏｕｔ＿ｐｏｒｔをそれぞれＰｉ、Ｐｏで更新し、クロスバースイッチ３６ｅに出力する（ステップＳ３５）。なお、ステップＳ３３〜ステップＳ３５の処理は出力ポート番号変換部３６ｄにより行われる。
【００７１】
そして、ＮＩＣ２ａは、ＰｏのＮＩＣ−ＩＤが自ＮＩＣ２ａを示すか否かを判定し（ステップＳ３６）、自ＮＩＣ２ａを示す場合には、メタデータＭを削除し、ＰｏのＮＩＣ内ポートＩＤに応じた仮想ポート３４に受信パケットを出力する（ステップＳ３７）。一方、ＰｏのＮＩＣ−ＩＤが自ＮＩＣ２ａを示さない場合には、ＮＩＣ２ａは、ＮＩＣ−ＩＤで特定されるＮＩＣ２ａへ受信パケットを転送する（ステップＳ３８）。なお、ステップＳ３６の処理は中継部３６により行われ、ステップＳ３７の処理は仮想ポート処理部３２により行われ、ステップＳ３８の処理はＮＩＣ間転送処理部３５により行われる。
【００７２】
このように、入力ポート番号変換部３６ｂが受信ポート番号を変換し、出力ポート番号変換部３６ｄが検索部３ｃにより検索された出力ポート番号を変換する。したがって、ＮＩＣ２ａは、仮想ポート３４の片寄が行われた場合にも、検索部３ｃのルールを変更することなく、パケットの中継を正しく行うことができる。
【００７３】
図９Ａは、入力側のＮＩＣ間転送処理のフローを示すフローチャートである。図９Ａに示すように、入力側のＮＩＣ間転送処理部３５は、ＮＩＣ間転送を記録する（ステップＳ４２）。そして、入力側のＮＩＣ間転送処理部３５は、出力ポート番号ＰｏからＮＩＣ−ＩＤを抽出し（ステップＳ４２）、ＮＩＣ−ＩＤで識別されるＮＩＣ２ａに受信パケットをメタデータ付で出力する（ステップＳ４３）。
【００７４】
このように、入力側のＮＩＣ間転送処理部３５は、ＮＩＣ間転送を記録することによって、ＮＩＣ２ａ間の転送が頻繁に行われているか否かを判定することができる。
【００７５】
図９Ｂは、出力側のＮＩＣ間転送処理のフローを示すフローチャートである。図９Ｂに示すように、出力側のＮＩＣ間転送処理部３５は、メタデータ付パケットを受信し（ステップＳ５１）、受信パケットをクロスバースイッチ３６ｅに出力する（ステップＳ５２）。
【００７６】
なお、クロスバースイッチ３６ｅに出力された受信パケットは、仮想ポート処理部３２に転送され、仮想ポート処理部３２が、メタデータＭを削除し、ＰｏのＮＩＣ内ポートＩＤに応じた仮想ポート３４に出力する。
【００７７】
このように、ＮＩＣ間転送において、出力側のＮＩＣ間転送処理部３５が受信パケットをクロスバースイッチ３６ｅに出力するので、出力側の中継部３６は検索部３６ｃをスキップすることができ、パケットの中継を高速に行うことができる。
【００７８】
なお、図１では、ＮＩＣ２ａの構成に焦点をあてて情報処理装置１の構成について説明したが、図１の仮想スイッチ制御部２ｂは制御アプリをＣＰＵで実行することによって実現される。そこで、制御アプリを実行する点に焦点をあてた情報処理装置１の構成について説明する。図１０は、制御アプリを実行する点に焦点をあてた情報処理装置１の構成を示す図である。
【００７９】
図１０に示すように、情報処理装置１は、メモリ５１と、ＣＰＵ５２と、２台のＮＩＣ２ａとを有する。また、情報処理装置１は、ＨＤＤ（Hard  Disk  Drive）５４と、スーパーＩＯ（Input  Output）５５と、ＤＶＩ（Digital  Visual  Interface）５６と、ＯＤＤ（Optical  Disk  Drive）５７とを有する。
【００８０】
メモリ５１は、プログラムやプログラムの実行途中結果などを記憶するＲＡＭ（Random  Access  Memory）である。ＣＰＵ５２は、メモリ５１からプログラムを読み出して実行する中央処理装置である。ＣＰＵ５２は、メモリコントローラ５２ａと、Ｉ／Ｏコントローラ５２ｂを有する。
【００８１】
ＨＤＤ５４は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ５５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ５６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ５７は、ＤＶＤの読み書きを行う装置である。
【００８２】
ＮＩＣ２ａは、Ｉ／Ｏバス２９によりＣＰＵ５２に接続され、ＨＤＤ５４及びＯＤＤ５７は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ５２に接続される。スーパーＩＯ５５は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ５２に接続される。
【００８３】
そして、情報処理装置１において実行される制御アプリは、情報処理装置１により読み出し可能な記録媒体の一例であるＤＶＤに記憶され、ＯＤＤ５７によってＤＶＤから読み出されて情報処理装置１にインストールされる。あるいは、制御アプリは、ＮＩＣ２ａを介して接続された他の情報処理装置のデータベース等に記憶され、これらのデータベースから読み出されて情報処理装置１にインストールされる。そして、インストールされた制御アプリは、ＨＤＤ５４に記憶され、メモリ５１に読み出されてＣＰＵ５２によって実行される。
【００８４】
なお、図１０では、情報処理装置１は１台のＣＰＵ５２を有するが、情報処理装置１は複数のＣＰＵ５２を有してもよい。複数のＣＰＵ５２を有する情報処理装置１としては、例えば、ＮＵＭＡ（Non-Uniform  Memory  Access）構成の情報処理装置１がある。
【００８５】
図１１は、ＮＵＭＡ構成の情報処理装置１における仮想ポート３４の片寄を説明するための図である。図１１では、情報処理装置１は、ＣＰＵ＃１及びＣＰＵ＃２で表される２つのＣＰＵ５２を有する。ＣＰＵ＃１はメモリ＃１で表されるメモリ４及びＮＩＣ＃１で表されるＮＩＣ２ａに接続し、ＣＰＵ＃２はメモリ＃２で表されるメモリ４及びＮＩＣ＃２で表されるＮＩＣ２ａに接続する。ＣＰＵ＃１とＣＰＵ＃２はＣＰＵ間リンク２５で接続される。
【００８６】
ＣＰＵ＃１はメモリコントローラ＃１で表されるメモリコントローラ５２ａとＩ／Ｏコントローラ＃１で表されるＩ／Ｏコントローラ５２ｂを有する。ＣＰＵ＃２はメモリコントローラ＃２で表されるメモリコントローラ５２ａとＩ／Ｏコントローラ＃２で表されるＩ／Ｏコントローラ５２ｂを有する。ＣＰＵ＃１とＮＩＣ＃１はＩ／Ｏバス＃１で表されるＩ／Ｏバス２９により接続され、ＣＰＵ＃２とＮＩＣ＃２はＩ／Ｏバス＃２で表されるＩ／Ｏバス２９により接続される。
【００８７】
ＮＩＣ＃１では中継部＃１で表される中継部３６が動作し、ＮＩＣ＃２では中継部＃２で表される中継部３６が動作する。ＶＭ＃１はＣＰＵ＃１で動作し、ＶＭ＃２はＣＰＵ＃２で動作する。ＶＭ＃１が使用するリングバッファ４ａはメモリ＃１に確保され、ＶＭ＃２が使用するリングバッファ４ｂはメモリ＃２に確保される。ＶＭ＃１のｖｎｉｃ５ａは中継部＃１に接続し、ＶＭ＃２のｖｎｉｃ５ａは中継部＃２に接続する。
【００８８】
ＶＭ＃１は、送信するデータをメモリ＃１のリングバッファ４ａに書き込む。リングバッファ４ａに書き込まれたデータは、メモリコントローラ＃１、Ｉ／Ｏコントローラ＃１、Ｉ／Ｏバス＃１を介して中継部＃１により読み出される。
【００８９】
そして、中継部＃１は、Ｉ／Ｏバス＃１、Ｉ／Ｏコントローラ＃１、ＣＰＵ間リンク２５、Ｉ／Ｏコントローラ＃２、Ｉ／Ｏバス＃２を介して中継部＃２へデータを転送する。そして、中継部＃２は、Ｉ／Ｏバス＃２、Ｉ／Ｏコントローラ＃２、メモリコントローラ＃２を介してリングバッファ４ｂへデータを書き込む。そして、ＶＭ＃２は、リングバッファ４ｂからデータを読み出す。
【００９０】
このように、ＮＵＭＡ構成の情報処理装置１でも、ＣＰＵ５２が１台の場合と同様に、Ｉ／Ｏバス２９上で複数の折り返しが発生する。したがって、ＶＭ＃１及びＶＭ＃２に接続する仮想ポート３４をいずれかの中継部３６に片寄することで、Ｉ／Ｏバス帯域の浪費を防ぐことができる。
【００９１】
なお、ＣＰＵ５２とメモリ４とＮＩＣ２ａとを有する情報処理装置を複数有する情報処理システムも、異なるＣＰＵ５２で動作するＶＭ５がそれぞれ接続する仮想ポート３４を片寄することで、Ｉ／Ｏバス帯域の浪費を防ぐことができる。
【００９２】
上述してきたように、実施例では、仮想ポート３４が片寄された場合の片寄前後のＰＩＤを対応付けて入力ポート変換表及び出力ポート変換表に記憶する。そして、入力ポート番号変換部３６ｂが、入力ポート変換表を用いて片寄後の入力仮想ポート３４のＰＩＤを片寄前のＰＩＤに変換する。そして、検索部３６ｃが、入力ポート番号変換部３６ｂにより変換されたＰＩＤを用いてルールを検索し、出力仮想ポート３４のＰＩＤを特定する。そして、出力ポート番号変換部３６ｄが、検索部３６ｃにより特定されたＰＩＤを出力ポート変換表を用いて片寄後のＰＩＤに変換する。
【００９３】
したがって、情報処理装置１は、検索部３６ｃにより検索されるルールを変更することなく、ＶＭ５に接続された仮想ポート３４を同じＮＩＣ２ａに片寄することができ、Ｉ／Ｏバス帯域の浪費を防ぐことができる。片寄によりポート変換表３６ａの設定が必要になるが、検索部３６ｃにより検索される数多くのルールの変更と比較して、仮想スイッチ制御部２ｂは少ない時間でポート変換表３６ａを設定することができる。
【００９４】
また、実施例では、ＮＩＣ間転送処理部３５が入力仮想ポート３４と出力仮想ポート３４の組についてＮＩＣ間転送回数を数え、ＮＩＣ間転送回数が指定閾値を超えると仮想スイッチ制御部２ｂに入力仮想ポート３４及び出力仮想ポート３４のＰＩＤを通知する。そして、仮想スイッチ制御部２ｂが、片寄するＮＩＣ２ａ及び移動先の仮想ポート３４を決定し、各ＮＩＣ２ａのポート変換表３６ａを更新する。したがって、ＮＩＣ２ａは、ポート変換表３６ａを用いてＰＩＤを正しく変換することができる。
【００９５】
また、実施例では、仮想スイッチ制御部２ｂは、仮想ポート３４の移動(交換)を移動管理表２１を用いて管理し、移動管理表２１に基づいてポート変換表３６ａを更新する。したがって、仮想スイッチ制御部２ｂは、ＶＭ５に接続する仮想ポート３４の移動(交換)が複数回行われた場合にも、ポート変換表３６ａを正しく更新することができる。
【００９６】
また、実施例では、ＮＩＣ間転送処理部３５は、他のＮＩＣ２ａからパケットを受信すると、受信したパケットを検索部３６ｃをスキップしてクロスバースイッチ３６ｅに転送する。したがって、後段のＮＩＣ２ａは、ルールの検索が不要になり、パケットの中継を高速に行うことができる。
【００９７】
なお、ＮＵＭＡ構成の情報処理装置１のように複数のＣＰＵ５２を有する情報処理装置１も、異なるＣＰＵ５２で動作するＶＭ５がそれぞれ接続する仮想ポート３４を片寄することで、Ｉ／Ｏバス帯域の浪費を防ぐことができる。
【００９８】
また、実施例では、ＮＩＣ２ａが入力仮想ポート３４で受信したパケットにメタデータを付与し、メタデータに含まれる仮想ポート番号を変換する場合について説明したが、ＮＩＣ２ａはメタデータを用いることなく仮想ポート番号を変換してもよい。
【００９９】
また、実施例では、ポート変換表３６ａが入力ポート変換表と出力ポート変換表を有する場合について説明したが、入力ポート番号変換部３６ｂが入力ポート変換表を有し、出力ポート番号変換部３６ｄが出力ポート変換表を有してもよい。
【０１００】
また、実施例では、ポート変換表３６ａが入力ポート変換表と出力ポート変換表を有する場合について説明したが、ポート変換表３６ａは出力ポート変換表だけを有してもよい。
【０１０１】
また、実施例では、ＮＩＣ２ａに仮想スイッチ６の中継部６２をオフロードする場合について説明したが、他の通信装置等のオフロードデバイスに仮想スイッチ６の中継部６２をオフロードする場合にも本発明を同様に適用することができる。
【０１０２】
なお、ＮＩＣ２ａがスマートＮＩＣのようにプロセッサ及びＲＡＭを有する場合、図１に示した中継部３６等のＮＩＣ２ａの構成の一部をプロセッサで実行されるプログラムにより実現してもよい。プログラムは、例えば、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ等の不揮発性記憶装置に記憶され、ＲＡＭに読み出される。そして、プログラムは、プロセッサによりＲＡＭから読み出されて実行される。
【符号の説明】
【０１０３】
１    情報処理装置
２ａ，７，９    ＮＩＣ
２ｂ，８１    仮想スイッチ制御部
４    メモリ
４ａ，４ｂ    リングバッファ
５    ＶＭ
５ａ    ｖｎｉｃ
６    仮想スイッチ
２１    移動管理表
２５    ＣＰＵ間リンク
２９    Ｉ／Ｏバス
３１    Ｉ／Ｏバス・ＤＭＡコントローラ
３２    仮想ポート処理部
３２ａ    仮想ポート受信処理部
３２ｂ    仮想ポート送信処理部
３３    ＤＭＡメモリ情報テーブル
３４    仮想ポート
３５    ＮＩＣ間転送処理部
３５ａ    ＮＩＣ間転送受信部
３５ｂ    ＮＩＣ間転送送信部
３６    中継部
３６ａ    ポート変換表
３６ｂ    入力ポート番号変換部
３６ｃ    検索部
３６ｄ    出力ポート番号変換部
３６ｅ    クロスバースイッチ
３７，７７，９７    物理ポート
３８    ＮＩＣ間転送記憶部
３９    分類部
４０    外部Ｉ／Ｆ
５１    メモリ
５２    ＣＰＵ
５２ａ    メモリコントローラ
５２ｂ    Ｉ／Ｏコントローラ
５４    ＨＤＤ
５５    スーパーＩＯ
５６    ＤＶＩ
５７    ＯＤＤ
６１    制御部
６２    中継部
６４，９４    ｖｐｏｒｔ
９６    オフロード中継部
【図１】
2019161319.tif 000003
【図２】
2019161319.tif 000004
【図３】
2019161319.tif 000005
【図４】
2019161319.tif 000006
【図５】
2019161319.tif 000007
【図６】
2019161319.tif 000008
【図７】
2019161319.tif 000009
【図８】
2019161319.tif 000010
【図９Ａ】
2019161319.tif 000011
【図９Ｂ】
2019161319.tif 000012
【図１０】
2019161319.tif 000013
【図１１】
2019161319.tif 000014
【図１２】
2019161319.tif 000015
【図１３】
2019161319.tif 000016