(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022176056
(43)【公開日】2022-11-25
(54)【発明の名称】情報処理装置、情報処理方法及び情報処理プログラム
(51)【国際特許分類】
H04L 47/27 20220101AFI20221117BHJP
G06F 9/455 20060101ALI20221117BHJP
H04L 47/30 20220101ALI20221117BHJP
H04L 47/43 20220101ALI20221117BHJP
H04L 49/60 20220101ALI20221117BHJP
【FI】
H04L47/27
G06F9/455 150
H04L47/30
H04L47/43
H04L49/60
【審査請求】未請求
【請求項の数】13
【出願形態】OL
(21)【出願番号】P 2022000771
(22)【出願日】2022-01-05
(31)【優先権主張番号】P 2021081668
(32)【優先日】2021-05-13
(33)【優先権主張国・地域又は機関】JP
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】加藤 純
【テーマコード(参考)】
5K030
【Fターム(参考)】
5K030GA04
5K030KA03
5K030LC03
5K030LE09
5K030LE16
5K030MB09
5K030MC07
(57)【要約】
【課題】スマートNICを用いた場合のリソースを有効活用する情報処理装置、情報処理方法及び情報処理プログラムを提供する。
【解決手段】スマートNIC10は、以下の各部を備える。バッファ管理部109は、コンテナ201~202が実行する通信の流量制限時に、コンテナ201~202宛てに送られてきた複数のパケットを順次取得してバッファ114に蓄積し1つにまとめて集約パケットを生成し、集約パケットをコンテナ201~202へ送信する。ACK管理部111は、集約パケットの流量を基に、パケットの送信元へのACKの送信タイミングを決定する。rwnd管理部110は、集約パケットの流量を基に、コンテナ201~202宛てに1度に送ることが可能なデータ量を表す受信ウィンドウサイズを決定する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
演算処理装置が実行する通信の流量制限時に、前記演算処理装置宛てに送られてきた複数のパケットを順次取得してバッファに蓄積し1つにまとめて集約パケットを生成し、前記集約パケットを前記演算処理装置へ送信するバッファ管理部と、
前記集約パケットの流量を基に、前記パケットの送信元へのACKの送信タイミングを決定するACK管理部と、
前記集約パケットの流量を基に、前記演算処理装置宛てに1度に送ることが可能なデータ量を表す受信ウィンドウサイズを決定するウィンドウ管理部と
を備えたことを特徴とする情報処理装置。
【請求項2】
既に取得した既存パケットの自装置への流入量である第1流入量を基に、次に送られてくる次パケットの第2流入量を予測し、前記第1流入量と前記既存パケットをまとめて生成した前記集約パケットの前記演算処理装置への流量である第1流量との比率及び前記第2流入量を基に、前記次パケットをまとめて生成した前記集約パケットの第2流量を予測し、前記第2流量及び前記流量制限で用いられる受信流量制限値を基に、前記演算処理装置宛てのパケットの流入量を引き上げるか引き下げるかを決定するモード判定部をさらに備え、
前記ACK管理部は、前記演算処理装置宛てのパケットの流入量を引き上げる場合、前記送信タイミングを早め、前記演算処理装置宛てのパケットの流入量を引き下げる場合、前記送信タイミングを遅らせ、
前記ウィンドウ管理部は、前記演算処理装置宛てのパケットの流入量を引き上げる場合、前記受信ウィンドウサイズを拡大し、前記演算処理装置宛てのパケットの流入量を引き下げる場合、前記受信ウィンドウサイズを縮小する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記ACK管理部は、前記第2流入量、前記第2流量、及び、前記受信流量制限値を基に、前記送信タイミングを決定することを特徴とする請求項2に記載の情報処理装置。
【請求項4】
前記ウィンドウ管理部は、前記第2流量及び前記受信流量制限値を基に、前記受信ウィンドウサイズを決定することを特徴とする請求項2又は3に記載の情報処理装置。
【請求項5】
前記ACK管理部は、前記演算処理装置から送信された前記パケットに対するACKを取得して、決定した前記送信タイミングで前記ACKを送信することを特徴とする請求項1~4の何れか一つに記載の情報処理装置。
【請求項6】
前記バッファ管理部により前記集約パケットが前記演算処理装置へ送信されてから所定の待機時間のうちに前記演算処理装置からACKが送られてこない場合、前記バッファ管理部に前記集約パケットを再送させるとともに、前記ACK管理部に前記ACKを送信させる再送管理部をさらに備えたことを特徴とする請求項5に記載の情報処理装置。
【請求項7】
演算処理装置が実行する通信の流量制限時に、前記演算処理装置宛てに送られてきた複数のパケットを順次取得してバッファに蓄積し1つにまとめて集約パケットを生成し、前記集約パケットを前記演算処理装置へ送信し、
前記集約パケットの流量を基に、前記パケットの送信元へのACKの送信タイミングを決定し、
前記集約パケットの流量を基に、前記演算処理装置宛てに1度に送ることが可能なデータ量を表す受信ウィンドウサイズを決定する
ことを特徴とする情報処理方法。
【請求項8】
演算処理装置が実行する通信の流量制限時に、前記演算処理装置宛てに送られてきた複数のパケットを順次取得してバッファに蓄積し1つにまとめて集約パケットを生成し、前記集約パケットを前記演算処理装置へ送信し、
前記集約パケットの流量を基に、前記パケットの送信元へのACKの送信タイミングを決定し、
前記集約パケットの流量を基に、前記演算処理装置宛てに1度に送ることが可能なデータ量を表す受信ウィンドウサイズを決定する
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【請求項9】
受信キューと
前記バッファ管理部は、流量制限により規定される量以上の所定量の前記集約パケットを前記受信キューに格納することで前記演算処理装置への前記集約パケットの送信を行い、
前記受信キューに格納された前記集約パケットを取り出して前記演算処理装置へ出力するパケット取出部と、
前記流量制限により規定される量の前記集約パケットを前記受信キューから取り出しを前記パケット取出部に指示し、前記演算処理装置でデータ待ちが発生する場合に、前記流量制限により規定される量以上の前記集約パケットの取り出しを前記パケット取出部に指示するデータ取出管理部と
をさらに備えたことを特徴とする請求項1~6のいずれか一つに記載の情報処理装置。
【請求項10】
前記データ取出管理部により前記流量制限により規定される量以上の前記集約パケットの取り出しが指示された場合に、前記演算処理装置の流量を増加させ且つ他の演算処理装置の流量を低下させるように、前記演算処理装置及び前記他の演算処理装置に対する前記流量制限を補正する流量制限補正部をさらに備えたことを特徴とする請求項9に記載の情報処理装置。
【請求項11】
前記演算処理装置は、コンピュータのプロセッサ上で動作する、アプリケーション及び前記アプリケーションの起動環境を含む仮想環境であり、
前記情報処理装置は、通信制御装置である
ことを特徴とする請求項1~6、9又は10のいずれか一つに記載の情報処理装置。
【請求項12】
流量制限により規定される量以上の所定量の前記集約パケットを受信キューに格納することで前記演算処理装置への前記集約パケットの送信を行い、
前記流量制限により規定される量の前記集約パケットを前記受信キューから取り出して前記演算処理装置へ出力し、
前記演算処理装置でデータ待ちが発生する場合に、前記流量制限により規定される量以上の前記集約パケットの取り出しをーから取り出して前記演算処理装置へ出力する
ことを特徴とする請求項7に記載の情報処理方法。
【請求項13】
流量制限により規定される量以上の所定量の前記集約パケットを受信キューに格納することで前記演算処理装置への前記集約パケットの送信を行い、
前記流量制限により規定される量の前記集約パケットを前記受信キューから取り出して前記演算処理装置へ出力し、
前記演算処理装置でデータ待ちが発生する場合に、前記流量制限により規定される量以上の前記集約パケットの取り出しをーから取り出して前記演算処理装置へ出力する
処理を前記コンピュータにさらに実行させることを特徴とする請求項8に記載の情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、情報処理方法及び情報処理プログラムに関する。
【背景技術】
【0002】
ホストOS(Operating System)上に、アプリケーション本体、使用するライブラリ及び設定ファイルなどのアプリケーションの起動環境をひとまとめにしたコンテナと呼ばれる仮想環境が注目されている。コンテナは、サーバなどのホストコンピュータ上で複数動作することが一般的である。さらに、コンテナを用いたシステムでは、コンテナが動作するホストコンピュータが複数接続される場合もある。
【0003】
このようなコンテナを用いたシステムの設定及び管理において、コンテナ間のネットワークインタフェースは、Container Network Interface(CNI)で定義されることが多い。CNI準拠のプラグインは、コンテナの作成及び削除などのタイミングで、各ホストコンピュータに配置されたそれぞれのコンテナ間の通信に用いるフロールールを各コンテナの配置から生成し、生成したフロールールを各仮想スイッチに設定する。コンテナを用いたシステムでは、仮想スイッチのそれぞれに設定された各フロールールに基づいて、パケットの転送が行われる。
【0004】
さらに近年、仮想スイッチをスマートNIC(Network Interface Card)にオフロードする技術が提供されている。スマートNICとは、IP(Internet Protocol)パケット処理などをCPU(Central Processing Unit)に代わって実行する通信制御装置である。仮想スイッチ相当の機能をスマートNICに移動させることで、コンテナがホストコンピュータのCPUを占有することが可能となる。このスマートNICへのオフロードにあたり、仮想スイッチの機能は、ハードウェアでパケット転送処理を行うエンベデッド(embedded)スイッチと、スマートNIC上のCPUでルール管理を行うソフトウェアのコントローラとの2つに役割分担される。
【0005】
スマートNICでは、フロールールにしたがってフローが処理される。フローとは、各通信における一連のデータの流れである。スマートNICは、パケットが届くとフロールールにマッチしたフローのアクションを実行する。フロールールには、宛先MAC(Media Access Control)アドレスが所定の番号の場合に特定ポートに転送するといったルールや、TCP(Transmission Control Protocol)の宛先ポートが22のときにパケットをドロップさせるといったルールが存在する。
【0006】
エンベデッドスイッチにフロールールのキャッシュがない場合、エンベデッドスイッチは、フロールールをコントローラに問い合わせ、結果をキャッシュしてフロールールにしたがいパケットを転送する。これに対して、エンベデッドスイッチにフロールールのキャッシュがある場合、エンベデッドスイッチは、キャッシュされたフロールールにしたがいパケットを転送する。エンベデッドスイッチにフロールールのキャッシュがある場合、ソフトウェア処理を含まないハードウェア処理であるため、エンベデッドスイッチは、高速にパケット転送処理を行うことができる。
【0007】
さらに、スマートNICを用いたコンテナが動作するシステムの運用において、以下のような目標の達成が強く求められる。1つは、TCO(Total Cost of Ownership)を下げるために、コンテナの集約率を高めてCPUの使用率を100%近くにすることが目標とされる。他の1つは、各コンテナに優先度を与えて、優先度が高いコンテナに優先的にCPU及びネットワークを割り当てることで低遅延化を図り、低遅延処理を実現することが目標とされる。さらに、他の1つは、ホストコンピュータのCPU以外にもスマートNICを有効利用させることが目標とされる。
【0008】
なお、スマートNICなどを用いたネットワーク制御の技術として、LRO(Large Receive Offload)と呼ばれる受信したパケットをより大きなパケットに再構築する機能が提案されている。例えば、LROによりハードウェアのNICで複数のTCPセグメントを1つにまとめて上位に渡す技術が提案されている。これにより、ホストコンピュータが処理するTCPセグメント数が少なくなるので割り込み回数が低下し、TCPの処理負荷が軽減する。ただし、LROでまとめるTCPセグメント数は、NICによるハードウェア処理ということもあり固定値が一般的である。また、LRO機能によりペイロードを結合して生成したジャンボパケットに対して輻輳ウィンドウサイズを基に受信ウィンドウサイズを決定して通信を行う技術が提案されている。また、フローパケットのバッファを有し、輻輳通知などを用いてフローの処理を行うスマートNICに関する技術が提案されている。また、ネットワークの状態によってTCPパラメータを調整して輻輳制御を行う技術が提案されている。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】特開2019-205064号公報
【特許文献2】米国特許出願公開第2016/0380896号明細書
【特許文献3】米国特許出願公開第2018/0205656号明細書
【非特許文献】
【0010】
【非特許文献1】Implementation of TCP Large Receive Offload on Multi-core NPU Platform, Li et. al, International Conference on Information and Communication Technology Convergence (ICTC), 19-21 October 2016
【発明の概要】
【発明が解決しようとする課題】
【0011】
しかしながら、スマートNICを用いたコンテナが動作するシステムにおいて各コンテナに優先度を与えて処理を行う状況で、優先度が低いコンテナ宛てにバーストトラフィックが発生する場合がある。この場合、バーストトラフィックに含まれるパケット毎に割り込みが発生することになり、その割り込み処理によりCPUが消費されてしまい、バートトラフィックを通すことが困難となる。また、優先度が低いコンテナ宛ての割り込み処理で優先度が高いコンテナに対する処理が阻害されることも考えられる。そのため、スマートNICを用いた場合にフローに対する演算処理などにおけるリソースを有効活用することは困難である。
【0012】
また、LRO機能は、パケットの結合を行い受信したパケットの処理の高速化は実現できるが、優先度に応じた流量制限に対応させてバーストトラフィックにより発生する割り込みの影響を低減することは困難である。同様に、ジャンボパケットに対して輻輳ウィンドウサイズを基に受信ウィンドウサイズを決定して通信を行う技術を用いても、優先度に応じた流量制限時に対応させてバーストトラフィックにより発生する割り込みの影響を低減することは困難である。さらに、輻輳通知などを用いてフローの処理を行うスマートNICに関する技術や、ネットワークの状態によってTCPパラメータを調整して輻輳制御を行う技術でも、バーストトラフィック発生時の割り込み回数の低減は実現困難である。したがって、いずれの技術を用いても、スマートNICを用い且つ優先度に応じた流量制限を行っている場合の、フローに対する演算処理などにおけるリソースの有効活用は困難である。
【0013】
開示の技術は、上記に鑑みてなされたものであって、スマートNICを用いた場合のリソースを有効活用する情報処理装置、情報処理方法及び情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【0014】
本願の開示する情報処理装置、情報処理方法及び情報処理プログラムの一つの態様において、バッファ管理部は、演算処理装置が実行する通信の流量制限時に、前記演算処理装置宛てに送られてきた複数のパケットを順次取得してバッファに蓄積し1つにまとめて集約パケットを生成し、前記集約パケットを前記演算処理装置へ送信する。ACK管理部は、前記集約パケットの流量を基に、前記パケットの送信元へのACKの送信タイミングを決定する。ウィンドウ管理部は、前記集約パケットの流量を基に、前記演算処理装置(200)宛てに1度に送ることが可能なデータ量を表す受信ウィンドウサイズを決定する。
【発明の効果】
【0015】
1つの側面では、本発明は、スマートNICを用いた場合にリソースを有効活用することができる。
【図面の簡単な説明】
【0016】
【
図1】
図1は、実施例に係る情報処理システムのブロック図である。
【
図2】
図2は、流量制限が開始されていない状態のパケットの流れを示す図である。
【
図3】
図3は、流量制限が発生した場合のパケットの流れを示す図である。
【
図4】
図4は、流量制限が発生した場合のパケットの状態を示す図である。
【
図5】
図5は、流量制限が発生した場合のACKの流れを示す図である。
【
図6】
図6は、流量制限制御処理のフローチャートである。
【
図7】
図7は、流入量引き上げモードでのACKタイミング及び受信ウィンドウサイズの決定処理のフローチャートである。
【
図8】
図8は、流入量引き下げモードでのACKタイミング及び受信ウィンドウサイズの決定処理のフローチャートである。
【
図9】
図9は、ACK送信処理のフローチャートである。
【
図11】
図11は、実施例2に係る情報処理システムのブロック図である。
【
図13】
図13は、低レイテンシー化の処理が行われた場合と行われない場合との比較を示す第1の図である。
【
図14】
図14は、低レイテンシー化の処理が行われた場合と行われない場合との比較を示す第2の図である。
【
図15】
図15は、低レイテンシー化の処理が行われた場合と行われない場合との比較を示す第3の図である。
【
図16】
図16は、動的流量調整が行われる場合と行われない場合との比較を示す第1の図である。
【
図17】
図17は、動的流量調整が行われる場合と行われない場合との比較を示す第2の図である。
【
図18】
図18は、低レイテンシー化の処理を加えた流量制限制御処理のフローチャートである。
【
図19】
図19は、パケット取り出し処理のフローチャートである。
【
図20】
図20は、コンテナによるパケットの受信時の処理のフローチャートである。
【
図21】
図21は、動的流量調整処理のフローチャートである。
【発明を実施するための形態】
【0017】
以下に、本願の開示する情報処理装置、情報処理方法及び情報処理プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、情報処理方法及び情報処理プログラムが限定されるものではない。
【実施例0018】
図1は、実施例に係る情報処理システムのブロック図である。
図1に示すように、情報処理システム1は、スマートNIC10及びホストコンピュータ20を有する。スマートNIC10は、ホストコンピュータ20に内蔵されていてもよい。
【0019】
ホストコンピュータ20は、演算処理装置の一例にあたるコンテナ201及び202を含む複数のコンテナを有する。以下では、コンテナ201及び202を含む各コンテナを区別しない場合、コンテナ200と呼ぶ。また、ホストコンピュータ20は、CNIプラグイン21及び流量制限管理部22を有する。
【0020】
CNIプラグイン21は、コンテナ200の作成及び削除などのタイミングで、各ホストコンピュータに配置されたそれぞれのコンテナ間の通信に用いるフロールールを各コンテナの配置から生成する。そして、CNIプラグイン21は、生成したフロールールをスマートNIC10のコントローラ102に送信して設定する。
【0021】
流量制限管理部22は、各コンテナ200の優先度を記憶する。例えば、流量制限管理部22は、各コンテナ200に設定されたCPU使用率に対するQoS(Quality of Service)の情報を記憶する。そして、流量制限管理部22は、QoSに応じて各コンテナ200のCPU使用率を決定する。その後、流量制限管理部22は、実際のCPU使用率を計測して、各コンテナ200に対する受信流量制限値を算出する。例えば、流量制限管理部22は、QoSが高く設定された優先度が高いコンテナ200であれば、受信流量制限値を高く設定し、QoSが低く設定された優先度が低いコンテナ200であれば、受信流量制限値を低く設定する。また、流量制限管理部22は、各コンテナ200宛ての実際のパケットの流入量を取得する。
【0022】
流量制限管理部22は、特定のコンテナ200宛てのパケットの流入量が受信流量制限値以上であれば、特定のコンテナ200に対する流量制限実行と判定する。そして、流量制限管理部22は、特定のコンテナ200に対する流量制限の実行をフロー書換部107に指示する。さらに、流量制限を決定した特定のコンテナ200に対して受信流量制限値を通知して流量制限を行わせる。また、流量制限管理部22は、受信流量制限値の情報をスマートNIC10のモード判定部113へ出力する。
【0023】
その後、流量制限が行われている特定のコンテナ200宛てのパケットの流入量が受信流量制限値未満となると、流量制限管理部22は、以下の処理を実行する。例えば、流量制限管理部22は、バッファ114に格納された特定のコンテナ200宛てのパケットの全ての処理の完了を待つ。その後、流量制限管理部22は、特定のコンテナ200宛てのパケット送信のフロールールを元に戻す指示をフロー書換部107に通知する。これにより、エンベデッドスイッチ101は、パケットをそのまま特定のコンテナ200へ転送するようになる。
【0024】
流量制限は、コンテナ200毎に行われる。例えば、流量制限管理部22は、コンテナ201はQoSが高く設定されており優先度が高いため流量制限は行わないが、コンテナ202はQoSが低く設定されており優先度が低いため10Mppsを上限とする流量制限を行うなどと決定する。
【0025】
ここで、本実施例では、流量制限管理部22は、受信流量制限値を動的に決定して流量制限を行ったが、これに限らず、例えば、流量制限を実行する場合、予め決められた値を受資料流量制限値として用いてもよい。
【0026】
スマートNIC10は、
図1に示すように、エンベデッドスイッチ101及び制御部120を有する。制御部120は、コントローラ102、外部通信受信部103、内部通信受信部104、送信部105、再送管理部106を有する。さらに、制御部120は、フロー書換部107、パケット集約部108、バッファ管理部109、rwnd(receive window)管理部110、ACK(Acknowledgement)管理部111、流量予測部112、モード判定部113及びバッファ114を有する。
【0027】
エンベデッドスイッチ101は、パケット転送処理を行うハードウェアである。エンベデッドスイッチ101は、他のコンテナが動作するコンピュータなどといった外部装置30に接続される。また、エンベデッドスイッチ101は、ホストコンピュータ20で動作するコンテナ200に接続される。
【0028】
エンベデッドスイッチ101は、外部装置30から送信されたパケットを受信する。そして、エンベデッドスイッチ101は、受信したパケットの処理が登録されたフロールールが、自己が有するキャッシュに存在するか否かを判定する。
【0029】
受信したパケットの処理が登録されたフロールールがキャッシュに存在しない場合、エンベデッドスイッチ101は、受信したパケットに対する処理が登録されたフロールールをコントローラ102に問い合わせる。そして、エンベデッドスイッチ101は、問い合わせに対する応答として、パケットに対する処理が登録されたフロールールをコントローラ102から取得して、自己のキャッシュに格納する。その後、エンベデッドスイッチ101は、受信したパケットに対する処理が登録されたフロールールにマッチしたフローのアクションを実行してパケット転送処理を行う。
【0030】
これに対して、受信したパケットの処理が登録されたフロールールがキャッシュに存在する場合、エンベデッドスイッチ101は、そのフロールールにマッチしたフローのアクションを実行してパケット転送処理を行う。
【0031】
例えば、受信したパケットに対する処理が登録されたフロールールにおいてマッチしたフローのアクションがコンテナ201への転送だった場合、エンベデッドスイッチ101は、パケットをコンテナ201へ転送する。また、受信したパケットに対する処理が登録されたフロールールにおいてマッチしたフローのアクションがコントローラ102への転送だった場合、エンベデッドスイッチ101は、パケットをコントローラ102へ転送する。
【0032】
また、エンベデッドスイッチ101は、流量制限が行われた場合、キャッシュに格納されたフロールールのうちの書き換え対象となるフロールールの指定と、新しく書き換えるフロールールの入力をフロー書換部107から受けて、フロールールを書き換える。流量制限が行われた場合のフロールールは、流量制限の対象となるコンテナ200宛てのパケットをバッファ114へ転送するという内容を有する。さらに、流量制限が行われた場合のフロールールは、流量制限の対象となったコンテナ200からの通信データをバッファ114へ転送するという内容を有する。すなわち、流量制限の対象となるコンテナ200に対する通信は、コンテナ200への通信及びコンテナ200からの通信のいずれも一旦バッファ114に転送される。以下では、流量制限の対象となるコンテナ200を流量制限対象コンテナとよぶ。
【0033】
ここで、エンベデッドスイッチ101とコンテナ200との間には、受信キューが配置されてもよい。その場合、エンベデッドスイッチ101からコンテナ200へのパケットの送信は以下のように行われる。エンベデッドスイッチ101は、送信部105から受信したコンテナ200宛てのパケットを受信キューに格納する。そして、コンテナ200は、受信キューに格納されたパケットを全て取得する。
【0034】
コントローラ102は、各コンテナ200との通信に用いるフロールールをCNIプラグイン21から取得して保持する。コントローラ102は、フロールールの問い合わせをエンベデッドスイッチ101から受ける。そして、コントローラ102は、問い合わせに応じたフロールールをエンベデッドスイッチ101へ出力する。
【0035】
外部通信受信部103は、流量制限によりフロー書換部107によってフロールールが変更され流量制限対象コンテナへの通信の転送先がスマートNIC10に変更された場合の受信口である。流量制限が行われフロールールが書き換えられた場合、外部通信受信部103は、流量制限対象コンテナ宛てのパケットの入力をエンベデッドスイッチ101から受ける。そして、外部通信受信部103は、取得したパケットをバッファ管理部109へ出力する。
【0036】
内部通信受信部104は、流量制限によりフロー書換部107によってフロールールが変更され流量制限対象コンテナからの通信の転送先がスマートNIC10に変更された場合の受信口である。流量制限が行われフロールールが書き換えられた場合、内部通信受信部104は、流量制限対象コンテナから送出された通信データをエンベデッドスイッチ101を介して受信する。そして、内部通信受信部104は、受信した通信データをバッファ管理部109へ出力する。また、内部通信受信部104は、ACKを流量制限対象コンテナから受信した場合、受信したACKをACK管理部111へ出力する。
【0037】
送信部105は、流量制限が行われフロールールが書き換えられた場合、バッファ114に格納された流量制限対象コンテナ宛てのパケットを集約することで生成された流量制限対象コンテナ宛ての集約パケットの入力をバッファ管理部109から受ける。複数の流量制限対象コンテナ宛てのパケットを集約については、後で詳細に説明する。そして、送信部105は、集約された流量制限対象コンテナ宛ての集約パケットを宛先である流量制限対象コンテナへエンベデッドスイッチ101を介して送信する。さらに、送信部105は、低遅延が求められる低遅延コンテナ宛ての集約パケットの送信の通知を再送管理部106へ出力する。その後、集約パケットの再送指示を再送管理部106から受けると、送信部105は、集約パケットを宛先である流量制限対象コンテナへエンベデッドスイッチ101を介して再送する。
【0038】
また、送信部105は、流量制限が行われフロールールが書き換えられた場合、流量制限対象コンテナからの通信を受ける。そして、コントローラ102は、受信した通信にしたがって、エンベデッドスイッチ101を介して通信の宛先となる外部装置30と通信する。例えば、コントローラ102は、rwndの情報を含むACKを送信部105から受けた場合、rwndの情報を含むACKを宛先の外部装置30へエンベデッドスイッチ101を介して送信する。
【0039】
再送管理部106は、ACK管理部111と連携してパケットロスを検出し、パケットの送信元に対する再送の依頼を送信部105に指示する。例えば、再送管理部106は、コンテナ200である低遅延コンテナ宛ての集約パケットの送信の通知を送信部105から受ける。そして、再送管理部106は、予め決められた所定の待機時間、送信された集約パケットに対するACKの受信を待機する。所定の待機時間が経過する前にACKの受信の通知をACK管理部111から受けた場合、再送管理部106は、集約パケットの解放をバッファ管理部109に指示する。
【0040】
これに対して、ACKの受信の通知を受けずに所定の待機時間が経過した場合、再送管理部106は、集約パケットの再送をバッファ管理部109に指示する。さらに、再送管理部106は、ACKの送信をACK管理部111に指示する。この段階でACKを送信させることで、スマートNIC10まではパケットが届いておりホストコンピュータ20との間でパケットロスが発生した場合に、スマートNIC10が確実に再送担当となる。したがって、スマートNIC10までパケットが届いているにもかかわらず外部装置30がパケットの再送を行うという無駄な処理を省くことができる。
【0041】
フロー書換部107は、流量制限が開始された場合、流量制限対象コンテナ宛てのパケットのスマートNIC10への転送と流量制限対象コンテナからの通信のスマートNIC10への転送の指示をCNIプラグインから受ける。そして、フロー書換部107は、指示にしたがい、フロールールの書き換え対象となるフロールールの指定と、新しく書き換えるフロールールをエンベデッドスイッチ101に通知してフロールールを書き換える。
【0042】
具体的には、フロー書換部107は、コントローラ102が有するフロールールのアクションを解析して、流量制限対象コンテナのポート宛てのフロールールを特定する。そして、フロー書換部107は、特定したフロールールがエンベデッドスイッチ101のキャッシュに存在するか否かを判定する。特定したフロールールがエンベデッドスイッチ101のキャッシュに存在しなければ、フロー書換部107は、コントローラ102が有するフロールールに以下の処理を実施する。また、特定したフロールールがエンベデッドスイッチ101のキャッシュに存在する場合には、フロー書換部107は、エンベデッドスイッチ101のキャッシュに格納されたフロールールに以下の処理を実施する。
【0043】
フロー書換部107は、流量制限対象コンテナのポート宛てのフロールールを、スマートNIC10の内部ポート宛て、すなわち外部通信受信部103に転送されるように変更する。また、フロー書換部107は、流量制限対象コンテナからのパケットをスマートNIC10の内部ポート宛て、すなわち内部通信受信部104に転送するフロールールを新規に追加する。フロー書換部107は、このフロールールをエンベデッドスイッチ101のキャッシュに追加する処理を定期的に行い、キャッシュから落ちないようにする。
【0044】
また、流量制限中に一旦流量制限対象コンテナとの接続が切れてもう一度接続を繋ぎなおす場合が考えられる。その場合、コントローラ102はCNIプラグインから通常通りのフロールールの入力を受けるが、フロー書換部107は、フロールールの問い合わせに対応するアクションをコントローラ102から受ける。そして、フロー書換部107は、対応するアクションが流量制限対象コンテナ宛てのパケット送信を行うフロールールか否かを判定する。対応するアクションが流量制限対象コンテナ宛てのパケット送信を行うフロールールの場合、フロー書換部107は、上述したフロールールをエンベデッドスイッチ101のキャッシュに追加する。この場合、フロー書換部107は、フロールールのエンベデッドスイッチ101のキャッシュへの追加を、コントローラ102を介して行ってもよい。
【0045】
パケット集約部108は、バッファ114に格納されたパケットの情報をバッファ管理部109から受ける。そして、パケット集約部108は、パケットのサイズや流入量を基に、集約するパケットを決定する。そして、パケット集約部108は、集約するパケットの取得要求をバッファ管理部109へ送信する。その後、パケット集約部108は、バッファ管理部109から取得したパケットを集約して集約パケットを生成する。次に、パケット集約部108は、生成した集約パケットのバッファ114への格納をバッファ管理部109に指示する。
【0046】
バッファ管理部109は、流量制限が実行された場合、流量制限対象コンテナ宛てのパケット及び流量制限対象コンテナからのパケットをバッファ114に格納して管理する。例えば、バッファ管理部109は、流量制限対象コンテナ宛てのパケットの入力を外部通信受信部103から受ける。そして、バッファ管理部109は、取得した流量制限対象コンテナ宛てのパケットをバッファ114に格納する。
【0047】
また、バッファ管理部109は、バッファ114に格納した流量制限対象コンテナ毎のパケットの情報をパケット集約部108に通知する。そして、バッファ管理部109は、集約するパケットの指定をパケット集約部108から受けて、指定されたパケットをバッファ114から取得してパケット集約部108へ出力する。その後、バッファ管理部109は、集約パケットの入力をパケット集約部108から受ける。そして、バッファ管理部109は、取得した集約パケットを送信部105へ出力する。
【0048】
バッファ管理部109は、流量制限対象コンテナからのパケットを内部通信受信部104を介して受信する。そして、取得したパケットをバッファ114へ格納する。その後、バッファ管理部109は、バッファ114に格納したパケットを取得して送信部105へ出力する。
【0049】
流量予測部112は、流量制限の実行の通知をバッファ管理部109から受ける。そして、流量予測部112は、流量制限対象コンテナ毎のパケットの外部装置30からスマートNIC10への流入量及びまとめた後の集約パケットのスマートNIC10から流量制限対象コンテナへの流量の入力をバッファ管理部109から受ける。これらは、その時点で取得したパケットを対象とする情報である。流量制限対象コンテナ毎のパケットの外部装置30からスマートNIC10への流入量が、「第1流入量」の一例にあたる。また、集約パケットのスマートNIC10から流量制限対象コンテナへの流量が、「第1流量」の一例にあたる。その後、流量予測部112は、流量制限対象コンテナ毎に以下の処理を実行する。
【0050】
流量予測部112は、流入量及びまとめた後の流量から、流入量とまとめた後の流量との比率を表すまとめ割合を算出する。例えば、流量予測部112は、直前1回の流入量とまとめた後の流量との比率をまとめ割合として算出する。他にも、流量予測部112は、直前N回のまとめ割合の平均をまとめ割合として用いてもよい。
【0051】
次に、流量予測部112は、取得した流入量の情報を用いて、次に外部装置30からスマートNIC10へ送られてくるパケットの流入量を予測する。次に外部装置30からスマートNIC10へ送られてくるパケットの流入量が、「第2流入量」の一例にあたり、以下では、予測流入量と呼ぶ。例えば、流量予測部112は、前回の流入量をそのまま予測流入量として用いてもよいし、前回までのN回の流入量の平均を予測流入量として用いてもよい。その後、流量予測部112は、算出した予測流入量をモード判定部113へ通知する。
【0052】
次に、流量予測部112は、予測流入量及びまとめ割合を用いて、送られてくるパケットをまとめた集約パケットのスマートNIC10からコンテナ200への流量の予測値である予測流量値を算出する。この予測流量値が、「第2流量」の一例にあたる。その後、流量予測部112は、算出した予測流量値をモード判定部113へ通知する。
【0053】
例えば、流量予測部112は、直前1回の流入量が20Mppsであり、まとめた後に10Mppsであった場合、まとめ割合を50%と算出する。そして、予測流入量が8Mppsの場合、流量予測部112は、予測流量値を8×50%=4Mppsと算出する。
【0054】
モード判定部113は、予測流量値の通知を流量予測部112から受ける。また、モード判定部113は、受信流量制限値の情報の入力をホストコンピュータ20の流量制限管理部22はから受ける。そして、モード判定部113は、予測流量値が受信流量制限値以下か否かを判定する。予測流量値が受信流量制限値以下の場合、モード判定部113は、動作モードを流入量引き上げモードと決定する。そして、モード判定部113は、動作モードとして流入量引き上げモードを、バッファ管理部109、rwnd管理部110及びACK管理部111に通知する。これに対して、予測流量値が受信流量制限値より大きい場合、モード判定部113は、動作モードを流入量引き下げモードと決定する。
【0055】
ここで、流入量引き上げモードは、受信流量制限値と流量予測値の算出に用いたまとめ割合とを基に目標流入量を逆算し、外部装置30からの流入量を引き上げて目標流入量に達するようにACKタイミング及び受信ウィンドウサイズを調整する動作モードである。また、流入量引き下げモードは、同様に目標流入量を算出して、外部装置30からの流入量を引き下げて目標流入量に達するようにACKタイミング及びrwndを調整する動作モードである。
【0056】
その後、モード判定部113は、決定した動作モードをrwnd管理部110及びACK管理部111に通知する。また、モード判定部113は、受信流量制限値及び次のまとめた後の集約パケットの流量である予測流量値の情報をrwnd管理部110へ出力する。さらに、モード判定部113は、次のまとめる前のパケットの流入量である予測流入量を流量予測部112から取得して、予測流量値及び受信流量制限値とともにACK管理部111へ出力する。
【0057】
rwnd管理部110は、動作モードの通知をモード判定部113から受ける。また、rwnd管理部110は、受信流量制限値及び予測流量値の入力をモード判定部113から受ける。さらに、rwnd管理部110は、流量制限対象コンテナが外部装置30へ通知するrwndのサイズである受信ウィンドウサイズを取得する。受信ウィンドウサイズは、コンテナ200宛てに1度に送ることが可能なデータ量を表す情報である。例えば、rwnd管理部110は、ACK管理部111が取得した流制限対象コンテナが送信したACKに格納されたrwndにより示される受信ウィンドウサイズをACK管理部111から取得する。以下では、流量制限対象コンテナが外部装置30へ通知する受信ウィンドウサイズを、「調整前受信ウィンドウサイズ」とよぶ。
【0058】
動作モードが流入量引き上げモードの場合、rwnd管理部110は、受信流量制限値を予測流量値で除算して流量引き上げ分の割合を算出する。次に、rwnd管理部110は、流量引き上げ分の割合を2倍した値を調整前受信ウィンドウサイズに乗算した値に予備分を加算して、流量制限対象コンテナのバッファサイズを算出する。そして、rwnd管理部110は、算出したバッファサイズのバッファを流量制限対象コンテナのバッファとして確保する。すなわち、予測流量値をI’とし、受信流量制限値をMとした場合、rwnd管理部110は、調整前受信ウィンドウサイズ×2M/I’+(予備分)として算出したバッファサイズのバッファを流量制限対象コンテナのバッファとして確保する。
【0059】
ここで、後述するようにパケットの解放が流量制限対象コンテナにパケットを送信したタイミングではなく、ACKをパケットの送信元の外部装置30へ返したタイミングであることから、パケットのサイズの2倍のサイズを確保しておくことが好ましい。そこで、調整前受信ウィンドウサイズに、流量引き上げ分の割合を2倍した値が乗算される。また、流量が時間軸方向で変動した場合の受け皿として予備分が確保される。
【0060】
その後、rwnd管理部110は、流量制限対象コンテナ毎のバッファに格納されたパケットのサイズの情報をバッファ管理部109から取得する。次に、rwnd管理部110は、確保したバッファサイズの流量制限対象コンテナのバッファの空きサイズを算出する。そして、rwnd管理部110は、ACK管理部111から送信部105に送られたACKに格納されたrwndで示される受信ウィンドウサイズの値を、算出した流量制限対象コンテナのバッファの空きサイズで上書きする。このように、rwnd管理部110は、流量引き上げ分の割合で受信ウィンドウサイズを決定する。すなわち、rwnd管理部110は、受信流量制限値とまとめた際の予測流量値から動的に受信ウィンドウサイズを決定する。具体的には、rwnd管理部110は、予測流量値が受信流量制限値と比較してある程度小さく流量制限を大きく引き上げる場合は、受信ウィンドウサイズを大きく拡大する。これは、小さいパケットが多い場合などが考えられる。また、rwnd管理部110は、予測流量値が受信流量制限値とほぼ同じ大きさであり流量制限をあまり引き上げなくてもよい場合は、受信ウィンドウサイズはあまり拡大させない。
【0061】
これに対して、動作モードが流入量引き下げモードの場合、rwnd管理部110は、受信流量制限値を予測流量値で除算して流量引き下げ分の割合を算出する。そして、rwnd管理部110は、流量引き下げ分の割合を2倍した値を調整前受信ウィンドウサイズに乗算して流量制限対象コンテナのバッファサイズを算出する。すなわち、予測流量値をI’とし、受信流量制限値をMとした場合、rwnd管理部110は、調整前受信ウィンドウサイズ×2M/I’として算出したサイズのバッファを流量制限対象コンテナのバッファとして確保する。この場合も、流量引き下げ分の割合の2倍を乗算した理由は、流入量引き上げモードの場合と同様である。また、流量を引き下げることから予備分は確保されなくてもよい。
【0062】
その後、rwnd管理部110は、流量制限対象コンテナ毎のバッファに格納されたパケットのサイズの情報をバッファ管理部109から取得する。次に、rwnd管理部110は、確保したバッファサイズの流量制限対象コンテナのバッファの空きサイズを算出する。そして、rwnd管理部110は、ACK管理部111から送信部105に送られたACKに格納されたrwndの受信ウィンドウサイズを、算出した流量制限対象コンテナのバッファの空きサイズで上書きする。このように、rwnd管理部110は、流量引き下げ分の割合で受信ウィンドウサイズを決定する。すなわち、rwnd管理部110は、受信流量制限値とまとめた際の予測流量値から動的に受信ウィンドウサイズを決定する。具体的には、rwnd管理部110は、予測流量値が受信流量制限値と比較してある程度大きく流量制限を大きく引き下げる場合は、受信ウィンドウサイズを大きく縮小する。また、rwnd管理部110は、予測流量値が受信流量制限値とほぼ同じ大きさであり流量制限をあまり引き下げなくてもよい場合は、受信ウィンドウサイズをあまり縮小させない。
【0063】
このように、rwnd管理部110は、いずれの動作モードの場合もrwndの書き換えはパケットの解放前に行う。ACKの返信は流量制限対象コンテナからACKが送信された後となるが、rwnd管理部110は、rwndの書き換えはパケットの解放前に行うことで、確保したバッファサイズが流量引き下げ分の割合を2倍した値から算出したサイズであることを隠蔽する。このrwnd管理部110が、「ウィンドウ管理部」の一例にあたる。
【0064】
ACK管理部111は、動作モードの通知をモード判定部113から受ける。また、ACK管理部111は、次のまとめる前のパケットの流入量である予測流入量及び次のパケットをまとめた後の集約パケットの流量である予測流量値の入力をモード判定部113から受ける。次に、ACK管理部111は、次のまとめ割合の予測値を算出する。そして、ACK管理部111は、次回のまとめ割合の予測値で受信流入量制限値を除算して目標流入量を算出する。
【0065】
例えば、まとめる前の予測流入量をIとし、まとめた後の予測流量値をI’とした場合、次回のまとめ割合をPとすると、P=I/I’である。そして、この場合の目標流入量をLとすると、L=M/Pである。ここで、動作モードを流入量引き上げモードと決定した場合、I≦M≦I’であり、Pは1以下であることからLはM以上となり、目標流入量は現在の受信流入量制限値以上となることから、流入量が引き上げられることが分かる。また、動作モードを流入量引き下げモードと決定した場合、M≦I’≦Iであり、Pは1以上であることからLはM以下となり、目標流入量は現在の受信流入量制限値以下となることから、流入量が引き下げられることが分かる。
【0066】
その後、ACK管理部111は、ACKの入力を内部通信受信部104から受ける。そして、ACK管理部111は、動作モードにしたがって以下の処理を実行して、ACKの送信タイミングを決定する。
【0067】
動作モードが流入量引き上げモードの場合、ACK管理部111は、目標流入量を目標にACKをなるべくまとめて返答する。例えば、目標流入量をLとした場合、ACK管理部111は、1/L(sec)に1つACKを送信部105に出力してACKを外部装置30に返すことで流入量を引き上げて目標流入量を維持することができる。ただし、1/L(sec)毎にACKを返した場合、パケットの送信元である外部装置30でのACK受信処理が増加してしまい、外部装置30の送信性能が低下するおそれがある。そこで、本実施例では、ACK管理部111は、1/L(sec)毎ではなく、1/L(sec)を目標になるべくACKをまとめて送る。例えば、ACK管理部111は、N個のACKをまとめてN/L(sec)毎に送信部105に出力する。このように、ACK管理部111は、動作モードが流入量引き上げモードの場合、パケットの流入量が増えるため返信するACKが増えることから、ACKの送信タイミングを早める。
【0068】
これに対して、動作モードが流入量引き下げモードの場合、ACK管理部111は、目標流入量を目標にACKを取得してからACKの出力タイミングに遅延を加えてACKを送信部105に出力する。これにより、ACK管理部111は、流入量を引き下げて目標流入量を維持することができる。このように、ACK管理部111は、動作モードが流入量引き下げモードの場合、パケットの流入量が減るため返信するACKが減ることから、ACKの送信タイミングを遅くする。
【0069】
また、ACK管理部111は、ACKの受信を再送管理部106に通知する。所定の待機時間を過ぎてもACKを受信しない場合、ACK管理部111は、ACKの送信の指示を再送管理部106から受ける。そして、ACK管理部111は、ACKを送信部105へ出力してACKをパケットの送信元の外部装置30へ送信する。これにより、ACK管理部111は、スマートNIC10の内部でのパケットロスによる外部装置30からの無駄な再送を抑制することができる。また、ACK管理部111は、ACKに格納されたrwndをrwnd管理部110に通知する。
【0070】
次に、スマートNIC10とホストコンピュータ20との間のパケット及びACKの流れをまとめて説明する。ここでは、コンテナ200として、コンテナ201~203が存在し、且つ、コンテナ201の優先度が高く、コンテナ202及び203の優先度が低い場合で説明する。
【0071】
図2は、流量制限が開始されていない状態のパケットの流れを示す図である。
図2に示すように、流量制限が行われていない場合は、外部装置30から送信されたパケットは、エンベデッドスイッチ101を介してコンテナ201~203に直接転送される。
【0072】
図3は、流量制限が発生した場合のパケットの流れを示す図である。ここでは、優先度が低いコンテナ202及び203においてバーストトラフィックが発生し流量制限が開始された場合で説明する。この場合、優先度が低いコンテナ202及び203宛てのパケット送信のフロールールが書き換えられ、コンテナ202及び203宛てのパケットの宛先がスマートNIC10の制御部120宛てに変更される。そして、エンベデッドスイッチ101は、コンテナ202及び203宛てのパケットを受信すると、受信したパケットを制御部120へ転送する。制御部120は、コンテナ202及び203宛てのパケットをバッファ114に格納する。そして、制御部120は、優先度が高いコンテナ201の通信を阻害しない流量で優先度が低いコンテナ202及び203に対してバッファ114からパケットを送信する。
【0073】
図4は、流量制限が発生した場合のパケットの状態を示す図である。
図3のように流量制限をかけた場合に、本実施例に係るスマートNIC10は、実際には
図4のようにパケットを集約してコンテナ202及び203へ転送する。例えば、制御部120は、コンテナ202宛てのパケットを3つ集約して1つの集約パケットとしてコンテナ202へ送信する。また、制御部120は、コンテナ203宛てのパケットを2つ集約して1つの集約パケットとしてコンテナ203へ送信する。これにより、コンテナ202に対して発生した3回の割り込み及び3回のパケット処理が、1回の割り込み及び1回のパケット処理に減らされる。また、コンテナ203に対して発生した2回の割り込み及び2回のパケット処理が、1回の割り込み及び1回のパケット処理に減らされる。したがって、スマートNIC10は、流量制限を行いながら割り込み処理によるホストコンピュータ20のCPU使用率を低減することができる。また、ホストコンピュータ20でのTCPのプロトコル処理といったパケット処理数も減らすことができ、その点でもCPU使用率を低減することができる。ネットワーク処理のCPU使用率の観点からみると、同じCPU使用率でありながらスループットを向上させることが可能となる。
【0074】
図5は、流量制限が発生した場合のACKの流れを示す図である。流量制限が発生した場合、優先度が低いコンテナ202及び203からの通信も、フロールールが書き換えられて、一旦スマートNIC10の制御部120へ転送される。制御部120は、受信流量制限値、次のまとめる前のパケットの流入量である予測流入量及び次のパケットをまとめた後の集約パケットの流量である流量予測値に応じてACKを送信するタイミングを動的に調整する。また、制御部120は、流量制限値が受信流量制限値に応じてrwndを決定する。そして、制御部120は、ACKをパケットの送信元の外部装置30へ送信する。また、制御部120は、コンテナ202又は203に集約パケットを送信してから所定の待機時間のうちにACKの応答がない場合、集約パケットを再送する。そして、制御部120は、ACKの応答を受信してからバッファ114に格納されたパケットを解放することで、パケットロスを低減する。
【0075】
例えば、コンテナ202の受信流量制限が10Mppsで、コンテナ203の受信流量制限が5Mppsの場合を考える。この条件で、以下の各場合について制御部120の処理を説明する。
【0076】
コンテナ202宛てのパケットの流入量が15Mppsで、まとめた後の流量が8Mppsであり、コンテナ203宛てのパケットの流入量が6Mppsで、まとめた後の流量が3Mppsであるものとする。この場合、コンテナ202及び203のいずれも、パケットのそのままの流入量は受信流量制限値を超えるが、まとめた後の流量は受信流量制限値を超えない。そこで、この場合は、モード判定部113は、コンテナ202及び203のいずれについても動作モードを流量引き上げモードと決定する。すなわち、制御部120は、コンテナ202についてはまとめた後の流量が10Mppsとなるようにトラフィックを上昇させ、コンテナ203についてはまとめた後の流量が5Mppsとなるようにトラフィックを上昇させるように制御する。
【0077】
具体的には、コンテナ202について、流量予測部112が、前回の流入量及びまとめた後の流量を用いて、次の流入量である予測流入量を15Mppsと予測し、次のまとめた後の流量である予測流量値を8Mppsと予測したとする。この場合、ACK管理部111は、まとめ割合を8/15と算出する。そして、ACK管理部111は、目標流入量を10/(8/15)=18.75Mppsと算出する。予測される流入量が15Mppsであるのに対して、目標流入量が18.75であることから、トラフィックを上昇させることになる。
【0078】
そこで、ACK管理部111は、1/18.75M(sec)を目標としてACKをまとめて送信する。また、この場合、rwnd管理部110は、コンテナ202のバッファのバッファサイズを、調整前受信ウィンドウサイズ×2×(10/8)+予備分=調整前受信ウィンドウサイズ×1.25+予備分として確保する。そして、rwnd管理部110は、調整前受信ウィンドウサイズ×1.25+予備分のバッファサイズのうちの空きサイズをrwndとする。これにより、制御部120は、コンテナ202について、まとめた後の流量が10Mppsとなるようにトラフィックを上昇させることができる。
【0079】
また、コンテナ202宛てのパケットの流入量が20Mppsで、まとめた後の流量が15Mppsであり、コンテナ203宛てのパケットの流入量が10Mppsで、まとめた後の流量が7Mppsであるものとする。この場合、コンテナ202及び203のいずれも、パケットのそのままの流入量及びまとめた後の流量のいずれも受信流量制限値を超える。そこで、この場合は、モード判定部113は、コンテナ202及び203のいずれについても動作モードを流量引き下げモードと決定する。すなわち、制御部120は、コンテナ202についてはまとめた後の流量が10Mppsとなるようにトラフィックを降下させ、コンテナ203についてはまとめた後の流量が5Mppsとなるようにトラフィックを降下させるように制御する。
【0080】
具体的には、コンテナ202について、流量予測部112が、前回の流入量及びまとめた後の流量を用いて、次の流入量である予測流入量を20Mppsと予測し、次のまとめた後の流量である予測流量値を15Mppsと予測したとする。この場合、ACK管理部111は、まとめ割合を15/20と算出する。そして、ACK管理部111は、目標流入量を10/(15/20)=13.33Mppsと算出する。予測される流入量が20Mppsであるのに対して、目標流入量が13.33であることから、トラフィックを降下させることになる。
【0081】
そこで、ACK管理部111は、13.33Mppsを目標として遅延を加えてACKを送信する。また、この場合、rwnd管理部110は、コンテナ202のバッファのバッファサイズを、調整前受信ウィンドウサイズ×2×(10/15)=調整前受信ウィンドウサイズ×1.33として確保する。そして、rwnd管理部110は、調整前受信ウィンドウサイズ×1.33のバッファサイズのうちの空きサイズをrwndとする。これにより、制御部120は、コンテナ202について、まとめた後の流量が10Mppsとなるようにトラフィックを降下させることができる。
【0082】
ここで、特にソフトウェアを利用して制御部120の制御を実現することで、スマートNIC10を使用して流量制限を行う場合のホストコンピュータ20と連携した複雑な処理の実現が容易となる。また、ソフトウェアを利用して制御部120の制御を実現する場合、ASICやFPGAベースのNICと比較してメモリが潤沢に確保できる。そのため、バッファ114のサイズを大きくでき、多くのパケットを1つにまとめることが可能となる。この利点をより有効に利用するために、rwnd管理部110は、パケットをまとめた状態を考慮して受信ウィンドウサイズをなるべく大きくするように調整する。また、rwnd管理部110によりなるべく多くのパケットがバッファに滞留させられた場合、ACKを返さないと送信元の外部装置30による後続のデータの送信が困難となる。そこで、ACK管理部111が、スマートNIC10で受信が完了したパケットのACKを外部装置30に返すことで通信の滞留を解消する。
【0083】
図6は、流量制限制御処理のフローチャートである。次に、
図6を参照して、本実施例に係るスマートNICによる流量制限制御処理の流れについて説明する。ここでは、特定のコンテナ200を対象とする流量制限を例に説明する。
【0084】
ホストコンピュータ20の流量制限管理部22は、流量制限を実行中か否かを判定する(ステップS1)。流量制限を実行中でない場合(ステップS1:否定)、流量制限制御処理は終了する。
【0085】
これに対して、流量制限が実行中の場合(ステップS1:肯定)、流量制限管理部22は、流入量が受信流量制限以上か否かを判定する(ステップS2)。
【0086】
流入量が受信流量制限未満の場合(ステップS2:否定)、流量制限管理部22は、特定のコンテナ200の流量制限の解除をフロー書換部107に通知する。フロー書換部107は、流量制限の解除の通知を受けて、特定のコンテナ200の流量制限のためのフロールールを通常の特定のコンテナ200宛てのパケット送信に書き換えて、流量制限をクリアする(ステップS3)。
【0087】
これに対して、流入量が受信流量制限以上の場合(ステップS2:肯定)、流量制限管理部22は、特定のコンテナ200の流量制限をフロー書換部107に通知する。フロー書換部107は、流量制限の通知を受けて、特定のコンテナ200宛ててのパケットをスマートNIC10の制御部120へ転送するようにエンベデッドスイッチ101のキャッシュに格納されたフロールールを書き換える(ステップS4)。
【0088】
次に、流量予測部112は、流入量及びまとめた後の流量からまとめ割合を算出する。さらに、流量予測部112は、次のパケットのスマートNIC10への流入量を予測して予測流入量を求める。そして、流量予測部112は、予測流入量及びまとめ割合から次のパケットをまとめた後の集約パケットの流量の予測値である予測流量値を算出する。その後、モード判定部113は、予測流量値が受信流量制限値以下か否かを判定する(ステップS5)。
【0089】
予測流量値が受信流量制限値以下の場合(ステップS5:肯定)、モード判定部113は、まとめた後の流量が受信流量制限値に達するように制御する流入量引き上げモードを動作モードとする。そして、モード判定部113は、動作モードを流入量引き上げモードとする通知をrwnd管理部110及びACK管理部111に通知して、流入量引き上げモードを設定する(ステップS6)。
【0090】
これに対して、予測流量値が受信流量制限値より大きい場合(ステップS5:否定)、モード判定部113は、まとめた後の流量が受信流量制限値まで下がるように制御する流入量引き下げモードを動作モードとする。そして、モード判定部113は、動作モードを流入量引き下げモードとする通知をrwnd管理部110及びACK管理部111に通知して、流入量引き下げモードを設定する(ステップS7)。
【0091】
図7は、流入量引き上げモードでのACKタイミング及び受信ウィンドウサイズの決定処理のフローチャートである。次に、
図7を参照して、流入量引き上げモードでのACKタイミング及び受信ウィンドウサイズの決定処理の流れを説明する。ここでは、次のまとめる前のパケットの流入量である予測流入量をI、次のパケットをまとめた後の集約パケットの流量である予測流量値をI’、受信流量制限値をM、まとめ割合をP、目標流入量をLとする。
【0092】
ACK管理部111は、次回のまとめ割合をP=I/I’として算出する。次に、ACK管理部111は、目標流入量をL=M/Pとして算出する(ステップS101)。
【0093】
次に、ACK管理部111は、1/L(sec)を目標に、ACKをまとめて送信タイミングを決定する(ステップS102)。
【0094】
また、rwnd管理部110は、調整前受信ウィンドウサイズ×2M/I’+(予備分)でバッファサイズを算出する。そして、rwnd管理部110は、算出したバッファサイズのバッファを確保する(ステップS103)。
【0095】
その後、rwnd管理部110は、確保したバッファの空きサイズを求めて受信ウィンドウサイズとして決定する(ステップS104)。
【0096】
その後、ACK管理部111は、決定したタイミングでACKを送信部105へ出力する。rwnd管理部110は、送信部105に送られたACKのrwndを決定した受信ウィンドウサイズで上書きする。送信部105は、ACKをエンベデッドスイッチ101を介して外部装置30へ送信することで、rwndが上書きされたACKを、ACK管理部111により決定されたタイミングで外部装置30へ送信する(ステップS105)。
【0097】
図8は、流入量引き下げモードでのACKタイミング及び受信ウィンドウサイズの決定処理のフローチャートである。次に、
図8を参照して、流入量引き下げモードでのACKタイミング及び受信ウィンドウサイズの決定処理の流れを説明する。ここでも、次回のまとめる前の予測流入量をI、次回のまとめた後の予測流量値をI’、受信流量制限値をM、まとめ割合をP、目標流入量をLとする。
【0098】
ACK管理部111は、次回のまとめ割合をP=I/I’として算出する。次に、ACK管理部111は、目標流入量をL=M/Pとして算出する(ステップS201)。
【0099】
次に、ACK管理部111は、L(Mpps)を目標に遅延を入れてACKの送信タイミングを決定する(ステップS202)。
【0100】
また、rwnd管理部110は、調整前受信ウィンドウサイズ×2M/I’でバッファサイズを算出する。そして、rwnd管理部110は、算出したバッファサイズのバッファを確保する(ステップS203)。
【0101】
その後、rwnd管理部110は、確保したバッファの空きサイズを求めて受信ウィンドウサイズとして決定する(ステップS204)。
【0102】
その後、ACK管理部111は、決定したタイミングでACKを送信部105へ出力する。rwnd管理部110は、送信部105に送られたACKのrwndを決定した受信ウィンドウサイズで上書きする。送信部105は、ACKをエンベデッドスイッチ101を介して外部装置30へ送信することで、rwndが上書きされたACKを、ACK管理部111により決定されたタイミングで外部装置30へ送信する(ステップS205)。
【0103】
図9は、ACK送信処理のフローチャートである。次に、
図9を参照して、パケットロス対応のためのACK送信処理の流れを説明する。
【0104】
再送管理部106は、集約パケットの送信の通知をバッファ管理部109から受ける。そして、再送管理部106は、ACK管理部111からのACKの取得通知にしたがって、所定の待機時間内に流量制限対象コンテナからのACKの返信があったか否かを判定する(ステップS11)。
【0105】
所定の待機時間内に流量制限対象コンテナからのACKの返信があった場合(ステップS11:肯定)、再送管理部106は、エンベデッドスイッチ101を介してACKをパケットの送信元の外部装置30へ送信する(ステップS12)。
【0106】
その後、バッファ管理部109にパケットの解放を指示する。バッファ管理部109は、パケットをバッファ114から削除してパケットを開放する(ステップS13)。
【0107】
これに対して、所定の待機時間内に流量制限対象コンテナからのACKの返信が無かった場合(ステップS11:否定)、再送管理部106は、パケットの送信元の外部装置30へACKを送信済みか否かを判定する(ステップS14)。送信済みの場合(ステップS14:肯定)、ACK送信処理は、ステップS16へ進む。
【0108】
これに対して、パケットの送信元の外部装置30へACKを送信していない場合(ステップS14:否定)、再送管理部106は、ACKの送信をACK管理部111に指示する。ACK管理部111は、指示を受けて、パケットの送信元の外部装置30にACKを送信する(ステップS15)。
【0109】
そして、再送管理部106は、流量制限対象コンテナへのパケットの再送をバッファ管理部109に指示する。バッファ管理部109は、指示を受けて、ACKが未到達の集約パケットを流量制限対象コンテナへ再送する(ステップS16)。その後、ACK送信処理は、ステップS11へ戻る。
【0110】
以上に説明したように、本実施例に係るスマートNICは、コンテナに対する流量制限中にバッファに流量制限対象コンテナ宛てのパケットを格納し、パケットをまとめて集約パケットを生成して流量制限対象コンテナへ転送する。さらに、本実施例に係るスマートNICは、次回の予測流入量、次回のまとめた後の予測流量値及び受信流量制限値を用いて、目標流量値を算出し、目標流量値になるようにACKの送信タイミングを調整する。また、本実施例に係るスマートNICは、次回のまとめた後の予測流量値及び受信流量制限値を用いて確保するバッファサイズを算出し、確保したバッファの空きサイズから受信ウィンドウサイズを決定する。
【0111】
これにより、パケットをまとめることで、割り込みやパケット処理の回数を抑えることができ、通信量当たりのCPU使用率を低減することができる。また、まとめ割合を基に、ACKの送信タイミング及び受信ウィンドウサイズを決定することで、以下のような効果がある。例えば、外部装置30からの流入量が大きいが小さいパケットが多く、パケットをまとめる効果が大きい場合には、流入量を増やし、流入制限を守りつつスループットを向上させることができる。逆に、パケットが大きいためパケットをまとめる効果が小さい場合には、流入量を流量制限まで絞り、転送量を最適化することができる。
【0112】
さらに、本実施例に係るスマートNICは、ホストコンピュータにパケットを送信した後にACKの応答が所定の待機時間内に無い場合は、パケットの送信元の外部装置にACKを送信するとともにホストコンピュータにパケットを再送する。これにより、スマートNICとホストコンピュータ館でのパケットの到達性を補償するとともに、再送処理を高速化し、且つ、パケット送信元の外部装置による無駄な再送を低減することができる。
【0113】
また、以上の説明では、コンテナ200を例に説明したが、スマートNICが通信のインタフェースとなる演算処理装置であれば、他の演算処理装置であってもスマートNICは同様の機能及び効果を有することが可能である。
【0114】
(ハードウェア構成)
図10は、サーバのハードウェア構成図である。
図1に示したホストコンピュータ20及びスマートNIC10は、
図10に示すサーバ90により実現可能である。
【0115】
サーバ90は、
図10に示すように、CPU901、メモリ902、記憶装置903、ネットワークインタフェース904、グラフィック処理装置905、入力インタフェース906、光学ドライブ装置907及び機器接続インタフェース908を有する。CPU901は、バスを介してメモリ902、記憶装置903、ネットワークインタフェース904、グラフィック処理装置905、入力インタフェース906、光学ドライブ装置907及び機器接続インタフェース908と接続される。
【0116】
グラフィック処理装置905は、例えばモニタなどの表示装置91が接続される。また、入力インタフェース906は、例えばキーボードやマウスといった入力装置92が接続される。サーバ90の操作者は、表示装置91及び入力装置92を用いてサーバ90に情報の入力を行う。
【0117】
メモリ902は、ROM(Read Only Memory)及びRAM(Random Access Memory)を含む。ROMは、例えば、BIOS(BASIC Input Output System)等のブートプログラムを記憶する。
【0118】
光学ドライブ装置907は、例えば磁気ディスクや光ディスク等の可搬記憶媒体93が脱着可能である。光学ドライブ装置907は、挿入された可搬記憶媒体93に対するデータの書き込みや読み出しを行う。機器接続インタフェース908は、USBメモリ94などが着脱可能である。記憶装置903は、ハードディスクやSSD(Solid State Drive)などである。
【0119】
CPU901は、記憶装置903から各種プログラムを読み出してメモリ902に展開して実行する。これにより、CPU901は、
図1に例示したコンテナ200、CNIプラグイン21及び流量制限管理部22の機能を実現する。
【0120】
なお、プログラムは、記憶装置903に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、光学ドライブ装置907等を介してCPU901によって読み出されてもよい。あるいは、プログラムは、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムは、他のコンピュータから、ネットワークインタフェース904を介してCPU901によって読み出されてもよい。
【0121】
ネットワークインタフェース904は、スマートNIC10である。ネットワークインタフェース904は、例えば、FPGAで形成されるプロセッサ及びメモリを有する。ネットワークインタフェース904メモリには、
図1に例示した制御部120の機能を実現するプログラムを含む各種プログラムが格納される。また、ネットワークインタフェース904メモリは、バッファ114の機能を実現する。
【0122】
そして、ネットワークインタフェース904のプロセッサは、メモリから各種プログラムを読み出して実行することで、
図1に例示した制御部120の機能を実現する。
次に、実施例2について説明する。実施例1では、1秒間あたりのパケット数であるレートを基準として流量制限の制御を行った。レートに平均パケットサイズを乗算すると帯域となるため、実施例1で説明した制御は、実質的には帯域ベースの制御といえる。ただし、ネットワークに性能指標として帯域以外にレイテンシーも重要である。例えば、ネットワーク越しのクラウドではなくエンドポイントに近いエッジサーバで処理を行なうエッジコンピューティングが普及している。そのようなエッジコンピューティングでは、帯域以上にレイテンシーの改善が求められる。
複数のコンテナが動作するシステムにおいて、優先度が高い低遅延が求められるコンテナを含むシステムにおいて、優先度が高いコンテナにバーストトラフィックが発生する状況が考えられる。このような状況で、パケットが届いた場合、コンテナは無条件に受信処理を行うが、その受信処理によりCPUが使用される。システム全体の処理であるパケットの受信処理にCPUを使用した場合、その分優先度が高いコンテナの処理のCPU使用率が低下する。
そこで、例えば、スマートNICを使用しない場合に、ネットワーク処理のCPU使用率を考慮して、ネットワークの流量に基づきCPU割り当てと流量制限を動的に制御する技術が提案されている。ただし、この技術ではスマートNICを含むシステムについては考慮されていない。また、単純にホストコンピュータを増やすことで、優先度が高いコンテナの処理のCPU使用率が低下を抑制する方法が考えられる。しかし、ホストコンピュータを増やすとTCOが上昇してしまう。TCOを低下させることの要望は大きく、単なるホストの増加は実用的ではない。
ここで、スマートNICを使用しない場合であれば、流量制限によりコンテナに受信されないパケットはNICで破棄される。破棄されたパケットは再送されるため、ネットワーク性能が大幅に低下する。これについては、スマートNICを使用して、実施例1に説明したようにパケットをまとめることで破棄を回避することができる。ただし、スマートNICを用いた流量制限の場合、スマートNICにパケットが届いても、コンテナが、スマートNICへのパケットの到着を把握せず、データ間受信待ちをしてしまい、レイテンシーが悪化するおそれがある。
なお、流量制限のレートをR(pps)とすると、1/R毎にパケットがホストに送られるといえる。すなわち、大雑把には、1/Rが流量制限によるレイテンシーのオーバーヘッドと考えることができる。ただし、スマートNICでパケットを溜めていても、コンテナが受信データを使用するまでにパケットがコンテナに届けられれば、流量制限によるレイテンシーのオーバーヘッドはコンテナには認識されない。そこで、スマートNICでパケットを溜めていても、コンテナが受信データを使用するまでにパケットがコンテナに届けられない場合が問題となる。
流量制限はコンテナの処理に用いられるデータ量とは無関係に行われるため、流量制限の度合いによっては、コンテナがデータ受信待ちの状態で処理を停止することが考えられる。データ受信待ちの状態で処理を停止すると、そのコンテナに対してCPUの割り当てが行われず、遅延が悪化するおそれがある。
そこで、本実施例に係る情報処理システムでは、スマートNICは流量制限よりも多いパケットを受信キューに格納する。コンテナは通常は流量制限分のパケットを受信キューから取り出して、データ受信待ちに入る直前に受信キューからパケットを流量制限以上に取り出す。以下に、本実施例に係る情報処理システムについて説明する。以下の説明では、実施例1と同様の各部の動作については説明を省略する。
モード判定部113は、各コンテナ200のそれぞれについて低遅延が求められるコンテナ200である低遅延コンテナか否かの情報を保持する。そして、モード判定部113は、流量制限が実行された場合、流量制限の対象のコンテナ200である流量制限対象コンテナが低遅延コンテナか否かを判定する。流量制限対象コンテナが低遅延コンテナの場合、モード判定部113は、その流量制限対象コンテナに対するパケット転送モードを低遅延モードと決定する。これに対して、流量制限対象コンテナが低遅延コンテナでない場合、モード判定部113は、その流量制限対象コンテナに対するパケット転送モードを通常モードと決定する。そして、モード判定部113は、決定したパケット転送モードをパケット転送量管理部116に通知する。その後、モード判定部113は、動作モードを流入量引き下げモードにするか流量引き上げモードにするかの判定を行う。その後、流量制限が解除されると、パケット転送モードは自動的にリセットされる。
パケット転送量管理部116は、受信キュー115に入れるパケット量を管理する。パケット転送量管理部116は、流量制限が開始されるとパケット転送モードの通知をモード判定部113から受ける。
パケット転送モードが通常モードの場合、パケット転送量管理部116は、受信流量制限値に応じた量のパケットの送出をバッファ管理部109に指示する。これに対して、パケット転送モードが低遅延モード時には、パケット転送量管理部116は、受信流量制限値に応じた量より多いパケットの送出をバッファ管理部109に指示する。受信流量制限値に応じた量より多いパケットとは、受信処理に用いる量のパケットの未受信によりデータ受信待ちが発生するコンテナ200における受信処理に用いるパケットの量以上であればよい。例えば、受信流量制限値に応じた量より多いパケットは、受信流量制限値に応じたパケット量の1.5倍分の量のパケットとすることができる。
次に、ホストコンピュータ20について説明する。本実施例に係るホストコンピュータ20は、実施例1の各部に加えて、パケット取出部23、パケット受信部24、データ受信待ち判定部25、パケット取出管理部26及び流量制限補正部27を有する。
パケット取出部23は、受信キュー115からパケットを取り出して、パケット受信部24へ出力する処理を実行する。パケット取出部23は、パケットを取り出す量の指示をパケット取出管理部26から受ける。本実施例では、パケットを取り出す量として、全てのパケットの取り出しと、受信流量制限値分のパケットの取り出しの2つがある。
全てのパケットの取り出しが指示された場合、パケット取出部23は、受信キュー115に格納されたパケットを全て取り出す。また、受信流量制限値分のパケットの取り出しが指示された場合、パケット取出部23は、指定された受信流量制限値に応じた量のパケットを受信キュー115から取り出す。パケット取出部23は、取り出したパケットをパケット受信部24へ出力する。
また、低遅延コンテナにデータ受信待ちが発生する場合に、受信処理に用いる量のパケットが流入するようにその点遅延コンテナの受信流量制限値が増やされると、パケット取出部23は、以下の処理を行なう。パケット取出部23は、既に取り出したパケットに加えて新たな受信流量制限値に応じた量の残りの分のパケットを受信キュー115から取り出す。その後、パケット取出部23は、新たな受信流量制限値に応じたパケットの取り出しを繰り返す。パケット取出部23は、取り出したパケットをパケット受信部24へ出力する。
パケット受信部24は、パケット取出部23により受信キュー115から取り出されたパケットを全て取得する。そして、パケット受信部24は、パケットの解析などの処理を行い、パケットの宛先のコンテナ200にパケットを出力する。
データ受信待ち判定部25は、各コンテナ200のそれぞれについて低遅延コンテナか否かの情報を保持する。データ受信待ち判定部25は、流量制限開始後、流量制限対象コンテナであり且つ低遅延コンテナであるコンテナ200がデータ受信待ちになるか否かを判定する。例えば、データ受信待ち判定部25は、流量制限対象コンテナが受信処理に用いるパケットの量を取得して受信流量制限値に応じたパケットの量と比較する。そして、データ受信待ち判定部25は、流量制限対象コンテナが受信処理に用いるパケットの量がて受信流量制限値に応じたパケットの量よりも多い場合、その流量制限対象コンテナがデータ受信待ちになると判定する。データ受信待ちになると判定した場合、データ受信待ち判定部25は、その流量制限対象コンテナがデータ受信待ちになる旨及び受信処理に用いるパケットの量の情報をパケット取出管理部26及び流量制限補正部27に通知する。
パケット取出管理部26は、各コンテナ200のそれぞれについて低遅延コンテナか否かの情報を保持する。パケット取出管理部26は、流量制限が開始されると、その流量制限対象コンテナに対する受信流量制限値を流量制限管理部22から取得する。
そして、パケット取出管理部26は、流量制限対象コンテナが低遅延コンテナであれば、受信流量制限値に応じた量のパケットの取り出しをパケット取出部23に指示する。その後、流量制限対象コンテナ且つ低遅延コンテナについてデータ受信待ちの通知をデータ受信待ち判定部25から受けると、パケット取出管理部26は、そのコンテナ200の新たな受信流量制限値を流量制限管理部22から取得する。ここで、新たな受信流量制限値は、後述するが、データ受信待ちが発生するコンテナ200におけるデータ受信待ちとなる受信処理に用いるパケットの量の流量に対応する値である。その後、パケット取出管理部26は、新たな受信流量制限値に応じた量のパケットの取り出しをパケット取出部23に指示する。
流量制限補正部27は、流量制限対象コンテナ且つ低遅延コンテナにおいてデータ受信待ちになるとデータ受信待ち判定部25により判定されると、その流量制限対象コンテナがデータ受信待ちになる旨の通知をデータ受信待ちとなる受信処理に用いるパケットの量の情報とともにデータ受信待ち判定部25から受ける。そして、流量制限補正部27は、各コンテナ200に対する流量の補正を行なう。
具体的には、流量制限補正部27は、データ受信待ちとなる低遅延コンテナの流量をデータ受信待ちとなる受信処理に用いるパケットの量に設定する。次に、流量制限補正部27は、流量が抑えられるコンテナ200を選択する。例えば、流量制限補正部27は、流量制限対象コンテナの中から低遅延コンテナでないコンテナ200を抽出する。次に、流量制限補正部27は、抽出したコンテナ200のうち流量引き上げモードで動作するコンテナ200を選択する。ここで、流量引き上げモードで動作するコンテナ200は、流量制限値よりもパケットをまとめた後の流量が低い状況にある。そのため、そのコンテナ200の流量制限値を下げたとしても、そのコンテナ200の性能に影響は発生しない。
また、低遅延コンテナでないコンテナ200の中に流量引き上げモードで動作するコンテナ200が存在しない場合、流量制限補正部27は、低遅延コンテナの中から一定時間流量補正を行っていないコンテナ200を選択する。ここで、流量制限の補正が行われていない低遅延コンテナは、その時点での流量近くまで流量制限を下げることが可能と考えられる。
その後、流量制限補正部27は、データ受信待ちになると判定されて流量が受信処理で用いるパケットの量に増やされたコンテナ200の流量の増加分に応じて、選択したコンテナ200の流量を減らす流量を算出する。そして、流量制限補正部27は、決定した流量に応じた各コンテナ200の受信流量制限値を算出して流量制限を補正する。そして、流量制限補正部27は、補正した流量制限における各コンテナ200の受信流量制限値を流量制限管理部22に通知する。以下では、この流量制限補正部27による流量制限の補正を動的流量調整と呼ぶ。
低レイテンシー化の処理が行われる前は、表251に示すように、コンテナA~Cのいずれも、1(Mpps)の流量制限が実施されていて、且つ、パケット処理によるCPU使用率が10%である。ここでは、簡単のため1(Mpps)あたりパケット処理にCPCが10%消費されるものとして説明する。
ここで、コンテナAに低レイテンシー化の処理が実施されて、コンテナAに対して受信処理に用いる量のパケットが取り出される受信流量制限値ように変更されることで、コンテナAに対する受信流量制限値が1.5(Mpps)に変化する。そこで、流量制限補正部27は、流量引き上げモードでの動作する流量制限対象コンテナのうちパケット処理によるCPU使用率が10%と低いコンテナB及びCを選択する。そして、コンテナB及びCの流量をコンテナAの増えた流量に応じて減らすように受信流量制限値を補正する。これにより、表252に示すように、コンテナB及びCの受信流量制限値は、いずれも0.75(Mpps)に変化する。この場合、コンテナB及びCのパケット処理によるCPU使用率は7.5となるが、まだ使用率としては低い値であり、コンテナB及びCのパケット処理は余裕を持って実施される。
実施例1では流量引き上げモードでの動作するコンテナ200について受信流量制限値までユーザからの流量を増やした。これに対して、本実施例における流量制限補正部27は、なるべく流量引き上げモードでの動作するコンテナ200のうち余裕のあるコンテナ200の引き上げ量を落として、その分でデータ受信待ちが発生する低遅延コンテナの流量を増やす。
流量制限管理部22は、流量制限の補正の通知を流量制限補正部27から受ける。そして、流量制限管理部22は、通知された補正にしたがって、各コンテナ200の受信流量制限値を補正する。
ここで、低レイテンシー化の処理を行なう際に、データ受信待ちが発生する時々に、受信処理に用いる量のパケットを取得して、通常は流量制限で規定される量のパケットを取得する構成にすることもできる。その場合は、流量制限補正部27はなくてもよい。その場合、パケット取出管理部26は、データ受信待ちとなる受信処理で用いられるパケット量に応じてパケットを受信キュー115からパケット取り出し部23取りださせる。
ただし、データ受信待ち直前のパケットの取り出しの場合、処理遅延がコンテナ200に影響するおそれがある。そこで、本実施例では、低レイテンシー化の処理を行なう際にそのコンテナ200については流量制限を緩め、データ受信待ちの影響を低減することで、処理遅延をコンテナ200から隠蔽することができる。
例えば、流量制限により規定される量が3つ分のパケットである状態で、低遅延コンテナが4つ分のパケットの受信処理を要求し、それにしたがって、流量制限が4つ分のパケットの量まで緩和された場合で説明する。
ホストコンピュータ20の流量制限管理部22は、流量制限を実行中か否かを判定する(ステップS301)。流量制限を実行中でない場合(ステップS301:否定)、流量制限制御処理は終了する。
流入量が受信流量制限未満の場合(ステップS302:否定)、流量制限管理部22は、特定のコンテナ200の流量制限の解除をフロー書換部107に通知する。フロー書換部107は、流量制限の解除の通知を受けて、特定のコンテナ200の流量制限のためのフロールールを通常の特定のコンテナ200宛てのパケット送信に書き換えて、流量制限をクリアする(ステップS303)。
これに対して、流入量が受信流量制限以上の場合(ステップS302:肯定)、流量制限管理部22は、特定のコンテナ200の流量制限をフロー書換部107に通知する。フロー書換部107は、流量制限の通知を受けて、特定のコンテナ200宛ててのパケットをスマートNIC10の制御部120へ転送するようにエンベデッドスイッチ101のキャッシュに格納されたフロールールを書き換える(ステップS304)。
次に、流量予測部112は、流入量及びまとめた後の流量からまとめ割合を算出する。さらに、流量予測部112は、次のパケットのスマートNIC10への流入量を予測して予測流入量を求める。そして、流量予測部112は、予測流入量及びまとめ割合から次のパケットをまとめた後の集約パケットの流量の予測値である予測流量値を算出する。そして、流量予測部112は、予測流量値をモード判定部113に通知して、モードの選択を指示する。モード判定部113は、流量制限の対象となるコンテナ200である流量制限対象コンテナが低遅延コンテナか否かを判定する(ステップS305)。
流量制限対象コンテナが低遅延コンテナの場合(ステップS305:肯定)、モード判定部113は、パケット転送モードを低遅延モードに決定してパケット転送量管理部116に通知する。パケット転送量管理部116は、バッファ管理部109に受信流量制限値に応じた量以上の所定量のパケットの送信を指示して、パケット転送モードを低遅延モードに設定する(ステップS306)。
これに対して、流量制限対象コンテナが低遅延コンテナでない場合(ステップS305:否定)、モード判定部113は、パケット転送モードを通常モードに決定してパケット転送量管理部116に通知する。パケット転送量管理部116は、バッファ管理部109に流量制限により規定された量のパケットの送信を指示して、パケット転送モードを通常モードに設定する(ステップS307)。
予測流量値が受信流量制限値以下の場合(ステップS308:肯定)、モード判定部113は、まとめた後の流量が受信流量制限値に達するように制御する流入量引き上げモードを動作モードとする。そして、モード判定部113は、動作モードを流入量引き上げモードとする通知をrwnd管理部110及びACK管理部111に通知して、流入量引き上げモードを設定する(ステップS309)。
これに対して、予測流量値が受信流量制限値より大きい場合(ステップS308:否定)、モード判定部113は、まとめた後の流量が受信流量制限値まで下がるように制御する流入量引き下げモードを動作モードとする。そして、モード判定部113は、動作モードを流入量引き下げモードとする通知をrwnd管理部110及びACK管理部111に通知して、流入量引き下げモードを設定する(ステップS310)。
低遅延コンテナであるコンテナ200が流量制限中でない場合(ステップS401:否定)、パケット取出管理部26は、全てのパケットの取り出しをパケット取出部23に指示する。パケット取出部23は、パケット取出管理部26からの指示を受けて、受信キュー115から全てのパケットを取り出す(ステップS402)。
これに対して、低遅延コンテナであるコンテナ200が流量制限中の場合(ステップS401:肯定)、パケット取出管理部26は、受信流量制限値に応じた量のパケットの取り出しをパケット取出部23に指示する。パケット取出部23は、パケット取出管理部26からの指示を受けて、受信流量制限値に応じた量のパケットを受信キュー115から取り出す(ステップS403)。
データ受信待ち判定部25は、受信処理に用いるパケットが届いているパケットが届いているか否かを判定する(ステップS501)。既に受信処理に用いるパケットが届いている場合(ステップS501:肯定)、パケットの受信時の処理は終了する。
これに対して、受信処理に用いるパケットが届いていない場合(ステップS501:否定)、データ受信待ち判定部25は、コンテナ200がデータ受信待ちになると判定する。そして、データ受信待ち判定部25は、受信処理に用いる量のパケットの取得をパケット取出部23に指示する。パケット取出部23は、受信キュー115にパケットが存在するか否かを判定する(ステップS502)。パケットが存在する場合(ステップS502:肯定)、パケット取出部23は、受信処理に用いる量のパケットの残りのパケットを受信キュー115から取り出す(ステップS503)。
流量制限補正部27は、低遅延コンテナでなく且つ流量引き上げモードのコンテナ200が存在するか否かを判定する(ステップS601)。低遅延コンテナでなく且つ流量引き上げモードのコンテナ200が存在する場合(ステップS601:肯定)、流量制限補正部27は、ステップS603へ進む。
これに対して、低遅延コンテナでなく且つ流量引き上げモードのコンテナ200が存在しない場合(ステップS601:否定)、流量制限補正部27は、低遅延コンテナで一定時間流量が補正されていないコンテナ200が存在するか否かを判定する(ステップS602)。低遅延コンテナで一定時間流量が補正されていないコンテナ200が存在しない場合(ステップS602:否定)、流量制限補正部27は、流量制限補正処理を終了する。
これに対して、低遅延コンテナで一定時間流量が補正されていないコンテナ200が存在する場合(ステップS602:肯定)、流量制限補正部27は、ステップS603へ進む。
その後、流量制限補正部27は、低遅延コンテナでなく且つ流量引き上げモードのコンテナ200又は低遅延コンテナで一定時間流量が補正されていないコンテナ200の中から流量を下げるコンテナを選択する(ステップS603)。
その後、流量制限補正部27は、コンテナ200間の流量を補正する(ステップS604)。そして、流量制限補正部27は、補正した各コンテナ200の流量を流量制限管理部22に通知する。流量制限管理部22は、通知された各コンテナ200の流量に応じて、それぞれのコンテナ200の受信流量制限値を決定して、各コンテナ200の流量制限を変更する。
以上に説明したように、本実施例に係るスマートNICは、流量制限対象コンテナが低遅延コンテナである場合、受信流量制限値に応じた量以上の所定量のパケットを受信キューへ格納する。そして、流量制限が行われた低遅延コンテナに対して、通常は受信流量制限値に応じた量のパケットが受信キュー115から取りだされて渡される。これにより、本実施例に係る情報処理システムは、流量制限を実現する。さらに、流量制限が行われた低遅延コンテナにおいてデータ受信待ちが発生する場合、データ受信待ちとなる受信処理に用いる量のパケットが受信キューから取り出されて、コンテナに渡される。これにより、本実施例に係る情報処理システムは、低遅延コンテナのデータ待ちを回避してレイテンシーを向上させる。さらに、情報処理システムは、データ受信待ちが発生するコンテナの流量を受信処理に用いるパケットの量まで増加させるとともに、他の余裕のあるコンテナの流量を下げてコンテナ間の流量を調整する動的流量補正を行なう。これにより、低遅延コンテナのデータ待ちの発生をより確実に抑制することができ、低遅延コンテナのレイテンシーを向上させることができる。