(57)【要約】【課題】  バッファに優先度を持たせた上で、ある程度公平にデータを取り出して送信する順序制御プログラム及び方法を提供する。【解決手段】  バッファｉ毎に、パケットの取り出し優先度Ｐ(i)の情報と、パケットが存在するにもかかわらず送信しなかった回数を示す待ち加算度ＷＡ(i)の情報と、バッファに蓄積されたパケット量の割合を示すデータ量係数Ｄ(i)の情報とを有し、全てのバッファについて、送信すべきパケットがあればＷＡ(i)を１増分し、送信すべきパケットがなければＷＡ(i)を０にし、全てのバッファについて、現在のパケット量Ｂ(i)×バッファ量ＢＳ(i)からなるＤ(i)を導出し、全てのバッファについて、Ｐ(i)×ＷＡ(i)×Ｄ(i)からなる取り出し指数Ｋ(i)を導出し、Ｋが最大となるバッファＩからパケットを取り出して送信し、バッファＩにおけるＷＡ(I)を０にし、これらステップを繰り返す。【選択図】  図１
2005210301.tif 000002
【特許請求の範囲】
【請求項１】
送信すべきパケットを一時的に蓄積した複数のバッファを有し、該バッファを選択して次に送信するパケットを取り出すようにコンピュータを機能させる順序制御プログラムにおいて、
前記バッファｉ毎に、パケットの取り出し優先度Ｐ(i)の情報と、パケットが存在するにもかかわらず送信しなかった回数を示す待ち加算度ＷＡ(i)の情報と、バッファに蓄積されたパケット量の割合を示すデータ量係数Ｄ(i)の情報とを有し、
全ての前記バッファについて、送信すべきパケットがあれば待ち加算度ＷＡ(i)を１増分し、送信すべきパケットがなければ待ち加算度ＷＡ(i)を０にする第１のステップと、
全ての前記バッファについて、現在のパケット量Ｂ(i)×バッファ量ＢＳ(i)からなるデータ量係数Ｄ(i)を導出する第２のステップと、
全ての前記バッファについて、優先度Ｐ(i)×待ち加算度ＷＡ(i)×データ量係数Ｄ(i)からなる取り出し指数Ｋ(i)を導出する第３のステップと、
前記取り出し指数Ｋが最大となる前記バッファＩから前記パケットを取り出して送信する第４のステップと、
前記バッファＩにおける待ち加算度ＷＡ(I)を０にする第５のステップと
を有し、前記第１から第５のステップを繰り返すようにコンピュータを実行させることを特徴とするパケット送出の順序制御プログラム。
【請求項２】
ネットワーク用ＡＰＩに適用されることを特徴とする請求項１に記載の順序制御プログラム。
【請求項３】
前記ネットワーク用ＡＰＩは、Socketインタフェースであることを特徴とする請求項２に記載の順序制御プログラム。
【請求項４】
送信すべきパケットを一時的に蓄積した複数のバッファと、該バッファを選択して次に送信するパケットを取り出す順序制御方法において、
前記バッファｉ毎に、パケットの取り出し優先度Ｐ(i)の情報と、パケットが存在するにもかかわらず送信しなかった回数を示す待ち加算度ＷＡ(i)の情報と、バッファに蓄積されたパケット量の割合を示すデータ量係数Ｄ(i)の情報とを有し、
全ての前記バッファについて、送信すべきパケットがあれば待ち加算度ＷＡ(i)を１増分し、送信すべきパケットがなければ待ち加算度ＷＡ(i)を０にする第１のステップと、
全ての前記バッファについて、現在のパケット量Ｂ(i)×バッファ量ＢＳ(i)からなるデータ量係数Ｄ(i)を導出する第２のステップと、
全ての前記バッファについて、優先度Ｐ(i)×待ち加算度ＷＡ(i)×データ量係数Ｄ(i)からなる取り出し指数Ｋ(i)を導出する第３のステップと、
前記取り出し指数Ｋが最大となる前記バッファＩから前記パケットを取り出して送信する第４のステップと、
前記バッファＩにおける待ち加算度ＷＡ(I)を０にする第５のステップと
を有し、前記第１から第５のステップを繰り返すことを特徴とするパケット送出の順序制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、送信すべきパケットを一時的に蓄積した複数のバッファを有し、該バッファを選択して次に送信するパケットを取り出す、パケット送出の順序制御プログラム及び方法に関する。
【背景技術】
【０００２】
パケットを送信する順序制御は、アプリケーションプログラムからのパケット送信要求に対し、通信プログラムがそのパケットの送信要求を処理し、ネットワークに送信する順序によって行われる。両プログラムのインタフェースとしては、ネットワーク用ＡＰＩ(Application Program Interface)がある。これは、相手側通信ノードとの間でコネクション（通信路）を確立するものであり、代表的なものとしてはSocketインタフェースがある。ここで確立されたコネクションに対して、通常のファイル入出力用のread/writeによって、データを送受信することができる。
【０００３】
このようなインタフェースは、パケットを一時的に蓄積するバッファ機能を有する。そして、何れのバッファのパケットを取り出して次に送信するかは、ＯＳ(Operating System)のスケジューラによって決定される場合が多い。例えばルータについては、ＱｏＳ(Quality of Service)機能によってフロー制御されているとしても、それは一般的な制御となっている。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、バッファからパケットを取り出す順序をＯＳのスケジューラに任せた場合、以下のような問題が生じる。第１に、アプリケーションが一定間隔毎にパケットをバッファに書き込んだとしても、バッファに蓄積されるだけで、回線上に一定間隔で送出されない場合がある。第２に、リアルタイム性が要求されるアプリケーションと、そうでないアプリケーションが同一に扱われるため、優先されるべきパケットが優先されないことがある。第３に、多数のバッファがある場合、バッファから取り出す順番を指定できない。第４に、ＱｏＳ機能を有するルータ等もあるが、それらは予め設定された情報に基づくパケット取り出しを優先する動作しか行わないため、パケット種別又はパケットの待ち時間に応じた動的な取り出しができない。
【０００５】
従って、本発明は、これらの問題を解決するべく、バッファに優先度を持たせた上で、ある程度公平にデータを取り出して送信する順序制御プログラム及び方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の順序制御プログラムによれば、
バッファｉ毎に、パケットの取り出し優先度Ｐ(i)の情報と、パケットが存在するにもかかわらず送信しなかった回数を示す待ち加算度ＷＡ(i)の情報と、バッファに蓄積されたパケット量の割合を示すデータ量係数Ｄ(i)の情報とを有し、
全てのバッファについて、送信すべきパケットがあれば待ち加算度ＷＡ(i)を１増分し、送信すべきパケットがなければ待ち加算度ＷＡ(i)を０にする第１のステップと、
全てのバッファについて、現在のパケット量Ｂ(i)×バッファ量ＢＳ(i)からなるデータ量係数Ｄ(i)を導出する第２のステップと、
全てのバッファについて、優先度Ｐ(i)×待ち加算度ＷＡ(i)×データ量係数Ｄ(i)からなる取り出し指数Ｋ(i)を導出する第３のステップと、
取り出し指数Ｋが最大となるバッファＩからパケットを取り出して送信する第４のステップと、
バッファＩにおける待ち加算度ＷＡ(I)を０にする第５のステップと
を有し、第１から第５のステップを繰り返すようにコンピュータを実行させることを特徴とする。
【０００７】
本発明の順序制御プログラムにおける他の実施形態によれば、ネットワーク用ＡＰＩに適用されることも好ましい。更に、そのネットワーク用ＡＰＩは、Socketインタフェースであってもよい。
【０００８】
本発明の順序制御方法によれば、
バッファｉ毎に、パケットの取り出し優先度Ｐ(i)の情報と、パケットが存在するにもかかわらず送信しなかった回数を示す待ち加算度ＷＡ(i)の情報と、バッファに蓄積されたパケット量の割合を示すデータ量係数Ｄ(i)の情報とを有し、
全てのバッファについて、送信すべきパケットがあれば待ち加算度ＷＡ(i)を１増分し、送信すべきパケットがなければ待ち加算度ＷＡ(i)を０にする第１のステップと、
全てのバッファについて、現在のパケット量Ｂ(i)×バッファ量ＢＳ(i)からなるデータ量係数Ｄ(i)を導出する第２のステップと、
全てのバッファについて、優先度Ｐ(i)×待ち加算度ＷＡ(i)×データ量係数Ｄ(i)からなる取り出し指数Ｋ(i)を導出する第３のステップと、
取り出し指数Ｋが最大となるバッファＩからパケットを取り出して送信する第４のステップと、
バッファＩにおける待ち加算度ＷＡ(I)を０にする第５のステップと
を有し、第１から第５のステップを繰り返すことを特徴とする。
【発明の効果】
【０００９】
本発明の順序制御プログラム及び方法によれば、各バッファに蓄積されたデータの有するトラヒック特性に合わせてデータを送出することができる。また、単にバッファの優先度に基づいてデータを取り出すのではなく、待ち加算度ＷＡ及びデータ量係数Ｄを用いることで、バッファ間の公平性を保つことができる。特に、待ち加算度ＷＡ及びデータ量係数Ｄは、常時計算されているので、動的なトラヒック制御が可能になる。
【発明を実施するための最良の形態】
【００１０】
以下では、図面を用いて、本発明を実施するための最良の形態について詳細に説明する。
【００１１】
図１は、本発明におけるプログラムの機能構成図である。
【００１２】
図１によれば、取得バッファ選択部１と、データ取得部２と、バッファ３１〜３４とからなる。取得バッファ選択部１は、複数のバッファ３１〜３４のうち、次に送信すべきデータを取得するバッファを選択するものである。データ取得部２は、取得バッファ選択部１によって決定されたバッファからデータを取り出し、回線側に送信するものである。バッファ３１〜３４は、Socketインタフェースを介して上位層から受信したデータを、一時的に蓄積するものである。
【００１３】
取得バッファ選択部１は、以下のような表１のデータ取得管理テーブルを保持する。
【表１】
2005210301.tif 000003
【００１４】
バッファ番号ｉ（＝１〜ｎ）：  バッファ毎に割り当てられた識別子
優先度Ｐ(i)：  バッファiにおけるデータ取り出しの優先度
バッファサイズＢＳ(i)：  バッファiにおけるデータ蓄積容量
現在のバッファ量Ｂ(i)：  バッファiにおいて現在蓄積されているデータ量
データ量係数 Ｄ(i)：  バッファiにおける現在のデータの蓄積割合を示す係数
待ち加算度ＷＡ(i)：  バッファiにおいてデータが存在するのに取り出さなかった回数
取り出し指数Ｋ(i)：  バッファｉにおける取り出し必要度を示す指数
【００１５】
図２は、本発明における取得バッファ選択部のフローチャートである。
【００１６】
このフローチャートの処理は、データの取り出しトリガによって開始される。
【００１７】
最初に、全てのバッファについて、優先度Ｐ(i)とバッファサイズＢＳ(i)とが指定される。尚、優先度Ｐは、値が大きいほど、そのバッファからパケットを送信する必要度が高いことを意味する。
（Ｓ２０１）最大取り出し指数のバッファ番号Ｉにおける取り出し指数Ｋ(I)＝０とする。
（Ｓ２０２）全てのバッファｉ＝１〜ｎについて、Ｓ２１０までの間の処理を行う。
（Ｓ２０３）バッファiについて現在蓄積されているデータ量Ｂ(i)を取得する。
（Ｓ２０４）バッファiについて現在のバッファ量Ｂ(i)が０か否かを判定する。
（Ｓ２０５）現在のバッファ量Ｂ(i)が０でない場合、待ち加算度ＷＡ(i)が１増分され、データ量係数Ｄが算出される。
Ｄ(i)＝Ｂ(i)／ＢＳ(i)
（Ｓ２０６）現在のバッファ量Ｂ(i)が０である場合、待ち加算度ＷＡ(i)が０にされ、データ量係数Ｄ(i)も０にされる。
（Ｓ２０７）優先度Ｐ(i)と、待ち加算度ＷＡ(i)と、データ量係数Ｄ(i)とを乗算して、取り出し指数Ｋ(i)が算出される。
Ｋ(i)＝Ｐ(i)×ＷＡ(i)×Ｄ(i)
（Ｓ２０８）バッファ番号ｉにおける取り出し指数Ｋ(i)が、最大取り出し指数のバッファ番号Ｉにおける取り出し指数Ｋ(I)よりも大きいか否かを判定する。
（Ｓ２０９）Ｋ(i)がＫ(I)よりも大きいならば、最大取り出し指数のバッファ番号Ｉを、バッファ番号ｉにする。
（Ｓ２１０）全てのバッファｉ＝１〜ｎについて、Ｓ２０２との間で繰り返す。
（Ｓ２１１）データ取得部２に対して、バッファ番号Ｉからデータを取得するべく指示する。これにより、データ取得部２は、バッファ番号Ｉのバッファからデータを取得して、送信する。
（Ｓ２１２）最大取り出し指数のバッファ番号Ｉにおける待ち加算度ＷＡ(I)を０にする。
【００１８】
前述した本発明の種々の実施形態において、本発明の技術思想及び見地の範囲の種々の変更、修正及び省略は、当業者によれば容易に行うことができる。前述の説明はあくまで例であって、何ら制約しようとするものではない。本発明は、特許請求の範囲及びその均等物として限定するものにのみ制約される。
【図面の簡単な説明】
【００１９】
【図１】本発明におけるプログラムの機能構成図である。
【図２】本発明における取得バッファ選択部のフローチャートである。
【符号の説明】
【００２０】
１  取得バッファ選択部
２  データ取得部
３１〜３４  バッファ
【図１】
2005210301.tif 000004
【図２】
2005210301.tif 000005