JP6334376B2 - 通信装置及びディスクリプタオーバーフロー検出方法 - Google Patents

通信装置及びディスクリプタオーバーフロー検出方法 Download PDF

Info

Publication number
JP6334376B2
JP6334376B2 JP2014244427A JP2014244427A JP6334376B2 JP 6334376 B2 JP6334376 B2 JP 6334376B2 JP 2014244427 A JP2014244427 A JP 2014244427A JP 2014244427 A JP2014244427 A JP 2014244427A JP 6334376 B2 JP6334376 B2 JP 6334376B2
Authority
JP
Japan
Prior art keywords
event
descriptor
network processing
unit
overflow
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.)
Expired - Fee Related
Application number
JP2014244427A
Other languages
English (en)
Other versions
JP2016110233A (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.)
Toshiba Corp
Toshiba Infrastructure Systems and Solutions Corp
Original Assignee
Toshiba Corp
Toshiba Infrastructure Systems and Solutions Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp, Toshiba Infrastructure Systems and Solutions Corp filed Critical Toshiba Corp
Priority to JP2014244427A priority Critical patent/JP6334376B2/ja
Publication of JP2016110233A publication Critical patent/JP2016110233A/ja
Application granted granted Critical
Publication of JP6334376B2 publication Critical patent/JP6334376B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Transfer Systems (AREA)
  • Communication Control (AREA)

Description

本発明の実施形態は、通信装置及びディスクリプタオーバーフロー検出方法に関する。
多数のクライアントにデータを配信する装置において、CPU(Central Processing Unit)によるTCP/IP(Transmission Control Protocol/Internet Protocol)ネットワーク処理の負荷が問題となっている。そこで、NIC(Network Interface Card)上のTOE(TCP/IP Offload Engine)という専用プロセッサ・ハードウェアに、TCP/IPの処理の一部を任せるオフロード処理が注目されている。TOEは、CPUとCPUにより実行されるソフトウェア(以下、「CPU/ソフトウェア」と記載する。)が従来行っていたTCP/IPプロトコルスタックのネットワーク処理のうち負荷の高い処理をハードウェア側で肩代わりして行った後、ソフトウェア側へバイパスする。これによりCPU/ソフトウェアの負担を軽減して処理を高速化させ、装置自体のスループットを向上させる。
TOEは、ハードウェアによりネットワーク処理を肩代わりした後にソフトウェア側へバイパスするために、ディスクリプタによりイベント通知を行う。このディスクリプタを通じて、CPU/ソフトウェア(TCP/IPプロトコルスタック)とハードウェアとの間でコネクション情報(セッション情報)をやり取りする。ディスクリプタは、ハード的にはTOEのメモリ上に構築したFIFO(First In First Out)のリングバッファの形態を採る。TOEのハードウェアは、このリングバッファに対してディスクリプタの書き込みを行い、CPU/ソフトウェアは、TCP/IPプロトコルスタックのネットワーク処理において、リングバッファからのディスクリプタの読み取りを行う。このリングバッファへの書き込み量(速度)よりも、読み込み量(速度)が遅いと、いずれリングバッファ中の読み込み未完了領域に(上書き)書き込みが発生してしまう。これが、「オーバーフロー」であり、有限なハードリソース(メモリなど)をリングバッファとして割り当てているため、いくらバッファ量を増大させたとしても原理的には回避できない課題である。このようなオーバーフローが発生した場合、従来のNICでは、TCPによる相手方からの再送を期待するより仕方が無かった。しかし、TOEにおいてソフトウェア処理の一部を肩代わりし、バイパスを行っている場合、相手方からの再送よりも、積極的にコネクションの復旧を行うことが望ましい場合が在った。
特開2002−369147号公報 特開平5−204829号公報
本発明が解決しようとする課題は、ネットワーク処理を分割して実行する2つのネットワーク処理部間でネットワーク処理の対象となるイベントを通知するために用いるディスクリプタにオーバーフローが発生したことを検出することができる通信装置及びディスクリプタオーバーフロー検出方法を提供することである。
実施形態の通信装置は、第一ネットワーク処理部と、第二ネットワーク処理部とを持つ。第一ネットワーク処理部は、クライアント端末との間の接続を制御するためのネットワーク処理の一部を実行し、ネットワーク処理の処理対象となるイベントの発生をイベントディスクリプタにより通知する。第二ネットワーク処理部は、通知されたイベントディスクリプタに基づいてネットワーク処理を実行する。第一ネットワーク処理部は、バッファと、読出ポインタ記憶部と、書込ポインタ記憶部と、イベントディスクリプタ管理部と、オーバーフロー判断部とを持つ。読出ポインタ記憶部は、バッファにおける読出位置を示す読出ポインタを記憶する。書込ポインタ記憶部は、バッファにおける書込位置を示す書込ポインタを記憶する。イベントディスクリプタ管理部は、書込ポインタが示すバッファにおける書込位置にイベントディスクリプタを書き込み、書込ポインタを次の書込位置に進める処理と、読出ポインタが示すバッファにおける読出位置からイベントディスクリプタを読み出して第二ネットワーク処理部に通知し、読出ポインタを次の読出位置に進める処理とを行う。オーバーフロー判断部は、読出ポインタが示す読出位置と書込ポインタが示す書込位置とに基づいてディスクリプタのオーバーフローを判断する。
第1の実施形態のデータ配信システムを示す構成図。 第1の実施形態の配信装置の内部構成を示す機能ブロック図。 第1の実施形態の配信装置におけるTCPの3whs(3-way handshake)のパッシブ・オープンのシーケンスを代表的な例として交えた時の内部フローを示す図。 第1の実施形態のリングバッファと書込ポインタ及び読出ポインタの関係を示す図。 第1の実施形態の書込ポインタ及び読出ポインタの移動を示す図。 第1の実施形態のディスクリプタオーバーフローの概念図。 第1の実施形態の配信装置によるディスクリプタオーバーフローの検知を示す図。 第1の実施形態の配信装置の動作を示す図。 第2の実施形態のコネクション管理部において管理するTCPのコネクション状態の遷移を示す基本的な図。 第2の実施形態のコネクション管理情報を管理するハッシュテーブルリストを示す図。 第3の実施形態のNIC−TOEの構成を示す機能ブロック図。 第4の実施形態のNIC−TOEの構成を示す機能ブロック図。
以下、実施形態の通信装置及びディスクリプタオーバーフロー検出方法を、図面を参照して説明する。以下では、通信装置が、データ配信サービスを提供する配信装置である場合を例に説明する。
(第1の実施形態)
図1は、第1の実施形態のデータ配信システムを示す構成図である。
同図に示すように、配信装置1(通信装置)は、LAN(Local Area Network)3を介してIP(Internet Protocol)ネットワーク5に接続される。配信装置1は、IPネットワーク5に接続される複数のクライアント端末7にデータを配信する。
近年、映像素材や音声素材などのデータを配信するデータ配信サービスの需要が高まっている。その中でも、TCP/IP(Transmission Control Protocol/Internet Protocol)をベースとしたベストエフォート型のネットワーキング技術を基盤インフラとしたフィールドでの配信需要が伸びている。それに伴い、回線の高速化・安定化(冗長化)などの施策が執り行われている。回線自体の高速化などによる大幅なネットワークパフォーマンスの向上のため、データの配信を行う装置において、CPU(Central Processing Unit)によるTCP/IPネットワーク処理の負荷が問題になりつつある。そこで、本実施形態の配信装置1は、TOE(TCP/IP Offload Engine)を実装したNIC(Network Interface Card)を用いてデータ配信を行う。TOEは、CPUとCPUにより実行されるソフトウェア(以下、「CPU/ソフトウェア」と記載する。)が従来行っていたTCP/IPのプロトコルスタックのネットワーク処理の一部を行う専用プロセッサ・ハードウェアである。
TOEは、ハードウェアによりネットワーク処理の一部を肩代わりした後に、CPU/ソフトウェアに対してディスクリプタによるイベント通知を行う。このディスクリプタを通じて、CPU/ソフトウェア(TCP/IPプロトコルスタック)とハードウェアとの間でコネクション情報(セッション情報)をやり取りする。例えば、CPU/ソフトウェアにより行うべき従来のTCP/IPのネットワーク処理の処理量を「10」とする。その処理量「10」のうち、TOEによりハードウェアが「7」、CPU/ソフトウェアが「3」のネットワーク処理を行えば、ディスクリプタ引き渡しのオーバヘッドが多少発生したとしても、CPU/ソフトウェアの負荷が軽減される。
ディスクリプタは、ハード的にはメモリ上に構築したFIFO(First In First Out)のリングバッファの形態を採る。ハードウェアは、このリングバッファに対する書き込みを行い、CPU/ソフトウェア(TCP/IP プロトコルスタック)は、このリングバッファに対する読み取りを行う。しかしながら、リングバッファにおけるイベントディスクリプタの書き込み/読み込みにオーバーフローが発生した場合を危惧すると、イベントの通知がある事を期待あるいは前提としたシステムにおいては、ディスクリプタオーバーフロー時の救い上げの方法や手段を講じなくてはならない。本実施形態の配信装置1は、ディスクリプタオーバーフローを回復し、パフォーマンス及び信頼性の改善と向上を図る。
図2は、配信装置1の内部構成を示す機能ブロック図である。同図においては、本実施形態と関係する機能ブロックのみを抽出して示してある。配信装置1は、NIC−TOE11(第一ネットワーク処理部)と、ローカルバス12と、ホストCPU13(第二ネットワーク処理部)と、アプリケーション実行部14(第二ネットワーク処理部)と、システムメモリ15と、メモリアクセス部16と、送信データバッファ17とを備える。NIC−TOE11と、ホストCPU13と、メモリアクセス部16と、送信データバッファ17とは、ローカルバス12を介して接続される。
NIC−TOE11は、TOEを実装したNICである。NIC−TOE11は、受信バッファ110と、イベントディスクリプタ管理部111と、コネクション管理部113と、読出ポインタ記憶部114と、書込ポインタ記憶部115と、オーバーフロー判断部116と、新規イベント情報記憶部117と、ネットワーク処理部118と、送信バッファ119とを備える。読出ポインタ記憶部114と、書込ポインタ記憶部115と、新規イベント情報記憶部117とは、NIC−TOE11の記憶領域内に設けられる。
受信バッファ110は、クライアント端末7から受信した通信パケットをバッファリングする。イベントディスクリプタ管理部111は、リングバッファ112によりイベントディスクリプタを管理する。イベントディスクリプタは、発生したTCPのイベント、次に発生させるべきTCPのイベント、及び、コネクションを特定する情報を含む。コネクションは、クライアント端末7との間のセッションで用いる論理的な接続である。以下では、コネクションと言う文言を用いて説明するが、セッションと言う文言に置き換えても相違はない。イベントディスクリプタは、コネクションを特定する情報に代えて、コネクションを特定する情報が書き込まれているアドレスの情報を含んでもよい。イベントディスクリプタ管理部111は、ネットワーク処理の処理対象となるイベントの発生をイベントディスクリプタによりホストCPU13及びアプリケーション実行部14に通知する。コネクション管理部113は、コネクション管理情報により各コネクションのコネクション状態を管理する。読出ポインタ記憶部114は、リングバッファ112の読出位置を示す読出ポインタを記憶する。書込ポインタ記憶部115は、リングバッファ112への書込位置を示す書込ポインタを記憶する。オーバーフロー判断部116は、読出ポインタが示すリングバッファ112の読出位置と、書込ポインタが示すリングバッファ112の書込位置とに基づいて、ディスクリプタのオーバーフローを判断する。新規イベント情報記憶部117は、ディスクリプタのオーバーフローが発生したときのTCPのイベントの種別を記憶する。ネットワーク処理部118は、ハードウェアによりTCP/IPのネットワーク処理を行う。送信バッファ119は、クライアント端末7に送信する通信パケットをバッファリングする。
ホストCPU13は、アプリケーション実行部14を動作させる。また、ホストCPU13は、NIC−TOE11から受信したイベントディスクリプタや、ディスクリプタオーバーフローの通知をアプリケーション実行部14に出力する。また、ホストCPU13は、アプリケーション実行部14から出力されたイベントディスクリプタの読み出し指示や、ネットワーク処理の実行指示をNIC−TOE11に出力する。さらに、ホストCPU13は、アプリケーション実行部14がクライアント端末7へ配信するよう指示したデータの読み出しをメモリアクセス部16に指示する。
アプリケーション実行部14は、ホストCPU13がシステムメモリ15からソフトウェアのプログラムを読み出して実行することにより実現される。アプリケーション実行部14は、各クライアント端末7へのデータ配信処理を制御する。データ配信処理には、TCP/IPプロトコルスタックのネットワーク処理が含まれる。
システムメモリ15は、クライアント端末7へ配信する可能性があるデータを蓄積している。メモリアクセス部16は、ホストCPU13からの指示に従って、クライアント端末7へ配信するデータをシステムメモリ15から読み出し、送信データバッファ17に出力する。送信データバッファ17は、クライアント端末7へ配信するデータを一時的に記憶する。
図3は、TCPの3whs(3-way handshake)の配信装置1側におけるパッシブ・オープンのシーケンスを代表的な例として交えた時の内部フローを示す図である。
アプリケーション実行部14は、listen()関数を実行し、接続要求を待つ(ステップS10)。クライアント端末7は、コネクションの確立のためにSYNセグメントを配信装置1へ送信する(ステップS11)。配信装置1のNIC−TOE11は、SYNセグメントを受信したことを通知するイベントディスクリプタをホストCPU13へ送信する(ステップS12)。ホストCPU13のカーネルは、シーケンス番号等の同期を行った後、SYN/ACKの送信コマンドをNIC−TOE11に返送する(ステップS13)。NIC−TOE11は、SYN/ACKの送信コマンドに従って、クライアント端末7にSYN/ACKセグメントを送信する(ステップS14)。配信装置1のNIC−TOE11は、クライアント端末7からACKセグメントを受信すると(ステップS15)、ACKセグメントに設定されているフラグと、シーケンス番号及び確認応答番号を判定し、シーケンス番号を更新する。なお、フラグは、SYN/ACK/FINセグメントなどのTCPの制御フレームの種類を示す。NIC−TOE11は、ACKセグメントを受信したことを通知するイベントディスクリプタをホストCPU13へ送信する(ステップS16)。アプリケーション実行部14は、accept()関数を実行し、クライアント端末7からの接続要求を受け入れる(ステップS17)。これにより、配信装置1とクライアント端末7との間でコネクションが確立される。
その後、配信装置1は、クライアント端末7にデータを配信する。具体的には、アプリケーション実行部14は、クライアント端末7へのデータ配信を指示する。ホストCPU13は、アプリケーション実行部14が配信を指示したデータのアドレスを指定して、メモリアクセス部16に読み出しを指示する。メモリアクセス部16は、ホストCPU13から指定されたアドレスを用いてシステムメモリ15から読み出したデータを送信データバッファ17に転送する。ネットワーク処理部118は、送信データバッファ17からデータを読み出してTCP/IPのフレームに設定し、送信バッファ119に登録する。送信バッファ119に登録されたパケットは、LAN3を介してIPネットワーク5に出力され、クライアント端末7へ配信される。
図4は、リングバッファ112と書込ポインタ及び読出ポインタの関係を示す図である。
図4(a)は、リングバッファ112の概念図である。リングバッファ112は、環状に連なった複数のバッファ領域を有する。図4(b)は、リングバッファ112を直線状に展開したものであり、両端のバッファ領域が論理的に繋がれる。書込ポインタの書込位置及び読出ポインタの読出位置はそれぞれ、リングバッファ112内のバッファ領域を特定する。イベントディスクリプタ管理部111は、クライアント端末7から受信したパケットに基づくイベントを書込ポインタが示す書込位置のバッファ領域に書き込んで登録した際に、書込ポインタの位置を1つ進める。イベントディスクリプタ管理部111は、イベントディスクリプタが書き込まれたことによる割り込み要因をアプリケーション実行部14に出力し、イベントの発生を通知する。アプリケーション実行部14は、イベントディスクリプタ管理部111からの割り込みを受けてイベントの登録を認知すると、ディスクリプタを読み出すための割り込みを行う。イベントディスクリプタ管理部111は、アプリケーション実行部14からの割り込みを受けて、読出ポインタが示す読出位置のバッファ領域から読み出したディスクリプタをアプリケーション実行部14に通知し、読出ポインタの位置を進める。
ここで、ディスクリプタによるイベント通知とは、例えば、対向装置であるクライアント端末7のアプリケーションからTCPの制御フレームを受信した旨の受信イベント通知である。イベント通知には、発生したイベント、次に発生させるべきイベント、及び、コネクションを特定する情報を含む。イベント通知の対象は、「SYNを受信した」(図3のステップS11、S12)、「ACKを受信した」(図3のステップS15、S16)などの制御フレームの受信である。また、ディスクリプタによるイベント通知には、NIC−TOE11からの要求イベントの通知などがある。例えば、NIC−TOE11は、クライアント端末7から受信した制御フレームが受付可(acceptable)では無いと判別できたために、「RSTを送信して欲しい」といった要求イベントをディスクリプタにより通知する。また、自装置側からの送信視点では逆に、「SYN送信を完了した」、「ACK送信を完了した」などの処理完了通知もディスクリプタによるイベント通知に含まれる。
イベント通知は、3whsによるコネクション確立時のみならず、ホストCPU13及びアプリケーション実行部14(TCP/IP プロトコルスタック)の負荷が軽減されうるイベントに対して行われる。例えば、コネクション切断時、コネクション確立状態におけるウィンドウ更新、ACKの応答などのイベントについてイベント通知が行われる。
図5は、書込ポインタ及び読出ポインタの移動を示す図である。図5(a)は、リングバッファ112の概念図であり、図5(b)は、リングバッファ112を直線状に展開して示した図である。同図に示すように、書込ポインタが示す書込位置は、リングバッファ112のバッファ領域112a−1、バッファ領域112a−2、バッファ領域112a−3、…のように一定方向に移動する。また、読出ポインタが示す読出位置は、リングバッファ112のバッファ領域112b−1、バッファ領域112b−2、バッファ領域112b−3、…のように書込ポインタと同じ方向に移動する。通常・定常の動作においては、書込ポインタが示す書込位置と読出ポインタが読出位置とがそれぞれ移動しても、それらが示すバッファ領域の間には一定の間隔が保たれる。瞬間的にリングバッファ112に多量のイベントのバースト登録が行われても、それを吸収できる分の十二分なマージンを持つ事が出来れば仕組み上破綻する事は無い。
図6は、ディスクリプタオーバーフローの概念図である。同図において、時間t1〜t3においては、イベントが発生するたびに、書込ポインタが示す書込位置が1つずつ移動している。そして、時間t4では、書込ポインタが示す書込位置が読出ポインタが示す書込位置を追い越してしまっている。このように、ディスクリプタのオーバーフローとは、書込ポインタと読出ポインタのそれぞれが示すバッファ領域間のマージンを食いつぶし、書込ポインタの書込位置が読出ポインタの読出位置に追いつき、また、追い越してしまう事を表す。書込ポインタの書込位置が読出ポインタの読出位置を追い越してしまった場合には、ホストCPU13やアプリケーション実行部14に通知すべきイベントが何であったのか、また、どのコネクションに関するイベントであったのかの情報が失われてしまう。この時に失われるイベントは、追い越しによってイベント通知の読み出し(読み込み)前に上書きされてしまったバッファ領域に登録されていたイベント、あるいは、上書きできずにリングバッファ112に書き込むことができなかったイベントである。
図7は、配信装置1によるディスクリプタオーバーフローの検知を示す図である。配信装置1のオーバーフロー判断部116は、読出ポインタが示す読出位置と書込ポインタが示す書込位置を把握し、ディスクリプタのオーバーフローが発生したか、また、発生するかどうか、または、発生する直前の状態であるかどうかを判断する。イベントディスクリプタ管理部111(あるいはオーバーフロー判断部116)は、次の新規(予定)イベントが発行された段階で、次の新規(予定)イベントのイベント種別の情報を取得し、新規イベント情報記憶部117に登録する。登録されるイベント種別は、例えば、制御フレームの受信であれば、その制御フレームにおいて、SYN/FIN/ACKなどの種別が設定されているフラグである。次の新規(予定)イベント種別の情報が登録された段階では、イベントディスクリプタ管理部111は、まだリングバッファ112へのディスクリプタの書き込み登録を行わない。オーバーフロー判断部116は、新規イベント情報記憶部117にイベント種別の情報が登録された時点で、「現在の読出ポインタが示す読出位置==現在の書込ポインタが示す読出位置+1」が真となるか否かを判断する。「真」となった場合には、ディスクリプタのオーバーフローが発生した事を意味する。「偽」となった場合には、ディスクリプタのオーバーフローは発生していない事を意味する。図7の(a)は、「真」となる場合の例を示している。これは、リングバッファ112への書き込みを行って、書込ポインタが示す現在の書込位置が1つ進んだ場合、図7の(b)のように、書込ポインタが示す書込位置が、読出ポインタが示す読出位置に追いついてしまう状態である。
なお、具体的、かつ、詳細にはもっと複雑な処置が必要であり、完全に飛び越しが行えないような制御や、初期化時においては例外判定をするような処置が必要となる。
上記の判断により、オーバーフロー判断部116は、ディスクリプタオーバーフロー(取りこぼし)の発生を検知・認識する。オーバーフロー判断部116は、ディスクリプタのオーバーフロー発生を検知・認識した際、新規イベント情報記憶部117に登録したイベント種別の情報により、どのようなイベント種別に関するイベント通知を取りこぼしたのかを判別する事が可能となる。ただし本実施形態では原理上、どのコネクションに関するイベント通知を取りこぼしたのかを判別したり保持したりすることはできない。
更にオーバーフロー判断部116は、ディスクリプタのオーバーフロー発生を検知・認識した際、ディスクリプタオーバーフローの発生と取りこぼしたイベントのイベント種別をホストCPU13及びアプリケーション実行部14に伝達する。このときオーバーフロー判断部116は、取りこぼしたイベントのイベント種別を、新規イベント情報記憶部117から読み出す。オーバーフロー判断部116は、イベント種別の伝達を、IRQ(Interrupt ReQuest)による割り込みおよび割り込み種別による識別などを用いて行う。これにより、ホストCPU13/アプリケーション実行部14においてディスクリプタオーバーフローの発生と、その時に取りこぼしが発生したイベントのイベント種別を認知可能となる。具体的なイベント種別としては先に記したような「SYNを受信した」、「ACKを受信した」、「RSTを送信して欲しい」、「SYN送信を完了した」、…、「ACK送信を完了した」などが考えられる。しかし、細分化すればするほど種別が肥大化していき、結果としてTOEとしての性能劣化につながる事も有るため、多ければ良いという物では無い。
図8は、配信装置1の動作を示す図である。
配信装置1は、クライアント端末7から受信した通信パケットを受信バッファ110に登録する。受信バッファ110にバッファリングされている通信パケットのSはSYNセグメントを、AはACKセグメントを、FはFINセグメントを示す。受信バッファ110は、バッファリングされた通信パケットをFIFO制御によってイベントディスクリプタ管理部111に出力する(ステップS105)。同図においては、SYNセグメントの通信パケットが出力されている。
イベントディスクリプタ管理部111(あるいはオーバーフロー判断部116)は、受信した通信パケットから制御フレームの種別を表すフラグ部分を抽出して新規イベント情報記憶部117に書き込む(ステップS110)。オーバーフロー判断部116は、ディスクリプタオーバーフローが発生したか否かを判断する(ステップS115)。すなわち、オーバーフロー判断部116は、読出ポインタ記憶部114から読出ポインタを読み出し、書込ポインタ記憶部115から書込ポインタを読み出す。オーバーフロー判断部116は、書込ポインタが示す書込位置の次の書込位置が、読出ポインタが示す読出位置と一致する場合、ディスクリプタオーバーフローが発生したと判断する。
オーバーフロー判断部116は、ディスクリプタオーバーフローが発生したと判断した場合、ディスクリプタオーバーフローの発生をアプリケーション実行部14に通知する(ステップS120)。オーバーフロー判断部116は、アプリケーション実行部14に出力するディスクリプタオーバーフローの発生の通知に、新規イベント情報記憶部117から読み出したイベント種別の情報を設定する。これにより、アプリケーション実行部14は、ディスクリプタオーバーフローの発生と、その時に取りこぼしが発生したイベントのイベント種別を認知する。アプリケーション実行部14は、取りこぼしが発生したイベントのイベント種別に応じた復旧処置をNIC−TOE11に指示する。NIC−TOE11のネットワーク処理部118は、アプリケーション実行部14から指示された復旧処置を実行する。
なお、ステップS115において、オーバーフロー判断部116は、書込ポインタが示す書込位置の次の書込位置が、読出ポインタが示す読出位置と一致しない場合、ディスクリプタオーバーフローが発生していないと判断する。この場合、イベントディスクリプタ管理部111は、書込ポインタが示すリングバッファ112の書込位置に、ステップS105において出力されたパケットのイベントディスクリプタを書き込む。イベントディスクリプタ管理部111は、書込ポインタを現在の書込位置から1つ進めた位置に更新し、アプリケーション実行部14にイベントディスクリプタの書き込みが完了したことを(行われたことを)通知する。また、コネクション管理部113は、イベントが発生したコネクションのコネクション状態を、イベントの発生により遷移した先のコネクション状態とするようコネクション管理情報を更新する。イベントディスクリプタ管理部111は、アプリケーション実行部14からイベントディスクリプタの読み出し指示を受けた場合、読出ポインタ記憶部114から読出ポインタを読み出す。イベントディスクリプタ管理部111は、読出ポインタが示すリングバッファ112の読出位置からイベントディスクリプタを読み出し、アプリケーション実行部14に通知する。イベントディスクリプタ管理部111は、読出ポインタを現在の読出位置から1つ進めた位置に更新する。NIC−TOE11のネットワーク処理部118は、アプリケーション実行部14から指示に従ってクライアント端末7にTCPの制御フレーム、あるいは、データパケットを送信する。コネクション管理部113は、TCPの制御フレームを送信した場合、制御フレームの送信対象であるコネクションのコネクション状態を、制御フレームの送信により遷移した先のコネクション状態とするようコネクション管理情報を更新する。
本実施形態によれば、リングバッファ上のディスクリプタによりCPU/ソフトウェアにイベント通知を行うTOEを具備した配信装置において、ディスクリプタのオーバーフロー(取りこぼし)の発生を検知・認識する事が可能となる。
また、配信装置のTOEは、ディスクリプタのオーバーフローの発生を検知・認識した際、どのようなイベント種別に関するイベント通知を取りこぼしたのかを判別する事が可能となる。さらに、TOEは、取りこぼしたイベント種別も合わせてCPU/ソフトウェア(TCP/IPプロトコルスタック)に伝達することが可能となり、CPU/ソフトウェアにおいて適切な復旧処置を行うことができる。
(第2の実施形態)
本実施形態では、取りこぼしたイベントの種類と、各コネクションのコネクション状態とに基づいて、復旧処置の対象となるコネクションを絞り込む。以下では、第1の実施形態との差分を中心に説明する。
本実施形態の配信装置の構成は、図2に示す第1の実施形態の配信装置1と同様である。
図9は、配信装置1のコネクション管理部113において管理するTCPのコネクション状態の遷移を示す基本的な図である(詳細は、IETF RFC793を参照)。SYN_RECV(SYN_RECEIVED)、SYN_SENT、ESTABLISHED、…などの円は、TCPのコネクション状態を表す。状態間には、状態遷移のトリガとなるイベントが記載されている。このイベントは制御フレームの受信または送信である。また、フレームの受信に送信する制御フレームが記載されている場合がある。例えば、LISTEN状態においてSYNセグメントを受信すると、SYN/ACKセグメントを送信し、SYN_RECV状態に遷移する。
TCP/IPのコネクションの管理機能は、従来、TCP/IPプロトコルスタックのネットワーク処理を行うCPU/ソフトウェアでのみ扱っていた。しかし、TOEにおいてはTCP/IPのオフロード処理を行うために、コネクション情報の一部をハードウェアブロックにて扱う必要がある。結果的にコネクション管理の一部を、ハードウェア側でも担う。TOEにおいては、一般的に、図9に示すようなTCPコネクションの状態を表す情報や、コネクションノードのIPアドレス、TCPポート番号、MACアドレスなどの情報が扱われる。なお、本実施形態とは直接的に関わらないコネクション情報や項目も、TOEが扱う情報に含まれ得る。
コネクション管理部113が有するコネクションの管理機能には、今現在、どれだけのコネクションが張られているかを把握する機能も含まれる。コネクション管理部113は、上述したコネクション情報(TCPコネクションの状態を表す情報、コネクションノードのIPアドレス、TCPポート番号、MACアドレスなど)を管理すると同時に、コネクションの総数を認識する事が出来る。具体的には、コネクション管理部113は、各コネクションに一意なコネクションID(セッションID)を割り当てることにより各コネクションを管理し、コネクション総数を把握する。なお、従来のCPU/ソフトウェアが行っていたTCP/IPプロトコルスタックの処理において扱っていた手法と同じ手法を用いても構わない。これには、例えば図10に示すようなハッシュテーブルリストにリンクさせて管理する方式がありえる。
図10は、コネクション管理情報を示す図である。コネクション管理情報は、各コネクションのコネクション情報と、コネクション情報を管理するハッシュテーブルリストからなる。コネクション情報は、コネクションID(例えば、IPアドレスやMACアドレスなど)に基づいてグループ分けされている。ハッシュテーブルリストには、各グループに属するコネクションのコネクション情報のうち先頭のコネクション情報のアドレスが登録されている。各コネクション情報には、次のコネクション情報のアドレス(next)と、1つ前のコネクション情報のアドレス(prev)と、TCPのコネクション状態(state)とが設定される。グループの先頭のコネクション情報の場合、prevには、ハッシュテーブルリストにおいて自コネクション情報のアドレスが記述されているフィールドのアドレスが設定される。
コネクション管理部113は、上述したコネクション管理情報を用いて、ディスクリプタオーバーフロー発生時のコネクションの総数を認識する事が可能である。さらに、コネクション管理部113は、ハッシュテーブルリストにリンクされているコネクション情報を探索することにより、それぞれのコネクションの状態を把握することも可能である。そこでコネクション管理部113は、ディスクリプタオーバーフロー発生時に各コネクションのコネクション状態を、ハッシュテーブルリストにリンクされているコネクション情報から探索する。
例えば、図9に示すように、パッシブ・オープンのコネクションとして以下の(1)〜(5)の流れがある。なお、[]は、制御フレームを表し、<>は、コネクション状態を表す。
(1)[SYN]を受信する。
(2)[SYN/ACK]を送信する。
(3)<SYN_RECV>へ状態遷移する。
(4)[ACK]を受信する。
(5)<ESTABLISHED>へ状態遷移する。これにより、コネクションが確立する。
ここで(4)「ACKを受信する」状況において、ディスクリプタのオーバーフローが発生したとする。NIC−TOE11のオーバーフロー判断部116は、ディスクリプタのオーバーフローが発生したことを認知し、更に、「ACKの受信に関してのイベントを消失してしまった(取りこぼしてしまった)」ことを認知できる。ネットワーク処理部118は、この情報を元にハッシュテーブルリストにリンクされているコネクション情報を参照し、復旧処置対象のコネクションを探索する。
例えば、TCPのコネクション状態が<SYN_SENT>の場合、次に受信を期待しているのは[SYN/ACK]であり、[ACK]の受信では無い。そのため、ディスクリプタのオーバーフローによってイベントを取りこぼしたコネクションの候補からは外れる。一方で、TCPのコネクション状態が<SYN_RECV>の場合、次に受信を期待しているのはまさに[ACK]であり、ディスクリプタのオーバーフローによってイベントを取りこぼしたコネクションの候補とされる。
ネットワーク処理部118は、イベント通知を取りこぼしたとされるコネクションの候補を、それぞれのコネクションの状態を元に探索し、イベント通知を取りこぼしたとされるとして絞り込みが行われたコネクションの復旧(回復)を試みる。
例えば先の例の場合、配信装置1は、まさに取りこぼした[ACK]を次に受信することを期待している<SYN_RECV>のコネクションを、イベントを取りこぼした候補、すなわち、復旧処理の対象とする。つまり、アプリケーション実行部14は、オーバーフロー判断部116からディスクリプタオーバーフロー発生と[ACK]の取りこぼしの通知を受ける。アプリケーション実行部14は、復旧処置として、<SYN_RECV>のコネクションに対して、<SYN_RECV>に遷移する前の[SYN/ACK]を送信するよう指示する。ネットワーク処理部118は、アプリケーション実行部14の指示を受け、コネクション情報にコネクション状態が<SYN_RECV>が設定されているコネクションを、イベントを取りこぼした候補として特定する。ネットワーク処理部118は、特定した候補のコネクションに対して[SYN/ACK]を再送する。これにより、対向側のクライアント端末7からの再度の[ACK]送信を積極的に促す。
上述したように本実施形態では、ディスクリプタのオーバーフローが発生した際にイベント通知を取りこぼしたとされるコネクションの候補を、各コネクションのコネクション状態と、取りこぼしたイベントの種類とに基づいて選択することができる。配信装置は、選択した候補のコネクションに対してのみ復旧処置を行うため、復旧処置の負荷が軽減される。
(第3の実施形態)
本実施形態では、コネクション数が多い場合に復旧処置を制限する。以下では、上述した第1の実施形態及び第2の実施形態との差分を中心に説明する。本実施形態の配信装置1は、図2に示すNIC−TOE11に代えて、図11に示すNIC−TOE11aを備える。
図11は、本実施形態のNIC−TOE11aの構成を示す機能ブロック図である。同図は、本実施形態と関係する機能ブロックのみを抽出して示してある。また、同図において、図2に示す第1の実施形態のNIC−TOE11と同一の部分には同一の符号を付し、その説明を省略する。NIC−TOE11aが第1の実施形態のNIC−TOE11と異なる点は、コネクション管理部113に代えてコネクション管理部113aを備える点、及び、コネクション総数記憶部201と、復旧抑制通知部202とをさらに備える点である。コネクション総数記憶部201は、コネクション総数を示す情報を記憶する。コネクション管理部113aは、第1の実施形態又は第2の実施形態のコネクション管理部113と同様の機能を有する。さらに、コネクション管理部113aは、コネクション総数記憶部201に記憶されているコネクション総数を、コネクションがオープンしたときに1だけ増加させ、コネクションがクローズされたときに1だけ減少させる。復旧抑制通知部202は、復旧処置の抑制を判断するための制限数(閾値)を記憶している。復旧抑制通知部202は、オーバーフロー判断部116がディスクリプタオーバーフローを通知する際にコネクション総数が制限数を超えている場合は、ホストCPU13及びアプリケーション実行部14に対して、復旧処置の抑制を指示する。
第2の実施形態では、ディスクリプタオーバーフロー発生時にイベント通知を取りこぼしたとされるコネクションの候補を絞り込んでいる。しかし、コネクション登録数が多い場合には、各コネクションがディスクリプタオーバーフロー発生時のイベント種別の条件にマッチしているかの判断のため、全てのコネクション管理情報を探索する(試行する)と、処理オーバヘッドが膨大となる。特にディスクリプタオーバーフロー発生時にイベント通知を取りこぼした際にはハッシュテーブルリストからの探索優位性は見込めない。コネクション情報として登録されている数が増えれば増えるほど、その処理オーダーは線型探索と同様に右肩上がりとなってしまう。
コネクション登録数が増えれば増えるほど、当然ながらオーバーフロー発生時のイベント種別条件にマッチした候補数が増える事も有る程度は予測される。しかし、全てのTCP/IPのコネクション状態において、イベントを取りこぼした際に回復・復旧のための積極的なアクションが必要となるわけでは無い。具体的には、TCPの接続である以上、ある程度は対向ノードからの「再送」が期待できるからである。
上述したように、登録されているコネクション情報の数が増えれば増えるほど、その処理オーダーは線型探索と同様に右肩上がりとなってしまう。そこで、配信装置1は、「コネクションの総数<制限数」であれば、復旧(回復)処置を積極的に実施し、「コネクションの総数≧制限数」であれば、復旧(回復)処置を行わない。そこで、復旧抑制通知部202は、コネクション総数記憶部201に記憶されているコネクション総数が所定の制限数を超えた場合、ホストCPU13及びアプリケーション実行部14に対し、復旧処置の抑制通知を送信する。
復旧抑制通知部202は、オーバーフロー判断部116がディスクリプタオーバーフローを検出した時に、コネクション総数が所定の制限数を超えている場合に復旧処置の抑制通知を送信する。アプリケーション実行部14は、オーバーフロー判断部116からディスクリプタオーバーフローが通知されても、復旧処置の抑制通知を受信した場合は復旧処置を行わない。あるいは、オーバーフロー判断部116がディスクリプタオーバーフローを検出した時に、コネクション総数が所定の制限数以下である場合に復旧処置の抑制解除通知を送信してもよい。アプリケーション実行部14は、復旧処置の抑制解除通知を受信した場合は、取りこぼしたイベント種別に応じて復旧処置を行う。
復旧(回復)処置を行わない場合には、ある程度は対向ノードであるクライアント端末7からの「再送」を期待する事になる。しかし、そもそもディスクリプタオーバーフローが発生する程度には瞬間的であるにしろ、TOEのハードウェアや、ホストCPU13あるいはアプリケーション実行部14(TCP/IPプロトコルスタックの処理部)はシステムビジーになっている。これは、「何も処置・処理ができなくなってしまう」という点で、従来の装置と同様である。
なお、復旧抑制通知部202は、複数段階の制限数を用いてもよい。例えば、復旧抑制通知部202は、「制限数(レベル0次)」、「制限数(レベル1次)」、「制限数(レベル2次)」、…のように複数のレベルのそれぞれの制限数を用いることが可能である。復旧抑制通知部202は、コネクション総数が各レベルの制限数を超えた場合、復旧処置の抑制通知をアプリケーション実行部14に出力する。復旧抑制通知部202は、抑制通知に、コネクション総数がいずれのレベルの制限数を超えたかを表す種別を設定する。また、復旧抑制通知部202は、コネクション総数が各レベルの制限数以下となった場合、復旧処置の抑制解除通知をアプリケーション実行部14に出力する。復旧抑制通知部202は、抑制解除通知に、コネクション総数がいずれのレベルの制限数以下となったかを表す種別を設定する。アプリケーション実行部14は、コネクションの総数がいずれの段階の制限数を超えたかに応じて、イベントを取りこぼした候補となるコネクションの数を絞る。アプリケーション実行部14は、イベントを取りこぼした候補のコネクションに対してNIC−TOE11と協働して復旧処置を行う。
例えば、3段階の制限数が、「制限数(レベル0次)」<「制限数(レベル1次)」<「制限数(レベル2次)」であるとする。
アプリケーション実行部14は、「コネクションの総数<制限数(レベル0次)」であれば、コネクション管理情報を全探索して、イベントを取りこぼした候補となるコネクションの全抽出を行う。
また、アプリケーション実行部14は、「制限数(レベル0次)<コネクションの総数<制限数(レベル1次)」であれば、制限数(レベル0次)までは候補探索を行う。
また、アプリケーション実行部14は、「制限数(レベル1次)<コネクションの総数<制限数(レベル2次)」であれば、制限数(レベル1次)までは候補探索を行う。
また、アプリケーション実行部14は、「制限数(レベル2次)<コネクションの総数」であれば、制限数(レベル2次)までは候補探索を行う。
本実施形態によれば、復旧抑制通知部202は、コネクションの総数と多段階の制限数との比較結果をアプリケーション実行部14に通知し、アプリケーション実行部14は、通知された比較結果に応じて復旧処置を行う対象のコネクションの数を制限する。コネクションの総数と多段階の制限数との比較結果は、種別が設定された抑制通知や抑制解除通知に相当する。これにより、ディスクリプタのオーバーフローが発生した際に復旧処置を行うコネクションの数を、コネクション総数に応じて少なくして、復旧処置の負荷を軽減する。
(第4の実施形態)
第3の実施形態では、コネクション総数が制限数よりも多い場合に復旧処置を制限している。本実施形態では、コネクション総数に加え、TCPのコネクション状態毎の総数を加味して復旧処置の対象となるコネクション数を制限する。以下では、上述した第3の実施形態との差分を中心に説明する。
本実施形態の配信装置1は、図2に示すNIC−TOE11に代えて、図12に示すNIC−TOE11bを備える。
図12は、本実施形態のNIC−TOE11bの構成を示す機能ブロック図である。同図は、本実施形態と関係する機能ブロックのみを抽出して示してある。また、同図において、図11に示す第3の実施形態のNIC−TOE11aと同一の部分には同一の符号を付し、その説明を省略する。NIC−TOE11bがNIC−TOE11aと異なる点は、SYN_RECV総数記憶部203と、SYN_SENT総数記憶部204と、ESTABLISHED総数記憶部205と、FIN_WAIT1総数記憶部206と、LAST_ACK総数記憶部207とをさらに備える点、及び、コネクション管理部113及び復旧抑制通知部202に代えてコネクション管理部113b及び復旧抑制通知部202bを備える点である。
コネクション管理部113aは、第3の実施形態のコネクション管理部113aと同様の機能を有する。さらに、コネクション管理部113bは、<SYN_RECV>状態であるコネクションの総数をSYN_RECV総数記憶部203に書き込む。コネクション管理部113bは、<SYN_SENT>状態であるコネクションの総数をSYN_SENT総数記憶部204に書き込む。コネクション管理部113bは、<ESTABLISHED>状態であるコネクションの総数をESTABLISHED総数記憶部205に書き込む。コネクション管理部113bは、<FIN_WAIT1>状態であるコネクションの総数をFIN_WAIT1総数記憶部206に書き込む。コネクション管理部113bは、<LAST_ACK>状態であるコネクションの総数をLAST_ACK総数記憶部207に書き込む。
復旧抑制通知部202bは、第3の実施形態の復旧抑制通知部202と同様の機能を有する。さらに、復旧抑制通知部202bは、各コネクション状態のコネクション総数の制限数を記憶している。復旧抑制通知部202bは、SYN_RECV総数記憶部203、SYN_SENT総数記憶部204、ESTABLISHED総数記憶部205、FIN_WAIT1総数記憶部206、及び、LAST_ACK総数記憶部207から各コネクション状態のコネクション総数を読み出す。復旧抑制通知部202bは、ディスクリプタオーバーフローの通知の際に各コネクション状態のコネクション総数が、そのコネクション状態に対応した制限数を超えている場合は、ホストCPU13及びアプリケーション実行部14に対して復旧処置の抑制通知を出力する。復旧処置の抑制通知には、いずれのコネクション状態の制限数を超えたかを示す種別が設定される。なお、復旧抑制通知部202bは、ディスクリプタオーバーフローの通知の際に各コネクション状態のコネクション総数が、そのコネクション状態に対応した制限数以下である場合は、ホストCPU13及びアプリケーション実行部14に対して、復旧処置の抑制解除通知を出力してもよい。復旧処置の抑制解除通知には、いずれのコネクション状態の制限数以下となったかを示す種別が設定される。
上記構成により、NIC−TOE11bは、コネクション総数の加えて、特定のコネクション状態のコネクションの数を常に把握する。従って、制限数が一つである必要性は希薄になり、それぞれのコネクション状態に応じた制限数が存在する。以下では、コネクション状態xについて用いる制限数を、制限数(x)と記載する。アプリケーション実行部14は、ディスクリプタオーバーフロー発生時のコネクション総数やそれぞれのコネクション状態のコネクション総数を元に、イベント通知を取りこぼしたとされるコネクションの候補数を多段階で制限する。
例えば、基本形として、第2の実施形態と同様に、アプリケーション実行部14は、「コネクションの総数<制限数」であれば、復旧(回復)処置を積極的に実施し、「コネクションの総数≧制限数」であれば、復旧(回復)処置を行わない。
さらに、例えば次の段階として、アプリケーション実行部14は、「SYN_RECV状態のコネクションの総数<制限数(SYN_RECV)」であれば、復旧(回復)処置を積極的に実施し、「SYN_RECV状態のコネクションの総数>制限数(SYN_RECV)」であれば、復旧(回復)処置を行わない、という条件も用いることができる。 また、第3の実施形態と同様に、アプリケーション実行部14は、コネクションの総数と多段階の制限数とによって、候補数を制限する。その制限の上で、次の段階として、特定のコネクション状態のコネクション総数が制限数を超えているか否かによって、その制限された候補数よりもさらに候補数を絞るかを決定するようにもできる。
また、これらには更なる組み合わせや重要性による優先度付を行う事が出来る。例えば、アプリケーション実行部14が、ディスクリプタのオーバーフロー発生時に、[ACK]の取りこぼしを認識できたとする。この場合、(a)<SYN_RECV>状態における[ACK]取りこぼしと、(b)<LAST_ACK>状態における[ACK]取りこぼしと、(c)<ESTABLISHED>状態における[ACK]取りこぼしの可能性がある。単なるTCP/IPの制御フレームのやり取りのレベルにおいては、これらはほぼ同程度の重要度として扱う事が可能であると思われる。しかしTOEとして見た場合には、接続可能な最大接続数の制約が伴う事がある。具体的にはTOEで管理するコネクション管理情報のリソースはTOE上のRAM(Random Access Memory)のあるアドレス領域Sからあるアドレス領域Eまでに確保されていると言った形で有限であり、このリソースの有効利用は要となる。
もし、<ESTABLISHED>状態以上でないとTOEで管理するコネクション管理情報のリソースを消費しないようなTOEであれば、(b)>(c)>(a)のような優先度付けを行う。もし対向側からSYNを受信した段階で、TOEで管理するコネクション管理情報のリソースを消費するようなTOEであれば、(b)=(a)>(c)のような優先度付けを行う。アプリケーション実行部14は、コネクションの候補数の制限の中で、優先度が高いコネクション状態のコネクションから優先してイベントを取りこぼした候補を選択する。
TOEによるコネクション管理の高度化の他に、<ESTABLISHED>状態以降のユーザデータのやり取りに特徴を持ち、ユーザデータのやり取りにおけるスループット(伝送レート)を引き上げるようなNICもある。このようにNICの場合、スライディングウィンドウ、ウィンドウアップデート、到達したシーケンス番号の更新に重きを割り当て、(c)>(b)>(a)のような優先度付けも十分あり得る。
また、SYNの取りこぼしと、FINの取りこぼしとでは重要度が異なる。SYNを取りこぼしてしまった場合には、当然対向装置のIPアドレスなども不明である。故に対向装置へ向けたSYN/ACKの送信もままならない。よってSYNが再送されるのを待つより他が無い。
一方で、FINを取りこぼした時に起こりえる状況としては2つある。
一つは定常・通常状態において、対向装置がFINに対するACKを期待し待ち構えている場合がある。この場合であることが確実に判別・認識できるのであれば、FINの再送を期待する事が出来る。しかし一方で、準定常・異常状態であれば、対向装置はFINに対するACKを期待し待ち構えていない場合があり得る。
具体的には対向装置側のクライアント端末7において強制的にアプリケーションを終了してしまった場合や、CTL−CコマンドによりアプリケーションプログラムがFIN送信のみを行うと言った場合である。このような場合に何も行わなければTCPのキープアライブタイムアウトに到達するまで、配信装置1には使用できないリソースが残る事になる。このため、配信装置1は、既に<ESTABLISHED>状態のコネクションを、FINを取りこぼしてしまった候補とし、最後に認知できているシーケンス番号によりACKを送信するという復旧・回避策を実施する。対向装置側のクライアント端末7にとっては既に切断・完了しているコネクションであるため、RSTを送信してくる場合がある。このRST受信により、配信装置1は、いち早くコネクション管理情報のリソース解放を行う事が可能となる。
そこで、ディスクリプタのオーバーフローの発生によって取りこぼしたイベントの種別を主軸に重要度を設けるという組み合わせも発生する。
本実施形態では特定のコネクション状態に関するコネクションの総数を把握している。そこで、通常のコネクション管理とのトレードオフの形として、図10に示したコネクション管理情報のハッシュテーブルリストの他に、ディスクリプタのオーバーフロー発生時にのみ参照活用されるリストを常に持っておくことも可能である。つまり、コネクション管理部113は、それぞれのコネクション状態に応じたリンクリストを保持する。このリンクリストが活用されるのはディスクリプタのオーバーフロー発生時のみとなるため、それ以外のケースではこのリンクリストの保守管理の手間の分だけ負荷がかかる事になる。そのためトレードオフの形としているのだが、このリンクリストを用いる場合にはディスクリプタのオーバーフローが発生したその時点のコネクションの総数とは関わりなく、取りこぼしたイベントの種別に応じた優先度を設ける。
本実施形態によれば、復旧を行わなかったときの影響の大きさを考慮して、復旧処置の対象となるコネクションの数や、優先して復旧処置の対象とするコネクションを決定することができる。
以上説明した少なくともひとつの実施形態によれば、オーバーフロー判断部を持つことにより、NIC−TOEがアプリケーション実行部に対してネットワーク処理の対象となるイベントを通知するために用いるディスクリプタにオーバーフローが発生したことを検出することができる。また、オーバーフロー判断部がディスクリプタオーバーフロー発生時に取りこぼしたイベントの種別をアプリケーション実行部に通知することにより、アプリケーション実行部は通知されたイベントの種別に基づいて復旧処置を行うことができる。従って、TCP/IPのネットワーク処理においてTOEがディスクリプタによるイベント通知を行う場合に、ディスクリプタオーバーフローを回復し、パフォーマンス及び信頼性の改善と向上を図ることができる。
また、以上説明した少なくともひとつの実施形態によれば、コネクション管理部と復旧抑制通知部とを持つことにより、復旧処置のために負荷がかかりすぎないようにすることができる。
上記実施形態のコネクション管理部113、オーバーフロー判断部116、復旧抑制通知部202、及び復旧抑制通知部202bの一部または全ての機能部を、ソフトウェア機能部により実現してもよい。コネクション管理部113、オーバーフロー判断部116、復旧抑制通知部202、及び復旧抑制通知部202bの一部または全ての機能部をソフトウェア機能部により実現する場合、その機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現してもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
1…配信装置、3…LAN、5…IPネットワーク、7…クライアント端末、11…NIC−TOE、11a…NIC−TOE、11b…NIC−TOE、12…ローカルバス、13…ホストCPU、14…アプリケーション実行部、15…システムメモリ、16…メモリアクセス部、17…送信データバッファ、110…受信バッファ、111…イベントディスクリプタ管理部、112…リングバッファ、113‥コネクション管理部、113a‥コネクション管理部、113b‥コネクション管理部、114…読出ポインタ記憶部、115…書込ポインタ記憶部、116…オーバーフロー判断部、117…新規イベント情報記憶部、118…ネットワーク処理部、119…送信バッファ、201…コネクション総数記憶部、202…復旧抑制通知部、202b…復旧抑制通知部、203…SYN_RECV総数記憶部、204…SYN_SENT総数記憶部、205…ESTABLISHED総数記憶部、206…FIN_WAIT1総数記憶部、207…LAST_ACK総数記憶部

Claims (9)

  1. クライアント端末との間の接続を制御するためのネットワーク処理の一部を実行し、ネットワーク処理の処理対象となるイベントの発生をイベントディスクリプタにより通知する第一ネットワーク処理部と、
    通知された前記イベントディスクリプタに基づいてネットワーク処理を実行する第二ネットワーク処理部とを備え、
    前記第一ネットワーク処理部は、
    バッファと、
    前記バッファにおける読出位置を示す読出ポインタを記憶する読出ポインタ記憶部と、
    前記バッファにおける書込位置を示す書込ポインタを記憶する書込ポインタ記憶部と、
    前記書込ポインタが示す前記バッファにおける前記書込位置にイベントディスクリプタを書き込み、前記書込ポインタを次の書込位置に進める処理と、前記読出ポインタが示す前記バッファにおける前記読出位置から前記イベントディスクリプタを読み出して前記第二ネットワーク処理部に通知し、前記読出ポインタを次の読出位置に進める処理とを行うイベントディスクリプタ管理部と、
    前記読出ポインタが示す前記読出位置と前記書込ポインタが示す書込位置とに基づいてディスクリプタのオーバーフローを判断するオーバーフロー判断部とを備え
    前記オーバーフロー判断部は、イベントが発生した場合に前記読出ポインタが示す前記読出位置と前記書込ポインタが示す書込位置とに基づいてディスクリプタのオーバーフローが発生したか否かを判断し、オーバーフローが発生したと判断した場合に、前記イベントの種別を取得する通信装置。
  2. 前記イベントディスクリプタ管理部は、前記オーバーフロー判断部がディスクリプタのオーバーフローが発生していないと判断した場合に、前記書込ポインタが示す前記バッファにおける前記書込位置に、前記イベントのイベントディスクリプタを書き込む請求項に記載の通信装置。
  3. 前記オーバーフロー判断部は、取得した前記イベントの種別を前記第二ネットワーク処理部に通知する請求項に記載の通信装置。
  4. 前記第二ネットワーク処理部は、前記オーバーフロー判断部から受信した前記イベントの種別に基づいて前記クライアント端末との間の接続の復旧処置を実行する請求項に記載の通信装置。
  5. 前記第二ネットワーク処理部は、前記オーバーフロー判断部から受信した前記イベントの種別と、前記クライアント端末の接続の状態とに基づいて、復旧処置対象の前記接続を選択する請求項に記載の通信装置。
  6. 前記第一ネットワーク処理部は、
    前記クライアント端末の接続の状態を管理するコネクション管理部と、
    前記コネクション管理部において状態を管理している前記接続の数が制限数を超えた場合に前記第二ネットワーク処理部に復旧処置を抑制するよう指示する復旧抑制通知部とを備える請求項に記載の通信装置。
  7. 前記復旧抑制通知部は、前記接続の数と多段階の制限数との比較結果を前記第二ネットワーク処理部に通知し、
    前記第二ネットワーク処理部は、前記復旧抑制通知部から通知された前記比較結果に応じて復旧処置を行う対象の前記接続の数を制限する請求項に記載の通信装置。
  8. 前記復旧抑制通知部は、所定の状態の前記接続の数が制限数を超えた場合に前記第二ネットワーク処理部に復旧処置を抑制するよう指示する請求項に記載の通信装置。
  9. 通信装置が実行するディスクリプタオーバーフロー検出方法であって、
    クライアント端末との間の接続を制御するためのネットワーク処理の一部を実行し、ネットワーク処理の処理対象となるイベントの発生をイベントディスクリプタにより通知する第一ネットワーク処理部が、書込ポインタが示すバッファにおける書込位置にネットワーク処理の対象となるイベントの情報を示すイベントディスクリプタを書き込み、前記書込ポインタを次の書込位置に進める処理と、読出ポインタが示す前記バッファにおける読出位置から前記イベントディスクリプタを読み出して第二ネットワーク処理部に通知し、前記読出ポインタを次の読出位置に進める処理とを行うイベントディスクリプタ管理ステップと、
    前記第二ネットワーク処理部が、通知された前記イベントディスクリプタに基づいて前記ネットワーク処理を実行するネットワーク処理ステップと、
    前記第一ネットワーク処理部が、前記読出ポインタが示す前記読出位置と前記書込ポインタが示す書込位置とに基づいてディスクリプタのオーバーフローを判断するオーバーフロー判断ステップと、
    を有し、
    前記オーバーフロー判断ステップにおいては、イベントが発生した場合に前記読出ポインタが示す前記読出位置と前記書込ポインタが示す書込位置とに基づいてディスクリプタのオーバーフローが発生したか否かを判断し、オーバーフローが発生したと判断した場合に、前記イベントの種別を取得する、
    ディスクリプタオーバーフロー検出方法。
JP2014244427A 2014-12-02 2014-12-02 通信装置及びディスクリプタオーバーフロー検出方法 Expired - Fee Related JP6334376B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014244427A JP6334376B2 (ja) 2014-12-02 2014-12-02 通信装置及びディスクリプタオーバーフロー検出方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014244427A JP6334376B2 (ja) 2014-12-02 2014-12-02 通信装置及びディスクリプタオーバーフロー検出方法

Publications (2)

Publication Number Publication Date
JP2016110233A JP2016110233A (ja) 2016-06-20
JP6334376B2 true JP6334376B2 (ja) 2018-05-30

Family

ID=56124229

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014244427A Expired - Fee Related JP6334376B2 (ja) 2014-12-02 2014-12-02 通信装置及びディスクリプタオーバーフロー検出方法

Country Status (1)

Country Link
JP (1) JP6334376B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11831524B2 (en) * 2019-11-05 2023-11-28 Nippon Telegraph And Telephone Corporation Network monitoring device and connection counting method

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2703417B2 (ja) * 1991-04-05 1998-01-26 富士通株式会社 受信バッファ
US7647436B1 (en) * 2005-04-29 2010-01-12 Sun Microsystems, Inc. Method and apparatus to interface an offload engine network interface with a host machine
JP2013179615A (ja) * 2013-04-09 2013-09-09 Toshiba Corp データ通信装置および通信プログラム

Also Published As

Publication number Publication date
JP2016110233A (ja) 2016-06-20

Similar Documents

Publication Publication Date Title
KR101623197B1 (ko) 클라이언트 디바이스 상에서의 패킷 송신을 스케줄링하기 위한 시스템 및 방법
CA2547880C (en) Improved distributed kernel operating system
US8725879B2 (en) Network interface device
JP4925218B2 (ja) ロードバランス型ネットワーク環境におけるインテリジェントフェイルバック
EP1729465A2 (en) Distributed kernel operating system
US8539089B2 (en) System and method for vertical perimeter protection
US20070291782A1 (en) Acknowledgement filtering
US20200059427A1 (en) Integrating a communication bridge into a data processing system
JP7288547B2 (ja) リアルタイムデータを収集及び送信するシステム及び方法
CN116233018A (zh) 报文处理方法、装置、电子设备及存储介质
US9178838B2 (en) Hash perturbation with queue management in data communication
CN109361749B (zh) 报文处理方法、相关设备及计算机存储介质
JP6334376B2 (ja) 通信装置及びディスクリプタオーバーフロー検出方法
EP2774342B1 (en) Reducing tcp timeouts due to incast collapse at a network switch
US8650323B2 (en) Managing multi-step retry reinitialization protocol flows
US7646724B2 (en) Dynamic blocking in a shared host-network interface
JP2007325178A (ja) パケット処理システム、パケット処理方法、およびプログラム
US20170265103A1 (en) Communication device, communication method, and non-transitory computer readable medium
KR102693536B1 (ko) 전송 제어 프로토콜 연결 처리 장치 및 방법
JP2012151673A (ja) 通信装置、通信システム及び通信プログラム
JP7309384B2 (ja) 通信装置、通信装置の制御方法およびプログラム
JP6568571B2 (ja) データ転送装置、データ転送方法および通信装置
CN109327402B (zh) 拥塞管理方法及装置
CN117336246A (zh) 数据报文的处理方法及装置、电子设备及存储介质
CN117812130A (zh) 一种报文传输方法及装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170224

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20170911

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20170911

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171220

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180109

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180312

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180426

R150 Certificate of patent or registration of utility model

Ref document number: 6334376

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees