(57)【特許請求の範囲】
【請求項１】
パケットの情報と、パケットの送信処理の許可又は禁止を示す情報の格納領域とを含むディスクリプタを一時的に格納するバッファと、
パケットが送出される通信媒体の通信速度に応じて、前記バッファに格納された前記ディスクリプタに関して前記格納領域に送信処理の許可を示す情報を設定するタイミングを調整する調整回路とを含み、
前記ディスクリプタを生成する第１の回路と、前記送信処理の許可を示す情報が設定されたディスクリプタに基づく送信処理を行う第２の回路との間に配置される、
パケットシェーピング装置。
【請求項２】
パケットの情報と、パケットの送信処理の許可又は禁止を示す情報の格納領域とを含むディスクリプタを発行する第１の回路と、前記送信処理の許可を示す情報を含むディスクリプタに基づいてパケットの送信処理を行う第２の回路との間に配置されるパケットシェーピング装置において、
前記第１の回路で生成された前記ディスクリプタをバッファに格納し、
パケットが送出される通信媒体の通信速度に応じて、前記バッファに格納された前記ディスクリプタに関して前記格納領域に送信処理の許可を示す情報を設定するタイミングを調整する
ことを含むパケット送信間隔調整方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケットシェーピング装置に関する。
【背景技術】
【０００２】
ＩＰ（Internet Protocol）ネットワークの分野では、“マイクロバースト”と呼ばれ
る現象が知られている。マイクロバーストは、ミリ秒又はマイクロ秒単位の時間において、爆発的に通信データ量が増大する現象である。例えば、サーバのような計算機システムがネットワークに通信パケットを送信する場合において、５分単位の平均通信速度が数１０Ｍｂｐｓであるのに対して、１マイクロ秒〜１ミリ秒単位の平均通信速度では、通信媒体の速度である１Ｇｂｐｓや１０Ｇｂｐｓのような通信速度でデータが送出される現象が、マイクロバーストに相当する。
【０００３】
一般的に、建物内やキャンパス内のローカルエリアネットワーク（ＬＡＮ）は、ルータのような通信装置を介して、基幹網（Wide Area Network: ＷＡＮ）に接続される。ＷＡ
Ｎの通信速度は、ＬＡＮの通信速度に比べて遅い（例えば、１０分の１）ことが少なくない。例えば、ＬＡＮの通信速度が１Ｇｂｐｓであるのに対し、ＷＡＮの通信速度が１００Ｍｂｐｓであることがある。
【０００４】
上記したような環境下において、ＬＡＮとＷＡＮとを結ぶ通信装置には、ＬＡＮとＷＡＮとの通信速度の差を吸収するためのバッファが設けられている。しかし、マイクロバーストによって一時的に大量のパケットが通信装置に到達すると、バッファがオーバーフローし、パケットがロストする現象が発生し得る。
【０００５】
マイクロバーストに起因するパケットロストは数分周期（例えば５分平均）のネットワーク監視では検出することができない。また、マイクロ秒単位でのネットワーク監視は、データ量増大や監視処理能力不足により著しく困難である。このように、マイクロバーストの検出は著しく困難であった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００２−２８１０３９号公報
【特許文献２】特表２００３−５１０９０５号公報
【非特許文献】
【０００７】
【非特許文献１】"Transmission Timer Approach for Rate Based Pacing TCP with Hardware Support",  Katsushi Kobayashi, PFLDNet 2006, February 2006
【発明の概要】
【発明が解決しようとする課題】
【０００８】
マイクロバーストの発生は、計算機システムのパケット送信処理に起因する。現在の計算機システムでは、計算機システムで実行されるオペレーティングシステム（以下“ＯＳ”と表記）が、アプリケーションプログラム（以下、“アプリケーション”と表記）等の処理能力の向上のために、ネットワーク処理を数十パケットまとめて実行するようにスケジューリングされている。計算機システムに搭載されているネットワークデバイスは、ＯＳから受け取ったパケットを通信媒体の速度で連続的に送出する。
【０００９】
例えば、Ethernet（登録商標）での標準最大パケットサイズである１５００Byteのパケ
ットで５００Mbpsの通信速度を仮定する。このような仮定において、等間隔でパケットを送出するときのパケット間隔は２４マイクロ秒である。これに対し、現在一般的なＯＳの時刻精度（クロック周波数）は１ミリ秒程度、５年程前では１０ミリ秒程度である。このように、ＯＳの処理速度がパケット送信に要求される処理速度より著しく速く、さらに、数十のパケットの処理結果がまとめて出力されることがマイクロバーストの原因となっている。しかし、ＯＳがパケットをパケット毎に処理するような改変は現実的でなかった。
【００１０】
本発明の一態様は、マイクロバーストの発生を抑制する技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の一態様は、パケットの情報と、パケットの送信処理の許可又は禁止を示す情報とを含むディスクリプタを一時的に格納するバッファと、
パケットが送出される通信媒体の通信速度に応じて、前記バッファに格納された前記ディスクリプタに関して前記送信処理の許可を示す情報を設定するタイミングを調整する調整回路とを含み、
前記ディスクリプタを生成する第１の回路と、前記送信処理の許可を示す情報が設定されたディスクリプタに基づく送信処理を行う第２の回路との間に配置される、
パケットシェーピング装置である。
【発明の効果】
【００１２】
本発明の一態様によれば、マイクロバーストの発生を抑制することが可能となる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施形態に係るパケットシェーピング装置が適用されるネットワークシステムの構成例を示す。
【図２】図２は、ネットワークインタフェースカード（ＮＩＣ）の構成例を示す。
【図３】図３は、送信ディスクリプタのデータ構造例を示す。
【図４】図４は、パケットシェーピング装置の構成例を示す。
【図５Ａ】図５Ａは、ドライバ（ＣＰＵ）からのWriteアクセス時におけるドライバ側のインタフェース回路の動作を示すフローチャートである。
【図５Ｂ】図５Ｂは、ドライバ（ＣＰＵ）からのReadアクセス時におけるドライバ側のインタフェース回路の動作を示すフローチャートである。
【図６Ａ】図６Ａは、ＭＡＣ側のインタフェース回路の動作を示すフローチャートである。
【図６Ｂ】図６Ｂは、ＭＡＣからのReadアクセス時における、ＭＡＣ側のインタフェース回路の動作を示すフローチャートである。
【図６Ｃ】図６Ｃは、ＭＡＣからのWriteアクセス時における、ＭＡＣ側のインタフェース回路の動作を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、図面を参照して本発明の実施形態について説明する。実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
【００１５】
＜＜全体構成＞＞
図１は、実施形態に係るパケットシェーピング装置が適用されるネットワークシステムの構成例を示す。図１において、計算機システム１は、ＬＡＮ（Local Area Network）２に接続されている。ＬＡＮ２は、通信装置３を介してＷＡＮ（Wide Area Network）４に
接続されている。通信装置３は、例えば、ルータ，レイヤ３スイッチ，ゲートウェイである。ＬＡＮ２は、通信媒体の一例である。
【００１６】
計算機システム１は、例えば、パーソナルコンピュータ（ＰＣ），ワークステーション（ＷＳ），サーバマシン、ＰＤＵ（Personal Digital Assistant）、スマートフォンのような、汎用又は専用のコンピュータ（情報処理装置）である。
【００１７】
計算機システム１は、バス１０に接続されたＣＰＵ１１，メモリ，ネットワークインタフェースカード（ＮＩＣ）１３を備えており、ＮＩＣ１３は、通信回線を介してＬＡＮ２と接続されている。バス１０は、システムバス，メモリバス，入出力バスを含む。バス１０として、ＰＣＩ（Peripheral Component Interconnect）バスを例示できる。
【００１８】
バス１０は、入力装置や出力装置のような周辺機器（周辺デバイス）を接続することができる。入力装置は、例えば、キーボードやマウスのようなポインティングデバイスである。出力装置は、ディスプレイ装置やプリンタである。周辺デバイスは、メモリ１２に対する補助記憶装置（図示せず）を含むことができる。補助記憶装置は、例えば、ＨＤＤ（Hard Disk Drive），ＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory），フラッシュメモリなどである。
【００１９】
メモリ１２は、ＲＡＭ（Random Access Memory）及びＲＯＭ（Read Only Memory）を含む。ＲＯＭは、ＣＰＵ１１によって実行されるＯＳ１４，デバイスドライバ１５（以下、単に“ドライバ１５”と表記），アプリケーションプログラム（以下、単に“アプリケーション”と表記）のような各種のプログラムを記憶する。
【００２０】
ＯＳ１４は、アプリケーションの実行によって生成されたデータをネットワーク（ＬＡＮ２，ＷＡＮ４）へ送信するためのパケットを生成する。デバイスドライバ１５は、ＮＩＣ１３のような周辺デバイスの操作や制御を司るプログラムである。
【００２１】
また、ＲＯＭは、プログラムの実行時に使用されるデータを記憶する。なお、プログラムや、プログラムの実行時に使用されるデータは、上述した補助記憶装置にて記憶することもできる。ＲＡＭは、ＣＰＵ１１の作業領域として使用される。ＲＡＭの記憶領域の一部は、ＣＰＵ１１によって生成されたパケットデータを一時的に格納しておくバッファ領域として使用される。
【００２２】
ＣＰＵ１１は、アプリケーションの実行を通じて送信対象のデータを生成する。また、ＣＰＵ１１は、ＯＳ１４の実行を通じて、生成されたデータを含むパケット（パケットデータ）を生成する。さらに、ＣＰＵ１１は、ドライバ１５の実行を通じて、パケットデータ及びパケットデータの制御情報をＮＩＣ１３へバス１０を介して転送する。
【００２３】
ＮＩＣ１３は、ネットワークデバイス、或いはネットワークインタフェースアダプタと呼ばれる、ネットワークとのインタフェース機能を司る装置（デバイス）である。ＮＩＣ１３は、ドライバ１５の実行によってＣＰＵ１１からバス１０を介して受け取るパケットデータの制御情報（送信パケットの制御情報：以下、“送信パケット情報”と表記）に従ってパケットの送信処理を行う。
【００２４】
＜＜ＮＩＣの構成＞＞
図２は、ＮＩＣ１３の構成例を示す。ＮＩＣ１３は、ＰＨＹ(Physical Layer Chip)１
３１と、ＭＡＣ（Media Access Controller）１３２と、パケットシェーピング装置（シ
ェーピング回路）１３０と、コネクタ１３４と、コネクタ１３５とを備える。
【００２５】
コネクタ１３４は、ＬＡＮケーブルのような通信ケーブルとの接続のためのコネクタである。但し、計算機システム１が無線ＬＡＮと接続される場合には、ＮＩＣ１３は、無線
ＬＡＮのアクセスポイントとの無線接続のためのＲＦ（Radio Frequency）回路及びアン
テナを備えることができる。
【００２６】
コネクタ１３５は、バス１０側のコネクタ１０Ａと接続される。コネクタ１３５とコネクタ１０Ａとの接続によって、ＮＩＣ１３は、ＣＰＵ１１及びメモリ１２とバス１０を介して電気的に接続された状態となる。
【００２７】
ＰＨＹチップ１３１は、パケットに対する物理層の処理（例えば、論理信号と電気信号との変換）を司る電子回路チップである。ＭＡＣ１３２は、データリンク層（レイヤ２）とドライバ１５（ＣＰＵ１１によるドライバ１５の実行による機能）との協調動作を行い、パケットの送信処理を行う。ＰＨＹ１３１，ＭＡＣ１３２は、例えば、特定用途向け集積回路（ＡＳＩＣ：Application Specific Integrated Circuit）によって実装される。
もっとも、ＰＨＹ１３１，ＭＡＣ１３２は、汎用の電気・電子回路（ＩＣ、ＬＳＩ）や、ＦＰＧＡ（Field Programmable Gate Array）の組合せによって実装することもできる。
【００２８】
パケットシェーピング装置１３０は、ドライバ１５（ＣＰＵ１１によるドライバ１５の実行による機能）と、ＭＡＣ１３２との間に介在し、本来、ドライバ１５（ＣＰＵ１１）とＭＡＣ１３２との間でやりとりされる送信パケット情報の受け渡しを制御する。すなわち、パケットシェーピング装置１３０は、ＭＡＣ１３２に対する送信パケット情報の供給間隔を制御することによって、ＮＩＣ１３からネットワーク（ＬＡＮ２）へ送出されるパケットの送出間隔を調整する。ＣＰＵ１１は、第１の回路の一例であり、ＭＡＣ１３２は、第２の回路の一例である。
【００２９】
ここに、ドライバ１５（ＣＰＵ１１）とＭＡＣ１３２との間の送信パケット情報の受け渡しは、“送信ディスクリプタ”と呼ばれる（単にディスクリプタとも呼ばれる）データ構造を介して行われる。図３は、送信ディスクリプタのデータ構造例を示す。ＣＰＵ１１は、メモリ１２のバッファ領域に格納されるパケットデータに対応する送信ディスクリプタ２０を生成（発行）する。
【００３０】
図３において、送信ディスクリプタ２０は、バッファ領域に格納されたパケットデータへのポインタの格納領域２１と、パケットのサイズ情報が格納される格納領域２２とを有する。また、送信ディスクリプタ２０は、パケットに対する処理内容（出力設定）が記述される格納領域２３と、送信ディスクリプタ２０に対するアクセス権を示すＯＷＮビットの格納領域２４とを有する。さらに、送信ディスクリプタ２０は、パケットの出力結果及び統計情報の格納領域２５を有する。
【００３１】
複数の格納領域のうち、格納領域２１〜２４に格納される情報（ポインタ、サイズ、出力設定など）は、ドライバ１５（ＣＰＵ１１）によって設定される。これに対し、格納領域２５に格納される情報（出力結果、統計情報）は、ＭＡＣ１３２によって設定される。
【００３２】
送信ディスクリプタ２０は、パケット毎に生成される。もっとも、一つのパケットデータに対して複数の送信ディスクリプタ２０が生成されることもある。
【００３３】
ＯＷＮビットは、送信ディスクリプタ２０に対するアクセス権がドライバ１５（ＣＰＵ１１）とＭＡＣ１３２とのどちらにあるかを規定する。すなわち、ＯＷＮビットが“０”のとき、送信ディスクリプタ２０へのアクセス権をドライバ１５（ＣＰＵ１１）が有すること（ＭＡＣ１３２はアクセス不可）を意味する。これに対し、ＯＷＮビットが“１”であれば、送信ディスクリプタ２０へのアクセス権をＭＡＣ１３２が有すること（ドライバ１５（ＣＰＵ１１）はアクセス不可）を示す。ＯＷＮビットは、“パケットの送信処理の許可又は禁止を示す情報”の一例である。
【００３４】
本実施形態では、送信ディスクリプタ２０の記憶領域は、パケットシェーピング装置１３０に設けられる。パケットシェーピング装置１３０は、ドライバ１５（ＣＰＵ１１）から受け取る送信ディスクリプタ２０のＯＷＮビットの値を適宜のタイミングで“１”に設定し、ＭＡＣ１３２へ供給する。
【００３５】
ＭＡＣ１３２は、ＯＷＮビット“１”が設定された送信ディスクリプタ２０を受け取った場合には、送信ディスクリプタ２０に設定された情報を用いてパケットの送信処理を行う。このとき、送信ディスクリプタ２０に含まれるポインタを用いて、バッファ領域に格納されたパケットデータにアクセスする。送信処理の終了に伴い、ＭＡＣ１３２は、送信処理の結果や統計情報を送信ディスクリプタ２０の格納領域２５に格納する。その後、送信ディスクリプタ２０は、パケットシェーピング装置１３０の記憶領域に格納され、ドライバ１５（ＣＰＵ１１）によって回収される。なお、ＭＡＣ１３２での送信処理を経たパケットは、ＰＨＹ１３１による処理を経てＬＡＮ２へ送出される。
【００３６】
ＭＡＣ１３２は、ＯＷＮビット“１”が設定された送信ディスクリプタ２０に対する送信処理を行い、ＯＷＮビット“０”が設定された送信ディスクリプタ２０に対しては送信処理を行わない。パケットシェーピング装置１３０は、ドライバ１５（ＣＰＵ１１）から受け取る送信ディスクリプタ２０のＯＷＮビットが“１”に設定されるタイミングを制御する。これによって、ＭＡＣ１３２の送信パケットの処理間隔、すなわち送信パケットの出力の間隔が制御される。送信パケットの出力の間隔制御を「パケットシェーピング」と呼ぶ。
【００３７】
＜＜パケットシェーピング装置の構成＞＞
前提として、送信ディスクリプタ２０を用いた一般的なドライバ１５（ＣＰＵ１１）とＭＡＣ１３２とのやりとりについて説明する。一般に、複数の送信ディスクリプタ２０を格納する記憶領域（“ディスクリプタ記憶領域”と称する）は、メモリ１２のようなメモリ上に作成され、ドライバ１５（ＣＰＵ１１）とＭＡＣ１３２との間で共用される。
【００３８】
すなわち、ドライバ１５（ＣＰＵ１１）によるメモリアクセス（送信ディスクリプタ２０の書き込み（Write）要求）により、送信ディスクリプタ２０がディスクリプタ記憶領
域に書き込まれる。ディスクリプタ記憶領域は、一般にＦＩＦＯ（リングバッファ）構造を有し、複数の送信ディスクリプタ２０は、書き込み順でディスクリプタ記憶領域に蓄積される。
【００３９】
一方、ＭＡＣ１３２は、ディスクリプタ記憶領域に対するメモリアクセス（読み出し（Read）要求）によって、ディスクリプタ記憶領域の先頭に格納された、ＯＷＮビット“１”を有する送信ディスクリプタ２０を読み出し、送信ディスクリプタ２０の内容に従った送信処理を行う。送信処理に使用された送信ディスクリプタ２０は、ＭＡＣ１３２のメモリアクセス（書き込み（Write）要求）によってディスクリプタ記憶領域に書き込まれる
。そして、ドライバ１５（ＣＰＵ１１）からのメモリアクセス（読み出し（Read）要求）によって、ディスクリプタ記憶領域から送信ディスクリプタ２０が回収される。
【００４０】
パケットシェーピング装置１３０は、上述した送信ディスクリプタ２０のディスクリプタ記憶領域として機能する。すなわち、ドライバ１５（ＣＰＵ１１）及びＭＡＣ１３２から見て、パケットシェーピング装置１３０は、上述したディスクリプタ記憶領域のように見えるように動作する。
【００４１】
図４は、パケットシェーピング装置１３０の構成例を示す。パケットシェーピング装置１３０は、電気・電子回路，ＩＣ，ＬＳＩ，ＡＳＩＣの組合せで実現することができる。
もっとも、パケットシェーピング装置１３０は、ハードウェアＦＩＦＯを内蔵したＦＰＧＡで実現するのが、製造容易性、製造コストの観点から好ましい。
【００４２】
図４において、パケットシェーピング装置１３０は、ドライバ側のインタフェース回路３１と、出力ＦＩＦＯ３２と、回収ＦＩＦＯ３３と、ＭＡＣ側のインタフェース回路３４と、を備えている。インタフェース回路３４は、ディスクリプタレジスタ３５と、出力帯域の記憶領域である出力帯域レジスタ３６と、次回出力時刻の記憶領域である次回出力時刻レジスタ３７と、現在時刻の記憶領域である現在時刻レジスタ３８とを有している。
【００４３】
ドライバ側のインタフェース回路３１は、ドライバ１５（ＣＰＵ１１）とバス１０を介して接続される。バス１０は、アドレスバス，データバス，制御バス（制御線）を含んでおり、インタフェース回路３１は、アドレスバスからのアドレス情報、データバスからのデータ，制御バスからの制御信号を受け取る。制御信号は、少なくとも読み出し（Read）要求及び書き込み（Write）要求を含む。
【００４４】
出力ＦＩＦＯ３２及び回収ＦＩＦＯ３３は、ディスクリプタ記憶領域として機能する。出力ＦＩＦＯ３２及び回収ＦＩＦＯ３３は、データバスを介してやりとりするデータのサイズに応じたサイズでメモリマップされ、通常のメモリアクセスと同様に、ドライバ１５（ＣＰＵ１１）及びＭＡＣ１３２がアクセスすることができる。すなわち、ドライバ１５に対し、送信ディスクリプタの書き込み時には出力ＦＩＦＯ３２のアドレスを指定し、送信ディスクリプタの回収時には回収ＦＩＦＯ３３のアドレスを指定するような設定が予め施される。出力ＦＩＦＯ３２はバッファの一例である。
【００４５】
出力ＦＩＦＯ３２には、ドライバ１５（ＣＰＵ１１）側から供給される送信ディスクリプタ２０を到着順で格納する。回収ＦＩＦＯ３３は、ＭＡＣ１３２による送信処理が終了したパケットに係る送信ディスクリプタ２０（以下、送信済みの送信ディスクリプタ２０を“送信済みディスクリプタ２０Ａ”と表記する）が格納される。
【００４６】
出力ＦＩＦＯ３２、回収ＦＩＦＯ３３の各データ幅は、送信ディスクリプタ２０のサイズと同一にするのが好ましい。また、出力ＦＩＦＯ３２及び回収ＦＩＦＯ３３の双方の深さ（ＦＩＦＯ長）は同一に設定され、ＦＩＦＯ３２及び３３の深さがドライバ１５のディスクリプタバッファ長パラメータに設定される構成を採用することができる。ドライバ１５（ＣＰＵ１１）は、ディスクリプタバッファ長パラメータに従って、ＦＩＦＯがオーバーフローしないように、ＮＩＣ１３へ送る送信ディスクリプタ２０の数を制限する。従って、出力ＦＩＦＯ３２及び回収ＦＩＦＯ３３に蓄積される送信ディスクリプタ２０及び送信済みディスクリプタ２０Ａの総数は、出力ＦＩＦＯ３２又は回収ＦＩＦＯ３３の長さ以下となる。これによって、一方のＦＩＦＯがフルになることが抑えられる。
【００４７】
インタフェース回路３１は、ドライバ１５（ＣＰＵ１１）からの書き込み（Write）要
求に対して、ドライバ１５（ＣＰＵ１１）側から受け取る送信ディスクリプタ２０を出力ＦＩＦＯ３２に入力する。これに対し、インタフェース回路３１は、ドライバ１５（ＣＰＵ１１）からの読み出し（Read）要求に対して、回収ＦＩＦＯ３３の先頭に格納された送信済みディスクリプタ２０Ａの内容を、ＯＷＮビットを除いて出力する。このとき、インタフェース回路３１は、独自に作成したＯＷＮビットを、本来のＯＷＮビットの代わりに出力する。
【００４８】
ＭＡＣ側のインタフェース回路３４は、ＭＡＣ１３２との間で、アドレス，データ，制御信号（Read命令、Write）命令のやりとりを行う。インタフェース回路３４に含まれる
ディスクリプタレジスタ３５は、出力ＦＩＦＯ３２の先頭に格納された送信ディスクリプタ２０を記憶する。但し、ディスクリプタレジスタ３５への送信ディスクリプタの書き込
みに際し、この時点で送信ディスクリプタ２０に設定されているＯＷＮビット２４の値は、ディスクリプタレジスタ３５に反映（コピー）されない。換言すれば、ディスクリプタレジスタ３５への書き込み時点におけるＯＷＮビット２４の値は“０”に設定される。
【００４９】
ディスクリプタレジスタ３５，出力帯域レジスタ３６，次回出力時刻レジスタ３７，現在時刻レジスタ３８は、レジスタ回路、或いは、メモリを用いて形成される。出力帯域レジスタ３６は、パケットの送信間隔を規定する情報である、出力帯域の情報を記憶する。出力帯域の情報は、外部からユーザ又はオペレータによって所望の値が書き込まれる。或いは、予め設定された出力帯域が書き込まれたメモリがセットされる。出力帯域は、ＬＡＮ２の通信速度に応じて決定される。ＬＡＮ２は、パケットが送出される通信媒体の一例である。
【００５０】
現在時刻レジスタ３８は、例えば、バス１０から計算機システム１のクロック供給を受けて、クロックを用いた現在時刻が格納される。もっとも、現在時刻レジスタ３８を構成する記憶領域の代わりに、現在時刻を計時する時計が配置されても良い。また、現在時刻レジスタ３８はカウンタ回路を用いて形成することもできる。
【００５１】
次回出力時刻レジスタ３７は、次回出力時刻、即ちディスクリプタレジスタ３５に格納された送信ディスクリプタ２０のアクセス権をＭＡＣ１３２に渡すことを許可する（ＭＡＣ１３２に送信処理を許可する）時刻が格納される、次回出力時刻は、出力帯域レジスタ３６に格納された出力帯域及びパケットサイズ（予め設定されている）から求められるパケットの送信間隔と、現在時刻レジスタ３８に格納された現在時刻とに基づき算出される。次回出力時刻は、所定の出力時刻の一例である。出力帯域の代わりに、パケットの送出間隔を示す情報が格納され、送出間隔に従って次回出力時刻が算出される構成を採用しても良い。
【００５２】
インタフェース回路３４は、現在時刻が次回出力時刻となった場合に、ディスクリプタレジスタ３５に格納された送信ディスクリプタ２０のＯＷＮビットを“１”に設定する。これによって、ＭＡＣ１３２は、ディスクリプタレジスタ３５に格納された送信ディスクリプタ２０に係るパケット送信処理が許可された状態となる。
【００５３】
インタフェース回路３４は、ＭＡＣ１３２からの読み出し（Read）要求に対して、ディスクリプタレジスタ３５に格納された送信ディスクリプタ２０の内容をＭＡＣ１３２に供給する。一方、インタフェース回路３４は、ＭＡＣ１３２からの書き込み（Write）要求
に対して、ＭＡＣ１３２から供給された送信済みディスクリプタ２０Ａの内容をディスクリプタレジスタ３５に書き込む。送信済みディスクリプタ２０Ａは、回収ＦＩＦＯ３３に書き込まれる。
【００５４】
＜＜パケットシェーピング装置の動作例＞＞
次に、図４に示したパケットシェーピング装置の動作例について説明する。図５Ａは、ドライバ１５（ＣＰＵ１１）からのWriteアクセス時におけるインタフェース回路３１の
動作を示すフローチャートである。図５Ｂは、ドライバ１５（ＣＰＵ１１）からのReadアクセス時におけるインタフェース回路３１の動作を示すフローチャートである。
【００５５】
図５Ａにおけるステップ（以下“Ｓ”）１では、インタフェース回路３１は、ドライバ１５（ＣＰＵ１１）から、Write要求と、送信ディスクリプタ２０と、送信ディスクリプ
タ２０の書き込み先アドレスとを、バス１０（図１）を介して受け取る。Ｓ２では、インタフェース回路３１は、アドレスに従って、送信ディスクリプタ２０を出力ＦＩＦＯ３２に入力する（書き込む）。
【００５６】
図５ＢにおけるＳ０１では、インタフェース回路３１は、ドライバ１５（ＣＰＵ１１）から、Read要求と、読み出しアドレスとを、バス１０（図１）を介して受け取る。Ｓ２では、インタフェース回路３１は、回収ＦＩＦＯ３３が空（empty）か否かを判定する。回
収ＦＩＦＯ３３が空であれば（Ｓ２のＹｅｓ）、インタフェース回路３１は、ＯＷＮビットの値を“１”に設定し、残りの格納領域２１〜２３及び２５については“Don't care”で出力する（Ｓ３）。この場合、ドライバ１５（ＣＰＵ１１）は、特に処理を行わない。
【００５７】
これに対し、回収ＦＩＦＯ３３が空でない場合には（Ｓ２のＮｏ）、インタフェース回路３１は、回収ＦＩＦＯ３３の先頭に格納された送信済みディスクリプタ２０Ａの内容を読み出し、ＯＷＮビットの値を“０”に設定して出力する。これによって、送信済みディスクリプタ２０Ａがドライバ１５（ＣＰＵ１１）によって回収される。
【００５８】
図６Ａは、インタフェース回路３４の動作を示すフローチャートである。図６Ａに示す処理は、インタフェース回路３４は、現在時刻レジスタ３８の現在時刻を監視し（Ｓ１１）、現在時刻が次回出力時刻以降となったか否かを判定する（Ｓ１２）。
【００５９】
現在時刻が次回出力時刻以降となっている場合には（Ｓ１２のＹｅｓ）、ＭＡＣ１３２に対する割り込みを入れて、ＭＡＣ１３２による送信処理（ＭＡＣ１３２のディスクリプタアクセス）を開始させる（Ｓ１３）。なお、初期状態の次回出力時刻（次回出力時刻の初期値）として、適宜の値を設定することができる。もっとも、例えば、計算機システム１の起動時の時刻を設定しておくのが好ましい。
【００６０】
図６Ｂは、ＭＡＣ１３２からのReadアクセス時におけるインタフェース回路３４の動作を示すフローチャートである。図６Ｂの処理は、Ｓ１３の割り込み指示に応じて開始される。さらに、図６Ｂの処理は、周期的に開始される。
【００６１】
図６ＢにおけるＳ２１では、インタフェース回路３４は、ＭＡＣ１３２から、Read要求と、読み出しアドレスとを受け取る。
【００６２】
Ｓ２２では、インタフェース回路３４は、出力ＦＩＦＯ３２が空（empty）か否かを判
定する。出力ＦＩＦＯ３２が空であれば（Ｓ２２のＹｅｓ）、インタフェース回路３４は、ＯＷＮビットが“０”であり、残りの格納領域が“Don't care”に設定された送信ディスクリプタ２０をＭＡＣ１３２に供給する。この場合、ＭＡＣ１３２は特に処理を行わない。
【００６３】
これに対し、出力ＦＩＦＯ３２が空でなければ（Ｓ２２のＮｏ）、インタフェース回路３４は、現在時刻が次回出力時刻より前であるかを判定する（Ｓ２３）。このとき、現在時刻が次回出力時刻より前であれば（Ｓ２３のＹｅｓ）、インタフェース回路３４は、Ｓ２３と同様の処理を行う（Ｓ２５）。この場合にも、ＭＡＣ１３２は、特に処理を行わない。
【００６４】
これに対し、現在時刻が次回出力時刻以降であれば（Ｓ２３のＮｏ）、インタフェース回路３４は、ディスクリプタレジスタ３５に格納された送信ディスクリプタ２０におけるＯＷＮビットの値を“１”に設定し、ＭＡＣ１３２に供給する（Ｓ２６）。これによって、ＯＷＮビット“１”の送信ディスクリプタ２０をＭＡＣ１３２が受け取り、ＭＡＣ１３２は、送信ディスクリプタ２０の内容に応じた送信処理を実行する。
【００６５】
図６Ｃは、ＭＡＣ１３２からのWriteアクセス時におけるインタフェース回路３４の動
作を示すフローチャートである。Ｓ３１にて、インタフェース回路３４は、ＭＡＣ１３２から送信済みディスクリプタ２０Ａ，書き込み先アドレス，及びWrite要求を受け取る。
送信済みディスクリプタ２０Ａは、ディスクリプタレジスタ３５に格納される。
【００６６】
Ｓ３２では、インタフェース回路３４は、ディスクリプタレジスタ３５に格納された送信済みディスクリプタ２０ＡのＯＷＮビットが“０”に設定されているかを確認する。ここに、ＯＷＮビットの“０”の設定は、ＭＡＣ１３２とインタフェース回路３４の一方が行うことができる。
【００６７】
ＯＷＮビット“０”が設定されている場合には（Ｓ３２のＹｅｓ）、インタフェース回路３４は、ディスクリプタレジスタ３５の記憶内容を回収ＦＩＦＯ３３に入力する（Ｓ３３）。なお、この時点では、ディスクリプタレジスタ３５の記憶内容の変化はない。
【００６８】
Ｓ３４では、インタフェース回路３４は、次回出力時刻の算出を行う。例えば、インタフェース回路３４は、以下の式に基づき、次回出力時刻を算出することができる。
【００６９】
＜式＞  次回出力時刻＝（パケットサイズ／出力帯域）＋現在時刻
なお、上記式におけるパケットサイズは、ＬＡＮ２に応じた最大パケットサイズ（ＮｉＣ１３の規格に応じた最大パケットサイズ）を適用しても良く、或いは、出力ＦＩＦＯ３２の先頭に格納された送信ディスクリプタ２０におけるパケットサイズを適用しても良い。
【００７０】
Ｓ３５では、出力ＦＩＦＯ３２の先頭に格納された送信ディスクリプタ２０の内容をディスクリプタレジスタ３５に設定する（送信ディスクリプタ２０を移動）。但し、出力ＦＩＦＯ３２において設定されていたＯＷＮビットの値は、ディスクリプタレジスタ３５にて反映されない（“０”又は“１”以外の値に設定される）。
【００７１】
＜実施形態の作用効果＞
実施形態によるパケットシェーピング装置１３０によれば、現在時刻が次回出力時刻以降となるまで、ＭＡＣ１３２によるディスクリプタレジスタ３５に格納された送信ディスクリプタ２０のアクセスが許可されない。したがって、ＭＡＣ１３２によるパケットの送信処理の間隔（即ち、パケットの送出間隔）を、ＬＡＮ２の通信速度（パケットが送出される通信媒体の通信速度）に応じた所望の間隔に設定することができる。これによって、マイクロバーストの発生が抑えられ、通信装置３のバッファがオーバーフローし、パケットロストが抑えられる。
【００７２】
また、実施形態によれば、送信ディスクリプタ２０のデータ構造には改変を加えない。このため、ＭＡＣを含むネットワークデバイスとして、送信ディスクリプタ対応の既存のネットワークデバイスＬＳＩを適用することができる。従って、新規なネットワークデバイスＬＳＩを開発する場合に比べて、開発及び製造コストを抑えることができる。
【００７３】
また、パケットシェーピング装置１３０は、ＦＰＧＡを用いて実装することができる。このため、パケットシェーピング装置１３０の製造コストを抑えることができる。さらに、ソフトウェアに関しても、ドライバ１５に対する部分的な改変で、パケットシェーピング装置の実装が可能となる。ドライバ１５の改変は、送信ディスクリプタ２０の書き込み先として、計算機システム１のメモリ１２ではなく出力ＦＩＦＯ３２を指定することに限定されている。このため、オリジナルのドライバが更新されても、パケットシェーピング装置１３０対応のドライバ１５を短時間で作成することができる。従って、例えば、セキュリティ問題によりドライバが更新された場合に、更新されたオリジナルのドライバにわずかな改変を加えることで、セキュリティ問題が解決した新たなドライバを短時間で供給することが可能となる。
【００７４】
さらに、ソフトウェアの改変は、ＯＳのドライバ部分に限られるため、改変によってＯＳ本体のベンダによるサポートが無効にならない。このことは、顧客のＯＳサポートをＯＳのベンダに委ねることができることを意味する。これによって、ＯＳのサポートに係るコストを削減することができる。
【００７５】
＜変形例＞
なお、本実施形態では、パケットシェーピング装置１３０がＮＩＣ１３に実装された例について示したが、計算機システム１のメイン基板（マザーボード）に実装されても良い。要は、ドライバ１５（ＣＰＵ１１）からの送信ディスクリプタ２０（ＯＷＮビット“１”）をＭＡＣに供給するタイミングを、通信媒体の通信速度（出力帯域）に応じて調整できるようになっていれば良い。
【００７６】
また、パケットシェーピング装置１３０がプロセッサ（制御装置）及びメモリを含み、上述した各フローチャートに示した処理が、プロセッサのプログラム実行によるソフトウェア処理によって実現されるようにしても良い。
【００７７】
＜その他＞
上述した実施形態は、以下の付記を開示する。付記は適宜組み合わせることができる。
【００７８】
（付記１）
パケットの情報と、パケットの送信処理の許可又は禁止を示す情報とを含むディスクリプタを一時的に格納するバッファと、
パケットが送出される通信媒体の通信速度に応じて、前記バッファに格納された前記ディスクリプタに関して前記送信処理の許可を示す情報を設定するタイミングを調整する調整回路とを含み、
前記ディスクリプタを生成する第１の回路と、前記送信処理の許可を示す情報が設定されたディスクリプタに基づく送信処理を行う第２の回路との間に配置される、
パケットシェーピング装置。
【００７９】
（付記２）
前記調整回路は、現在時刻が所定の出力時刻以降になった場合に、前記ディスクリプタに前記送信処理の許可を示す情報を設定する
付記１に記載のパケットシェーピング装置。
【００８０】
（付記３）
前記調整回路は、現在時刻と、パケットサイズと、出力帯域とに基づいて次回出力時刻を算出する
付記２に記載のパケットシェーピング装置。
【００８１】
（付記４）
第１の回路で生成された、パケットの情報と、パケットの送信処理の許可又は禁止を示す情報とを含むディスクリプタを一時的に格納するバッファと、
前記バッファに格納された前記ディスクリプタに対して、前記送信処理の許可を示す情報を設定するタイミングを調整する調整回路と、
前記送信処理の許可を示す情報が設定されたディスクリプタに基づく送信処理を行う第２の回路と
を含むネットワークインタフェースカード。
【００８２】
（付記５）
第１の回路で生成された、パケットの情報と、パケットの送信処理の許可又は禁止を示
す情報とを含むディスクリプタを生成する第１の回路と、
前記第１の回路で生成された、パケットの情報と、パケットの送信処理の許可又は禁止を示す情報とを含むディスクリプタを一時的に格納するバッファ，及び前記バッファに格納された前記ディスクリプタに対して、前記送信処理の許可を示す情報を設定するタイミングを調整する調整回路を含むパケットシェーピング装置と、
前記送信処理の許可を示す情報が設定されたディスクリプタに基づく送信処理を行う第２の回路と
を含む情報処理装置。
【００８３】
（付記６）
パケットの情報と、パケットの送信処理の許可又は禁止を示す情報とを含むディスクリプタを発行する第１の回路と、前記送信処理の許可を示す情報を含むディスクリプタに基づいてパケットの送信処理を行う第２の回路との間に配置されるパケットシェーピング装置において、
前記第１の回路で生成された前記ディスクリプタをバッファに格納し、
パケットが送出される通信媒体の通信速度に応じて、前記バッファに格納された前記ディスクリプタに関して前記送信処理の許可を示す情報を設定するタイミングを調整する
ことを含むパケット送信間隔調整方法。
【符号の説明】
【００８４】
１・・・計算機システム（情報処理装置）
２・・・ＬＡＮ（通信媒体）
１０・・・バス
１１・・・ＣＰＵ（第１の回路）
１２・・・メモリ
１３・・・ネットワークインタフェースカード（ＮＩＣ）
１４・・・オペレーティングシステム
１５・・・デバイスドライバ
３１，３４・・・インタフェース回路
３２・・・出力ＦＩＦＯ
３３・・・回収ＦＩＦＯ
３５・・・ディスクリプタレジスタ
１３０・・・パケットシェーピング装置
１３２・・・メディアアクセスコントローラ（ＭＡＣ）（第２の回路）
【図１】
0005821608.tif 000002
【図２】
0005821608.tif 000003
【図３】
0005821608.tif 000004
【図４】
0005821608.tif 000005
【図５Ａ】
0005821608.tif 000006
【図５Ｂ】
0005821608.tif 000007
【図６Ａ】
0005821608.tif 000008
【図６Ｂ】
0005821608.tif 000009
【図６Ｃ】
0005821608.tif 000010