(57)【要約】【課題】  パケットの処理にかかるデータ系通信と制御系通信とがバスを共用する場合であっても、QoS制御の精度の劣化を抑制できる情報処理装置等を提供する。【解決手段】  本発明の一態様に係る情報処理装置５００は、データに対する、転送を含む複数の種類の処理の少なくとも１つの処理を示し、前記データの転送に使用される通信経路を介して読み出されるルールを、キャッシュ部１２２に格納するか否かの決定を、前記データのサイズに基づいて行う決定部１２５と、格納すると決定された前記ルールの前記キャッシュ部１２２への格納を行う制御部１２６と、を備える。【選択図】      図１４
2020017911.tif 000002
【特許請求の範囲】
【請求項１】
データに対する、転送を含む複数の種類の処理の少なくとも１つの処理を示し、前記データの転送に使用される通信経路を介して読み出されるルールを、キャッシュ手段に格納するか否かの決定を、前記データのサイズに基づいて行う決定手段と、
格納すると決定された前記ルールの前記キャッシュ手段への格納を行う制御手段と、
を備える情報処理装置。
【請求項２】
前記制御手段は、前記データのサイズが所定の基準より小さい場合に、前記ルールが前記キャッシュ手段に優先的に格納されるよう、前記決定を行う
請求項１に記載の情報処理装置。
【請求項３】
前記データに行われる前記処理を特定することによって生じた、前記通信経路を介した通信の負荷に基づいて、前記データを転送する通信の帯域を制御するスケジューリング手段
をさらに備える請求項１又は２に記載の情報処理装置。
【請求項４】
前記通信の負荷は、前記ルールの読み出しによって生じた、前記通信経路を介した通信の量を含む
請求項３に記載の情報処理装置。
【請求項５】
前記通信経路の使用率を測定する測定手段をさらに備え、
前記スケジューリング手段は、前記使用率にさらに基づいて、前記帯域を制御する
請求項３又は４に記載の情報処理装置。
【請求項６】
前記スケジューリング手段は、前記データの前記ルールがキャッシュ手段に格納されていた否かに基づいて、前記通信の負荷が生じたか否かの判定を行い、当該判定の結果に基づいて、前記通信の帯域を制御する
請求項３乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
複数の仮想マシンと、それぞれ当該複数の仮想マシンの１つのネットワークインタフェースとして動作する複数の仮想ネットワークインタフェースとを提供する実行手段と、
外部通信ネットワークとの通信を中継する通信手段と、
前記通信手段を介してデータを受け取り、受け取った前記データに適合する前記ルールを前記制御手段に要求し、要求に対して返送された前記ルールが示す前記処理を、受け取った前記データに対して行う処理手段と、
前記ルールを記憶するルール記憶手段と、
をさらに備え、
前記制御手段は、前記データに適合する前記ルールを要求された場合、当該ルールが前記キャッシュ手段に格納されている場合当該キャッシュ手段から前記ルールを読み出し、前記ルールが前記キャッシュ手段に格納されていない場合当該ルールを前記ルール記憶手段から読み出し、読み出した前記ルールを返送し、
前記処理手段は、返送された前記ルールが示す、前記データに行われる処理が、前記複数の仮想マシンのいずれかへの転送である場合、前記データを前記スケジューリング手段に送出し、
前記スケジューリング手段は、それぞれ前記複数の仮想マシンの１つに関連付けられている複数の一時記憶領域を含み、前記データを受け取った場合前記データが転送される仮想マシンに関連付けられている一時記憶領域に前記データを格納し、当該一時記憶領域から読み出した前記データを、前記通信経路を介して前記データが転送される前記仮想マシンに送信し、さらに、前記データに行われる前記処理を特定することによって生じた前記通信の負荷に基づいて、前記一時記憶領域からデータを読み出すか否かを決定することによって、前記帯域を制御する
請求項３乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
前記制御手段は、前記データが破棄された場合、当該データの前記ルールが前記キャッシュ手段に格納されている場合、当該ルールが優先的に前記キャッシュ手段に保持されるように設定する
請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
データに対する、転送を含む複数の種類の処理の少なくとも１つの処理を示し、前記データの転送に使用される通信経路を介して読み出されるルールを、キャッシュ手段に格納するか否かの決定を、前記データのサイズに基づいて行い、
格納すると決定された前記ルールの前記キャッシュ手段への格納を行う、
情報処理方法。
【請求項１０】
コンピュータに、
データに対する、転送を含む複数の種類の処理の少なくとも１つの処理を示し、前記データの転送に使用される通信経路を介して読み出されるルールを、キャッシュ手段に格納するか否かの決定を、前記データのサイズに基づいて行う決定処理と、
格納すると決定された前記ルールの前記キャッシュ手段への格納を行う制御処理と、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報を処理する技術に関し、特に、データの通信に関連する情報を処理する技術に関する。
【背景技術】
【０００２】
一定のルールに従ってパケットを転送したり破棄したりする装置を、以下では、パケット処理装置と表記する。パケット処理装置には、例えば、Ethernet（登録商標）スイッチやルータ、ＳＤＮ（Ｓｏｆｔｗａｒｅ  Ｄｅｆｉｎｅｄ  Ｎｅｔｗｏｒｋ）スイッチ等がある。パケット処理装置は、パケットを受信し処理する場合、一般的に下記の処理を実行する。
１: パケットを通信インタフェース（以下では、NIC（Network Interface Controller）とも表記する）から受信する。
２: パケットを処理するために必要な情報を検索する。
３: 当該情報に基づき当該パケットを処理する。
【０００３】
上記２の処理は、Ｐａｃｋｅｔ  Ｃｌａｓｓｉｆｉｃａｔｉｏｎとも呼ばれ、あらかじめ与えられたルールセットの中から受信パケットに適合する最高優先度のルールを探索する処理である。ルールは、少なくとも、マッチ条件（例えばアドレスの範囲を表す情報）と、マッチ条件に関連付けられているアクションを示す情報とを含む。マッチ条件は、ルールが受信パケットに適用されるか判定するための条件である。例えば、マッチ条件が表す範囲にパケットの送信先のアドレスが含まれる場合、そのパケットはマッチ条件に適合すると判定される。アクションは、マッチ条件に適合すると判定されたパケットに対して実行される処理である。パケットがマッチ条件に適合すると判定された場合、ルールがそのパケットに適用される。すなわち、パケットがマッチ条件に適合すると判定された場合、そのマッチ条件に関連付けられているアクションがそのパケットに行われる。以下の説明において、パケットが適合するルールは、パケットが適合するマッチ条件を含むルールを表す。また、ルールは、優先度や統計情報を含む場合もある。また、上記２の処理は、ＦＩＢ（Ｆｏｒｗａｒｄｉｎｇ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｂａｓｅ） Ｌｏｏｋｕｐと呼ばれる場合もある。また、上記ルールセットは、以下の説明では、FIBとも表記される。
【０００４】
近年クラウド等で、計算機仮想化技術が多用されている。計算機仮想化技術は、物理サーバ（以下では、ホストマシンとも表記）上に、仮想的なサーバ（以下では、仮想マシン、及び、Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ（ＶＭ）とも表記）を実装し、その仮想的なサーバを動作させる技術である。計算機仮想化技術では、仮想スイッチ（Ｖｉｒａｔｕａｌ  Ｓｗｉｔｃｈ）が、上述したパケット処理装置に相当する機能として、ホストマシンに実装される。パケットの転送は、仮想マシン間、および、仮想マシンとホストマシンが備える通信インタフェースとの間で、行われる。仮想マシンは、仮想的な通信インタフェースを備えるように構成される。仮想スイッチは、ホストマシンにおいて、SW（Software）によって実装されてもよい。言い換えると、仮想スイッチは、例えば、メモリにロードされた、仮想スイッチの機能を実現するプログラムを実行するプロセッサによって実現されてもよい。仮想スイッチは、ホストマシンにおいて、例えば回路等のHW（Hardware）によって実装されてもよい。仮想スイッチは、それらの組み合わせによって実装されてもよい。
【０００５】
図１に、仮想スイッチを使用するホストマシンの構成例を示す。図１に示すホストマシン２００は、ＣＰＵ（Central Processing Unit）及びメインメモリ２１０と、仮想スイッチ用ＨＷ２２０とを含む。ＣＰＵ及びメインメモリ２１０は、１個以上のＣＰＵと、ＣＰＵがアクセスできる、メインメモリとして動作するメモリとによって実現される。仮想マシン２１４は、CPUおよびメインメモリにより実現される。言い換えると、仮想マシンは、メインメモリと、メインメモリにロードされた、仮想マシン２１４の機能を実現するプログラムを実行するCPUとによって実現される。仮想スイッチ２２１は、仮想スイッチ用HW２２０により実現される。以下の説明では、仮想マシン２１４の機能を実現するプログラムによって制御され、仮想マシン２１４として動作するCPUの動作を、仮想マシン２１４の動作として説明する。また、仮想スイッチ２２１として動作する仮想スイッチ用HW２２０の動作を、仮想スイッチ２２１の動作として説明する。CPU及びメインメモリ２１０と仮想スイッチ用HW２２０とは、バス２３０を介して接続されている。仮想マシン２１４の仮想NIC２１１と仮想スイッチ２２１との間のパケット通信は、メインメモリ内に確保されたキューを介して行われる。キューは、FIFO（First In First Out）のメモリであり、以下では、単にFIFOとも表記される。仮想スイッチ２２１が使用するFIB２１２は、メインメモリに配置される。
【０００６】
以下の動作は、VM２１４宛のパケットがNIC２４０により受信された場合の例である。
（１）仮想スイッチ２２１がNIC２４０からパケットを受信する。
（２）仮想スイッチ２２１がFIB２１２（メインメモリ２１０上）を参照し、当該パケットの処理情報を決定する（ここでは、当該パケットをVM２１４に送信する、と決定したとする）。
（３）仮想スイッチ２２１が当該パケットを当該VM２１４の仮想NIC２１１の受信キュー（メインメモリ２１０内に確保されている）に追加する。
（４）VM２１４が当該受信キューから当該パケットを受信する。
【０００７】
例えばクラウド環境においては、あるホストマシン上で動作する複数の仮想マシンが、それぞれ異なる顧客によって利用される場合がある（このような状況はマルチテナントとも呼ばれる）。このとき、ある仮想マシンが多くのCPUを使ったり、通信を行ったりしたときに、その影響により、他の仮想マシンがCPUを使えなくなったり、通信ができなくなったりすることは避けなければならない。そのために、QoS（Quality of Service）制御が使用される。通信に対するQoS制御は、例えば仮想スイッチで実行され、以下のような制御を含む。
（１）所定の閾値以上のレートの通信をブロックしたり、遅延させたり、そのような通信のパケットに印をつけたりする（Policing, Shaping）。
（２）特定の種類の通信に対し通信レートを保証する（帯域保証）。
（３）特定の種類の通信に対し遅延時間やジッタを保証する（遅延保証）。
（４）特定の種類の通信を優先する（優先制御）。
【０００８】
通信のQoS制御のための方式やアルゴリズムは、例えば特許文献１によって開示されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特許第３４３４６４２号
【発明の概要】
【発明が解決しようとする課題】
【００１０】
例えば図１のような構成では、仮想NIC２１１で送受信されるパケットデータの通信（以下、データ系通信と表記する）が、メインメモリと仮想スイッチ用HW２２０との間で、バス２３０を介して行われる。また、仮想スイッチ２２１による、メインメモリ２１０に配置されているFIB２１２へのアクセスの通信（以下、制御系通信と表記する）も、同じバス２３０を介して行われる。言い換えると、データ系通信と制御系通信とが、バス２３０を共用する。そのため、QoS制御（例えば帯域保証）を行う際、特に仮想NIC２１１における通信に対し帯域保証が行えなくなる虞がある。
【００１１】
具体的には、仮想スイッチ２２１は、パケットを受信する毎に、そのパケットの処理方法を決定するためにFIB２１２にアクセスし、その結果、バスの帯域を消費する。一般に、受信パケットのサイズが小さいほどパケットの処理の回数は増え、その結果、FIB２１２へのアクセスによるバスの帯域の消費は増加する。バス２３０の帯域は有限であるため、FIB２１２へのアクセスによるバスの帯域の消費が増えた場合、パケットデータの通信に利用可能な帯域は減少する。
【００１２】
そのため、通信トラフィックの状況に応じてパケットデータの通信に利用可能な帯域が変動し、その結果、帯域保証が行えなくなったり、帯域保証の精度が劣化したりする。
【００１３】
特許文献１に記載の技術は、データ系通信と制御系通信が通信経路を共用する場合のQoS制御の精度の劣化を抑制することはできない。
【００１４】
本発明は、かかる問題に鑑みてなされたものである。本発明の目的は、パケットの処理にかかるデータ系通信と制御系通信とがバスを共用する場合であっても、QoS制御の精度の劣化を抑制できる情報処理装置等を提供することにある。
【課題を解決するための手段】
【００１５】
本発明の一態様に係る情報処理装置は、データに対する、転送を含む複数の種類の処理の少なくとも１つの処理を示し、前記データの転送に使用される通信経路を介して読み出されるルールを、キャッシュ手段に格納するか否かの決定を、前記データのサイズに基づいて行う決定手段と、格納すると決定された前記ルールの前記キャッシュ手段への格納を行う制御手段と、を備える。
【００１６】
本発明の一態様に係る情報処理方法は、データに対する、転送を含む複数の種類の処理の少なくとも１つの処理を示し、前記データの転送に使用される通信経路を介して読み出されるルールを、キャッシュ手段に格納するか否かの決定を、前記データのサイズに基づいて行い、格納すると決定された前記ルールの前記キャッシュ手段への格納を行う。
【００１７】
本発明の一態様に係るプログラムは、コンピュータに、データに対する、転送を含む複数の種類の処理の少なくとも１つの処理を示し、前記データの転送に使用される通信経路を介して読み出されるルールを、キャッシュ手段に格納するか否かの決定を、前記データのサイズに基づいて行う決定処理と、格納すると決定された前記ルールの前記キャッシュ手段への格納を行う制御処理と、を実行させる。
【発明の効果】
【００１８】
本発明には、パケットの処理にかかるデータ系通信と制御系通信とがバスを共用する場合であっても、QoS制御の精度の劣化を抑制できる。
【図面の簡単な説明】
【００１９】
【図１】図１は、仮想スイッチを使用するホストマシンの構成例を示すブロック図である。
【図２】図２は、本発明の第１及び第２の実施形態に係る情報処理装置を実現する、コンピュータ１０のハードウェア構成の一例を示すブロック図である。
【図３】図３は、本発明の第１及び第２の実施形態に係る情報処理装置の構成の一例を示すブロック図である。
【図４】図４は、本発明の第１の実施形態に係るスケジューリング部の構成の一例を示すブロック図である。
【図５】図５は、本発明の第１の実施形態に係るキャッシュ部を、キャッシュメモリとして実現した場合の構成の一例を示す模式図である。
【図６】図６は、本発明の第１及び第２の実施形態に係る情報処理装置の、パケットを受信した際の動作の例を表すフローチャートである。
【図７】図７は、本発明の第１及び第２の実施形態に係る情報処理装置の、ルールのキャッシュエントリを作成する動作の詳細を表すフローチャートである。
【図８】図８は、本発明の第１及び第２の実施形態に係る情報処理装置の、キャッシュエントリを更新する動作の例を表すフローチャートである。
【図９】図９は、本発明の第１の実施形態に係る情報処理装置の、受信したパケットを送信する動作の例を表すフローチャートである。
【図１０】図１０は、本発明の第１の実施形態に係る情報処理装置の、スケジューリング処理を行う動作の例を表すフローチャートである。
【図１１】図１１は、本発明の第２の実施形態に係る情報処理装置の、受信したパケットを送信する処理の例を表すフローチャートである。
【図１２】図１２は、本発明の第２の実施形態に係る情報処理装置の、スケジューリングの処理を行う動作の例を表すフローチャートである。
【図１３】図１３は、本発明の第１及び第２の実施形態に係る情報処理システムの構成の例を表すブロック図である。
【図１４】図１４は、本発明の第３の実施形態に係る情報処理装置の構成の例を表すブロック図である。
【図１５】図１５は、本発明の第３の実施形態に係る情報処理装置の動作の例を表すフローチャートである。
【発明を実施するための形態】
【００２０】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００２１】
＜第１の実施形態＞
＜＜第１の実施形態の構成例＞＞
まず、本発明の第１の実施形態の構成例について、図２〜図５を用いて説明する。
図２は、本実施形態に係る情報処理装置１００を実現する、コンピュータ１０のハードウェア構成の一例を示すブロック図である。本実施形態の情報処理装置１００は、例えば図２に示すコンピュータ１０によって実現できる。図２に例示するコンピュータ１０は、ＣＰＵ１０１と、メモリ１０２と、バス１０３Ａと、バス１０３Ｂと、バス１０３Ｃと、ＮＩＣ１０４と、仮想スイッチ用ハードウェア１２０と、記憶装置１０５とを含む。情報処理装置１００は、さらに、記憶媒体１０７にアクセスできるアクセス装置１０６と、ＣＰＵ１０１とアクセス装置１０６とを接続するバス１０３Ｄとを含んでいてもよい。図２に示す構成要素の数や接続関係は一例である。情報処理装置１００が含む構成要素の数は、図２に示されている数に限られない。
【００２２】
ＣＰＵ１０１は、情報処理の演算を行うＣＰＵである。ＣＰＵ１０１は仮想化機能を備えていてよい。ＣＰＵ１０１は、メモリ１０２に記憶されたプログラムおよびデータを用いて情報処理を行う。具体的には、ＣＰＵ１０１は、メモリ１０２に格納されているプログラムを実行し、そのプログラムの制御のもとで、例えば、仮想マシンとして機能する。
【００２３】
メモリ１０２は、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等のメモリであり、コンピュータ１０のメインメモリとして機能する。メモリ１０２は、メモリチップに加えて、メモリコントローラ、キャッシュメモリ、キャッシュコントローラ等を含んでもよい。
【００２４】
バス１０３Ａは、それぞれ、ＣＰＵ１０１とメモリ１０２とを接続するバスである。バス１０３Ｂは、仮想スイッチ用ハードウェア１２０とメモリ１０２とを接続するバスである。バス１０３Ｃは、ＣＰＵ１０１と記憶装置１０５とを接続するバスである。バス１０３Ａ、バス１０３Ｂ、及び、バス１０３Ｃは、異なるバスであってもよい。バス１０３Ａ、バス１０３Ｂ、及び、バス１０３Ｃのいずれか又は全てが、同じバスであってもよい。バス１０３Ａ、バス１０３Ｂ、及び、バス１０３Ｃは、以下の説明において、通信経路とも表記される。
【００２５】
ＮＩＣ１０４は、通信ネットワークに接続するための通信インタフェースである。情報処理装置１００は、ＮＩＣ１０４を介して通信ネットワークに接続される。ＮＩＣ１０４は、例えば、Ｅｔｈｅｒｎｅｔ規格に準拠した通信インタフェースであってよい。コンピュータ１０は、ＮＩＣ１０４を介して、上述の通信ネットワークに接続されている他の装置と、例えば情報処理に係るデータの通信を行う。
【００２６】
仮想スイッチ用ハードウェア１２０は、ＮＩＣ１０４と、後述する仮想ＮＩＣ部１１１として動作するＣＰＵ１０１及びメモリ１０２との間で、転送されるデータのパケットの処理を行うハードウェアである。なお、本実施形態の説明では、データはパケットの形で送信される。また、パケットを、単にデータと表記することもある。以下の説明において、パケットは、送信されるデータから生成された、そのデータの少なくとも一部を含むパケットを表す。パケットは、例えば、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）パケットである。仮想スイッチ用ハードウェア１２０は、Ethernetスイッチやルータ、ＳＤＮスイッチのように、一定のルールに従って、データのパケットを転送したり破棄したりするパケット処理装置としての機能を備える。仮想スイッチ用ハードウェア１２０は、例えば、仮想スイッチとして動作するプロセッサ及びメモリであってもよい。仮想スイッチ用ハードウェア１２０は、ＣＰＵなどのプロセッサによって実現されてもよい。仮想スイッチ用ハードウェア１２０は、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）等の回路よって実現されてもよい。仮想スイッチ用ハードウェア１２０は、それらの回路等の組み合わせによって実現されてもよい。仮想スイッチ用ハードウェア１２０は、さらに、後述のキャッシュ部１２２として機能する、メモリ等の記憶装置を含む。仮想スイッチ用ハードウェア１２０は、後述するルール記憶部１１２に記憶されるＦＩＢ情報を参照し、ＦＩＢ情報に基づいてパケット処理方法を決定する。
【００２７】
記憶装置１０５は、例えばハードディスク等の二次記憶装置である。記憶装置１０５は、ＣＰＵ１０１が実行するプログラムや、プログラムによって制御されるＣＰＵ１０１が情報処理に使用するデータなどを記憶する。ＣＰＵ１０１は、記憶装置１０５に格納されているプログラムを、例えばメモリ１０２にロードし、メモリ１０２にロードされたプログラムを実行してもよい。
【００２８】
記憶媒体１０７は、例えば、ＲＡＭ、ＲＯＭ及びフラッシュメモリなどの半導体記憶媒体、磁気ディスク及び光ディスク等の可搬記憶媒体、又は、ハードディスク等の記憶装置などである。記憶媒体１０７は、上述のプログラムを記憶していてもよい。プログラムは、例えばＣＰＵ１０１によって、記憶媒体１０７から読み出される。読み出されたプログラムは、例えばＣＰＵ１０１によって、記憶装置１０５に書き込まれてもよい。読み出されたプログラムは、例えばＣＰＵ１０１によってメモリ１０２にロードされてもよい。記憶媒体１０７は、ＣＰＵ１０１が情報処理に使用するデータなどを記憶していてもよい。記憶媒体１０７が記憶するデータは、例えばＣＰＵ１０１によって読み出される。読み出されたデータは、例えばＣＰＵ１０１によって、記憶装置１０５に格納されてもよい。読み出されたデータは、例えばＣＰＵ１０１によって、メモリ１０２にロードされてもよい。
【００２９】
アクセス装置１０６は、記憶媒体１０７にアクセスできる装置である。具体的には、アクセス装置１０６は、記憶媒体１０７に格納されているプログラムやデータなどを、読み出すことができる装置である。例えば、記憶媒体１０７が、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）等の媒体である場合、アクセス装置１０６は、ドライブ装置であってもよい。記憶媒体１０７が、例えばフラッシュメモリなどの不揮発メモリである場合、アクセス装置１０６は、コントローラと、コントローラに接続されたコネクタ又はスロットとの組み合わせ等であってもよい。記憶媒体１０７が書き込み可能な記憶媒体であれば、アクセス装置１０６は、プログラムやデータなどを記憶媒体１０７に書き込んでもよい。
【００３０】
図３は、本実施形態に係る情報処理装置１００の構成の一例を示すブロック図である。図３は、本実施形態の情報処理装置１００の機能構成の一例を表す。図３に例示する情報処理装置１００は、仮想通信インタフェース部１１１と、ルール記憶部１１２と、ルール管理部１１３と、情報処理部１１４と、指示受付部１１５と、パケット処理部１２１と、キャッシュ部１２２と、スケジューリング部１２３と、通信インタフェース部１２４と、決定部１２５と、制御部１２６とを含む。情報処理装置１００には、仮想マシンが構築されていてよい。具体的には、情報処理部１１４が、仮想マシンとして動作してよい。言い換えると、情報処理部１１４は、情報処理装置１００において動作する仮想マシンであってもよい。図３に示す例では、情報処理部１１４の数は、３である。仮想通信インタフェース部１１１の数は、情報処理部１１４の数と同じであり、３である。さらに、通信インタフェース部１２４の数も、３である。通信インタフェース部１２４の数は、情報処理部１１４の数と同じでなくてよい。図３に示す構成要素の数や接続関係は一例である。また、接続関係は図３に示す例に限られない。これらは、図２に示したハードウェアによって実現される。また、以下の説明では、情報処理部１１４と、仮想通信インタフェース部１１１とを、まとめて、実行部１１０Ａと表記することもある。言い換えると、実行部１１０Ａは、情報処理部１１４の機能と、仮想通信インタフェース部１１１の機能とを提供する。
【００３１】
後述されるように、具体的には、情報処理部１１４、仮想ＮＩＣ部１１１及びルール管理部１１３は、例えば、ＣＰＵ１０１及びメモリ１０２によって実現される。実行部１１０Ａも、ＣＰＵ１０１及びメモリ１０２によって実現される。ルール記憶部１１２は、例えば、メモリ１０２によって実現される。パケット処理部１２１、キャッシュ部１２２、スケジューリング部１２３、決定部１２５及び制御部１２６は、例えば、仮想スイッチ用ハードウェア１２０によって実現される。
【００３２】
なお、以下の説明及び図面において、仮想通信インタフェース部１１１を、仮想ＮＩＣ部１１１とも表記する。また、通信インタフェース部１２４を、ＮＩＣ部１２４とも表記する。また、複数の仮想ＮＩＣ部１１１を区別する必要が無い説明、複数の仮想ＮＩＣ部１１１に共通する説明、及び、複数の仮想ＮＩＣ部１１１の全体についての説明では、複数の仮想ＮＩＣ部１１１は、区別せずに、仮想ＮＩＣ部１１１と表記される。また、複数の仮想ＮＩＣ部１１１を個々に区別する必要がある場合、複数の仮想ＮＩＣ部１１１を、仮想ＮＩＣ部１１１Ａ、仮想ＮＩＣ部１１１Ｂ、及び、仮想ＮＩＣ部１１１Ｃと表記する。仮想ＮＩＣ部１１１Ａ、仮想ＮＩＣ部１１１Ｂ、及び、仮想ＮＩＣ部１１１Ｃは、まとめて、仮想ＮＩＣ部１１１Ａ〜Ｃとも表記されることもある。
【００３３】
図１３は、本実施形態に係る情報処理システム１の構成の例を表すブロック図である。なお、後述される、第２の実施形態に係る情報処理システム１も、図１３に示す構成を備えていてよい。図１３に示す例では、情報処理システム１は、情報処理装置１００と、情報処理装置１００Ａと、情報処理装置１００Ｂと、情報処理装置１００Ｃと、管理装置３００とを含む。情報処理装置１００、情報処理装置１００Ａ、情報処理装置１００Ｂ、情報処理装置１００Ｃ、及び、管理装置３００は、通信ネットワーク４００を介して、通信可能に接続されている。情報処理装置１００は、ＮＩＣ１０４を介して通信ネットワーク４００と接続されている。情報処理装置１００Ａ、情報処理装置１００Ｂ及び情報処理装置１００Ｃは、情報処理装置１００と同様の構成を備えていてもよい。情報処理装置１００Ａ、情報処理装置１００Ｂ、情報処理装置１００Ｃ及び管理装置３００は、一般的なコンピュータであってもよい。情報処理装置１００は、通信ネットワーク４００を介して、情報処理装置１００Ａ、情報処理装置１００Ｂ、情報処理装置１００Ｃ、及び、管理装置３００と、通信（例えば、データ等の送信及び受信）を行う。具体的には、情報処理装置１００に構築されている仮想マシンは、仮想ＮＩＣ部１１１、ＮＩＣ部１２４及び通信ネットワーク４００を介して、情報処理装置１００Ａ、情報処理装置１００Ｂ及び情報処理装置１００Ｃ等と通信を行う。言い換えると、情報処理装置１００は、情報処理装置１００に構築されている仮想マシンが、仮想ＮＩＣ部１１１、ＮＩＣ部１２４及び通信ネットワーク４００を介して、通信ネットワーク４００に接続されている他の装置と通信できるように構成されている。なお、図４に示す通信ネットワーク４００に接続されている装置は、単なる例であり、図４に示す例に限られない。
【００３４】
情報処理部１１４は、仮想ＮＩＣ部１１１を通じて、例えばパケットの形式の、データの送受信を行う。情報処理部１１４は、受け取ったパケットのデータを使用して情報処理を行ってもよい。情報処理部１１４は、例えばメモリ１０２等に記憶されているデータ等を用いて、情報処理を行ってもよい。情報処理部１１４は、他のデータを用いて情報処理を行ってもよい。情報処理部１１４によって行われる情報処理に、限定はない。情報処理部１１４は、ＣＰＵ１０１によって実現される。上述のように、情報処理部１１４は、仮想マシンとして実現されていてもよい。情報処理部１１４は、仮想マシンにおいて動作するプログラムとして実現されてもよい。
【００３５】
仮想ＮＩＣ部１１１は、仮想的な通信インタフェースであり、情報処理部１１４とスケジューリング部１２３との間の通信を実現する。仮想ＮＩＣ部１１１は、たとえば、仮想マシンの一部として構成される仮想ＮＩＣであってもよい。仮想ＮＩＣ部１１１は、ＣＰＵ１０１およびメモリ１０２によって実現される。仮想ＮＩＣ部１１１を介したパケットの通信は、メモリ１０２に確保された、例えばＦＩＦＯのキューによって実現される。例えば、情報処理部１１４は、仮想ＮＩＣ部１１１を介して送信するパケットを、その仮想ＮＩＣ部１１１用のキューにＥｎｑｕｅｕｅする。スケジューリング部１２３は、仮想ＮＩＣ部１１１用のキューからパケットをＤｅｑｕｅｕｅする。それにより、スケジューリング部１２３は、情報処理部１１４が送信したパケットを受信する。
【００３６】
ルール記憶部１１２は、受信したパケットに行う処理を決定するための情報である、ＦＩＢを記憶する。ルール記憶部１１２は、ＦＩＢとして蓄積された、ルールの集合を記憶する。ルールは、少なくとも、マッチ条件（例えば、アドレスに関する条件）と、マッチ条件に関連付けられているアクションを示す情報とを含む。アクションは、例えば、そのアクションに関連付けられているマッチ条件に、送信先のアドレスが適合したパケットに対して、実行される処理である。以下では、ルールに含まれるマッチ条件にパケットの送信先のアドレスが適合する場合、そのルールは、そのパケットに適合するルールと表記される。ルール記憶部１１２は、メモリ１０２によって実現される。以下の説明では、ルール記憶部１１２が記憶するルールの集合を、ＦＩＢとも表記する。ルール記憶部１１２が記憶するルールは、ルール間の優先度を含んでいてもよい。ルール記憶部１１２が記憶するルールは、ワイルドカードによる条件を含んでいてもよい。ルール記憶部１１２が記憶するルールは、完全一致型のルール(Exact Match)であってもよい。ルール記憶部１１２が記憶するルールは、それらの組み合わせであってもよい。
【００３７】
指示受付部１１５は、ルール記憶部１１２が記憶するルールの、追加の指示、削除の指示、及び、変更の指示を受け付ける。指示受付部１１５は、これらの指示を、例えば、通信インタフェース部１２４を介して、例えば、管理装置３００から受け取ってもよい。指示受付部１１５は、これらの指示を、例えば、情報処理装置１００のユーザ又は管理者から、キーボードなどの入力装置を介して受け取ってもよい。指示受付部１１５は、受け付けた上述の指示を、ルール管理部１１３に送出する。なお、図３では、指示受付部１１５が指示を受け付ける経路は、簡単のため省略されている。
【００３８】
ルール管理部１１３は、ルール記憶部１１２が記憶するＦＩＢの内容を管理する。具体的には、ルール管理部１１３は、例えば指示受付部１１５から受け取った指示に従って、ルール記憶部１１２が記憶するルールの、追加、削除、及び、変更を行う。ルール管理部１１３は、ルールの追加、削除、及び、変更を、例えば、情報処理装置１００のユーザ、及び、管理装置３００等からの指示に従って行ってもよい。ルール管理部１１３は、ルールの追加、削除、及び、変更を、例えば、情報処理部１１４、及び、パケット処理部１２１等からの要求に基づき行ってもよい。ルール管理部１１３は、例えば、ＣＰＵ１０１およびメモリ１０２によって実現されてもよい。
【００３９】
パケット処理部１２１は、ＮＩＣ部１２４および仮想ＮＩＣ部１１１からパケットを受信し、受信したパケットを処理する。パケット処理部１２１は、受信したパケットを処理する際、キャッシュ部１２２に格納されているルール又はルール記憶部１１２に記憶されているＦＩＢのうち、受信したパケットに適合するルールを読み出す。
【００４０】
パケット処理部１２１は、例えば、受信したパケットの情報を、制御部１２６に送信する。パケットの情報は、ルールが含むマッチ条件との比較に使用される情報（例えば、送信先のアドレス及び送信元のアドレス等）と、パケットのサイズとを含む。制御部１２６に送信されるパケットの情報は、以下の説明では、キーとも表記される。例えば、パケットが、ＩＰパケットである場合などでは、パケットの情報（例えば、後述のキー）は、パケットのヘッダであってもよい。なお、ＩＰパケットのヘッダは、送信元のＩＰアドレス、宛先のＩＰアドレス、データグラム長等を含む。また、例えば、パケット処理部１２１は、データグラム長を、パケットのサイズ（すなわち、パケット長）として使用してもよい。以下の説明のように、パケットのサイズ等を含むパケットの情報を制御部１２６に送信する場合、パケット処理部１２１は、パケットのヘッダの部分のデータを、キーとして送信してよい。
【００４１】
後で詳述するように、制御部１２６が、パケット処理部１２１から、受信したパケットの情報を受け取り、受け取ったパケットの情報に適合するルールを、キャッシュ部１２２又はルール記憶部１１２から読み出す。制御部１２６は、読み出したルールを、パケット処理部１２１に送信する。
【００４２】
パケット処理部１２１は、制御部１２６によって、キャッシュ部１２２又はルール記憶部１１２から読み出されたルールを、制御部１２６から受け取る。パケット処理部１２１は、読み出されたルールに従って、すなわち、ＦＩＢに含まれ、受信したパケットに適合するルールに従って、受信したパケットを処理する。言い換えると、パケット処理部１２１は、受信したパケットが適合するアドレス条件に関連付けられている情報が示すアクションを実行する。言い換えると、パケット処理部１２１は、受信したパケットが適合するルールに含まれる情報が示すアクションを実行する。アクションは、例えば、以下のいずれかの処理である。アクションは、例えば、以下の処理のいずれかの組み合わせであってもよい。
（１）パケットを、指定されたＮＩＣ部１２４または仮想ＮＩＣ部１１１に送信する。
（２）パケットを破棄する。
（３）パケットを変更する。
（４）パケットの受信を、予め定められた通知先に、通知する。
【００４３】
通知先は、例えば、ルール管理部１１３及び管理装置３００などであってもよい。パケット処理部１２１は、パケットを破棄したか否かを、制御部１２６に通知してもよい。パケット処理部１２１は、仮想スイッチ用ハードウェア１２０によって実現される。
【００４４】
キャッシュ部１２２は、ルール記憶部１１２が記憶するＦＩＢの一部（すなわち、ルールの集合の部分集合）をキャッシュする。言い換えると、キャッシュ部１２２は、ルール記憶部１１２が記憶するＦＩＢの一部を、キャッシュとして記憶する。キャッシュ部１２２は、仮想スイッチ用ハードウェア１２０によって実現される。キャッシュ部１２２は、例えば、キャッシュメモリとして実装されてもよい。キャッシュ部１２２は、例えば、ハッシュテーブルを記憶するメモリとして実装されてもよい。キャッシュ部１２２は、ルールに加えて、ルールの優先度を記憶していてもよい。上述のように、ルールが、そのルールの優先度を含んでいてもよい。優先度は、優先的にキャッシュ部１２２に格納されるか否かを示す、二値の値によって表されていてもよい。すなわち、優先度は、優先的にキャッシュ部１２２に格納されることを示す値（例えば１）、又は、優先的にキャッシュ部１２２に格納されないことを示す値（例えば０）のいずれかであってもよい。この場合の優先度は、後述の優先フラグに該当する。以下の説明では、優先的にキャッシュ部１２２に格納されることを示す値をＰと表記し、優先的にキャッシュ部１２２に格納されないことを示す値をＮと表記する。
【００４５】
キャッシュ部１２２は、さらに、ルールに加えて、そのルールをキャッシュ部１２２から削除するか否かを決定するのに使用される情報を記憶していてよい。ルールをキャッシュ部１２２から削除するか否かを決定するのに使用される情報（例えば、ＬＲＵ情報）は、例えば、そのルールが最後に使用された時刻を示す情報であってもよい。時刻を示す情報は、日付の情報を含んでいてよい。ＬＲＵ情報は、最後に使用された時期の新しさの順位を表す値であってもよい。その場合、例えば制御部１２６が、キャッシュ部１２２に格納されているルールを読み出した際、読み出したルールのＬＲＵ情報を、１位を表す情報に変更してよい。そして、制御部１２６は、キャッシュ部１２２に格納されている他の全てのルールのＬＲＵ情報を、変更前の順位より１つ下の順位（すなわち、変更前の順位を表す値より１つ大きい値によって表される順位）を表す情報に変更してもよい。ＬＲＵ情報は、例えば、使用されたか否かを表す情報（本実施形態では、ルールが読み出されたか否かを表す情報）であってもよい。その場合、例えば制御部１２６が、キャッシュ部１２２に格納されているルールのＬＲＵ情報を、定期的に、使用されていないことを表す情報に設定してよい。そして、制御部１２６は、ルールがキャッシュ部１２２から読み出された場合、そのルールのＬＲＵ情報を、使用されたことを表す情報に設定してよい。
【００４６】
制御部１２６は、パケット処理部１２１による、ルール記憶部１１２からのルールの読み出しを中継する。具体的には、制御部１２６は、パケット処理部１２１から、受信したパケットの情報を受け取る。制御部１２６は、受け取った、パケットの情報に基づいて、パケット処理部１２１が受信したパケットに適合するマッチ条件を含むルールを、キャッシュ部１２２に格納されているルール及びルール記憶部１１２に格納されているルールの中から特定する。具体的には、制御部１２６は、例えば、パケット情報が複数のルールのマッチ条件に適合する場合、制御部１２６は、所定の方法に従って、パケットの情報に最もよく適合するマッチ条件を含むルールを、受信したパケットに適合するルールとして選択してもよい。その場合、例えば、マッチ条件がアドレスに対する条件である場合、制御部１２６は、パケットの情報に適合するマッチ条件のうち、適合するアドレスの数が最も少ないマッチ条件を、パケットの情報に最もよく適合するマッチ条件として選択してもよい。パケットの情報に最もよく適合するマッチ条件を選択する方法は、以上で説明した方法に限られない。
【００４７】
パケットの情報に適合するマッチ条件を含むルールがキャッシュ部１２２に格納されている場合、制御部１２６は、キャッシュ部１２２からそのルールを読み出す。パケットの情報に適合するマッチ条件を含むルールがキャッシュ部１２２に格納されておらず、ルール記憶部１１２に格納されている場合、制御部１２６は、ルール記憶部１１２からそのルールを読み出す。制御部１２６は、読み出したルールをパケット処理部１２１に送信する。キャッシュ部１２２及びルール記憶部１１２に格納されているルールに、受信したパケットの情報に適合するマッチ条件を含むルールが存在しない場合、制御部１２６は、ルールが存在しないことを示す情報を、パケット処理部１２１に送信してもよい。
【００４８】
ルール記憶部１１２から読み出されたルールがキャッシュ部１２２に格納されていない場合、制御部１２６は、パケットのサイズを、決定部１２５に送信する。後で詳述されるように、決定部１２５は、パケットのサイズに基づいて、そのパケットに適合するルールを、キャッシュ部１２２に格納するか否かを決定する。決定部１２５は、小さいパケットに関するルールを、優先的にキャッシュとしてキャッシュ部１２２に格納するように決定する。決定部１２５は、サイズを受け取ったパケットに適合するルールをキャッシュ部１２２に格納するか否かを決定した結果を、制御部１２６に送信する。制御部１２６は、決定部１２５によって決定された結果を、決定部１２５から受け取る。決定部１２５は、さらに、キャッシュ部１２２から削除するルールを決定してもよい。いずれかのルールをキャッシュ部１２２から削除すると決定した場合、決定部１２５は、削除すると決定したルールを特定する情報を、制御部１２６に送信する。決定部１２５については後で詳述する。
【００４９】
ルール記憶部１１２から読み出されたルールがキャッシュ部１２２に格納されていない場合、制御部１２６は、後で詳述する決定部１２５による決定に従って、小さいパケットに関するルールを、優先的にキャッシュとしてキャッシュ部１２２に格納する。制御部１２６は、スケジューリング部１２３によって破棄されたパケットに関するルールを、優先的にキャッシュとしてキャッシュ部１２２に格納する。制御部１２６は、削除すると決定したルールの識別情報を決定部１２５から受け取った場合、キャッシュ部１２２から削除すると決定したルールをキャッシュ部１２２から削除する。制御部１２６による、キャッシュ部１２２からのルールの削除、及び、ルールのキャッシュ部１２２への格納については、後で詳述する。
【００５０】
決定部１２５は、パケットのサイズを制御部１２６から受信する。決定部１２５は、受信したパケットのサイズに基づいて、そのパケットに適合するルールをキャッシュ部１２２に優先的に格納するか否かを決定する。言い換えると、決定部１２５は、受信したパケットのサイズに基づいて、そのパケットに対する処理（すなわち、アクション）を表すルールを、キャッシュ部１２２に優先的に格納するか否かを決定する。決定部１２５は、さらに、キャッシュ部１２２に格納されているルールの、格納された順番及び優先度と、決定した結果とに基づいて、受信したパケットに適合するルールをキャッシュ部１２２に格納するか否かを決定する。
【００５１】
具体的には、パケット処理部１２１によって要求されたルールに適合するパケットのサイズが、所定の閾値以下である場合、決定部１２５は、そのルールを優先的にキャッシュ部１２２に格納すると判定する。決定部１２５は、例えば、そのルールの優先度を、Ｐに設定してもよい。パケット処理部１２１によって要求されたルールに適合するパケットのサイズが、所定の閾値よりも大きい場合、決定部１２５は、そのルールを非優先的にキャッシュ部１２２に格納すると判定する。そのルールの優先度を、Ｎに設定する。以下、キャッシュ部１２２に格納するか否かが判定されるルールを、対象ルールと表記する。
【００５２】
キャッシュ部１２２に空きがある場合、パケット処理部１２１は、対象ルールが優先的にキャッシュ部１２２に格納されると判定されたか否かによらずに（すなわち、対象ルールの優先度によらずに）、対象ルールをキャッシュ部１２２に格納すると決定する。
【００５３】
キャッシュ部１２２に、非優先的に格納すると判定されたルールが格納されている場合、決定部１２５は、キャッシュ部１２２に格納されている、非優先的に格納すると判定されたルールの中から、所定の方法に従って、削除されるルールを決定する。削除されるルールを決定する所定の方法は、例えば、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）アルゴリズムであってよい。その場合、決定部１２５は、キャッシュ部１２２に格納されている、非優先的に格納すると判定されたルールの中で、最後に使われてから最も長い時間が経過したルールを特定し、特定したルールを削除すると決定する。
【００５４】
削除するか否かを決定するのに使用される情報として、使用されたか否かを表す情報が格納されている場合、決定部１２５は、使用されていないことを表す情報に関連付けられている、非優先的に格納すると判定されたルールから、削除されるルールを決定する。この場合の、削除されるルールを決定する方法は、既存のいずれかの方法でよい。例えば、決定部１２５は、決定部１２５は、使用されていないことを表す情報に関連付けられている、非優先的に格納すると判定されたルールから、ランダムに、削除されるルールを決定してもよい。
【００５５】
そして、決定部１２５は、対象ルールが優先的にキャッシュ部１２２に格納されると判定されたか否かによらずに、対象ルールをキャッシュ部１２２に格納すると決定する。
【００５６】
キャッシュ部１２２に、優先的に格納すると判定されたルールのみが格納されており、対象ルールが非優先的に格納されると判定された場合、決定部１２５は、対象ルールをキャッシュ部１２２に格納しないと決定する。
【００５７】
キャッシュ部１２２に、優先的に格納すると判定されたルールのみが格納されており、対象ルールが優先的に格納されると判定された場合、決定部１２５は、キャッシュ部１２２に格納されているルールの中から、所定の方法に従って、削除されるルールを決定する。削除されるルールを決定する所定の方法は、非優先的に格納すると判定されたルールの中から削除されるルールを決定する方法と同じでよい。削除されるルールを決定する所定の方法は、例えば、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）アルゴリズムであってよい。その場合、決定部１２５は、キャッシュ部１２２に格納されているルールの中で、最後に使われてから最も長い時間が経過したルールを削除すると決定する。そして、決定部１２５は、対象ルールをキャッシュ部１２２に格納すると決定する。
【００５８】
対象ルールがキャッシュ部１２２に格納されている場合、決定部１２５は、対象ルールをキャッシュ部１２２に格納しないと決定する。
【００５９】
制御部１２６は、決定部１２５による決定に従って、キャッシュ部１２２からのルールの削除及びキャッシュ部１２２への対象ルールの格納を行う。具体的には、決定部１２５によって削除すると決定されたルールが存在する場合、制御部１２６は、そのルールを、キャッシュ部１２２から削除する。決定部１２５によって削除すると決定されたルールが存在しない場合（すなわち、決定部１２５がルールを削除すると決定しなかった場合）、制御部１２６は、キャッシュ部１２２からルールを削除しない。決定部１２５が対象ルールを格納すると決定した場合、制御部１２６は、対象ルールと、対象ルールの優先度と、ＬＲＵ情報とを、キャッシュ部１２２に格納する。
【００６０】
対象ルールを新たにキャッシュ部１２２に格納する際、ＬＲＵ情報が対象ルールを使用した時刻を示す情報である場合、制御部１２６は、対象ルールを最後に使用した時刻に、例えば、制御部１２６が対象ルールをキャッシュ部１２２に格納した時刻を設定してもよい。制御部１２６は、対象ルールを最後に使用した時刻に、例えば、対象ルールをパケット処理部１２１に送信した時刻を設定してもよい。制御部１２６は、他の方法によって、ＬＲＵ情報を設定してもよい。決定部１２５が対象ルールを格納しないと決定した場合、制御部１２６は、対象ルールをキャッシュ部１２２に格納しない。対象ルールがキャッシュ部１２２に格納されている場合、制御部１２６は、キャッシュ部１２２に格納さている、対象ルールのＬＲＵ情報を更新する。この場合のＬＲＵ情報の設定方法は、新たに格納されるルールのＬＲＵ情報の設定方法と同じでよい。
【００６１】
制御部１２６は、さらに、パケット処理部１２１及び後で詳述するスケジューリング部１２３から、破棄されたパケットの情報（例えば、破棄されたパケットのキー）を受信してもよい。
【００６２】
制御部１２６は、破棄されたパケットの情報に基づいて、キャッシュ部１２２に格納されている、破棄されたパケットに適合するルールを検出してもよい。具体的には、制御部１２６は、破棄されたパケットの情報が、ルールに含まれるマッチ条件に適合する場合、そのルールを、破棄されたパケットに適合するルールとして検出してよい。破棄されたパケットに適合するルールがキャッシュ部１２２に格納されている場合、制御部１２６は、そのパケットの優先度を示す情報を、そのパケットが優先的に格納されることを示す情報に更新してもよい。例えば、そのパケットの優先度を示す情報が、そのパケットが非優先的に格納されることを示す情報である場合に、制御部１２６は、そのパケットの優先度を示す情報を、そのパケットが優先的に格納されることを示す情報に変更してよい。なお、以上の説明における「破棄されたパケット」は、既に破棄されたパケットではなく、破棄される条件に当てはまった、まだ破棄されていないパケットであってもよい。以上の説明における「破棄されたパケット」は、破棄されることが決定された、まだ破棄されていないパケットであってもよい。
【００６３】
スケジューリング部１２３は、パケット処理部１２１が仮想ＮＩＣ部１１１に送信するパケットをパケット処理部１２１から受取り、受け取った、仮想ＮＩＣ部１１１に送信されるパケットの送信のスケジューリングを行う。スケジューリング部１２３は、仮想ＮＩＣ部１１１からパケットを受信し、受信したパケットをパケット処理部１２１に送信する。スケジューリング部１２３は、仮想スイッチ用ハードウェア１２０によって実現される。
【００６４】
図４は、本実施形態に係るスケジューリング部１２３の構成の一例を示すブロック図である。図４に例示するスケジューリング部１２３は、選択部１２３１と、不足カウンタ部１２３２と、キュー部１２３３と、受付部１２３４と、を含む。不足カウンタ部１２３２の数と、キュー部１２３３の数は、それぞれ、仮想通信インタフェース部１１１（すなわち、仮想ＮＩＣ部１１１）の数と同じである。不足カウンタ部１２３２とキュー部１２３３とは、１対１で関連付けられている。仮想通信インタフェース部１１１とキュー部１２３３とは、１対１で関連付けられている。
【００６５】
図４に示す例では、不足カウンタ部１２３２の数は３であり、キュー部１２３３の数も３である。以下の説明において、不足カウンタ部１２３２を個々に区別する必要が無い場合は、これらの不足カウンタ部１２３２を、単に、不足カウンタ部１２３２と表記する。不足カウンタ部１２３２を個々に区別する必要がある場合は、これらの不足カウンタ部１２３２を、不足カウンタ部１２３２Ａ、不足カウンタ部１２３２Ｂ、及び、不足カウンタ部１２３２Ｃと表記する。同様に、キュー部１２３３を個々に区別する必要が無い場合は、これらのキュー部１２３３を、単に、キュー部１２３３と表記する。キュー部１２３３を個々に区別する必要がある場合は、これらのキュー部１２３３を、キュー部１２３３Ａ、キュー部１２３３Ｂ、及び、キュー部１２３３Ｃと表記する。不足カウンタ部１２３２Ａは、キュー部１２３３Ａと関連付けられており、不足カウンタ部１２３２Ｂは、キュー部１２３３Ｂと関連付けられており、そして、不足カウンタ部１２３２Ｃは、キュー部１２３３Ｃと関連付けられている。キュー部１２３３Ａは、仮想ＮＩＣ部１１１Ａと関連付けられており、キュー部１２３３Ｂは、仮想ＮＩＣ部１１１Ｂと関連付けられており、そして、キュー部１２３３Ｃは、仮想ＮＩＣ部１１１Ｃと関連付けられている。
【００６６】
スケジューリング部１２３は、例えば、不足ラウンドロビン（Ｄｅｆｉｃｉｔ  Ｒｏｕｎｄ−Ｒｏｇｉｎ、ＤＲＲ）方式により、パケット処理部１２１が仮想ＮＩＣ部１１１に送信するパケットのスケジューリングを行う。ただし、パケット処理部１２１が仮想ＮＩＣ部１１１に送信するパケットのスケジューリングの方法は、ＤＲＲ方式に限定されない。スケジューリング部１２３は、他のスケジューリングの方法に従って、スケジューリングを行ってもよい。
【００６７】
選択部１２３１は、キュー部１２３３に格納されているパケットの中から、次に送信するパケットを、ＤＲＲ方式によって選択する。選択部１２３１は、選択したパケットを、選択したパケットが格納されているキュー部１２３３に関連付けられている仮想ＮＩＣ部１１１に送信する。例えば、キュー部１２３３Ａは仮想ＮＩＣ部１１１Ａに関連付けられているので、キュー部１２３３Ａに格納されているパケットを選択した場合、選択部１２３１は、選択したパケットを、仮想ＮＩＣ部１１１Ａに送信する。
【００６８】
不足カウンタ部１２３２は、ＤＲＲ方式で用いられる不足カウンタ（Ｄｅｆｉｃｉｔ  Ｃｏｕｎｔｅｒ、ＤＣ）を記憶する。不足カウンタ部１２３２は、それぞれ、異なるキュー部１２３３に関連付けられている。
【００６９】
キュー部１２３３は、それぞれ、そのキュー部１２３３が関連付けられている仮想ＮＩＣ部１１１に向けてパケット処理部１２１が送信するパケットを、ＦＩＦＯとして記憶する。例えば、キュー部１２３３Ａは、キュー部１２３３Ａと関連付けられている仮想ＮＩＣ部１１１Ａに向けてパケット処理部１２１が送信するパケットを記憶する。パケットの送信先である仮想ＮＩＣ部１１１に関連付けられているキュー部１２３３がフルである場合、送信パケットは、後で詳細に説明される受付部１２３４によって、例えば、破棄される。すなわち、パケットの送信先である仮想ＮＩＣ部１１１に関連付けられているキュー部１２３３の記憶領域に空きが無く、そのキュー部１２３３に新たにパケットを格納できない場合、受付部１２３４は、そのパケットを破棄する。
【００７０】
受付部１２３４は、仮想ＮＩＣ部１１１に向けて送信するパケットをパケット処理部１２１から受信する。受付部１２３４は、受信したパケットを、そのパケットの送信先に応じて、キュー部１２３３のいずれかに振り分ける。すなわち、受付部１２３４は、受信したパケットを、そのパケットの送信先に関連付けられているキュー部１２３３に格納する。受信したパケットの送信先に関連付けられているキュー部１２３３がフルである場合、受付部１２３４は、そのパケットを破棄する。スケジューリング部１２３（具体的には、受付部１２３４）は、パケットを破棄した場合、例えば、パケットを破棄したことを示す情報と、破棄したパケットの情報（例えば、キー）とを、制御部１２６に送信する。パケットを破棄したことを示す情報は、破棄したパケットの情報そのものであってもよい。
【００７１】
ＤＲＲ方式によるスケジューリングの概要は以下のとおりである。
（１）  各キューをラウンドロビンでチェックする。言い換えると、複数のキューから１つのキューを順番に選択する。
（２）選択されたキューが空である場合、不足カウンタの値を０に設定し、選択されたキューに対する処理を終了し、次のキューの選択に移る。
（３）選択されたキューが空でない場合、不足カウンタの値に、キュー毎に予め与えられた所定値を加算する。
（４）選択されたキューの先頭パケットの長さが、当該キューの不足カウンタの値以下である場合、先頭パケットをそのキューから取り出し、取り出したパケットを送信先（本実施形態では、例えば、仮想ＮＩＣ部１１１の１つ）に送信する。
（５）選択されたキューから取り出され、送信先に送信されたパケットのサイズの値を、選択されたキューの不足カウンタの値から引く。
（６）選択されたキューの先頭のパケットのサイズが、不足カウンタの値より小さい場合、選択されたキューに対する処理を終了し、次のキューの選択に移る。
【００７２】
キュー毎に予め与えられた所定値は、Ｑｕａｎｔａｍと表記される。キュー毎に予め与えられている所定値は、以下の説明では、調整値とも表記される。キューに与えられているＱｕａｎｔａｍが大きいほど、より多くのパケットがそのキューから送信される。言い換えると、キューに与えられているＱｕａｎｔａｍが大きいほど、そのキューを介した通信に、より広い帯域が割り当てられており、より広い帯域が保証される。
【００７３】
スケジューリング部１２３において、仮想ＮＩＣ部１１１に対するＱｕａｎｔａｍ（すなわち、不足カウンタ部１２３２に格納される値に足される所定値）は、予め選択部１２３１に与えられていてよい。また、管理装置によって、選択部１２３１に与えられてもよい。
【００７４】
図５は、キャッシュ部１２２を、キャッシュメモリ（4-wayセットアソシエイティブ）として実現した場合の構成の一例を示す模式図である。図５に構成を示すキャッシュ部１２２は、基本的にライン入れ替えポリシとしてＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）方式を使用する。図５に示すキャッシュ部１２２の構成は、キャッシュ部１２２の実装例であり、キャッシュ部１２２の構成は、図５に示す例に限られない。
【００７５】
一般的なキャッシュメモリは、メモリのアドレスを入力として受け取り、当該アドレスに記憶されるデータのキャッシュ値を出力する。キャッシュ部１２２は、キー（例えば、ルールのマッチ条件に使用されるパケットヘッダの値）を入力として受け取り、当該キーに適合するルールを出力する。
【００７６】
キャッシュ部１２２は、キーの一部（例えば、LSBからNビット（Nは整数）のビット列、ｉｎｄｅｘと表記）をWay内のキャッシュエントリ選択に使用する。キャッシュ部１２２は、残りのビット列（Ｔａｇと表記）を、一般的なキャッシュメモリにおけるフレームアドレスに相当するデータとして使用する。
【００７７】
キャッシュ部１２２における一つのキャッシュエントリは、ルール記憶部１１２における一つのルールに関連づけられる。キャッシュ部１２２のキャッシュエントリは、フラグと、Ｔａｇと、キャッシュデータと、を含む。キャッシュ部１２２のキャッシュエントリのフラグには、そのキャッシュエントリが使用中か否かを示すＵｓｅｄフラグと、ＬＲＵ制御（すなわち、ＬＲＵ方式に従ってキャッシュエントリを削除する制御）に係る情報であるＬＲＵ情報が含まれる。また、キャッシュ部１２２のキャッシュエントリのフラグには、そのキャッシュエントリを優先すべきか否かを示す、優先フラグが含まれる。キャッシュ部１２２のキャッシュデータとして、ルールが記憶される。なお、ルールの一部がＴａｇとして記憶されている場合、ルールのうちＴａｇとして記憶されている部分のデータはキャッシュデータとして記憶されているデータに含まれていなくてもよい。
【００７８】
キャッシュ部１２２に対し、あるキーを入力として参照が行われた場合、キャッシュ部１２２は、入力されたキーからｉｎｄｅｘを取得する。言い換えると、キャッシュ部１２２は、入力されたキーのビット列から、ｉｎｄｅｘを表す部分のビット列を取り出す。キャッシュ部１２２は、取得したｉｎｄｅｘを識別子として、各Way内から一つずつキャッシュエントリを選択する。言い換えると、キャッシュ部１２２は、取得したｉｎｄｅｘが示すキャッシュエントリを、それぞれのWayから１つ選択する。キャッシュ部１２２は、入力されたキーからＴａｇを取得する。言い換えると、キャッシュ部１２２は、入力されたキーのビット列から、Ｔａｇを表す部分のビット列を取り出す。キャッシュ部１２２は、取得したＴａｇと、選択された４つのキャッシュエントリ内のＴａｇとを比較し、Ｔａｇが一致するキャッシュエントリを探索する。キーから取得したＴａｇと一致するＴａｇを含むエントリが見つかった場合、キャッシュ部１２２は、キャッシュヒットしたと判定し、見つかったエントリに記録されているルールを返す。
【００７９】
＜＜第１の実施の形態の動作例＞＞
次に、本実施の形態の構成例として説明した、情報処理装置１００の、以下に示す動作の例について、図面を参照しながら詳細に説明する。
（Ａ）受信したパケットの処理。
（Ｂ）パケットを送信する処理。
（Ｃ）スケジューリングの処理。
【００８０】
＜＜＜（Ａ）受信したパケットの処理＞＞＞
図６は、本実施形態の情報処理装置１００の、パケットを受信した際の動作、すなわち、受信したパケットの処理の例を表すフローチャートである。
【００８１】
図６に示すフローチャートを用いて、パケット処理部１２１がパケットを受信した際の、情報処理装置１００の動作について説明する。図６に示す動作は、例えば、ＮＩＣ部１２４が、情報処理装置１００の外部から受信したパケットを、パケット処理部１２１に送信した場合、および、スケジューリング部１２３が、情報処理部１１４から仮想ＮＩＣ部１１１を経由して受信したパケットを、パケット処理部１２１に送信した場合に、開始される。
【００８２】
パケット処理部１２１は、ＮＩＣ部１２４またはスケジューリング部１２３から、パケット（以下、処理対象パケットとも表記）を受信する（ステップＳ１００）。
【００８３】
パケット処理部１２１は、受信したパケットから、ルールのマッチ条件に使用される、パケットヘッダの値であるキー（以下、処理対象キーと表記）を作成する（ステップＳ１０１）。パケット処理部１２１は、受信したパケットのヘッダの部分のビット列を切り出し、切り出したビット列をキーにしてもよい。パケット処理部１２１は、受信したパケットのヘッダから、ルールのマッチ条件と比較される情報を抽出し、抽出した情報を示すキーを生成してもよい。パケット処理部１２１は、受信したパケットのサイズ（すなわち、パケット長）を特定してもよい。
【００８４】
パケット処理部１２１は、受信したパケットの処理対象キーおよびパケット長を制御部１２６に送信し、受信したパケットに適合するルールを制御部１２６に要求する。受信したパケットに適合するルールの要求は、例えば、制御部１２６に対する、キャッシュ部１２２における、受信したパケットに適合するルールのキャッシュエントリの探索を依頼することであってもよい。制御部１２６は、まず、キャッシュ部１２２における、受信したパケットに適合するルールのキャッシュエントリの探索を実施する（ステップＳ１０２）。
【００８５】
ステップＳ１０２において、受信したパケットに適合するルールのキャッシュエントリが見つからなかった場合（ステップＳ１０３においてＮＯ）、制御部１２６は、ルール記憶部１１２から、処理対象キーに適合するルールを取得する（ステップＳ１０４）。具体的には、制御部１２６は、ルール記憶部１１２において、処理対象キーに適合するマッチ条件を含むルールを探索する。ルール記憶部１１２に処理対象キーに適合するマッチ条件を含むルールが格納されている場合、制御部１２６は、ルール記憶部１１２からそのルールを読み出す（すなわち、取得する）。制御部１２６は、ルール記憶部１１２から取得したルールを、パケット処理部１２１に送信する。
【００８６】
ステップＳ１０４において処理対象キーに適合するルールを取得できなかった場合、すなわち、処理対象キーに適合するルールが存在しなかった場合（ステップＳ１０５においてＮＯ）、情報処理装置１００の動作は、ステップＳ１０８に移行する。
【００８７】
ステップＳ１０４において処理対象キーに適合するルールが取得できた場合（ステップＳ１０５においてＹＥＳ）、制御部１２６は、キャッシュ部１２２に、処理対象キーに適合するルール（以下、処理対象ルールと表記）のキャッシュエントリを作成する（ステップＳ１０６）。ステップＳ１０６の動作の詳細については後述する。
【００８８】
ステップＳ１０２において、受信したパケットに適合するルールのキャッシュエントリが見つかった場合（ステップＳ１０３においてＹＥＳ）、制御部１２６は、キャッシュ部１２２において見つかったキャッシュエントリを更新する（ステップＳ１０７）。ステップＳ１０７の動作の詳細については後述する。制御部１２６は、見つかったキャッシュエントリに格納されているルールを、パケット処理部１２１に送信する。
【００８９】
パケット処理部１２１は、処理対象パケットを処理する（ステップＳ１０８）。具体的には、制御部１２６からルールを受け取った場合、パケット処理部１２１は、受け取ったルールに基づいて処理対象パケットを処理する。制御部１２６からルールを受け取らなかった場合、すなわち、処理対象キーに適合するルールが存在しなかった場合、パケット処理部１２１は、例えば、処理対象パケットを破棄する。
【００９０】
図７は、本実施形態の情報処理装置１００の、ルールのキャッシュエントリを作成する動作の詳細を表すフローチャートである。図７に示す動作は、図６に示すステップＳ１０６の詳細な動作の例である。
【００９１】
図７のフローチャートを用いて、上記ステップＳ１０６における情報処理装置１００の、ルール記憶部１１２から読み出されたルールのキャッシュエントリを作成する動作の例について説明する。本動作の開始の時点において、制御部１２６は、パケット処理部１２１から受け取った、キー（すなわち、処理対象キー）と、ルール記憶部１１２から取得した、処理対象キーに適合するするルール（すなわち、処理対象ルール）と、パケット長とを、保持している。なお、以下では、図７の動作を制御部１２６の動作として説明する。しかし、キャッシュ部１２２が、図７に示す動作を行う機能を備え、図７に示す動作の一部又は全部を行ってもよい。例えば、図５に示す構成を備えるキャッシュ部１２２は、以下のステップＳ１１０の動作を行うことができる。ステップＳ１１０の動作は、キャッシュ部１２２の動作であってもよい。なお、図５に示す構成のうち、図７に示す動作を行う部分は、制御部１２６の実装の一部であってもよい。
【００９２】
制御部１２６は、キャッシュ部１２２において、処理対象キーに適合するルールのキャッシュの格納位置を特定する。すなわち、制御部１２６は、キャッシュ部１２２における、処理対象キーに適合するルールが格納されているキャッシュエントリの位置を特定する（ステップＳ１１０）。制御部１２６は、キャッシュ部１２２において、パケットに適合するルールが格納されているキャッシュエントリの位置を示す情報として、ｉｎｄｅｘの値を、処理対象キーの下位ビットのｉｎｄｅｘの部分から取得してもよい。制御部１２６は、取得したｉｎｄｅｘの値を用いて、各Way内の、処理対象キーに適合するキャッシュエントリを特定する。キャッシュエントリを特定する方法は、一般的なキャッシュメモリにおいてキャッシュエントリを特定する方法と同じでよい。キャッシュ部１２２がハッシュテーブルとして実現されていた場合、制御部１２６は、例えば、処理対象キーのハッシュ値を計算し、算出したハッシュ値をＢｕｃｋｅｔ数で割った余りを算出し、算出した余りが示すＢｕｃｋｅｔを、処理対象キーに適合するルールが格納されているＢｕｃｋｅｔとして選択する。
【００９３】
制御部１２６は、ステップＳ１１０において特定されたキャッシュエントリに空きがあるか否かを確認する（ステップＳ１１１）。キャッシュ部１２２が4-wayセットアソシエイティブキャッシュメモリとして実現されている場合、ステップＳ１１０において４つのキャッシュエントリが特定される。各キャッシュエントリは、フラグの領域に、キャッシュエントリが使用されているか否かを表す値が設定されているＵｓｅｄフラグを含む。制御部１２６は、各キャッシュエントリのＵｓｅｄフラグを参照することによって、空きエントリがあるか否か確認する。空きエントリは、キャッシュデータ（すなわち、本実施形態では、キャッシュされているルール）が格納されていないキャッシュエントリを表す。
【００９４】
空きエントリが存在しない場合（ステップＳ１１１においてＮＯ）、制御部１２６は、パケット長が閾値以下であるか否かを確認する（ステップＳ１１２）。閾値は、予め設定され、制御部１２６に与えられていてよい。閾値は、管理装置３００によって設定されてもよい。
【００９５】
パケット長が閾値より大きい場合（ステップＳ１１２においてＮＯ）、制御部１２６は、ステップＳ１１０において特定されたキャッシュエントリの中に、優先フラグがオフのキャッシュエントリがあるか否かを確認する（ステップＳ１１３）。優先フラグがオフとは、優先フラグの値が、非優先であることを示す。優先フラグがオフのエントリには、非優先的にキャッシュ部１２２に格納されると判定されたルールがキャッシュされている。優先フラグがオフのキャッシュエントリがある場合（ステップＳ１１３においてＹＥＳ）、情報処理装置１００の動作はステップＳ１１４に移行する。優先フラグがオフのキャッシュエントリが無い場合（ステップＳ１１３においてＮＯ）、情報処理装置１００は、図７に示す動作を終了する。この場合、制御部１２６は、処理対象キーに適合するルールが格納されるキャッシュエントリを作成しない。すなわち、制御部１２６は、パケット処理部１２１が受信したパケットに適合するルールを、キャッシュ部１２２にキャッシュしない。
【００９６】
ステップＳ１１４において、制御部１２６は、ステップＳ１１０において特定されたキャッシュエントリの中から、削除されるエントリ（以下、削除対象エントリと表記）を決定し、決定された削除対象エントリを削除する（ステップＳ１１４）。エントリを削除するとは、キャッシュエントリを使用できる状態に戻すことを指す。使用できる状態のキャッシュエントリは、上述の空きエントリである。制御部１２６は、優先フラグがオフのキャッシュエントリの中で、最後に使用された時刻が最も昔であるキャッシュエントリを、削除対象エントリに決定する。制御部１２６は、ＬＲＵ情報を使用して、最後に使用された時刻が最も昔であるキャッシュエントリを特定してよい。
【００９７】
制御部１２６は、削除対象エントリに決定したキャッシュエントリのＵｓｅｄフラグをオフにすることによって、削除対象エントリを削除する。キャッシュエントリのＵｓｅｄフラグがオフである場合、そのキャッシュエントリは、空きエントリであり、使用可能である。使用中の削除対象エントリのＵｓｅｄフラグをオフに変更することは、その削除対象エントリを削除することに相当する。使用中の削除対象エントリのＵｓｅｄフラグをオフに変更することによって、その削除対象エントリは削除され、その削除対象キャッシュエントリは、空きエントリに変化し、空きエントリが作成される。
【００９８】
制御部１２６は、空きエントリ（すなわち、ステップＳ１１１において存在した空きエントリ、又は、ステップＳ１１４において作成された空きエントリ）に、処理対象キーに適合するルールのキャッシュエントリを作成する（ステップＳ１１５）。具体的には、制御部１２６は、空きエントリであるキャッシュエントリのＵｓｅｄフラグをオンに変更する。以下、ステップＳ１１５において作成されるキャッシュエントリを、新エントリと表記する。制御部１２６は、Ｕｓｅｄフラグをオンに変更したキャッシュエントリ（すなわち、新エントリ）のＴａｇフィールドに処理対象キーから取得したＴａｇを設定する。言い換えると、制御部１２６は、新エントリのＴａｇフィールドに、処理対象キーから取得したＴａｇのデータを記録する。制御部１２６は、新エントリのＣａｃｈｅ  ｄａｔａフィールドに、処理対象ルールを設定する。言い換えると、制御部１２６は、新エントリのＣａｃｈｅ  ｄａｔａフィールドに、処理対象ルールの情報を記録する。制御部１２６は、新エントリのＬＲＵ情報として、新エントリのｉｎｄｅｘが示す他のキャッシュエントリの最後の更新の時期よりも、更新が新しいことを示すＬＲＵ情報を設定する。また、制御部１２６は、処理対象パケットのパケット長が閾値以下の場合、新エントリの優先フラグをオンに設定し、そうでない場合、新エントリの優先フラグをオフに設定する。
【００９９】
図８は、本実施形態の情報処理装置１００の、キャッシュエントリを更新する動作の例を表すフローチャートである。図８に示す動作は、図６に示すステップＳ１０７における動作の例である。
【０１００】
図８のフローチャートを用いて、上記ステップＳ１０７における情報処理装置１００の動作の例について説明する。以下では、図８に示す動作は、制御部１２６による動作であるとして説明する。なお、図８に示す動作の全部又は一部を、キャッシュ部１２２が行ってもよい。
【０１０１】
制御部１２６は、ステップＳ１０２において見つかったエントリ（すなわち、パケット処理部１２１から受け取ったキーに適合するルールがキャッシュされているエントリ）のＬＲＵ情報を更新する（ステップＳ１２０）。ステップＳ１０２において見つかったエントリを、処理対象エントリと表記する。ステップＳ１２０において、具体的には、制御部１２６は、処理対象エントリのｉｎｄｅｘが示す他のキャッシュエントリが最後に使用された時期よりも新しい時期を示すＬＲＵ情報を、処理対象エントリのＬＲＵ情報に設定する。その際、制御部１２６は、処理対象エントリのｉｎｄｅｘが示す他のキャッシュエントリのＬＲＵ情報も合わせて変更してもよい。
【０１０２】
制御部１２６は、処理対象パケットのパケット長が閾値以下であるか否かを確認する（ステップＳ１２１）。
【０１０３】
パケット長が閾値以下である場合（ステップＳ１２１においてＹＥＳ）、制御部１２６は、処理対象エントリの優先フラグをオンに設定する（ステップＳ１２２）。
【０１０４】
パケット長が閾値より大きい場合（ステップＳ１２１においてＮＯ）、制御部１２６は、処理対象エントリの優先フラグをオフに設定する（ステップＳ１２３）。
【０１０５】
＜＜＜（Ｂ）パケット送信処理＞＞＞
図９は、本実施形態の情報処理装置１００の、受信したパケットを送信する動作の例を表すフローチャートである。
【０１０６】
図９のフローチャートを用いて、パケット処理部１２１がパケットを送信する際の情報処理装置１００の動作について説明する。図９に示す動作は、例えば、ステップＳ１０８において、パケット処理部１２１が、”パケットを指定されたＮＩＣ部１２４または仮想ＮＩＣ部１１１に送信する”処理を含むルールに基づきパケット処理を行った場合に開始され得る。例えば、ステップＳ１０８において、ルールに基づくパケット処理が、”パケットを指定されたＮＩＣ部１２４または仮想ＮＩＣ部１１１に送信する”処理である場合に、図９に示す動作が開始される。
【０１０７】
パケット処理部１２１は、処理対象パケットの送信先が、仮想ＮＩＣ部１１１のいずれかであるか否かを確認する（ステップＳ１３０）。
【０１０８】
処理対象パケットの送信先が仮想ＮＩＣ部１１１ではない場合（ステップＳ１３０においてＮＯ）、処理対象パケットの送信先は、ＮＩＣ部１２４である。この場合、パケット処理部１２１は、ＮＩＣ部１２４に処理対象パケットを送信する（ステップＳ１３１）。
【０１０９】
処理対象パケットの送信先が仮想ＮＩＣ部１１１のいずれかである場合（ステップＳ１３０においてＹＥＳ）、パケット処理部１２１は、送信先である仮想ＮＩＣ部１１１の識別子と、処理対象パケットとを、スケジューリング部１２３（具体的には、スケジューリング部１２３の受付部１２３４）に送出する。受付部１２３４は、受け取った識別子が示す仮想ＮＩＣ部１１１に関連付けられているキュー部１２３３を選択する（ステップＳ１３２）。以下の説明において、ステップＳ１３２において選択されたキュー部１２３３を、選択されたキュー及び処理対象キューと表記する。
【０１１０】
受付部１２３４は、選択されたキュー（すなわち、処理対象キュー）がフルであるか否かを確認する（ステップＳ１３３）。
【０１１１】
処理対象キューがフルである場合（ステップＳ１３３においてＹＥＳ）、受付部１２３４は、処理対象パケットを破棄する（ステップＳ１３４）。受付部１２３４は、破棄した処理対象パケットの識別子を、制御部１２６に送信してもよい。そして、情報処理装置１００は、図９に示す動作を終了する。
【０１１２】
処理対象キューがフルでない場合（ステップＳ１３３においてＮＯ）、受付部１２３４は、処理対象パケットを処理対象キューにエンキューする（ステップＳ１３５）。そして、情報処理装置１００は、図９に示す動作を終了する。
【０１１３】
＜＜＜（Ｃ）スケジューリング処理＞＞＞
図１０は、本実施形態の情報処理装置１００の、スケジューリング処理を行う動作の例を表すフローチャートである。
【０１１４】
図１０のフローチャートを用いて、情報処理装置１００のスケジューリング部１２３が、パケット処理部１２１によって仮想ＮＩＣ部１１１に向けて送信されたパケットのスケジューリング処理を行う際の動作について説明する。図１０に示すスケジューリング処理は、例えば図９のステップＳ１３５においてエンキューされたパケットを、仮想ＮＩＣ部１１１に向けて送信する動作を表す。
【０１１５】
スケジューリング部１２３の選択部１２３１は、処理の対象として、１つのキュー部１２３３を選択する（ステップＳ１４０）。選択部１２３１は、例えば、キュー部１２３３Ａ、キュー部１２３３Ｂ、キュー部１２３３Ｃの順で、全てのキュー部１２３３を繰り返し選択してもよい。このようは選択の方法は、ラウンドロビンとも呼ばれる。図１０に示す動作は、１つのキュー部１２３３を選択してから、選択したキュー部１２３３に対する処理が終了するまでの動作を表す。キュー部１２３３を選択するたびに、図１０に示す動作が１回行われる。全てのキュー部１２３３を１つ１つ繰り返し選択する場合、情報処理装置１００は、図１０に示す動作を繰り返し行う。以下の説明では、選択したキュー部１２３３を、処理対象キューと表記する。
【０１１６】
まず、選択部１２３１は、処理対象キューにパケットがあるか否かを確認する（ステップＳ１４１）。
【０１１７】
処理対象キューが空である場合、すなわち、処理対象キューにパケットが存在しない場合（ステップＳ１４１においてＮＯ）、選択部１２３１は、処理対象キューの不足カウンタ値を０に設定する（ステップＳ１４７）。選択部１２３１は、処理対象キューに関連付けられている不足カウンタ部１２３２に記録されている不足カウンタ値を０に設定する。すなわち、選択部１２３１は、処理対象キューに関連付けられている不足カウンタ部１２３２に、不足カウンタ値として０を記録する。例えば、処理対象キューがキュー部１２３３Ａである場合、不足カウンタ部１２３２Ａが、処理対象キューに関連付けられている。この場合、選択部１２３１は、不足カウンタ部１２３２Ａの不足カウンタ値を０に設定する。そして、情報処理装置１００は、図１０に示す動作を終了する。図１０に示す動作を終了した後、情報処理装置１００は、図１０に示す動作を再び行い、再び行った図１０に示す動作のステップＳ１４１において、別のキュー部１２３３を、処理対象キューとして選択してよい。
【０１１８】
処理対象キューにパケットが存在する場合（ステップＳ１４１においてＹＥＳ）、選択部１２３１は、処理対象キューに関連付けられている不足カウンタ部１２３２から不足カウンタ値を取得する（すなわち、読み出す）。選択部１２３１は、処理対象キューに割り当てられている所定値（すなわち、Ｑｕａｎｔａｍとも表記される、調整値）を、取得した不足カウンタ値に加算する（ステップＳ１４２）。選択部１２３１は、更新された不足カウンタ値（すなわち、読み出された不足カウンタ値と調整値との和）を、処理対象キューに関連付けられている不足カウンタ部１２３２に記録されている不足カウンタ値に設定する。すなわち、選択部１２３１は、更新された不足カウンタ値（すなわち、読み出された不足カウンタ値と調整値との和）を、処理対象キューに関連付けられている不足カウンタ部１２３２に、不足カウンタ値として記録する。
【０１１９】
選択部１２３１は、処理対象キューの不足カウンタ値が、処理対象キューの先頭パケットの長さ以上であるか否かを確認する（ステップＳ１４３）。
【０１２０】
処理対象キューの不足カウンタ値が処理対象キューの先頭パケットのパケット長よりも小さい場合（ステップＳ１４３においてＮＯ）、情報処理装置１００は、図１０に示す動作を終了する。
【０１２１】
処理対象キューの不足カウンタ値が処理対象キューの先頭パケットのパケット長以上である場合（ステップＳ１４３においてＹＥＳ）、選択部１２３１は、先頭パケットを送信することを決定する。そして、選択部１２３１は、処理対象キューに関連付けられている仮想ＮＩＣ部１１１に、先頭パケットを送信する（ステップＳ１４４）。例えば、処理対象キューがキュー部１２３３Ａである場合、選択部１２３１は、仮想ＮＩＣ部１１１Ａに、処理対象キューの先頭パケットを送信する。
【０１２２】
選択部１２３１は、処理対象キューの不足カウンタ値から、ステップＳ１４４において送信したパケットのパケット長を減算する（ステップＳ１４５）。選択部１２３１は、ステップＳ１４４において送信したパケットのパケット長を処理対象キューの不足カウンタ値から引いた値を、処理対象キューの新しい不足カウンタ値に設定する。選択部１２３１は、新しい不足カウンタ値を、処理対象キューに関連付けられている不足カウンタ部１２３２に記録する。
【０１２３】
選択部１２３１は、処理対象キューにパケットが存在するか否かを確認する（ステップＳ１４６）。処理対象キューにパケットが存在する場合（ステップＳ１４６においてＹＥＳ）、情報処理装置１００の動作は、ステップＳ１４３に移行する。
【０１２４】
処理対象キューが空である場合、すなわち、処理対象キューにパケットが存在しない場合（ステップＳ１４６においてＮＯ）、情報処理装置１００の動作は、ステップＳ１４７に移行する。すなわち、選択部１２３１は、処理対象キューに関連付けられている不足カウンタ部１２３２に、不足カウンタ値として０を記録する。そして、情報処理装置１００は、図１０に示す動作を終了する。
【０１２５】
以上で詳細に説明したように、本実施の形態の情報処理装置１００は、以下に示す構成を備え、それにより、以下で説明する効果が得られる。
【０１２６】
本実施の形態によれば、情報処理装置１００は、メモリ１０２と仮想スイッチ用ハードウェア１２０と、それらを接続するバス１０３Ｂを備えるコンピュータ１０により実現できる。情報処理装置１００は、パケット処理方法を規定するルールの集合であるＦＩＢを記憶するルール記憶部１１２を備える。ルール記憶部１１２は、メモリ１０２によって実現される。情報処理装置１００は、ＦＩＢを参照しパケット処理方法を決定し処理するパケット処理部１２１を備える。パケット処理部１２１は、仮想スイッチ用ハードウェア１２０により実現される。即ち、情報処理装置１００において、パケットの処理の際に行われる、データ系通信と制御系通信とが、バス１０３Ｂを共用する。情報処理装置１００は、ルール記憶部１１２から取得したルールをキャッシュ部１２２にキャッシュする制御部１２６、および、QoS制御を行うスケジューリング部１２３を備える。キャッシュ部１２２は、仮想スイッチ用ハードウェア１２０により実現される。決定部１２５は、小さいパケットに関するルールを優先的にキャッシュとしてキャッシュ部１２２に記憶するよう決定する。
【０１２７】
これにより、制御系通信（ルール記憶部１１２からのルールの読み出し）による、バス（すなわち、バス１０３Ｂ）の帯域の消費を削減することができる。小さいパケットの処理の回数は、大きいパケットの処理の回数に比べて、多く、小さいパケットは、多数の制御系通信を発生させることが知られている。そのため、小さいパケットを優先的にキャッシュすることによって、キャッシュを用いることによる帯域の消費を削減する効果を向上させることができる。
【０１２８】
よって、本実施の形態によれば、パケットの処理にかかるデータ系通信と制御系通信とがバスを共用する場合であっても、QoS制御の精度の劣化を抑制できる。
【０１２９】
なお、以上で説明した例では、スケジューリング部１２３は、パケット処理部１２１が仮想ＮＩＣ部１１１に向け送信するパケットに対して、ＱｏＳ制御を行う。ＱｏＳ制御が行われるパケットは、以上の例に限定されない。スケジューリング部１２３は、例えば、パケット処理部１２１が仮想ＮＩＣ部１１１から受信するパケットに対して、ＱｏＳ制御を行ってもよい。
【０１３０】
また、以上で説明した例では、キャッシュ部１２２が記憶するキャッシュエントリの優先度は、１ビットの優先フラグによって表される。しかし、優先度を表す値は、優先フラグに限定されない。優先度は、例えば、複数ビットのカウンタ（以下、優先カウンタと表記）によって表されていてもよい。上で説明した本実施形態の情報処理装置１００に対して、以下の変更を行うことによって、優先フラグの代わりに優先カウンタを使用する情報処理装置１００を実現することができる。
（１）キャッシュエントリに、優先フラグの代わりに優先カウンタを記憶する。
（２）優先フラグをオンにする状況（例えば図８に示すステップＳ１２２）において、優先カウンタをインクリメントする。
（３）優先フラグをオフにする状況（例えば図８に示すステップＳ１２３）において、優先カウンタをデクリメントする。
（４）ステップＳ１１３における判断の条件として、“優先フラグがオフであるエントリの存在”の代わりに、“優先カウンタが所定の値以下であるエントリの存在”を用いる。
（５）ステップＳ１１４において、優先カウンタが所定の値以下であるエントリの中で、最後に使用された時期が最も古いエントリを、削除対象エントリに決定する。
【０１３１】
上述の「所定の値」は、０であってもよい。また、優先カウンタの値は、マイナスにならないように制御されていてもよい。その場合、「優先カウンタが所定の値以下であるエントリ」は、優先カウンタが０であるエントリになる。
【０１３２】
＜第２の実施形態＞
本発明の第２の実施形態では、情報処理装置１００のスケジューリング部１２３は、パケット処理に伴い発生するオーバヘッド（すなわち、制御系通信によるバス消費）を考慮してＱｏＳ制御を行うことによって、ＱｏＳ制御の精度の劣化を抑止する。オーバヘッドは、通信の負荷と言い換えることもできる。
【０１３３】
以下では、本実施形態について図面を参照して詳細に説明する。なお、本実施形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【０１３４】
＜＜第２の実施形態の構成例＞＞
本実施形態の情報処理装置１００の構成は、以下の差分を除き、図２〜図５を用いて説明した第１の実施の形態の情報処理装置１００の構成と同様である。
【０１３５】
本実施形態の制御部１２６は、ルールの情報に加えて、そのルールがキャッシュヒットしたか否かを表す情報（すなわち、そのルールの情報がキャッシュ部１２２から読み出されたか否かを表す情報）を、パケット処理部１２１に送信する。
【０１３６】
パケット処理部１２１は、制御部１２６から、ルールの情報に加えて、そのルールがキャッシュヒットしたか否かを表す情報を受け取る。ルールに基づくパケットの処理が、仮想ＮＩＣ部１１１への送信である場合、パケット処理部１２１は、パケットに加えて、そのパケットの処理に使用されたルールがキャッシュヒットしたか否かを表す情報を、スケジューリング部１２３に送信する。この場合、パケット処理部１２１は、具体的には、パケットと、そのパケットの処理に使用されたルールがキャッシュヒットしたか否かを表す情報を、スケジューリング部１２３の受付部１２３４に送信する。
【０１３７】
受付部１２３４は、パケットに加えて、そのパケットの処理に使用されたルールがキャッシュヒットしたか否かを表す情報を、キュー部１２３３に格納する。
【０１３８】
本実施形態のキュー部１２３３は、パケットに加えて、パケット処理部１２１によるそのパケットの処理使用されたルールがキャッシュヒットしたか否かを表わす情報も記憶する。
【０１３９】
選択部１２３１は、さらに、キュー部１２３３に格納されている先頭パケットに適合するルールの、ルール記憶部１１２からの読み出しに係るオーバヘッドの値に基づいて、先頭パケットを仮想ＮＩＣ部１１１に送信するか否かを決定する。
【０１４０】
＜＜第２の実施の形態の動作例＞＞
次に、本実施形態の情報処理装置１００における以下の動作の例について、図面を参照しながら詳細に説明する。
（Ａ）受信したパケットの処理。
（Ｂ）パケットを送信する処理。
（Ｃ）スケジューリングの処理。
【０１４１】
＜＜＜（Ａ）受信したパケットの処理＞＞＞
図６は、本実施形態の情報処理装置１００の、受信したパケットを処理する動作を表すフローチャートである。本実施形態の情報処理装置１００の、受信したパケットを処理する動作（すなわち、パケット処理部１２１がパケットを受信した際の動作）は、第１の実施形態の情報処理装置１００の、受信したパケットを処理する動作と同様である。
【０１４２】
本実施形態の制御部１２６は、例えばステップＳ１０２における、パケット処理部１２１からの、受信したパケットに適合するルールの要求に対して、ルールがキャッシュヒットしたか否かを表す情報を含めてよい。制御部１２６は、例えば、ステップＳ１０４において、ルール記憶部１１２から取得したルールに加えて、ルールがキャッシュヒットしなかったことを表す情報を、パケット処理部１２１に送信してもよい。制御部１２６は、例えば、ステップＳ１０７において、キャッシュ部１２２から読み出したルールに加えて、ルールがキャッシュヒットしたことを表す情報を、パケット処理部１２１に送信してもよい。
【０１４３】
＜＜＜（Ｂ）パケットを送信する処理＞＞＞
図１１は、本実施形態の情報処理装置１００の、受信したパケットを送信する処理の例を表すフローチャートである。
【０１４４】
図１１に示すフローチャートを用いて、本実施形態の情報処理装置１００の、パケット処理部１２１がパケットを送信する動作について説明する。図１１に示す動作は、例えば、ステップＳ１０８において、パケット処理部１２１が、”パケットを指定されたＮＩＣ部１２４または仮想ＮＩＣ部１１１に送信する”処理を含むルールに基づきパケット処理を行った場合に、開始され得る。例えば、ステップＳ１０８において、ルールに基づくパケット処理が、”パケットを指定されたＮＩＣ部１２４または仮想ＮＩＣ部１１１に送信する”処理である場合に、図１１に示す動作が開始される。以下では、主に、パケットを送信する動作の、図９に示す第１の実施形態の情報処理装置１００と、本実施形態の情報処理装置１００との間の相違点について説明する。パケットを送信する場合に、本実施形態の情報処理装置１００は、以下で説明される相違点を除いて、第１の実施形態の情報処理装置のパケットを送信する動作と同じ動作を行う。
【０１４５】
パケットの宛先が仮想ＮＩＣ部１１１のいずれかである場合（ステップＳ１３０においてＹＥＳ）、パケット処理部１２１は、パケットをスケジューリング部１２３の受付部１２３４に渡す。本実施形態のパケット処理部１２１は、パケットに加えて、制御部１２６から得た、そのパケットに適合するルールがキャッシュヒットしたか否かを表す情報も、スケジューリング部１２３の受付部１２３４に渡す。受付部１２３４は、パケット処理部１２１から、パケットと、そのパケットに適合するルールがキャッシュヒットしたか否かを表す情報とを受け取る。受付部１２３４がパケット処理部１２１から受け取ったパケットを、処理対象パケットと表記する。図１１の説明において、処理対象パケットは、受付部１２３４がパケット処理部１２１から受け取ったパケットを表す。
【０１４６】
ステップＳ１３２において選択された処理対象キューがフルであった場合（ステップＳ１３３においてＹＥＳ）、受付部１２３４は、受信したパケットから、パケットヘッダの値である、キー（すなわち、処理対象キー）を作成する（ステップＳ２３６）。処理対象キーは、ルールに含まれるマッチ条件に適合するか判定するための情報である。受付部１２３４によって作成される処理対象キーは、パケット処理部１２１によって作成される処理対象キーと同じでよい。受付部１２３４は、ステップＳ２３６において処理対象キーを生成するのではなく、パケット処理部１２１から処理対象キーを受け取ってもよい。例えば、パケットの宛先が仮想ＮＩＣのいずれかである場合に（ステップＳ１３０においてＹＥＳ）、パケット処理部１２１は、パケット（すなわち、処理対象パケット）と、処理対象キーとを、受付部１２３４に送信してもよい。受付部１２３４は、処理対象パケットに加えて、処理対象キーを、パケット処理部１２１から受け取ってもよい。ステップＳ２３６において、受付部１２３４は、処理対象パケットの処理対象キーをパケット処理部１２１から受け取ってもよい。具体的には、受付部１２３４は、処理対象パケットの処理対象キーの送信を、パケット処理部１２１に要求してもよい。パケット処理部１２１は、受付部１２３４から処理対象パケットの処理対象キーの要求を受け取ると、要求された、処理対象パケットの処理対象キーを受付部１２３４に送信してもよい。そして、受付部１２３４は、処理対象パケットの処理対象キーをパケット処理部１２１から受け取ってもよい。
【０１４７】
受付部１２３４は、処理対象パケットの、処理対象キーおよびパケット長を、制御部１２６に送信する。制御部１２６は、スケジューリング部１２３（具体的には、受付部１２３４）から、処理対象パケットの、処理対象キーおよびパケット長を受け取る。そして、制御部１２６は、キャッシュ部１２２において、受け取った処理対象キーに適合するルールのキャッシュエントリの探索を実施する（ステップＳ２３７）。例えば、受け取った、処理対象パケットのパケット長が、上述の閾値より大きい場合、制御部１２６は、処理対象キーに適合するルールのキャッシュエントリは存在しないと判定してもよい。制御部１２６は、受け取ったパケット長が上述の閾値以下である場合に、受け取った処理対象キーに適合するルールのキャッシュエントリの探索を実施してもよい。
【０１４８】
ステップＳ２３７における探索の結果、処理対象キーに適合するルールのキャッシュエントリが存在しなかった場合（ステップＳ２３８においてＮＯ）、情報処理装置１００の動作は、ステップＳ１３４に移行する。
【０１４９】
ステップＳ２３７における探索の結果、処理対象キーに適合するルールのキャッシュエントリが存在した場合、制御部１２６は、キャッシュ部１２２に格納されている、見つかったキャッシュエントリの優先フラグを、オンに設定する（ステップＳ２３９）。
【０１５０】
処理対象キューがフルでない場合（ステップＳ１３３においてＮＯ）、受付部１２３４は、処理対象パケットを処理対象キューにエンキューする（ステップＳ２３５）。その際、受付部１２３４は、パケット処理部１２１から受け取った、処理対象パケットに適合するルールがキャッシュヒットしたか否かを表す情報も処理対象キューにエンキューする。
【０１５１】
＜＜＜（Ｃ）スケジューリングの処理＞＞＞
図１２は、本実施形態の情報処理装置１００の、スケジューリングの処理を行う動作の例を表すフローチャートである。
【０１５２】
図１２のフローチャートを用いて、本実施形態の情報処理装置１００のスケジューリング部１２３が、パケット処理部１２１によって仮想ＮＩＣ部１１１に向け送信されるパケットのスケジューリング処理を行う際の動作について説明する。以下では、主に、本実施形態のスケジューリング部１２３と、第１の実施形態のスケジューリング部１２３との間の、スケジューリングの処理の動作における相違点を説明する。なお、本実施形態の情報処理装置１００は、スケジューリングの処理を行う際に、以下で説明する相違点を除いて、第１の実施形態の情報処理装置１００の動作と同じ動作を行う。
【０１５３】
ステップＳ１４０からステップＳ１４２までの動作は、図９に示す、第１の実施形態のステップＳ１４０からステップＳ１４２までの動作と同じである。
【０１５４】
次に、選択部１２３１は、処理対象パケットに適合するルールがキャッシュヒットしたか否かを示す情報に基づいて、オーバヘッドを示す値（以下の説明では、単にオーバヘッドとも表記する）を決定する。以下のステップＳ２４３の説明において、オーバヘッドを示す値は、単に「オーバヘッド」とも表記される。処理対象パケットに適合するルールがキャッシュヒットしたか否かを示す情報は、キャッシュヒット情報と表記される。
【０１５５】
選択部１２３１は、処理対象キューの不足カウンタ値が、処理対象キューの先頭パケットのパケット長と決定したオーバヘッドとを加算した値以上であるか否かを確認する（ステップＳ２４３）。上述のキャッシュヒット情報が、処理対象パケットに適合するルールがキャッシュヒットしたことを示す場合、選択部１２３１は、オーバヘッドとして、０を用いる。言い換えると、選択部１２３１は、オーバヘッドを０に決定する。パケット処理部１２１による当該パケットの処理の際に、キャッシュヒットした場合には０を、上述のキャッシュヒット情報が、処理対象パケットに適合するルールがキャッシュヒットしなかったことを示す場合、選択部１２３１は、オーバヘッドとして、所定の値を用いる。言い換えると、選択部１２３１は、オーバヘッドを所定の値に決定する。所定の値は、予め求められた、ルールの平均サイズ、又は、ルール記憶部１１２へのアクセスに必要なバスの帯域の平均消費量等であってもよい。
【０１５６】
スケジューリング部１２３は、オーバヘッドを、ルールのサイズに基づいて決定してもよい。その場合、パケット処理部１２１は、例えば処理対象パケットをスケジューリング部１２３に送信する際、その処理対象パケットに適合するルールのサイズを、スケジューリング部１２３に送信してもよい。スケジューリング部１２３は、オーバヘッドを、ルール記憶部１１２からルールを読み出した際のバスの帯域の消費量に決定してもよい。この場合、例えば制御部１２６が、ルール記憶部１１２からルールを読み出した際のバスの帯域の消費量を導出し、導出した消費量を、パケット処理部１２１に送信してもよい。パケット処理部１２１は、制御部１２６から消費量を受信し、受信した消費量を、スケジューリング部１２３に送信してもよい。これらの場合、例えば、キャッシュヒット情報（すなわち、処理対象パケットに適合するルールがキャッシュヒットしたか否かを示す情報）が、オーバヘッドとして設定される値であってもよい。キャッシュヒット情報は、例えば、バスを介して読み出されたルールのサイズ、又は、ルールの読み出しの際のバスの帯域の消費量等であってもよい。その場合、キャッシュヒット情報の値が０である場合、キャッシュヒット情報は、パケットに適合するルールがキャッシュヒットしたことを表す。キャッシュヒット情報の値が０以外の値である場合、キャッシュヒット情報は、パケットに適合するルールがキャッシュヒットしなかったことを表す。スケジューリング部１２３は、以上の例によらずに、オーバヘッドを決定してもよい。
【０１５７】
不足カウンタの値が、処理対象パケットのパケット長とオーバヘッドとの和より小さい場合（ステップＳ２４３においてＮＯ）、情報処理装置１００は、図１２に示す動作を終了する。
【０１５８】
不足カウンタの値が、処理対象パケットのパケット長とオーバヘッドとの和以上である場合（ステップＳ２４３においてＹＥＳ）、選択部１２３１は、処理対象キューから先頭パケットを読み出す。選択部１２３１は、読み出した先頭パケットを、処理対象キューに関連付けられている仮想ＮＩＣ部１１１に送信する（ステップＳ１４４）。
【０１５９】
次に、選択部１２３１は、処理対象キューの不足カウンタ値から、ステップＳ１４４において送信したパケットのパケット長と、オーバヘッドの値とを減算する（ステップＳ２４５）。選択部１２３１は、処理対象キューに関連付けられている不足カウンタ部１２３２に、処理対象キューの不足カウンタ値から、送信されたパケットのパケット長とオーバヘッドの値とを減算した値を、新たな不足カウント値として格納する。
【０１６０】
本実施形態のステップＳ１４６及びステップＳ１４７の動作は、第１の実施形態のステップＳ１４６及びステップＳ１４７の動作と同じである。
【０１６１】
以上で詳細に説明したように、本実施の形態においては、スケジューリング部１２３は、パケットの処理に伴って発生するオーバヘッド（すなわち、制御系通信によるバスの消費）を考慮してＱｏＳ制御を行う。また、制御部１２６は、スケジューリング部１２３によって破棄されたパケットに関するルールを優先的にキャッシュとしてキャッシュ部１２２に記憶する。これによって、QoS制御の精度の劣化を抑制できる。
【０１６２】
（第２の実施形態の変形例）
以上の説明では、ステップＳ２４３およびステップＳ２４５において使用されるオーバヘッドは、固定値（すなたち、バス１０３Ｂの状態によって変化しない値）である。しかし、オーバヘッドは、以上の例に限定されない。
【０１６３】
選択部１２３１は、例えば、バス１０３Ｂの状態に応じて動的にオーバヘッドを決定してもよい。具体的には、選択部１２３１は、例えば、以下のようにオーバヘッドを決定してもよい。
【０１６４】
例えば、制御部１２６が、バス１０３Ｂの性能を測定する機能を備えていてよい。バス１０３Ｂの性能は、例えば、利用率であってよい。制御部１２６は、得られた、バス１０３Ｂの利用率を、スケジューリング部１２３（具多的には、選択部１２３１）に送信してよい。
【０１６５】
選択部１２３１は、バス１０３Ｂの利用率を、例えば制御部１２６から受け取り、受け取った利用率に基づいて、オーバヘッドの値を決定してよい。
【０１６６】
選択部１２３１は、例えば、受け取った利用率が所定の閾値未満である場合、オーバヘッドの値が第１の値になり、受け取った利用率が所定の閾値以上である場合、オーバヘッドの値が第２の値になるよう、オーバヘッドの値を切り替えてもよい。
【０１６７】
選択部１２３１は、例えば、予め定められている、利用率の範囲とその範囲に関連付けられているオーバヘッドの値との組を複数含むテーブルに基づいて、オーバヘッドの値を切り替えてもよい。選択部１２３１は、例えば、テーブルにおいて、受け取った利用率を含む、利用率の範囲に関連付けられているオーバヘッドの値を、使用するオーバヘッドの値に決定してもよい。
【０１６８】
選択部１２３１は、利用率を入力とする、予め定められた関数を使用して、オーバヘッドの値を決定してもよい。選択部１２３１は、得られた利用率を入力として、上述の関数の出力値を算出し、算出した出力値をオーバヘッドの値に決定してもよい。
【０１６９】
＜第３の実施形態＞
＜＜第３の実施形態の構成＞＞
次に、本発明の第３の実施形態について、図面を参照して詳細に説明する。
【０１７０】
図１４は、本実施形態に係る情報処理装置５００の構成の例を表すブロック図である。
【０１７１】
図１４に示す例では、情報処理装置５００は、決定部１２５と、制御部１２６とを含む。制御部１２６は、キャッシュ部１２２にアクセス可能に接続されていてよい。決定部１２５は、データに対する、転送を含む複数の種類の処理の少なくとも１つの処理を示し、前記データの転送に使用される通信経路を介して読み出されるルールを、キャッシュ部１２２に格納するか否かの決定を、前記データのサイズに基づいて行う。制御部１２６は、格納すると決定された前記ルールの前記キャッシュ部１２２への格納を行う。キャッシュ部１２２は、ルールを記憶する。本実施形態のデータは、第１及び第２の実施形態のパケットに相当する。本実施形態の通信経路は、第１の実施形態のバス１０３Ｂに相当する。
【０１７２】
＜＜第３の実施形態の動作＞＞
次に、本実施形態に係る情報処理装置５００の動作について、図面を参照して詳細に説明する。
【０１７３】
図１５は、本実施形態に係る情報処理装置５００の動作の例を表すフローチャートである。
【０１７４】
まず、決定部１２５が、データに対する処理を示すルールを、キャッシュ部１２２に格納するか否かを、データのサイズに基づいて決定する（ステップＳ５００）。言い換えると、決定部１２５が、データに適合するルールを、キャッシュ部１２２に格納するか否かを、データのサイズに基づいて決定する。決定部１２５が、ルールをキャッシュ部１２２に格納すると決定した場合（ステップＳ５０１においてＹＥＳ）、制御部１２６は、ルールをキャッシュ部１２２に格納する（ステップＳ５０２）。決定部１２５が、ルールをキャッシュ部１２２に格納しないと決定した場合（ステップＳ５０１においてＮＯ）、制御部１２６は、ルールをキャッシュ部１２２に格納せず、図１５に示す動作は終了する。
【０１７５】
上述のように、パケットのデータのサイズが小さいほど、データ（すなわち、パケット）の処理の回数が多くなることが知られている。従って、パケットのサイズが小さいほど、処理の際に使用されるルールの読み出しの回数が増加する。データ（すなわち、パケット）の送信に使用される通信経路（例えば、バス）と、ルールの読み出しに使用される通信経路が共通である場合、すなわち、データ系通信と制御系通信とが通信経路を共有する場合、パケットのサイズが小さいほど制御系通信が増え、データ系通信に使用できる帯域が減少する。しかし、サイズが小さいパケットに適合するルールをキャッシュ部１２２に格納し、サイズが小さいパケットの処理の際にはキャッシュ部１２２から読み出すことによって、制御系通信の量を削減できる。制御系通信の量を削減することによって、制御系通信と通信経路を共用するデータ系通信に使用できる帯域が増加する。従って、データ系通信に使用できる帯域が制限されることによる、QoS制御の精度の劣化を、抑制することができる。
【０１７６】
従って、上で説明した本実施形態には、パケットの処理にかかるデータ系通信と制御系通信とがバスを共用する場合であっても、QoS制御の精度の劣化を抑制できるという効果がある。
【０１７７】
＜その他の実施形態＞
上記実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【０１７８】
（付記１）
データに対する、転送を含む複数の種類の処理の少なくとも１つの処理を示し、前記データの転送に使用される通信経路を介して読み出されるルールを、キャッシュ手段に格納するか否かの決定を、前記データのサイズに基づいて行う決定手段と、
格納すると決定された前記ルールの前記キャッシュ手段への格納を行う制御手段と、
を備える情報処理装置。
【０１７９】
（付記２）
前記制御手段は、前記データのサイズが所定の基準より小さい場合に、前記ルールが前記キャッシュ手段に優先的に格納されるよう、前記決定を行う
付記１に記載の情報処理装置。
【０１８０】
（付記３）
前記データに行われる前記処理を特定することによって生じた、前記通信経路を介した通信の負荷に基づいて、前記データを転送する通信の帯域を制御するスケジューリング手段
をさらに備える付記１又は２に記載の情報処理装置。
【０１８１】
（付記４）
前記通信の負荷は、前記ルールの読み出しによって生じた、前記通信経路を介した通信の量を含む
付記３に記載の情報処理装置。
【０１８２】
（付記５）
前記通信経路の使用率を測定する測定手段をさらに備え、
前記スケジューリング手段は、前記使用率にさらに基づいて、前記帯域を制御する
付記３又は４に記載の情報処理装置。
【０１８３】
（付記６）
前記スケジューリング手段は、前記データの前記ルールがキャッシュ手段に格納されていた否かに基づいて、前記通信の負荷が生じたか否かの判定を行い、当該判定の結果に基づいて、前記通信の帯域を制御する
付記３乃至５のいずれか１項に記載の情報処理装置。
【０１８４】
（付記７）
複数の仮想マシンと、それぞれ当該複数の仮想マシンの１つのネットワークインタフェースとして動作する複数の仮想ネットワークインタフェースとを提供する実行手段と、
外部通信ネットワークとの通信を中継する通信手段と、
前記通信手段を介してデータを受け取り、受け取った前記データに適合する前記ルールを前記制御手段に要求し、要求に対して返送された前記ルールが示す前記処理を、受け取った前記データに対して行う処理手段と、
前記ルールを記憶するルール記憶手段と、
をさらに備え、
前記制御手段は、前記データに適合する前記ルールを要求された場合、当該ルールが前記キャッシュ手段に格納されている場合当該キャッシュ手段から前記ルールを読み出し、前記ルールが前記キャッシュ手段に格納されていない場合当該ルールを前記ルール記憶手段から読み出し、読み出した前記ルールを返送し、
前記処理手段は、返送された前記ルールが示す、前記データに行われる処理が、前記複数の仮想マシンのいずれかへの転送である場合、前記データを前記スケジューリング手段に送出し、
前記スケジューリング手段は、それぞれ前記複数の仮想マシンの１つに関連付けられている複数の一時記憶領域を含み、前記データを受け取った場合前記データが転送される仮想マシンに関連付けられている一時記憶領域に前記データを格納し、当該一時記憶領域から読み出した前記データを、前記通信経路を介して前記データが転送される前記仮想マシンに送信し、さらに、前記データに行われる前記処理を特定することによって生じた前記通信の負荷に基づいて、前記一時記憶領域からデータを読み出すか否かを決定することによって、前記帯域を制御する
付記３乃至６のいずれか１項に記載の情報処理装置。
【０１８５】
（付記８）
前記制御手段は、前記データが破棄された場合、当該データの前記ルールが前記キャッシュ手段に格納されている場合、当該ルールが優先的に前記キャッシュ手段に保持されるように設定する
付記１乃至７のいずれか１項に記載の情報処理装置。
【０１８６】
（付記９）
データに対する、転送を含む複数の種類の処理の少なくとも１つの処理を示し、前記データの転送に使用される通信経路を介して読み出されるルールを、キャッシュ手段に格納するか否かの決定を、前記データのサイズに基づいて行う決定手段と、
格納すると決定された前記ルールの前記キャッシュ手段への格納を行う制御手段と、
を備える情報処理装置。
【０１８７】
（付記１０）
前記制御手段は、前記データのサイズが所定の基準より小さい場合に、前記ルールが前記キャッシュ手段に優先的に格納されるよう、前記決定を行う
付記９に記載の情報処理装置。
【０１８８】
（付記１１）
前記データに行われる前記処理を特定することによって生じた、前記通信経路を介した通信の負荷に基づいて、前記データを転送する通信の帯域を制御するスケジューリング手段
をさらに備える付記９又は１０に記載の情報処理装置。
【０１８９】
（付記１２）
前記通信の負荷は、前記ルールの読み出しによって生じた、前記通信経路を介した通信の量を含む
付記１１に記載の情報処理装置。
【０１９０】
（付記１３）
前記通信経路の使用率を測定する測定手段をさらに備え、
前記スケジューリング手段は、前記使用率にさらに基づいて、前記帯域を制御する
付記１１又は１２に記載の情報処理装置。
【０１９１】
（付記１４）
前記スケジューリング手段は、前記データの前記ルールがキャッシュ手段に格納されていた否かに基づいて、前記通信の負荷が生じたか否かの判定を行い、当該判定の結果に基づいて、前記通信の帯域を制御する
付記１１乃至１３のいずれか１項に記載の情報処理装置。
【０１９２】
（付記１５）
複数の仮想マシンと、それぞれ当該複数の仮想マシンの１つのネットワークインタフェースとして動作する複数の仮想ネットワークインタフェースとを提供する実行手段と、
外部通信ネットワークとの通信を中継する通信手段と、
前記通信手段を介してデータを受け取り、受け取った前記データに適合する前記ルールを前記制御手段に要求し、要求に対して返送された前記ルールが示す前記処理を、受け取った前記データに対して行う処理手段と、
前記ルールを記憶するルール記憶手段と、
をさらに備え、
前記制御手段は、前記データに適合する前記ルールを要求された場合、当該ルールが前記キャッシュ手段に格納されている場合当該キャッシュ手段から前記ルールを読み出し、前記ルールが前記キャッシュ手段に格納されていない場合当該ルールを前記ルール記憶手段から読み出し、読み出した前記ルールを返送し、
前記処理手段は、返送された前記ルールが示す、前記データに行われる処理が、前記複数の仮想マシンのいずれかへの転送である場合、前記データを前記スケジューリング手段に送出し、
前記スケジューリング手段は、それぞれ前記複数の仮想マシンの１つに関連付けられている複数の一時記憶領域を含み、前記データを受け取った場合前記データが転送される仮想マシンに関連付けられている一時記憶領域に前記データを格納し、当該一時記憶領域から読み出した前記データを、前記通信経路を介して前記データが転送される前記仮想マシンに送信し、さらに、前記データに行われる前記処理を特定することによって生じた前記通信の負荷に基づいて、前記一時記憶領域からデータを読み出すか否かを決定することによって、前記帯域を制御する
付記１１乃至１４のいずれか１項に記載の情報処理装置。
【０１９３】
（付記１６）
前記制御手段は、前記データが破棄された場合、当該データの前記ルールが前記キャッシュ手段に格納されている場合、当該ルールが優先的に前記キャッシュ手段に保持されるように設定する
付記９乃至１５のいずれか１項に記載の情報処理装置。
【０１９４】
（付記１７）
データに対する、転送を含む複数の種類の処理の少なくとも１つの処理を示し、前記データの転送に使用される通信経路を介して読み出されるルールを、キャッシュ手段に格納するか否かの決定を、前記データのサイズに基づいて行う決定手段と、
格納すると決定された前記ルールの前記キャッシュ手段への格納を行う制御手段と、
を備える情報処理装置。
【０１９５】
（付記１８）
前記制御手段は、前記データのサイズが所定の基準より小さい場合に、前記ルールが前記キャッシュ手段に優先的に格納されるよう、前記決定を行う
付記１７に記載の情報処理装置。
【０１９６】
（付記１９）
前記データに行われる前記処理を特定することによって生じた、前記通信経路を介した通信の負荷に基づいて、前記データを転送する通信の帯域を制御するスケジューリング手段
をさらに備える付記１７又は１８に記載の情報処理装置。
【０１９７】
（付記２０）
前記通信の負荷は、前記ルールの読み出しによって生じた、前記通信経路を介した通信の量を含む
付記１９に記載の情報処理装置。
【０１９８】
（付記２１）
前記通信経路の使用率を測定する測定手段をさらに備え、
前記スケジューリング手段は、前記使用率にさらに基づいて、前記帯域を制御する
付記１９又は２０に記載の情報処理装置。
【０１９９】
（付記２２）
前記スケジューリング手段は、前記データの前記ルールがキャッシュ手段に格納されていた否かに基づいて、前記通信の負荷が生じたか否かの判定を行い、当該判定の結果に基づいて、前記通信の帯域を制御する
付記１９乃至２１のいずれか１項に記載の情報処理装置。
【０２００】
（付記２３）
複数の仮想マシンと、それぞれ当該複数の仮想マシンの１つのネットワークインタフェースとして動作する複数の仮想ネットワークインタフェースとを提供する実行手段と、
外部通信ネットワークとの通信を中継する通信手段と、
前記通信手段を介してデータを受け取り、受け取った前記データに適合する前記ルールを前記制御手段に要求し、要求に対して返送された前記ルールが示す前記処理を、受け取った前記データに対して行う処理手段と、
前記ルールを記憶するルール記憶手段と、
をさらに備え、
前記制御手段は、前記データに適合する前記ルールを要求された場合、当該ルールが前記キャッシュ手段に格納されている場合当該キャッシュ手段から前記ルールを読み出し、前記ルールが前記キャッシュ手段に格納されていない場合当該ルールを前記ルール記憶手段から読み出し、読み出した前記ルールを返送し、
前記処理手段は、返送された前記ルールが示す、前記データに行われる処理が、前記複数の仮想マシンのいずれかへの転送である場合、前記データを前記スケジューリング手段に送出し、
前記スケジューリング手段は、それぞれ前記複数の仮想マシンの１つに関連付けられている複数の一時記憶領域を含み、前記データを受け取った場合前記データが転送される仮想マシンに関連付けられている一時記憶領域に前記データを格納し、当該一時記憶領域から読み出した前記データを、前記通信経路を介して前記データが転送される前記仮想マシンに送信し、さらに、前記データに行われる前記処理を特定することによって生じた前記通信の負荷に基づいて、前記一時記憶領域からデータを読み出すか否かを決定することによって、前記帯域を制御する
付記１９乃至２２のいずれか１項に記載の情報処理装置。
【０２０１】
（付記２４）
前記制御手段は、前記データが破棄された場合、当該データの前記ルールが前記キャッシュ手段に格納されている場合、当該ルールが優先的に前記キャッシュ手段に保持されるように設定する
付記１７乃至２３のいずれか１項に記載の情報処理装置。
【０２０２】
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０２０３】
１    情報処理システム
１０    コンピュータ
１００    情報処理装置
１０１    ＣＰＵ
１０２    メモリ
１０３Ａ    バス
１０３Ｂ    バス
１０３Ｃ    バス
１０３Ｄ    バス
１０４    ＮＩＣ
１０５    記憶装置
１０６    アクセス装置
１０７    記憶媒体
１１０    ＣＰＵ及びメモリ
１１０Ａ    実行部
１１１    仮想通信インタフェース部（仮想ＮＩＣ部）
１１２    ルール記憶部
１１３    ルール管理部
１１４    情報処理部
１１５    指示受付部
１２０    仮想スイッチ用ハードウェア
１２１    パケット処理部
１２２    キャッシュ部
１２３    スケジューリング部
１２４    通信インタフェース部（ＮＩＣ部）
１２５    決定部
１２６    制御部
２００    ホストマシン
２１０    ＣＰＵ及びメインメモリ
２１１    仮想ＮＩＣ
２１２    ＦＩＢ
２１４    仮想マシン（ＶＭ）
２２０    仮想スイッチ用ＨＷ
２２１    仮想スイッチ
２３０    バス
２４０    ＮＩＣ
３００    管理装置
４００    通信ネットワーク
５００    情報処理装置
１２３１    選択部
１２３２    不足カウンタ部
１２３３    キュー部
１２３４    受付部
【図１】
2020017911.tif 000003
【図２】
2020017911.tif 000004
【図３】
2020017911.tif 000005
【図４】
2020017911.tif 000006
【図５】
2020017911.tif 000007
【図６】
2020017911.tif 000008
【図７】
2020017911.tif 000009
【図８】
2020017911.tif 000010
【図９】
2020017911.tif 000011
【図１０】
2020017911.tif 000012
【図１１】
2020017911.tif 000013
【図１２】
2020017911.tif 000014
【図１３】
2020017911.tif 000015
【図１４】
2020017911.tif 000016
【図１５】
2020017911.tif 000017