(57)【要約】【課題】バッファメモリの入力側のデータスループットが低く且つ変動し、出力側のデータスループットが高く且つ一定の場合、バッファアンダーランを防止する。【解決手段】バッファメモリ１の入力側のデータスループットを測定して、そのデータスループットが低下したときに、バッファメモリ１からのデータ出力の読み出しを開始すべき使用メモリ容量（閾値）を増大させ、上昇したときに減少させる。【選択図】図１
2007194791.tif 000002
【特許請求の範囲】
【請求項１】
受信したデータを一旦バッファメモリに入力して蓄積してから、該バッファメモリから出力して送出するデータ転送装置において、
前記バッファメモリの使用メモリ容量が閾値を上回ったときに前記バッファメモリからのデータ出力を許可する出力制御装置と、前記バッファメモリの入力側のデータスループットを測定するスループット測定装置と、該スループット測定装置で測定した入力側のデータスループットが低くなると前記閾値を増大させ高くなると減少させる閾値設定装置と、を有することを特徴とするデータ転送装置。
【請求項２】
受信したデータを一旦バッファメモリに入力して蓄積してから、該バッファメモリから出力して送出するデータ転送装置において、
前記バッファメモリの使用メモリ容量が閾値を下回ったときに前記バッファメモリへのデータ入力を許可する入力制御装置と、前記バッファメモリの出力側のデータスループットを測定するスループット測定装置と、該スループット測定装置で測定した出力側のデータスループットが低くなると前記閾値を減少させ高くなると増大させる閾値設定装置と、を有することを特徴とするデータ転送装置。
【請求項３】
メモリの一部の記憶容量をバッファメモリに割り当て、受信したデータを該バッファメモリに一旦入力して蓄積し、該バッファメモリに割り当てられた記憶容量の使用量が閾値を上回ったときに該バッファメモリからのデータ出力が許可されるデータ転送装置において、
前記バッファメモリの入力側のデータスループットを測定するスループット測定装置と、該スループット測定装置で測定した入力側のデータスループットが低くなると前記バッファメモリに割り当てる記憶容量を増大させ高くなると減少させる容量制御装置と、を有することを特徴とするデータ転送装置。
【請求項４】
メモリの一部の記憶容量をバッファメモリに割り当て、受信したデータを該バッファメモリに一旦入力して蓄積し、該バッファメモリに割り当てられた記憶容量の使用量が閾値を下回ったときに該バッファメモリからのデータ出力が許可されるデータ転送装置において、
前記バッファメモリの出力側のデータスループットを測定するスループット測定装置と、該スループット測定装置で測定した出力側のデータスループットが低くなると前記バッファメモリに割り当てる記憶容量を増大させ高くなると減少させる割当容量制御装置と、を有することを特徴とするデータ転送装置。
【請求項５】
前記バッファメモリからのデータ出力を一定のデータスループットで行うことを特徴とする請求項１又は３記載のデータ転送装置。
【請求項６】
前記バッファメモリへのデータ入力を一定のデータスループットで行うことを特徴とする請求項２又は４記載のデータ転送装置。
【請求項７】
前記スループット測定装置は、複数回の測定から得た平均データスループットを出力することを特徴とする請求項１、２，３，又は４記載のデータ転送装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、受信したデータを一旦バッファメモリに入力して蓄積してから、該バッファメモリから出力して送出する際、バッファメモリからデータが溢れるバッファオーバーフローやバッファメモリのデータが空になるバッファアンダーランが起こらないような対策を施したデータ転送装置に関するものである。
【０００２】
例えばデータ転送装置において、書込みと読み出しを同時に行うことのできるＦＩＦＯ等のバッファメモリの出力側のデータスループット（転送速度）が入力側のそれよりも速く、且つある一定量のデータを連続して出力しなくてならない場合、通常では、バッファメモリにデータが当該一定量溜まってから出力することで、バッファアンダーランが発生しないようにしている。しかし、この方法では、バッファメモリに当該一定量のデータが完全に入力されてからデータ出力を開始するため、無駄な待ち時間が多くなる。
【０００３】
そこで、バッファメモリの読み出しが開始されるときの使用メモリ容量、つまり閾値を設定して、バッファメモリに蓄積されたデータがその閾値に達した時点でデータの出力を開始する方法がある。しかし、この方法では、入力側のデータスループットが変化するようなシステムにおいては、閾値が大きすぎるとやはり無駄な待ち時間が多くなって最適な効果が得られず、小さすぎるとバッファアンダーランが起こり、転送失敗が発生する。
【０００４】
一方、バッファメモリに蓄積される入力側のデータスループットを監視し、そのデータスループットが低いほどバッファメモリの内の割り当てメモリ容量を減少させる手法が提案されている（例えば、特許文献１参照。なお、この文献ではデータスループットを「パケット通信網のトラフィック状態」と表現）。この手法では、入力側のデータスループット低いときはバッファメモリの容量を減少させ、高いときは増大させることで、メモリ資源の有効利用を図ることができる。
【特許文献１】特開２００２−００９８２１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところが、特許文献１の技術は、入力側のデータスループットが低いときはバッファメモリの容量を小さくするので、出力側のデータスループットが高いときにバッファアンダーランが発生する恐れがある。
【０００６】
本発明の目的は、入力側もしくは出力側の一方のデータスループットが高く、他方のデータスループットが低い場合にも、バッファオーバーフローやバッファアンダーランが起こらないようにしたデータ転送装置を提供することである。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、請求項１にかかる発明は、受信したデータを一旦バッファメモリに入力して蓄積してから、該バッファメモリから出力して送出するデータ転送装置において、前記バッファメモリの使用メモリ容量が閾値を上回ったときに前記バッファメモリからのデータ出力を許可する出力制御装置と、前記バッファメモリの入力側のデータスループットを測定するスループット測定装置と、該スループット測定装置で測定した入力側のデータスループットが低くなると前記閾値を増大させ高くなると減少させる閾値設定装置と、を有することを特徴とする。
請求項２にかかる発明は、受信したデータを一旦バッファメモリに入力して蓄積してから、該バッファメモリから出力して送出するデータ転送装置において、前記バッファメモリの使用メモリ容量が閾値を下回ったときに前記バッファメモリへのデータ入力を許可する入力制御装置と、前記バッファメモリの出力側のデータスループットを測定するスループット測定装置と、該スループット測定装置で測定した出力側のデータスループットが低くなると前記閾値を減少させ高くなると増大させる閾値設定装置と、を有することを特徴とする。
請求項３にかかる発明は、メモリの一部の記憶容量をバッファメモリに割り当て、受信したデータを該バッファメモリに一旦入力して蓄積し、該バッファメモリに割り当てられた記憶容量の使用量が閾値を上回ったときに該バッファメモリからのデータ出力が許可されるデータ転送装置において、前記バッファメモリの入力側のデータスループットを測定するスループット測定装置と、該スループット測定装置で測定した入力側のデータスループットが低くなると前記バッファメモリに割り当てる記憶容量を増大させ高くなると減少させる容量制御装置と、を有することを特徴とする。
請求項４にかかる発明は、メモリの一部の記憶容量をバッファメモリに割り当て、受信したデータを該バッファメモリに一旦入力して蓄積し、該バッファメモリに割り当てられた記憶容量の使用量が閾値を下回ったときに該バッファメモリからのデータ出力が許可されるデータ転送装置において、前記バッファメモリの出力側のデータスループットを測定するスループット測定装置と、該スループット測定装置で測定した出力側のデータスループットが低くなると前記バッファメモリに割り当てる記憶容量を増大させ高くなると減少させる割当容量制御装置と、を有することを特徴とする。
請求項１又は３にかかる発明では、前記バッファメモリからのデータ出力を一定のデータスループットで行うことが望ましい。
請求項２又は４にかかる発明では、前記バッファメモリへのデータ入力を一定のデータスループットで行うことが望ましい。
また、請求項１乃至４にかかる発明では、前記スループット測定装置が、複数回の測定から得た平均データスループットを出力することが望ましい。
【発明の効果】
【０００８】
本発明によれば、バッファメモリの読み出しや書込みを開始する閾値、あるいはメモリ内でバッファメモリに割り当てる記憶容量を、出力側や入力側の「データスループットに応じて設定する」ので、バッファアンダーランやバッファオーバーフローの発生を効果的に回避できる。
【発明を実施するための最良の形態】
【０００９】
[第１の実施例]
図１は第１の実施例のデータ転送装置の構成を示す図であり、バッファメモリの入力側のデータスループットが低く且つ変動し、出力側のデータスループットが高く且つ一定の場合に適用する実施例であり、バッファアンダーランの防止に好適な実施例である。
【００１０】
１は書込み／読み出しが同時に可能なＦＩＦＯ等のバッファメモリ、２はバッファメモリ１の入力側のデータスループットを測定するスループット測定装置である。３は閾値設定装置であり、スループット測定装置２で測定されたデータスループットを表す一定時間当りのデータ量Ｄ１と、連続して転送しなくてはならないデータ量Ｄ２と、出力側のデータスループットを示す一定時間当りのデータ量Ｄ３とを取り込んで、バッファメモリ１の閾値Ａ１（使用メモリ容量）を設定する。４は出力制御装置であり、閾値設定装置３で得られた閾値Ａ１とバッファメモリ１のライトポインタで示される現在の使用メモリ容量Ａ２とを比較して、Ａ１＜Ａ２になったとき、バッファメモリ１の読み出し開始指令Ｋ１を出力する。
【００１１】
スループット測定装置２は、図２に示すように、一定時間内に受信するデータ量Ｄ１をカウントするデータカウンタ２ａと該一定時間を設定するタイマーカウンタ２ｂから構成されている。このスループット測定装置２には、複数回測定したデータスループット（データ量Ｄ１）の平均値を出力させる機構を持たせても良い。平均値を採用することで閾値の急激な変化による転送エラーを防ぐことが出来る。
【００１２】
閾値設定装置３における閾値Ａ１は、
Ａ１＝（Ｄ３−Ｄ１）×Ｄ２／Ｄ３                      (1)
から求めることできる。Ｄ３＞Ｄ１が前提である。例えば、ＰＣＩバスからバッファメモリ１に入力されるデータを、５１２byte（Ｄ２＝５１２）のデータを連続転送しなければならないＵＳＢパケットとして出力する場合を考える。ＵＳＢへの転送速度が４８０Mbps（６０Mbyte/sec）と高速で、それに比較してＰＣＩバスからのデータレートが低速な場合を例とする。スループット測定装置２のカウント用のクロックＣＬＫにバッファメモリ１の読み出しクロックを用い、タイマーカウンタ２ｂのカウント値を「２５６」（一定時間に相当）とする。出力側には１ＣＬＫあたり１byteが出力されるとすると２５６ＣＬＫ中に出力されるデータ量は２５６byte（Ｄ３＝２５６）である。入力側からは２５６ＣＬＫ中に１００byte（Ｄ１＝１００）入力されたとすると、閾値Ａ１は(1)式から、
Ａ１＝（２５６−１００）×５１２／２５６
＝１５６×２＝３１２byte
として求められる。つまりバッファメモリ１が３１２byte分だけ使用された（書き込まれた）時点で読み出しが開始する。これにより、バッファメモリ１のバッファアンダーランの発生を回避できる。実際はこの閾値Ａ１にマージンを持たせてより大きくするとより安全である。
【００１３】
[第２の実施例]
図３は第２の実施例のデータ転送装置の構成を示す図であり、入力側のデータスループットが高く且つ一定であり、出力側のデータスループットが低く変動する場合に適用する実施例であり、バッファオーバーフローの防止に好適な実施例である。
【００１４】
１１は書込み／読み出しが同時に可能なＦＩＦＯ等のバッファメモリ、１２はバッファメモリ１１の出力側のデータスループットを測定するスループット測定装置（図２と同じ構成）である。１３は閾値設定装置であり、スループット測定装置１２で測定されたデータスループットを表す一定時間当りのデータ量Ｄ１１と、連続して転送しなくてはならないデータ量Ｄ１２と、入力側のデータスループットを示す一定時間当りのデータ量Ｄ１３とを取り込んで、バッファメモリ１１の閾値Ａ１１を設定する。１４は入力制御装置であり、閾値設定装置１３で得られた閾値Ａ１１とバッファメモリ１１のリードポインタで示される使用メモリ容量Ａ１２（残データ量）とを比較して、Ａ１１＞Ａ１２になったとき、バッファメモリ１１に書込み開始指令Ｋ１１を出力する。
【００１５】
この場合、入力側からＤ１２の量のデータが連続して入力される間に、バッファメモリ１１に蓄積されるデータ量は、次に(2)式で示されるＡ１２だけ増大する。
Ａ１２＝（Ｄ１３−Ｄ１１）×Ｄ１２／Ｄ１３                (2)
【００１６】
ここで、Ｄ１３＞Ｄ１１が条件である。
従って、バッファメモリ１１の全体の容量をＡ１３とすると、閾値設定装置１３は、次の式によって閾値Ａ１１を設定する。
Ａ１１＝Ａ１３−Ａ１２                                    (3)
この場合にも、実際にはこの閾値Ａ１１にマージンを持たせてより小さくするとより安全である。
【００１７】
[第３の実施例]
図４は第３の実施例のデータ転送装置の構成を示す図であり、入力側のデータスループットが低く且つ変動し、出力側のデータスループットが高く且つ一定の場合に適用する実施例であり、バッファアンダーランの防止に好適な実施例である。
【００１８】
２１は書込み／読み出しが同時に可能なメモリであり、その内の特定の記憶容量をデータ転送用のバッファメモリ２１ａとして割り当てたものである。２２はバッファメモリ２１の入力側のデータスループットを測定するスループット測定装置（図２と同じ構成）である。２３は容量制御装置であり、スループット測定装置２２で測定されたデータスループットを表す一定時間当りのデータ量Ｄ１と、連続して転送しなくてはならないデータ量Ｄ２と、送出側のデータスループットを示す一定時間当りのデータ量Ｄ３とを取り込んで、メモリ２１内でバッファメモリ２１ａ用として割り当てる記憶容量を設定する。
【００１９】
容量制御装置２３は、例えば、第１の実施例の式(1)によって求めた値に一定の安全率をかけた容量を、バッファメモリ２１ａの記憶容量として割り当てる。容量制御装置２３は、また、メモリ２１の中に開始アドレスＡＤ２１と終了アドレスＡＤ２２とを設定し、この間の記憶容量をバッファメモリ２１ａとして割り当てるものであってもよい。２４は出力制御装置である。本実施例において出力制御装置２４は、第１の実施例における閾値設定装置３と出力制御装置４とを合わせたような機能を有する。例えば、容量制御装置２３が設定した終了アドレスＡＤ２２を考慮して、閾値アドレスＡＤ２３を設定する。そして、この閾値アドレスＡＤ２３と、ライトポインタで示される現在の使用メモリアドレスＡＤ２４と比較し、ＡＤ２３＜ＡＤ２４になったとき、バッファメモリ２１ａに読み出し開始命令Ｋ２１を出力する。ここで例えば、終了アドレスＡＤ２２から一定値を減じることによって閾値アドレスＡＤ２３を設定することができる。この場合、実効的には、開始アドレスＡＤ２１から閾値アドレスＡＤ２３までの間の記憶容量を閾値とし、バッファメモリ２１ａに割り当てられた記憶容量の使用量がこの閾値を上回ったときに、読み出し開始命令Ｋ２１が出されることになる。
【００２０】
本実施例では、図１の第１の実施例と同様に、出力データとして一定データ量Ｄ２を連続して出力しなければならず、且つ入力側のデータスループット（一定時間当りのデータ量Ｄ１）が出力側よりも低く且つ安定しない場合に、メモリ３１に割り当てるデータ転送用のバッファメモリ２１ａの記憶容量を、入力側のデータスループットが低いときは大きくし、高いときは小さくすることで、バッファメモリ２１ａに割り当てる記憶容量を必要以上に大きくすることなく、バッファアンダーランの発生を回避できる。
【００２１】
[第４の実施例]
図５は第４の実施例のデータ転送装置の構成を示す図であり、入力側のデータスループットが高く且つ一定であり、出力側のデータスループットが低く変動する場合に適用する実施例であり、バッファオーバーフローの防止に好適な実施例である。
【００２２】
３１は書込み／読み出しが同時に可能なメモリであり、その内の特定の記憶容量をデータ転送用のバッファメモリ３１ａとして割り当てたものである。３２はバッファメモリ３１の出力側のデータスループットを測定するスループット測定装置（図２と同じ構成）である。３３は容量制御装置であり、スループット測定装置３２で測定されたデータスループットを表す一定時間当りのデータ量Ｄ１１と、連続して転送しなくてはならないデータ量Ｄ１２と、入力側のデータスループットを示す一定時間当りのデータ量Ｄ１３とを取り込んで、バッファメモリ３１ａにデータ転送用として割り当ててる記憶容量を設定する。
【００２３】
容量制御装置３３は、例えば、第２の実施例の式(2)によって求めた値に一定の安全率をかけた容量を、バッファメモリ３１ａの記憶容量として割り当てる。容量制御装置３３は、また、メモリ３１の中に開始アドレスＡＤ３１と終了アドレスＡＤ３２とを設定し、この間の記憶容量をバッファメモリ３１ａとして割り当てるものであってもよい。３４は入力制御装置である。本実施例において入力制御装置３４は、第２の実施例における閾値設定装置１３と入力制御装置１４とを合わせたような機能を有する。例えば、容量制御装置３３が設定した開始アドレスＡＤ３１を考慮して、閾値アドレスＡＤ３３を設定する。そして、この閾値アドレスとリードポインタで示される現在の使用メモリアドレスＡＤ３４と比較し、ＡＤ３３＞ＡＤ３４になったとき、バッファメモリ３１ａに書き込み開始命令Ｋ３１を出力する。ここで例えば、開始アドレスＡＤ３１に一定値を加算することによって閾値アドレスＡＤ３３を設定することができる。この場合、実効的には、開始アドレスＡＤ３１から閾値アドレスＡＤ３３までの間の記憶容量を閾値とし、バッファメモリ３１ａに割り当てられた記憶容量の使用量がこの閾値を下回ったときに、書込み開始命令Ｋ３１が出されることになる。
【００２４】
本実施例では、図３の第２の実施例と同様に、入力データとして一定データ量Ｄ１２を連続して入力しなければならず、且つ出力側のデータスループット（一定時間当りのデータ量Ｄ１１）が入力側よりも低く且つ安定しない場合に、メモリ３１に割り当てるデータ転送用のバッファメモリ３１ａの記憶容量を、出力側のデータスループットが低いときは大きくし、高いときは小さくすることで、バッファメモリ３１ａに割り当てられる記憶容量を必要以上に大きくすることなく、バッファオーバーフローの発生を回避できる。
【００２５】
[その他の実施例]
なお、第１の実施例ではバッファメモリ１の使用メモリ容量に対して閾値を設定し、使用メモリ容量がその閾値を上回ったときにデータ読み出しを開始させるようにしたが、バッファメモリ１の未使用メモリ容量に対して閾値を設定し、未使用メモリ容量がその閾値を下回ったときにデータ読み出しを開始させるようにしても良い。これらは、バッファメモリの記憶容量が一定の場合は等価である。第２〜第４の実施例についても同様である。
【００２６】
また、第１の実施例ではバッファメモリ１の使用メモリ容量が閾値と等しくなったときにはまだデータ読み出しを開始させず、閾値を上回ったときに開始させるようにした。しかし、閾値の設定を適切に行うことにより、閾値と等しくなったときにデータ読み出しを開始させるようにすることも可能である。第２〜第４の実施例についても同様である。
【図面の簡単な説明】
【００２７】
【図１】本発明の第１の実施例のデータ転送装置のブロック図である。
【図２】図１のスループット測定装置のブロック図である。
【図３】本発明の第２の実施例のデータ転送装置のブロック図である。
【図４】本発明の第３の実施例のデータ転送装置のブロック図である。
【図５】本発明の第４の実施例のデータ転送装置のブロック図である。
【符号の説明】
【００２８】
２１，３１：メモリ
１，１１，２１ａ，３１ａ：バッファメモリ
２，１２，２２、３２：スループット測定装置、２ａ：データカウンタ、２ｂ：タイマカウンタ
３，１３：閾値設定装置
２３，３３：割当容量制御装置
４，２４：出力制御装置
１４，３４：入力制御装置
【図１】
2007194791.tif 000003
【図２】
2007194791.tif 000004
【図３】
2007194791.tif 000005
【図４】
2007194791.tif 000006
【図５】
2007194791.tif 000007