Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP7485101B2 - サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム - Google Patents
[go: Go Back, main page]

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

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

Info

Publication number
JP7485101B2
JP7485101B2 JP2022581084A JP2022581084A JP7485101B2 JP 7485101 B2 JP7485101 B2 JP 7485101B2 JP 2022581084 A JP2022581084 A JP 2022581084A JP 2022581084 A JP2022581084 A JP 2022581084A JP 7485101 B2 JP7485101 B2 JP 7485101B2
Authority
JP
Japan
Prior art keywords
packet
kernel
server
delay control
interrupt
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
JP2022581084A
Other languages
English (en)
Other versions
JPWO2022172366A1 (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.)
NTT Inc
NTT Inc USA
Original Assignee
Nippon Telegraph and Telephone Corp
NTT Inc USA
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, NTT Inc USA filed Critical Nippon Telegraph and Telephone Corp
Publication of JPWO2022172366A1 publication Critical patent/JPWO2022172366A1/ja
Application granted granted Critical
Publication of JP7485101B2 publication Critical patent/JP7485101B2/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
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/56Queue scheduling implementing delay-aware scheduling
    • H04L47/568Calendar queues or timing rings
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • 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/22Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks comprising specially adapted graphical user interfaces [GUI]
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (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)

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関連のメモリコピー回数を減らすことにより、パケット転送処理を高速化する。
図9は、汎用Linux kernel(登録商標)およびVM構成のサーバ仮想化環境における、割込モデルによるパケット転送を説明する図である。
HW10は、NIC(Network Interface Card)11(物理NIC)(インターフェイス部)を有し、Host OS20、仮想マシンを構築するハイパーバイザーであるKVM30、仮想マシン(VM1,VM2)40、およびGuest OS50により構築された仮想通信路を経由してuser space(ユーザスペース)60上のパケット処理APL(Application)1との間でデータ送受信の通信を行う。以下の説明において、図9の太矢印に示すように、パケット処理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モジュール221は、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により直感的に操作することができる仮想マシンの接続制御システムを提供する。
図10は、OvS-DPDK(Open vSwitch with DPDK)の構成における、ポーリングモデルによるパケット転送を説明する図である。図9と同一構成部分には、同一符号を付して重複箇所の説明を省略する。
図10に示すように、Host OS20は、パケット処理のためのソフトウェアであるOvS-DPDK70を備え、OvS-DPDK70は、仮想マシン(ここではVM1)に接続するための機能部であるvhost-user71と、NIC(DPDK)11(物理NIC)に接続するための機能部であるdpdk(PMD)72と、を有する。
また、パケット処理APL1Aは、Guest OS50区間においてポーリングを行う機能部であるdpdk(PMD)2を具備する。すなわち、パケット処理APL1Aは、図9のパケット処理APL1にdpdk(PMD)2を具備させて、パケット処理APL1を改変したAPLである。
ポーリングモデルによるパケット転送は、DPDKの拡張として、共有メモリを介してゼロコピーでHost OS20とGuest OS50間、および、Guest OS50間のパケットコピーを高速に行うSPPにおいて、GUIにより経路操作を可能とする。
[New API(NAPI)によるRx側パケット処理]
図11は、Linux kernel 2.5/2.6より実装されているNew API(NAPI)によるRx側パケット処理の概略図である(非特許文献2参照)。図9と同一構成部分には、同一符号を付している。
図11に示すように、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)をスケジューリングする(図12参照)。
上記、Linux kernel 2.5/2.6より実装されているNew API(NAPI)は、パケットが到着するとハードウェア割込(hardIRQ)の後、ソフトウェア割込(softIRQ)により、パケット処理を行う。図11に示すように、割込モデルによるパケット転送は、割込処理(図11の符号c参照)によりパケットの転送を行うため、割込処理の待ち合わせが発生し、パケット転送の遅延が大きくなる。
以下、NAPI Rx側パケット処理概要について説明する。
[New API(NAPI)によるRx側パケット処理構成]
図12は、図11の破線で囲んだ箇所におけるNew API(NAPI)によるRx側パケット処理の概要を説明する図である。
<Device driver>
図12に示すように、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側パケット処理動作]
図12の矢印(符号)d~oは、Rx側パケット処理の流れを示している。
NIC11のhardware機能部11a(以下、NIC11という)が、対向装置からフレーム内にパケット(またはフレーム)を受信すると、DMA(Direct Memory Access)転送によりCPUを使用せずに、Ring Buffer72へ到着したパケットをコピーする(図12の符号d参照)。このRing Buffer72は、サーバの中にあるメモリ空間で、Kernel71(図11参照)が管理している。
しかし、NIC11が、Ring Buffer72へ到着したパケットをコピーしただけでは、Kernel71は、そのパケットを認知できない。そこで、NIC11は、パケットが到着すると、ハードウェア割込(hardIRQ)をhardIRQ81に上げ(図12の符号e参照)、netif_rx82が下記の処理を実行することで、Kernel71は、当該パケットを認知する。なお、図12の楕円で囲んで示すhardwire81は、機能部ではなくハンドラを表記する。
netif_rx82は、実際に処理をする機能であり、hardwire81(ハンドラ)が立ち上がると(図12の符号f参照)、poll_list86に、ハードウェア割込(hardIRQ)の中身の情報の1つである、NIC11からのハードウェア割込がどのデバイスのものであるかを示すネットデバイス(net_device)の情報を保存して、キューの刈取り(バッファに溜まっているパケットの中身を参照して、そのパケットの処理を、次に行う処理を考慮してバッファから該当するキューのエントリを削除する)を登録する(図12の符号g参照)。具体的には、netif_rx82は、Ring Buffer72にパケットが詰め込まれたことを受けて、NIC11のドライバを使って、以後のキューの刈取りをpoll_list86に登録する。これにより、poll_list86には、Ring Buffer72にパケットが詰め込まれたことによる、キューの刈取り情報が登録される。
このように、図12の<Device driver>において、NIC11は、パケットを受信すると、DMA転送によりRing Buffer72へ到着したパケットをコピーする。また、NIC11は、hardIRQ81(ハンドラ)を上げ、netif_rx82は、poll_list86にnet_deviceを登録し、ソフトウェア割込(softIRQ)をスケジューリングする。
ここまでで、図12の<Device driver>におけるハードウェア割込の処理は停止する。
その後、netif_rx82は、poll_list86に積まれているキューに入っている情報(具体的にはポインタ)を用いて、Ring Buffer72に格納されているデータを刈取ることを、ソフトウェア割込(softIRQ)でsoftIRQ83(ハンドラ)に上げ(図12の符号h参照)、ソフトウェア割込の制御機能部であるdo_softirq84に通知する(図12の符号i参照)。
do_softirq84は、ソフトウェア割込制御機能部であり、ソフトウェア割込の各機能を定義(パケット処理は各種あり、割込処理はそのうちの一つ。割込処理を定義する)している。do_softirq84は、この定義をもとに、実際にソフトウェア割込処理を行うnet_rx_action85に、今回の(該当の)ソフトウェア割込の依頼を通知する(図12の符号j参照)。
net_rx_action85は、softIRQの順番がまわってくると、poll_list86に登録されたnet_deviceをもとに(図12の符号k参照)、Ring Buffer72からパケットを刈取るためのポーリングルーチンを呼び出し、パケットを刈取る(図12の符号l参照)。このとき、net_rx_action85は、poll_list86が空になるまで刈取りを続ける。
その後、net_rx_action85は、netif_receive_skb87に通達をする(図12の符号m参照)。
netif_receive_skb87は、sk_buff構造体を作り、パケットの内容を解析し、タイプ毎に後段のプロトコル処理部74(図11参照)へ処理をまわす。すなわち、netif_receive_skb87は、パケットの中身を解析し、パケットの中身に応じて処理をする場合には、<Protocol layer>のip_rcv88に処理を回し(図12の符号n)、また、例えばL2であればarp_rcv89に処理をまわす(図12の符号o)。
特開2015-1978749号公報 特開2018-32156号公報
Soft Patch Panel, [online],[令和3年2月4日検索],インターネット 〈 URL : http://dpdk.org/browse/apps/spp/〉 New API(NAPI), [online],[令和3年2月4日検索],インターネット 〈 URL : http:// http://lwn.net/2002/0321/a/napi-howto.php3〉
しかしながら、上記した割込モデルとポーリングモデルによるパケット転送のいずれについても下記課題がある。
割込モデルは、HWからイベント(ハードウェア割込)を受けたkernelがパケット加工を行うためのソフトウェア割込処理によってパケット転送を行う。このため、割込モデルは、割込(ソフトウェア割込)処理によりパケット転送を行うので、他の割込との競合や、割込先CPUがより優先度の高いプロセスに使用されていると待ち合わせが発生し、パケット転送の遅延が大きくなるといった課題がある。この場合、割込処理が混雑すると、更に待ち合わせ遅延は大きくなる。
例えば、図9に示すように、割込モデルによるパケット転送は、割込処理(図9の符号a,b参照)によりパケットの転送を行うため、割込処理の待ち合わせが発生し、パケット転送の遅延が大きくなる。
割込モデルにおいて、遅延が発生するメカニズムについて補足する。
一般的なkernelは、パケット転送処理はハードウェア割込処理の後、ソフトウェア割込処理にて伝達される。
パケット転送処理のソフトウェア割込が発生した際に、下記条件(1)~(3)においては、前記ソフトウェア割込処理を即時に実行することができない。このため、ksoftirqd(CPU毎のカーネルスレッドであり、ソフトウェア割込の負荷が高くなったときに実行される)等のスケジューラにより調停され、割込処理がスケジューリングされることにより、msオーダの待ち合わせが発生する。
(1)他のハードウェア割込処理と競合した場合
(2)他のソフトウェア割込処理と競合した場合
(3)優先度の高い他プロセスやkernel thread(migration thread等)、割込先CPUが使用されている場合
上記条件では、前記ソフトウェア割込処理を即時に実行することができない。
また、New API(NAPI)によるパケット処理についても同様に、図12の破線囲みに示すように、割込処理(softIRQ)の競合に起因し、msオーダのNW遅延が発生する。
一方、ポーリングモデルは、CPUを占有して通信キューをポーリングし、パケット到着時に即時刈取る。ポーリングモデルは、転送遅延を小さくすることが可能であるものの、APLにポーリング機能を具備させる必要が生じるので、APLに改変が必要である。
例えば、図10に示すように、ポーリングモデルによるパケット転送は、パケット処理APL1にGuest OS50区間においてポーリングを行う機能部であるdpdk(PMD)2を具備させる必要があり、パケット処理APL1の改変が必要となる。
このような背景を鑑みて本発明がなされたのであり、本発明は、低遅延なパケット処理を実現することができ、かつ、APLを改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことを課題とする。
前記した課題を解決するため、本発明は、サーバ内遅延制御装置であって、OSが、カーネルと、前記OSを備えるサーバ中のメモリ空間で、前記カーネルが管理するリングバッファと、インターフェイス部からのハードウェア割込がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリストと、を有し、前記カーネル内に、所定指定間隔のタイマ割込を受付けるとともに、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げる前記サーバ内遅延制御装置を備えており、前記サーバ内遅延制御装置は、前記タイマ割込をハードウェア割込とし、当該タイマ割込を契機に前記ポールリストのパケットの有無を確認して当該ポールリストを監視するパケット到着監視部と、パケットが到着している場合は、前記リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリを前記リングバッファから削除する刈取りを実行するパケット刈取部と、を備えることを特徴とするサーバ内遅延制御装置とした。
本発明によれば、低遅延なパケット処理を実現することができ、かつ、APLを改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことができる。
本発明の第1実施形態に係るサーバ内遅延制御システムの概略構成図である。 本発明の第1実施形態に係るサーバ内遅延制御システムのパケット処理概要を説明する図である。 本発明の第1実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置のRx側動作を示すフローチャートである。 本発明の第2実施形態に係るサーバ内遅延制御システムのパケット処理の詳細を説明する図である。 本発明の第2実施形態に係るサーバ内遅延制御システムのNAPIによる処理を示すフローチャートである。 本発明の各実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。 汎用Linux kernelおよびVM構成のサーバ仮想化環境における、割込モデルに、サーバ内遅延制御システムを適用した例を示す図である。 コンテナ構成のサーバ仮想化環境における、割込モデルに、サーバ内遅延制御システムを適用した例を示す図である。 汎用Linux kernelおよびVM構成のサーバ仮想化環境における、割込モデルによるパケット転送を説明する図である。 OvS-DPDKの構成における、ポーリングモデルによるパケット転送を説明する図である。 Linux kernel 2.5/2.6より実装されているNew API(NAPI)によるRx側パケット処理の概略図である。 図11の破線で囲んだ箇所におけるNew API(NAPI)によるRx側パケット処理の概要を説明する図である。
以下、図面を参照して本発明を実施するための形態(以下、「本実施形態」という)におけるサーバ内遅延制御システム等について説明する。
(第1実施形態)
[概要]
図1は、本発明の第1実施形態に係るサーバ内遅延制御システムの概略構成図である。本実施形態は、Linux kernel 2.5/2.6より実装されているNew API(NAPI)によるRx側パケット処理に適用した例である。図11および図12と同一構成部分には、同一符号を付している。
図1に示すように、サーバ内遅延制御システム1000は、OS70(例えば、Host OS)を備えるサーバ上で、ユーザが使用可能なuser space60に配置されたパケット処理APL1を実行し、OS70に接続されたHW10AのNIC11とパケット処理APL1との間でパケット転送を行う。
<HW10A>
HW10Aは、NIC11(物理NIC)(インターフェイス部)と、timer12と、を有する。
timer12は、所定のタイマ間隔でハードウェア割込によるタイマ割込を発生する。timer12は、指定した間隔で処理を実行することが可能なタイマ割込を発生する。例えば、kernelにはhrtimersという仕組みがあり、このhrtimersを用いてもよい。
<OS70>
OS70は、kernel171、Ring Buffer72、およびDriver73を有し、kernel171は、サーバ内遅延制御装置100、poll_list186、およびプロトコル処理部74を有する。
本実施形態では、kernel171が、サーバ内遅延制御装置100を備える関係で、図11に示すkernel71と区別して新たな番号を付している。kernel171は、サーバ内遅延制御装置100が設置されている以外は、図11に示すkernel71(図11参照)と同一機能である。ただし、kernel171は、livepatch(後記)を用いることで、既存のkernel71(図11参照)を改造(新しくビルド)することなく、実現が可能である。
kernel171は、OS70(例えば、Host OS)の基幹部分の機能であり、ハードウェアの監視やプログラムの実行状態をプロセス単位で管理する。ここでは、kernel171は、パケット処理APL1からの要求に応えるとともに、HW10Aからの要求をパケット処理APL1に伝える。kernel171は、パケット処理APL1からの要求に対して、システムコールを介することで処理する。
kernel171は、Socket75を介して、パケット処理APL1へパケットを送信する。Kernel71は、Socket75を介してパケット処理APL1からパケットを受信する。
Ring Buffer72は、サーバの中にあるメモリ空間においてkernel171が管理する。Ring Buffer72は、kernel171が出力するメッセージをログとして格納する一定サイズのバッファであり、上限サイズを超過すると先頭から上書きされる。
Driver73は、kernel171でハードウェアの監視を行うためデバイスドライバである。
poll_list186は、ハードウェア割込(hardIRQ)の中身の情報の1つである、NIC11からのハードウェア割込がどのデバイスのものであるかを示すネットデバイス(net_device)の情報を保存する。
プロトコル処理部74は、OSI参照モデルが定義するL2/L3/L4のプロトコル処理を行う。
Socket75は、kernel171がプロセス間通信を行うためのインターフェイスである。Socket75は、ソケットバッファを有し、データのコピー処理を頻繁に発生させない。
<サーバ内遅延制御装置>
サーバ内遅延制御装置100は、所定指定間隔のタイマ割込を受付けるとともに、タイマ割込(ハードウェア割込)契機で、ハードウェア割込のコンテキストでパケットの到着を確認し、パケット到着時の刈り取り処理を行う。
サーバ内遅延制御装置100は、パケット到着監視部110と、パケット刈取部120と、を備える。
パケット到着監視部110は、パケットが到着していないかを監視するためのthreadである。
パケット到着監視部110は、タイマ割込をハードウェア割込とし、当該タイマ割込を契機にpoll_list186(図2参照)のパケットの有無を確認してpoll_list186を監視(poll)する。
パケット到着監視部110は、poll_list186からRing_Buff72(図2参照)にパケットが存在するポインタ情報と、NET_DEVICE情報を取得し、パケット刈取部120へ当該情報(ポインタ情報およびnet_device情報)を伝達する。パケット到着監視部110は、poll_list186に複数パケット情報が存在する場合は、複数分伝達する。
パケット刈取部120は、パケットが到着している場合は、Ring Buffer72に保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリをRing Buffer72から削除する刈取りを実行する(以下、単にRing Buffer72からパケットを刈取るという場合がある)。パケット刈取部120は、受信した情報をもとにRing_Buff72からパケットを取り出し、netif_receive_skb87(図2参照)へパケットを伝達する。
パケット刈取部120は、予め保守運用者が設定した期間、受信した情報をもとにRing_Buff72からパケットを取り出し、netif_receive_skb87へパケットを伝達する。
図2は、図1のサーバ内遅延制御システム1000のNew API(NAPI)によるRx側パケット処理の詳細を説明する図である。図1および図12と同一構成部分には、同一符号を付している。
<Device driver>
図2に示すように、Device driverには、ネットワークインターフェースカードであるNIC11、NIC11の処理要求の発生によって呼び出され要求された処理(ハードウェア割込)を実行するハンドラであるhardIRQ81、およびソフトウェア割込の処理機能部であるnetif_rx182が配置される。
また、Device driverには、timer12を構成するhw_clock12a、hw_clock12aの発生によって呼び出され要求された処理(ハードウェア割込)を実行するハンドラであるhardIRQ91が配置される。
<Networking layer>
Networking layerには、NIC11からのハードウェア割込がどのデバイスのものであるかを示すネットデバイス(net_device)の情報を登録するpoll_list186、サーバ内遅延制御装置100、キューを刈取ったパケットを、割込の発生しないソケット通信のためのsk_buff構造体(kernel171が、パケットの状態を示す構造体)を作成するnetif_receive_skb87、およびRing Buffer72が配置される。
<Protocol layer>
Protocol layerには、パケット処理機能部であるip_rcv88、arp_rcv89等が配置される。なお、プロトコル処理は、ip_rcv88、arp_rcv89以外にもある。
上記netif_rx182、netif_receive_skb87、ip_rcv88、およびarp_rcv89は、Kernel171の中でパケット処理のために呼ばれるプログラムの部品(関数の名称)である。
以下、サーバ内遅延制御システム1000の動作を説明する。
[本発明によるパケット処理概要]
図2の矢印(符号)d~g,p~uは、Rx側パケット処理の流れを示している。
サーバ内遅延制御システム1000は、<NIC11契機>によるハードウェア割込と<タイマ割込契機>によるハードウェア割込とを有する。以下、順に説明する。
<NIC11契機>
NIC11が、対向装置からフレーム内にパケット(またはフレーム)を受信すると、DMA(Direct Memory Access)転送によりCPUを介さずに、Ring Buffer72に到着したパケットをコピーする(図2の符号d参照)。このRing Buffer72は、サーバ中のメモリ空間で、Kernel171(図1参照)が管理している。
NIC11は、ハードウェア割込を起動し、poll_list186に、Ring Buffer72に格納したデータのポインタ情報、および、NIC driver情報を登録する。このとき、ソフトウェア割込(NEX_RX_SOFTIRQ)の登録は行わない。これにより、パケット転送処理のソフトウェア割込機能を停止させる。
NIC11は、パケットが到着すると、ハードウェア割込(hardIRQ)をhardIRQ81(割込ハンドラ)に立ち上げ(図2の符号e参照)、netif_rx182が下記の処理を実行することで、Kernel171は、当該パケットを認知する。
netif_rx182は、hardwire81(ハンドラ)が立ち上がると(図2の符号f参照)、poll_list186に、ハードウェア割込(hardIRQ)の中身の情報の1つである、NIC11からのハードウェア割込がどのデバイスのものであるかを示すネットデバイス(net_device)の情報を保存して、キューの刈取り情報を登録する(図2の符号g参照)。具体的には、netif_rx182は、Ring Buffer72にパケットが詰め込まれたことを受けて、NIC11のドライバを使って、以後のキューの刈取りをpoll_list186に登録する。これにより、poll_list186には、Ring Buffer72にパケットが詰め込まれたことによる、キューの刈取りが登録される。
netif_rx182は、poll_list186にnet_deviceを登録するが、図12のnetif_rx82とは異なり、ソフトウェア割込(softIRQ)のスケジューリングは行わない。すなわち、netif_rx182は、ソフトウェア割込(softIRQ)のスケジューリングは行わない点で、図12のnetif_rx82とは異なる。
ここまでで、図2の<Device driver>における、<NIC11契機>によるハードウェア割込の処理は停止する。
本実施形態では、図12に示す<Networking layer>において、softIRQ83およびdo_softirq84が削除され、これに伴い、図12に示すnetif_rx82が、softIRQ83(ハンドラ)を立ち上げる通知(図12の符号h参照)も行わない。
本実施形態では、サーバ内遅延制御システム1000は、図12に示すsoftIRQ83およびdo_softirq84を削除し、代わりに図2に示す<Networking layer>のサーバの中にあるメモリ空間に、サーバ内遅延制御装置100を設ける。
図2に示す<Networking layer>において、サーバ内遅延制御装置100のパケット到着監視部110は、poll_list186を監視(poll)し(図2の符号p参照)、パケット到着有無を確認する。
パケット到着監視部110は、poll_list186から、ring_buff72にパケットが存在するポインタ情報と、net_device情報とを取得し、パケット刈取部120へ当該情報(ポインタ情報およびnet_device情報)を伝達する(図2の符号q参照)。ここで、poll_list186に複数パケット情報が存在する場合は、複数分当該情報を伝達する。
サーバ内遅延制御装置100のパケット刈取部120は、パケットが到着している場合は、Ring Buffer72からパケットを刈取る(図2の符号r参照)。
パケット刈取部120は、受信した情報をもとにRing_Buff72からパケットを取り出し、netif_receive_skb87へパケットを伝達する(図2の符号u参照)。
<タイマ割込契機>
クロックデバイスであるtimer12(通常はCPUに搭載)は、hw_clock12aを用いて指定時間を計時し、ハードウェア割込(hardIRQ)をhardIRQ91(ハンドラ)に立ち上げる(図2の符号s参照)。この指定時間は、予め運用者が指定した時間間隔であり、指定時間が経過するとタイマ割込(ハードウェア割込)が起動する(図2の符号t参照)。運用者は、指定時間としてパケット処理に適する間隔(例えば、1μsなど)を指定する。サーバ内遅延制御装置100は、timer12による指定した間隔のタイマ割込を受け付けることで、ハードウェア割込による実行権を得る。
上記指定間隔は、ハードウェア割込によるパケット処理が、システム動作に必要なCPUタイムであり、かつ、所定時間(運用者が設定;例えば、1μs)以上はCPUタイムを専有しないような時間間隔である。
なお、kernel(登録商標)には、タイマに関して、hrtimersという既存の仕組みがある。
タイマ割込のハードウェア割込において、パケット到着監視部110は、poll_list186にパケットのポインタが格納されているかを確認(poll)する(図2の符号p参照)。poll_list186にパケットのポインタが格納されている場合は、パケット刈取部120へ、該当ポインタ情報とdevice driver情報を伝達する。
ここで、ハードウェア割込は極めて優先度が高い処理であり、ハードウェア割込が起動されると、該当CPUは他の処理を実行することができない。本実施形態では、タイマ割込により間隔を空けてハードウェア割込を実行させる。このため、ハードウェア割込がCPUを専有してシステムが不安定になることを回避することが可能になる。
また、NIC11へのパケット到着の度に、全てハードウェア割込を起動して、ハードウェア割込コンテキストで処理を実行すると、システムがCPUを使用できず、不安定動作となる。本実施形態では、NIC11へのパケット到着の度のハードウェア割込を起動は行わず、タイマ割込によりハードウェア割込を実行させることで、システムが不安定になることを回避する。
パケット刈取部120は、受信したポインタ情報とdevice driver情報をもとに、Ring Buffer72からパケットを刈り取る。すなわち、パケット刈取部120は、タイマ割込契機で、poll_list186のパケット有無を確認し、パケットが到着している場合は、Ring Buffer72からパケットを刈り取る。その後、パケット刈取部120は、netif_receive_skb87へ該当データを伝達する。
このように、サーバ内遅延制御システム1000は、<Device driver>において、NW遅延発生の主要因であるパケット処理のsoftIRQを停止し、タイマ契機で、高い優先度であるhardIRQのコンテキストでパケット処理を行うことで、softIRQ競合を回避する。また、高い優先度であるhardIRQによるパケット処理がCPUタイムを専有する場合、システム動作が不安定になる。サーバ内遅延制御装置100は、タイマ契機に細切れに動作するようにすることで、システム動作に必要なCPUタイムを捻出して、上記hardIRQによるパケット処理がCPUタイムを専有してシステム動作が不安定になることを回避し、安定動作を実現する。
<ハードウェア割込のコンテキスト処理>
netif_receive_skb87は、受信したデータからsk_buff構造体を作成する。以降、kernel171(図1参照)によるプロトコル処理へ続く。具体的には、kernel171は、パケットの内容を解析し、タイプ毎に後段のプロトコル処理部74(図11参照)へ処理をまわす。すなわち、netif_receive_skb87は、パケットの中身を解析し、パケットの中身に応じて処理をする場合には、<Protocol layer>のip_rcv88に処理を回し、また、例えばL2であればarp_rcv89に処理をまわす。
[live patchによる登録動作]
次に、live patchによる登録動作について説明する。
サーバ内遅延制御システム1000(図1参照)は、図1に示すOS70のkernel171が、サーバ内遅延制御装置100を備える。kernel171は、livepatchを用いることで、既存のkernel71(図11参照)を改造(新しくビルド)することなく、実現が可能になる。以下、kernel171に適用されるlivepatchについて説明する。
livepatchは、Linux(登録商標)kernelに適用されるカーネルパッチ機能である。livepatchを使うことで、システムを再起動することなくカーネル空間に即座に修正を適用することができる。すなわち、
(1)livepatchは、netif_rx182(図2参照)のsoftIRQスケジューリング機能を抑制する。
(2)livepatchは、パケット到着監視を行うthread(パケット到着監視部110、具体的にはisol_net_rx)を起動する。起動する際、他プロセスやkernel threadにbusy poll(図2の符号p参照)の邪魔をされないように、thread(パケット到着監視部110)は、CPUコアを専有する。そのために、当該threadはリアルタイムプロセス等の高優先設定を割り当てる。トラヒックフロー数(または、トラヒック量)に応じて、複数CPUコア上でthreadを起動し、監視するpoll_list186(図2参照)を割り当てる。これにより、トラヒックフロー(トラヒック量)に応じたスケールアウトが可能になる。
以降、図2に示すパケット処理の動作が実行される。
[サーバ内遅延制御装置100のRx側パケット処理動作フロー]
図3は、本実施形態のサーバ内遅延制御装置100(図2参照)のタイマ割込による救済処理を示すフローチャートである。図2を参照してRx側動作を例に採り説明する。
ステップS11でtimer12による指定時間が経過すると(図2の符号s参照)、ステップS12でkernel171(図1参照)が具備するタイマ割込機能によりハードウェア割込を起動する(図2の符号t参照)。
ステップS13では、パケット到着監視部110(図2参照)は、poll_list186(図2参照)を確認し(図2の符号p参照)、パケット到着有無を判断する。
ステップS14では、パケット到着監視部110は、poll_list186にバケット到着を意味するポインタ情報があるか否かを判別する。ポインタ情報がない場合は(S14:No)、ステップS13に戻り、ポインタ情報がある場合は(S14:Yes)、ステップS15に進む。
ステップS15では、パケット到着監視部110は、poll_list186からRing_Buffer72(図2参照)に格納されているパケットが存在するポインタ情報と、NET_DEVICE情報とを取得し、パケット刈取部120(図2参照)へ該当するポインタ情報およびNET_DEVICE情報を伝達する(図2の符号q参照)。ここで、パケット到着監視部110は、poll_list186に複数パケット情報が存在する場合は、複数分伝達する。
ステップS16では、パケット刈取部120は、予め保守運用者が設定した期間、受信した情報をもとに、Ring_Buffer72からパケットを取り出し(図2の符号r参照)、netif_receive_skb87へパケットを伝達する(図2の符号u参照)。
ステップS17では、パケット刈取部120は、パケットの取り出しが完了したか否かを判別する。
パケットの取り出しが完了していない場合(S17:No)、ステップS16に戻る。
パケットの取り出しが完了した場合(S17:Yes)、ステップS18でパケット刈取部120は、poll_list186から該当キュー情報を削除する。
ステップS19では、サーバ内遅延制御装置100(図2参照)は、poll_list186が空になる、または、予め保守運用者が設定した期間が経過したか否かを判別する。
poll_list186が空になる、または、予め保守運用者が設定した期間が経過していない場合(S19:No)、ステップS18に戻る。
poll_list186が空になる、または、予め保守運用者が設定した期間が経過した場合(S19:Yes)、本フローの処理を終了する。
[本実施形態と既存技術との差異]
次に、本実施形態と既存技術(図12参照)との差異について説明する。
<背景>
一般に、ハードウェア割込(hardIRQ)は、優先度が高く、該当CPUの処理を中断し、hardIRQの処理を最優先で処理する必要がある。このため、オーバーヘッドが大きい。そのため、hardIRQでは、パケット到着を知らせるのみとし、パケット処理は、softIRQで処理する設計思想となっている(「kernelの原則」という)。ここで、softIRQは、他のsoftIRQと競合し、待たされる事象が発生する(遅延発生の要因となる)。
従来技術が割込モデルにしている理由は、かつてはCPUリソースが限られていた(または、Raspberry PiのようなSingle board ComputerのようにCPUコアが少ないデバイスでも動作させる)ために、1つのCPUコアを他の処理と共有して使用する設計思想になっていたためである。この場合、通常の処理や割込処理等でCPUタイムを切り替えながら処理を行う。上記割込処理であっても、softIRQは競合することになり、待ち時間が発生する。
なお、softIRQのスケジューリングを行うスケジューラであるksoftirqdは、softIRQの種別に応じて優先度を付与する機能を具備しておらず、この競合による遅延発生は抑制できない。
<既存技術(図12参照)>
図12に示すように、kernel71(図11)は、NIC11からのパケット到着の知らせを、hardIRQにより受け取り(図12の符号h参照)、パケット処理のためのsoftIRQをスケジューリングする(図12の破線囲み参照)。この際、他の割込処理と競合すると待合せが発生し、msオーダのNW遅延が発生する。
<サーバ内遅延制御システム1000(図2参照)>
図2に示すように、サーバ内遅延制御システム1000は、<Networking layer>において、netif_rx1182は、poll_list186にnet_deviceを登録するが、既存技術(図12参照)のnetif_rx82とは異なり、ソフトウェア割込(softIRQ)のスケジューリングは行わない(「変更点1」)。
図2に示すように、<Device driver>において、timer12は、hw_clock12aを用いて指定時間を計時し、ハードウェア割込(hardIRQ)をhardIRQ91(ハンドラ)に立ち上げる(図2の符号s参照)(「変更点2」)。
図2に示すように、サーバ内遅延制御システム1000は、<Networking layer>のサーバの中にあるメモリ空間に、サーバ内遅延制御装置100を設ける(「変更点3」)。
サーバ内遅延制御装置100のパケット到着監視部110は、タイマ割込契機(図2の符号t参照)で、poll_list186のパケット有無を確認する(図2の符号p参照)。
サーバ内遅延制御装置100のパケット刈取部120は、パケットが到着している場合(図2の符号q参照)は、Ring Buffer72からパケットを刈り取る(図2の符号r参照)。
パケット刈取部120は、受信した情報をもとにRing_Buff72からパケットを取り出し、netif_receive_skb87へパケットを伝達する(図2の符号u参照)。
<既存技術(図12参照)とサーバ内遅延制御システム1000(図2参照)との比較>
・低遅延なパケット処理
タイマ割込(ハードウェア割込)を契機に、パケット到着を確認することで、最低でもタイマ間隔でのパケット転送処理を可能とし、遅延時間の保証が可能である。すなわち、ハードウェア割込のコンテキストでパケット刈り取り処理を行うため、ソフトウェア割込競合の問題は発生しない。
・APLの改変が不要
本実施形態では、ハードウェア割込(hardIRQ)によるパケット到着の通知については、NAPIを踏襲する。softIRQは、CPUリソースを有効活用する点では便利であるが、パケットの即時転送の観点では適さない。そのため、本実施形態では、softIRQの機能を停止し、kernelの中でpollingモデルを実現する点が新しい。具体的には、図2に示すnetif_rx182が、図12に示すnetif_rx82のように、softIRQ83(ハンドラ)を立ち上げる通知(図12の符号h参照)を行わないことに示されている。
なお、pollingモデルについては、ユーザスペースからpollingを行うDPDKが既存技術としてある(図10参照)。しかしながら、DPDKは、APLからpollingを行うため、APLに改変が必要である。
本実施形態は、図1に示すkernel171の中でpolling専用のthread(サーバ内遅延制御装置100のパケット到着監視部110)を起動し、サーバ内遅延制御装置100のパケット刈取部120が、パケット到着時に、pollingモデル(softIRQなし)によりパケット処理を行う。本実施形態は、Linux上で動作するAPLの開発者が利用するPOSIX socket APIを利用可能な実現方式であるため、APLの改変不要になる、換言すれば、既存のPOSIX socket APIを利用することが可能になる。
・kernelセキュリティアップデートの度に再開発が不要
本実施形態は、kernelを起動させたまま処理を変更可能なlivepatchにより、本発明を有効化可能である。このため、kernelのセキュリティアップデートの度にソフトウェアを再開発する必要がない(関連するkernel機能に変更があった場合のみでよい)。
・その他
本実施形態は、既存技術のNAPIと異なり、タイマ割込契機のハードウェア割込コンテキストでパケット処理を行うためソフトウェア割込み競合は発生しない。
本実施形態は、既存技術のDPDKと異なり、kernel内でパケット処理は完結するため、APLに改変が不要である。
<<Networking layer>に、サーバ内遅延制御装置100を備える特有の効果>
サーバ内遅延制御装置100は、遅延発生要因となるsoftIRQを停止し、タイマ契機で、高い優先度であるhardIRQのコンテキストでパケット処理を行う。これにより、softIRQ競合を回避する。
サーバ内遅延制御装置100は、高い優先度であるhardIRQによるパケット処理がCPUタイムを専有して、システム動作が不安定になることを、タイマ契機に細切れに動作するようにする。これにより、システム動作に必要なCPUタイムを捻出し、安定動作を実現する。
サーバ内遅延制御装置100は、タイマ割込(ハードウェア割込)契機で、ハードウェア割込のコンテキストでパケットの到着を確認し、パケット到着時の刈り取り処理を行う。これにより、msオーダ遅延の原因であるソフトウェア割込の競合を回避し、低遅延にパケット処理を実現することができる(ハードウェア割込は最も優先度が高いため、他の処理に邪魔をされない)。
(第2実施形態)
本発明の第2実施形態に係るサーバ内遅延制御システム1000Aの概略構成は、図1に示すサーバ内遅延制御システム1000と同様である。
図4は、本発明の第2実施形態に係るサーバ内遅延制御システム1000Aのパケット処理の詳細を説明する図である。図2および図12と同一構成部分には、同一符号を付して重複箇所の説明を省略する。
第2実施形態に係るサーバ内遅延制御システム1000Aは、NAPIとタイマ割込によるサーバ内遅延制御システム1000とのハイブリッド方式である。
サーバ内遅延制御システム1000Aは、既存のNAPIのソフトウェア割込競合時の遅延(パケット刈り取り遅れ)を救済するために、既存NAPIによるパケット受信処理(図12に対応する符号部分参照)はそのまま活かし、NAPIに重畳する形で、タイマ割込によるパケット受信処理(図2に対応する符号部分参照)を行う。
これにより、NAPIによるパケット刈り取り遅れを、タイマ割込によるパケット受信処理により救済が可能となる。その結果、パケット受信処理の低遅延化の実現が可能になる。
次に、サーバ内遅延制御システム1000Aの動作について説明する。
サーバ内遅延制御システム1000Aは、既存のNAPIが図4に示すNAPIによる処理を有する。なお、図5に示す「NAPIによる処理」と、図3に示す「タイマ割込による救済処理」とは、独立して動作する。このため、両者間のタイミング制御を行う管理機能部は不要である。また、両者が独立して動作することは、実装により確認している。
図5は、第2実施形態に係るサーバ内遅延制御システム1000A(図4参照)のNAPIによる処理を示すフローチャートである。図4を参照してRx側動作を例に採り説明する。
ステップS21でNIC11は、パケットを受信し、DMA処理後か否かを判別する。
パケットを受信し、DMA処理後の場合は(S21:Yes)、ステップS22でNIC11は、ハードウェア割込を起動し、poll_list186にRing Buffer72に格納したパケットのポインタ情報とNET_DEVICE(ドライバ)情報とを登録する。
ステップS23でNIC11は、後段のパケットプロトコル処理のために、ソフトウェア割込をスケジューリングする。
ステップS24で、ソフトウェア割込ハンドラは、poll_list186からRing_Buffer72にパケットが存在するポインタ情報と、NET_DEVICE情報を取得する。
ステップS25で、ソフトウェア割込ハンドラは、取得した情報をもとにRing_Buffer72からパケットを取り出し、netif_receive_skb87へパケットを伝達する。
ステップS26で、パケットの取り出しが完了したか否かを判別する。パケットの取り出しが完了していない場合(S26:No)、ステップS26に戻る。
パケットの取り出しが完了した場合(S26:Yes)、ステップS27で、poll_list186から当該キュー情報は削除する。
ステップS28で、poll_list186が空になったか否かを判別する。poll_list186が空になっていない場合(S28:No)、ステップS26に戻る。
poll_list186が空になった場合(S28:Yes)、本フローの処理を終了する。本フローの処理は、poll_list186が空になるまで繰り返し実行される。
本実施形態のサーバ内遅延制御システム1000Aは、既存技術(例えば、NAPI)のソフトウェア割込競合などにより、poll_list186からのパケット到着確認が遅れる場合を救済する。すなわち、タイマ割込契機によって、図3に示す「タイマ割込による救済処理」からの定期的に取りこぼしをパケット到着監視部110が確認して、取りこぼしを救済する。これにより、低遅延性を担保する。
タイマ割込による救済処理について補足して説明する。
本実施形態では、poll_list186からのパケット到着確認が遅れる場合の救済として、タイマ割込契機で、図3に示す「タイマ割込による救済処理」によって定期的に取りこぼしを確認して、取りこぼしを救済する。
具体的には、パケット到着監視部110が、poll_list186を確認し、poll_list186にパケットの有無を確認することで、NAPIによる刈り取り漏れを検知する。この際、NAPIが特に遅れていなくても、タイミングによっては、図3に示す「タイマ割込による救済処理」によりpoll_list186からパケットが刈り取られることもある。
図5に示す「NAPIによる処理」と、図3に示す「タイマ割込による救済処理」とは、独立して動作する。このため、NAPIのソフトウェア割込競合が発生したことを、図3に示す「タイマ割込による救済処理」に通知する必要はなく、NAPIが遅れた場合は、事象としてpoll_list186にパケットが残ることになるので、図3に示す「タイマ割込による救済処理」は定期的に立ち上がってpoll_list186を確認するだけで、救済することが可能となる。図5に示す「NAPIによる処理」と、図3に示す「タイマ割込による救済処理」とは、独立して動作し、poll_list186が空になるまで繰り返すことが、end条件なるため、相互の依存(調整)は、不要である。
[ハードウェア構成]
本実施形態に係るサーバ内遅延制御装置100は、例えば図6に示すような構成のコンピュータ900によって実現される。
図6は、サーバ内遅延制御装置100の機能を実現するコンピュータ900の一例を示すハードウェア構成図である。
コンピュータ900は、CPU901、RAM902、ROM903、HDD904、通信インターフェイス(I/F:Interface)906、入出力インターフェイス(I/F)905、およびメディアインターフェイス(I/F)907を有する。
CPU901は、ROM902またはHDD904に格納されたプログラムに基づいて動作し、図1に示すサーバ内遅延制御装置100の各部の制御を行う。ROM902は、コンピュータ900の起動時にCPU901によって実行されるブートプログラムや、コンピュータ900のハードウェアに依存するプログラム等を格納する。
CPU901は、入出力I/F905を介して、マウスやキーボード等の入力装置910、および、ディスプレイ等の出力装置911を制御する。CPU901は、入出力I/F905を介して、入力装置910からデータを取得するともに、生成したデータを出力装置911へ出力する。なお、プロセッサとしてCPU901とともに、GPU(Graphics Processing Unit)等を用いてもよい。
HDD904は、CPU901により実行されるプログラムおよび当該プログラムによって使用されるデータ等を記憶する。通信I/F906は、通信網(例えば、NW(Network)920)を介して他の装置からデータを受信してCPU901へ出力し、また、CPU901が生成したデータを、通信網を介して他の装置へ送信する。
メディアI/F907は、記録媒体912に格納されたプログラムまたはデータを読み取り、RAM903を介してCPU901へ出力する。CPU901は、目的の処理に係るプログラムを、メディアI/F907を介して記録媒体912からRAM903上にロードし、ロードしたプログラムを実行する。記録媒体912は、DVD(Digital Versatile Disc)、PD(Phase change rewritable Disk)等の光学記録媒体、MO(Magneto Optical disk)等の光磁気記録媒体、磁気記録媒体、導体メモリテープ媒体又は半導体メモリ等である。
例えば、コンピュータ900が本実施形態に係る一装置として構成されるサーバ内遅延制御装置100として機能する場合、コンピュータ900のCPU901は、RAM903上にロードされたプログラムを実行することによりサーバ内遅延制御装置100の機能を実現する。また、HDD904には、RAM903内のデータが記憶される。CPU901は、目的の処理に係るプログラムを記録媒体912から読み取って実行する。この他、CPU901は、他の装置から通信網(NW920)を介して目的の処理に係るプログラムを読み込んでもよい。
[適用例]
サーバ内遅延制御装置100は、Kernel内に、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げるサーバ内遅延制御装置であればよく、OSは限定されない。また、サーバ仮想化環境下であることも限定されない。したがって、サーバ内遅延制御システム1000は、図7および図8に示す各構成に適用が可能である。
<VM構成への適用例>
図7は、汎用Linux kernel(登録商標)およびVM構成のサーバ仮想化環境における、割込モデルに、サーバ内遅延制御システム1000Bを適用した例を示す図である。図1および図9と同一構成部分には、同一符号を付している。
図7に示すように、サーバ内遅延制御システム1000Bは、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 Buffer72に保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリをRing Buffer72から削除する刈取りを実行するパケット刈取部120と、を備える。
Kernel91は、tapデバイス222を介して、VM40仮想マシン30へパケットを伝達する。
一方、GuestOS70は、Kernel171と、GuestOS70を備えるサーバ中のメモリ空間で、Kernel171が管理するRing Buffer52と、NIC11からのハードウェア割込(hardIRQ)がどのデバイスのものであるかを示すネットデバイスの情報を登録するpoll_list186 (図2)と、Kernel171が、プロセス間通信を行うためのインターフェイスであるSocket75と、を備える。
Kernel171は、poll_list186を常に監視(busy poll)するパケット到着監視部110と、パケットが到着している場合は、Ring Buffer72に保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリをRing Buffer72から削除する刈取りを実行するパケット刈取部120と、刈取りが実行されたパケットのプロトコル処理を行うプロトコル処理部74と、を備える。
Kernel171は、プロトコル処理部74を介して、パケット処理APL1へパケットを伝達する。
このようにすることにより、VMの仮想サーバ構成のシステムにおいて、HostOS90とGuestOS70とのいずれのOSにおいても、APLを改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことができる。
<コンテナ構成への適用例>
図8は、コンテナ構成のサーバ仮想化環境における、割込モデルに、サーバ内遅延制御システム1000Cを適用した例を示す図である。図1と同一構成部分には、同一符号を付している。
図8に示すように、サーバ内遅延制御システム1000Cは、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は、タイマ割込をハードウェア割込とし、当該タイマ割込を契機にポールリストのパケットの有無を確認して当該ポールリストを監視(poll)するパケット到着監視部110と、パケットが到着している場合は、リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリをリングバッファから削除する刈取りを実行するパケット刈取部120と、を備える。
このようにすることで、サーバ内遅延制御装置100は、NW遅延発生の主要因であるパケット処理のソフトウェア割込(softIRQ)を停止し、サーバ内遅延制御装置100のパケット到着監視部110がタイマ割込(ハードウェア割込)契機で、ハードウェア割込のコンテキストでパケットの到着を確認し、パケット刈取部120が、パケット到着時に、pollingモデル(softIRQなし)によりパケット処理を行う。これにより、下記(1)~(4)の効果を奏する。
(1)遅延発生の原因となるパケット到着時のソフトウェア割込(softIRQ)を停止し、その代わり、タイマ契機で、高い優先度であるhardIRQのコンテキストでパケット処理を行うことで、softIRQ競合を回避する。すなわち、サーバ内遅延制御システム1000は、タイマ割込(ハードウェア割込)を契機に、パケット到着を確認することで、最低でもタイマ間隔でのパケット転送処理を可能とし、遅延時間の保証が可能となる(ハードウェア割込のコンテキストでパケット刈り取り処理を行うため、ソフトウェア割込競合の問題は発生しない)。パケット到着時は、待合せなく即時に刈り取られるため、低遅延なパケット処理を実現することができる。
(2)APLにパケット高速転送のための機能を具備させる必要がなく、APLはカーネル(Kernel171)が持つ既存POSIX socket APIとのインタワークを行うだけでよい。すなわち、サーバ内遅延制御システム1000は、既存技術のDPDKと異なり、kernel内でpollingモデルを実現するため(既存技術のDPDKと異なり、kernel内でパケット処理は完結するため)、APLに改変が不要である。具体的には、図10に示すように、パケット高速転送のための機能(図10のdpdk(PMD)2参照)を、パケット処理APL1A(図10参照)具備させる必要がなく、本サーバ内遅延制御システム1000のパケット処理APL1(図1参照)は、kernelが持つ既存POSIX socket APIとのインタワークを行うだけでよい。このため、APLを改変することなく、実現が可能である。例えば、Linux上で動作するAPLの開発者が利用するPOSIX socket APIを利用可能であるため、APLの改変不要で、本発明を利用することが可能である。
(3)kernelセキュリティアップデートの度に再開発が不要である。また、kernelを起動させたまま、処理動作を変更可能なlivepatchでパッチを適用することで有効化可能である。このため、kernelのセキュリティアップデートの度に、ソフトウェアを再開発する必要がない(関連するkernel機能に変更があった場合のみでよい)。
(4)既存技術のNAPIと異なり、タイマ割込契機のハードウェア割込コンテキストでパケット処理を行うため、ソフトウェア割込み競合は発生しない。
また、仮想マシン内で動作するGuest OS(GuestOS70)が、カーネル(Kernel171)と、Guest OSを備えるサーバ中のメモリ空間で、カーネルが管理するリングバッファ(Ring Buffer72)と、インターフェイス部(NIC11)からのハードウェア割込(hardIRQ)がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリスト(poll_list186)と、刈取りが実行されたパケットのプロトコル処理を行うプロトコル処理部74と、を有し、カーネル内に、所定指定間隔のタイマ割込を受付けるとともに、ポーリングモデルを用いてパケット到着を監視するスレッド(thread)を立ち上げるサーバ内遅延制御装置100を備えており、サーバ内遅延制御装置100は、前記タイマ割込をハードウェア割込とし、当該タイマ割込を契機に前記ポールリストのパケットの有無を確認して当該ポールリストを監視(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は、前記タイマ割込をハードウェア割込とし、当該タイマ割込を契機に前記ポールリストのパケットの有無を確認して当該ポールリストを監視(poll)するパケット到着監視部110と、パケットが到着している場合は、リングバッファ(Ring Buffer72)に保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリをリングバッファ(Ring Buffer72)から削除する刈取りを実行するパケット刈取部120と、を備えることを特徴とする。
このようにすることにより、VMの仮想サーバ構成のシステムにおいて、カーネル(Kernel91)とHost OS(HostOS90)とを備えるサーバについて、低遅延なパケット処理を実現することができ、かつ、APLを改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことができる。
サーバ内遅延制御装置100において、前記インターフェイス部は、ハードウェア割込を割込ハンドラ(hardIRQ81)に立ち上げて前記ポールリストにデバイスを登録する場合、ソフトウェア割込によるスケジューリングを停止することを特徴とする。
このようにすることにより、遅延発生要因となるsoftIRQを停止し、その代わり、タイマ契機で、高い優先度であるhardIRQのコンテキストでパケット処理を行うことで、softIRQ競合を回避することができる。
サーバ内遅延制御装置100において、前記所定指定間隔は、ハードウェア割込によるパケット処理が、システム動作に必要なCPUタイムであり、かつ、所定時間(運用者が設定;例えば、1μs)以上は前記CPUタイムを専有しないような時間間隔であることを特徴とする。
このようにすることにより、高い優先度であるhardIRQによるパケット処理がCPUタイムを専有して、システム動作が不安定になることを抑制することができる。また、タイマ契機に細切れに動作するようにすることで、システム動作に必要なCPUタイムを捻出して、安定動作を実現することができる。
サーバ内遅延制御装置100において、カーネル(Kernel171)は、当該カーネル(Kernel171)を起動させたまま、処理動作を変更可能なパッチ(livepatch)を有することを特徴とする。
このようにすることにより、livepatchを用いて、(Kernel171)を起動させたまま、処理動作が変更可能になるので、kernelの改造が不要である。このため、例えばkernelのセキュリティアップデートの度に、開発し直す必要がなく、関連するkernel機能に変更があった場合のみ、処理動作を変更すればよい。
なお、上記各実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行するためのソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、IC(Integrated Circuit)カード、SD(Secure Digital)カード、光ディスク等の記録媒体に保持することができる。
1 パケット処理APL(アプリケーション)
10,10A HW
11 NIC(物理NIC)(インターフェイス部)
12 timer(タイマ)
60 user space(ユーザスペース)
70 OS
72 Ring Buffer(リングバッファ)
74 プロトコル処理部
81 hardIRQ(割込ハンドラ)
90 Host OS(OS)
91,171,181 Kernel(カーネル)
100 サーバ内遅延制御装置
110 パケット到着監視部
120 パケット刈取部
180 Guest OS(OS)
186 poll_list(ポールリスト)
210 Container
1000,1000A,1000B,1000C サーバ内遅延制御システム

Claims (8)

  1. サーバ内遅延制御装置であって、
    OSが、
    カーネルと、
    前記OSを備えるサーバ中のメモリ空間で、前記カーネルが管理するリングバッファと、
    インターフェイス部からのハードウェア割込がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリストと、を有し、
    前記カーネル内に、所定指定間隔のタイマ割込を受付けるとともに、
    ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げる前記サーバ内遅延制御装置を備えており、
    前記サーバ内遅延制御装置は、
    前記タイマ割込をハードウェア割込とし、当該タイマ割込を契機に前記ポールリストのパケットの有無を確認して当該ポールリストを監視するパケット到着監視部と、
    パケットが到着している場合は、前記リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリを前記リングバッファから削除する刈取りを実行するパケット刈取部と、を備える
    ことを特徴とするサーバ内遅延制御装置。
  2. サーバ内遅延制御装置であって、
    仮想マシン内で動作するGuest OSが、
    カーネルと、
    前記Guest OSを備えるサーバ中のメモリ空間で、前記カーネルが管理するリングバッファと、
    インターフェイス部からのハードウェア割込がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリストと、
    刈取りが実行されたパケットのプロトコル処理を行うプロトコル処理部と、を有し、
    前記カーネル内に、所定指定間隔のタイマ割込を受付けるとともに、
    ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げる前記サーバ内遅延制御装置を備えており、
    前記サーバ内遅延制御装置は、
    前記タイマ割込をハードウェア割込とし、当該タイマ割込を契機に前記ポールリストのパケットの有無を確認して当該ポールリストを監視するパケット到着監視部と、
    パケットが到着している場合は、前記リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリを前記リングバッファから削除する刈取りを実行するパケット刈取部と、を備える
    ことを特徴とするサーバ内遅延制御装置。
  3. サーバ内遅延制御装置であって、
    仮想マシンおよび前記仮想マシン外に形成された外部プロセスが動作可能なHost OSが、
    カーネルと、
    前記Host OSを備えるサーバ中のメモリ空間で、前記カーネルが管理するリングバッファと、
    インターフェイス部からのハードウェア割込がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリストと、
    前記カーネルにより作成される仮想インターフェイスであるtapデバイスと、を備え、
    前記カーネル内に、所定指定間隔のタイマ割込を受付けるとともに、
    ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げる前記サーバ内遅延制御装置を備えており、
    前記サーバ内遅延制御装置は、
    前記タイマ割込をハードウェア割込とし、当該タイマ割込を契機に前記ポールリストのパケットの有無を確認して当該ポールリストを監視するパケット到着監視部と、
    パケットが到着している場合は、前記リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリを前記リングバッファから削除する刈取りを実行するパケット刈取部と、を備える
    ことを特徴とするサーバ内遅延制御装置。
  4. 前記インターフェイス部は、ハードウェア割込を割込ハンドラに立ち上げて前記ポールリストにデバイスを登録する場合、ソフトウェア割込によるスケジューリングを停止する
    ことを特徴とする請求項1乃至3のいずれか一項に記載のサーバ内遅延制御装置。
  5. 前記所定指定間隔は、ハードウェア割込によるパケット処理が、システム動作に必要なCPUタイムであり、かつ、所定時間以上は前記CPUタイムを専有しないような時間間隔である
    ことを特徴とする請求項1乃至3のいずれか一項に記載のサーバ内遅延制御装置。
  6. 前記カーネルは、当該カーネルを起動させたまま、処理動作を変更可能なパッチを有する
    ことを特徴とする請求項1乃至3のいずれか一項に記載のサーバ内遅延制御装置。
  7. サーバ内遅延制御装置のサーバ内遅延制御方法であって、
    OSが、
    カーネルと、
    前記OSを備えるサーバ中のメモリ空間で、前記カーネルが管理するリングバッファと、
    インターフェイス部からのハードウェア割込がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリストと、を有し、
    前記カーネル内に、所定指定間隔のタイマ割込を受付けるとともに、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げるサーバ内遅延制御装置を備えており、
    前記サーバ内遅延制御装置は、
    前記タイマ割込をハードウェア割込とし、当該タイマ割込を契機に前は記ポールリストのパケットの有無を確認して当該ポールリストを監視するステップと、
    パケットが到着している場合は、前記リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリを前記リングバッファから削除する刈取りを実行するステップと、を実行する
    ことを特徴とするサーバ内遅延制御方法。
  8. OSが、
    カーネルと、
    前記OSを備えるサーバ中のメモリ空間で、前記カーネルが管理するリングバッファと、
    インターフェイス部からのハードウェア割込がどのデバイスのものであるかを示すネットデバイスの情報を登録するポールリストと、を有し、
    前記カーネル内に、所定指定間隔のタイマ割込を受付けるとともに、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げるサーバ内遅延制御装置を備えており、前記サーバ内遅延制御装置としてのコンピュータに、
    前記タイマ割込をハードウェア割込とし、当該タイマ割込を契機に前記ポールリストのパケットの有無を確認して当該ポールリストを監視するパケット到着監視手順、
    パケットが到着している場合は、前記リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリを前記リングバッファから削除する刈取りを実行するパケット刈取手順、
    を実行させるためのプログラム。
JP2022581084A 2021-02-10 2021-02-10 サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム Active JP7485101B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2021/005002 WO2022172366A1 (ja) 2021-02-10 2021-02-10 サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム

Publications (2)

Publication Number Publication Date
JPWO2022172366A1 JPWO2022172366A1 (ja) 2022-08-18
JP7485101B2 true JP7485101B2 (ja) 2024-05-16

Family

ID=82838467

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022581084A Active JP7485101B2 (ja) 2021-02-10 2021-02-10 サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム

Country Status (3)

Country Link
US (1) US12476921B2 (ja)
JP (1) JP7485101B2 (ja)
WO (1) WO2022172366A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240160468A1 (en) * 2021-03-18 2024-05-16 Nippon Telegraph And Telephone Corporation Server delay control device, server delay control method, and program
CN116932234A (zh) * 2022-03-29 2023-10-24 华为技术有限公司 应用程序间通信方法、装置、存储介质及程序产品

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 (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7467202B2 (en) * 2003-09-10 2008-12-16 Fidelis Security Systems High-performance network content analysis platform
US9558132B2 (en) * 2013-08-14 2017-01-31 Intel Corporation Socket management with reduced latency packet processing
JP6543231B2 (ja) 2016-08-23 2019-07-10 日本電信電話株式会社 仮想マシンの接続制御システムおよび仮想マシンの接続制御方法
US11520724B2 (en) * 2018-09-07 2022-12-06 The Board Of Trustees Of The University Of Illinois Application-transparent near-memory processing architecture with memory channel network
US11249660B2 (en) * 2020-07-17 2022-02-15 Vmware, Inc. Low-latency shared memory channel across address spaces without system call overhead in a computing system

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
JPWO2022172366A1 (ja) 2022-08-18
US20240129255A1 (en) 2024-04-18
US12476921B2 (en) 2025-11-18
WO2022172366A1 (ja) 2022-08-18

Similar Documents

Publication Publication Date Title
JP7310924B2 (ja) サーバ内遅延制御装置、サーバ、サーバ内遅延制御方法およびプログラム
JP7251648B2 (ja) サーバ内遅延制御システム、サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
WO2002031672A2 (en) Method and apparatus for interprocessor communication and peripheral sharing
JP7451438B2 (ja) 通信装置、通信システム、通知方法及びプログラム
JP2024180507A (ja) サーバおよびプログラム
JP2025100826A (ja) サーバ内データ転送装置、サーバ内データ転送方法およびプログラム
JP7485101B2 (ja) サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
Chang et al. Virtualization technology for TCP/IP offload engine
JP7662062B2 (ja) サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
JP7754299B2 (ja) サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
JP7816498B2 (ja) サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
JP7852718B2 (ja) サーバ内データ転送装置、データ転送システム、サーバ内データ転送方法およびプログラム
JP7574902B2 (ja) サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
JP2026074185A (ja) サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230612

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240415

R150 Certificate of patent or registration of utility model

Ref document number: 7485101

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350