(57)【要約】  本発明は、ネットワーキング・デバイスの仮想化のためにパケット処理をオフロードするための方法、システム、およびコンピューター・プログラム製品に及ぶ。ホストが、仮想機械のためにルール・セット（１つまたは複数）を維持し、物理ネットワーク・インターフェース・カード（ＮＩＣ）が、この仮想機械のためにフロー・テーブル（１つまたは複数）を維持する。物理ＮＩＣは、この仮想機械に関連するネットワーク・パケットを受信して処理する。ネットワーク・パケットの処理は、物理ＮＩＣがネットワーク・パケットを物理ＮＩＣにおけるフロー・テーブル（１つまたは複数）と比較することを含む。ネットワーク・パケットが物理ＮＩＣにおけるフロー・テーブル（１つまたは複数）内のフローと一致するとき、物理ＮＩＣは、一致するフローに基づいて、このネットワーク・パケットに対してアクションを実行する。逆に、ネットワーク・パケットが物理ＮＩＣにおけるフロー・テーブル（１つまたは複数）内のフローと一致しないとき、物理ＮＩＣは、ルール・セット（１つまたは複数）に対する処理のために、ネットワーク・パケットをホスト・パーティションに渡す。【選択図】図１
2015515798.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上のプロセッサーとシステム・メモリーとを含むコンピューター・システムにおいて、前記コンピューター・システムが物理ネットワーク・インターフェース・カード（ＮＩＣ）も含みさらにホスト・パーティションを実行するものであり、前記コンピューター・システムにおいて実行する仮想機械のためにネットワーク・パケットを処理する方法であって、
前記ホスト・パーティションが仮想機械のために１つ以上のルール・セットを維持するアクトと、
前記物理ＮＩＣが前記仮想機械のために１つ以上のフロー・テーブルを維持するアクトと、
前記物理ＮＩＣが前記仮想機械に関連するネットワーク・パケットを受信するアクトと、
前記仮想機械のために前記ネットワーク・パケットを処理するアクトであって、
前記物理ＮＩＣが前記ネットワーク・パケットを前記１つ以上のフロー・テーブルと比較するアクト、および
前記ネットワーク・パケットが前記１つ以上のフロー・テーブルにおけるフローと一致するとき、前記物理ＮＩＣが前記一致するフローに基づいて、前記ネットワーク・パケットに対してアクションを実行するアクト、または
前記ネットワーク・パケットが前記１つ以上のフロー・テーブルにおけるフローと一致しないとき、前記物理ＮＩＣが、前記１つ以上のルール・セットに対する処理のために、前記ネットワーク・パケットを前記ホスト・パーティションに渡すアクト、
を含む、アクトと、
を含む、方法。
【請求項２】
請求項１記載の方法であって、更に、前記ネットワーク・パケットが前記１つ以上のフロー・テーブルにおけるフローと一致しない場合、前記ホスト・パーティションが前記ネットワーク・パケットを前記１つ以上のルール・セットと比較するアクトを含む、方法。
【請求項３】
請求項２記載の方法において、前記ネットワーク・パケットが前記１つ以上のルール・セットにおけるルールと一致するとき、前記ホスト・パーティションが前記一致するルールに基づいて、前記ネットワーク・パケットに対してアクションを実行するアクトを含む、方法。
【請求項４】
請求項３記載の方法において、前記ネットワーク・パケットが前記１つ以上のルール・セットにおけるルールと一致するとき、前記ホスト・パーティションが、前記１つ以上のフロー・テーブルにおいて、前記物理ＮＩＣにおいて１つ以上のフローを作成するアクトを含む、方法。
【請求項５】
請求項１記載の方法であって、更に、前記ホスト・パーティションが、前記仮想機械のために１つ以上のフロー・テーブルを維持するアクトを含み、前記物理ＮＩＣにおいて維持される前記１つ以上のフロー・テーブルが、前記ホスト・パーティションにおいて維持される前記１つ以上のフロー・テーブルの部分集合を含む、方法。
【請求項６】
コンピューター実行可能命令が格納されている１つ以上のコンピューター記憶媒体を含むコンピューター・プログラム製品であって、前記コンピューター実行可能命令がコンピューター・システムの１つ以上のプロセッサーによって実行されると、前記コンピューター・システムにおいて実行する仮想機械のためにネットワーク・パケットを処理する方法を、前記コンピューター・システムに実現させ、前記方法が、
仮想スイッチが仮想機械のために１つ以上のルール・セットを維持するアクトと、
前記仮想スイッチが、前記仮想機械のために１つ以上のフロー・テーブルを維持するアクトと、
前記仮想スイッチが、前記１つ以上のフロー・テーブルの少なくとも一部を前記物理ＮＩＣにオフロードするアクトと、
前記仮想スイッチが、前記仮想機械のためにネットワーク・パケットを処理するアクトであって、
前記仮想スイッチが、前記仮想機械または前記物理ＮＩＣの一方から前記ネットワーク・パケットを受信し、
前記仮想スイッチが前記ネットワーク・パケットを前記１つ以上のルール・セットにおけるルールと照合し、
前記ネットワーク・パケットを前記ルールと照合したことに基づいて、
前記仮想スイッチが前記１つ以上のフロー・テーブルにおいてフローを作成し、
前記仮想スイッチが前記フローを前記物理ＮＩＣにオフロードする、
ことを含む、アクトと、
を含む、コンピューター・プログラム製品。
【請求項７】
請求項６記載のコンピューター・プログラム製品において、前記仮想スイッチが前記仮想機械のために１つ以上のルール・セットを維持するアクトが、着信ルール・セットと発信ルール・セットとを維持するアクトを含む、コンピューター・プログラム製品。
【請求項８】
請求項６記載のコンピューター・プログラム製品において、前記仮想スイッチが前記仮想機械のためにネットワーク・パケットを処理する前記アクトが、更に、
前記仮想スイッチが、前記ルールに基づいて、前記ネットワーク・パケットに対して少なくとも１つのアクションを実行することを含む、コンピューター・プログラム製品。
【請求項９】
請求項８記載のコンピューター・プログラム製品において、前記少なくとも１つのアクションが、パケット検査またはパケット操作動作の内１つ以上を含む、コンピューター・プログラム製品。
【請求項１０】
コンピューター・システムであって、
１つ以上のプロセッサーと、
システム・メモリーと、
物理ネットワーク・インターフェース・カード（ＮＩＣ）と、
コンピューター実行可能命令が格納されている１つ以上のコンピューター記憶媒体を含むコンピューター・プログラム製品と、
を含み、前記コンピューター実行可能命令が前記１つ以上のプロセッサーによって実行されると、仮想スイッチを実行し、前記仮想スイッチが、
前記コンピューター・システムにおいてホスト・パーティション内部で実行し、
仮想機械のために着信ルール・セットおよび発信ルール・セットを維持し、
前記仮想機械のために着信フロー・テーブルおよび発信フロー・テーブルを維持し、
前記着信フロー・テーブルまたは前記発信テーブルの内１つ以上の少なくとも一部を、前記物理ＮＩＣの仮想ブリッジにオフロードし、
前記仮想機械のためにネットワーク・パケットを処理するように構成され、
前記処理が、
前記仮想機械または前記物理ＮＩＣの内１つ以上から前記ネットワーク・パケットを受信し、
前記ネットワーク・パケットを前記着信ルール・セットまたは前記発信ルール・セットの内１つにおけるルールと照合し、
前記ネットワーク・パケットを前記ルールと照合したことに基づいて、
前記仮想スイッチにおいて、前記着信フロー・テーブルまたは前記発信フロー・テーブルの内１つ以上においてフローを作成し、
前記物理ＮＩＣの前記仮想ブリッジにおいて、前記フローを、前記着信フロー・テーブルまたは前記発信テーブルの内１つ以上にオフロードする、
ことを含む、コンピューター・システム。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  １．背景および関連技術
[0002]  コンピューター・システムおよび関連技術は、社会の多くの面に影響を及ぼす。実際、コンピューター・システムの情報処理能力は、私達が生活し仕事する方法を変えた。コンピューター・システムは、今やコンピューター・システムの出現以前では手作業で行っていたタスク（例えば、ワード・プロセッシング、予定管理、会計等）のホストを実行するのが一般的である。更に最近になって、コンピューター・システムが互いにそして他の電子デバイスと結合されて有線およびワイヤレス・コンピューター・ネットワーク双方を形成し、これらのネットワークを通じて、コンピューター・システムおよび他の電子デバイスが電子データーを転送できるようになった。したがって、多くの計算タスクの実行は、多数の異なるコンピューター・システムおよび／または多数の異なる計算環境に跨がって分散される。
【０００２】
[0003]  コンピューター・システムには、１つ以上の仮想機械をホストするために仮想化環境を提供するように構成されるものがある。例えば、準仮想化実行環境は、ハイパーバイザー(hypervisor)を含む。ハイパーバイザーは、ペアレント・パーティションと１つ以上のチャイルド・パーティション（または仮想機械）とを含む。ペアレント・パーティションは、ホスト・オペレーティング・システムを実行し、仮想化スタックを管理するように構成される。各チャイルド・パーティションは、対応するゲスト・オペレーティング・システムを実行するように構成される。また、ハイパーバイザーは、チャイルド・パーティションが、ゲスト・オペレーティング・システム内で実行する仮想デバイス（ドライバー）を通じて物理デバイスにアクセスすることを可能にするソフトウェア・インターフェースも提供する。
【０００３】
[0004]  仮想化における共通のシナリオは、仮想化ホスト・コンピューター・システムにおいて実行している仮想機械間においてネットワーク・パケットを管理し、仮想機械とホスト・コンピューター・システムから離れたコンピューター・システムとの間で流れるネットワーク・パケットを管理することである。したがって、ホスト・オペレーティング・システムにおける仮想化スタックは、ネットワーキング仮想化スタック、または仮想スイッチを含めばよい。仮想スイッチは、仮想機械と関連して通信されるネットワーク・パケットを傍受、検査、および操作するように構成される。しかしながら、こうするのは非効率的になる可能性がある。何故なら、これはホスト・オペレーティング・システムとゲスト・オペレーティング・システムとの間において、頻繁で費用がかかる（例えば、ＣＰＵ使用に関して）コンテキスト切り替えを生ずるからである。
【０００４】
[0005]  仮想化における最近の開発に、シングル・ルートＩ／Ｏ仮想化（ＳＲＩＯＶ：Single-Root I/O Virtualization）がある。ＳＲＩＯＶは、周辺コンポーネント相互接続エクスプレス（ＰＣＩｅ）バス・アーキテクチャーの拡張であり、ＰＣＩｅデバイスが直接ペアレント・パーティションおよびチャイルド・パーティションと通信することを可能にする。したがって、ＳＲＩＯＶは、ＰＣＩｅデバイスがこれら自体を直接仮想機械に（ハイパーバイザーを介して）露出することを可能にする。例えば、ＳＲＩＯＶ−準拠の物理ネットワーク・インターフェース・カード（ＮＩＣ）は、物理機能をホスト・パーティションに提示し、１つ以上の仮想機能を対応するチャイルド・パーティションに提示することができる。一方、ホスト・オペレーティング・システムは、物理機能と通信する物理機能ドライバーを含むことができ、各ゲスト・オペレーティング・システムは、対応する仮想機能と通信する仮想機能ドライバーを実行することができる。そして、物理ＮＩＣは、ネットワーク・パケットを直接ゲスト・オペレーティング・システムに通信することができ（ホスト・オペレーティング・システムを迂回する）、ネットワーク性能を大幅に改善することができる。
【０００５】
[0006]  ＳＲＩＯＶがもたらす進歩にも拘わらず、仮想化環境におけるネットワーク・パケット処理の分野には非効率なことが残っている。
【発明の概要】
【０００６】
[0007]  本発明は、ネットワーキング・デバイスの仮想化のためにパケット処理をオフロードするための方法、システム、およびコンピューター・プログラム製品に及ぶ。例えば、本発明の実施形態は、包括的なネットワーク・パケットルールおよびフロー・モデルを提供し、仮想機械ホストにおけるネットワーク・パケット処理の一部を、ホストから物理ＮＩＣにオフロードすることを可能にする。具体的には、本発明の実施形態は、ペアレント・パーティション（即ち、ホスト・オペレーティング・システム）における１つ以上のフロー・テーブル(flow table)の全部または一部を、物理ＮＩＣにオフロードすることを可能にする。こうすることによって、物理ＮＩＣは定められたルールにしたがってパケット処理を実行しつつ、仮想機械環境におけるネットワーク・パケット処理の処理能力(performance)を高めることができる。
【０００７】
[0008]  実施形態では、コンピューター・システムにおいて実行する仮想機械のためにネットワーク・パケットを処理する方法は、ホスト・パーティションが仮想機械のために１つ以上のルール・セット(rule sets)を維持するステップを含む。また、この方法は、物理ＮＩＣが仮想機械のために１つ以上のフロー・テーブルを維持するステップも含む。物理ＮＩＣは、仮想機械に関連するネットワーク・パケットを受信し、このネットワーク・パケットを仮想機械のために処理する。ネットワーク・パケットの処理は、物理ＮＩＣがネットワーク・パケットを１つ以上のフロー・テーブルと比較することを含む。ネットワーク・パケットが１つ以上のフロー・テーブルにおける１つのフローと一致するとき、物理ＮＩＣは、一致するフローに基づいて、ネットワーク・パケットに対してアクションを実行する。逆に、ネットワーク・パケットが１つ以上のフロー・テーブルにおけるフローと一致しない場合、物理ＮＩＣは、１つ以上のルール・セットに反する(against)処理のために、このネットワーク・パケットをホスト・パーティションに渡す。
【０００８】
[0009]  他の実施形態では、コンピューター・システムにおいて実行する仮想機械のためにネットワーク・パケットを処理する方法は、仮想スイッチが仮想機械のために１つ以上のルール・セットを維持し、更に仮想機械のために１つ以上のフロー・テーブルを維持するステップも含む。仮想スイッチは、１つ以上のフロー・テーブルの内少なくとも一部を物理ＮＩＣにオフロードする。仮想スイッチは、仮想機械のためにネットワーク・パケットを処理する。ネットワーク・パケットの処理は、仮想スイッチがネットワーク・パケットを仮想機械または物理ＮＩＣの内一方から受信するステップと、仮想スイッチがネットワーク・パケットを１つ以上のルール・セットにおける１つのルールと照合するステップとを含む。ネットワーク・パケットをルールと照合することに基づいて、仮想スイッチは、１つ以上のフロー・テーブルにおいてフローを作成し、このフローを物理ＮＩＣにオフロードする。
【０００９】
[0010]  この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を判断するときに補助として使用されることを意図するのでもない。
【００１０】
[0011]  本発明の追加の特徴および利点は、以下に続く説明において明記され、更に部分的にこの説明から自明であり、または本発明の実施によって習得することができる。本発明の特徴および利点は、添付する特許請求の範囲において特定して指摘される手段(instruments)および組み合わせによって実現し取得することができる。本発明のこれらおよび他の特徴は、以下の説明および添付する特許請求の範囲から一層明確になるであろう。あるいは、以下に明記する本発明の実施によって取得することができる。
【図面の簡単な説明】
【００１１】
[0012]  以上で引用した本発明の利点および特徴、ならびにその他の利点および特徴を得ることができる態様(manner)について説明するために、以上で端的に説明した発明について、更に一層特定した説明を、その具体的な実施形態を参照して示す(render)。これらの実施形態を、添付する図面に示す。これらの図面は本発明の典型的な実施形態のみを図示し、したがってその範囲の限定と解釈してはならないことを理解した上で、添付図面の使用によって更に具体性をもってそして詳細に本発明について記載し説明する(described and explained)。図面において、
【図１】図１は、ネットワーク・デバイス仮想化のためにパケット処理を物理ＮＩＣにオフロードすることを容易にするコンピューター・アーキテクチャー例を示す。
【図２】図２は、コンピューター・システムにおいて実行する仮想機械のためにネットワーク・パケットを処理する方法例のフロー・チャートを示す。
【図３】図３は、コンピューター・システムにおいて実行する仮想機械のためにネットワーク・パケットを処理する方法の代替例のフロー・チャートを示す。
【図４】図４は、ネットワーキング・デバイスの仮想化のために、パケット処理を物理ＮＩＣにオフロードすることを容易にする代替コンピューター・アーキテクチャーを示す。
【図５】図５は、マルチレイヤー仮想スイッチの一例のレイヤーを含むコンピューター・アーキテクチャー例を示す。
【発明を実施するための形態】
【００１２】
[0018]  本発明は、ネットワーキング・デバイスの仮想化のためにパケット処理をオフロードするための方法、システム、およびコンピューター・プログラム製品に及ぶ。例えば、本発明の実施形態は、包括的なネットワーク・パケットルールおよびフロー・モデルを提供し、仮想機械ホストにおけるネットワーク・パケット処理の一部を、ホストから物理ＮＩＣにオフロードすることを可能にする。具体的には、本発明の実施形態は、ペアレント・パーティション（即ち、ホスト・オペレーティング・システム）における１つ以上のフロー・テーブルの全部または一部を、物理ＮＩＣにオフロードすることを可能にする。こうすることによって、物理ＮＩＣは定められたルールにしたがってパケット処理を実行しつつ、仮想機械環境におけるネットワーク・パケット処理の処理能力(performance)を高めることができる。
【００１３】
[0019]  実施形態では、コンピューター・システムにおいて実行する仮想機械のためにネットワーク・パケットを処理する方法は、ホスト・パーティションが仮想機械のために１つ以上のルール・セット(rule sets)を維持するステップを含む。また、この方法は、物理ＮＩＣが仮想機械のために１つ以上のフロー・テーブルを維持するステップも含む。物理ＮＩＣは、仮想機械に関連するネットワーク・パケットを受信し、このネットワーク・パケットを仮想機械のために処理する。ネットワーク・パケットの処理は、物理ＮＩＣがネットワーク・パケットを１つ以上のフロー・テーブルと比較することを含む。ネットワーク・パケットが１つ以上のフロー・テーブルにおける１つのフローと一致するとき、物理ＮＩＣは、一致するフローに基づいて、ネットワーク・パケットに対してアクションを実行する。逆に、ネットワーク・パケットが１つ以上のフロー・テーブルにおけるフローと一致しない場合、物理ＮＩＣは、１つ以上のルール・セットに反する処理のために、このネットワーク・パケットをホスト・パーティションに渡す。
【００１４】
[0020]  他の実施形態では、コンピューター・システムにおいて実行する仮想機械のためにネットワーク・パケットを処理する方法は、仮想スイッチが仮想機械のために１つ以上のルール・セットを維持し、更に仮想機械のために１つ以上のフロー・テーブルを維持するステップも含む。仮想スイッチは、１つ以上のフロー・テーブルの内少なくとも一部を物理ＮＩＣにオフロードする。仮想スイッチは、仮想機械のためにネットワーク・パケットを処理する。ネットワーク・パケットの処理は、仮想スイッチがネットワーク・パケットを仮想機械または物理ＮＩＣの内一方から受信するステップと、仮想スイッチがネットワーク・パケットを１つ以上のルール・セットにおける１つのルールと照合するステップとを含む。ネットワーク・パケットをルールと照合することに基づいて、仮想スイッチは、１つ以上のフロー・テーブルにおいてフローを作成し、このフローを物理ＮＩＣにオフロードする。
【００１５】
[0021]  本発明の実施形態は、例えば、１つ以上のプロセッサーおよびシステム・メモリーというようなコンピューター・ハードウェアを含む、特殊目的コンピューターまたは汎用コンピューターを含むまたは利用することができる。コンピューター・ハードウェアについては以下で更に詳細に説明する。また、本発明の範囲内における実施形態は、コンピューター実行可能命令および／またはデーター構造を搬送または格納するための物理的コンピューター読み取り可能媒体または他のコンピューター読み取り可能媒体も含む。このようなコンピューター読み取り可能媒体は、汎用または特殊目的コンピューター・システムによってアクセスすることができるあらゆる入手可能な媒体とすることができる。コンピューター実行可能命令を格納するコンピューター読み取り可能媒体は、コンピューター記憶媒体（デバイス）である。コンピューター実行可能命令を搬送するコンピューター読み取り可能媒体は、伝送媒体である。つまり、一例としてそして限定ではなく、本発明の実施形態は、少なくとも２つの明確に異なる２種類のコンピューター読み取り可能媒体、即ち、コンピューター記憶媒体（デバイス）および伝送媒体を含むことができる。
【００１６】
[0022]  コンピューター記憶媒体（デバイス）は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、ソリッド・ステート・ドライブ（「ＳＳＤ」）（例えば、ＲＡＭに基づく）、フラッシュ・メモリー、相変化メモリー（「ＰＣＭ」）、他のタイプのメモリー、他の光ディスク・ストレージ、磁気ディスク・ストレージまたは他の時期記憶媒体、あるいはコンピューター実行可能命令またはデーター構造の形態で所望のプログラム・コード手段を格納するために使用することができ、更に汎用または特殊目的コンピューターによってアクセスすることができるあらゆる他の媒体を含む。
【００１７】
[0023]  「ネットワーク」とは、コンピューター・システムおよび／またはモジュールおよび／または他の電子デバイス間における電子データーの移送(transport)を可能にする１つ以上のデーター・リンクと定義される。情報がネットワークまたは他の通信接続（ハードウェア、ワイヤレス、あるいはハードウェアまたはワイヤレスの組み合わせ）を介してコンピューターに転送または供給されるとき、コンピューターはこの接続を適宜伝送媒体であると見なす。伝送媒体は、コンピューター実行可能命令またはデーター構造の形態で所望のプログラム・コード手段を搬送するために使用することができ、更に汎用コンピューター・システムまたは特殊目的コンピューター・システムによってアクセスすることができるネットワークおよび／またはデーター・リンクを含むことができる。以上の組み合わせも、コンピューター読み取り可能媒体の範囲内に含まれてしかるべきである。
【００１８】
[0024]  更に、種々のコンピューター・システム・コンポーネントに到達したとき、コンピューター実行可能命令またはデーター構造の形態であるプログラム・コード手段を自動的に伝送媒体からコンピューター記憶媒体（デバイス）に（またはその逆に）転送することができる。例えば、ネットワークまたはデーター・リンクを介して受信されたコンピューター実行可能命令またはデーター構造は、ネットワーク・インターフェース・モジュール（例えば、「ＮＩＣ」）内部にあるＲＡＭにバッファし、次いで最終的にコンピューター・システムＲＡＭおよび／またはコンピューター・システムにおいてもっと揮発性が低いコンピューター記憶媒体（デバイス）に転送することができる。つまり、コンピューター記憶媒体（デバイス）は、伝送媒体も利用するコンピューター・システム・コンポーネント（または伝送媒体を主に利用するコンピューター・システム・コンポーネントであっても）に含むことができることは、言うまでもない。
【００１９】
[0025]  コンピューター実行可能命令は、例えば、命令およびデーターを含み、プロセッサーにおいて実行されると、汎用コンピューター、特殊目的コンピューター、または特殊目的処理デバイスに、ある種の機能または一群の機能を実行させる。コンピューター実行可能命令は、例えば、バイナリー、アセンブリ言語のような中間フォーマット命令(intermediate format instructions)、またはソース・コードであってもよい。本主題は構造的特徴および／または方法論的アクト(act)に特定的な文言で説明したが、添付する特許請求の範囲において定められる主題は、必ずしも以上で説明した特徴やアクトには限定されないことは理解されてしかるべきである。逆に、説明した特徴およびアクトは、特許請求の範囲を実現する形態例として開示したまでである。
【００２０】
[0026]  尚、本発明は、多くのタイプのコンピューター・システム構成によって、ネットワーク計算環境においても実施できることは、当業者には認められよう。コンピューター・システム構成は、パーソナル・コンピューター、デスクトップ・コンピューター、ラップトップ・コンピューター、メッセージ・プロセッサー、ハンドヘルド・デバイス、マルチプロセッサー・システム、マイクロプロセッサー・ベースまたはプログラマブル消費者用電子機器、ネットワークＰＣ、ミニコンピューター、メインフレーム・コンピューター、移動体電話機、ＰＤＡ、タブレット、ページャー、ルーター、スイッチ等を含む。また、本発明は、分散型システム環境においても実施することができ、この場合、ネットワークを介してリンクされたローカル・コンピューターおよびリモート・コンピューター（ハードウェア・データー・リンク、ワイヤレス・データー・リンク、またはハードウェアおよびワイヤレス・データー・リンクの組み合わせのいずれかによって）双方がタスクを実行する。分散型システム環境では、プログラム・モジュールがローカルおよびリモート双方のメモリー記憶デバイスに配置されてもよい。実施形態では、本発明がＳＲＩＯＶ−準拠の物理ＮＩＣと関連付けて実施されてもよいが、本発明の範囲はＳＲＩＯＶを超えて広がる。
【００２１】
[0027]  本発明の実施形態は、１つ以上の仮想機械を実行するホスト（例えば、ルート・パーティション）と関連して動作する。ホストは、仮想機械によって送信および／または受信されるネットワーク・パケットのパケット処理（例えば、検査および恐らくは操作）を実行する仮想スイッチを含む。例えば、本発明の実施形態は、インターネット・プロトコル（ＩＰ）パケット、コンバージド・イーサネット（登録商標）上ＲＤＭＡ（ＲｏＣＥ）パケット、イーサネット（登録商標）上ファイバー・チャネル（ＦＣｏＥ）パケット等を処理することができる。加えて、本発明の実施形態は、パケット処理の少なくとも一部をホストから、イーサネット（登録商標）ＮＩＣ、InfiniBand  ＮＩＣ、または他のタイプの物理ファブリックというような、物理ＮＩＣにオフロードすることを可能にする、包括的ルールおよびフロー・モデルも提供する。したがって、本発明の実施形態は、包括的な態様でパケット処理を可能にし、異なるタイプのパケット処理毎に異なる仮想スイッチ・モジュールを開発する必要性を解消する。
【００２２】
[0028]  具体的には、実施形態は、１つ以上のフロー・テーブル（またはその一部）を物理ＮＩＣ（ＳＲＩＯＶ−準拠の物理ＮＩＣ等）にオフロードするステップを含む。したがって、物理ＮＩＣにおける仮想ブリッジが、ホストにおける仮想スイッチと同様に、パケット処理を実行することを可能にする。例えば、物理ＮＩＣにおいてパケットが受信された場合、仮想ブリッジはこのパケットを、オフロードされたフローと照合することができる。次いで、物理ＮＩＣにおける仮想ブリッジは、ホストを巻き込むことなく、このフローに適したアクションを実行することができる。こうすることによって、ホストにおいて全てのルール／フロー・パケット処理を実行することに伴う非効率を排除する。
【００２３】
[0029]  これより図１を参照すると、図１は、ネットワーキング・デバイスの仮想化のためにパケット処理を物理ＮＩＣにオフロードすることを容易にするコンピューター・アーキテクチャー例１００を示す。図示のように、コンピューター・アーキテクチャー１００は、ホスト１０２、仮想機械１０８、および物理ＮＩＣ１１０を含む。
【００２４】
[0030]  ホスト１０２は、仮想化環境を提供する。例えば、ホスト１０２は、ペアレント・パーティション（ホスト・オペレーティング・システムを実行する）と、１つ以上のチャイルド・パーティションとを含む。各チャイルド・パーティションは、仮想機械１０８のような、対応する仮想機械を実行する仮想化ハードウェア環境を提供すると見なすことができる。実施形態では、ホスト１０２が、仮想機械をテナントに供給するクラウド計算環境の一部に使用される場合もある。
【００２５】
[0031]  各仮想機械（仮想機械１０８を含む）は、オペレーティング・システム、アプリケーション・ソフトウェア等のような１つ以上の仮想化アプリケーションを実行する。図示のように、仮想機械１０８は、ネットワーク・スタック１０８ａ（例えば、ＴＣＰ／ＩＰスタック）、仮想ＮＩＣドライバー１０８ｂ、および仮想機能ドライバー１０８ｃを含む。ネットワーク・スタック１０８ａ、仮想ＮＩＣドライバー１０８ｂ、および仮想機能ドライバー１０８ｃを使用して、仮想機械１０８は、ホスト１０２を介して仮想バス１１６を通じて、および／または物理ＮＩＣ１１０を介してデーター・パス１１４を通じて、ネットワーク・パケットおよび他の情報を送信および／または受信することができる。
【００２６】
[0032]  物理ＮＩＣ１１０は、物理ハードウェアを構成する。この物理ハードウェアは、仮想化の対象となることができ、１つ以上の外部インターフェース（例えば、図示する外部インターフェース１２６）を使用して他のコンピューター・システムおよび／またはネットワークに接続される。１つの物理ＮＩＣだけが図示されるが、コンピューター・アーキテクチャーはいずれの数の物理ＮＩＣでも含むことができる。物理ＮＩＣ１１０は、仮想ブリッジ１１２を含む。仮想ブリッジ１１２は、仮想機能と物理ＮＩＣ１１０における物理機能とを橋架し(bridge)、パケット検査および操作を実行する。仮想ブリッジ１１２は、以下で更に詳しく説明するように、ホスト１０２における仮想スイッチ１０４と共に、ネットワーク・トラフィックを規制するように作用する。したがって、物理ＮＩＣ１１０は、１つ以上の仮想機能を、ホスト１０２においてホストされる１つ以上の仮想機械に露出することができる。加えて、物理ＮＩＣ１１０は１つ以上の物理機能をホスト１０２に露出することもできる。
【００２７】
[0033]  例えば、図１は、物理ＮＩＣ１１０が物理機能１２２をホスト１０２に提示することを示す。また、図１は、ホスト１０２が対応する物理機能ドライバー１２４を含むこと、そしてデーター・パス１１８が、物理ＮＩＣ１１０において物理機能１２２に接続し、ホスト１０２において物理機能ドライバー１２４に接続することも示す。したがって、物理機能１２２および物理機能ドライバー１２４は、物理ＮＩＣ１１０とホスト１０２との間におけるネットワーク・パケットの交換のために動作することができる。例えば、物理機能ドライバー１２４は、ホスト１０２における仮想スイッチ１０４と通信することができ、物理機能１２２は物理ＮＩＣ１１０における仮想ブリッジ１１２と通信することができる。
【００２８】
[0034]  また、図１は、物理ＮＩＣ１１０が仮想機能１２０を仮想機械１０８に提示することも示す。仮想機械１０８は、仮想機能ドライバー１０８ｃと対応する。データー・パス１１４は、物理ＮＩＣ１１０において仮想機能１２０に接続し、仮想機械１０８において仮想機能ドライバー１０８ｃに接続する。物理ＮＩＣ１１０は１つよりも多い仮想機能を仮想機械１０８に提示することができ、および／または追加の仮想機能を追加の仮想機械に提示することができる。一般に、各仮想機械は指定された仮想機能に直接アクセスすることができる。例えば、仮想機械はその仮想機能ドライバーを使用して、ホスト１０２からの介入なく、物理ＮＩＣ１１０において割り当てられた仮想機能によってネットワーク・パケットを伝達することができる。こうすることによって、プロセッサー使用およびネットワーク・レイテンシを低減することができる。例えば、仮想機械１０８および物理ＮＩＣ１１０は、仮想機能１２０および仮想機能ドライバー１０８ｃを使用して、データー・パス１１４を通じて直接通信することができる。
【００２９】
[0035]  既に示したように、物理ＮＩＣ１１０は、実施形態では、ＳＲＩＯＶ−準拠であるＰＣＩｅハードウェアを含んでもよい。このような実施形態では、仮想機能１２０または物理機能１２２の内１つ以上がＰＣＩｅ機能を含んでもよい。しかしながら、本明細書において説明する原理は、種々のハードウェア・デバイスに適用することができ、ＳＲＩＯＶ−準拠のデバイスにもＰＣＩｅデバイスにも限定されないことは認められよう。
【００３０】
[0036]  実施形態では、ホスト１０２においてホストされる１つ以上の仮想機械が、包括ルール／フロー・モデルにしたがって、複数のルール（着信および／または発信）および恐らくはフロー（着信および／または発信）と関連付けられてもよい。図示のように、ホスト１０２は仮想スイッチ１０４を含む。仮想スイッチ１０４は、包括ルール／フロー・モデルにしたがって、任意のホストされる仮想機械から送られるネットワーク・パケットおよび受信されるネットワーク・パケットを検査および操作するように構成される。例えば、定められたルールおよびフローに基づいて、仮想スイッチ１０４は、パケットを許可し、パケットを阻止し、パケットを導き直し(re-route)、ＮＡＴを実行し、または使用されるネットワーキング技術およびデバイスに合わせて、しかるべきパケット検査／操作であれば他のいずれでも実行することもできる。
【００３１】
[0037]  本明細書において使用する場合、ルールとは、１つ以上のルール条件および１つ以上のルール・アクション(rule action)に基づくパケット・フロー方針（またはその一部）を定める。実施形態では、ルールが特定の仮想機械に対して具体的である場合もある。ルールは、アドミニストレーターによって定められてもよく、または上位システムによって定められてもよい。実施形態では、ルールが静的である、または相対的に静的である場合もある。実施形態では、ルールがルール・セットに格納され、線形照合(linear matching)を行うように構成される場合もある。
【００３２】
[0038]  ルール条件は、フィールドおよび一致値(matching value)を含むタプル(tuple)を使用して定めることができる。タプルは、使用中のネットワーク・プロトコル（１つまたは複数）およびハードウェア・デバイス（１つまたは複数）に適したフィールドのあらゆる組み合わせを構成することができる。例えば、タプルは、ソースおよび／または宛先ネットワーク・アドレス（例えば、ＩＰが使用されている場合にはＩＰアドレス）、ソースおよび／または宛先ポート、プロトコル（例えば、送信制御プロトコル（ＴＣＰ）、ユーザ・データーグラム・プロトコル（ＵＤＰ）、ソースおよび／または宛先ハードウェア・アドレス（例えば、イーサネット（登録商標）ＭＡＣアドレス）、あるいはこれらの組み合わせを含むことができる。例えば、ルール条件の一例が、「１９２．１６８．０．＊、＊、＊、＊、ＴＣＰ」というような５タプルにしたがって定められてよく、これは、任意のソースＩＰアドレス、任意のソース・ポート、任意の宛先ＩＰアドレス、任意の宛先ポートを有し、ＴＣＰプロトコルを使用する１９２．１６８．０．＊ネットワーク上におけるあらゆるネットワーク・パケットと一致する。実施形態では、タプルがフローだけでなく、パケット条件にも関係するとよい場合もある。例えば、タプルがサービスのＩＰタイプ（ＴｏＳ）に関係するフィールドを含んでもよい。未だ開発されていないネットワーキング技術に関係するタプルを含む、他のタプルも可能であることは、当業者には認められよう。
【００３３】
[0039]  ルール・アクションは、あらゆる適したパケット・ルーティングおよび／または操作動作を含むことができる。例えば、ルール・アクションの例では、拒否、許可、ネットワーク・アドレス変換（ＮＡＴ）、マッピング、測定(meter)、分解、カプセル化等を含むことができる。未だ開発されていないネットワーキング技術に関係するアクションを含む、種々の他のルール・アクションが可能であることは、当業者には認められよう。
【００３４】
[0040]  ルールは、豊富な１組のパケット処理方針を定めるために使用することができる。例えば、ルール条件（タプル）およびルール・アクションを使用して、特定のＩＰアドレスからのＵＤＰパケットが許可されることを、ルールが指定してもよい。他の例では、指定されたポートを有する任意の宛先に送られるＴＣＰパケットがＮＡＴを受けることを、ルールが指定してもよい。以上の５タプルの例を「許可」アクションと組み合わせると、ルールの一例を「許可１９２．１６８．０．＊、＊、＊、＊、ＴＣＰ」と定めることができ、任意のソースＩＰアドレス、任意のソース・ポート、任意の宛先ＩＰアドレス、任意の宛先ポートを有し、ＴＣＰプロトコルを使用する１９２．１６８．０．＊ネットワーク上におけるあらゆるネットワーク・パケットが許可されることを意味する。
【００３５】
[0041]  本明細書において使用する場合、フローとは、ルールに基づいて作成される動的状態のことである。例えば、ネットワーク・パケットがルールと一致するとき、このルールに基づいてフローを作成することができる。したがって、ルールと同様、フローも、条件（タプル）およびアクションに関して定めることができる。フローは、ネットワーク条件についてのコンテキストを格納し、あるストリームまたはコンテキストにおける現在のパケットを、そのストリームまたはコンテキストにおける以前のパケットに基づいて、どのように扱うか判断するために使用することができる。フローは、時間切れ(timeout)が設定されてもよい。実施形態では、着信フロー・テーブルおよび／または発信フロー・テーブルというように、１つ以上のフロー・テーブルにフローが格納されてもよい。例えば、ネットワーク・パケットが前述の例の「許可１９２．１６８．０．＊、＊、＊、＊、ＴＣＰ」ルールと一致するとき、対応するフローを１つ以上の適したフロー・テーブル内に作成してもよい。実施形態では、フローのタプルに基づいて（例えば、１つ以上のハッシュを使用して）フローがインデックス化される場合もある。
【００３６】
[0042]  これらのラインに沿って、図１は仮想スイッチが仮想機械１０８に対して状態１０６を含むことを示す。状態１０６は、図示された発信ルール・セット１０６ａ、着信ルール・セット１０６ｂ、発信フロー・テーブル１０６ｃ、および着信フロー・テーブル１０６ｄというような、種々のタイプの状態を含むことができる。発信ルール・セット１０６ａは、仮想機械１０８によって送られるパケットに適用される１つ以上のルールを定め、着信ルール・セット１０６ｂは、仮想機械１０８の代わりに受信されたパケットに適用される１つ以上のルールを定める。パケットが対応するルール・セットにおけるルールと一致するとき、発信フロー・テーブル１０６ｃおよび／または着信フロー・テーブル１０６ｄにおいてフローを作成することができる。状況によっては、状態１０６が、図示された状態の部分集合を含むのでもよいことは認められよう。
【００３７】
[0043]  一例として、仮想スイッチ１０４が、しかるべきフロー・テーブル（１０６ｃ、１０６ｄ）におけるフローと一致しない仮想機械１０８（例えば、物理ＮＩＣ１１０からまたはホストされた仮想機械から）に関連するネットワーク・パケットを受信したとき、仮想スイッチ１０４はこの該当するルール・セット（即ち、仮想機械１０８の代わりに受信されたパケットに対しては着信ルール・セット１０６ｂ、また仮想機械１０８によって送られたパケットに対しては発信ルール・セット１０６ａ）を調べて、一致するルールを探すことができる。仮想スイッチ１０４が、一致するルールを発見した場合、仮想スイッチ１０４は、そのルールによって定められる通りに、パケットに対してしかるべきアクションを行う（例えば、許可／阻止／ＮＡＴ等）ことができる。
【００３８】
[0044]  仮想スイッチ１０４が、一致するルールを発見した場合、仮想スイッチ１０４は、当該ストリーム／コンテキストにおいて後続のパケットを処理するときに使用するために、発信フロー・テーブル１０６ｃおよび／または着信フロー・テーブル１０６ｄにおいてフロー（または１対のフロー）を作成することもできる。例えば、パケットが発信ルール・セット１０６ａにおけるあるルールと一致する場合、仮想スイッチ１０４は発信フロー・テーブル１０６ｃおよび／または着信フロー・テーブル１０６ｄにおいてフローを作成することもできる（発信ルール・セット１０６ａおよびフロー・テーブル１０６ｃ、１０６ｄを繋ぐ矢印によって図示される通り）。あるいは、パケットが着信ルール・セット１０６ｂにおけるあるルールと一致する場合、仮想スイッチ１０４は、発信フロー・テーブル１０６ｃおよび／または着信フロー・テーブル１０６ｄにおいてフローを作成することができる（着信ルール・セット１０６ｂとフロー・テーブル１０６ｃ、１０６ｄとの間の矢印によって図示される通り）。尚、逆方向のフロー・テーブルにおいてフローを作成することにより、仮想スイッチがステートフルなファイアウォールを実現できることは認められよう。
【００３９】
[0045]  また、仮想スイッチ１０４は、発信フロー・テーブル１０６ｃと発信フロー・キャッシュ１１２ａとの間にある破線の矢印、および着信フロー・テーブル１０６ｄと着信フロー・キャッシュ１１２ｂとの間にある破線の矢印によって図示されるように、フロー状態（１つまたは複数）を発信フロー・キャッシュ１１２ａおよび／または着信フロー・キャッシュ１１２ｂにもオフロードすることができる。例えば、仮想スイッチ１０４は、１つ以上の要求を、データー・パス１１８を通じて、フロー・キャッシュ１１２ａ、１１２ｂにおいてフローの作成を要求する物理ＮＩＣ１００に送ることができる。状況によっては、フロー状態を物理ＮＩＣ１１０にオフロードすると、仮想ブリッジ１１２が、仮想スイッチ１０４とは別に、パケット処理を実行することが可能になり、これによって、ホスト１０２におけるプロセッサー使用を低減することになる。例えば、物理ＮＩＣ１１０にフローがオフロードされたことに続いて、物理ＮＩＣ１１０は、同じストリームの後続パケットを受信することができる（例えば、データー・パス１１４を通じて仮想機械１０８から、または外部インターフェース１２６を介して他のコンピューター・システムから）。この状況では、最初にパケットを仮想スイッチ１０４に送ることなく、仮想ブリッジ１１２は後続のパケットを、しかるべきフロー・キャッシュ１１２ａ、１１２ｂにおけるフロー状態と照合することができ、このフロー自体に定められたアクションを実行することができる。
【００４０】
[0046]  以上の構成を使用すると、仮想機械１０８は仮想機能ドライバー１０８ｃを使用して発信ネットワーク・パケットを物理ＮＩＣ１１０の仮想機能１２０に、データー・パス１１４を通じて送ることができる。このネットワーク・パケットを受信すると、仮想ブリッジ１１２は、発信フロー・キャッシュ１１２ａを検索して、一致するフローを求める。仮想ブリッジ１１２が発信フロー・キャッシュ１１２ａにおいて、一致するフローを発見した場合、仮想ブリッジ１１２はこのフローにおいて定められたアクションを実行する。例えば、仮想ブリッジ１１２は、パケット操作動作を実行するのでもよく、および／またはネットワーク・パケットを宛先の仮想機械にまたは他のコンピューター・システムに外部インターフェース１２６を介して転送するのでよい。
【００４１】
[0047]  一方、仮想ブリッジ１１２が発信フロー・キャッシュ１１２ａにおいて一致するフローを発見できない場合、２つの代替アクションを行うことができる。第１の実施形態では、仮想ブリッジ１１２は、仮想機械１０８へのネットワーク・パケットを拒否する（例えば、データー・パス１１４を通じた）。次いで、仮想機械１０８はネットワーク・パケットを仮想スイッチ１０４に、仮想バス１１６を通じて転送する。第２の実施形態では、仮想ブリッジ１１２は物理機能１２２を使用して、ネットワーク・パケットを物理機能ドライバー１２４に、データー・パス１１８を通じて送る。一方、物理機能ドライバー１２４は、このネットワーク・パケットを仮想スイッチ１０４に導く。いずれの実施形態でも、仮想スイッチ１０４がネットワーク・パケットを受信した後、仮想スイッチ１０４は、ネットワーク・パケットを発信フロー・テーブル１０６ｃにおけるフローと照合しようとする。ネットワーク・パケットが発信フロー・テーブル１０６ｃにおけるフローと一致しない場合、仮想スイッチ１０４はネットワーク・パケットを発信ルール・セット１０６ａにおけるルールと照合しようとする。発信ルール・セット１０６ａにおいて一致するルールが発見された場合、仮想スイッチ１０４は、その一致するルールによって定められる通りに、しかるべきアクション（例えば、許可／阻止／ＮＡＴ等）を実行し、フロー・テーブル１０６ｃ／１０６ｄの一方または双方において、そして潜在的にフロー・キャッシュ１１２ａ／１１２ｂの一方または双方において、１つ以上のフローを作成することができる。
【００４２】
[0048]  また、以上の構成を使用すると、物理ＮＩＣ１１０は、仮想機械１０８の代わりに着信ネットワーク・パケットを受信することができる（例えば、他の仮想機械から対応する仮想機能を通じて、または他のコンピューター・システムから外部インターフェース１２６を介して）。ネットワーク・パケットの受信時に、仮想ブリッジ１１２は着信フロー・キャッシュ１１２ｂを検索して、一致するフローを求める。仮想ブリッジ１１２が着信フロー・キャッシュ１１２ｂにおいて一致するフローを発見した場合、仮想ブリッジ１１２は、このフローにおいて定められたしかるべきアクション（例えば、許可／阻止／ＮＡＴ等）を実行する。例えば、仮想ブリッジ１１２は、仮想機能１２０およびデーター・パス１１４を使用して、パケットを仮想機械１０８における仮想機能ドライバー１０８ｃに転送することができる。仮想ブリッジ１１２が着信フロー・キャッシュ１１２ｂにおいて一致するフローを発見できない場合、仮想ブリッジ１１２は、物理機能１２２およびデーター・パス１１８または仮想機能１２０およびデーター・パス１１４を使用して、パケットをホスト１０２における仮想スイッチ１０４に転送する。次いで、仮想スイッチ１０４は、発信ネットワーク・パケットのコンテキストにおいて先に説明したように、パケットを処理する。
【００４３】
[0049]  尚、発信フロー・キャッシュ１１２ａおよび着信フロー・キャッシュ１１２ａが、フロー・テーブル全体（即ち、発信フロー・テーブル１０６ｃおよび着信フロー・テーブル１０６ｄ）の一部または部分集合のみを表すのでもよいことは認められよう。例えば、物理ＮＩＣ１１０が、コストまたは他の設計制約のために、メモリーが制限されている場合もあり得る。したがって、フロー・テーブル１０６ｃ／１０６ｄの一部のみをフロー・キャッシュ１１２ａ／１１２ｂに格納することによって、フロー・テーブルを物理ＮＩＣ１１０にオフロードするために必要とされるメモリー量を減らすことになる。発信フロー・キャッシュ１１２ａおよび着信フロー・キャッシュ１１２ａはフロー状態データー全体を含まないかもしれないので、仮想ブリッジ１１２においてパケットを処理するときにキャッシュ・ミスが発生する可能性がある。キャッシュ・ミスが発生した場合、仮想ブリッジ１１２は、追加処理のために、パケットを仮想ブリッジ１０４に転送する。尚、異なる種類のキャッシュ置換／鮮度方針（cache replacement/freshness policies)が採用されてもよいことは認められよう。例えば、キャッシュ・ミスが発生した後に、フロー状態を物理ＮＩＣ１１０上に置くことができ、既定量の不活動の後、エントリーを物理ＮＩＣ１１０から消滅させることができる等である。
【００４４】
[0050]  加えて、実施形態では、一定のタイプのフローだけが物理ＮＩＣ１１０に格納される場合もある。例えば、仮想ブリッジ１１２が、限定されたタイプの動作／アクションだけを実行するのをサポートする場合もあり得る。したがって、仮想ブリッジ１１２によってサポートされる動作／アクションに関係するフローだけが、物理ＮＩＣ１１０に格納されればよい。これらの実施形態では、仮想スイッチ１０４において、あらゆる追加の動作／アクションも扱われる。
【００４５】
[0051]  図２は、コンピューター・システムにおいて実行する仮想機械のためにネットワーク・パケットを処理する方法例２００のフロー・チャートを示す。方法２００は、コンピューター・アーキテクチャー１００のコンポーネントおよびデーターに関して説明する。
【００４６】
[0052]  方法２００は、仮想機械のために１つ以上のルール・セットを維持するホスト・パーティションにおいて仮想スイッチのアクトを含む（アクト２０２）。例えば、ホスト１０２における仮想スイッチ１０４は、仮想機械１０８のために状態１０６を維持することができる。状態１０６は、仮想機械１０８のための発信ルール・セット１０６ａまたは仮想機械１０８のための着信ルール・セット１０６ｂの一方または双方を含むことができる。また、状態１０６は、発信フロー・テーブル１０６ｃおよび着信フロー・テーブル１０６ｄのような、仮想機械１０８のための１つ以上のフロー・テーブルも含むことができる。図示しないが、仮想スイッチ１０４は、他の追加の仮想機械のために状態を格納することもできる（例えば、ルール・セット、フロー・テーブル等）。
【００４７】
[0053]  また、方法２００は、物理ＮＩＣが仮想機械のために１つ以上のフロー・テーブルを維持するアクトも含む（アクト２０４）。例えば、物理ＮＩＣ１１０は、仮想機械２０８のために発信フロー・キャッシュ１１２ａおよび／または着信フロー・キャッシュ１１２ｂを格納することができる。フロー・キャッシュは、ホスト１０２におけるいずれのフロー・テーブルでも、全部または一部のみを含むことができる。図示しないが、物理ＮＩＣ１１０は他の追加の仮想機械のためにフロー・テーブルを格納することもできる。
【００４８】
[0054]  また、方法２００は、物理ＮＩＣが仮想機械に関連するネットワーク・パケットを受信するアクトも含む（アクト２０６）。例えば、物理ＮＩＣは、ネットワーク・パケットを他のコンピューター・システムから外部インターフェース１２６を介して受信することができ、ネットワーク・パケットを仮想機械１０８から仮想機能１２０を介して受信することができ、またはネットワーク・パケットをホスト２２０における他の仮想機械から、その仮想機械と関連付けられた他の仮想機能を介して受信することができる。
【００４９】
[0055]  また、方法２００は、仮想機械のためにネットワーク・パケットを処理するアクトも含む（アクト２０８）。例えば、仮想ブリッジ１１２は、仮想機械１０８から受信したネットワーク・パケット、または仮想機械１０８の代わりに受信されたネットワーク・パケット（即ち、仮想機械１０８によって受信されたネットワーク・パケット）を処理することができる。
【００５０】
[0056]  アクト２０８は、物理ＮＩＣがネットワーク・パケットを１つ以上のフロー・テーブルと比較するアクトを含む（アクト２１０）。例えば、仮想ブリッジ１１２は、パケットが仮想機械１０８から送られている場合、このネットワーク・パケットを発信フロー・キャッシュ１１２ａと比較することができ、または仮想ブリッジ１１２は、パケットが仮想機械１０８の代わりに受信されている場合、ネットワーク・パケットを着信フロー・キャッシュ１１２ｂと比較することができる。
【００５１】
[0057]  また、アクト２０８は、ネットワーク・パケットが１つ以上のフロー・テーブルにおけるフローと一致するとき、物理ＮＩＣが、一致するフローに基づいて、ネットワーク・パケットに対してアクションを実行するアクトも含む（アクト２１２）。例えば、ネットワーク・パケットが発信フロー・キャッシュ１１２ａまたは着信フロー・キャッシュ１１２ｂにおけるフローと一致する場合、仮想ブリッジ１１２は、そのフローにおいて指定されたアクションを実行することができる（例えば、許可、拒否、ＮＡＴ等）。
【００５２】
[0058]  また、アクト２０８は、ネットワーク・パケットが１つ以上のフロー・テーブルにおけるフローと一致しない場合、物理ＮＩＣが、１つ以上のルール・セットに対する処理のために、ネットワーク・パケットをホストに渡すアクトも含む（アクト２１４）。例えば、ネットワーク・パケットが発信フロー・キャッシュ１１２ａまたは着信フロー・キャッシュ１１２ｂにおけるフローと一致しない場合、仮想ブリッジ１１２は、追加の処理のために、パケットをホスト１０２における仮想スイッチ１０４に送ることができる。実施形態では、仮想ブリッジ１１２がネットワーク・パケットを直接ホスト１０２に、物理機能１２２およびデーター・パス１１８を使用して送る場合もある。他の実施形態では、仮想ブリッジ１１２が、仮想機能１２０およびデーター・パス１１４を使用して、ネットワーク・パケットを間接的にホスト１０２に送る場合もある（即ち、仮想機械１０８を介して、そして仮想バス１１６を通じて）。
【００５３】
[0059]  受信すると、ホスト１０２はネットワーク・パケットを仮想スイッチ１０４に渡すことができる。一方、仮想スイッチ１０４は、ネットワーク・パケットを状態１０６（即ち、フロー・テーブル、ルール・セット）と比較し、いずれかのしかるべきアクションを実行することができる。例えば、ネットワーク・パケットがホスト１０２においてフローと一致する場合、仮想スイッチ１０４はしかるべきアクション（例えば、許可、拒否、ＮＡＴ等）を実行し、潜在的に物理ＮＩＣ１１０においてフロー・キャッシュを更新することができる。ネットワーク・パケットがホスト１０２においてフローと一致しない場合（または、該当するフローが存在しない場合）、仮想スイッチ１０４はネットワーク・パケットを該当するルール・セットと比較し、いずれかの一致するルールにおいて指定された通りにしかるべきアクションを実行し、潜在的に１つ以上の新たなフローを作成することができる（例えば、状態２０６および物理ＮＩＣ１１０において）。
【００５４】
[0060]  図３は、コンピューター・システムにおいて実行する仮想機械のためにネットワーク・パケットを処理する追加の方法例３００のフロー・チャートを示す。方法３００では、コンピューター・アーキテクチャー１００のコンポーネントおよびデーターに関して説明する。
【００５５】
[0061]  方法３００は、ホスト・パーティションにおける仮想スイッチが仮想機械のために１つ以上のルール・セットを維持するアクトを含む（アクト３０２）。例えば、ホスト１０２における仮想スイッチ１０４が、仮想機械１０８のために状態１０６を維持することができる。状態１０６は、仮想機械１０８のための発信ルール・セット１０６ａまたは仮想機械１０８のための着信ルール・セット１０６ｂの一方または双方を含むことができる。
【００５６】
[0062]  また、方法３００は、仮想スイッチが仮想機械のために１つ以上のフロー・テーブル(table tables)を維持するアクトのアクト(an act of an act)も含む。例えば、状態１０６は、仮想機械１０８のための発信フロー・テーブル１０６ｃまたは仮想機械１０８のための着信フロー・テーブル１０６ｄの一方または双方を含むことができる。
【００５７】
[0063]  また、方法３００は、仮想スイッチが１つ以上のフロー・テーブルの少なくとも一部を物理ＮＩＣにオフロードするアクトも含む（アクト３０６）。例えば、仮想スイッチ１０４は、１つ以上のフローを発信フロー・テーブル１０６ｃから発信フロー・キャッシュ１１２ａにオフロードすることができる。加えてまたは代わりに、仮想スイッチ１０４は、１つ以上のフローを着信フロー・テーブル１０６ｄから着信フロー・キャッシュ１１２ｂにオフロードすることができる。
【００５８】
[0064]  また、方法３００は、仮想スイッチが仮想機械のためにネットワーク・パケットを処理するアクトも含む（アクト３０８）。例えば、仮想スイッチ１０４は、仮想機械１０８から受信したネットワーク・パケットを処理すること、または仮想機械１０８の代わりにネットワーク・パケットを処理することができる。
【００５９】
[0065]  アクト３０８は、仮想スイッチがネットワーク・パケットを仮想機械または物理ＮＩＣの一方から受信するアクトを含む（アクト３１０）。例えば、仮想スイッチ１０４は、ネットワーク・パケットを、仮想機械１０８から仮想バス２１６を通じて受信することができ、または物理ＮＩＣ１１０からデーター・パス１１８（および物理機能ドライバー１２４）を通じて受信することができる。
【００６０】
[0066]  また、アクト３０８は、仮想スイッチがネットワーク・パケットを１つ以上のルール・セットにおけるルールと照合するアクトも含む（アクト３１２）。例えば、ネットワーク・パケットが仮想機械１０８によって送られている場合、仮想スイッチ１０４は、このパケットを発信ルール・セット１０６ａと照合することができる。あるいは、ネットワーク・パケットが仮想機械１０８の代わりに受信されている場合、仮想スイッチ１０４はこのパケットを着信ルール・セット１０６ｂと照合することができる。
【００６１】
[0067]  また、アクト３０８は、ネットワーク・パケットのルールとの照合に基づいて、仮想スイッチが１つ以上のフロー・テーブルにおいてフローを作成するアクトも含む（アクト３１４）。例えば、ネットワーク・パケットを発信ルール・セット１０６ａまたは着信ルール・セット１０６ｂの一方におけるルールと照合した後に、仮想スイッチは、発信フロー・テーブル１０６ｃおよび／または着信フロー・テーブル１０６ｄにおけるルールに基づいて、１つ以上のフローを作成することができる。
【００６２】
[0068]  また、アクト３０８は、ネットワーク・パケットのルールとの照合に基づいて、仮想スイッチがフローを物理ＮＩＣにオフロードするアクトも含む（アクト３１６）。例えば、一致するルールに基づいて、仮想スイッチ１０４は、フローを発信フロー・キャッシュ１１２ａおよび／または着信フロー・キャッシュ１１２ｂにオフロードすることができる。
【００６３】
[0069]  図４は、ネットワーキング・デバイスの仮想化のためにパケット処理を物理ＮＩＣにオフロードすることを容易にし、更に１つ以上の潜在的に可能な最適化をコンピューター・アーキテクチャー１００に対して提供する代替コンピューター・アーキテクチャー４００を示す。実施形態では、コンピューター・アーキテクチャー４００がコンピューター・アーキテクチャー１００と組み合わされてもよい場合もある。図示のように、コンピューター・アーキテクチャー４００は、ホスト４０２、仮想機械４０８、および物理ＮＩＣ４１０のような、コンピューター・アーキテクチャー１００のコンポーネントに類似したコンポーネントを含む。しかしながら、コンピューター・アーキテクチャー４００では、仮想機械４０８における仮想ＮＩＣドライバー４０８ｂが発信フロー・リスト４０８ｄを含む。つまり、仮想ＮＩＣドライバー４０８ｂは、発信フローの一部または全部についての情報を維持する。したがって、仮想機能ドライバー４０８ｃによってネットワーク・パケットを仮想機能４２０に送る前であっても、仮想ＮＩＣドライバー４０８ｂは、発信フロー・リスト４０８ｄに基づいて、ネットワーク・パケットが発信フローと一致するか否か判断することができる。一致(match)が発見された場合、ネットワーク・パケットが発信フロー・キャッシュ４１２ａにおけるフローとも一致することもあり得る（フローが物理ＮＩＣ４１０にオフロードされた場合）。発信フロー・リスト４０８ｄに基づいて、パケットがフローと一致しない場合、仮想ＮＩＣドライバー４０８ｂは、最初にパケットを物理ＮＩＣ４１０に送ることなく、直接パケットを仮想スイッチ４０４に転送することができる。
【００６４】
[0070]  状況によっては、仮想機械４０８が信頼されないエンティティである場合もあり得る。このため、パケットを最終的に宛先まで送ることができるか否かは、物理ＮＩＣ４１０における仮想ブリッジ４１２および／または仮想スイッチ４０４によって相変わらず(still)判断される。例えば、フローが発信フロー・リスト４０８ｄに存在し、仮想機械４０８がネットワーク・パケットを物理ＮＩＣ４１０に送る場合であっても、仮想ブリッジ４１２が依然としてパケットを発信フロー・キャッシュ４１２ａに対して検証する。
【００６５】
[0071]  実施形態では、発信フロー・リスト４０８ｄに発信フローの一部のみを格納することが望ましい場合もある。例えば、発信フローにおけるある情報が機密であるかもしれず（例えば、ＮＡＴに使用されるＩＰアドレス）、そして、注記したように、仮想機械４０８が信頼されないエンティティであるかもしれない。したがって、発信フロー・リスト４０８ｄは、アクション情報がないフローのリストを収容すればよい（即ち、パケットをフローと照合するために使用される条件付き情報(conditional information)）。発信フロー・リスト４０８ｄは、したがって、パケットを物理ＮＩＣ４１０に送るのかまたはホスト４０２に送るのかについて、仮想ＮＩＣドライバー４０８ｂが判断することを可能にするのに十分な情報だけを提供すればよい。
【００６６】
[0072]  図５は、マルチレイヤー仮想スイッチの一例のレイヤーを含むコンピューター・アーキテクチャー例５００を示す。例えば、仮想スイッチ１０４は、仮想機械毎に、ルールおよびフローのレイヤーを含むことができる。図示する各レイヤーは、独立した１組のルール・セットおよびフロー・テーブルを含む。図示するように、例えば、これらのレイヤーはレイヤー５０２およびレイヤー５０４を含むことができる。ネットワーク・パケットは、当該ネットワーク・パケットが送られているのかまたは受信されているのかに基づいて、２つの方向の一方に、レイヤーを横断する。ネットワーク・パケットが仮想機械の代わりに受信されているとき、例えば、このパケットは最下位のレイヤーから上にこれらのレイヤーを横断することができる（即ち、矢印５０６によって図示するように、レイヤー５０４からレイヤー５０２に）。逆に、ネットワーク・パケットが仮想機械から送られているとき、このパケットは最上位のパケットから下にこれらのパケットを横断することができる（即ち、矢印５０８によって図示するように、レイヤー５０２からレイヤー５０４に）。
【００６７】
[0073]  実施形態では、各レイヤーがそれ自体のフロー／ルール・セットによって、ネットワーク・パケットを照合し、このパケットを次のレイヤーに転送する前に、いずれかのしかるべきアクションを実行する場合もある。例えば、パケットがレイヤー５０４において分解(decapsulate)され、次いでレイヤー５０２においてＮＡＴ動作を受けるのでもよい。実施形態では、「阻止」アクションが実行される場合、パケットがレイヤーを横断するのを中止し、破棄される。仮想スイッチ１０４がフロー・テーブルのレイヤーを含むのでもよいが、これらのフローは、物理ＮＩＣ１１０にオフロードされるときは、平面に(in a flat manner)格納されるのが通例である。
【００６８】
[0074]  以上のように、本発明は、フローを物理ＮＩＣにオフロードすることを可能にする包括的なルールおよびフロー・モデルを提供する。フローをオフロードすることによって、一部のパケット処理を物理ＮＩＣにおいて実行することが可能になり、処理のために一部のパケットをホストの仮想スイッチに送る必要性を解消する。したがって、本発明は、仮想機械のためのネットワーク・パケットの処理に伴うＣＰＵ使用およびレイテンシを低減することができる。
【００６９】
[0075]  本発明は、その主旨や本質的な特性から逸脱することなく、他の具体的な形態においても具体化することもできる。説明した実施形態は、あらゆる観点においても、限定ではなく例示であると解釈されるものとする。したがって、本発明の範囲は、以上の説明によってではなく、添付する特許請求の範囲によって示される。特許請求の範囲の均等の意味および範囲に該当するあらゆる変更は、その範囲内に包含されるものとする。
【図１】
2015515798.tif 000003
【図２】
2015515798.tif 000004
【図３】
2015515798.tif 000005
【図４】
2015515798.tif 000006
【図５】
2015515798.tif 000007
【国際調査報告】
2015515798.tif 000008
2015515798.tif 000009
2015515798.tif 000010