JP7310924B2 - サーバ内遅延制御装置、サーバ、サーバ内遅延制御方法およびプログラム - Google Patents

サーバ内遅延制御装置、サーバ、サーバ内遅延制御方法およびプログラム Download PDF

Info

Publication number
JP7310924B2
JP7310924B2 JP2021566407A JP2021566407A JP7310924B2 JP 7310924 B2 JP7310924 B2 JP 7310924B2 JP 2021566407 A JP2021566407 A JP 2021566407A JP 2021566407 A JP2021566407 A JP 2021566407A JP 7310924 B2 JP7310924 B2 JP 7310924B2
Authority
JP
Japan
Prior art keywords
packet
server
kernel
ring buffer
delay control
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
JP2021566407A
Other languages
English (en)
Other versions
JPWO2021130828A1 (ja
JPWO2021130828A5 (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.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
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 Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Publication of JPWO2021130828A1 publication Critical patent/JPWO2021130828A1/ja
Publication of JPWO2021130828A5 publication Critical patent/JPWO2021130828A5/ja
Application granted granted Critical
Publication of JP7310924B2 publication Critical patent/JP7310924B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0852Delays
    • 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/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/08Configuration management of networks or network elements
    • H04L41/0895Configuration of virtualised networks or elements, e.g. virtualised network function or OpenFlow elements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/40Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks using virtualisation of network functions or resources, e.g. SDN or NFV entities
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/10Active monitoring, e.g. heartbeat, ping or trace-route
    • H04L43/103Active monitoring, e.g. heartbeat, ping or trace-route with adaptive polling, i.e. dynamically adapting the polling rate
    • 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/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/45545Guest-host, i.e. hypervisor is an application program itself, e.g. VirtualBox
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Environmental & Geological Engineering (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Cardiology (AREA)
  • Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Description

本発明は、サーバ内遅延制御装置、サーバ、サーバ内遅延制御方法およびプログラムに関する。
NFV(Network Functions Virtualization:ネットワーク機能仮想化)による仮想化技術の進展などを背景に、サービス毎にシステムを構築して運用することが行われている。また、上記サービス毎にシステムを構築する形態から、サービス機能を再利用可能なモジュール単位に分割し、独立した仮想マシン(VM:Virtual Machineやコンテナなど)環境の上で動作させることで、部品のようにして必要に応じて利用し運用性を高めるといったSFC(Service Function Chaining)と呼ばれる形態が主流となりつつある。
仮想マシンを構成する技術としてLinux(登録商標)とKVM(kernel-based virtual machine)で構成されたハイパーバイザー環境が知られている。この環境では、KVMモジュールが組み込まれたHost OS(物理サーバ上にインストールされたOSをHost OSと呼ぶ)がハイパーバイザーとしてカーネル空間と呼ばれるユーザ空間とは異なるメモリ領域で動作する。この環境においてユーザ空間にて仮想マシンが動作し、その仮想マシン内にGuest OS(仮想マシン上にインストールされたOSをGuest OSと呼ぶ)が動作する。
Guest OSが動作する仮想マシンは、Host OSが動作する物理サーバとは異なり、(イーサーネットカードデバイスなどに代表される)ネットワークデバイスを含むすべてのハードウェアが、HW(hardware)からGuest OSへの割込処理やGuest OSからハードウェアへの書き込みに必要なレジスタ制御となる。このようなレジスタ制御では、本来物理ハードウェアが実行すべき通知や処理がソフトウェアで擬似的に模倣されるため、性能がHost OS環境に比べ、低いことが一般的である。
この性能劣化において、特にGuest OSから自仮想マシン外に存在するHost OSや外部プロセスに対して、HWの模倣を削減し、高速かつ統一的なインターフェイスにより通信の性能と汎用性を向上させる技術がある。この技術として、virtioというデバイスの抽象化技術、つまり準仮想化技術が開発されており、すでにLinux(登録商標)を始め、FreeBSD(登録商標)など多くの汎用OSに組み込まれ、現在利用されている。
virtioでは、コンソール、ファイル入出力、ネットワーク通信といったデータ入出力に関して、転送データの単一方向の転送用トランスポートとして、リングバッファで設計されたキューによるデータ交換とキューのオペレーションにより定義している。そして、virtioのキューの仕様を利用して、それぞれのデバイスに適したキューの個数と大きさをGuest OS起動時に用意することにより、Guest OSと自仮想マシン外部との通信を、ハードウェアエミュレーションを実行せずにキューによるオペレーションだけで実現することができる。
[割込モデルによるパケット転送(汎用VM構成の例)]
特許文献1には、仮想マシン内で動作するGuest OSが自仮想マシン外に存在する、外部プロセスとの専用仮想通信路を構築する仮想通信路構築システムが記載されている。特許文献1に記載の技術は、virtioで接続されたHost OSとGuest OSにおいて、virtio-net関連のメモリコピー回数を減らすことにより、パケット転送処理を高速化する。
図7は、汎用Linux kernel(登録商標)およびVM構成のサーバ仮想化環境における、割込モデルによるパケット転送を説明する図である。
HW10は、NIC(Network Interface Card)11(物理NIC)(インターフェイス部)を有し、Host OS20、仮想マシンを構築するハイパーバイザーであるKVM30、仮想マシン(VM1,VM2)40、およびGuest OS50により構築された仮想通信路を経由してuser space(ユーザスペース)60上のパケット処理APL(Application)1との間でデータ送受信の通信を行う。以下の説明において、図7の太矢印に示すように、パケット処理APL1が、HW10からのパケットを受け取るデータの流れをRx側受信と称し、パケット処理APL1が、HW10にパケットを送信するデータの流れをTx側送信と称する。
Host OS20は、kernel21、Ring Buffer22、およびDriver23を有し、kernel21は、kernel threadであるvhost-netモジュール221と、tapデバイス222と、仮想スイッチ(br)223と、を有する。
tapデバイス222は、仮想ネットワークのカーネルデバイスであり、ソフトウェアでサポートされている。仮想マシン(VM1)40は、仮想ブリッジ(bridge)に作成される仮想スイッチ(br)223を介してGuest OS50とHost OS20が通信できる。tapデバイス222は、この仮想ブリッジに作成されるGuest OS50の仮想NIC(vNIC)と繋がるデバイスである。
Host OS20は、Guest OS50の仮想マシン内で構築された構成情報(共有バッファキューの大きさ、キューの数、識別子、リングバッファへアクセスするための先頭アドレス情報など)をvhost-netモジュール221にコピーし、仮想マシン側の端点の情報をHost OS20内部に構築する。このvhost-netモジュールは、virtioネットワーキング用のカーネルレベルのバックエンドであり、virtioパケット処理タスクをユーザ領域(ユーザ空間)からkernel21のvhost-netモジュール221に移すことで仮想化のオーバーヘッドを低減できる。
Guest OS50は、仮想マシン(VM1)上にインストールされたGuest OS(Guest1)と、仮想マシン(VM2)上にインストールされたGuest OS(Guest2)と、を有し、仮想マシン(VM1,VM2)40内でGuest OS50(Guest1,Guest2)が動作する。Guest OS50として、Guest1を例に採ると、Guest OS50(Guest1)は、kernel51、Ring Buffer52、およびDriver53を有し、Driver53は、virtio-driver531を備える。
具体的には、PCI(Peripheral Component Interconnect)デバイスとして仮想マシン内にコンソール、ファイル入出力、ネットワーク通信それぞれに対しvirtioデバイスが存在し(コンソールはvirtio-console、ファイル入出力はvirtio-blk、ネットワークはvirtio-netと呼ばれるデバイスとそれに対応するOSが持つドライバがvirtioキューで定義されている)、Guest OS起動時に、Guest OSと相手側とのデータの受け渡し端点(送受信端点)を2つ作り、データ送受信の親子関係を構築する。多くの場合、親子関係は仮想マシン側(子側)とGuest OS(親側)で構成する。
子側は仮想マシン内のデバイスの構成情報として存在し、それぞれのデータ領域のサイズと必要とする端点の組み合わせの個数、デバイスの種別を親側に要求する。親側は子側の要求に従い、必要な分のデータを貯蓄し受け渡すための共有バッファキューのためのメモリを割り当て確保し、子側がアクセスできるようにそのアドレス番地を子側に返す。データの受け渡しに必要とされる共有バッファキューのオペレーションについては、virtioではすべて共通であり、親側、子側両方合意済みとして実行される。さらに共有バッファキューの大きさも両方合意済みとする(つまりデバイスごとに決まっている)。これにより、子側にアドレスを伝えるだけで、親側、子側の双方が共有するキューを操作することが可能となる。
virtioにおいて用意する共有バッファキューは単一方向用として用意されるため、例えば、virtio-netデバイスと呼ばれる仮想ネットワークデバイスでは送信用、受信用、コントロール用の3つのRing Buffer52で構成される。親と子の通信は、共有バッファキューへの書き込みとバッファ更新通知により実現し、Ring Buffer52に書き込んだ後、相手側に通知する。相手側は通知を受けると、どの共有バッファキューにどの程度新規のデータが入っているのかをvirtioの共通オペレーションを利用して確認し、新規のバッファ領域を取り出す。これにより、親から子または子から親へのデータの受け渡しが成立する。
以上のように、親子でお互いデータ交換用のRing Buffer52とそれぞれのリングバッファ用のオペレーション方法(virtioで共通)を共有することにより、ハードウェアエミュレーションを必要としない、Guest OS50と外部との通信を実現する。これにより、従来のハードウェアエミュレーションに比べ、Guest OS50と外部とのデータの送受信を高速に実現することが可能である。
仮想マシン内のGuest OS50が外部と通信する場合は、子側が外部と接続し、子側が外部と親側の中継役としてデータを送受信する必要がある。例えば、Guest OS50とHost OS20間の通信がその例の1つである。ここで、外部をHost OS20とした場合、既存の通信方法として2パターン存在する。
第1の方法(以下、外部通信方式1と呼ぶ)は、仮想マシン内に子側の端点を構築し、Guest OS50と仮想マシン間の通信と、Host OS20が提供する通信端点(通常、tap/tunデバイスと呼ばれる)を、仮想マシン内で接続する。この接続により以下のとおりの接続を構築し、Guest OS50からHost OS20への通信を実現する。
このとき、Guest OS50はtapドライバやHost OS20が動作するカーネル空間というメモリ領域とは異なる権限を持つユーザ空間であるメモリ領域で動作している。このため、Guest OS50からHost OS20への通信には最低1回メモリコピーが発生してしまう。
第2の方法(以下、外部通信方式2と呼ぶ)は、これを解決する手段として、vhost-netという技術が存在する。vhost-netでは一度仮想マシン内で構築された親側の構成情報(共有バッファキューの大きさ、キューの数、識別子、リングバッファへアクセスするための先頭アドレス情報など)をHost OS20内部のvhost-netモジュール221にコピーし、子側の端点の情報をホスト内部に構築する。この構築により、共有バッファキューの操作をGuest OS50とHost OS20間で直接実施することを可能とする技術である。これにより、コピーは実質0回で済むようになり、virtio-netに比べ、コピー回数が1回少ない分、外部通信方式1と比較し、より高速にデータ転送が実現できる。
このように、virtioで接続されたHost OS20とGuest OS50において、virtio-net関連のメモリコピー回数を減らすことにより、パケット転送処理を高速化することができる。
なお、kernel v4.10(2017.2~)以降、tapインターフェイスの仕様変更があり、tapデバイスから挿入されたパケットは、tapデバイスへパケットコピーを行った処理と同一コンテキスト内で完結されるようになった。これにより、ソフトウェア割込(softIRQ)の発生がなくなった。
[ポーリングモデルによるパケット転送(DPDKの例)]
複数の仮想マシンを接続、連携させる手法はInter-VM Communicationと呼ばれ、データセンタなどの大規模な環境では、VM間の接続には、仮想スイッチが標準的に利用されてきた。しかし、通信の遅延が大きい手法であることから、より高速な手法が新たに提案されている。例えば、SR-IOV(Single Root I/O Virtualization)と呼ばれる特別なハードウェアを用いる手法や、高速パケット処理ライブラリであるIntel DPDK(Intel Data Plane Development Kit)(以下、DPDKという)を用いたソフトウェアによる手法などが提案されている(非特許文献1参照)。
DPDKは、従来Linux kernel(登録商標)が行っていたNIC(Network Interface Card)の制御をユーザ空間で行うためのフレームワークである。Linux kernelにおける処理との最大の違いは、PMD(Pull Mode Driver)と呼ばれるポーリングベースの受信機構を持つことである。通常、Linux kernelでは、NICへのデータの到達を受けて、割込が発生し、それを契機に受信処理が実行される。一方、PMDは、データ到達の確認や受信処理を専用のスレッドが継続的に行う。コンテキストスイッチや割込などのオーバーヘッドを排除することで高速なパケット処理を行うことができる。DPDKは、パケット処理のパフォーマンスとスループットを大幅に高めて、データプレーン・アプリケーション処理に多くの時間を確保することを可能にする。
DPDKは、CPU(Central Processing Unit)やNICなどのコンピュータ資源を占有的に使用する。このため、SFCのようにモジュール単位で柔軟につなぎ替える用途には適用しづらい。これを緩和するためのアプリケーションであるSPP(Soft Patch Panel)がある。SPPは、VM間に共有メモリを用意し、各VMが同じメモリ空間を直接参照できる構成にすることで、仮想化層でのパケットコピーを省略する。また、物理NICと共有メモリ間のパケットのやり取りには、DPDKを用いて高速化を実現する。SPPは、各VMのメモリ交換の参照先を制御することで、パケットの入力先、出力先をソフトウェア的に変更することができる。この処理によって、SPPは、VM間やVMと物理NIC間の動的な接続切替を実現する。
特許文献2には、複数の仮想マシンを動作させる仮想マシンの接続制御システムが記載されている。すなわち、仮想マシンを含むリソースを管理するSPP(Soft Patch Panel)を備えるSPPサーバと、SPPサーバと連携し、前記仮想マシンを接続するためのリソース割り当ておよび経路設定をGUI(Graphical User Interface)操作により行うGUI端末と、を備えるサーバ内遅延制御システムが記載されている。特許文献2に記載の技術は、SPPの操作を抽象化し、GUIにより直感的に操作することができる仮想マシンの接続制御システムを提供する。
図8は、OvS-DPDK(Open vSwitch with DPDK)の構成における、ポーリングモデルによるパケット転送を説明する図である。図7と同一構成部分には、同一符号を付して重複箇所の説明を省略する。
図8に示すように、Host OS20は、パケット処理のためのソフトウェアであるOvS-DPDK70を備え、OvS-DPDK70は、仮想マシン(ここではVM1)に接続するための機能部であるvhost-user71と、NIC(DPDK)11(物理NIC)に接続するための機能部であるdpdk(PMD)72と、を有する。
また、パケット処理APL1Aは、Guest OS50区間においてポーリングを行う機能部であるdpdk(PMD)2を具備する。すなわち、パケット処理APL1Aは、図7のパケット処理APL1にdpdk(PMD)2を具備させて、パケット処理APL1を改変したAPLである。
ポーリングモデルによるパケット転送は、DPDKの拡張として、共有メモリを介してゼロコピーでHost OS20とGuest OS50間、および、Guest OS50間のパケットコピーを高速に行うSPPにおいて、GUIにより経路操作を可能とする。
[New API(NAPI)によるRx側パケット処理]
図9は、Linux kernel 2.5/2.6より実装されているNew API(NAPI)によるRx側パケット処理の概略図である(非特許文献2参照)。図7と同一構成部分には、同一符号を付している。
図9に示すように、New API(NAPI)は、OS70(例えば、Host OS)を備えるサーバ上で、ユーザが使用可能なuser space60に配置されたパケット処理APL1を実行し、OS70に接続されたHW10のNIC11とパケット処理APL1との間でパケット転送を行う。
OS70は、kernel71、Ring Buffer72、およびDriver73を有し、kernel71は、プロトコル処理部74を有する。
Kernel71は、OS70(例えば、Host OS)の基幹部分の機能であり、ハードウェアの監視やプログラムの実行状態をプロセス単位で管理する。ここでは、kernel71は、パケット処理APL1からの要求に応えるとともに、HW10からの要求をパケット処理APL1に伝える。Kernel71は、パケット処理APL1からの要求に対して、システムコール(「非特権モードで動作しているユーザプログラム」が「特権モードで動作しているカーネル」に処理を依頼)を介することで処理する。
Kernel71は、Socket75を介して、パケット処理APL1へパケットを伝達する。Kernel71は、Socket75を介してパケット処理APL1からパケットを受信する。
Ring Buffer72は、Kernel71が管理し、サーバ中のメモリ空間にある。Ring Buffer72は、Kernel71が出力するメッセージをログとして格納する一定サイズのバッファであり、上限サイズを超過すると先頭から上書きされる。
Driver73は、kernel71でハードウェアの監視を行うためデバイスドライバである。なお、Driver73は、kernel71に依存し、作成された(ビルドされた)カーネルソースが変われば、別物になる。この場合、該当ドライバ・ソースを入手し、ドライバを使用するOS上で再ビルドし、ドライバを作成することになる。
プロトコル処理部74は、OSI(Open Systems Interconnection)参照モデルが定義するL2(データリンク層)/L3(ネットワーク層)/L4(トランスポート層)のプロトコル処理を行う。
Socket75は、kernel71がプロセス間通信を行うためのインターフェイスである。Socket75は、ソケットバッファを有し、データのコピー処理を頻繁に発生させない。Socket75を介しての通信確立までの流れは、下記の通りである。1.サーバ側がクライアントを受け付けるソケットファイルを作成する。2.受付用ソケットファイルに名前をつける。3.ソケット・キューを作成する。4.ソケット・キューに入っているクライアントからの接続の最初の1つを受け付ける。5.クライアント側ではソケットファイルを作成する。6.クライアント側からサーバへ接続要求を出す。7.サーバ側で、受付用ソケットファイルとは別に、接続用ソケットファイルを作成する。通信確立の結果、パケット処理APL1は、kernel71に対してread()やwrite()などのシステムコールを呼び出せるようになる。
以上の構成において、Kernel71は、NIC11からのパケット到着の知らせを、ハードウェア割込(hardIRQ)により受け取り、パケット処理のためのソフトウェア割込(softIRQ)をスケジューリングする(図10参照)。
上記、Linux kernel 2.5/2.6より実装されているNew API(NAPI)は、パケットが到着するとハードウェア割込(hardIRQ)の後、ソフトウェア割込(softIRQ)により、パケット処理を行う。図9に示すように、割込モデルによるパケット転送は、割込処理(図9の符号c参照)によりパケットの転送を行うため、割込処理の待ち合わせが発生し、パケット転送の遅延が大きくなる。
以下、NAPI Rx側パケット処理概要について説明する。
[New API(NAPI)によるRx側パケット処理構成]
図10は、図9の破線で囲んだ箇所におけるNew API(NAPI)によるRx側パケット処理の概要を説明する図である。
<Device driver>
図10に示すように、Device driverには、ネットワークインターフェースカードであるNIC11(物理NIC)、NIC11の処理要求の発生によって呼び出され要求された処理(ハードウェア割込)を実行するハンドラであるhardIRQ81、およびハードウェア割込の処理機能部であるnetif_rx82が配置される。
<Networking layer>
Networking layerには、netif_rx82の処理要求の発生によって呼び出され要求された処理(ソフトウェア割込)を実行するハンドラであるsoftIRQ83、ソフトウェア割込(softIRQ)の実体を行う制御機能部であるdo_softirq84が配置される。また、ソフトウェア割込(softIRQ)を受けて実行するパケット処理機能部であるnet_rx_action85、NIC11からのハードウェア割込がどのデバイスのものであるかを示すネットデバイス(net_device)の情報を登録するpoll_list86、sk_buff構造体(Kernel71が、パケットがどうなっているかを知覚できるようにするための構造体)を作成するnetif_receive_skb87、Ring Buffer72が配置される。
<Protocol layer>
Protocol layerには、パケット処理機能部であるip_rcv88、arp_rcv89等が配置される。
上記netif_rx82、do_softirq84、net_rx_action85、netif_receive_skb87、ip_rcv88、およびarp_rcv89は、Kernel71の中でパケット処理のために用いられるプログラムの部品(関数の名称)である。
[New API(NAPI)によるRx側パケット処理動作]
図10の矢印(符号)d~oは、Rx側パケット処理の流れを示している。
NIC11のhardware機能部11a(以下、NIC11という)が、対向装置からフレーム内にパケット(またはフレーム)を受信すると、DMA(Direct Memory Access)転送によりCPUを使用せずに、Ring Buffer72へ到着したパケットをコピーする(図10の符号d参照)。このRing Buffer72は、サーバの中にあるメモリ空間で、Kernel71(図9参照)が管理している。
しかし、NIC11が、Ring Buffer72へ到着したパケットをコピーしただけでは、Kernel71は、そのパケットを認知できない。そこで、NIC11は、パケットが到着すると、ハードウェア割込(hardIRQ)をhardIRQ81に上げ(図10の符号e参照)、netif_rx82が下記の処理を実行することで、Kernel71は、当該パケットを認知する。なお、図10の楕円で囲んで示すhardIRQ81は、機能部ではなくハンドラを表記する。
netif_rx82は、実際に処理をする機能であり、hardIRQ81(ハンドラ)が立ち上がると(図10の符号f参照)、poll_list86に、ハードウェア割込(hardIRQ)の中身の情報の1つである、NIC11からのハードウェア割込がどのデバイスのものであるかを示すネットデバイス(net_device)の情報を保存して、キューの刈取り(バッファに溜まっているパケットの中身を参照して、そのパケットの処理を、次に行う処理を考慮してバッファから該当するキューのエントリを削除する)を登録する(図10の符号g参照)。具体的には、netif_rx82は、Ring Buffer72にパケットが詰め込まれたことを受けて、NIC11のドライバを使って、以後のキューの刈取りをpoll_list86に登録する(図10の符号g参照)。これにより、poll_list86には、Ring Buffer72にパケットが詰め込まれたことによる、キューの刈取り情報が登録される。
このように、図10の<Device driver>において、NIC11は、パケットを受信すると、DMA転送によりRing Buffer72へ到着したパケットをコピーする。また、NIC11は、hardIRQ81(ハンドラ)を上げ、netif_rx82は、poll_list86にnet_deviceを登録し、ソフトウェア割込(softIRQ)をスケジューリングする。
ここまでで、図10の<Device driver>におけるハードウェア割込の処理は停止する。
その後、netif_rx82は、poll_list86に積まれているキューに入っている情報(具体的にはポインタ)を用いて、Ring Buffer72に格納されているデータを刈取ることを、ソフトウェア割込(softIRQ)でsoftIRQ83(ハンドラ)に上げ(図10の符号h参照)、ソフトウェア割込の制御機能部であるdo_softirq84に通知する(図10の符号i参照)。
do_softirq84は、ソフトウェア割込制御機能部であり、ソフトウェア割込の各機能を定義(パケット処理は各種あり、割込処理はそのうちの一つ。割込処理を定義する)している。do_softirq84は、この定義をもとに、実際にソフトウェア割込処理を行うnet_rx_action85に、今回の(該当の)ソフトウェア割込の依頼を通知する(図10の符号j参照)。
net_rx_action85は、softIRQの順番がまわってくると、poll_list86に登録されたnet_deviceをもとに(図10の符号k参照)、Ring Buffer72からパケットを刈取るためのポーリングルーチンを呼び出し、パケットを刈取る(図10の符号l参照)。このとき、net_rx_action85は、poll_list86が空になるまで刈取りを続ける。
その後、net_rx_action85は、netif_receive_skb87に通達をする(図10の符号m参照)。
netif_receive_skb87は、sk_buff構造体を作り、パケットの内容を解析し、タイプ毎に後段のプロトコル処理部74(図9参照)へ処理をまわす。すなわち、netif_receive_skb87は、パケットの中身を解析し、パケットの中身に応じて処理をする場合には、<Protocol layer>のip_rcv88に処理を回し、また、例えばL2であればarp_rcv89に処理をまわす。
特開2015-197874号公報 特開2018-32156号公報
Soft Patch Panel, [online],[令和1年12月1日検索],インターネット 〈 URL : http://dpdk.org/browse/apps/spp/〉 New API(NAPI), [online],[令和1年12月1日検索],インターネット 〈 URL : http:// http://lwn.net/2002/0321/a/napi-howto.php3〉
しかしながら、割込モデルとポーリングモデルによるパケット転送のいずれについても下記課題がある。
割込モデルは、HWからイベント(ハードウェア割込)を受けたkernelがパケット加工を行うためのソフトウェア割込処理によってパケット転送を行う。このため、割込モデルは、割込(ソフトウェア割込)処理によりパケット転送を行うので、他の割込との競合や、割込先CPUがより優先度の高いプロセスに使用されていると待ち合わせが発生し、パケット転送の遅延が大きくなるといった課題がある。この場合、割込処理が混雑すると、更に待ち合わせ遅延は大きくなる。
例えば、図7に示すように、割込モデルによるパケット転送は、割込処理(図7の符号a,b参照)によりパケットの転送を行うため、割込処理の待ち合わせが発生し、パケット転送の遅延が大きくなる。
割込モデルにおいて、遅延が発生するメカニズムについて補足する。
一般的なkernelは、パケット転送処理はハードウェア割込処理の後、ソフトウェア割込処理にて伝達される。
パケット転送処理のソフトウェア割込が発生した際に、下記条件(1)~(3)においては、前記ソフトウェア割込処理を即時に実行することができない。このため、ksoftirqd(CPU毎のカーネルスレッドであり、ソフトウェア割込の負荷が高くなったときに実行される)等のスケジューラにより調停され、割込処理がスケジューリングされることにより、msオーダの待ち合わせが発生する。
(1)他のハードウェア割込処理と競合した場合
(2)他のソフトウェア割込処理と競合した場合
(3)優先度の高い他プロセスやkernel thread(migration thread等)、割込先CPUが使用されている場合
上記条件では、前記ソフトウェア割込処理を即時に実行することができない。
また、New API(NAPI)によるパケット処理についても同様に、図10の破線囲みpに示すように、割込処理(softIRQ)の競合に起因し、msオーダのNW遅延が発生する。
一方、ポーリングモデルは、CPUを占有して通信キューをポーリングし、パケット到着時に即時刈取る。ポーリングモデルは、転送遅延を小さくすることが可能であるものの、APLにポーリング機能を具備させる必要が生じるので、APLに改変が必要である。
例えば、図8に示すように、ポーリングモデルによるパケット転送は、パケット処理APL1にGuest OS50区間においてポーリングを行う機能部であるdpdk(PMD)2を具備させる必要があり、パケット処理APL1の改変が必要となる。
このような背景を鑑みて本発明がなされたのであり、本発明は、APLを改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことを課題とする。
前記した課題を解決するため、本発明は、サーバ内遅延制御装置であって、OSが、カーネルと、前記OSを備えるサーバ中のメモリ空間で、前記カーネルが管理するリングバッファと、インターフェイス部からのハードウェア割込がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリストと、を有し、前記カーネル内に、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げる前記サーバ内遅延制御装置を備えており、前記サーバ内遅延制御装置は、前記ポールリストを監視するパケット到着監視部と、記リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリを前記リングバッファから削除する刈取りを実行するパケット刈取部と、を備えることを特徴とするサーバ内遅延制御装置とした。
本発明によれば、APLを改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことができる。
本発明の実施形態に係るサーバ内遅延制御システムの概略構成図である。 本発明の実施形態に係るサーバ内遅延制御システムのNew API(NAPI)によるRx側パケット処理の詳細を説明する図である。 本発明の実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置のRx側動作を示すフローチャートである。 本発明の実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。 汎用Linux kernelおよびVM構成のサーバ仮想化環境における、割込モデルに、サーバ内遅延制御システムを適用した例を示す図である。 コンテナ構成のサーバ仮想化環境における、割込モデルに、サーバ内遅延制御システムを適用した例を示す図である。 汎用Linux kernelおよびVM構成のサーバ仮想化環境における、割込モデルによるパケット転送を説明する図である。 OvS-DPDKの構成における、ポーリングモデルによるパケット転送を説明する図である。 Linux kernel 2.5/2.6より実装されているNew API(NAPI)によるRx側パケット処理の概略図である。 図9の破線で囲んだ箇所におけるNew API(NAPI)によるRx側パケット処理の概要を説明する図である。
以下、図面を参照して本発明を実施するための形態(以下、「本実施形態」という)におけるサーバ内遅延制御システム等について説明する。
[概要]
図1は、本発明の実施形態に係るサーバ内遅延制御システムの概略構成図である。本実施形態は、Linux kernel 2.5/2.6より実装されているNew API(NAPI)によるRx側パケット処理に適用した例である。図9と同一構成部分には、同一符号を付している。
図1に示すように、サーバ内遅延制御システム1000は、OS70(例えば、Host OS)を備えるサーバ上で、ユーザが使用可能なuser space60に配置されたパケット処理APL1を実行し、OS170に接続されたHW10のNIC11とパケット処理APL1との間でパケット転送を行う。
OS70は、kernel171、Ring Buffer72、およびDriver73を有し、kernel171は、サーバ内遅延制御装置100およびプロトコル処理部74を有する。
本実施形態では、kernel171が、サーバ内遅延制御装置100を備える関係で、図9に示すkernel71と区別して新たな番号を付している。kernel171は、サーバ内遅延制御装置100が設置されている以外は、図9に示すkernel71(図9参照)と同一機能である。ただし、kernel171は、livepatch(後記)を用いることで、既存のkernel71(図9参照)を改造(新しくビルド)することなく、実現が可能である。
kernel171は、OS70(例えば、Host OS)の基幹部分の機能であり、ハードウェアの監視やプログラムの実行状態をプロセス単位で管理する。ここでは、kernel171は、パケット処理APL1からの要求に応えるとともに、HW10からの要求をパケット処理APL1に伝える。kernel171は、パケット処理APL1からの要求に対して、システムコールを介することで処理する。
kernel171は、Socket75を介して、パケット処理APL1へパケットを送信する。Kernel71は、Socket75を介してパケット処理APL1からパケットを受信する。
Ring Buffer72は、サーバの中にあるメモリ空間においてkernel171が管理する。Ring Buffer72は、kernel171が出力するメッセージをログとして格納する一定サイズのバッファであり、上限サイズを超過すると先頭から上書きされる。
Driver73は、kernel171でハードウェアの監視を行うためデバイスドライバである。
プロトコル処理部74は、OSI参照モデルが定義するL2/L3/L4のプロトコル処理を行う。
Socket75は、kernel171がプロセス間通信を行うためのインターフェイスである。Socket75は、ソケットバッファを有し、データのコピー処理を頻繁に発生させない。
<サーバ内遅延制御装置>
サーバ内遅延制御装置100は、パケット到着監視部110と、パケット刈取部120と、を備える。
パケット到着監視部110は、パケットが到着していないかを監視するためのthreadである。パケット到着監視部110は、poll_list186(図2参照)を常に監視(busy poll)する。
パケット到着監視部110は、poll_list86からRing_Buffer72(図2参照)にパケットが存在するポインタ情報と、net_device情報とを取得し、パケット刈取部120へ当該情報(ポインタ情報およびnet_device情報)を伝達する。ここで、poll_list186に複数パケット情報が存在する場合は、複数分当該情報を伝達する。
パケット刈取部120は、パケットが到着している場合は、Ring Buffer72に保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリをRing Buffer72から削除する刈取りを実行する(以下、単にRing Buffer72からパケットを刈取るという場合がある)。パケット刈取部120は、受信した情報をもとにRing_Buffer72からパケットを取り出し、netif_receive_skb87へパケットを伝達する。
図2は、図1のサーバ内遅延制御システム1000のNew API(NAPI)によるRx側パケット処理の詳細を説明する図である。図1および図10と同一構成部分には、同一符号を付している。
<Device driver>
図2に示すように、Device driverには、ネットワークインターフェースカードであるNIC11、NIC11の処理要求の発生によって呼び出され要求された処理(ハードウェア割込)を実行するハンドラであるhardIRQ81、およびハードウェア割込の処理機能部であるnetif_rx182が配置される。
<Networking layer>
Networking layerには、NIC11からのハードウェア割込がどのデバイスのものであるかを示すネットデバイス(net_device)の情報を登録するpoll_list186、パケット到着監視部110、キューを刈取ったパケットを、割込の発生しないソケット通信のためのsk_buff構造体(kernel171が、パケットの状態を示す構造体)を作成するnetif_receive_skb87、およびRing Buffer72が配置される。
<Protocol layer>
Protocol layerには、パケット処理機能部であるip_rcv88、arp_rcv89等が配置される。なお、プロトコル処理は、ip_rcv88、arp_rcv89以外にもある。
上記netif_rx182、do_softirq84、net_rx_action85、netif_receive_skb87、ip_rcv88、およびarp_rcv89は、Kernel171の中でパケット処理のために呼ばれるプログラムの部品(関数の名称)である。
以下、サーバ内遅延制御システム1000の動作を説明する。
[New API(NAPI)によるRx側パケット処理動作]
図2の矢印(符号)d~g,k~oは、Rx側パケット処理の流れを示している。
NIC11が、対向装置からフレーム内にパケット(またはフレーム)を受信すると、DMA転送によりCPUを使用せずに、Ring Buffer72へ到着したパケットをコピーする(図2の符号d参照)。このRing Buffer72は、サーバ中のメモリ空間で、Kernel171(図1参照)が管理している。
NIC11は、パケットが到着すると、ハードウェア割込(hardIRQ)をhardIRQ81(ハンドラ)に立ち上げ(図2の符号e参照)、netif_rx182が下記の処理を実行することで、Kernel171は、当該パケットを認知する。
netif_rx182は、hardIRQ81(ハンドラ)が立ち上がると(図2の符号f参照)、poll_list186に、ハードウェア割込(hardIRQ)の中身の情報の1つである、NIC11からのハードウェア割込がどのデバイスのものであるかを示すネットデバイス(net_device)の情報を保存して、キューの刈取り情報を登録する(図2の符号g参照)。具体的には、netif_rx182は、Ring Buffer72にパケットが詰め込まれたことを受けて、NIC11のドライバを使って、以後のキューの刈取りをpoll_list186に登録する(図2の符号g参照)。これにより、poll_list186には、Ring Buffer72にパケットが詰め込まれたことによる、キューの刈取りが登録される。
netif_rx182は、poll_list186にnet_deviceを登録するが、図10のnetif_rx82とは異なり、ソフトウェア割込(softIRQ)のスケジューリングは行わない。すなわち、netif_rx182は、ソフトウェア割込(softIRQ)のスケジューリングは行わない点で、図10のnetif_rx82とは異なる。
ここまでで、図2の<Device driver>におけるハードウェア割込の処理は停止する。
本実施形態では、図10に示す<Networking layer>において、softIRQ83およびdo_softirq84が削除され、これに伴い、図10に示すnetif_rx82が、softIRQ83(ハンドラ)を立ち上げる通知(図10の符号h参照)も行わない。
本実施形態では、サーバ内遅延制御システム1000は、図10に示すsoftIRQ83およびdo_softirq84を削除し、代わりに図2に示す<Networking layer>のサーバの中にあるメモリ空間に、サーバ内遅延制御装置100を設ける。
図2に示す<Networking layer>において、サーバ内遅延制御装置100のパケット到着監視部110は、poll_list186を常に監視(busy poll)し(図2の符号k参照)、パケット到着有無を確認する。
パケット到着監視部110は、poll_list186から、Ring_Buffer72にパケットが存在するポインタ情報と、net_device情報とを取得し、パケット刈取部120へ当該情報(ポインタ情報およびnet_device情報)を伝達する(図2の符号q参照)。ここで、poll_list186に複数パケット情報が存在する場合は、複数分当該情報を伝達する。
サーバ内遅延制御装置100のパケット刈取部120は、パケットが到着している場合は、Ring Buffer72からパケットを刈取る(図2の符号l参照)。
パケット刈取部120は、受信した情報をもとにRing_Buffer72からパケットを取り出し、netif_receive_skb87へパケットを伝達する(図2の符号m参照)。
このように、サーバ内遅延制御システム1000は、NW遅延発生の主要因であるパケット処理のsoftIRQを停止し、サーバ内遅延制御装置100のパケット到着監視部110がパケット到着を常に監視するthreadを実行する。そして、パケット刈取部120が、パケット到着時に、pollingモデル(softIRQなし)によりパケット処理を行う。
netif_receive_skb87は、sk_buff構造体を作り、パケットの内容を解析し、タイプ毎に後段のプロトコル処理部74(図9参照)へ処理をまわす。すなわち、netif_receive_skb87は、パケットの中身を解析し、パケットの中身に応じて処理をする場合には、<Protocol layer>のip_rcv88に処理を回し、また、例えばL2であればarp_rcv89に処理をまわす。
[live patchによる登録動作]
次に、live patchによる登録動作について説明する。
サーバ内遅延制御システム1000(図1参照)は、図1に示すOS70のkernel171が、サーバ内遅延制御装置100を備える。kernel171は、livepatchを用いることで、既存のkernel71(図9参照)を改造(新しくビルド)することなく、実現が可能になる。以下、kernel171に適用されるlivepatchについて説明する。
livepatchは、Linux(登録商標)kernelに適用されるカーネルパッチ機能である。livepatchを使うことで、システムを再起動することなくカーネル空間に即座に修正を適用することができる。すなわち、
(1)livepatchは、netif_rx182(図2参照)のsoftIRQスケジューリング機能を抑制する。
(2)livepatchは、パケット到着監視を行うthread(パケット到着監視部110、具体的にはisol_net_rx)を起動する。起動する際、他プロセスやkernel threadにbusy poll(図2の符号k参照)の邪魔をされないように、thread(パケット到着監視部110)は、CPUコアを専有する。そのために、当該threadはリアルタイムプロセス等の高優先設定を割り当てる。トラヒックフロー数(または、トラヒック量)に応じて、複数CPUコア上でthreadを起動し、監視するpoll_list186(図2参照)を割り当てる。これにより、トラヒックフロー(トラヒック量)に応じたスケールアウトが可能になる。
以降、図2に示すパケット処理の動作が実行される。
[サーバ内遅延制御装置100のRx側パケット処理動作フロー]
図3は、サーバ内遅延制御装置100(図2参照)のRx側動作を示すフローチャートである。図2を参照してRx側動作を説明する。
ステップS11では、サーバ内遅延制御装置100のパケット到着監視部110(図2参照)は、poll_list186(図2参照)をCPUを専有して常に監視(busy poll)し(図2の符号k参照)、パケット到着有無を確認する。
ステップS12では、パケット到着監視部110(図2参照)は、poll list186にパケット到着を意味するポインタ情報があるか否かを判別する。
poll list186にパケット到着を意味するポインタ情報がある場合(S12:Yes)、ステップS13に進み、poll list186にパケット到着を意味するポインタ情報がない場合(S12:No)、本フローの処理を終了する。
ステップS13では、パケット到着監視部110は、poll_list186からRing_Buffer72(図2参照)にパケットが存在するポインタ情報と、NET_DEVICE情報とを取得し、パケット刈取部120へ当該情報(ポインタ情報およびNET_DEVICE情報)を伝達する(図2の符号q参照)。ここで、poll_list186に複数パケット情報が存在する場合は、複数分当該情報を伝達する。
ステップS14では、サーバ内遅延制御装置100のパケット刈取部120(図2参照)は、パケットが到着している場合は、Ring Buffer72に保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリをRing Buffer72から削除する刈取りを実行する(図2の符号l参照)。
ステップS15では、パケット刈取部120は、受信した情報をもとにRing_Buffer72からパケットを取り出し、netif_receive_skb87へパケットを伝達して(図2の符号m参照)、本フローの処理を終了する。
[本実施形態と既存技術との差異]
次に、本実施形態と既存技術(図10参照)との差異について説明する。
<背景>
一般に、ハードウェア割込(hardIRQ)は、優先度が高く、該当CPUの処理を中断し、hardIRQの処理を最優先で処理する必要がある。このため、オーバーヘッドが大きい。そのため、hardIRQでは、パケット到着を知らせるのみとし、パケット処理は、softIRQで処理する設計思想となっている(「kernelの原則」という)。ここで、softIRQは、他のsoftIRQと競合し、待たされる事象が発生する(遅延発生の要因となる)。
従来技術が割込モデルにしている理由は、かつてはCPUリソースが限られていた(または、Raspberry PiのようなSingle board ComputerのようにCPUコアが少ないデバイスでも動作させる)ために、1つのCPUコアを他の処理と共有して使用する設計思想になっていたためである。この場合、通常の処理や割込処理等でCPUタイムを切り替えながら処理を行う。上記割込処理であっても、softIRQは競合することになり、待ち時間が発生する。
なお、softIRQのスケジューリングを行うスケジューラであるksoftirqdは、softIRQの種別に応じて優先度を付与する機能を具備しておらず、この競合による遅延発生は抑制できない。
<既存技術(図10参照)>
図10に示すように、kernel71(図9)は、NIC11からのパケット到着の知らせを、hardIRQにより受け取り(図10の符号h参照)、パケット処理のためのsoftIRQをスケジューリングする(図10の破線囲みp参照)。この際、他の割込処理と競合すると待合せが発生し、msオーダのNW遅延が発生する。
<サーバ内遅延制御システム1000(図2参照)>
図2に示すように、サーバ内遅延制御システム1000は、<Networking layer>において、netif_rx182は、poll_list86にnet_deviceを登録するが、既存技術(図10参照)のnetif_rx82とは異なり、ソフトウェア割込(softIRQ)のスケジューリングは行わない(「変更点1」)。
図2に示すように、サーバ内遅延制御システム1000は、<Networking layer>のサーバの中にあるメモリ空間に、サーバ内遅延制御装置100を設ける(「変更点2」)。
サーバ内遅延制御装置100のパケット到着監視部110は、poll_list186を常に監視(busy poll)し(図2の符号k参照)、パケット到着有無を確認する。
パケット到着監視部110は、poll_list186からRing_Buffer72にパケットが存在するポインタ情報と、NET_DEVICE情報とを取得し、パケット刈取部120へ当該情報(ポインタ情報およびNET_DEVICE情報)を伝達する(図2の符号q参照)。
サーバ内遅延制御装置100のパケット刈取部120は、パケットが到着している場合は、Ring Buffer72からパケットを刈取る(図2の符号l参照)。
パケット刈取部120は、受信した情報をもとにRing_Buffer72からパケットを取り出し、netif_receive_skb87へパケットを伝達する(図2の符号m参照)。
上記「変更点1」による作用効果は、下記の通りである。
まず、本実施形態では、ハードウェア割込(hardIRQ)によるパケット到着の通知については、NAPIを踏襲する。softIRQは、CPUリソースを有効活用する点では便利であるが、パケットの即時転送の観点では適さない。そのため、本実施形態では、softIRQの機能を停止し、kernelの中でpollingモデルを実現する点が新しい。具体的には、図2に示すnetif_rx182が、図10に示すnetif_rx82のように、softIRQ83(ハンドラ)を立ち上げる通知(図10の符号h参照)を行わないことに示されている。
なお、pollingモデルについては、ユーザスペースからpollingを行うDPDKが既存技術としてある(図8参照)。しかしながら、DPDKは、APLからpollingを行うため、APLに改変が必要である。
上記「変更点2」による作用効果は、下記の通りである。
本実施形態は、図2に示すkernel171の中でpolling専用のthread(サーバ内遅延制御装置100のパケット到着監視部110)を起動し、サーバ内遅延制御装置100のパケット刈取部120が、パケット到着時に、pollingモデル(softIRQなし)によりパケット処理を行う。これにより、APL改変不要になる、換言すれば、既存のPOSIX socket APIを利用することが可能になる。
また、前述threadが他のsoftIRQなどにCPUタイムを奪われないようにするために、上記[live patchによる登録]で述べたように、thread起動時にCPUコアを専有し、高優先設定を行うことで、pollingの邪魔をさせない。
[ハードウェア構成]
本実施形態に係るサーバ内遅延制御装置100は、例えば図4に示すような構成のコンピュータ900によって実現される。
図4は、サーバ内遅延制御装置100の機能を実現するコンピュータ900の一例を示すハードウェア構成図である。
コンピュータ900は、CPU910、RAM920、ROM930、HDD940、通信インターフェイス(I/F:Interface)950、入出力インターフェイス(I/F)960、およびメディアインターフェイス(I/F)970を有する。
CPU910は、ROM930またはHDD940に格納されたプログラムに基づいて動作し、各部の制御を行う。ROM930は、コンピュータ900の起動時にCPU910によって実行されるブートプログラムや、コンピュータ900のハードウェアに依存するプログラム等を格納する。
HDD940は、CPU910によって実行されるプログラム、および、かかるプログラムによって使用されるデータ等を格納する。通信インターフェイス950は、通信網80を介して他の機器からデータを受信してCPU910へ送り、CPU910が生成したデータを通信網80を介して他の機器へ送信する。
CPU910は、入出力インターフェイス960を介して、ディスプレイやプリンタ等の出力装置、および、キーボードやマウス等の入力装置を制御する。CPU910は、入出力インターフェイス960を介して、入力装置からデータを取得する。また、CPU910は、生成したデータを入出力インターフェイス960を介して出力装置へ出力する。
メディアインターフェイス970は、記録媒体980に格納されたプログラムまたはデータを読み取り、RAM920を介してCPU910に提供する。CPU910は、かかるプログラムを、メディアインターフェイス970を介して記録媒体980からRAM920上にロードし、ロードしたプログラムを実行する。記録媒体980は、例えばDVD(Digital Versatile Disc)、PD(Phasechangerewritable Disk)等の光学記録媒体、MO(Magneto Optical disk)等の光磁気記録媒体、テープ媒体、磁気記録媒体、または半導体メモリ等である。
例えば、コンピュータ900が本実施形態に係るサーバ内遅延制御装置100として機能する場合、コンピュータ900のCPU910は、RAM920上にロードされたプログラムを実行することにより、サーバ内遅延制御装置100の各部の機能を実現する。また、HDD940には、サーバ内遅延制御装置100の各部内のデータが格納される。コンピュータ900のCPU910は、これらのプログラムを記録媒体980から読み取って実行するが、他の例として、他の装置から通信網80を介してこれらのプログラムを取得してもよい。
[適用例]
サーバ内遅延制御装置100は、Kernel内に、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げるサーバ内遅延制御装置であればよく、OSは限定されない。また、サーバ仮想化環境下であることも限定されない。したがって、サーバ内遅延制御システム1000は、図5および図6に示す各構成に適用が可能である。
<VM構成への適用例>
図5は、汎用Linux kernel(登録商標)およびVM構成のサーバ仮想化環境における、割込モデルに、サーバ内遅延制御システム1000Aを適用した例を示す図である。図1および図7と同一構成部分には、同一符号を付している。
図5に示すように、サーバ内遅延制御システム1000Aは、Guest OS70のKernel171内にサーバ内遅延制御装置100が配置され、Host OS90のKernel91内にサーバ内遅延制御装置100が配置される。
詳細には、サーバは、仮想マシンおよび仮想マシン外に形成された外部プロセスが動作可能なHost OS90と、仮想マシン内で動作するGuest OS70と、を備える。
HostOS90は、Kernel91と、HostOS90を備えるサーバ中のメモリ空間で、Kernel91が管理するRing Buffer22と、NIC11からのハードウェア割込(hardIRQ)がどのデバイスのものであるかを示すネットデバイスの情報を登録するpoll_list186(図2)と、kernel threadであるvhost-netモジュール221と、Kernel91により作成される仮想インターフェイスであるtapデバイス222と、仮想スイッチ(br)223と、を有する。
Kernel91は、poll_list186を常に監視(busy poll)するパケット到着監視部110と、パケットが到着している場合は、Ring Buffer22に保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリをRing Buffer22から削除する刈取りを実行するパケット刈取部120と、を備える。
Kernel91は、tapデバイス222を介して、仮想マシン30へパケットを伝達する。
一方、GuestOS70は、Kernel171と、GuestOS70を備えるサーバ中のメモリ空間で、Kernel171が管理するRing Buffer52と、NIC11からのハードウェア割込(hardIRQ)がどのデバイスのものであるかを示すネットデバイスの情報を登録するpoll_list186 (図2)と、Kernel171が、プロセス間通信を行うためのインターフェイスであるSocket75と、を備える。
Kernel171は、poll_list186を常に監視(busy poll)するパケット到着監視部110と、パケットが到着している場合は、Ring Buffer52に保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリをRing Buffer52から削除する刈取りを実行するパケット刈取部120と、刈取りが実行されたパケットのプロトコル処理を行うプロトコル処理部74と、を備える。
Kernel171は、プロトコル処理部74を介して、パケット処理APL1へパケットを伝達する。
このようにすることにより、VMの仮想サーバ構成のシステムにおいて、HostOS90とGuestOS70とのいずれのOSにおいても、APLを改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことができる。
<コンテナ構成への適用例>
図6は、コンテナ構成のサーバ仮想化環境における、割込モデルに、サーバ内遅延制御システム1000Bを適用した例を示す図である。図1と同一構成部分には、同一符号を付している。
図6に示すように、サーバ内遅延制御システム1000Bは、Guest OS180と、OSをContainer210に代えた、コンテナ構成を備える。Container210は、vNIC(仮想NIC)211を有する。Guest OS180のKernel181内にサーバ内遅延制御装置100が配置される。
コンテナなどの仮想サーバ構成のシステムにおいて、APLを改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことができる。
<ペアメタル構成(非仮想化構成)への適用例>
本発明は、ペアメタル構成のように非仮想化構成のシステムに適用できる。非仮想化構成のシステムにおいて、APL3を改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことができる。
<拡張技術>
本発明は、トラヒックフロー数が増えた場合に、インバウンドのネットワークトラフィックを複数CPUで処理可能なRSS(Receive-Side Scaling)と連携して、パケット到着監視threadに割り当てるCPU数を増やすことで、ネットワーク負荷に対するスケールアウトが可能になる。
[効果]
以上説明したように、OS(OS70)が、カーネル(Kernel171)と、OSを備えるサーバ中のメモリ空間で、カーネルが管理するリングバッファ(Ring Buffer72)と、インターフェイス部(NIC11)からのハードウェア割込(hardIRQ)がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリスト(poll_list186)と、を有し、カーネル内に、ポーリングモデルを用いてパケット到着を監視するスレッド(thread)を立ち上げるサーバ内遅延制御装置100を備えており、サーバ内遅延制御装置100は、ポールリストを監視(busy poll)するパケット到着監視部110と、パケットが到着している場合は、リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリをリングバッファから削除する刈取りを実行するパケット刈取部120と、を備える。
このようにすることで、サーバ内遅延制御装置100は、NW遅延発生の主要因であるパケット処理のソフトウェア割込(softIRQ)を停止し、サーバ内遅延制御装置100のパケット到着監視部110がパケット到着を常に監視するthreadを実行し、パケット刈取部120が、パケット到着時に、pollingモデル(softIRQなし)によりパケット処理を行う。これにより、下記(1)~(3)の効果を奏する。
(1)遅延発生の原因となるパケット到着時のソフトウェア割込(softIRQ)を停止し、カーネル(Kernel171)内でpollingモデルを実現する。すなわち、サーバ内遅延制御システム1000は、既存技術のNAPIと異なり、NW遅延の主要因となる割込モデルではなく、pollingモデルを実現する。パケット到着時は、待合せなく即時に刈り取られるため、低遅延なパケット処理を実現することができる。
(2)APLにパケット高速転送のための機能を具備させる必要がなく、APLはカーネル(Kernel171)が持つ既存POSIX socket APIとのインタワークを行うだけでよい。すなわち、サーバ内遅延制御システム1000は、既存技術のDPDKと異なり、kernel内でpollingモデルを実現するため、APLに改変が不要である。具体的には、図8に示すように、パケット高速転送のための機能(図8のdpdk(PMD)2参照)を、パケット処理APL1A(図8参照)具備させる必要がなく、本サーバ内遅延制御システム1000のパケット処理APL1(図1参照)は、kernelが持つ既存POSIX socket APIとのインタワークを行うだけでよい。このため、APLを改変することなく、実現が可能である。
(3)同様の理由で、独自のkernelを作る必要がなく、実現が可能である。
また、仮想マシン内で動作するGuest OS(GuestOS70)が、カーネル(Kernel171)と、Guest OSを備えるサーバ中のメモリ空間で、カーネルが管理するリングバッファ(Ring Buffer52)と、インターフェイス部(NIC11)からのハードウェア割込(hardIRQ)がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリスト(poll_list186)と、刈取りが実行されたパケットのプロトコル処理を行うプロトコル処理部74と、を有し、カーネル内に、ポーリングモデルを用いてパケット到着を監視するスレッド(thread)を立ち上げるサーバ内遅延制御装置100を備えており、サーバ内遅延制御装置100は、ポールリストを監視(busy poll)するパケット到着監視部110と、パケットが到着している場合は、リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリをリングバッファから削除する刈取りを実行するパケット刈取部120と、を備えることを特徴とする。
このようにすることにより、VMの仮想サーバ構成のシステムにおいて、Guest OS(GuestOS70)を備えるサーバについて、APLを改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことができる。
また、仮想マシンおよび仮想マシン外に形成された外部プロセスが動作可能なHost OS(HostOS90)が、カーネル(Kernel91)と、Host OSを備えるサーバ中のメモリ空間で、カーネルが管理するリングバッファ(Ring Buffer22)と、インターフェイス部(NIC11)からのハードウェア割込(hardIRQ)がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリスト(poll_list186)と、カーネル(Kernel91)により作成される仮想インターフェイスであるtapデバイス222と、を備え、カーネル内に、ポーリングモデルを用いてパケット到着を監視するスレッド(thread)を立ち上げるサーバ内遅延制御装置100を備えており、サーバ内遅延制御装置100は、ポールリストを監視(busy poll)するパケット到着監視部110と、パケットが到着している場合は、リングバッファ(Ring Buffer22)に保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリをリングバッファ(Ring Buffer22)から削除する刈取りを実行するパケット刈取部120と、を備えることを特徴とする。
このようにすることにより、VMの仮想サーバ構成のシステムにおいて、カーネル(Kernel91)とHost OS(HostOS90)とを備えるサーバについて、APLを改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことができる。
サーバ内遅延制御装置100において、カーネル(Kernel171)は、当該カーネル(Kernel171)を起動させたまま、処理動作を変更可能なパッチ(livepatch)を有することを特徴とする。
このようにすることにより、livepatchを用いて、(Kernel171)を起動させたまま、処理動作が変更可能になるので、kernelの改造が不要である。このため、例えばkernelのセキュリティアップデートの度に、開発し直す必要がなく、関連するkernel機能に変更があった場合のみ、処理動作を変更すればよい。
なお、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行するためのソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、IC(Integrated Circuit)カード、SD(Secure Digital)カード、光ディスク等の記録媒体に保持することができる。
1 パケット処理APL(アプリケーション)
10 HW
11 NIC(物理NIC)(インターフェイス部)
22,52,72 Ring Buffer(リングバッファ)
70 OS
74 プロトコル処理部
60 user space(ユーザスペース)
90 Host OS(OS)
91,171,181 Kernel(カーネル)
100 サーバ内遅延制御装置
110 パケット到着監視部
120 パケット刈取部
180 Guest OS(OS)
186 poll_list(ポールリスト)
210 Container
1000,1000A,1000B サーバ内遅延制御システム

Claims (15)

  1. サーバ内遅延制御装置であって、
    OSが、
    カーネルと、
    前記OSを備えるサーバ中のメモリ空間で、前記カーネルが管理するリングバッファと、
    インターフェイス部からのハードウェア割込がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリストと、を有し、
    前記カーネル内に、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げる前記サーバ内遅延制御装置を備えており、
    前記サーバ内遅延制御装置は、
    前記ポールリストを監視するパケット到着監視部と、
    記リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリを前記リングバッファから削除する刈取りを実行するパケット刈取部と、を備える
    ことを特徴とするサーバ内遅延制御装置。
  2. サーバ内遅延制御装置であって、
    仮想マシン内で動作するOSである Guest OSが、
    カーネルと、
    前記Guest OSを備えるサーバ中のメモリ空間で、前記カーネルが管理するリングバッファと、
    インターフェイス部からのハードウェア割込がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリストと、
    刈取りが実行されたパケットのプロトコル処理を行うプロトコル処理部と、を有し、
    前記カーネル内に、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げる前記サーバ内遅延制御装置を備えており、
    前記サーバ内遅延制御装置は、
    前記ポールリストを監視するパケット到着監視部と、
    記リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリを前記リングバッファから削除する刈取りを実行するパケット刈取部と、を備える
    ことを特徴とするサーバ内遅延制御装置。
  3. サーバ内遅延制御装置であって、
    仮想マシンおよび前記仮想マシン外に形成された外部プロセスが動作可能なOSであるHost OSが、
    カーネルと、
    前記Host OSを備えるサーバ中のメモリ空間で、前記カーネルが管理するリングバッファと、
    インターフェイス部からのハードウェア割込がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリストと、
    前記カーネルにより作成される仮想インターフェイスであるtapデバイスと、を備え、
    前記カーネル内に、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げる前記サーバ内遅延制御装置を備えており、
    前記サーバ内遅延制御装置は、
    前記ポールリストを監視するパケット到着監視部と、
    記リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリを前記リングバッファから削除する刈取りを実行するパケット刈取部と、を備える
    ことを特徴とするサーバ内遅延制御装置。
  4. 前記カーネルは、当該カーネルを起動させたまま、処理動作を変更可能なパッチを有する
    ことを特徴とする請求項1乃至請求項3のいずれか一項に記載のサーバ内遅延制御装置。
  5. ポーリングモデルによりパケットの到着を監視するパケット到着監視部と、
    リングバッファに保持したパケットを参照し、前記リングバッファへの到着が検知された前記パケットを取得するパケット刈取部と、
    前記パケット到着監視部と前記パケット刈取部とを含むカーネルと、を備え、
    前記パケット到着監視部は、
    当該カーネル内で、前記ポーリングモデルによりパケット到着を監視するスレッドを起動させる
    ことを特徴とするサーバ。
  6. 仮想マシン内で動作するOSであるGuest OSが、
    前記Guest OSを備えるサーバ中のメモリ空間で、カーネルが管理するリングバッファと、
    ポーリングモデルによりパケットの到着を監視するパケット到着監視部と、
    リングバッファに保持したパケットを参照し、前記リングバッファへの到着が検知された前記パケットを取得するパケット刈取部と、を備える
    ことを特徴とするサーバ。
  7. 仮想マシンおよび前記仮想マシン外に形成された外部プロセスが動作可能なOSであるHost OSが、
    前記Host OSを備えるサーバ中のメモリ空間で、カーネルが管理するリングバッファと、
    ポーリングモデルによりパケットの到着を監視するパケット到着監視部と、
    リングバッファに保持したパケットを参照し、前記リングバッファへの到着が検知された前記パケットを取得するパケット刈取部と、を備える
    ことを特徴とするサーバ。
  8. 前記カーネルは、当該カーネルを起動させたまま、処理動作を変更可能なパッチを有する
    ことを特徴とする請求項5乃至請求項7のいずれか一項に記載のサーバ
  9. 前記パケット到着監視部が監視する対象は、インターフェイス部からのハードウェア割込がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリストである
    ことを特徴とする請求項5乃至請求項8のいずれか一項に記載のサーバ。
  10. 前記カーネルは、流入するパケット量に応じて、スレッドに割り当てるCPUの数を増減する
    ことを特徴とする請求項5または請求項6に記載のサーバ。
  11. 前記パケット刈取部は、
    パケットが到着している場合、前記リングバッファに保持したパケットを参照する
    ことを特徴とする請求項5乃至請求項8のいずれか一項に記載のサーバ。
  12. サーバ内遅延制御装置のサーバ内遅延制御方法であって、
    OSを備えるサーバ中のメモリ空間で、ーネルが管理するリングバッファと、
    インターフェイス部からのハードウェア割込がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリストと、を前記サーバが有し、前記カーネル内に前記サーバ内遅延制御装置を備え、
    前記サーバ内遅延制御装置は、前記カーネル内に、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げるサーバ内遅延制御ステップ実行し
    前記サーバ内遅延制御ステップは、
    前記ポールリストを監視するステップと、
    記リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリを前記リングバッファから削除する刈取りを実行するステップと、を含む
    ことを特徴とするサーバ内遅延制御方法。
  13. サーバのサーバ内遅延制御方法であって、
    前記サーバは、
    ポーリングモデルによりパケットの到着を監視するパケット到着監視ステップと、
    リングバッファに保持したパケットを参照し、前記リングバッファへの到着が検知された前記パケットを取得するパケット取得ステップと、を実行するとともに、
    前記パケット到着監視ステップでは、
    前記サーバのカーネル内で、前記ポーリングモデルによりパケット到着を監視するスレッドを起動させる
    ことを特徴とするサーバ内遅延制御方法。
  14. OSが、
    カーネルと、
    前記OSを備えるサーバ中のメモリ空間で、前記カーネルが管理するリングバッファと、
    インターフェイス部からのハードウェア割込がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリストと、を有し、
    前記カーネル内に、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げるサーバ内遅延制御装置を備えており、前記サーバ内遅延制御装置としてのコンピュータに、
    前記ポールリストを監視するパケット到着監視手順、
    記リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリを前記リングバッファから削除する刈取りを実行するパケット刈取手順、
    を実行させるためのプログラム。
  15. カーネル内に、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げるサーバとしてのコンピュータに、
    ポーリングモデルによりパケットの到着を監視するパケット到着監視手順、
    リングバッファに保持したパケットを参照し、前記リングバッファへの到着が検知された前記パケットを取得する手順、
    を実行させるためのプログラム。
JP2021566407A 2019-12-23 2019-12-23 サーバ内遅延制御装置、サーバ、サーバ内遅延制御方法およびプログラム Active JP7310924B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2019/050426 WO2021130828A1 (ja) 2019-12-23 2019-12-23 サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム

Publications (3)

Publication Number Publication Date
JPWO2021130828A1 JPWO2021130828A1 (ja) 2021-07-01
JPWO2021130828A5 JPWO2021130828A5 (ja) 2022-09-05
JP7310924B2 true JP7310924B2 (ja) 2023-07-19

Family

ID=76575746

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021566407A Active JP7310924B2 (ja) 2019-12-23 2019-12-23 サーバ内遅延制御装置、サーバ、サーバ内遅延制御方法およびプログラム

Country Status (4)

Country Link
US (1) US20230029932A1 (ja)
EP (1) EP4083803A4 (ja)
JP (1) JP7310924B2 (ja)
WO (1) WO2021130828A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023002547A1 (ja) * 2021-07-19 2023-01-26 日本電信電話株式会社 サーバ内データ転送装置、サーバ内データ転送方法およびプログラム
WO2023105692A1 (ja) * 2021-12-08 2023-06-15 日本電信電話株式会社 サーバ内データ転送装置、サーバ内データ転送方法およびプログラム
WO2023144958A1 (ja) * 2022-01-27 2023-08-03 日本電信電話株式会社 サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
WO2023199519A1 (ja) * 2022-04-15 2023-10-19 日本電信電話株式会社 サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
WO2023218596A1 (ja) * 2022-05-12 2023-11-16 日本電信電話株式会社 サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
WO2024013830A1 (ja) * 2022-07-11 2024-01-18 日本電信電話株式会社 サーバ内データ転送装置、データ転送システム、サーバ内データ転送方法およびプログラム

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009060530A1 (ja) 2007-11-09 2009-05-14 Fujitsu Limited ネットワーク処理制御装置,プログラムおよび方法
JP2015197874A (ja) 2014-04-03 2015-11-09 日本電信電話株式会社 仮想通信路構築システム、仮想通信路構築方法、及び仮想通信路構築プログラム

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5617537A (en) * 1993-10-05 1997-04-01 Nippon Telegraph And Telephone Corporation Message passing system for distributed shared memory multiprocessor system and message passing method using the same
US7174393B2 (en) * 2000-12-26 2007-02-06 Alacritech, Inc. TCP/IP offload network interface device
US7649901B2 (en) * 2000-02-08 2010-01-19 Mips Technologies, Inc. Method and apparatus for optimizing selection of available contexts for packet processing in multi-stream packet processing
US20050108518A1 (en) * 2003-06-10 2005-05-19 Pandya Ashish A. Runtime adaptable security processor
US9558132B2 (en) * 2013-08-14 2017-01-31 Intel Corporation Socket management with reduced latency packet processing
WO2020051505A1 (en) * 2018-09-07 2020-03-12 The Board Of Trustees Of The University Of Illinois Application-transparent near-memory processing architecture with memory channel network
US10768982B2 (en) * 2018-09-19 2020-09-08 Oracle International Corporation Engine for reactive execution of massively concurrent heterogeneous accelerated scripted streaming analyses
US10678724B1 (en) * 2018-12-29 2020-06-09 Intel Corporation Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator
US10817291B2 (en) * 2019-03-30 2020-10-27 Intel Corporation Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator
US20190391940A1 (en) * 2019-06-28 2019-12-26 Intel Corporation Technologies for interrupt disassociated queuing for multi-queue i/o devices
US20200409709A1 (en) * 2019-06-29 2020-12-31 Intel Corporation Apparatuses, methods, and systems for time-multiplexing in a configurable spatial accelerator
JP7251648B2 (ja) * 2019-10-08 2023-04-04 日本電信電話株式会社 サーバ内遅延制御システム、サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
US11029958B1 (en) * 2019-12-28 2021-06-08 Intel Corporation Apparatuses, methods, and systems for configurable operand size operations in an operation configurable spatial accelerator
US11907713B2 (en) * 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
US20220100680A1 (en) * 2020-09-26 2022-03-31 Intel Corporation Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009060530A1 (ja) 2007-11-09 2009-05-14 Fujitsu Limited ネットワーク処理制御装置,プログラムおよび方法
JP2015197874A (ja) 2014-04-03 2015-11-09 日本電信電話株式会社 仮想通信路構築システム、仮想通信路構築方法、及び仮想通信路構築プログラム

Also Published As

Publication number Publication date
WO2021130828A1 (ja) 2021-07-01
US20230029932A1 (en) 2023-02-02
JPWO2021130828A1 (ja) 2021-07-01
EP4083803A1 (en) 2022-11-02
EP4083803A4 (en) 2023-10-04

Similar Documents

Publication Publication Date Title
JP7310924B2 (ja) サーバ内遅延制御装置、サーバ、サーバ内遅延制御方法およびプログラム
US10095645B2 (en) Presenting multiple endpoints from an enhanced PCI express endpoint device
US9996484B1 (en) Hardware acceleration for software emulation of PCI express compliant devices
JP7251648B2 (ja) サーバ内遅延制御システム、サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
TWI408934B (zh) 網路介面技術
US8225332B2 (en) Method and system for protocol offload in paravirtualized systems
WO2015031279A1 (en) Pass-through network interface controller configured to support latency sensitive virtual machines
US10452570B1 (en) Presenting physical devices to virtual computers through bus controllers emulated on PCI express endpoints
WO2002031672A2 (en) Method and apparatus for interprocessor communication and peripheral sharing
WO2022143714A1 (zh) 服务器系统、虚拟机创建方法及装置
US8392629B1 (en) System and methods for using a DMA module for a plurality of virtual machines
CN114397999A (zh) 基于非易失内存接口-远程处理消息传递的通信方法、装置及设备
US11625199B2 (en) Communication apparatus, communication method, and computer program product
Chang et al. Virtualization technology for TCP/IP offload engine
JP7451438B2 (ja) 通信装置、通信システム、通知方法及びプログラム
WO2022172366A1 (ja) サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
WO2022195826A1 (ja) サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
WO2023002547A1 (ja) サーバ内データ転送装置、サーバ内データ転送方法およびプログラム
WO2024013830A1 (ja) サーバ内データ転送装置、データ転送システム、サーバ内データ転送方法およびプログラム
WO2023144878A1 (ja) サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
Zhang et al. NVMe-over-RPMsg: A Virtual Storage Device Model Applied to Heterogeneous Multi-Core SoCs
WO2023218596A1 (ja) サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
WO2023144958A1 (ja) サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
WO2023199519A1 (ja) サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
Ngoc et al. Flexible NVMe request routing for virtual machines

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220401

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220825

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: 20230606

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230619

R150 Certificate of patent or registration of utility model

Ref document number: 7310924

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150