IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電信電話株式会社の特許一覧

特許7574902サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-21
(45)【発行日】2024-10-29
(54)【発明の名称】サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
(51)【国際特許分類】
   G06F 9/48 20060101AFI20241022BHJP
   G06F 9/455 20180101ALI20241022BHJP
   G06F 9/46 20060101ALI20241022BHJP
【FI】
G06F9/48 110G
G06F9/455 150
G06F9/46 410
【請求項の数】 3
(21)【出願番号】P 2023186709
(22)【出願日】2023-10-31
(62)【分割の表示】P 2023576480の分割
【原出願日】2022-01-27
(65)【公開番号】P2024111799
(43)【公開日】2024-08-19
【審査請求日】2023-10-31
【早期審査対象出願】
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】110001807
【氏名又は名称】弁理士法人磯野国際特許商標事務所
(72)【発明者】
【氏名】名取 廣
(72)【発明者】
【氏名】藤本 圭
【審査官】田中 幸雄
(56)【参考文献】
【文献】特表2018-507457(JP,A)
【文献】国際公開第2021/130828(WO,A1)
【文献】特開2004-199683(JP,A)
【文献】米国特許出願公開第2009/0089784(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/48
G06F 9/455
G06F 9/46
(57)【特許請求の範囲】
【請求項1】
ユーザ空間に配置され、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げるサーバ内遅延制御装置であって、
デバイスの受信キューをポーリングにより監視し、パケットが到着している場合は、データを取得するデータ到着監視部と、
前記データ到着監視部が取得したデータをアプリケーションプログラムに通知して受け渡すデータ到着通知部と、
パケットが所定期間到着しない場合は前記スレッドをスリープさせ、かつ、パケット到着時はハードウェア割込により当該スレッドのスリープ解除を行うスリープ管理部と、を備え、
前記スリープ管理部は、アプリケーションプログラムの特性に基づいて、前記ハードウェア割込を許可して前記スリープするタイミングを制御する
ことを特徴とするサーバ内遅延制御装置。
【請求項2】
ユーザ空間に配置され、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げるサーバ内遅延制御装置のサーバ内遅延制御方法であって、
前記サーバ内遅延制御装置は、
デバイスの受信キューをポーリングにより監視し、パケットが到着している場合は、データを取得するステップと、
取得したデータをアプリケーションプログラムに通知して受け渡すステップと、
パケットが所定期間到着しない場合は前記スレッドをスリープさせ、かつ、パケット到着時はハードウェア割込により当該スレッドのスリープ解除を行うとともに、
前記アプリケーションプログラムの特性に基づいて、前記ハードウェア割込を許可して前記スリープするタイミングを制御するステップと、を実行する
ことを特徴とするサーバ内遅延制御方法。
【請求項3】
コンピュータを、請求項1に記載のサーバ内遅延制御装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラムに関する。
【背景技術】
【0002】
NFV(Network Functions Virtualization:ネットワーク機能仮想化)による仮想化技術の進展などを背景に、サービス毎にシステムを構築して運用することが行われている。また、上記サービス毎にシステムを構築する形態から、サービス機能を再利用可能なモジュール単位に分割し、独立した仮想マシン(VM:Virtual Machineやコンテナなど)環境の上で動作させることで、部品のようにして必要に応じて利用し運用性を高めるといったSFC(Service Function Chaining)と呼ばれる形態が主流となりつつある。
【0003】
仮想マシンを構成する技術としてLinux(登録商標)とKVM(kernel-based virtual machine)で構成されたハイパーバイザー環境が知られている。この環境では、KVMモジュールが組み込まれたHost OS(物理サーバ上にインストールされたOSをHost OSと呼ぶ)がハイパーバイザーとしてカーネル空間と呼ばれるユーザ空間とは異なるメモリ領域で動作する。この環境においてユーザ空間にて仮想マシンが動作し、その仮想マシン内にGuest OS(仮想マシン上にインストールされたOSをGuest OSと呼ぶ)が動作する。
【0004】
Guest OSが動作する仮想マシンは、Host OSが動作する物理サーバとは異なり、(イーサネット(登録商標)カードデバイスなどに代表される)ネットワークデバイスを含むすべてのHW(hardware)が、HWからGuest OSへの割込処理やGuest OSからハードウェアへの書き込みに必要なレジスタ制御となる。このようなレジスタ制御では、本来物理ハードウェアが実行すべき通知や処理がソフトウェアで擬似的に模倣されるため、性能がHost OS環境に比べ、低いことが一般的である。
【0005】
この性能劣化において、特にGuest OSから自仮想マシン外に存在するHost OSや外部プロセスに対して、HWの模倣を削減し、高速かつ統一的なインターフェイスにより通信の性能と汎用性を向上させる技術がある。この技術として、virtioというデバイスの抽象化技術、つまり準仮想化技術が開発されており、すでにLinux(登録商標)を始め、FreeBSD(登録商標)など多くの汎用OSに組み込まれ、現在利用されている。
【0006】
virtioでは、コンソール、ファイル入出力、ネットワーク通信といったデータ入出力に関して、転送データの単一方向の転送用トランスポートとして、リングバッファで設計されたキューによるデータ交換をキューのオペレーションにより定義している。そして、virtioのキューの仕様を利用して、それぞれのデバイスに適したキューの個数と大きさをGuest OS起動時に用意することにより、Guest OSと自仮想マシン外部との通信を、ハードウェアエミュレーションを実行せずにキューによるオペレーションだけで実現することができる。
【0007】
サーバ内のデータ転送技術としてNew API(NAPI)、DPDK(Data Plane Development Kit)、KBP(Kernel Busy Poll)がある。
【0008】
New API(NAPI)は、パケットが到着するとハードウェア割込要求の後、ソフトウェア割込要求によりパケット処理を行う(非特許文献1参照)(後記図19参照)。
【0009】
DPDKは、アプリケーションが動作するユーザスペースでパケット処理機能を実現し、ユーザスペースからpollingモデルでパケット到着時に即時刈取りを行う。詳細には、DPDKは、従来Linux kernel(登録商標)が行っていたNIC(Network Interface Card)の制御をユーザ空間で行うためのフレームワークである。Linux kernelにおける処理との最大の違いは、PMD(Pull Mode Driver)と呼ばれるポーリングベースの受信機構を持つことである。通常、Linux kernelでは、NICへのデータの到達を受けて、割込が発生し、それを契機に受信処理が実行される。一方、PMDは、データ到達の確認や受信処理を専用のスレッドが継続的に行う。PMDは、コンテキストスイッチや割込などのオーバーヘッドを排除することで高速なパケット処理を行うことができる。DPDKは、パケット処理のパフォーマンスとスループットを大幅に高めて、データプレーン・アプリケーション処理に多くの時間を確保することを可能にする。ただし、DPDKは、CPU(Central Processing Unit)やNICなどのコンピュータ資源を占有的に使用する。
【0010】
特許文献1には、サーバ内ネットワーク遅延制御装置(KBP:Kernel Busy Poll)が記載されている。KBPは、kernel内でpollingモデルによりパケット到着を常時監視する。これにより、softIRQを抑止し、低遅延なパケット処理を実現する。
【0011】
[New API(NAPI)によるRx側パケット処理]
図19は、Linux kernel 2.5/2.6より実装されているNew API(NAPI)によるRx側パケット処理の概略図である(非特許文献1参照)。
図19に示すように、New API(NAPI)は、OS70(例えば、Host OS)を備えるサーバ上で、ユーザが使用可能なuser space60に配置されたデータ処理APL1を実行し、OS70に接続されたHW10のNIC11とデータ処理APL1との間でパケット転送を行う。
【0012】
OS70は、kernel71、Ring Buffer72、およびDriver73を有し、kernel71は、プロトコル処理部74を有する。
Kernel71は、OS70(例えば、Host OS)の基幹部分の機能であり、ハードウェアの監視やプログラムの実行状態をプロセス単位で管理する。ここでは、kernel71は、データ処理APL1からの要求に応えるとともに、HW10からの要求をデータ処理APL1に伝える。Kernel71は、データ処理APL1からの要求に対して、システムコール(「非特権モードで動作しているユーザプログラム」が「特権モードで動作しているカーネル」に処理を依頼)を介することで処理する。
Kernel71は、Socket75を介して、データ処理APL1へパケットを伝達する。Kernel71は、Socket75を介してデータ処理APL1からパケットを受信する。
【0013】
Ring Buffer72は、Kernel71が管理し、サーバ中のメモリ空間にある。Ring Buffer72は、Kernel71が出力するメッセージをログとして格納する一定サイズのバッファであり、上限サイズを超過すると先頭から上書きされる。
【0014】
Driver73は、kernel71でハードウェアの監視を行うためデバイスドライバである。なお、Driver73は、kernel71に依存し、作成された(ビルドされた)カーネルソースが変われば、別物になる。この場合、該当ドライバ・ソースを入手し、ドライバを使用するOS上で再ビルドし、ドライバを作成することになる。
【0015】
プロトコル処理部74は、OSI(Open Systems Interconnection)参照モデルが定義するL2(データリンク層)/L3(ネットワーク層)/L4(トランスポート層)のプロトコル処理を行う。
【0016】
Socket75は、kernel71がプロセス間通信を行うためのインターフェイスである。Socket75は、ソケットバッファを有し、データのコピー処理を頻繁に発生させない。Socket75を介しての通信確立までの流れは、下記の通りである。1.サーバ側がクライアントを受け付けるソケットファイルを作成する。2.受付用ソケットファイルに名前をつける。3.ソケット・キューを作成する。4.ソケット・キューに入っているクライアントからの接続の最初の1つを受け付ける。5.クライアント側ではソケットファイルを作成する。6.クライアント側からサーバへ接続要求を出す。7.サーバ側で、受付用ソケットファイルとは別に、接続用ソケットファイルを作成する。通信確立の結果、データ処理APL1は、kernel71に対してread()やwrite()などのシステムコールを呼び出せるようになる。
【0017】
以上の構成において、Kernel71は、NIC11からのパケット到着の知らせを、ハードウェア割込(hardIRQ)により受け取り、パケット処理のためのソフトウェア割込(softIRQ)をスケジューリングする。
上記、Linux kernel 2.5/2.6より実装されているNew API(NAPI)は、パケットが到着するとハードウェア割込(hardIRQ)の後、ソフトウェア割込(softIRQ)により、パケット処理を行う。図19に示すように、割込モデルによるパケット転送は、割込処理(図19の符号a参照)によりパケットの転送を行うため、割込処理の待ち合わせが発生し、パケット転送の遅延が大きくなる。
【0018】
以下、NAPI Rx側パケット処理概要について説明する。
[New API(NAPI)によるRx側パケット処理構成]
図20は、図19の破線で囲んだ箇所におけるNew API(NAPI)によるRx側パケット処理の概要を説明する図である。
<Device driver>
図20に示すように、Device driverには、ネットワークインターフェースカードであるNIC11(物理NIC)、NIC11の処理要求の発生によって呼び出され要求された処理(ハードウェア割込)を実行するハンドラであるhardIRQ81、およびソフトウェア割込の処理機能部であるnetif_rx82が配置される。
【0019】
<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が配置される。
【0020】
<Protocol layer>
Protocol layerには、パケット処理機能部であるip_rcv88、arp_rcv89等が配置される。
【0021】
上記netif_rx82、do_softirq84、net_rx_action85、netif_receive_skb87、ip_rcv88、およびarp_rcv89は、Kernel71の中でパケット処理のために用いられるプログラムの部品(関数の名称)である。
【0022】
[New API(NAPI)によるRx側パケット処理動作]
図20の矢印(符号)b~mは、Rx側パケット処理の流れを示している。
NIC11のhardware機能部11a(以下、NIC11という)が、対向装置からフレーム内にパケット(またはフレーム)を受信すると、DMA(Direct Memory Access)転送によりCPUを使用せずに、Ring Buffer72へ到着したパケットをコピーする(図20の符号b参照)。このRing Buffer72は、サーバの中にあるメモリ空間で、Kernel71(図19参照)が管理している。
【0023】
しかし、NIC11が、Ring Buffer72へ到着したパケットをコピーしただけでは、Kernel71は、そのパケットを認知できない。そこで、NIC11は、パケットが到着すると、ハードウェア割込(hardIRQ)をhardIRQ81に上げ(図20の符号c参照)、netif_rx82が下記の処理を実行することで、Kernel71は、当該パケットを認知する。なお、図20の楕円で囲んで示すhardIRQ81は、機能部ではなくハンドラを表記する。
【0024】
netif_rx82は、実際に処理をする機能であり、hardIRQ81(ハンドラ)が立ち上がると(図20の符号d参照)、poll_list86に、ハードウェア割込(hardIRQ)の中身の情報の1つである、NIC11からのハードウェア割込がどのデバイスのものであるかを示すネットデバイス(net_device)の情報を保存する。そして、netif_rx82は、キューの刈取りを登録する。ここで、キューの刈取りとは、バッファに溜まっているパケットの中身を参照して、そのパケットの処理を、次に行う処理を考慮してバッファから該当するキューのエントリを削除することである。具体的には、netif_rx82は、Ring Buffer72にパケットが詰め込まれたことを受けて、NIC11のドライバを使って、以後のキューの刈取りをpoll_list86に登録する(図20の符号e参照)。これにより、poll_list86には、Ring Buffer72にパケットが詰め込まれたことによる、キューの刈取り情報が登録される。
【0025】
このように、図20の<Device driver>において、NIC11は、パケットを受信すると、DMA転送によりRing Buffer72へ到着したパケットをコピーする。また、NIC11は、hardIRQ81(ハンドラ)を立ち上げ、netif_rx82は、poll_list86にnet_deviceを登録し、ソフトウェア割込(softIRQ)をスケジューリングする。
ここまでで、図20の<Device driver>におけるハードウェア割込の処理は停止する。
【0026】
その後、netif_rx82は、poll_list86に積まれているキューに入っている情報(具体的にはポインタ)を用いて、Ring Buffer72に格納されているデータを刈取ることを、ソフトウェア割込(softIRQ)でsoftIRQ83(ハンドラ)に上げ(図20の符号f参照)、ソフトウェア割込の制御機能部であるdo_softirq84に通知する(図20の符号g参照)。
【0027】
do_softirq84は、ソフトウェア割込制御機能部であり、ソフトウェア割込の各機能を定義(パケット処理は各種あり、割込処理はそのうちの一つ。割込処理を定義する)している。do_softirq84は、この定義をもとに、実際にソフトウェア割込処理を行うnet_rx_action85に、今回の(該当の)ソフトウェア割込の依頼を通知する(図20の符号h参照)。
【0028】
net_rx_action85は、softIRQの順番がまわってくると、poll_list86に登録されたnet_deviceをもとに(図20の符号i参照)、Ring Buffer72からパケットを刈取るためのポーリングルーチンを呼び出し、パケットを刈取る(図20の符号j参照)。このとき、net_rx_action85は、poll_list86が空になるまで刈取りを続ける。
その後、net_rx_action85は、netif_receive_skb87に通達をする(図20の符号k参照)。
【0029】
netif_receive_skb87は、sk_buff構造体を作り、パケットの内容を解析し、タイプ毎に後段のプロトコル処理部74(図19参照)へ処理をまわす。すなわち、netif_receive_skb87は、パケットの中身を解析し、パケットの中身に応じて処理をする場合には、<Protocol layer>のip_rcv88に処理を回し(図20の符号l)、また、例えばL2であればarp_rcv89に処理をまわす(図20の符号m)。
【0030】
図21は、映像(30FPS)のデータ転送例である。図21に示すワークロードは、転送レート350Mbpsで、30msごとに間欠的にデータ転送を行っている。
【0031】
図22は、特許文献1に記載のKBPにおける、busy poll threadが使用するCPU使用率を示す図である。
図22に示すように、KBPでは、kernel threadはbusy pollを行うために、CPUコアを専有する。図21に示す間欠的なパケット受信であっても、KBPでは、パケット到着有無に関わらず常にCPUを使用するため、消費電力が大きくなる課題がある。
【0032】
次に、DPDKシステムについて説明する。
[DPDKシステム構成]
図23は、アクセラレータ120を備えるHW110の制御を行うDPDKシステムの構成を示す図である。
DPDKシステムは、HW110、OS140、user space(ユーザ空間)160上に配置されたデータ高速転送ミドルウェアであるDPDK150、データ処理APL1を有する。
データ処理APL1は、APLの実行に先立って行われるパケット処理である。
HW110は、データ処理APL1との間でデータ送受信の通信を行う。以下の説明において、図23に示すように、データ処理APL1が、HW110からのパケットを受け取るデータの流れをRx側受信と称し、データ処理APL1が、HW110にパケットを送信するデータの流れをTx側送信と称する。
【0033】
HW110は、アクセラレータ120と、通信ネットワークに接続するためのNIC130(物理NIC)と、を備える。
アクセラレータ120は、CPUからの入力をもとに、特定の演算を高速に行う計算ユニットハードウェアである。アクセラレータ120は、具体的には、GPU(Graphics Processing Unit)やFPGA(Field Programmable Gate Array)等のPLD(Programmable Logic Device)である。図23では、アクセラレータ120は、複数のCore(Coreプロセッサ)121、データを先入れ先出しのリスト構造で保持するRxキュー(queue:待ち行列)122およびTxキュー123を備える。
【0034】
アクセラレータ120にデータ処理APL1の処理の一部をオフロードし、ソフトウェア(CPU処理)のみでは到達できない性能や電力効率を実現する。
NFV(Network Functions Virtualization)やSDN(Software Defined Network)を構成するデータセンタなど、大規模なサーバクラスタにおいて、上記のようなアクセラレータ120を適用するケースが想定される。
【0035】
NIC130は、NWインターフェイスを実現するNICハードウェアであり、データを先入れ先出しのリスト構造で保持するRxキュー131およびTxキュー132を備える。NIC130は、例えば通信ネットワークを介して対向装置170に接続され、パケット送受信を行う。
なお、NIC130は、例えばアクセラレータ付きのNICであるSmartNICであってもよい。SmartNICは、処理能力が落ちる原因となるIPパケット処理など、負荷のかかる処理をオフロードしてCPUの負荷を軽減することができるNICである。
【0036】
DPDK150は、NICの制御をuser space160で行うためのフレームワークであり、具体的にはデータ高速転送ミドルウェアからなる。DPDK150は、ポーリングベースの受信機構であるPMD(Poll Mode Driver)151(データ到着をポーリングモードまたは割込モードで選択可能なドライバ)を有する。PMD151は、データ到達の確認や受信処理を専用のスレッドが継続的に行う。
【0037】
DPDK150は、APLが動作するuser space160でパケット処理機能を実現し、user space160からpollingモデルでパケット到着時に即時刈取りを行うことで、パケット転送遅延を小さくすることを可能にする。すなわち、DPDK150は、polling(CPUでキューをbusy poll)によりパケットの刈取りを行うため、待ち合わせがなく遅延小である。
【0038】
特許文献1には、サーバ内ネットワーク遅延制御装置(KBP:Kernel Busy Poll)が記載されている。KBPは、kernel内でpollingモデルによりパケット到着を常時監視する。これにより、softIRQを抑止し、低遅延なパケット処理を実現する。
【0039】
ところで、割込モデルとポーリングモデルによるパケット転送のいずれについても下記課題がある。
割込モデルは、HWからイベント(ハードウェア割込)を受けたkernelがパケット加工を行うためのソフトウェア割込処理によってパケット転送を行う。このため、割込モデルは、割込(ソフトウェア割込)処理によりパケット転送を行うので、他の割込との競合や、割込先CPUがより優先度の高いプロセスに使用されていると待ち合わせが発生し、パケット転送の遅延が大きくなるといった課題がある。この場合、割込処理が混雑すると、更に待ち合わせ遅延は大きくなる。
例えば、割込モデルによるパケット転送は、割込処理によりパケットの転送を行うため、割込処理の待ち合わせが発生し、パケット転送の遅延が大きくなる。
【0040】
割込モデルにおいて、遅延が発生するメカニズムについて補足する。
一般的なkernelは、パケット転送処理はハードウェア割込処理の後、ソフトウェア割込処理にて伝達される。
パケット転送処理のソフトウェア割込が発生した際に、下記条件(1)~(3)においては、前記ソフトウェア割込処理を即時に実行することができない。このため、ksoftirqd(CPU毎のカーネルスレッドであり、ソフトウェア割込の負荷が高くなったときに実行される)等のスケジューラにより調停され、割込処理がスケジューリングされることにより、msオーダの待ち合わせが発生する。
(1)他のハードウェア割込処理と競合した場合
(2)他のソフトウェア割込処理と競合した場合
(3)優先度の高い他プロセスやkernel thread(migration thread等)、割込先CPUが使用されている場合
上記条件では、前記ソフトウェア割込処理を即時に実行することができない。
【先行技術文献】
【特許文献】
【0041】
【文献】国際公開第2021/130828号
【非特許文献】
【0042】
【文献】New API(NAPI), [online],[令和4年1月11日検索],インターネット 〈 URL : http:// http://lwn.net/2002/0321/a/napi-howto.php3〉
【発明の概要】
【発明が解決しようとする課題】
【0043】
特許文献1に記載のサーバ内ネットワーク遅延制御装置(KBP)のように、カーネル内に受信用Polling Threadを配備した場合には、汎用性を志向するため、各アプリケーションの特性を意識した受信処理を行うことが難しい。結果的に、受信処理における低遅延性や省電力性を損なう場合がある。例えば、上記省電力サーバ内ネットワーク遅延制御装置では、受信処理が終了し、次のデータ到着がない(poll_listが空になった)場合、Polling Threadを即時Sleepする機能がある。この機能は、一般には省電力性を高める効果が見込める。一方で、アプリケーションが「カーネル内プロトコル処理を必要とせず、カーネルから即時にデータを受け取る」という特性を持つ場合には、受信処理が直ちに完了しpoll_listが空になりやすいため、連続的にデータを受信していてもSleepに入る場合がある。その結果として、ハードウェア割り込みによる起床が多発し、省電力性・低遅延性を損なうことがある。
【0044】
このような背景を鑑みて本発明がなされたのであり、本発明は、アプリケーションの特性がそれぞれ異なるアプリケーションに対しても、消費電力の低減を図りつつ、サーバ内の遅延を小さくしてパケット転送を行うことを課題とする。
【課題を解決するための手段】
【0045】
前記した課題を解決するため、ユーザ空間に配置され、ポーリングモデルを用いてパケット到着を監視するスレッドを立ち上げるサーバ内遅延制御装置であって、デバイスの受信キューをポーリングにより監視し、パケットが到着している場合は、データを取得するデータ到着監視部と、前記データ到着監視部が取得したデータをアプリケーションプログラムに通知して受け渡すデータ到着通知部と、パケットが所定期間到着しない場合は前記スレッドをスリープさせ、かつ、パケット到着時はハードウェア割込により当該スレッドのスリープ解除を行うSleep管理部と、を備え、前記Sleep管理部は、アプリケーションプログラムの特性に基づいて、前記ハードウェア割込を許可して前記スリープするタイミングを制御することを特徴とするサーバ内遅延制御装置とした。
【発明の効果】
【0046】
本発明によれば、アプリケーションの特性がそれぞれ異なるアプリケーションに対しても、消費電力の低減を図りつつ、サーバ内の遅延を小さくしてパケット転送を行うことができる。
【図面の簡単な説明】
【0047】
図1】本発明の第1実施形態に係るサーバ内遅延制御システムの概略構成図である。
図2】本発明の第1実施形態に係るサーバ内遅延制御システムの動作を説明するための図である。
図3】本発明の第1実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置のPolling Thread動作中の転送処理(データ到着通知部がパケットを処理しない場合)のフローチャートである。
図4】本発明の第1実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置のPolling Thread動作中の転送処理(データ到着通知部がパケットを処理しない場合)の動作を説明する図である。
図5】本発明の第1実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置のPolling Thread動作中の転送処理(データ到着通知部がパケットを処理する場合)のフローチャートである。
図6】本発明の第1実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置のPolling Thread動作中の転送処理(データ到着通知部がパケットを処理する場合)の動作を説明する図である。
図7】本発明の第1実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置のPolling ThreadがSleep状態から起床するまでの処理フローチャートである。
図8】本発明の第1実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置のPolling ThreadがSleep状態から起床するまでの動作説明図である。
図9】本発明の第2実施形態に係るサーバ内遅延制御システムの概略構成図である。
図10】本発明の第2実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置の特性情報収集部の動作説明図である。
図11】本発明の第2実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置のロジック配信部の動作説明図である。
図12】本発明の第2実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置におけるデータ到着監視部へのロジック変更の処理フローチャートである。
図13】本発明の第2実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置におけるデータ到着監視部へのロジック変更の動作説明図である。
図14】本発明の第2実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置におけるデータ到着通知部へのロジック変更の処理フローチャートである。
図15】本発明の第2実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置におけるデータ到着通知部へのロジック変更の動作説明図である。
図16】本発明の第2実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置におけるSleep管理部へのロジック変更の処理フローチャートである。
図17】本発明の第2実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置におけるSleep管理部へのロジック変更の動作説明図である。
図18】本発明の第1および第2実施形態に係るサーバ内遅延制御システムのサーバ内遅延制御装置の機能を実現するコンピュータの一例を示すハードウェア構成図である。
図19】Linux kernel 2.5/2.6より実装されているNew API(NAPI)によるRx側パケット処理の概略図である。
図20図19の破線で囲んだ箇所におけるNew API(NAPI)によるRx側パケット処理の概要を説明する図である。
図21】映像(30FPS)のデータ転送例を示す図である。
図22】特許文献1に記載のKBPにおける、busy poll threadが使用するCPU使用率を示す図である。
図23】アクセラレータを備えるHWの制御を行うDPDKシステムの構成を示す図である。
【発明を実施するための形態】
【0048】
以下、図面を参照して本発明を実施するための形態(以下、「本実施形態」という)におけるサーバ内遅延制御システム等について説明する。
(第1実施形態)
図1は、本発明の第1実施形態に係るサーバ内遅延制御システムの概略構成図である。図23と同一構成部分には、同一符号を付している。
図1に示すように、サーバ内遅延制御システム1000は、OS(例えば、Host OS)140を備えるサーバ上で、ユーザが使用可能なUser space160(ユーザ空間)に配置されたデータ処理APL(Application)1(アプリケーションプログラム。以下、適宜、アプリケーションという)を実行し、OSに接続されたHW110のNIC130(デバイス)とデータ処理APL1との間でパケット転送を行う。
サーバ内遅延制御システム1000は、HW110、OS140、user space160上に配置されたサーバ内遅延制御装置200、データ処理APL1を有する。
データ処理APL1は、APLの実行に先立って行われるパケット処理である。
HW110は、データ処理APL1との間でデータ送受信の通信を行う。
HW110は、通信ネットワークに接続するためのNIC130(デバイス)を備える。HW110は、図23に示すアクセラレータ120を備えていてもよい。
【0049】
[サーバ内遅延制御装置]
サーバ内遅延制御装置200は、User space(ユーザ空間)に配置されるPolling Threadである。Polling Thread(サーバ内遅延制御装置200)がOSカーネル内ではなく、ユーザ空間に備わることを特徴とする。Polling Thread(サーバ内遅延制御装置200)は、ユーザ空間でデータ受信処理が定義されるため、アプリケーション特性(アプリケーションプログラムの特性)に合わせて受信処理の方式を変更することができる。
【0050】
サーバ内遅延制御装置200は、データ到着監視部210と、データ到着通知部220と、Sleep管理部230と、を備える。
【0051】
<データ到着監視部210>
データ到着監視部210は、デバイスの受信キューをpollingによって監視し、パケットが到着した場合にはデータを取得してデータ到着通知部220に受け渡す。
具体的には、データ到着監視部210は、デバイスの受信キューをポーリングにより監視し、パケットが到着している場合は、リングバッファに保持したパケットを参照し、次に行う処理に基づいて該当するキューのエントリをリングバッファから削除する刈取りを行う。すなわち、データ到着監視部210は、デバイスの受信キューをpollingによって監視し、即時刈取を行う。
データ到着監視部210は、アプリケーションの特性に基づく所定のタイミングで、デバイスの受信キューにデータが到着しているかを確認する。
【0052】
データ到着監視部210は、所定時間の停止後、デバイスの受信キューにデータが到着しているかを確認する。すなわち、データ到着監視部210は、アプリケーションの特性に応じて、pollingに一時停止を挟むことでCPUサイクル数を抑えて監視する。
【0053】
<データ到着通知部220>
データ到着通知部220は、データ到着監視部210が取得したデータをアプリケーションに通知して受け渡す。
【0054】
データ到着通知部220は、アプリケーションの特性が、パケットを逐次処理する特性の場合には、パケット到着時に直ちに通知する。一方、データ到着通知部220は、パケットをバッチ処理する特性の場合には、所定数のパケットが到着した際に通知する。
【0055】
データ到着通知部220は、パケット処理機能を有し、アプリケーションプログラムの特性をもとに、パケット処理機能を実行し、当該パケット処理機能を実行した場合、アプリケーションプログラムに通知しない。このように、データ到着通知部220は、アプリケーションの特性に合わせて、バッチして通知する方式や逐次通知する方式を選択でき、更にこの機能部にパケットを処理させることもできる。
【0056】
<Sleep管理部230>
Sleep管理部230は、アプリケーションの特性に基づいて、ハードウェア割込を許可してスリープするタイミングを制御する。
Sleep管理部230は、Polling ThreadをSleepさせてHW割り込みを許可したり、HW割り込みを禁止してPolling Threadを起床させたりする。この際、アプリケーションの特性に合わせて、Sleepするタイミングを制御できる。
【0057】
Sleep管理部230は、パケット未着時にPolling ThreadをSleepさせ、再びパケットが届いた際にはHardIRQから起こされ、Pollingを開始させる。
【0058】
Sleep管理部230は、Polling時には、Sleepを開始する際に、Polling Threadを停止させ、HW割り込みを許可してSleepする。この際、CPU動作周波数や動作電圧を下げることで、Sleep中の消費電力を更に削減する。
【0059】
Sleep管理部230は、アプリケーションの特性に応じ、HW割り込みを許可してSleepするタイミングを制御する機構を持つ。例えば、ドライバの受信キューが空になっても、直ちにパケットが到着するようなアプリケーションの場合にはPollingを続けることもできる。
【0060】
Sleep管理部230は、Sleep時には、パケット到着時に発生するHW割り込みによって起こされ、HW割り込みを禁止したままPollingを開始する。この際、CPU動作周波数や電圧を高く設定しなおす。
【0061】
Sleep管理部230は、パケットが未着になってからの経過時間とアプリケーションの特性に適した時間とを比較し、パケットが未着になってからの経過時間がアプリケーションの特性に適した時間以上の場合、ハードウェア割り込みを有効化し、スレッドをスリープさせる。
【0062】
以下、上述のように構成されたサーバ内遅延制御システム1000の動作を説明する。
[サーバ内遅延制御システム1000の全体動作]
図2は、図1のサーバ内遅延制御システム1000の動作を説明するための図である。
図2の矢印(符号)aa~ggは、Rx側パケット処理の流れを示している。
NIC130が、対向装置からフレーム内にパケット(またはフレーム)を受信すると、OS140をバイパスしてパケットをPolling Thread(サーバ内遅延制御装置200)のデータ到着監視部210に送信する。
【0063】
<データ到着監視部210の動作>
データ到着監視部210は、デバイスの受信キューをpollingによって監視し(図2の<Polling>;符号aa参照)、パケットが到着した場合には刈り取ってデータ到着通知部220に受け渡す(図2の符号bb参照)。アプリケーションの遅延要件が厳しくない場合や、パケットの到着間隔が短くない場合に、Pollingに一時停止を挟むことで、CPUサイクル数を削減しながら受信監視を行うことができる(省電力化)。
【0064】
データ到着監視部210は、パケット到着を監視するPolling Threadを立ち上げ、ネットワークデバイスの受信キューを直接監視する。パケット到着時は、待合せなく即時に刈り取られるため、低遅延なパケット処理を実現することができる(「特徴1:低遅延なパケット転送」)。
【0065】
<データ到着通知部220の動作>
データ到着通知部220は、データ到着監視部210が刈り取ったデータをデータ処理APL(Application)1に通知して受け渡す(図2の<notify>;符号cc参照)。
【0066】
ここで、「パケットを逐次処理するアプリケーションには、データ到着時に直ちに通知する」または「パケットをバッチ処理するアプリケーションには、一定数のデータが到着した際に通知する」というように、アプリケーションの特性に合わせて到着通知方式を選択することができる。
更に、アプリケーションが単純である場合、通知するのではなく、パケット処理をする機能を具備することで、到着通知のオーバーヘッドを削減してパケットを処理することもできる。
【0067】
Polling Thread(サーバ内遅延制御装置200)は、アプリケーションの特性やトラフィック情報に応じて、Pollingによって刈取を行う頻度の制御や、到着したデータをアプリケーションに通知する方式の制御や、Polling ThreadをSleepさせるタイミングの制御を行うことで、アプリケーションの特性やトラフィック情報に応じた更なる低遅延化・省電力化を実現できる(「特徴2:アプリケーション特性やトラフィック情報を意識した受信処理」)。
【0068】
<Sleep管理部230の動作>
NIC130は、パケットが到着すると、HW割込(hardIRQ)をhardIRQ81(ハンドラ)に立ち上げる(図2の<Interrupt>;符号dd参照)。hardwire81(ハンドラ)が立ち上がると、Sleep管理部230は、Sleep時には、パケット到着時に発生するHW割り込みによって起こされ(図2の<Wakeup>;符号ee参照)、HW割り込みを禁止したままPollingを開始する。言い換えれば、Sleep管理部230は、パケット未着時にPolling ThreadをSleepさせ、再びパケットが届いた際にはHardIRQ81から起こされ、Pollingを開始させる。
【0069】
Sleep管理部230は、Polling ThreadをSleepさせてHW割り込みを許可したり、HW割り込みを禁止してPolling Threadを起床させたりする(図2の<Enable/Disable>;符号ff参照)。この際、アプリケーションの特性に合わせて、Sleepするタイミングを制御できる。
【0070】
Sleep管理部230は、Polling時には、Sleepを開始する際に、Polling Threadを停止させ、HW割り込みを許可してSleepする(図2の<Polling Start/stop>;符号gg参照)。この際、CPU動作周波数や動作電圧を下げることで、Sleep中の消費電力を更に削減する。
【0071】
Sleep管理部230は、アプリケーションの特性に応じ、HW割り込みを許可してSleepするタイミングを制御する機構を持つ。例えば、ドライバの受信キューが空になっても、直ちにパケットが到着するようなアプリケーションの場合にはPollingを続けることもできる。
【0072】
Sleep管理部230は、パケット未到着時にPolling ThreadをSleepさせる。これにより、不要なCPU使用を削減し、省電力化を実現する。Sleepする際にCPU動作電圧や動作周波数を下げることで、更に省電力化することができる(「特徴3:省電力」)。
また、sleep中のPolling Threadは、パケット到着時のHardIRQハンドラ81で起こすことで、softIRQ競合を回避しながら即時起動が可能である。
【0073】
<パラメータU,T,Kの決定方法>
後記図3および図5のフローチャートで用いるパラメータU,T,Kの決定方法について説明する。
Polling Thread(サーバ内遅延制御装置200)は、データ到着監視間隔U(データ到着監視部210のパラメータ)、パケット未着になってからSleepに入るまでの時間T(Sleep管理部230のパラメータ)、パケットを通知または処理するバッチ数K(データ到着通知部220のパラメータ)を用いる。第1実施形態では、パラメータU,T,Kは運用者が事前に設定した固定値である。後記第2実施形態では、パラメータU,T,Kはロジック管理部310を介して動的に設定される(説明の便宜上、ここでまとめて述べる)。
【0074】
・データ到着監視間隔Uの決定例
運用者が事前に設定した固定値と、ロジック管理部310(後記)を介した動的な設定とがある。
ロジック管理部310(後記)を介した動的な設定の場合、次の2例がある。
例1:データ到着監視部210でパケット到着頻度を取得し、それに近い頻度で到着監視ができるようにUを設定する。
例2:アプリケーションやサーバ外部のコントローラから、許容される最大遅延を取得し、それを保てる頻度で到着監視ができるようにUを設定する。
【0075】
・パケット未着になってからSleepに入るまでの時間Tの決定例
運用者が事前に設定した固定値と、ロジック管理部310(後記)を介した動的な設定とがある。
ロジック管理部310を介した動的な設定の場合、次の2例がある。
例1:Sleep管理部230で、Sleepに入ってから起床するまでの時間を取得し、その間隔が遅延時間や省電力性に悪影響を与えるほど短い場合、Tを大きくする。
例2:データ到着監視部210やアプリケーションやサーバ外部のコントローラからパケット到着頻度を取得し、それが大きい場合、可能な限りSleepができるようにTを小さくする。
【0076】
・パケットを通知・または処理するバッチ数Kの決定例
バッチ数Kについて述べる。すなわち、データ到着監視部210は、Ring_Buffer領域に複数のパケットが貯まっているときは、複数パケットをまとめて刈り取って、後続のプロトコル処理部(図示省略)へ渡す。このまとめて刈り取る数をquotaと言い、バッチ処理という呼び方をし、その処理数をバッチ数(バッチ処理数)という。
運用者が事前に設定した固定値と、ロジック管理部310(後記)を介した動的な設定とがある。
ロジック管理部310(後記)を介した動的な設定の場合、次の例がある。
例1:アプリケーションから、アプリケーション内のバッチ処理情報を取得し、それに合わせてKを設定する。
【0077】
次に、図3乃至図6を参照して、Polling Thread動作中の転送処理について説明する。Polling Thread動作中の転送処理は、データ到着通知部220がパケットを処理しない場合(図3および図4参照)と、データ到着通知部220がパケットを処理する場合(図5および図6参照)とがあり、それぞれについて述べる。
【0078】
[Polling Thread動作中の転送処理(データ到着通知部220がパケットを処理しない場合)]
<フローチャート>
図3は、Polling Thread動作中の転送処理(データ到着通知部220がパケットを処理しない場合)のフローチャートである。
【0079】
ステップS11でデータ到着監視部210は、アプリケーション特性に適した間隔をあけて、NIC130の受信キューにデータが到着しているかを確認する。データ到着監視部210は、例えば、時間Uだけ一時停止してから確認する。
ステップS12でデータ到着監視部210は、受信キューにデータが到着しているか否かを判別する。受信キューにデータが到着していない場合(S12:No)、ステップS17に進む。
【0080】
受信キューにデータが到着している場合(S12:Yes)、ステップS13でデータ到着監視部210は、受信キューからデータを取得し、データ到着通知部220へ該当情報を伝達する(受信キューに複数データが到着している場合は、複数分伝達する)。また、このとき、Sleep管理部230は、パケットが未着になってからの経過時間Sを0に戻す。
【0081】
ステップS14でデータ到着通知部220は、これまで到達したパケット数Nを加算し、アプリケーション特性に適したバッチ数Kと比較する。
【0082】
ステップS15でデータ到着通知部220は、N≧Kとなっているか否かを判別する。N<Kの場合(S15:No)、上記ステップS11に戻る。
【0083】
N≧Kとなっている場合(S15:Yes)、ステップS16でデータ到着通知部220は、アプリケーションにデータ到着を通知してデータを受け渡し、これまで到達したパケット数Nを0にして上記ステップS11に戻る。
【0084】
ステップS17では、Sleep管理部230は、パケットが未着になってからの経過時間Sとアプリケーション特性に適した時間Tを比較する。
【0085】
ステップS18でSleep管理部230は、S≧Tとなっているか否かを判別する。S<Tの場合(S18:No)、上記ステップS11に戻る。
【0086】
S≧Tとなっている場合(S18:Yes)、ステップS19でSleep管理部230は、HW割り込みを有効化し、CPU動作周波数や動作電圧を低くして、Polling ThreadをSleepに落として本フローの処理を終了する。
【0087】
上記バッチ数K(≧1)、アプリケーション特性に適した時間T(≧0)、一時停止時間U(≧0)について述べる。K,T,Uは、事前に運用者が設定する。また、K,T,Uは、後記するロジック管理部310(第2実施形態で、K,T,Uの決定例について後記する)によって動的に変更される。
【0088】
<動作説明図>
図4は、Polling Thread動作中の転送処理(データ到着通知部220がパケットを処理しない場合)の動作を説明する図である。
NIC130は、パケットを受信した際、DMA(Direct Memory Access)によりCPUを介さずに、直接Ring Buffer(メインメモリ上のバッファ)にパケットをコピーする(図4の<Polling>;符号aa参照)。なお、このRing Bufferは、User Space160のPolling Threadから、OSカーネルを介さずに直接アクセスが可能であるよう、あらかじめ設定する。
【0089】
NIC130は、Polling Threadが駆動するCPUに対して割込を起こし、そのCPUはハードウェア割り込みのコンテキストでPolling Threadに対して起床の通知を行い、Sleep管理部230を起床させる。以降、CPUではPolling Threadが動作する。
【0090】
Sleep管理部230は、CPUの周波数を高く設定し、当該CPUへの割り込みを禁止する(図4の<Enable>;符号ff参照)。CPU周波数は、CPUgovernorの設定によりUser Space160からでも変更が可能である。
【0091】
Sleep管理部230は、データ到着監視部210にPollingの開始を指示する(図4の<Polling stop>;符号gg参照)。上記Pollingの開始指示は、具体的には、Sleep管理部230から、データ到着監視部210の処理にあたる関数を呼び出す、ことである。
【0092】
データ到着監視部210は、事前に運用者が決定した到着確認間隔で、パケットがDMAされるRing Buffer領域に対して到着確認を行い、パケットが届いている場合にはそのパケットのアドレス情報(ポインタ)をデータ到着通知部220に伝達する(図4の符号bb参照)。
【0093】
データ到着通知部220は、データ到着監視部210から伝達されたポインタ情報の数が、運用者が事前に決定したパケットを通知するバッチ数に達しているかを確認する(図3のステップS14~ステップS15)。
【0094】
伝達されたポインタ情報の数が、決定したパケットを通知するバッチ数に達している場合、下記の処理に進む。そうでない場合、上記データ到着監視部210による、パケット到着確認に戻る。
【0095】
データ到着通知部220は、アプリケーションとPolling Threadの共有メモリにアドレス情報を格納し、アプリケーションが動作するスレッドを起こし、そのスレッド内で処理を実行する(図4の<notify>;符号cc参照)。
【0096】
上記、パケットが届いていない時間が運用者が事前に決定した時間続いた場合、データ到着監視部210は、Sleep管理部230を呼び出す(図3のステップS12)。データ到着監視部210がreturnを行うことで、Sleep管理部230に処理が戻る。
【0097】
Sleep管理部230は、CPU周波数を落とし、CPUへの割り込みを有効化して、Polling ThreadをSleep状態に落とす(図3のステップS19)。
【0098】
[Polling Thread動作中の転送処理(データ到着通知部220がパケットを処理する場合)]
アプリケーションロジックが、同一スレッドで実行されるように運用者が設定していた場合、Polling Thread内で処理を行う。
【0099】
<フローチャート>
図5は、Polling Thread動作中の転送処理(データ到着通知部220がパケットを処理する場合)のフローチャートである。図3のフローの同一処理を行うステップには同一番号を付して説明を省略する。
ステップS15でデータ到着通知部220は、N≧Kとなっているか否かを判別し、N≧Kとなっている場合(S15:Yes)、ステップS21に進む。
ステップS21でデータ到着通知部220は、パケットを処理(例えば、別サーバに向けての転送処理)してステップS11に戻る。また、データ到着通知部220は、これまで到達したパケット数Nを0にする。データ到着通知部220がパケットを処理するので、図3のステップS16のデータ到着通知部220のように、アプリケーションにデータ到着を通知してデータを受け渡す処理がない。
【0100】
<動作説明図>
図6は、Polling Thread動作中の転送処理(データ到着通知部220がパケットを処理する場合)の動作を説明する図である。図4の動作説明図と同一構成部分には同一番号を付して説明を省略する。
【0101】
データ到着通知部220は、パケットを処理する。データ到着通知部220が、Polling Thread内で行うパケット処理は、比較的負荷の少ない、別サーバに向けての転送処理などである。
【0102】
[Polling ThreadがSleep状態から起床するまでの処理]
図7は、Polling ThreadがSleep状態から起床するまでの処理フローチャートである。図8は、その動作説明図である。図2の動作説明図と同一構成部分には同一番号を付している。
ステップS31でNIC130にデータが到着し、NIC130からCPUに割り込みが上がる。
ステップS32で該当CPUにおいてHW割り込みのコンテキストが立ち上がる。
ステップS33でHW割り込みのコンテキストで、Polling ThreadのSleep管理部230が起床される。
【0103】
具体的には、図8に示すように、NIC130は、パケットが到着すると、HW割込(hardIRQ)をhardIRQ81(ハンドラ)に立ち上げる(図8の<Interrupt>;符号dd参照)。hardwire81(ハンドラ)が立ち上がると、Sleep管理部230は、Sleep時には、パケット到着時に発生するHW割り込みによって起こされ(図8の<Wakeup>;符号ee参照)、HW割り込みを禁止したままPollingを開始する。
【0104】
ステップS34でSleep管理部は、NIC130からの割り込みを無効化し(図8の<Enable>;符号ff参照)、CPU動作周波数や動作電圧を高く設定し、データ到着監視部210の PollingをStartさせる。Sleep管理部230は、Polling時には、Sleepを開始する際に、Polling Threadを停止させ、HW割り込みを許可してSleepする(図8の<Polling Start >;符号gg参照)。
【0105】
(第2実施形態)
図9は、本発明の第2実施形態に係るサーバ内遅延制御システムの概略構成図である。図1と同一構成部分には、同一符号を付して重複箇所の説明を省略する。
図9に示すように、サーバ内遅延制御システム1000Aは、HW110、OS140、user space160上に配置されたサーバ内遅延制御装置300、データ処理APL1を有する。
【0106】
サーバ内遅延制御装置300は、図1のサーバ内遅延制御装置200のデータ到着監視部210、データ到着通知部220およびSleep管理部230の各機能部(以下、各機能部という)に加えて、ロジック管理部310を備える。
ロジック管理部310は、アプリケーションの特性情報およびスレッドの処理情報を収集し、収集した情報をもとに、時間帯によって負荷が変動し、処理方法および処理速度が変動するようなアプリケーションの場合に、データ到着監視部210、データ到着通知部220、Sleep管理部230のうち、少なくともいずれか一つの機能部の処理ロジックを変更する。
【0107】
<ロジック管理部310>
ロジック管理部310は、図1のサーバ内遅延制御装置200の各機能部について複数の処理ロジックが考えられる場合、動的に処理ロジックを選択して各機能部に通知する。
ロジック管理部310は、時間帯によって負荷が変動し、処理方法や処理速度が変動するようなアプリケーションの場合に、Polling Thread内の各機能部の処理ロジックを変更して受信処理方法を変えることで、低遅延性および省電力性を保つ。
【0108】
ロジック管理部310は、特性情報収集部311と、ロジック配信部312の2つの機能部からなる。
特性情報収集部311は、アプリケーションやPolling Threadから、アプリケーションやトラフィックの特性を収集する。特性情報収集部311は、時間的に変動する特性に適したロジックを適宜決定するために必要な情報を収集する。
【0109】
ロジック配信部312は、特性情報収集部311が収集したアプリケーションやトラフィックの特性情報をもとに、各機能部に適したロジックを適宜決定し、各機能部に配信する。ロジック配信部312は、各機能部を、時間的に変動する特性に適したロジックで動作するように命令する。
以下、特性情報収集部311およびロジック配信部312について動作説明図を参照して詳細に説明する。
【0110】
<特性情報収集部311>
まず、特性情報収集部311について説明する。
図10は、特性情報収集部311の動作説明図である。
特性情報収集部311は、アプリケーションやPolling Threadから特性情報を収集する。
特性情報収集部311は、アプリケーションの特性情報やPolling Threadの処理情報を収集してロジック配信部312に受け渡す。アプリケーションの特性情報やPolling Threadの処理情報は、各機能部のロジックを決定するための情報である。収集した情報は、各機能部に適したロジックを決定するために利用される。
【0111】
アプリケーションの特性情報例について説明する。
アプリケーションの特性情報例として、「アプリケーション内パケット処理方法の変化」があげられる。
例えば、Application Logicの負荷が大きくなり、パケット処理方法が逐次処理からバッチ処理に変更された場合に、特性情報収集部311は、その情報を収集する(図10の符号hh参照)。この情報は、例えばデータ到着通知部220の処理ロジックを「データ到着時に逐次アプリケーションに通知」から「データがK個到着してからアプリケーションに通知」に変更するために使われる。
【0112】
Polling Threadの処理情報例について説明する。
Polling Threadの処理情報例として、「Sleepに入ってから、起床されるまでの時間の統計情報」があげられる。
例えば、Sleepに入ってから即起床されるケースが増えた場合、その情報を収集する(図10の符号ii参照)。この情報は、例えばSleep管理部230がSleepを開始するロジックを「パケット未着時に即Sleep」から「パケット未着になってから一定時間後にSleep」に変更するために使われる。
【0113】
上記、各機能部のロジックを決定するための情報として、アプリケーションの特性情報やPolling Threadの処理情報について例示したが、アプリケーションや Polling Threadなどの同一サーバ内からの特性情報にとどまらず、別システムから、情報を受け取ってロジックの選択に活用してもよい。
例えば、サーバ内遅延制御装置300がvRAN(virtualized Radio Access Network)におけるvDU(virtualized Distributed Unit)サーバやvCU(virtualized Centralized Unit)サーバに搭載された場合、上位のコントローラであるRIC(RAN Intelligent Controller)からサービス提供状況の情報を受け取って、ロジックの選択に役立てることができる。
【0114】
<ロジック配信部312>
次に、ロジック配信部312について説明する。
図11は、ロジック配信部312の動作説明図である。
ロジック配信部312は、特性情報収集部311が収集した情報をもとに、各機能部に適したロジックを決定して配信し、各機能部のロジックを変更させる。
【0115】
・データ到着監視ロジックの配信例
アプリケーションの遅延要件が弱くなった場合や、データの到着頻度が低くなった場合に、省電力性のためにデータ到着監視頻度を落としてもよい場合がある。この時、「busy loopによるデータ到着監視」から、例えば「1μsに1回データ到着監視」に変更させる(図11の符号jj参照)。
【0116】
・データ到着通知ロジックの配信例
アプリケーションの処理が逐次処理からバッチ処理に変更された場合、低遅延性および省電力性のために、データ到着通知もバッチして行った方がよい場合がある。この時、「データ到着をアプリケーションに逐次通知」というロジックから「K個のデータが到着してからアプリケーションにデータ到着を通知」というロジックに変更させる(図11の符号kk参照)。
【0117】
・Sleep開始ロジックの配信例
Sleepしてから即割り込みによって起床することが多くなってきた場合、割り込み過多による遅延増大・消費電力上昇を防ぐために「データ未着時に即sleep」というロジックから「データ未着になってTμs後にSleep」というロジックに変更させる(図11の符号ll参照)。
【0118】
以下、上述のように構成されたサーバ内遅延制御システム1000Aの動作を説明する。
[サーバ内遅延制御システム1000Aの全体動作]
【0119】
<設定事項>
ロジック管理部310は、Polling Threadとは別のCPU上で動作する。
Polling Thread内の各機能部とロジック管理部310の間には、それぞれ共有メモリが存在する。
【0120】
<動作1>
NIC130は、パケットを受信した際、DMA(Direct Memory Access)によりCPUを介さずに、直接Ring Buffer(メインメモリ上のバッファ)にパケットをコピーする。なお、このRing Bufferは、User SpaceのPolling Threadから、OSカーネルを介さずに直接アクセスが可能であるよう、あらかじめ設定する。
【0121】
NIC130は、Polling Threadが駆動するCPUに対して割込を起こし、そのCPUはハードウェア割り込みのコンテキストでPolling Threadに対して起床の通知を行い、Sleep管理部230を起床させる。
以降、当該CPUではPolling Threadが動作する。
【0122】
Sleep管理部230は、CPUの周波数を高く設定し、当該CPUへの割り込みを禁止する。CPU周波数は、CPUgovernorの設定によりUser Spaceからでも変更が可能である。
【0123】
Sleep管理部230は、Sleepに入ってから起床するまでの時間を記録し、ロジック管理部310との共有メモリに格納する。
【0124】
Sleep管理部230は、データ到着監視部210にPollingの開始を指示する(Sleep管理部230から、データ到着監視部210の処理にあたる関数を呼び出す)。この時、Sleep管理部230は、パケット未着になってからSleepするまでの時間情報をロジック管理部310との共有メモリ領域から読み出し、その値を引数として指定して、データ到着監視部210の処理にあたる関数を呼び出す。
【0125】
データ到着監視部210は、ロジック管理部310との共有メモリを参照し、到着確認間隔を読み出す。この到着確認間隔で、パケットがDMAされるRing Buffer領域に対して到着確認を行い、パケットが届いている場合にはそのパケットのアドレス情報(ポインタ)をデータ到着通知部220に伝達する。
【0126】
データ到着通知部220は、データ到着監視部210から伝達されたポインタ情報の数が、ロジック管理部310との共有メモリに書かれているバッチ数に達しているかを確認する。ポインタ情報の数が、ロジック管理部310との共有メモリに書かれているバッチ数に達している場合、下記の動作に移る。そうでない場合、上記、データ到着監視部210の到着確認動作に戻りループで処理が実行される。
【0127】
データ到着通知部220は、アプリケーションとPolling Threadの共有メモリにアドレス情報を格納し、アプリケーションが動作するスレッドを起こし、そのスレッド内で処理を実行する。
アプリケーションロジック(データ処理APL1)が、同一スレッドで実行されるように運用者が設定していた場合、Polling Thread内で処理を行う。
【0128】
上記において、パケット未着の状態で、引数として指定された時間が経過した場合、データ到着監視部210は、Sleep管理部230を呼び出す。すなわち、データ到着監視部210がreturnを行うことで、Sleep管理部230に処理が戻る。データ到着監視部210は、関数をreturnする直前、Polling Thread動作中の平均パケット到着頻度をロジック管理部310との共有メモリに書き込む。
【0129】
Sleep管理部230は、CPU周波数を下げ、当該CPUへの割り込みを有効化して、Polling ThreadをSleep状態に落とす。
【0130】
アプリケーション(データ処理APL1)は、負荷などに応じてバッチ処理数の変更をした場合、ロジック管理部310との共有メモリに適宜書き込む。アプリケーションがPolling Threadと別スレッドで動作する場合、アプリケーションとロジック管理部310の間にも別途共有メモリを事前に設定しておく。
【0131】
<動作2>
以下はPolling Threadとは別CPU上で動作し、時間的に独立して動作する。
以下の<動作2>と、上記<動作1>は並列して発生しうる。
特性情報収集部311は、Polling Thread内機能部との各共有メモリを巡回して監視し、共有メモリに書き込みが行われていた場合には、以下の処理を実行する。
【0132】
データ到着監視部210との共有メモリに、データ到着頻度が書き込まれていて、その値が現在のデータ到着確認間隔よりも小さかった場合、そのデータ到着頻度を新しいデータ到着確認間隔として設定し、ロジック配信部312を呼び出す(ロジック配信部312にあたる関数を呼び出す)。
【0133】
ロジック配信部312は、データ到着監視部210との共有メモリに、新たなデータ到着確認間隔を書き込む。
【0134】
アプリケーションとの共有メモリに、バッチ数が書き込まれていた場合、そのバッチ数を新たなデータ到着通知バッチ数として設定し、ロジック配信部312を呼び出す(ロジック配信部312にあたる関数を呼び出す)。
【0135】
ロジック配信部312は、データ到着通知部220との共有メモリに、新たなデータ到着通知バッチ数を書き込む。
【0136】
Sleep管理部230との共有メモリに、Sleepしてから起床するまでの時間が書き込まれていて、その値が所定閾値(例えば5μs)よりも小さかった場合(閾値はシステムによって異なるため、事前の設定などが必要)、パケット未着になってからSleepに入るまでの時間を5μs伸ばすことを決定し、ロジック配信部312を呼び出す(ロジック配信部312にあたる関数を呼び出す)。
【0137】
ロジック配信部312は、Sleep管理部230との共有メモリに新たな「パケット未着になってからSleepに入るまでの時間」を書き込む。
以上でサーバ内遅延制御システム1000Aの全体動作の説明を終了する。
【0138】
[ロジック管理部310の動作]
次に、図12乃至図17に示すフローチャートおよび動作説明図を参照してロジック管理部310の処理例について説明する。
【0139】
<データ到着監視部210へのロジック変更例>
まず、ロジック管理部310の処理例として、データ到着監視部210へのロジック変更例について説明する。
図12は、データ到着監視部210へのロジック変更の処理フローチャートである。図13は、その動作説明図である。図11と同一構成部分には同一番号を付している。
図12のフローにおいて、ステップS41でデータ到着監視部210は、パケット到着頻度を取得し、定期的に特性情報収集部311に通知する(図13の符号mm参照)。例えば、データ到着監視部210は、PollingをSleepさせるタイミングで特性情報収集部311にパケット到着頻度を伝達する。
【0140】
ステップS42で特性情報収集部311は、パケット到着頻度と現在の到着監視間隔を比較する。パケット到着頻度<到着監視間隔の場合(S43:No)、ステップS46に進む。
【0141】
ステップS43で特性情報収集部311は、パケット到着頻度≧到着監視間隔の場合(S43:Yes)、ステップS44で特性情報収集部311は、到着監視間隔を広げること(例えば、1μs広げること)を決定し、ロジック配信部312にロジックの変更を伝達する(図13の符号nn参照)。
【0142】
ステップS45でロジック配信部312は、データ到着監視部210にロジックを配信し、到着監視間隔を広くさせて本フローの処理を終了する。
【0143】
一方、上記ステップS43でパケット到着頻度<到着監視間隔の場合(S43:No)、ステップS46で特性情報収集部311は、到着監視間隔を狭くすることを決定し、ロジック配信部312にロジックの変更を伝達する。例えば、特性情報収集部311は、到着監視間隔を、1μs狭くすることを伝達する(図13の符号nn参照)。
【0144】
ステップS47でロジック配信部312は、データ到着監視部210にロジックを配信し、到着監視間隔を狭くさせて本フローの処理を終了する。
【0145】
<データ到着通知部220へのロジック変更例>
次に、ロジック管理部310の処理例として、データ到着通知部220へのロジック変更例について説明する。
図14は、データ到着通知部220へのロジック変更の処理フローチャートである。図15は、その動作説明図である。図11と同一構成部分には同一番号を付している。
図14のフローにおいて、ステップS51でデータ処理APL1(アプリケーション)は、バッチ処理数を変更した場合、そのバッチ処理数をロジック管理部310に通知する(図15の符号oo参照)。
【0146】
ステップS52で特性情報収集部311は、変更したバッチ処理数でデータ到着を通知することを決定し、ロジックの変更をロジック配信部312に伝達する。
【0147】
ステップS53でロジック配信部312は、バッチ処理数をデータ到着通知部220に配信し(図15の符号pp参照)、変更させて本フローの処理を終了する。
【0148】
<Sleep管理部230へのロジック変更例>
次に、ロジック管理部310の処理例として、Sleep管理部230へのロジック変更例について説明する。
図16は、Sleep管理部230へのロジック変更の処理フローチャートである。図17は、その動作説明図である。図11と同一構成部分には同一番号を付している。
図16のフローにおいて、ステップS61でSleep管理部230は、Sleepに入ってからHardIRQによって起床されるまでの時間を記録し、その情報を特性情報収集部311に伝達する(図17の符号qq参照)。例えば、Sleep管理部230は、起床したタイミングで共有メモリを介して伝達する。
【0149】
ステップS62で特性情報収集部311は、Polling ThreadがSleepに入ってから起床されるまでの平均時間を算出し、性能に悪影響が出ているか判定する。性能に悪影響が出ているか否かの判断は、システムによって異なるが、例えば5μsをSleepに入ってから起床されるまでの平均時間とする。
【0150】
ステップS63で特性情報収集部311は、Sleepに入ってから起床されるまでの平均時間5μsであるか否かを判別する。
Sleepに入ってから起床されるまでの平均時間5μsの場合(S63:Yes)、ステップS64で特性情報収集部311は、パケット未着になってからSleepに入るまでの時間を長くすること(例えば5μs長くすること)を決定し、ロジック配信部312にロジックの変更を伝達する(図17の符号rr参照)。
【0151】
ステップS65でロジック配信部312は、データ到着通知部220にロジックを配信し、パケット未着になってからSleepに入るまでの時間を変更させて本フローの処理を終了する。
【0152】
[ハードウェア構成]
第1および第2実施形態に係るサーバ内遅延制御装置200,300は、例えば図18に示すような構成のコンピュータ900によって実現される。
図18は、サーバ内遅延制御装置200,300の機能を実現するコンピュータ900の一例を示すハードウェア構成図である。
コンピュータ900は、CPU901、ROM902、RAM903、HDD904、通信インターフェイス(I/F:Interface)906、入出力インターフェイス(I/F)905、およびメディアインターフェイス(I/F)907を有する。
【0153】
CPU901は、ROM902またはHDD904に格納されたプログラムに基づいて動作し、図1および図9に示すサーバ内遅延制御装置200,300の各部の制御を行う。ROM902は、コンピュータ900の起動時にCPU901によって実行されるブートプログラムや、コンピュータ900のハードウェアに依存するプログラム等を格納する。
【0154】
CPU901は、入出力I/F905を介して、マウスやキーボード等の入力装置910、および、ディスプレイ等の出力装置911を制御する。CPU901は、入出力I/F905を介して、入力装置910からデータを取得するともに、生成したデータを出力装置911へ出力する。なお、プロセッサとしてCPU901とともに、GPU(Graphics Processing Unit)等を用いてもよい。
【0155】
HDD904は、CPU901により実行されるプログラムおよび当該プログラムによって使用されるデータ等を記憶する。通信I/F906は、通信網(例えば、NW(Network)920)を介して他の装置からデータを受信してCPU901へ出力し、また、CPU901が生成したデータを、通信網を介して他の装置へ送信する。
【0156】
メディアI/F907は、記録媒体912に格納されたプログラムまたはデータを読み取り、RAM903を介してCPU901へ出力する。CPU901は、目的の処理に係るプログラムを、メディアI/F907を介して記録媒体912からRAM903上にロードし、ロードしたプログラムを実行する。記録媒体912は、DVD(Digital Versatile Disc)、PD(Phase change rewritable Disk)等の光学記録媒体、MO(Magneto Optical disk)等の光磁気記録媒体、磁気記録媒体、導体メモリテープ媒体又は半導体メモリ等である。
【0157】
例えば、コンピュータ900が本実施形態に係る一装置として構成されるサーバ内遅延制御装置200,300として機能する場合、コンピュータ900のCPU901は、RAM903上にロードされたプログラムを実行することによりサーバ内遅延制御装置200,300の機能を実現する。また、HDD904には、RAM903内のデータが記憶される。CPU901は、目的の処理に係るプログラムを記録媒体912から読み取って実行する。この他、CPU901は、他の装置から通信網(NW920)を介して目的の処理に係るプログラムを読み込んでもよい。
【0158】
[適用例]
<VM構成への適用例>
本発明は、VM(Virtual Machine)構成におけるhost、および、guestに配置されたPolling Threadのそれぞれに適用することができる。
このようにすることにより、VMの仮想サーバ構成のシステムにおいて、HostOSとGuestOSとのいずれのOSにおいても、APLを改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことができる。
【0159】
<コンテナ構成への適用例>
本発明は、コンテナ構成において配置されたPolling Threadにも適用することができる。
コンテナなどの仮想サーバ構成のシステムにおいて、アプリケーションを改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことができる。
【0160】
<ベアメタル構成(非仮想化構成)への適用例>
本発明は、ベアメタル構成のように非仮想化構成のシステムに適用できる。非仮想化構成のシステムにおいて、アプリケーションを改変することなく、サーバ内の遅延を小さくしてパケット転送を行うことができる。
【0161】
<スケールイン/アウト>
トラヒック量が多く、複数のNICデバイスやNICポートを使用する場合に、これらと関連付けて複数のPolling Threadを動作させることで、HW割込頻度制御を行いつつ、Polling Threadをスケールイン/アウトすることができる。
【0162】
[効果]
以上説明したように、第1実施形態に係るサーバ内遅延制御装置は、ユーザ空間(User space)に配置され、ポーリングモデルを用いてパケット到着を監視するスレッド(thread)を立ち上げるサーバ内遅延制御装置200(図1参照)であって、デバイス(NIC130)の受信キューをポーリングにより監視し、パケットが到着している場合は、データを取得するデータ到着監視部210と、データ到着監視部210が取得したデータをアプリケーションプログラム(データ処理APL1)に通知して受け渡すデータ到着通知部220と、パケットが所定期間到着しない場合はスレッド(Polling Thread)をスリープ(Sleep)させ、かつ、パケット到着時はハードウェア割込(hardIRQ)により当該スレッド(Polling Thread)のスリープ解除を行うSleep管理部230と、を備え、Sleep管理部230は、アプリケーションプログラムの特性に基づいて、ハードウェア割込(hardIRQ)を許可してスリープ(Sleep)するタイミングを制御することを特徴とする。
【0163】
このようにすることで、サーバ内遅延制御装置200は、NW遅延発生の主要因であるパケット処理のソフトウェア割込(softIRQ)を停止し、サーバ内遅延制御装置200のデータ到着監視部210がパケット到着を監視するthreadを実行し、パケット到着時に、pollingモデル(softIRQなし)によりパケット処理を行う。そして、Sleep管理部230が、パケットが所定期間到着しない場合はスレッド(Polling Thread)をスリープ(Sleep)させることで、スレッド(Polling Thread)はパケット未到着時にスリープ(Sleep)する。Sleep管理部230は、パケット到着時はハードウェア割込(hardIRQ)によりスリープ解除を行う。さらに、Sleep管理部230は、アプリケーションプログラムの特性に基づいて、ハードウェア割込(hardIRQ)を許可してスリープ(Sleep)するタイミングを制御する。
これにより、下記(1)~(4)の効果を奏する。
【0164】
(1)遅延発生の原因となるパケット到着時のソフトウェア割込(softIRQ)を停止したpollingモデルを実現する。すなわち、サーバ内遅延制御システム1000は、既存技術のNAPIと異なり、NW遅延の主要因となる割込モデルではなく、pollingモデルを実現する。パケット到着時は、待合せなく即時に刈り取られるため、低遅延なパケット処理を実現することができる(「pollingモデルによる低遅延化の達成」)。
【0165】
(2)サーバ内遅延制御装置200におけるPolling Threadは、pollingモードでパケット到着を監視している。パケット到着を監視するPolling Threadは、パケット到着がない間はスリープ(Sleep)する。パケット到着がない場合は、スリープによってCPUを使用しないので、省電力の効果を得ることができる(「Polling Threadのスリープ管理による、不要なCPU使用を削減と省電力化の達成」)。
【0166】
(3)さらに、アプリケーションプログラムの特性に合わせて受信処理の方式を変更することができ、特性がそれぞれ異なるアプリケーションプログラムに対しても低遅延性および省電力性を両立することができる(「アプリケーションプログラムに合わせた低遅延性および省電力性の達成」)。
【0167】
(4)ユーザ空間(User space)でデータ受信処理が定義されるため、アプリケーションプログラムの特性に合わせて受信処理の方式を変更することができる。
本発明を、DPDKのように、ユーザ空間(User space)にPolling Threadがある場合に適用することができる。
【0168】
このように、サーバ内遅延制御装置200(図1参照)は、ユーザ空間(User space)にPolling Threadがある場合において、パケット転送処理を行うPolling Threadのスリープ管理を行うことで、低遅延と省電力を両立させることができる。さらに、アプリケーションプログラムの特性が異なるアプリケーションに対しても低遅延性・省電力性を両立することができる。
【0169】
サーバ内遅延制御装置200において、Sleep管理部230は、パケットが未着になってからの経過時間とアプリケーションプログラムの特性に適した所定の時間とを比較し、パケットが未着になってからの経過時間がアプリケーションプログラムの特性に適した時間以上の場合、ハードウェア割り込みを有効化し、スレッドをスリープさせることを特徴とする。
【0170】
このようにすることにより、Sleep管理部230は、アプリケーションプログラムの特性に応じ、HW割り込みを許可してSleepするタイミングを制御する。例えば、Sleep管理部230は、Polling時に、ドライバの受信キューが空になっても、直ちにパケットが到着するようなアプリケーションプログラムの場合にはPollingを続けることもできる。アプリケーションプログラムの特性やトラフィック特性に応じた更なる低遅延化・省電力化を実現できる。
【0171】
サーバ内遅延制御装置200において、データ到着監視部210は、アプリケーションプログラムの特性に基づく所定のタイミングで、デバイスの受信キューにデータが到着しているかを確認することを特徴とする。
【0172】
このようにすることにより、アプリケーションプログラムの特性やトラフィック情報に応じて、Pollingによって刈取を行う頻度の制御を行うことで、アプリケーションプログラムの特性やトラフィックに応じた更なる低遅延化および省電力化を実現できる。
【0173】
サーバ内遅延制御装置200において、データ到着監視部210は、所定時間の停止後、デバイスの受信キューにデータが到着しているかを確認することを特徴とする。
【0174】
このようにすることにより、データ到着監視部210は、アプリケーションプログラムの遅延要件が厳しくない場合や、パケットの到着間隔が短くない場合に、Pollingに一時停止を挟む(例えば、所定時間の停止後、デバイスの受信キューにデータが到着しているかを確認する)ことで、CPUサイクル数を削減しながら受信監視を行うことができ、省電力化を図ることができる。
【0175】
サーバ内遅延制御装置200において、データ到着通知部220は、アプリケーションプログラムの特性が、パケットを逐次処理する特性の場合には、パケット到着時に直ちに通知し、パケットをバッチ処理する特性の場合には、所定数のパケットが到着した際に通知することを特徴とする。
【0176】
このようにすることにより、アプリケーションプログラムの特性に合わせて到着通知方式を選択することができ、アプリケーションプログラムの特性に応じた更なる低遅延化を実現できる。
【0177】
サーバ内遅延制御装置200において、データ到着通知部220は、パケット処理機能を有し、アプリケーションプログラムの特性に応じて、パケット処理機能を実行し、当該パケット処理機能を実行した場合、アプリケーションプログラムに通知しないことを特徴とする。
【0178】
このようにすることにより、アプリケーションプログラムが単純である場合、通知するのではなく、パケット処理をする機能を具備することで、到着通知のオーバーヘッドを削減してパケットを処理することもできる。アプリケーションプログラムの特性に応じた更なる低遅延化を実現できる。
【0179】
第2実施形態に係るサーバ内遅延制御装置300(図9参照)において、アプリケーションプログラムの特性情報およびスレッドの処理情報を収集し、収集した情報をもとに、時間帯によって負荷が変動し、処理方法および処理速度が変動するようなアプリケーションプログラムの場合に、データ到着監視部210、データ到着通知部220、Sleep管理部230のうち、少なくともいずれか一つの機能部の処理ロジックを変更するロジック管理部310を備えることを特徴とする。
【0180】
このようにすることにより、ロジック管理部310は、アプリケーションプログラムの特性およびスレッドの処理に合わせてPolling Threadの各機能部(データ到着監視部210、データ到着通知部220、Sleep管理部230)の処理ロジックを動的に決定し、各機能部に配信する。これにより、特性が動的に変動するアプリケーションに対しても、変動する特性に合わせた処理ロジックで各機能部を動作させることで、受信処理の低遅延性および省電力性を保つことができる。
【0181】
なお、上記各実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
【0182】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行するためのソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、IC(Integrated Circuit)カード、SD(Secure Digital)カード、光ディスク等の記録媒体に保持することができる。
【符号の説明】
【0183】
1 データ処理APL(アプリケーションプログラム)
10 HW
70 Guest OS
72 Ring Buffer(リングバッファ)
74 プロトコル処理部
110 HW
130 NIC(物理NIC)(デバイス)
140 OS
160 user space(ユーザ空間)
200,300 サーバ内遅延制御装置(Polling Thread)
210 データ到着監視部(各機能部)
220 データ到着通知部(各機能部)
230 Sleep管理部(各機能部)
310 ロジック管理部
311 特性情報収集部
312 ロジック配信部
1000 サーバ内遅延制御システム
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23