JP6855906B2 - スイッチプログラム、スイッチング方法及び情報処理装置 - Google Patents

スイッチプログラム、スイッチング方法及び情報処理装置 Download PDF

Info

Publication number
JP6855906B2
JP6855906B2 JP2017086367A JP2017086367A JP6855906B2 JP 6855906 B2 JP6855906 B2 JP 6855906B2 JP 2017086367 A JP2017086367 A JP 2017086367A JP 2017086367 A JP2017086367 A JP 2017086367A JP 6855906 B2 JP6855906 B2 JP 6855906B2
Authority
JP
Japan
Prior art keywords
thread
flow
port
node
receive buffer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017086367A
Other languages
English (en)
Other versions
JP2018185624A (ja
Inventor
和樹 兵頭
和樹 兵頭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2017086367A priority Critical patent/JP6855906B2/ja
Priority to US15/957,166 priority patent/US10558485B2/en
Publication of JP2018185624A publication Critical patent/JP2018185624A/ja
Application granted granted Critical
Publication of JP6855906B2 publication Critical patent/JP6855906B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Computer And Data Communications (AREA)

Description

本発明は、スイッチプログラム、スイッチング方法及び情報処理装置に関する。
近年、複数のCPU(Central Processing Unit)を搭載するサーバにおいて、スケールアップを行いやすいNUMA(Non-Uniform Memory Access)アーキテクチャが採用される場合が増えている。
図14は、NUMAアーキテクチャのサーバを示す図である。図14に示すように、NUMAアーキテクチャのサーバは、複数のNUMAノードを有する。なお、図14では説明の便宜上、NUMAノード#1及びNUMAノード#2で表される2台のNUMAノードのみを示したが、NUMAアーキテクチャのサーバは、3台以上のNUMAノードを有してよい。
NUMAアーキテクチャのサーバは、CPU毎に独立にメモリを有する。すなわち、NUMAノード#1は、CPU#1とメモリ#1を有し、NUMAノード#2は、CPU#2とメモリ#2を有する。CPUは、メモリコントローラと、IPL(Inter Processor Link)コントローラと、I/Oコントローラを有する。
メモリコントローラは、メモリと接続し、メモリへのアクセスを制御する。IPLコントローラは、プロセッサ間の通信を制御する。I/Oコントローラは、接続するI/O装置を制御する。NUMAノード#1のI/OコントローラにはNIC(Network Interface Card)が接続される。
NUMAアーキテクチャのサーバでは、基本ソフト(OS:Operating System)がアプリケーションの動作するCPUと同じNUMAノードのメモリを当該アプリケーションに割当てることで、CPU間のメモリアクセス競合を低減することができる。したがって、NUMAアーキテクチャのサーバでは、複数CPUが共通のメモリコントローラ経由でメモリに接続されるUMA(Uniform Memory Access)アーキテクチャのサーバよりスケールアップが行いやすい。
しかしながら、NUMAアーキテクチャのサーバでは、仮想スイッチを利用する仮想化環境において性能低下が発生する。図15は、仮想スイッチを利用する仮想化環境における性能低下を説明するための図である。図15において、VM#1はNUMAノード#1で動作する仮想マシン(VM:Virtual Machine)であり、VM#2はNUMAノード#2で動作する仮想マシンである。VM#1及びVM#2は、仮想スイッチを介してネットワークからパケットを受信する。VM#1及びVM#2は、vNIC(仮想NIC)受信バッファを用いてパケットを受信する。VM#1のvNIC受信バッファはメモリ#1に設けられ、VM#2のvNIC受信バッファは、メモリ#2に設けられる。
仮想スイッチの機能は、複数のスレッドがCPUにより実行されることによって実現される。複数のスレッドは、CPU#1又はCPU#2で実行される。仮想スイッチは、VM用の2つのvポート(仮想ポート)と、NICの物理ポートに対応付けられる論理ポートを有する。
NICのpNIC#1で表される物理ポートがネットワークからパケットを受信する(1)と、受信パケットは、pNIC#1の受信バッファにDMA(Direct Memory Access)で書き込まれる(2)。pNIC#1の受信バッファは、一般的にはNICが接続されるNUMAノード#1のメモリ#1に設けられる。そして、仮想スイッチのスレッドが、pNIC#1の受信バッファからパケットを読み出し(3)、パケットがVM#2宛である場合には、VM#2のvNIC受信バッファにパケットを書き込む(4)。
ここで、仮想スイッチのスレッドはCPU#1で動作するため、VM#2のvNIC受信バッファへの書き込みは、リモートメモリへの書き込みとなる。したがって、VM#1のvNIC受信バッファへの書き込みと比べて、VM#2のvNIC受信バッファへの書き込みでは、性能が大幅に低下する。
そこで、NICの物理ポートにNUMAノード毎の物理受信キューを配置し、NICの物理ポートにNUMAノード毎に仮想ポートを対応させ、仮想ポート毎に受信キューを配置し、物理受信キューのDMA先を対応NUMAノードの受信バッファにする技術がある。この技術によれば、異なるNUMAノードに存在するNIC−VM間の通信性能の低下を防ぐことができる。
なお、ロードバランサが特定のNUMAノードを使用するVMを同じNUMAノードのネットワークキューに割り当て、スケジューラがVMをNIC又はネットワークキューと同じNUMAノードに割り当てる技術がある。
また、ネットワークアダプタが、パケットフロー識別子を有する受信パケットを、転送パケットを記憶する複数の送信/受信キューのうちパケットフロー識別子に対応付けられた送信/受信キューにルーティングする技術がある。
米国特許第9495192号明細書 米国特許第9069722号明細書
NUMAノード毎の物理受信キューのDMA先を対応NUMAノードの受信バッファにするためには、NICにおいて受信パケットの宛先に対応するDMA先のNUMAノードの特定情報を登録する必要があるが、NICへの事前登録が行えない場合があるという問題がある。具体的には、NFV(Network Function Virtualization)環境ではVMが内部で動的に生成した仮想MAC(Media Access Control)アドレスで通信を行う場合があり、DMA先のNUMAノードの特定情報を事前登録することができない。
本発明は、1つの側面では、NICが受信したパケットを宛先VMが動作するNUMAノードにDMA転送するように、NICの物理受信キューを動的に切り替えるスイッチプログラム、スイッチング方法及び情報処理装置を提供することを目的とする。
1つの態様では、スイッチプログラムは、第1受信バッファと通信装置を有する第1ノードで第1スレッドが実行される第1処理装置と、第2受信バッファを有する第2ノードで第2スレッドが実行される第2処理装置に、以下の処理を実行させる。第1スレッドは、第2処理装置で実行される仮想マシンの仮想ポート宛のフローについて、通信装置の出力先を第2受信バッファに設定し、出力先の第2受信バッファへの設定を切替通知により第2スレッドに通知し、第1受信バッファに格納されたパケットを第2スレッドに転送する。第2スレッドは、切替通知を受信すると、当該フローについて、第2受信バッファの受信処理を一時停止し、第1スレッドから転送されたパケットを仮想ポートに転送し、該転送が終わった後に第2受信バッファの受信処理を再開する。
1つの側面では、本発明は、NICが受信したパケットを宛先VMが動作するNUMAノードにDMA転送するようにNICの物理受信キューを動的に切り替えることができる。
図1Aは、実施例に係る情報処理装置の動作例を説明するための第1の図である。 図1Bは、実施例に係る情報処理装置の動作例を説明するための第2の図である。 図2Aは、従来の仮想スイッチの動作を説明するための図である。 図2Bは、後続パケットの追い越しを説明するための図である。 図3は、仮想スイッチの機能構成を示す図である。 図4は、フローテーブルの例を示す図である。 図5は、フローキャッシュ登録の例を示す図である。 図6Aは、スレッド制御パケットの例を示す第1の図である。 図6Bは、スレッド制御パケットの例を示す第2の図である。 図7は、移行管理テーブルの例を示す図である。 図8は、スレッドによる受信処理の手順を示すフローチャートである。 図9は、フローテーブルルックアップ処理の手順を示すフローチャートである。 図10は、スレッド制御パケット処理の手順を示すフローチャートである。 図11は、切替通知処理の手順を示すフローチャートである。 図12は、切替完了通知処理の手順を示すフローチャートである。 図13は、データ転送処理の手順を示すフローチャートである。 図14は、NUMAアーキテクチャのサーバを示す図である。 図15は、仮想スイッチを利用する仮想化環境における性能低下を説明するための図である。
以下に、本願の開示するスイッチプログラム、スイッチング方法及び情報処理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
まず、実施例に係る情報処理装置の動作について説明する。実施例に係る情報処理装置は、以下の動作を行う。
(1)実施例に係る情報処理装置は、NICの物理ポートに対応する仮想スイッチポート毎に、NUMAノード毎の最低1つ以上の受信キューを有する。そして、実施例に係る情報処理装置は、NICの物理ポートにおいて受信キューに対応するHwQ(ハードウェアキュー)のDMA先を受信キューに対応するNUMAノードのメモリに設定する。
(2)そして、実施例に係る情報処理装置は、各NUMAノードに最低1つ以上のスレッドを割り当て、同一NUMAノードの受信キューの受信処理を担当させる。
(3)そして、NUMAノード#1に割当てられたスレッド#1は他NUMAノードに割り当てられたスレッドとの間に通信経路を確立する。
(4)そして、スレッド#1は、フローキャッシュにフロー及びアクションを登録する際に、当該フローの出力ポートの所属するNUMAノードに基づきNICのフィルタへの登録が必要かを判断する。そして、スレッド#1は、登録が必要と判断した場合には以下の手順を実行する。
(4−1)スレッド#1は、NICのフィルタに当該フロー情報及び当該フローの出力先HwQ情報を登録する。
(4−2)スレッド#1は、当該フローを受信したポートにおいて受信キュー及びHwQの切替を行った旨をスレッド間通信経路経由で切替先NUMAノード#2のスレッド#2に通知する。
(4−3)スレッド#1は、当該フローのアクションの出力先をスレッド#2に変更してフローキャッシュに登録する。
(4−4)スレッド#1は、その後当該ポートで一定数のパケットを受信するか、もしくは、受信パケットがない状態になるとスレッド#2に切替完了通知を行う。
(5)スレッド#2は、キュー切替の通知を受信すると当該ポートの受信処理を一時停止し、スレッド#1からのデータの処理を優先的に実施する。
(6)スレッド#2は、スレッド#1から切替完了通知を受信すると当該ポートの受信処理を再開する。
以上の動作の具体例を図1A及び図1Bを用いて説明する。図1A及び図1Bは、実施例に係る情報処理装置の動作例を説明するための図である。なお、図1A及び図1Bにおいて、太い破線の矢印は制御の流れを示し、太い実線の矢印は、Flow_Aで表されるフローの流れを示す。
実施例に係る情報処理装置10は、NUMAアーキテクチャのサーバであり、図1Aに示すように、NUMAノード#1及びNUMAノード#2で表されるNUMAノード1を有する。NUMAノード1は、メモリとCPUを有する。なお、図1A及び図1Bでは説明の便宜上、2台のNUMAノード1のみを示したが、情報処理装置10は、3台以上のNUMAノード1を有してよい。
NUMAノード#1は、NIC3を有する。NIC3は、pNIC#1で表される物理ポート31を有する。pNIC#1は、HwQ#1及びHwQ#2で表される2つのハードウェア受信キュー31aとフィルタ31bとを有する。ハードウェア受信キュー31aは、pNIC#1が受信したパケットを格納するキューである。HwQ#1は、NUMAノード#1用のハードウェア受信キュー31aであり、DMA先はHwQ#1用の受信バッファ4である。HwQ#2は、NUMAノード#2用のハードウェア受信キュー31aであり、DMA先はHwQ#2用の受信バッファ4である。
フィルタ31bには、pNIC#1が受信したパケットが属するフロー(Flow)に対する振り分け先(Dst.Q)が登録される。デフォルトでは、HwQ#1が振り分け先として設定される。
NUMAノード#1とNUMAノード#2では、仮想スイッチ2が動作する。仮想スイッチ2の機能は、複数のスレッドが実行されることによって実現される。複数のスレッドは、NUMAノード#1のCPU又はNUMAノード#2のCPUで実行される。NUMAノード#1では、仮想スイッチ2のスレッド25としてスレッド#1が動作し、NUMAノード#2では、仮想スイッチ2のスレッド25としてスレッド#2が動作する。
複数のスレッドは、スイッチプログラムを形成する。スイッチプログラムは、NUMAノード1のメモリから読み出されて、NUMAノード1のCPUにより実行される。また、スイッチプログラムは、DVD等の不揮発性記憶媒体から読み出されてNUMAノード1にインストールされる。あるいは、スイッチプログラムは、ネットワークを介して接続された他の情報処理装置から読み出されてNUMAノード1にインストールされる。
仮想スイッチ2は、NIC3の物理ポート31に対応する仮想スイッチポート24であるvポート#1を有する。また、仮想スイッチ2は、NUMAノード#1で動作するVM用の仮想ポートでありvポート#2で表されるVM用仮想ポート21と、NUMAノード#2で動作するVM用の仮想ポートでありvポート#3で表されるVM用仮想ポート21とを有する。vポート#1は、RXQ#1及びRXQ#2で表される受信キュー24aを有する。RXQ#1は、HwQ#1に対応し、RXQ#2は、HwQ#2に対応する。
また、仮想スイッチ2は、NUMAノード#1にフローテーブル群22を有する。フローテーブル群22は、フロー(Flow)に対するアクション(Actions)を定義する一連のテーブルである。アクションは複数ある場合もある。図1Aでは、Flow_Aに対するアクションとして「出力先はvポート#3」(Output:vポート#3)が定義される。
スレッド25は、フローキャッシュ23を有する。フローキャッシュ23は、フローテーブル群22のキャッシュであり、フロー情報から計算されるハッシュ値(Hash)にフローとアクションを対応付ける。スレッド#1は、フローキャッシュ#1で表されるフローキャッシュ23を有し、スレッド#2は、フローキャッシュ#2で表されるフローキャッシュ23を有する。
pNIC#1はFlow_Aのパケット群を受信するとデフォルトのHwQ#1に格納し、HwQ#1に格納されたパケット群はHwQ#1用の受信バッファ4にDMA転送される(1)。そして、スレッド#1は、HwQ#1用の受信バッファ4から最初のパケットを取り出し、フローキャッシュ#1を検索するが、ヒットしないため、フローテーブル群22を検索する(2)。
すると、Flow_Aの情報がヒットし、出力先のvポート#3はNUMAノード#2に所属するので、スレッド#1及びスレッド#2は、以下のキュー切替手順を実行する(3)。すなわち、スレッド#1は、vポート#1のキュー切替をスレッド#2に通知し(4)、NIC3のフィルタ31bに、Flow_Aの出力先としてHwQ#2を登録する(5)。キュー切替を通知されたスレッド#2は、vポート#1の受信処理を中断する。
そして、スレッド#1は、Flow_Aに対応するアクションを「出力先はスレッド#2」(Output:スレッド#2)に変更してフローキャッシュ#1に登録する(6)。そして、図1Bに示すように、スレッド#1は、キュー切替前にHwQ#1に格納されたFlow_Aのパケットをフローキャッシュ#1の内容に従いスレッド#2に転送する(7a)。スレッド#2は、スレッド#1からの受信データを優先的に処理する。同時に、キュー切替後に受信されたFlow_AのパケットがHwQ#2からDMA転送でNUMAノード#2へ転送される(7b)。
そして、スレッド#1側のFlow_Aの処理が完了すると、スレッド#1は、スレッド#2へキュー切替完了を通知する(8)。そして、スレッド#2は、vポート#1の受信処理を再開する(9)。
ここで、比較のために、従来の仮想スイッチの動作を説明する。図2Aは、従来の仮想スイッチの動作を説明するための図である。図2Aにおいて、太い実線はFlow_Cの流れを示し、太い一点鎖線はFlow_Bの流れを示す。
図2Aに示すように、従来の仮想スイッチでは、フィルタには手動登録が行われ(1)、動的な登録は行われない。また、Flow_Bの処理(2)、(3)、(4)及び(5)とFlow_Cの処理(2)'、(3)'、(4)'及び(5)'が各スレッドで並列に行われる。受信フローに対応した宛先NUMAノードの自動切替は行われない。
また、図1A及び図1Bに示したように、スレッド#2は、スレッド#1からキュー切替を通知されると対応するフローの受信処理を中断し、キュー切替完了を通知されると対応するフローの受信処理を再開する。このように、スレッド#1がキュー切替とキュー切替完了をスレッド#2に通知し、スレッド#2がスレッド#1からの通知に基づいて、対応するフローの受信処理の中断と再開を行うことで、パケットが正しい順序でVMに渡される。
図2Bは、後続パケットの追い越しを説明するための図である。後続パケットの追い越しは、スレッド#1がキュー切替とキュー切替完了をスレッド#2に通知し、スレッド#2がスレッド#1からの通知に基づいて、対応するフローの受信処理の中断と再開を行う仕組みがない場合に発生する。
図2Bの左側は、Flow_Dの最初のパケット#1がスレッド#1により処理され、フィルタ31bにキュー切替の登録が行われるまでに、RXQ#1にFlow_Dのパケット#2とパケット#3が溜まる場合を示す。そして、キュー切替の登録が行われると、図2Bの右側に示すように、スレッド#1がFlow_Eのパケットを処理している間に、Flow_Dの後続のパケット#4がスレッド#2によって処理され、パケット#4がパケット#3を追い越してしまう。
次に、仮想スイッチ2の機能構成について説明する。図3は、仮想スイッチ2の機能構成を示す図である。図3に示すように、仮想スイッチ2は、VM用仮想ポート#1及びVM用仮想ポート#2で表されるVM用仮想ポート21を有する。なお、VM用仮想ポート#1は、図1Aに示したvポート#2に対応し、VM用仮想ポート#2は、図1Aに示したvポート#3に対応する。
また、仮想スイッチ2は、フローテーブル群22と、フローキャッシュ#1及びフローキャッシュ#2で表される2つのフローキャッシュ23と、仮想スイッチポート#1で表される仮想スイッチポート24とを有する。また、仮想スイッチ2は、スレッド#1及びスレッド#2で表される2つのスレッド25を有する。
フローテーブル群22は、複数のフローテーブルであり、フローパイプラインを構成する。図4は、フローテーブルの例を示す図である。各フローテーブルはワイルドカードマッチ(マスク付)テーブルである。
図4に示すように、フローテーブルには、番地と、優先度と、マッチングルールと、アクションとが含まれる。番地は、各エントリが記憶される位置を示す値である。優先度は、マッチングルールをチェックする順番を示す。優先度の値が小さい順にマッチングルールはチェックされる。
マッチングルールは、受信パケットに対するアクションを特定するために用いられる。マッチングルールには、受信パケットに含まれるフロー情報(12タプル)についてValueとMaskが含まれる。12タプルは、受信ポート、送信元MAC、宛先MAC、Etherタイプ、VLANID、VLANPrio、送信元IP、宛先IP、IPproto、IPToS、L4Sport、L4Dportである。ここで、VLANは、Virtual Local Area Networkであり、IPは、Internet Protocolである。
受信ポートは、パケットを受信したポートの番号である。送信元MACは、パケットの送信元のMACアドレスである。宛先MACは、パケットの宛先のMACアドレスである。Etherタイプは、上位層パケットの種類を示す。VLANIDは、VLANを識別する識別子である。VLANPrioは、VLANの優先度である。送信元IPは、パケットの送信元のIPアドレスである。宛先IPは、パケットの宛先のIPアドレスである。IPprotoは、IPのプロトコル番号を示す。IPToSは、通信サービスの種別を示す。L4Sportは、L4の送信元ポート番号である。L4Dportは、L4の送信先ポート番号である。
Valueは、受信パケットに含まれるタプルの値と一致するか否かがチェックされる値である。Maskは、タプルの値を取り出す時のマスクであり、マスク値のビットが1に対応するビットがタプルから取り出されValueと比較される。ただし、マスク値=0は、どんなデータにもマッチする。
また、受信ポートにはマスク値はなく(N/A)、受信ポートのフィールドは(1<<(n−1))&Value!=0の時にマッチする。ここで、「<<」はビット左シフト演算である。例えば、1<<3は、2進数の1000である。また、nはポート番号[1≦n≦N]であり、Nは受信ポート数である。受信ポートのフィールドに設定されるValueの値には、マッチさせたいポート番号に対応するビット位置に1がセットされるポートベクタというデータ構造が使用される。これにより、Valueに複数のポートを指定することができる。
アクションは、受信パケットがマッチングルールにマッチしたときにスレッドが行うべき動作である。アクションは、12タプルにより特定されるフローに対してスレッドが行うべき動作である。複数のアクションは、アクションリストと呼ばれる。
例えば、「GotoTable:1」は、次にテーブル#1に基づいてアクションを決定することを示す。また、アクションリスト「VLANtrans:100,GotoTable:2」はVLAN番号を「100」に付け替えを指定し、次にテーブル#2に基づいてアクションを決定することを示す。また、「Output:1」は、vポート#1にパケットを出力することを示す。
図3に戻って、フローキャッシュ23には、受信パケットのフロー情報と、途中のフローテーブルでマッチしたエントリのアクションも含め最後のフローテーブルまでにマッチしたエントリの全アクションがハッシュ値が示す番地に登録される。フローキャッシュ#1はスレッド#1用であり、フローキャッシュ#2はスレッド#2用である。
仮想スイッチポート24は、NIC3の物理ポート31に対応する仮想ポートである。仮想スイッチポート24は、受信キュー#1及び受信キュー#2で表される受信キュー24aと、送信キュー#1及び送信キュー#2で表される送信キュー24bを有する。受信キュー#1及び送信キュー#1はスレッド#1用であり、受信キュー#2及び送信キュー#2はスレッド#2用である。仮想スイッチポート#1は、図1Aに示したvポート#1に対応する。
NIC3は、物理ポート#1で表される物理ポート31を有する。物理ポート31は、ハードウェア受信キュー#1及びハードウェア受信キュー#2で表されるハードウェア受信キュー31aと、フィルタ31bと、ハードウェア送信キュー#1及びハードウェア送信キュー#2で表されるハードウェア送信キュー31cとを有する。ハードウェア受信キュー#1及びハードウェア送信キュー#1はスレッド#1用であり、ハードウェア受信キュー#2及びハードウェア送信キュー#2はスレッド#2用である。物理ポート#1は、図1Aに示したpNIC#1に対応する。
スレッド25は、ドライバ部41と、仮想ポートハンドラ42と、スレッド間通信ポート43と、検索部44と、中継部45と、スレッド制御部46とを有する。
ドライバ部41は、仮想スイッチポート24の読み書きを行う。ドライバ部41は、受信キュー24aに格納された受信パケットを読み出して中継部45に渡し、中継部45から渡された送信パケットを送信キュー24bに格納する。
仮想ポートハンドラ42は、VM用仮想ポート21の入出力を行う。仮想ポートハンドラ42は、中継部45から渡された受信パケットをVM用仮想ポート21に出力し、VM用仮想ポート21から入力した送信パケットを中継部45に渡す。
スレッド間通信ポート43は、他のスレッド25との通信に用いられるポートである。スレッド25は、スレッド間通信ポート43からパケット、通知等を他のスレッド25に送信し、他のスレッド25から送られてきたパケット、通知等をスレッド間通信ポート43で受信する。
検索部44は、中継部45からの指示に基づいて、フローテーブル群22及びフローキャッシュ23を用いて受信パケットに対するアクションを特定し、特定したアクションを中継部45に通知する。検索部44は、フローキャッシュ23に受信パケットのフロー情報とマッチするエントリがある場合には、当該エントリのアクションを中継部45に通知する。一方、フローキャッシュ23に受信パケットのフロー情報とマッチするエントリがない場合には、検索部44は、フローテーブル群22を用いてフロー情報に対応するアクションを特定し、特定したアクションをフロー情報とともにフローキャッシュ23に登録する。
検索部44は、登録部44aと判断部44bを有する。登録部44aは、新たなエントリをフローキャッシュ23に登録する。判断部44bは、登録部44aが新たなエントリをフローキャッシュ23に登録する際に、エントリのアクションで指定される出力先が他のNUMAノード1のVM用仮想ポート21であるか否かを判断し、判断結果を登録部44aと中継部45に通知する。登録部44aは、出力先が他のNUMAノード1のVM用仮想ポート21である場合には、出力先を他のNUMAノード1に対応するスレッド25に変更してフローキャッシュ23に登録する。
図5は、フローキャッシュ登録の例を示す図である。図5に示すように、受信パケットのフロー情報と、フローテーブル群22から特定されたアクションリストとから新たなエントリがフローキャッシュ23に登録される際に、判断部44bは、エントリが所定の条件を満たすか否かを判断する。ここで、所定の条件とは、In_port.type=物理ポートかつOut_port.type=VM用仮想ポートかつIn_port.numa_node!=Out_port.numa_nodeである。
In_portは受信ポートであり、Out_portは出力先のポートである。typeはポートの種別であり、numa_nodeは、NUMAノード1の番号である。すなわち、判断部44bは、受信ポートの種別が「物理ポート」であり、かつ、出力先のポートの種別が「VM用仮想ポート」であり、かつ、出力先のポートのNUMAノード1の番号と受信ポートのNUMAノード1の番号が異なるかを判定する。そして、登録部44aは、所定の条件が満たされている場合に、アクションの出力先をOut_port.numa_nodeに対応するスレッド25に変更してフローキャッシュ23に登録する。
図5では、所定の条件が満たされると、フローテーブル群22から出力先として特定されたVM用仮想ポート#2(Output:2)がスレッド#2(Output:Thread2)に変更されてフローキャッシュ23の番地Kに登録される。ここで、Kは、受信パケットのフロー情報から計算されたハッシュ値である。
図3に戻って、中継部45は、検索部44から通知されたアクションに基づいて、受信パケットを処理する。中継部45は、アクションの出力先がVM用仮想ポート#1であるパケットを仮想ポートハンドラ42に渡す。また、中継部45は、受信パケットが所定の条件を満たすとの判断結果を判断部44bから受け取ると、キュー切替手順の実行をスレッド制御部46に指示する。
スレッド制御部46は、スレッド間通信ポート43を用いてキュー切替手順を実行する。具体的には、スレッド制御部46は、キュー切替通知を切替先のスレッド25に通知し、NIC3のフィルタ31bにキュー切替対象フローの宛先として切替先スレッド25に対応するハードウェア受信キュー31aを登録する。そして、スレッド制御部46は、受信キュー24a及びハードウェア受信キュー31aからキュー切替対象フローのパケットを読み出して切替先スレッド25に転送する。そして、スレッド制御部46は、切替が完了すると、キュー切替完了通知を切替先のスレッド25に通知する。
スレッド制御部46は、NIC3のフィルタ31bの設定後、キュー切替対象フローの処理において、以下2つのどちらかの条件を満たした場合に切替完了と判断する。
(1)受信キュー24aからの読み出し時に読み出しデータが存在しない(受信パケットがない)
(2)受信キュー24a及び対応するハードウェア受信キュー31aのキュー長の合計数分のパケットの処理を実行
上記(1)については、受信キュー24aからの読み出し時に受信パケットが存在しない場合は、新たな到着パケットがない状態であり、NIC3のフィルタ31bの設定時の受信済パケットを全て処理済であることを意味する。したがって、ハードウェア受信キュー31a/受信キュー24aにおけるフローの処理が完了したと判断可能である。
上記(2)については、あるフローの受信をハードウェア受信キュー#1からハードウェア受信キュー#2に切替設定(フィルタ31bの設定)後、当該フローのパケットが新たにハードウェア受信キュー#1及び対応する受信キュー#1に格納されることはない。したがって、フィルタ31bの設定時、ハードウェア受信キュー#1及び対応する受信キュー#1に受信済のパケット数は高々Size(ハードウェア受信キュー#1)+Size(受信キュー#1)である。ここで、Size(Q)は、キューQの最大長である。したがって、Size(ハードウェア受信キュー#1)+Size(受信キュー#1)個のパケットを処理した後にキュー切替対象フローのパケットがハードウェア受信キュー31a/受信キュー24aに格納されていることはないと判断可能である。
また、スレッド制御部46は、他のスレッド25からキュー切替通知を受信すると、キュー切替対象のフローの受信ポートの受信処理を中断し、キュー切替通知に含まれるフローとアクションをフローキャッシュ23に登録する。また、スレッド制御部46は、他のスレッド25からパケットを転送されると、フローキャッシュ23に基づいてパケットを処理する。また、スレッド制御部46は、他のスレッド25からキュー切替完了通知を受信すると、キュー切替対象フローの受信ポートの受信処理を再開する。
なお、図3では2つのスレッド25を示したが、スレッド25は3つ以上あってもよい。また、図3では、1つのNIC3を示したが、NIC3、物理ポート31および物理ポート31に対応する仮想スイッチポート24は複数あってもよい。また、図3では、各NUMAノード1に対して1つのVM用仮想ポート21を示したが、各NUMAノード1に対してVM用仮想ポート21は複数あってもよい。
図6A及び図6Bは、スレッド制御パケットの例を示す図である。ここで、スレッド制御パケットとは、スレッド間通信ポート43を用いて送受信されるパケットである。図6A(a)は基本フォーマットを示し、図6A(b)はキュー切替通知の例を示し、図6B(c)はキュー切替完了通知の例を示し、図6B(d)はデータ転送パケットの例を示す。
図6A(a)に示すように、スレッド制御パケットには、2B(バイト)のTYPEと、2BのLengthと、4BのHash Valueと、LengthバイトのPayloadが含まれる。
TYPEは、スレッド制御パケットの種別を示し、キュー切替通知の場合は'start'であり、キュー切替完了通知の場合は'comp'であり、データ転送の場合は'data'である。Lengthは、本スレッド制御パケットのPayload部のサイズ(バイト数)である。Hash Valueは、通知フローのフロー情報のハッシュ値である。Payloadは、通知データであり、TYPE毎に異なる内容を含む。
図6A(b)に示すように、キュー切替通知の場合には、Payloadにはキュー切替対象フローのフローキャッシュエントリ情報(アクション書換え前)が含まれる。また、図6B(c)に示すように、キュー切替完了通知の場合には、Payloadにはキュー切替対象フローのフロー情報が含まれる。また、図6B(d)に示すように、スレッド25間のデーテ転送パケットの場合には、Payloadにはキュー切替対象フローのフロー情報と転送パケットが含まれる。
次に、スレッド25による処理の手順について説明する。スレッド25による処理の手順では、キュー切替手順によって移行されるフローの情報が2つの移行管理テーブルを用いて管理される。図7は、移行管理テーブルの例を示す図である。図7では、2つの移行管理テーブルは、移行管理テーブルAと移行管理テーブルBと表される。
移行管理テーブルAは、移行元スレッド25において、移行中のフローの情報を保持するために用いられる。具体的には、移行管理テーブルAには、移行中のフローに対応する宛先スレッド25及び完了判断に用いられるカウント値が保持される。カウント値の初期値は、移行元のSize(ハードウェア受信キュー31a)+Size(受信キュー24a)であり、カウント値は、受信キュー24aのパケットが処理される毎に1引かれる。例えば、Flow_Aについては、宛先スレッド25の番号は2であり、カウント値は512である。
移行管理テーブルBは、移行先スレッド25において、移行中のフローに対応する受信ポートの情報を保持するために用いられる。具体的には、移行管理テーブルBには、サスペンドポート番号と移行中フロー数が保持される。サスペンドポート番号は、移行中のフローの存在により受信処理を停止中のポートの番号である。移行中フロー数は、停止中のポートの関連するフローの数である。移行中フロー数が0にならないと当該ポートの受信処理は再開されない。
図8は、スレッド25による受信処理の手順を示すフローチャートである。図8に示すように、スレッド25は、処理対象のキューの情報を取得する(ステップS1)。すなわち、qlist[i]をキューqの情報とする。ここで、qlist[]はキューの情報を記憶するリストであり、iの初期値は0であり、qの情報及びqlist[]は構造体である。
そして、スレッド25は、qはスレッド間通信ポート43であるか否かを判定し(ステップS2)、qがスレッド間通信ポート43でない場合には、qの状態が停止中(サスペンド)であるか否かを判定する(ステップS3)。そして、qの状態が停止中でない場合には、スレッド25は、qに受信パケットがあるか否かを判定する(ステップS4)。
そして、qに受信パケットがある場合には、スレッド25は、qからパケットを1つ読み出してPとし、受信パケットPからフロー情報を抽出してFとし、フロー情報Fからハッシュ値を計算してH(F)とする(ステップS5)。そして、スレッド25は、H(F)を用いてフローキャッシュ23を参照し、Fに対応するエントリがあるかを確認する(ステップS6)。
そして、スレッド25は、フローキャッシュ23にFのエントリがあるか否かを判定し(ステップS7)、フローキャッシュ23にFのエントリがある場合には、当該エントリで指定されるアクションを実行する(ステップS8)。そして、スレッド25は、移行管理テーブルAを参照し、qに移行中のフローがある場合は移行中フローのエントリのカウント値をデクリメントし、カウント値が0になったエントリに対応する宛先スレッド25にキュー切替完了通知を送信し、当該エントリを削除する(ステップS9)。
そして、スレッド25は、iに1を加え(ステップS10)、iがNNに等しい場合にはiに0を設定する(ステップS11)。ここで、NNは、スレッド間通信ポート43を含むポートの数である。そして、スレッド25は、ステップS1に戻る。
また、ステップS7において、フローキャッシュ23にFのエントリがない場合には、スレッド25は、フローテーブル群22を参照してフローキャッシュ23にFのエントリを登録するフローテーブルルックアップ処理を実行する(ステップS12)。そして、スレッド25は、ステップS9に移動する。
また、ステップS4にいてqに受信パケットがない場合、及び、ステップS3においてqの状態が停止中である場合には、スレッド25は、ステップS10に移動する。また、ステップS2において、qはスレッド間通信ポート43である場合には、スレッド25は、スレッド制御パケットを処理するスレッド制御パケット処理を実行し(ステップS13)、ステップS10に移動する。
このように、スレッド25は、受信ポートを順番に繰り返し処理することで、受信パケットを処理することができる。
図9は、フローテーブルルックアップ処理の手順を示すフローチャートである。図9に示すように、スレッド25は、フロー情報Fを用いてフローパイプラインを実行し、Fに対応するアクションリストALを取得する(ステップS21)。そして、スレッド25は、ALが空リストであるか否かを判定し(ステップS22)、ALが空リストでない場合には、Fから入力ポート番号Piを取得し、ALから出力ポート番号Poを取得する(ステップS23)。
そして、スレッド25は、port_list[Pi]をIn_Portとし、port_list[Po]をOut_Portとする(ステップS24)。ここで、port_list[]は、ポートの情報であり、構造体である。そして、スレッド25は、以下の条件を全て満たすか確認する(ステップS25)。以下の条件とは、In_port.type=物理ポート、Out_port.type=VM用仮想ポート、及び、In_port.numa_node!=Out_port.numa_nodeである。
そして、スレッド25は、全ての条件を満たすか否かを判定する(ステップS26)。そして、全ての条件を満たす場合には、スレッド25は、NIC3のOut_port.numa_nodeに対応するハードウェア受信キュー31aの情報を取得し、当該フローの出力先を当該ハードウェア受信キュー31aとするようにNIC3のフィルタ31bを設定する(ステップS27)。
そして、スレッド25は、Out_portから切替先スレッド情報を取得し、フロー情報Fから生成されたキュー切替通知を当該スレッド25に送信し、AL中のアウトプットアクションの出力先を当該スレッドに変更する(ステップS28)。ここで、アウトプットアクションとは、アクションのうち受信パケットの出力を行うアクションである。
そして、スレッド25は、移行管理テーブルAに当該フローのエントリを追加し、カウント値を初期化する(ステップS29)。そして、スレッド25は、フロー情報F及びアクションリストALをフローキャッシュ23のハッシュ値H(F)で参照されるエントリに登録する(ステップS30)。
また、スレッド25は、ステップS26において満たさない条件がある場合には、ステップS30に移動し、ステップS22においてALが空リストである場合には、規定の初期動作を実行する(ステップS31)。ここで、規定の初期動作とは、例えば、当該パケットを廃棄することである。
このように、スレッド25は、全ての条件が満たされた場合に、Out_Portに基づいてフィルタ31bの設定、キュー切替通知の送信、アウトプットアクションの出力先の変更を行うことによって、受信キュー24aを切り替えることができる。
図10は、スレッド制御パケット処理の手順を示すフローチャートである。図10に示すように、スレッド25は、スレッド制御パケットPのTYPEを確認する(ステップS41)。そして、スレッド25は、TYPEが'start'であるか否かを判定し(ステップS42)、TYPEが'start'である場合には、キュー切替通知を受信した場合の処理として切替通知処理を実行する(ステップS43)。
また、TYPEが'start'でない場合には、スレッド25は、TYPEが'comp'であるか否かを判定する(ステップS44)。そして、TYPEが'comp'である場合には、スレッド25は、キュー切替完了通知を受信した場合の処理として切替完了通知処理を実行する(ステップS45)。
また、TYPEが'comp'でない場合には、スレッド25は、TYPEが'data'であるか否かを判定する(ステップS46)。そして、TYPEが'data'である場合には、スレッド25は、スレッド25間のデータ転送パケットを受信した場合の処理としてデータ転送処理を実行する(ステップS47)。
また、TYPEが'data'でない場合には、スレッド25は、対象外パケットのため、例外処理を実行する(ステップS48)。例外処理としては、エラー処理等がある。
図11は、切替通知処理の手順を示すフローチャートである。図11に示すように、スレッド25は、キュー切替通知Pからキュー切替対象フローのフロー情報FとアクションリストALを抽出する(ステップS51)。そして、スレッド25は、フロー情報Fから入力ポート番号PNを抽出し、移行管理テーブルBの当該ポートエントリの移行中フロー数を1増加する(ステップS52)。
そして、スレッド25は、入力ポート番号PNに対応する受信キュー情報を取得し、当該キューの状態をサスペンドに変更する(ステップS53)。そして、スレッド25は、キュー切替通知Pからフロー情報Fのハッシュ値H(F)を抽出し(ステップS54)、フローキャッシュ23のH(F)で参照されるエントリにFとALを登録する(ステップS55)。
このように、フローキャッシュ23のH(F)で参照されるエントリにFとALを登録することで、移行先スレッド25は、受信キュー24aが切り替えられたパケットを宛先のVMに送信することができる。
図12は、切替完了通知処理の手順を示すフローチャートである。図12に示すように、スレッド25は、キュー切替完了通知Pからキュー切替対象フローのフロー情報Fを抽出する(ステップS61)。そして、スレッド25は、フロー情報Fから入力ポート番号PNを抽出し、移行管理テーブルBの当該ポートエントリの移行中フロー数を1減算する(ステップS62)。
そして、スレッド25は、当該エントリの移行中フロー数が0になった場合、入力ポート番号PNに対応する受信キュー情報を取得し、当該キューの状態をアクティブに変更し、当該エントリを削除する(ステップS63)。
このように、移行先スレッド25は、当該エントリの移行中フロー数が0になった場合、入力ポート番号PNに対応するキューの状態をアクティブに変更することでNIC3からのパケット受信を再開することができる。
図13は、データ転送処理の手順を示すフローチャートである。図13に示すように、スレッド25は、データ転送パケットからハッシュ値H(F)と転送パケットPpを抽出する(ステップS71)。そして、スレッド25は、フローキャッシュ23のH(F)で参照されるエントリからアクションリストを取得し、転送パケットPpに対してアクションを実行する(ステップS72)。
このように、移行先スレッド25は、転送パケットPpに対してフローキャッシュ23に登録されたアクションを実行することで、キュー切替前に移行元で受信されたパケットを適切に処理することができる。
上述してきたように、実施例では、スレッド#1が、VM用仮想ポート#2宛のフローについてNIC3のフィルタ31bをハードウェア受信キュー#2に設定し、キュー切替をスレッド#2に通知する。そして、スレッド#1は、当該フローについて、ハードウェア受信キュー#1及び受信キュー#1にあるパケットをスレッド#2に送信する。そして、スレッド#2は、当該フローについて、キュー切替の通知を受信すると、仮想スイッチポート#1の受信処理を一時停止し、スレッド#1から送信されたパケットを処理後に、仮想スイッチポート#1の受信処理を再開する。したがって、情報処理装置10は、NIC3が受信したパケットを宛先VMが動作するNUMAノード#2にDMA転送するようにフィルタ31bの設定を動的に切り替えることができ、かつ、パケットを受信した順番で宛先VMに送信することができる。
また、実施例では、スレッド#1は、当該フローについて、フローキャッシュ#1にエントリを登録する際に、NIC3のフィルタ31bをハードウェア受信キュー#2に設定する必要があるか否かを判定する。そして、スレッド#1は、必要と判定した場合に、当該フローについて、該エントリの出力先をスレッド#2に変更し、NIC3のフィルタ31bをハードウェア受信キュー#2に設定し、キュー切替をスレッド#2に通知する。そして、スレッド#1は、当該フローについて、ハードウェア受信キュー#1及び受信キュー#1にあるパケットをスレッド#2に送信する。したがって、情報処理装置10は、当該フローの最初のパケットを受信した際にキュー切替手順を実行することができる。
また、実施例では、スレッド#1は、当該フローについて、ハードウェア受信キュー#1及び受信キュー#1にパケットがなくなった場合に、キュー切替完了をスレッド#2に通知する。又は、スレッド#1は、当該フローについて、Size(ハードウェア受信キュー#1)+Size(受信キュー#1)の数のパケットをスレッド#2に送信した場合にキュー切替完了をスレッド#2に通知する。そして、スレッド#2は、当該フローについて、キュー切替完了を通知されると、仮想スイッチポート#1の受信処理を再開する。したがって、情報処理装置10は、キュー切替後も当該フローの受信処理を継続することができる。
また、実施例では、In_port.type=物理ポート、Out_port.type=VM用仮想ポート、かつ、In_port.numa_node!=Out_port.numa_nodeである場合に、キュー切替手順の実行が必要と判定する。したがって、情報処理装置10は、キュー切替の必要性を正確に判定することができる。
1 NUMAノード
2 仮想スイッチ
3 NIC
4 受信バッファ
10 情報処理装置
21 VM用仮想ポート
22 フローテーブル群
23 フローキャッシュ
24 仮想スイッチポート
24a 受信キュー
24b 送信キュー
25 スレッド
31 物理ポート
31a ハードウェア受信キュー
31b フィルタ
31c ハードウェア送信キュー
41 ドライバ部
42 仮想ポートハンドラ
43 スレッド間通信ポート
44 検索部
44a 登録部
44b 判断部
45 中継部
46 スレッド制御部

Claims (6)

  1. 第1受信バッファと通信装置を有する第1ノードで第1スレッドが実行される第1処理装置と、第2受信バッファを有する第2ノードで第2スレッドが実行される第2処理装置に、
    前記第1スレッドは、前記第2処理装置で実行される仮想マシンの仮想ポート宛のフローについて、前記通信装置の出力先を前記第2受信バッファに設定し、前記出力先の前記第2受信バッファへの設定を切替通知により前記第2スレッドに通知し、前記第1受信バッファに格納されたパケットを前記第2スレッドに転送し、
    前記第2スレッドは、前記切替通知を受信すると、前記フローについて、前記第2受信バッファの受信処理を一時停止し、前記第1スレッドから転送されたパケットを前記仮想ポートに転送し、該転送が終わった後に前記第2受信バッファの受信処理を再開する、
    処理を実行させることを特徴とするスイッチプログラム。
  2. 前記第1スレッドは、前記フローについて、前記第1処理装置のフローキャッシュにエントリを登録する際に、前記第1受信バッファから前記第2受信バッファへの切替が必要か否かを判定し、必要と判定した場合に、該エントリのアクションの出力先を前記第2スレッドに変更し、前記通信装置の出力先を前記第2受信バッファに設定し、前記出力先の前記第2受信バッファへの設定を切替通知により前記第2スレッドに通知し、前記第1受信バッファに格納されたパケットを前記第2スレッドに転送する、ことを特徴とする請求項1に記載のスイッチプログラム。
  3. 前記第1スレッドは、前記フローについて、前記第1受信バッファにパケットがなくなった場合、又は、前記第1受信バッファに格納された所定の数のパケットを前記第2スレッドに転送した場合に、前記第2スレッドに切替完了通知を送信し、
    前記第2スレッドは、前記フローについて、前記切替完了通知を受信すると、前記第2受信バッファの受信処理を再開することを特徴とする請求項1又は2に記載のスイッチプログラム。
  4. 前記第1スレッドは、受信バッファに対応する受信ポートが物理ポートであり、出力先のポートが仮想マシン用仮想ポートであり、かつ、前記受信ポートが属するノードと前記仮想マシン用仮想ポートが属するノードが異なる場合に前記切替が必要と判定することを特徴とする請求項2に記載のスイッチプログラム。
  5. 第1受信バッファと通信装置を有する第1ノードで第1スレッドが実行される第1処理装置と、第2受信バッファを有する第2ノードで第2スレッドが実行される第2処理装置が、
    前記第1スレッドは、前記第2処理装置で実行される仮想マシンの仮想ポート宛のフローについて、前記通信装置の出力先を前記第2受信バッファに設定し、前記出力先の前記第2受信バッファへの設定を切替通知により前記第2スレッドに通知し、前記第1受信バッファに格納されたパケットを前記第2スレッドに転送し、
    前記第2スレッドは、前記切替通知を受信すると、前記フローについて、前記第2受信バッファの受信処理を一時停止し、前記第1スレッドから転送されたパケットを前記仮想ポートに転送し、該転送が終わった後に前記第2受信バッファの受信処理を再開する
    処理を実行することを特徴とするスイッチング方法。
  6. 第1処理装置と第1受信バッファと通信装置とを有する第1ノードと、第2処理装置と第2受信バッファとを有する第2ノードとを有する情報処理装置において、
    前記第1ノードは、前記第2処理装置で実行される仮想マシンの仮想ポート宛のフローについて、前記通信装置の出力先を前記第2受信バッファに設定し、前記出力先の前記第2受信バッファへの設定を切替通知により前記第2ノードに通知し、前記第1受信バッファに格納されたパケットを前記第2ノードに転送し、
    前記第2ノードは、前記切替通知を受信すると、前記フローについて、前記第2受信バッファの受信処理を一時停止し、前記第1ノードから転送されたパケットを前記仮想ポートに転送し、該転送が終わった後に前記第2受信バッファの受信処理を再開する
    ことを特徴とする情報処理装置。
JP2017086367A 2017-04-25 2017-04-25 スイッチプログラム、スイッチング方法及び情報処理装置 Active JP6855906B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017086367A JP6855906B2 (ja) 2017-04-25 2017-04-25 スイッチプログラム、スイッチング方法及び情報処理装置
US15/957,166 US10558485B2 (en) 2017-04-25 2018-04-19 Information processing apparatus and method for shifting buffer

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017086367A JP6855906B2 (ja) 2017-04-25 2017-04-25 スイッチプログラム、スイッチング方法及び情報処理装置

Publications (2)

Publication Number Publication Date
JP2018185624A JP2018185624A (ja) 2018-11-22
JP6855906B2 true JP6855906B2 (ja) 2021-04-07

Family

ID=63854545

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017086367A Active JP6855906B2 (ja) 2017-04-25 2017-04-25 スイッチプログラム、スイッチング方法及び情報処理装置

Country Status (2)

Country Link
US (1) US10558485B2 (ja)
JP (1) JP6855906B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108123901B (zh) * 2016-11-30 2020-12-29 新华三技术有限公司 一种报文传输方法和装置
JP6390748B1 (ja) * 2017-04-19 2018-09-19 富士通株式会社 情報処理装置、情報処理方法および情報処理プログラム
US11301278B2 (en) * 2018-04-25 2022-04-12 Vmware, Inc. Packet handling based on multiprocessor architecture configuration
JP7157330B2 (ja) * 2018-11-27 2022-10-20 富士通株式会社 監視装置、監視方法および監視プログラム
CN109450701B (zh) * 2018-12-07 2020-04-17 北京金山云网络技术有限公司 一种虚拟交换机切换方法、装置、宿主机及计算机可读存储介质
WO2021215011A1 (ja) * 2020-04-24 2021-10-28 株式会社東陽テクニカ パケットキャプチャ装置及び方法
CN113923158B (zh) * 2020-07-07 2023-09-22 华为技术有限公司 一种报文转发、路由发送和接收方法及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011068091A1 (ja) * 2009-12-04 2011-06-09 日本電気株式会社 サーバ及びフロー制御プログラム
US8446824B2 (en) * 2009-12-17 2013-05-21 Intel Corporation NUMA-aware scaling for network devices
US8806025B2 (en) * 2012-06-25 2014-08-12 Advanced Micro Devices, Inc. Systems and methods for input/output virtualization
US9459904B2 (en) * 2014-09-30 2016-10-04 Vmware, Inc. NUMA I/O aware network queue assignments

Also Published As

Publication number Publication date
JP2018185624A (ja) 2018-11-22
US20180307520A1 (en) 2018-10-25
US10558485B2 (en) 2020-02-11

Similar Documents

Publication Publication Date Title
JP6855906B2 (ja) スイッチプログラム、スイッチング方法及び情報処理装置
US8446824B2 (en) NUMA-aware scaling for network devices
JP5720577B2 (ja) サーバ及びフロー制御プログラム
KR101747518B1 (ko) 소프트웨어 정의 네트워크에서의 가상화된 컨테이너 및 가상 머신을 통한 로컬 서비스 체이닝
JP6328134B2 (ja) クラスタ化されたコンピュータ・システムで通信チャネルのフェイルオーバを実行する方法、装置、およびプログラム
US9973417B2 (en) Method and apparatus for managing application state in a network interface controller in a high performance computing system
US8543729B2 (en) Virtualised receive side scaling
JP5839032B2 (ja) ネットワークシステム、コントローラ、及びフロー制御方法
JP6958440B2 (ja) 情報処理装置、情報処理システム及びプログラム
JP6254574B2 (ja) ネットワーキング・デバイスの仮想化のためのパケット処理のオフロード
US10178054B2 (en) Method and apparatus for accelerating VM-to-VM network traffic using CPU cache
US10187308B2 (en) Virtual switch acceleration using resource director technology
US20150163172A1 (en) Server switch integration in a virtualized system
US20070162619A1 (en) Method and System for Zero Copy in a Virtualized Network Environment
KR20040010789A (ko) 데이터 룩업을 실행하는 방법 및 컴퓨터 판독가능 매체 및 장치
WO2011078861A1 (en) A computer platform providing hardware support for virtual inline appliances and virtual machines
JP2024517706A (ja) Smartnicにおけるネットワーク接続型mpi処理アーキテクチャ
JP2017143344A (ja) パケット伝送装置,制御装置,及びパケット伝送制御方法
US11563830B2 (en) Method and system for processing network packets
JP2019083469A (ja) 情報処理装置、情報処理方法及びプログラム
JP7052634B2 (ja) 負荷分散システム及び負荷分散方法
WO2018015983A1 (en) Communication apparaus, system, rollback method, and program
US20220413890A1 (en) Information processing apparatus, computer-readable recording medium having stored therein information processing program, and method for processing information
WO2018096609A1 (ja) 計算機、通信制御方法、及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200213

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210120

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210216

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210301

R150 Certificate of patent or registration of utility model

Ref document number: 6855906

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150