(57)【要約】  効率良くデータを送信することを可能とする通信装置を実現するために、通信パケットを待機させる複数のバッファと、前記複数のバッファに待機するパケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動するバッファ内パケット入替手段とを備える。
2017183564.tif 000002
【特許請求の範囲】
【請求項１】
通信パケットを待機させる複数のバッファと、
前記複数のバッファに待機するパケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動するバッファ内パケット入替手段とを備えることを特徴とする通信装置。
【請求項２】
通信パケットを前記複数のバッファに振り分けて送出する宛先振分手段と、
前記複数のバッファから送出された前記通信パケットを所定のレートで送出する複数のレート制御手段とを更に備えることを特徴とする請求項１に記載の通信装置。
【請求項３】
前記移動を開始すると、前記第２のバッファから前記所定の通信パケットの送出の停止を指示し、前記所定の通信パケットと同じ種類の通信パケットが前記第１のバッファから全て送出されたことを検知すると、前記第２のバッファから前記所定の通信パケットの送出を指示するパケット送出開始指示手段を更に備えることを特徴とする請求項１または請求項２に記載の通信装置。
【請求項４】
前記所定の通信パケットのレートより大きいタイマー値が設定され前記通信パケットが前記バッファから送出されると前記タイマー値から時間経過とともに減少する表示値を示すタイマーと、
前記移動が完了した時の前記表示値が正の値であれば前記タイマー値から前記表示値を減算した値を前記タイマー値と置換え、前記移動が完了した時の前記表示値が負の値であれば前記タイマー値に前記表示値の絶対値を加算した値を前記タイマー値と置き換えるタイマー値計算手段とを更に備え、
前記バッファは、前記表示値が零になると前記バッファに待機する前記通信パケットと同じ種類の次の通信パケットを送出可能とすることを特徴とする請求項１または請求項２に記載の通信装置。
【請求項５】
複数のバッファに待機する通信パケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動することを特徴とする通信方法。
【請求項６】
前記複数のバッファは前記通信パケットを通信パケットのレートを制御する複数のレート制御手段に出力することを特徴とする請求項５に記載の通信方法。
【請求項７】
前記移動を開始すると、前記第２のバッファから前記所定の通信パケットの送出を停止し、前記所定の通信パケットと同じ種類の通信パケットが前記第１のバッファから全て送出されたことを検知すると、前記第２のバッファから前記所定の通信パケットを送出することを特徴とする請求項５または請求項６に記載の通信方法。
【請求項８】
前記所定の通信パケットのレートより大きいタイマー値が設定され前記通信パケットが前記バッファから送出されると前記タイマー値から時間経過とともに減少する表示値を示し、
前記移動が完了した時の前記表示値が正の値であれば前記タイマー値から前記表示値を減算した値を前記タイマー値と置換え、前記移動が完了した時の前記表示値が負の値であれば前記タイマー値に前記表示値の絶対値を加算した値を前記タイマー値と置き換え、
前記表示値が零になると前記バッファに待機する前記通信パケットと同じ種類の次の通信パケットを送出可能とすることを特徴とする請求項５または請求項６に記載の通信方法。
【請求項９】
複数のバッファに待機する通信パケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動することをコンピュータに行わせるためのプログラムを記録した記録媒体。
【請求項１０】
前記プログラムはさらに、
前記移動を開始すると、前記第２のバッファから前記所定の通信パケットの送出を停止し、前記所定の通信パケットと同じ種類の通信パケットが前記第１のバッファから全て送出されたことを検知すると、前記第２のバッファから前記所定の通信パケットを送出することをコンピュータに行わせる
ことを特徴とする請求項９に記載の記録媒体。
【請求項１１】
前記プログラムはさらに、
前記所定の通信パケットのレートより大きいタイマー値が設定され前記通信パケットが前記バッファから送出されると前記タイマー値から時間経過とともに減少する表示値を示し、
前記移動が完了した時の前記表示値が正の値であれば前記タイマー値から前記表示値を減算した値を前記タイマー値と置換え、前記移動が完了した時の前記表示値が負の値であれば前記タイマー値に前記表示値の絶対値を加算した値を前記タイマー値と置き換え、
前記表示値が零になると前記バッファに待機する前記通信パケットと同じ種類の次の通信パケットを送出可能とすることをコンピュータに行わせる
ことを特徴とする請求項９に記載の記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信方法、およびプログラムに関するものである。
【背景技術】
【０００２】
組み込みＣＰＵ（Central Processing Unit；中央処理装置）等の性能の低いＣＰＵを使用してリアルタイム通信を実現するために、ＣＰＵ負荷の低減や、データ送受信の高精度な制御を行う必要がある。そのために、ネットワーク（Network）の送信レート（rate）制御機能や、プライオリティ（priority）制御機能をネットワークインターフェースカード（ＮＩＣ；Network Interface Card）上の機能として搭載するデバイスが出現している。【０００３】
これらのＮＩＣに搭載される、レート制御機能やプライオリティ制御機能は、ＮＩＣ上のハードウェア機能として実装される。そのため、ＮＩＣを利用する、一連のデータ（data）であるフロー（flow）数が多くなった場合、ＮＩＣのハードウェア処理能力が低下する。尚、フローは複数の通信パケットによって構成される。【０００４】
そこで、特許文献１では、図８に示される様に、宛先振分部が複数のフローに対応する複数種類のパケット（Packet；情報伝送の１単位）をグループ化し、複数のパケット処理部に振分けて、パケットの処理を分散している。【０００５】
図８の宛先振分部は、送信アプリケーションから送出された複数の種類のパケットを、パケット処理部に接続されるバッファ（buffer）にグループ化して振り分ける。グループ変更適用部は、必要に応じて宛先振分部が振り分けるパケットのグループ化を変更する動作を行う。バッファ１、およびバッファ２は、パケットがパケット処理部に送出されるまでパケットを待機させるためのバッファである。パケット処理部１、およびパケット処理部２は、処理後のパケットを図示せぬ送信部に送出する。【０００６】
図８のａ−１、ａ−２、・・・は宛先ａに対するパケットを示し、数字はパケットの順番を示している。また、図中ｂ−１、ｂ−２、・・・は宛先ｂに対するパケットを示し、数字はパケットの順番を示している。【０００７】
ここで、図８の（１）の様にバッファ１に宛先ａと宛先ｂのパケットが混在して待機する状態から、グループ変更適用部が宛先ｂに対するパケットをパケット処理部１からパケット処理部２へ振分先を変更することを考える。【０００８】
図８の（２）では、パケットｂ−４がバッファ１に残るパケットｂ−２、およびパケットｂ−３と順序が逆転しないように、バッファ１から全てのパケットが出力されるまで、宛先振分部においてパケットｂ−４をブロックする。そして、バッファ１からすべてのパケットが出力されると図８の（３）の様にｂ−４より後のパケットを変更後の宛先に振分けて送出する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１０−１６１５４６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
図８に示される特許文献１の通信装置によると、グループ変更前のバッファ１に待機するパケットが送出されるまで、グループ変更後のパケットが宛先振分部に滞留する（図８（２）のパケットｂ−４）。そのため、通信装置からデータを送出する効率が低下してしまう。【００１１】
本発明の通信装置、通信方法、およびプログラムは、関連する技術と比べて効率良くデータを送信することを可能とする。
【課題を解決するための手段】
【００１２】
上記の目的を達成するために、本発明の通信装置は、通信パケットを待機させる複数のバッファと、前記複数のバッファに待機するパケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動するバッファ内パケット入替手段とを備える。【００１３】
上記の目的を達成するために、本発明の通信方法は、複数のバッファに待機する通信パケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動する。【００１４】
上記の目的を達成するために、本発明のプログラムは、複数のバッファに待機する通信パケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動する。
【発明の効果】
【００１５】
本発明の通信装置、通信方法、およびプログラムによれば、関連する技術と比べて効率良くデータを送信することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】第１の実施形態の構成例を示す図である。
【図２】第１の実施形態の構成例を示す図である。
【図３】第１の実施形態の構成例を示す図である。
【図４】第２の実施形態の構成例を示す図である。
【図５】第２の実施形態の構成例を示す図である。
【図６】第１の実施形態の動作を説明する図である。
【図７】第２の実施形態の動作を説明する図である。
【図８】関連技術の動作を説明する図である。
【図９】第１の実施形態の動作を説明する図である。
【図１０】第２の実施形態の動作を説明する図である。
【図１１】第２の実施形態の動作を説明する図である。
【図１２】第１の実施形態の動作を説明する図である。
【図１３】第２の実施形態の動作を説明する図である。
【図１４】第２の実施形態の構成例を示す図である。
【図１５】第３の実施形態の構成例を示す図である。
【図１６】第２の実施形態の動作を説明する図である。
【図１７】第２の実施形態の動作を説明する図である。
【発明を実施するための形態】
【００１７】
［第１の実施形態］
次に、本発明の実施の形態について図１乃至図３、図６、図９、および図１２を参照して詳細に説明する。
［構成の説明］
図１に第１の実施形態の全体構成を示す。
【００１８】
本実施形態の通信端末１００は、ハードウェア（hard ware）として、通信端末１００を制御するＣＰＵ１３、ルートコンプレックス（Root Complex）１４、ＮＩＣ１１、およびメモリ（memory）１５を備える。
【００１９】
ＣＰＵ１３は、前述の中央処理装置である。ルートコンプレックス１４には、通信端末１００の各デバイスが接続される。ＮＩＣ１１は、前述のネットワークインターフェースカードである。尚、ＮＩＣ１１は、通信端末１００の構成要素であるが、ＮＩＣ１１を通信装置と称しても良い。メモリ（memory）１５は記憶素子である。
【００２０】
また、通信端末１００は、ソフトウェア（soft ware）として、他の通信端末へ送信するデータを発生させるアプリケーション（application）１０と、ＮＩＣ１１に対してデータ送受信の制御を行うデバイスドライバ（device driver）１２を備える。
【００２１】
次に、図２にＮＩＣ１１の構成を示す。
【００２２】
ＮＩＣ１１は、ＤＭＡ（Direct Memory Access）部１１０、宛先振分部１１１、バッファ１２１乃至１２ｎ、レート制御部１３１乃至１３ｎ、出力Ｉ／Ｆ（Inter Face）１１４、およびグループ変更適用部１１５を備える。
【００２３】
ＤＭＡ部１１０は、デバイスドライバ１２及びアプリケーション１０がメモリ１５に保存したデータを読み出す。更に、ＤＭＡ部１１０は、他の通信端末への送信に使用する通信方式に基づいて、メモリ１５から読み出したデータから複数の通信パケット（以下、パケット）を生成して、宛先振分部１１１に送出する手段である。
【００２４】
パケットは、データの伝送単位である。パケットはデータ部とヘッダ部を有する。そして、ヘッダ部にはフローＩＤとパケット番号が付与される。
【００２５】
フローＩＤとは、パケット生成前のデータから生成された一連のパケット（フローと称する）に対して、共通に付与される識別子（Identification；ＩＤ）である。
【００２６】
また、パケット番号は、フローにおけるパケットの順番である。
【００２７】
グループ変更適用部１１５は、宛先振分部１１１に対して、バッファ１２１乃至１２ｎごとに複数のフローをグループ化して振り分けることを指示する手段である。尚、グループ変更適用部１１５から宛先振分部１１１への指示は、図６に示す例の様なバッファ１２１乃至１２ｎの番号と各バッファに割り当てるフローＩＤが関連づけられた情報を伝達することで行われる。
【００２８】
バッファ１２１乃至バッファ１２ｎは、宛先振分部１１１から送出されたパケットを一時的に待機させるメモリである。
【００２９】
レート制御部１３１乃至１３ｎは、バッファ１２１乃至バッファ１２ｎにあるパケットを、所定のレートにするための処理を行い、出力Ｉ／Ｆ１１４へ送出する。レート制御部１３１乃至１３ｎは、パケット処理部と称しても良い。出力Ｉ／Ｆ１１４は、他の通信端末にデータを送信する出力手段である。
【００３０】
グループ変更適用部１１５は、ユーザや管理ノードからの指示に従って、宛先振分部１１１が行うグループ設定を適切な手順で変更する手段である。
【００３１】
ここで、グループ変更適用部１１５の構成例を図３に示す。グループ変更適用部１１５は、設定入力・完了通知Ｉ／Ｆ１１５０、バッファ内パケット入替部１１５１、パケット送出開始命令部、およびメモリ１１５３によって構成される。
【００３２】
設定入力・完了通知Ｉ／Ｆ１１５０は、ユーザや管理ノードから宛先振分部の設定変更要求の受付と、必要に応じて宛先振分部が設定変更を完了したことを通知先に通知する。バッファ内パケット入替部１１５１は、ユーザや管理ノードからグループ設定の変更要求が来た際、変更の内容に応じてバッファ内に含まれるパケットを他のバッファへ移す。
【００３３】
パケット送出開始命令部１１５２は、グループ変更適用部の他の構成要素を制御するＣＰＵを備える。メモリ１１５３は、現在のグループ設定と変更が指示された際の変更後のグループ設定を記憶する記憶素子である。メモリ１１５３は、ＮＩＣ１１のグループ変更が完了すると、変更後のグループ設定の内容を現在のグループ設定の内容として書き換える。
［動作の説明］
次に本実施形態の動作の説明を図９、および図１２を参照して説明する。
【００３４】
ＮＩＣ１１が図９の（１）の様にフローＩＤがａとフローＩＤがｂのパケットが混在して待機している状態から、ＮＩＣ１１が、フローＩＤがｂのパケットをレート制御部１３１からレート制御部１３ｎへ変更するという命令を受信した際の動作について説明する。
【００３５】
尚、フローのレート制御部を変更する条件、および変更方法については、本発明の主旨ではないので説明を省略する。
【００３６】
図１２に示すフローチャートにおいて、はじめに、グループ変更適用部１１５の設定入力・完了通知Ｉ／Ｆ１１５０は、グループ設定の変更命令を受信する（Ｓ１０１）。ここで、グループ設定の変更命令は、通信端末１００と同一ネットワークに接続された他のノード（node）からグループ設定の変更命令が発信されて、ＮＩＣ１１の図示せぬ受信Ｉ／Ｆを経由して設定入力・完了通知Ｉ／Ｆ１１５０が受信する場合がある。或いは、ＮＩＣ１１が組み込まれている通信端末１００のアプリケーション１０からグループ設定の変更命令が発信されて、設定入力・完了通知Ｉ／Ｆ１１５０が受信する場合もある。
【００３７】
更に、ステップＳ１０１では、メモリ１１５３は、設定入力・完了通知Ｉ／Ｆ１１５０が受信した変更後のグループ設定を記憶する（Ｓ１０１）。
【００３８】
次に、ステップＳ１０２では、グループ変更適用部１１５のバッファ内パケット入替部１１５１は、メモリ１１５３を参照して変更後のグループ設定と現在のグループ設定を比較する。そして、バッファ内パケット入替部１１５１は、図９（２）に示す様に、バッファ１２１乃至１２ｎ内に待機しているパケットのうち振分先に変更のあるパケットを後述の方法により別のバッファへ移す（Ｓ１０２）。
【００３９】
図９（１）および図９（２）では、バッファ１２１に待機していたパケットｂ−２とｂ−３を、バッファ１２ｎに移動した。
【００４０】
尚、ステップＳ１０２で、パケットをバッファ間で移動している時、図９の（１）に示すパケットｂ−１の様に、バッファからレート制御部に送出されつつあるパケットについては、パケットの分断が発生する可能性があるため、パケットの移動を行わない。
【００４１】
また、パケット送出開始命令部１１５２は、ステップＳ１０２の操作を行っている最中に宛先振分部１１１に到着したパケットは、バッファ１２１乃至１２ｎへ送出せずに宛先振分部１１１に待機させる。
【００４２】
ステップＳ１０２では更に、設定入力・完了通知Ｉ／Ｆ１１５０がグループ設定の変更命令を受信すると、パケット送出開始命令部１１５２はパケットの移動先のバッファに対して、移動したパケットのレート制御部への送出停止を指示する（Ｓ１０２）。
【００４３】
図９の（２）の例では、パケット送出開始命令部１１５２は、バッファを移動したパケットｂ−２とｂ−３が移動先のバッファ２からレート制御部に出力されないように、バッファ２に対して送出停止を指示している。
【００４４】
ここで、バッファ内に待機するパケットを、他のバッファに移動する方法について説明する。
【００４５】
パケットは、データと共に、フローＩＤと同一フローＩＤ内のパケットの順番（以下、パケット番号）の情報をヘッダとして有する。また、バッファ内パケット入替部１１５１は、各バッファ内に待機する各パケットのヘッダを常に参照可能となっている。
【００４６】
バッファ内パケット入替部１１５１は、メモリ１１５３を参照して変更後のグループ設定と現在のグループ設定を比較して、振分先が変更となるフローＩＤ（以下、移動フローＩＤ）の現在の振分先のバッファと、変更後のバッファを認識する。そして、バッファ内パケット入替部１１５１は、移動フローＩＤが現在振り分けられているバッファ内に待機するパケットのヘッダを参照する。
【００４７】
バッファ内パケット入替部１１５１は、ヘッダを参照して移動フローＩＤを有するパケットの中からパケット番号の最も小さいパケットを抽出して、移動先のバッファに待機するパケットの最後に移動する。移動フローＩＤを有するパケットの中からパケット番号の最も小さいパケットを抽出して、移動先のバッファに待機するパケットの最後に移動する作業は、現在の振分先のバッファから、移動フローＩＤを有するパケットが無くなるまで繰り返される。
【００４８】
以上の様にして、バッファ内に待機するパケットを、他のバッファに移動する。
【００４９】
ステップＳ１０２に続いてステップＳ１０３では、メモリ１１５３は、現在のグループ設定の情報を、変更後のグループ設定の内容に書き換える。また、パケット送出開始命令部１１５２は、宛先振分部１１１に対してグループ設定を変更後のグループ設定に変更することを指示する。そして、宛先振分部１１１は、変更後のグループ設定に基づいてパケットの振り分けを行い、振分先のバッファにパケットの送出を開始する（Ｓ１０３）。
【００５０】
次に、パケット送出開始命令部１１５２は、ステップＳ１０２で入替対象となったパケット（図９のパケットｂ）が、パケット入替前に振り分けられていたバッファ（図９のバッファ１２１）から全て送出されたかどうかを判断する（Ｓ１０４）。
【００５１】
ステップＳ１０４で、バッファから入替対象となったパケットが全て送出されたと判断されると（Ｓ１０４でＹ）、ステップＳ１０５にすすむ。また、ステップＳ１０４で、バッファから入替対象となったパケットが全て送出されていないと判断されると（Ｓ１０４でＮ）、ステップＳ１０４に戻る。
【００５２】
ステップＳ１０５では、ステップＳ１０２でレート制御部への送出停止指示をしていたバッファ（図９のバッファ１２ｎ）に対して、パケットの送出開始を指示する。そして、図９のバッファ１２ｎから送出されたパケットは、レート制御部１３ｎで所定のレートにするための処理が行われ、図２の出力Ｉ／Ｆ１１４から他の通信端末へ送信される。（Ｓ１０５）。
【００５３】
そして、パケットのグループ設定変更作業を終了する。
【００５４】
特許文献１に示されるＮＩＣでは、パケットの振分先のバッファを変更する際に、変更前のバッファから、バッファ内に待機する全てのパケットが送出されて空になるまで、宛先振分部から変更後のバッファにパケットを送出できなかった。
【００５５】
一方、本実施形態のＮＩＣ１１は、パケットの振分先のバッファを変更する際に、待機中のパケットをバッファ間で移動する。そのため、本実施形態のＮＩＣ１１は、変更前のバッファから全てのパケットが送出されなくても、宛先振分部からバッファにパケットを送出可能である。
【００５６】
そのため、本実施形態のＮＩＣ１１は、特許文献１に示されるＮＩＣと比べて、他の通信装置に対して効率良くデータを送信することが可能となる。
［第２の実施形態］
次に、第２の実施形態について図４乃至図６、図１０、図１１、および図１３を参照して説明する。
［構成の説明］
図１４に第２の実施形態の全体構成を示す。
【００５７】
図１４に示す第２の実施形態の通信端末２００は、図１で示した第１の実施形態の通信端末１００のＮＩＣ１１が、本実施形態のＮＩＣ２１に置き換えられたものである。
【００５８】
次に、図４に、第２の実施形態のＮＩＣ２１の構成を示す。
【００５９】
ＮＩＣ２１の構成は、図２に示される第１の実施形態のＮＩＣ１１の構成に対して、レート制御部１３１乃至１３ｎとバッファ１５１乃至１５ｎの間に、スケジューラ１４１乃至１４ｎが挿入されている。
【００６０】
また、バッファ１５１乃至１５ｎは、第１の実施形態のバッファ１２１乃至１２ｎと機能が異なり、後述の様にバッファ上の待機位置を示すポインタを有する。
【００６１】
更に、ＮＩＣ２１では、図２と図３に示される第１の実施形態のグループ変更適用部１１５が、図４と図５に示される本実施形態のグループ変更適用部１２００に置き換えられている。
【００６２】
スケジューラ１４１乃至１４ｎは、自身に接続されるバッファ内のパケット群から適切なパケットを選択し、自身に接続されているレート制御部１３１乃至１３ｎに送出する。
【００６３】
また、グループ変更適用部１２００は、図５に示す様に、第１の実施形態のグループ変更適用部１１５に対して、Ｔｉｍｅｒ値計算部１２５４が、追加されている。このＴｉｍｅｒ値計算部１２５４は、後述のように、宛先振分部１１１の設定変更があった際に、スケジューラ１４１乃至１４ｎのＴｉｍｅｒ値を適切に引き継ぐための計算を行う。
【００６４】
スケジューラ１４１乃至１４ｎのそれぞれは、各スケジューラに接続されるバッファ情報を保有している。図７はバッファ情報の例である。バッファ情報は、フローＩＤ、先頭ポインタ、有効フラグ、およびＴｉｍｅｒ値をそれぞれ関連づけた情報である。
【００６５】
ここで、バッファ情報について説明する。
【００６６】
フローＩＤは、第１の実施形態の説明と同じである。
【００６７】
ポインタは、バッファの中にパケットが待機する位置を示す。図１０の例では、バッファ１５１とバッファ１５ｎは、それぞれ５つのポインタを有している。
【００６８】
また、スケジューラ１４１乃至１４ｎは、フローＩＤ毎にパケットがバッファに待機した順番と待機したパケットのポインタを関連づけた、連結リストと称する情報を保有する。
【００６９】
ここで、図１６の様にバッファ上にパケットが待機している例を用いて、連結リストの説明をする。
【００７０】
図１６は、バッファに待機するパケットを模式的に表している。バッファはパケットの待機場所であるポインタを５個有していて、ポインタには番号が１から５まで付けられている。図１６のａ、ｂはパケットのフローＩＤを示し、ａ３、ｂ１のようにａ、ｂに付された番号は、パケットの順番を表わす。
【００７１】
スケジューラは、フローＩＤ毎に、バッファ上に各パケットが待機した順番と待機パケットのポインタを関連づけた連結リストを保有する。図１６の様にパケットが待機する場合の連結リストを、図１７に示す。
【００７２】
図１７の（１）は、フローＩＤがａの連結リストである。フローＩＤがａのパケットの順番１、２、３に対して、それぞれのポインタは、３、４、１が関連付けられている。この連結リストに基づいて、フローＩＤがａのパケットは、バッファ上のポインタ、３、４、１の順でバッファから送出される。
【００７３】
図１７の（２）は、フローＩＤがｂの連結リストである。フローＩＤがｂのパケットの順番１、２に対して、それぞれのポインタは、２、５が関連付けられている。この連結リストに基づいて、フローＩＤがｂのパケットは、バッファ上のポインタ、２、５の順でバッファから送出される。
【００７４】
尚、連結リストの順番の１番目に対応するポインタを、先頭ポインタと称する。
【００７５】
そして、バッファから先頭ポインタが送出されて空いたポインタには、新たなパケットが待機する。
【００７６】
すると、スケジューラは、送出されたパケットを連結リストから削除する。そして、スケジューラは、連結リストのポインタの順番を１つずつずらして、２番目のポインタを先頭ポインタに更新する。そして、スケジューラは、新たにバッファに待機したパケットのポインタを連結リストの順番の最後に関連づける。
【００７７】
有効フラグはフローＩＤが有効かどうかを示すフラグである。有効フラグが、有効（Enable）である場合に、スケジューラ１４１乃至１４ｎは、バッファ１５１乃至１５ｎからレート制御部１３１乃至１３ｎにパケットを送出する。また、有効フラグが、無効（Disable）である場合に、スケジューラ１４１乃至１４ｎは、バッファ１５１乃至１５ｎからレート制御部１３１乃至１３ｎにパケットを送出しない。
【００７８】
尚、本実施形態では、スケジューラ１４１乃至スケジューラ１４ｎが、それぞれに接続されるバッファのバッファ情報を保有している。しかし、スケジューラ１４１乃至スケジューラ１４ｎがそれぞれバッファ情報を保有するのではなく、グループ変更適用部１２００が、全部のスケジューラ１４１乃至スケジューラ１４ｎの全部のバッファ情報を保有しても良い。
【００７９】
Ｔｉｍｅｒは、バッファが、あるパケットを送出した後に、同一フローの次のパケットを送出するまで待機する時間である。バッファが、あるパケットを送出すると、図５に示すグループ変更適用部１２００のＴｉｍｅｒ値計算部１２５４は計時を開始し、経過時間に伴って図７のＴｉｍｅｒの値は減少する。そして、Ｔｉｍｅｒの値がゼロになると、先頭ポインタのパケットが送出可能な状態となる。
【００８０】
Ｔｉｍｅｒの値は、各パケットのレートより大きく設定することにより、スケジューラ１４１乃至１４ｎがレート制御部１３１乃至１３ｎへ送出するパケットのレートを保証することが出来る。
【００８１】
そして、スケジューラ１４１乃至１４ｎは、バッファ１５１乃至１５ｎに待機中のパケットの内、Ｔｉｍｅｒの値がゼロ、およびＴｉｍｅｒが無設定のフローのパケットを選択して、レート制御部１３１乃至１３ｎに送出する。
［動作の説明］
次に、本実施形態の動作を図１０乃至図１３を参照して説明する。
【００８２】
図１０は、ＮＩＣ２１の宛先振分部１１１からレート制御部１３１乃至１３ｎまでのパケットの流れを説明する図である。
【００８３】
図１１は、図１０に対応してスケジューラの有する値を示す図である。
【００８４】
図１３は、本実施形態の動作を示すフローチャートである。
【００８５】
図１３のフローチャートで、ステップＳ２０１は、第１の実施形態の動作を示す図１２のステップＳ１０１と同じ動作であるので、説明を省略する（Ｓ２０１）。
【００８６】
ステップＳ２０１では、図１０の（１）の様に、バッファ１５１にはフローＩＤがａとｂのフローが振り分けられ、バッファ１５ｎにはフローＩＤがｃのフローが振り分けられていて、図の様にバッファ内にパケットが待機しているとする。
【００８７】
図１０の（１）の時、スケジューラ１４１、およびスケジューラ１４ｎが保有する、バッファ１５１とバッファ１５ｎの情報を、図１１の（１）に示す。
【００８８】
次に、グループ変更適用部１２００は、ステップＳ２０１で受信したグループ設定の変更命令に基づいて、宛先振分部１１１のグループの設定を変更する（Ｓ２０２）。
【００８９】
ステップＳ２０２に続いて、Ｔｉｍｅｒ値計算部１２５４が計時を開始する（Ｓ２０３）。
【００９０】
続いて、グループ変更適用部１２００のバッファ内パケット入替部１２５１が、メモリ１２５３を参照して、変更後のグループ設定と現在のグループ設定を認識する。そして、バッファ内パケット入替部１２５１は、バッファ１５１乃至１５ｎの中に滞留しているパケットのうち、グループ設定の変更に伴って振分先バッファに変更のあるフローのパケットを変更後のバッファへ移す（Ｓ２０４）。図１０を参照して、ステップＳ２０４の動作の例を説明すると、図１０の（１）に示すバッファ１５１に待機していたパケットｂ−２とｂ−３が、図１０の（２）の様にバッファ１５ｎに移動されている。
【００９１】
ステップＳ２０４に続き、スケジューラ１４１乃至１４ｎの内でフローＩＤの振分先の変更のあったスケジューラは、スケジューラが保有する連結リストの先頭ポインタの次の順番にあったポインタを先頭ポインタにずらす。同様に、他の順番のポインタも１つずつ順番をずらす。更に、フローＩＤの振分先の変更のあったスケジューラは、バッファ情報の先頭ポインタを、連結リストの先頭ポインタと同じポインタに書き換える（Ｓ２０５）。
【００９２】
そして、フローＩＤの振分先の変更のあったスケジューラは、スケジューラが保有するバッファ情報の内、変更されたフローＩＤに関連づけられている有効フラグをDisableに設定する。そして、パケット送出開始命令部１２５２は、Disableに設定されたフローをバッファからレート制御部へ送出することを停止する（Ｓ２０６）。
【００９３】
ステップＳ２０５とステップＳ２０６を終わった段階で、スケジューラ１４１、およびスケジューラ１４ｎが保有する、バッファ１５１とバッファ１５ｎの情報を、図１１の（２）に示す。
【００９４】
ここで、第１の実施形態の動作を示す図１２のステップＳ１０２ではバッファ内パケット入替部１１５１によるパケット入替の最中は、宛先振分部１１１からパケットをバッファへ振り分けずに、宛先振分部１１１にパケットを滞留させていた。
【００９５】
一方、本実施形態の動作を示す図１３のステップＳ２０４では、バッファ内パケット入替部１２５１によるパケット入替の最中にも、宛先振分部１１１からパケットをバッファ１５１乃至１５ｎへ振り分けることを許容する。これは、ステップＳ２０５およびステップＳ２０６において、スケジューラ１４１乃至１４ｎのそれぞれが有するバッファ情報と連結リストが更新されることにより、フローのパケットの順序が保証されるために可能となった。
【００９６】
ステップＳ２０６に続き、パケット送出開始命令部１２５２は、ステップＳ２０４で入替対象となったフローのパケット（図１０のパケットｂ）が、パケット入替前のバッファ（図１０のバッファ１５１）から全て送出されたかどうかを判断する（Ｓ２０７）。
【００９７】
ステップＳ２０７で、バッファから入替対象となったパケットが全て送出されたと判断されると（Ｓ２０７でＹ）、ステップＳ２０８にすすむ。また、ステップＳ２０７で、バッファから入替対象となったパケットが全て送出されていないと判断されると（Ｓ２０７でＮ）、ステップＳ２０７に戻る。
【００９８】
ステップＳ２０８では、パケット送出開始命令部１２５２は、フローの移動先のスケジューラに対して、入替対象となったフローＩＤに関連づけられた有効フラグをEnableにすることを指示する。（Ｓ２０８）。
【００９９】
ステップＳ２０８に続いてステップＳ２０９では、Ｔｉｍｅｒ値計算部１２５４は、ステップＳ２０３で計時を開始したＴｉｍｅｒの値（仮にＴｄとする）を参照する。そして、Ｔｉｍｅｒ値計算部１２５４は、バッファ間でパケットの入替を行ったフローに対応するフローＩＤのＴｉｍｅｒ値からＴｄを減算する。また、メモリ１２５３は、現在のグループ設定の情報を、変更後のグループ設定の内容に書き換える。（Ｓ２０９）。
【０１００】
図１１の（３）は、ステップＳ２０９が完了した例を示している。ここでは、Ｔｉｍｅｒ値計算部１２５４は、ステップＳ２０３で計時を開始した時刻のＴｉｍｅｒ値Ｘから、ステップＳ２０９で参照したＴｉｍｅｒの値Ｔｄを減算している。
【０１０１】
このようにして、バッファを移動したフローに対応するＴｉｍｅｒ値が、移動の前後で引き継がれる。
【０１０２】
尚、ステップＳ２０９で、バッファ間でパケットの入替が完了するより早く、移動前のバッファからスケジューラに対して入替対象のフローのパケットが送出し終わっていると、Ｔｄは負の値となる。この場合は、パケットの入れ替えを行う前のバッファに待機していた、入替対象のフローの最後のパケットは、Ｔｄの絶対値より更にＸだけ前の時間にバッファから送出されている。
【０１０３】
そこで、入替後のバッファから次に送出されるパケットのＴｉｍｅｒ値は、ＸからＴｄの絶対値を減算した値に設定しても、前のパケットのレートは保証され、次のパケットは無駄な待機時間が無く、効率良くバッファから送出される。
【０１０４】
ステップＳ２０９を終えると、パケットのグループ設定変更作業を終了する。
【０１０５】
第１の実施形態のＮＩＣ１１は、パケットの入替作業中に、宛先振分部に到着したパケットはバッファへ送出出来なかった。
【０１０６】
しかし、本実施形態のＮＩＣ２１は、パケットの入れ替え作業中にも宛先振分部に到着したパケットをバッファへ送出することが出来る。更に、グループ変更適用部がグループ設定の変更作業中に、送出機会が与えられなかったフローのパケットに対して、グループ設定の変更作業の時間を反映したＴｉｍｅｒ値を設定できる。
［第３の実施形態］
次に、第３の実施形態について図１５を参照して説明する。
【０１０７】
本実施形態の通信装置３１は、通信パケットを待機させる複数のバッファ１６１乃至１６ｎを備える。また、通信装置３１は、バッファ内パケット入替部１５００を備える。バッファ内パケット入替部１５００は、前記複数のバッファ１６１乃至１６ｎに待機するパケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動する。
【０１０８】
以上説明した様に、本実施形態の通信装置３１は特許文献１に示される通信装置と比べて、他の通信装置に対して効率良くデータを送信することが可能となる。
【０１０９】
尚、本発明は、実施形態の機能を実現する情報処理プログラムが、装置に直接或いは遠隔から供給される場合にも適用可能である。
【０１１０】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【０１１１】
（付記１）
通信パケットを待機させる複数のバッファと、
前記複数のバッファに待機するパケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動するバッファ内パケット入替部とを備えることを特徴とする通信装置。
【０１１２】
（付記２）
通信パケットを前記複数のバッファに振り分けて送出する宛先振分部と、
前記複数のバッファから送出された前記通信パケットを所定のレートで送出する複数のレート制御部とを更に備えることを特徴とする付記１に記載の通信装置。
【０１１３】
（付記３）
前記移動を開始すると、前記第２のバッファから前記所定の通信パケットの送出の停止を指示し、前記所定の通信パケットと同じ種類の通信パケットが前記第１のバッファから全て送出されたことを検知すると、前記第２のバッファから前記所定の通信パケットの送出を指示するパケット送出開始指示部を更に備えることを特徴とする付記１または付記２に記載の通信装置。
【０１１４】
（付記４）
前記所定の通信パケットのレートより大きいタイマー値が設定され前記通信パケットが前記バッファから送出されると前記タイマー値から時間経過とともに減少する表示値を示すタイマーと、
前記移動が完了した時の前記表示値が正の値であれば前記タイマー値から前記表示値を減算した値を前記タイマー値と置換え、前記移動が完了した時の前記表示値が負の値であれば前記タイマー値に前記表示値の絶対値を加算した値を前記タイマー値と置き換えるタイマー値計算部とを更に備え、
前記バッファは、前記表示値が零になると前記バッファに待機する前記通信パケットと同じ種類の次の通信パケットを送出可能とすることを特徴とする付記１または付記２に記載の通信装置。
【０１１５】
（付記５）
複数のバッファに待機する通信パケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動することを特徴とする通信方法。
【０１１６】
（付記６）
前記複数のバッファは前記通信パケットを通信パケットのレートを制御する複数のレート制御手段に出力することを特徴とする付記５に記載の通信方法。
【０１１７】
（付記７）
前記移動を開始すると、前記第２のバッファから前記所定の通信パケットの送出を停止し、前記所定の通信パケットと同じ種類の通信パケットが前記第１のバッファから全て送出されたことを検知すると、前記第２のバッファから前記所定の通信パケットを送出することを特徴とする付記５または付記６に記載の通信方法。
【０１１８】
（付記８）
前記所定の通信パケットのレートより大きいタイマー値が設定され前記通信パケットが前記バッファから送出されると前記タイマー値から時間経過とともに減少する表示値を示し、
前記移動が完了した時の前記表示値が正の値であれば前記タイマー値から前記表示値を減算した値を前記タイマー値と置換え、前記移動が完了した時の前記表示値が負の値であれば前記タイマー値に前記表示値の絶対値を加算した値を前記タイマー値と置き換え、
前記表示値が零になると前記バッファに待機する前記通信パケットと同じ種類の次の通信パケットを送出可能とすることを特徴とする付記５または付記６に記載の通信方法。
【０１１９】
（付記９）
複数のバッファに待機する通信パケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動することを特徴とするプログラム。
【０１２０】
（付記１０）
前記複数のバッファは前記通信パケットを通信パケットのレートを制御する複数のレート制御手段に出力することを特徴とする付記９に記載のプログラム。
【０１２１】
（付記１１）
前記移動を開始すると、前記第２のバッファから前記所定の通信パケットの送出を停止し、前記所定の通信パケットと同じ種類の通信パケットが前記第１のバッファから全て送出されたことを検知すると、前記第２のバッファから前記所定の通信パケットを送出することを特徴とする付記９または付記１０に記載のプログラム。
【０１２２】
（付記１２）
前記所定の通信パケットのレートより大きいタイマー値が設定され前記通信パケットが前記バッファから送出されると前記タイマー値から時間経過とともに減少する表示値を示し、
前記移動が完了した時の前記表示値が正の値であれば前記タイマー値から前記表示値を減算した値を前記タイマー値と置換え、前記移動が完了した時の前記表示値が負の値であれば前記タイマー値に前記表示値の絶対値を加算した値を前記タイマー値と置き換え、
前記表示値が零になると前記バッファに待機する前記通信パケットと同じ種類の次の通信パケットを送出可能とすることを特徴とする付記９または付記１０に記載のプログラム。
【０１２３】
以上、上述した実施形態を模範的な例として本発明を説明した。しかしながら、本発明は、上述した実施形態には限定されない。即ち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
【０１２４】
この出願は、２０１６年４月２１日に出願された日本出願特願２０１６−０８５０１４を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０１２５】
１０  アプリケーション
１１  ＮＩＣ
１２  デバイスドライバ
１３  ＣＰＵ
１４  ルートコンプレックス
１５  メモリ
２１  ＮＩＣ
３１  通信装置
１００  通信端末
１１０  ＤＭＡ部
１１１  宛先振分部
１１４  出力Ｉ／Ｆ
１１５  グループ変更適用部
１２１、１２ｎ  バッファ
１３１、１３ｎ  レート制御部
１４１、１４ｎ  スケジューラ
１５１、１５ｎ  バッファ
１６１、１６ｎ  バッファ
２００  通信端末
１１５０  設定入力・完了通知Ｉ／Ｆ
１１５１  バッファ内パケット入替部
１１５２  パケット送出開始命令部
１１５３  メモリ
１２００  グループ変更適用部
１２５０  設定入力・完了通知Ｉ／Ｆ
１２５１  バッファ内パケット入替部
１２５２  パケット送出開始命令部
１２５３  メモリ
１２５４  Ｔｉｍｅｒ値計算部
１５００  バッファ内パケット入替部
【図１】
2017183564.tif 000003
【図２】
2017183564.tif 000004
【図３】
2017183564.tif 000005
【図４】
2017183564.tif 000006
【図５】
2017183564.tif 000007
【図６】
2017183564.tif 000008
【図７】
2017183564.tif 000009
【図８】
2017183564.tif 000010
【図９】
2017183564.tif 000011
【図１０】
2017183564.tif 000012
【図１１】
2017183564.tif 000013
【図１２】
2017183564.tif 000014
【図１３】
2017183564.tif 000015
【図１４】
2017183564.tif 000016
【図１５】
2017183564.tif 000017
【図１６】
2017183564.tif 000018
【図１７】
2017183564.tif 000019
【手続補正書】
【提出日】平成30年10月3日(2018.10.3)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
通信パケットを待機させる複数のバッファと、
前記複数のバッファに待機するパケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動するバッファ内パケット入替手段とを備えることを特徴とする通信装置。
【請求項２】
通信パケットを前記複数のバッファに振り分けて送出する宛先振分手段と、
前記複数のバッファから送出された前記通信パケットを所定のレートで送出する複数のレート制御手段とを更に備えることを特徴とする請求項１に記載の通信装置。
【請求項３】
前記移動を開始すると、前記第２のバッファから前記所定の通信パケットの送出の停止を指示し、前記所定の通信パケットと同じ種類の通信パケットが前記第１のバッファから全て送出されたことを検知すると、前記第２のバッファから前記所定の通信パケットの送出を指示するパケット送出開始指示手段を更に備えることを特徴とする請求項１または請求項２に記載の通信装置。
【請求項４】
前記所定の通信パケットのレートより大きいタイマー値が設定され前記通信パケットが前記バッファから送出されると前記タイマー値から時間経過とともに減少する表示値を示すタイマーと、
前記移動が完了した時の前記表示値が正の値であれば前記タイマー値から前記表示値を減算した値を前記タイマー値と置換え、前記移動が完了した時の前記表示値が負の値であれば前記タイマー値に前記表示値の絶対値を加算した値を前記タイマー値と置き換えるタイマー値計算手段とを更に備え、
前記バッファは、前記表示値が零になると前記バッファに待機する前記通信パケットと同じ種類の次の通信パケットを送出可能とすることを特徴とする請求項１または請求項２に記載の通信装置。
【請求項５】
複数のバッファに待機する通信パケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動することを特徴とする通信方法。
【請求項６】
前記複数のバッファは前記通信パケットを通信パケットのレートを制御する複数のレート制御手段に出力することを特徴とする請求項５に記載の通信方法。
【請求項７】
前記移動を開始すると、前記第２のバッファから前記所定の通信パケットの送出を停止し、前記所定の通信パケットと同じ種類の通信パケットが前記第１のバッファから全て送出されたことを検知すると、前記第２のバッファから前記所定の通信パケットを送出することを特徴とする請求項５または請求項６に記載の通信方法。
【請求項８】
前記所定の通信パケットのレートより大きいタイマー値が設定され前記通信パケットが前記バッファから送出されると前記タイマー値から時間経過とともに減少する表示値を示し、
前記移動が完了した時の前記表示値が正の値であれば前記タイマー値から前記表示値を減算した値を前記タイマー値と置換え、前記移動が完了した時の前記表示値が負の値であれば前記タイマー値に前記表示値の絶対値を加算した値を前記タイマー値と置き換え、
前記表示値が零になると前記バッファに待機する前記通信パケットと同じ種類の次の通信パケットを送出可能とすることを特徴とする請求項５または請求項６に記載の通信方法。
【請求項９】
複数のバッファに待機する通信パケットの内、所定の通信パケットを前記所定の通信パケットが待機する第１のバッファから前記複数のバッファの内の第２のバッファに移動することをコンピュータに行わせるためのプログラム。
【請求項１０】
前記移動を開始すると、前記第２のバッファから前記所定の通信パケットの送出を停止し、前記所定の通信パケットと同じ種類の通信パケットが前記第１のバッファから全て送出されたことを検知すると、前記第２のバッファから前記所定の通信パケットを送出することをコンピュータに行わせる
ことを特徴とする請求項９に記載のプログラム。
【国際調査報告】
2017183564.tif 000020
2017183564.tif 000021