(57)【要約】【課題】長いパケットでも、バッファメモリ容量が小さくてすむパケット転送装置および方法を提供。【解決手段】中央処理装置201とメインメモリ310の間にメインメモリより高速に動作するバッファメモリ311を設け、これには、中央処理装置201がアクセスして、パケットのヘッダ部のみを格納する。受信したパケットのデータ部は、低速のメモリからなるメインメモリ310に保持される。メインメモリ310には、パケット種別に応じた大きさのバッファ領域を確保することができる。これにより、メモリアクセスタイムの改善と、ヘッダ部のみの格納によるメモリ容量の少量化を図る。【選択図】図１
2009088622.tif 000002
【特許請求の範囲】
【請求項１】
中央処理装置とメインメモリとの間にあるバッファメモリを有するバッファメモリ装置において、該バッファメモリ装置は、
受信したパケットデータの先頭からの一部分を前記バッファメモリに格納し、残りの部分をメインメモリ装置に格納するため前記メインメモリに転送する機能を有し、
前記バッファメモリ上の前記先頭からの一部分は、前記中央処理装置によってアクセスされ分析、加工、更新または転送制御の処理に使用されることを特徴とするバッファメモリ装置。
【請求項２】
請求項1に記載のバッファメモリ装置において、前記パケットデータの前記先頭からの一部分は、パケットのヘッダ部であることを特徴とするバッファメモリ装置。
【請求項３】
請求項1に記載のバッファメモリ装置において、該装置は、前記バッファメモリへの制御を行うコントロール部を含み、
前記バッファメモリは、該コントロール部の指示に基づき、前記パケットデータの前記先頭からの一部分を格納するための第１の領域を確保し、さらに、第１の領域に前記パケットデータの前記先頭からの一部分を格納することを特徴とするバッファメモリ装置。
【請求項４】
請求項3に記載のバッファメモリ装置において、第１の領域は、前記受信したパケットの種別に応じてパケット種別毎に予め定められた容量が割り当てられることを特徴とするバッファメモリ装置。
【請求項５】
請求項3に記載のバッファメモリ装置において、第１の領域は、前記受信したパケットの種別毎に該パケット内の予め定められたフィールドに関連付けられる属性を用いて算出された容量が割り当てられることを特徴とするパケット転送装置。
【請求項６】
請求項3に記載のバッファメモリ装置において、第１の領域は、前記中央処理装置が第１の領域をアクセスし、前記パケットデータの前記先頭からの一部分に存在する情報を処理中に情報が不足した場合、前記受信したパケットの種別毎に該パケット内の予め定められたフィールドに関連付けられる属性を用いて容量が算出され、該容量を動的に増量することを特徴とするバッファメモリ装置。
【請求項７】
請求項3に記載のバッファメモリ装置において、該装置は、前記中央処理装置が第１の領域をアクセスし、前記パケットデータの前記先頭からの一部分に存在する情報を処理中に情報が不足し更なる情報が必要な場合、前記メインメモリから前記バッファメモリへ該更なる情報を含むデータを転送するプリフェッチを行うことを特徴とするバッファメモリ装置。
【請求項８】
請求項7に記載のバッファメモリ装置において、該装置は、初期状態、前記バッファメモリの割り当て済み状態、前記プリフェッチ後の状態、および前記バッファメモリにデータが書込み済みの状態の４状態で管理されることを特徴とするバッファメモリ装置。
【請求項９】
請求項8に記載のバッファメモリ装置において、該装置はさらに、前記メインメモリに領域が確保されたが前記バッファメモリには領域を確保していない状態を含む５状態で管理されることを特徴とするバッファメモリ装置。
【請求項１０】
第１のネットワークから受信したヘッダ部およびデータ部を含むパケットデータを第２のネットワークに転送するパケット転送装置において、該転送装置は、
第１のネットワークと受信制御を行うとともに、前記受信したパケットデータを一時的に保持する入力側ネットワークインタフェース手段と、
第２のネットワークと送信制御を行うとともに、送信のためのパケットデータを一時的に保持する出力側ネットワークインタフェース手段と、
パケット種別に応じた大きさのバッファ領域の確保が可能であり、前記受信したパケットデータを保持する低速のメモリからなるメインメモリと、
バッファメモリ装置とを含み、該バッファメモリ装置は、
前記パケットデータの先頭からの一部分の大きさを有する第１の領域の確保が可能であり、前記受信したパケットデータの前記先頭からの一部分を保持するバッファメモリと、
該バッファメモリを制御するコントロール部とを有し、
該転送装置はさらに、
前記バッファメモリ上にアクセスし保持されているパケットデータの前記先頭からの一部分を取得するとともに、分析、加工、更新または転送制御の処理を行う中央処理装置と、
該中央処理装置からの指示により前記入力側ネットワークインタフェース手段に保持されたパケットデータを前記バッファメモリ装置に転送し、また前記メインメモリから前記出力側ネットワークインタフェース手段に転送する転送制御手段とを含み、
前記バッファメモリ装置は、前記転送制御手段から受信したパケットデータの前記先頭からの一部分を第１の領域に格納し、該パケットデータの残りの部分を前記領域B内の前記先頭からの一部分の次に位置する第２の領域に格納するため前記メインメモリに転送し、
前記中央処理装置は、第１の領域にあるデータをアクセスして処理を行うことを特徴とするパケット転送装置。
【請求項１１】
請求項10に記載のパケット転送装置において、前記パケットデータの前記先頭からの一部分は、前記パケットのヘッダ部であることを特徴とするパケット転送装置。
【請求項１２】
請求項10に記載のパケット転送装置において、第１の領域は、前記受信したパケットの種別に応じて該パケット種別毎に予め定められた容量が割り当てられることを特徴とするパケット転送装置。
【請求項１３】
請求項10に記載のパケット転送装置において、第１の領域は、前記受信したパケットの種別毎に該パケット内の予め定められたフィールドに関連付けられる属性を用いて算出された容量が割り当てられることを特徴とするパケット転送装置。
【請求項１４】
請求項10に記載のパケット転送装置において、第１の領域は、前記中央処理装置が前記先頭からの一部分に存在する情報を処理中に情報が不足の場合、前記受信したパケットの種別毎に該パケット内の予め定められたフィールドに関連付けられる属性を用いて容量を算出し、該容量を動的に増量することを特徴とするパケット転送装置。
【請求項１５】
請求項10に記載のパケット転送装置において、前記バッファメモリ装置は、前記中央処理装置が第１の領域をアクセスし、前記パケットデータの前記先頭からの一部分に存在する情報の解析の結果、更なる情報が必要な場合、前記メインメモリから前記バッファメモリの前記増量された第１の領域へ該更なる情報を含むデータを転送するプリフェッチを行うことを特徴とするパケット転送装置。
【請求項１６】
請求項15に記載のパケット転送装置において、前記バッファメモリ装置は、初期状態、前記バッファメモリの割り当て済み状態、前記プリフェッチ後の状態、および前記バッファメモリにデータが書込み済みの状態の４状態で管理されることを特徴とするパケット転送装置。
【請求項１７】
請求項16に記載のパケット転送装置において、前記バッファメモリ装置はさらに、前記メインメモリに領域が確保されたが前記バッファメモリには領域を確保していない状態を含む５状態で管理されることを特徴とするパケット転送装置。
【請求項１８】
中央処理装置とメインメモリとの間にあるバッファメモリへパケットデータを一時蓄積するメモリバッファ方法において、該方法は、
受信パケットデータの格納指示を受信し、該受信パケットデータを受け取る第1の工程と、
該受け取ったパケットデータの先頭からの一部分を前記バッファメモリに格納するための第１の領域を確保する第2の工程と、
前記パケットデータの前記先頭からの一部分を第１の領域に格納する第3の工程と、
前記パケットデータの残りの部分を前記メインメモリ上の第２の領域内の前記先頭からの一部分の次に位置する第３の領域に格納するため前記メインメモリに転送する第4の工程とを含み、
前記バッファメモリ上の前記パケットデータの前記先頭からの一部分は、前記中央処理装置によってアクセスされ、分析、加工、更新または転送制御の処理に使用されることを特徴とするメモリバッファ方法。
【請求項１９】
請求項18に記載の方法において、前記パケットデータの前記先頭からの一部分は、該パケットのヘッダ部であることを特徴とするメモリバッファ方法。
【請求項２０】
請求項18に記載の方法において、第１の領域は、前記受信したパケットの種別に応じて該パケット種別毎に予め定められた容量を割り当てることを特徴とするメモリバッファ方法。
【請求項２１】
請求項18に記載の方法において、第１の領域は、前記受信したパケットの種別毎に該パケット内の予め定められたフィールドに関連付けられる属性を用いて算出された容量を割り当てることを特徴とするメモリバッファ方法。
【請求項２２】
請求項18に記載の方法において、第１の領域は、前記中央処理装置が第１の領域をアクセスし前記パケットデータの前記先頭からの一部分に存在する情報を処理中に情報が不足した場合、前記受信したパケットの種別毎に該パケット内の予め定められたフィールドに関連付けられる属性を用いて容量を算出し、該容量を動的に増量することを特徴とするメモリバッファ方法。
【請求項２３】
請求項18に記載の方法において、該方法は、前記中央処理装置が第１の領域をアクセスし前記パケットデータの前記先頭からの一部分に存在する情報の解析の結果、更なる情報が必要な場合、前記メインメモリから前記バッファメモリへ該更なる情報を含むデータを転送するプリフェッチを行うことを特徴とするメモリバッファ方法。
【請求項２４】
請求項23に記載の方法において、該方法は、初期状態、前記バッファメモリの割り当て済み状態、前記プリフェッチ後の状態、および前記バッファメモリにデータが書込み済みの状態の４状態で管理することを特徴とするメモリバッファ方法。
【請求項２５】
請求項24に記載の方法において、該方法はさらに、前記メインメモリに領域が確保されたが前記バッファメモリには領域を確保していない状態を含む５状態で管理することを特徴とするメモリバッファ方法。
【請求項２６】
第１のネットワークから受信したヘッダ部およびデータ部を含むパケットデータを第２のネットワークに転送するパケット転送方法において、該方法は、
入力側ネットワークインタフェースにおいて第１のネットワークと受信制御を行うとともに、前記受信したパケットデータを一時的に保持し、中央処理装置に対して該パケットデータの転送処理を依頼する第1の工程と、
該中央処理装置において、前記転送処理依頼に応動してメインメモリ上に前記パケットデータを格納する第１の領域を確保するとともに、第1の工程で保持している受信パケットデータをバッファに転送するよう指示する第2の工程と、
該転送指示を受けて第1の工程で保持している受信パケットデータを前記バッファに転送する第3の工程と、
該バッファにおいて、前記受信パケットデータを受け取るとともに、該パケットデータの先頭からの一部分を前記メインメモリより高速にアクセス可能な他のメモリに格納するための第２の領域を確保し、その後、前記パケットデータの前記先頭からの一部分を前記他のメモリに格納し、該パケットデータの残りの部分を前記メインメモリ上の第１の領域内の第３の領域に格納するため該メインメモリに転送する第4の工程と、
該メインメモリにおいて、前記パケットデータの残りの部分を第１の領域内の前記先頭からの一部分の次に位置する第３の領域に格納する第5の工程と、
前記中央処理装置において、第２の領域にある前記パケットデータの前記先頭からの一部分にあるデータをアクセスし、分析、加工、更新または転送制御の処理を行う第6の工程と、
更新後のパケットデータの前記先頭からの一部分を転送するよう指示する第7の工程と、
該更新後のパケットデータの前記先頭からの一部分を第１の領域の先頭からの一部分に格納し、すでに存在する第３の領域と合わせて送信パケットデータを構成する第8の工程と、
第１の領域で保持している前記送信パケットデータを出力側ネットワークインタフェースに転送する第9の工程とを含み、
これによって、前記受信したパケットデータの前記先頭からの一部分は前記他のメモリに格納し、前記残りの部分を前記メインメモリに格納し、前記中央処理装置は、前記他のメモリ上にあるパケットデータの前記先頭からの一部分に対してアクセスし、前記解析、加工、更新または転送制御の処理を行い、この後、更新後のパケットデータの前記先頭からの一部分を前記メインメモリに格納して送信パケットデータを構成し、該送信パケットデータを前記メインメモリから出力側ネットワークインタフェースに転送し、さらに第２のネットワークに送出することを特徴とするパケット転送方法。
【請求項２７】
請求項26に記載の方法において、前記パケットデータの前記先頭からの一部分は、前記パケットのヘッダ部であることを特徴とするパケット転送方法。
【請求項２８】
請求項27に記載の方法において、第２の領域は、前記受信したパケットの種別に応じて該パケット種別毎に予め定められた容量を割り当てることを特徴とするパケット転送方法。
【請求項２９】
請求項27に記載の方法において、第２の領域は、前記受信したパケットの種別毎にパケット内の予め定められたフィールドに関連付けられる属性を用いて算出された容量を割り当てることを特徴とするパケット転送方法。
【請求項３０】
請求項27に記載の方法において、第２の領域は、前記中央処理装置が前記他のメモリ上にある前記先頭からの一部分の情報を処理中に情報が不足の場合、前記受信したパケットの種別毎に該パケット内の予め定められたフィールドに関連付けられる属性を用いて容量を算出し、該容量を動的に増量することを特徴とするパケット転送方法。
【請求項３１】
請求項27に記載の方法において、第6の工程は、第２の領域にあるパケットデータの前記先頭からの一部分にあるデータをアクセスし、分析の結果、更なる情報が必要な場合、前記メインメモリから前記バッファへ該更なる情報を含むデータを転送するプリフェッチを行い、該更なる情報を含めて解析、加工、更新または転送制御の処理を行なうことを特徴とするパケット転送方法。
【請求項３２】
請求項3１に記載の方法において、前記他のメモリは、初期状態、前記他のメモリの割り当て済み状態、前記プリフェッチ後の状態、および前記他のメモリにデータが書込み済み状態の４状態で管理することを特徴とするパケット転送方法。
【請求項３３】
請求項32に記載の方法において、前記他のメモリはさらに、前記メインメモリに領域が確保されたが他のメモリには領域を確保していない状態を含む５状態で管理することを特徴とするパケット転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バッファメモリ装置およびパケット転送装置に関し、とくに、高速かつ効率的な転送を行うバッファメモリ装置を有するパケット転送装置およびパケット転送方法に関するものである。
【背景技術】
【０００２】
一般に、従来のインタネットプロトコル（IP）ネットワークにおけるパケット転送装置は、図２に示されるように、ネットワークインタフェース（NIC）から受信したパケットをダイレクトメモリアクセス（DMA）により大容量のメインメモリに転送し、中央処理部（CPU）で実行されるソフトウエアによりパケットを解析し、処理を行った後、DMAにより他のネットワークインタフェースを介して他のネットワークに転送していた。この場合、大容量のメインメモリは一般的にはアクセス速度が遅いため、ネットワークインタフェースを介して転入されるパケットの転入時間およびそれを介して転出されるパケットの転出時間が大きくなる。
【０００３】
そこで、このパケットの転入時間および転出時間を小さくするために、図３に示すように、メインメモリに比べて少容量であり高速アクセス可能なキャッシュメモリを大容量のメインメモリとネットワークインタフェースとの中間に設置し、大容量のメインメモリにはこのキャッシュメモリを経由してアクセスするようにして、アクセス速度をより高速にするようにしている。例えば、特開2002-278834号報（特許文献１）には、パケット転送時に、所定の属性情報が存在しない場合はそのパケットをメインメモリに格納し、ヘッダ部に所定の属性情報が存在する場合にはそのパケットを高速のキャッシュメモリにのみ格納し、CPUはこのキャッシュメモリをアクセスすることにより、処理速度をより高速にする例が開示されている。ここで、キャッシュメモリとは、高速なメモリの一種であって、使用頻度の高いデータや命令を蓄積しておくことにより、CPUがこれにアクセスすることで低速なメインメモリへのアクセスを減らすことができ、処理を高速化することができるメモリである。
【特許文献１】特開2002-278834号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、パケットは、１フレームの長さが1518バイトを超えて大きくなることがある。例えば、イーサネット（商標）などで一般的な１フレーム1518バイト長で構成される図４Ａに示すパケットより大きくなり、図４Ｂおよび図４Ｃに示すようなフレーム長のパケットがある。このような場合、上述した方法では、高価なキャッシュメモリの大きな容量を占め、コストが上昇するという問題が生じていた。また、いろいろな種別のパケットを扱うパケット転送装置では、パケット種別によってはパケット制御に必要な情報は一般的なヘッダ部内の情報では不足し、例えば、図４Ｂおよび図４Ｃに示すパケットのように様々な情報を担持するものもある。そのような場合、ヘッダ部以外に存する情報も必要となるため、これを動的にキャッシュメモリに格納する必要が生じていた。
【０００５】
本発明は、パケットの１フレームの長さが所定の長さより大きくなるような場合においても、バッファメモリの容量が小さくてすむバッファメモリ装置を有するパケット転送装置およびメモリバッファ方法を提供することを目的とする。
【０００６】
本発明はまた、パケット制御に必要な情報をヘッダ部以外からも必要に応じて動的に格納することのできるバッファメモリ装置を有するパケット転送装置およびメモリバッファ方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明によれば、中央処理装置とメインメモリの間にメインメモリより高速アクセス可能なバッファメモリを設け、このバッファメモリにパケットのヘッダ部のみを格納し、中央処理装置はこのバッファメモリにアクセスする。これにより、メモリアクセスタイムの改善と、ヘッダ部のみの格納によるメモリ容量の少量化を図る。また、パケット制御に必要な情報を、ヘッダ部以外からも必要に応じて動的にメインメモリからバッファメモリに転送する。
【０００８】
ここで、バッファメモリとは、とりわけ以下の点でキャッシュメモリと相違する。すなわち、キャッシュメモリは、前述のとおり中央処理装置とメインメモリの間に設けられる高速なメモリの一種であって、使用頻度の高いデータや命令を一時蓄積し、中央処理装置はこのキャッシュメモリをアクセスすることにより、低速なメインメモリへのアクセスを減らして処理を高速化するものである。本発明において、バッファメモリは、中央処理装置とメインメモリの間に設けられる高速なメモリの一種であるが、専らパケットのヘッダ部を格納するよう構成されている。これによって中央処理装置は、このバッファメモリにアクセスすることにより、メモリアクセスタイムの改善と、ヘッダ部の格納によるメモリ容量の少量化を図っている。
【０００９】
本発明によれば、中央処理装置とメインメモリとの間にあるバッファメモリを有するバッファメモリ装置は、受信したパケットデータの先頭からの一部分をバッファメモリに格納し、残りの部分をメインメモリ装置に格納するためメインメモリに転送する機能を有し、バッファメモリ上の前記先頭からの一部分は、中央処理装置によってアクセスされ分析、加工、更新または転送制御の処理に使用される。
【００１０】
バッファメモリ装置は、バッファメモリへの制御を行うコントロール部を含み、バッファメモリは、コントロール部の指示に基づき、パケットデータの前記先頭からの一部分を格納するための第１の領域を確保し、さらに、第１の領域にパケットデータの前記先頭からの一部分を格納するように構成してもよい。
【００１１】
バッファメモリの第１の領域は、中央処理装置が第１の領域をアクセスしパケットデータの前記先頭からの一部分に存在する情報を処理中に情報が不足した場合、受信したパケットの種別毎にパケット内の予め定められたフィールドに関連付けられる属性を用いて容量が算出され、動的に容量を増量するように構成してもよい。
【００１２】
バッファメモリ装置は、中央処理装置が第１の領域をアクセスしパケットデータの前記先頭からの一部分に存在する情報の分析の結果、更なる情報が必要な場合、メインメモリからバッファメモリへこの更なる情報を含むデータを転送するプリフェッチを行うように構成してもよい。
【００１３】
本発明によればまた、第１のネットワークから受信したヘッダ部およびデータ部を含むパケットデータを第２のネットワークに転送するパケット転送装置は、第１のネットワークと受信制御を行うとともに受信したパケットデータを一時的に保持する入力側ネットワークインタフェース手段と、第２のネットワークと送信制御を行うとともに送信のためのパケットデータを一時的に保持する出力側ネットワークインタフェース手段と、パケット種別に応じた大きさのバッファ領域の確保が可能であり受信したパケットデータを保持するメインメモリと、バッファメモリ装置とを含み、バッファメモリ装置は、パケットデータの先頭からの一部分の大きさを有する第１の領域の確保が可能であり受信したパケットデータの前記先頭からの一部分を保持するメインメモリより高速にアクセス可能なメモリからなるバッファメモリと、このバッファメモリを制御するコントロール部とを有し、転送装置はさらに、転送処理を制御しバッファメモリ上にアクセスし保持されているパケットデータの前記先頭からの一部分を取得するとともに、分析、加工、更新または転送制御の処理を行う中央処理装置と、中央処理装置からの指示により入力側ネットワークインタフェース手段に保持されたパケットデータをバッファメモリ装置に転送し、またメインメモリから出力側ネットワークインタフェース手段に転送する転送制御手段とを含み、バッファメモリ装置は、転送制御手段から受信したパケットデータの前記先頭からの一部分を第１の領域に格納し、パケットデータの残りの部分を第２の領域内の前記先頭からの一部分の次に位置する第３の領域に格納するためメインメモリに転送し、中央処理装置は、第１の領域にあるデータをアクセスして処理を行う。
【００１４】
本発明によればさらに、中央処理装置とメインメモリとの間にあるバッファメモリへのパケットデータのメモリバッファ方法は、受信パケットデータの格納指示を受信し受信パケットデータを受け取る第1の工程と、受け取ったパケットデータの先頭からの一部分をバッファメモリに格納するための第１の領域を確保する第2の工程と、パケットデータの前記先頭からの一部分をバッファメモリに格納する第3の工程と、パケットデータの残りの部分をメインメモリ上の第２の領域に格納するためメインメモリに転送する第4の工程とを含み、バッファメモリ上のパケットデータの前記先頭からの一部分は、中央処理装置によってアクセスされ分析、加工、更新または転送制御の処理に使用される。
【００１５】
さらに本発明によれば、第１のネットワークから受信したヘッダ部およびデータ部を含むパケットデータを第２のネットワークに転送するパケット転送方法は、入力側ネットワークインタフェースにおいて第１のネットワークと受信制御を行うとともに受信したパケットデータを一時的に保持し中央処理装置に対してパケットデータの転送処理を依頼する第1の工程と、中央処理装置において、転送処理依頼を受けてメインメモリ上にパケットデータを格納する第１の領域を確保するとともに、第1の工程で保持している受信パケットデータをバッファに転送するよう指示を行う第2の工程と、この転送指示を受けて第1の工程で保持している受信パケットデータをバッファに転送する第3の工程と、このバッファにおいて、受信パケットデータを受け取るとともに、パケットデータの先頭からの一部分をメインメモリより高速にアクセス可能なメモリに格納するための第２の領域を確保した後、パケットデータの前記先頭からの一部分をこのメインメモリより高速にアクセス可能なメモリに格納し、パケットデータの残りの部分をメインメモリ上の第１の領域に格納するためメインメモリに転送する第4の工程と、メインメモリにおいて、パケットデータの残りの部分を第１の領域内の前記先頭からの一部分の次に位置する第３の領域に格納する第5の工程と、中央処理装置は高速メモリ上の第２の領域にあるパケットデータの前記先頭からの一部分にあるデータをアクセスし分析、加工、更新または転送制御の処理を行う第6の工程と、更新後のパケットデータの前記先頭からの一部分を転送するよう指示する第7の工程と、更新後のパケットデータの前記先頭からの一部分を第１の領域の先頭からの一部分に格納し、すでに存在する第３の領域と合わせて送信パケットデータを構成する第8の工程と、第１の領域で保持している送信パケットデータを出力側ネットワークインタフェースに転送する第9の工程とを含み、これによって、受信したパケットデータの前記先頭からの一部分は前記メインメモリより高速にアクセス可能な他のメモリに格納し、残りの部分をメインメモリに格納し、中央処理装置は他のメモリ上にあるパケットデータの前記先頭からの一部分に対してアクセスし解析、加工、更新または転送制御の処理を行い、この後、更新後のパケットデータの前記先頭からの一部分をメインメモリに格納して送信パケットデータを構成し、この送信パケットデータをメインメモリから出力側ネットワークインタフェースに転送し、さらに第２のネットワークに送出する。
【発明の効果】
【００１６】
本発明によれば、中央処理装置とメインメモリの間に高速のバッファメモリを設け、このバッファメモリに専らパケットのヘッダ部を格納する。これによって、中央処理装置によるメモリアクセスタイムの改善と、ヘッダ部の格納による高速なメモリの少容量化および効率化を図り、あわせてメモリコストの低下を図ることができる。さらに、パケット制御に必要な情報をヘッダ部以外からも必要に応じて動的にメインメモリからバッファメモリに転送することができる。そのため、各種のパケットが混在した場合にも対応できるパケット転送装置を提供できる。
【００１７】
本発明は、データ転送の分野、とりわけパケット通信分野のデータ転送に有利に適用される。
【発明を実施するための最良の形態】
【００１８】
次に、添付図面を参照して、本発明によるパケット転送装置の実施例の構成を詳細に説明する。まず、図１を参照すると、これには、本発明によるパケット転送装置100の第１の実施例が構成図で示されている。
【００１９】
パケット転送装置100は、半導体チップ上に構成されるパケット処理部101と、この半導体チップの外部に接続されたメインメモリ310により構成され、この例では通信ネットワーク602および604に接続される。以下の説明において、同様の要素は、同じ参照符号で示す。
【００２０】
パケット処理部101は、中央処理装置（CPU）201、バスブリッジ403、バッファメモリ部311、ダイレクトメモリアクセス（DMA）コントローラ（DMAC）501、入力側ネットワークインタフェース（NIC）601、出力側ネットワークインタフェース603から構成されている。中央処理装置201およびバッファメモリ部311は、バス401を介して接続される。また、バッファメモリ部311、DMAコントローラ501、入力側ネットワークインタフェース601および出力側ネットワークインタフェース603は、他のバス402を介して接続される。また、両バス401および402は、バスブリッジ403を介して互いに接続され、中央処理装置201は、バス401、バスブリッジ403およびバス402を経由して、バス402配下の各部にアクセスすることが可能である。DMAコントローラ501は転送制御手段を構成している。
【００２１】
バッファメモリ部311は、バッファメモリ装置に対応し、外部のメインメモリ310と接続される。図５にバッファメモリ部311の構成例を示す。バッファメモリ部311は、CPUスレーブポート3101、DMACスレーブポート3102およびメモリポート3103を有し、これらを介してそれぞれ、バス401経由で中央処理装置201に、またバス402経由でDMAコントローラ501に、そしてメインメモリ310に接続される。
【００２２】
同一半導体チップの内部には、一定の大きさを持ったバッファを複数個持つ。本実施例では、バッファ33000〜バッファ33063までの64個のメモリを持ち、全体でバッファアレイ3300を構成する。このバッファアレイ3300がメインメモリ310より高速にアクセス可能なバッファメモリに対応する。バッファアレイ3300は、内部バス3104を介してコントローラ3400と接続され、コントローラ3400からのリード要求およびライト要求を受け付ける。
【００２３】
バッファアレイ3300の詳細を図６に示す。バッファ33000〜バッファ33063は、それぞれ、Nワードのデータおよび状態ビットを持つメモリ素子である（Nは自然数）。例えば、格納するデータの幅が32ビット、状態ビットを2ビット、格納するワード数Nを128とすると、各バッファは、34ビット*128ワードのメモリ素子となる。コントローラ3400とは、アドレス3311、ライトデータ3312、ライトイネーブル3313、リードイネーブル3314、リードデータ3315、チップセレクト3316の各信号線で接続される。以下の説明において、信号は、その現れる接続線の参照符号で示す。
【００２４】
例えば、１個のバッファが34ビット*128ワードのメモリ素子であり、64個のバッファによりバッファアレイ3300が構成される場合、アドレス信号線3311は13ビットで構成され、上位6ビットがバッファ33000〜バッファ33063までのいずれかを示し、下位7ビットが0〜127までのワードを示す。また、ライトデータ3312、リードデータ3315はそれぞれ34ビットとなる。この時、バッファアレイ3300は、34ビット*8192ワードの連続するメモリ素子とすることができる。また、状態ビットは、各バッファに対して1個持つものとして、後述するバッファアレイテーブル3403内のみに有するようにしてもよい。
【００２５】
図７は、コントローラ3400の回路構成例を示す。CPUスレーブポート3101およびDMAスレーブポート3102はバスマトリックス3401に接続される。コントローラ3400内部で発生した転送要求を制御する内部DMAコントローラ3402があり、内部DMAコントローラ3402からのアクセス要求は、同様にバスマトリックス3401に接続される。中央処理装置201、DMAコントローラ501および内部DMAコントローラ3402からのアクセス要求は、バスマトリックス3401内で制御され、内部バス3104経由でバッファアレイ3300またはメモリポート3103経由でメインメモリ310に送られる。また、これらの要求は並行して処理される。
【００２６】
バッファアレイテーブル3403は、バッファアレイ3300内に割り当てられた領域のメモリ空間上のアドレスを示す。前述のバッファアレイ3300に対応したバッファアレイテーブル3403の構成例を図８に示す。バッファアレイテーブル3403の行は、バッファアレイ3300内に存在する64個のバッファにそれぞれ対応するように、64行存在する。アドレス空間が32ビットで表現される場合、バッファアレイ3300内のアドレッシングに必要な下位13ビットを除いたアドレスの上位19ビットが格納される。ここでは、この上位アドレスをタグアドレスと呼ぶ。バッファアレイテーブル3403上の0行目に格納されたタグアドレスは、バッファアレイ3300に格納されたデータのメインメモリ310のメモリ空間上のアドレスの上位19ビットを示す。
【００２７】
パケット転送装置100においてパケットの格納されるアドレス領域が制限されている場合には、アドレスの上位ビットを示すアドレス領域レジスタ34084を設け、バッファアレイテーブル3403の1行に含まれるビット数を削減してもよい。また、バッファアレイテーブル3403は、各バッファメモリの状態、および格納されるデータの属性を示す制御情報フィールドを含む。
【００２８】
図７に戻り、ライトバックコントローラ3405は、バッファアレイ3300に格納されたデータをメインメモリ310に書き戻すための制御を行う。書き戻しが必要となった時に、内部DMAコントローラ3402に対してバッファ33000〜バッファ33063のいずれかを指定して、バッファアレイ3300からメインメモリ310へのDMA転送を要求する。また、プリフェッチコントローラ3406は、メインメモリ310からバッファアレイ3300への転送が必要となった時に、バッファ33000〜バッファ33063のいずれかを指定して、メインメモリ310からバッファアレイ3300へのDMA転送を要求する。本明細書では、この動作をプリフェッチと呼ぶ。
【００２９】
プリフェッチ要求は、中央処理装置201から制御レジスタ3408へアクセスすることにより、またはプリフェッチサイズ連想メモリ3407に基づく必要なプリフェッチサイズの取得によって生成された内部要求により行われる。バッファアレイテーブル3403は、2ビットの状態フィールドを持つ。状態フィールドは、Invalid、Allocate、SharedおよびModifiedの4つの状態を持つ。状態フィールドの遷移を図１０に示す。初期状態はInvalidであり、対応するバッファアレイ3300上のバッファが使用されていないことを示す。
【００３０】
中央処理装置201からの操作により、バッファ割当てを行うとAllocateへ遷移する。Allocate状態時にメインメモリ310上のパケットバッファ領域への書込み要求が発生すると、書込み要求はバッファアレイ3300に転送され、バッファアレイ3300内にデータが書込まれる。この時、対応するバッファの状態フィールドはModifiedに遷移する。Allocate状態に遷移後、パケットバッファ領域（バッファアレイ3300およびメインメモリ310）へのDMA転送が起動されたとすると、DMAコントローラ501によるネットワークインタフェース602からパケットバッファ領域への転送は、先頭から確保されたバッファのサイズまでの領域はバッファアレイ3300への転送となり、この領域に対する有効なデータはバッファアレイ3300にのみ存在する。また、バッファサイズを超える領域はメインメモリ310へ転送され、バッファサイズを超える領域に対する有効なデータはメインメモリ310にのみ存在する。
【００３１】
Allocate状態から、中央処理装置201またはプリフェッチコントローラ3406からの指示により、プリフェッチ動作が要求された時は、メインメモリ310からバッファアレイ3300への転送を行う。転送完了後は、メインメモリ310とバッファアレイ3300との間で同一のデータを保持している状態であり、状態はSharedへ遷移する。中央処理装置201がShared状態にあるデータの書換えを行う場合、バッファアレイ3300上のデータのみを書き換える。この時、バッファアレイ3300のみに有効なデータが存在することになりModified状態に遷移する。
【００３２】
中央処理装置201が然るべき処理を完了し、バッファ領域が不要となった時は、領域操作レジスタ34082によりバッファ領域の解放を指示する。AllocateまたはShared状態からバッファ領域の解放を指示された時は、Invalid状態に遷移する。Modified状態の時に、バッファ領域の解放を指示された時は、有効なヘッダデータは、バッファアレイ3300内のみに存在するため、メインメモリ310にヘッダデータを書き戻し後に、Invalid状態に遷移する。
【００３３】
ヘッダ領域として必要な容量は、パケットの種別により異なる場合がある。そのため、制御レジスタ3408内に、パケット種別と必要なヘッダサイズを示すパケット種別テーブル34083を有する。また、図１１Ａに示すように、バッファアレイテーブル3403には、パケット種別テーブル34083で定義したパケット種別を示すパケット種別フィールドが存在する。図１１Ｂには、パケット種別フィールドの関係を示す。制御レジスタ3408に存在するパケット種別テーブル34083は、予め定義されたパケット種別とヘッダサイズの関係を表した表である。バッファメモリ301を確保時にバッファアレイテーブル3403内のパケット種別フィールドがセットされ、パケット種別テーブルを検索することにより、必要なバッファ容量が決定される。
【００３４】
より詳細には、ヘッダ領域として必要な容量がバッファアレイ3300内の1個分の容量より大きい場合、バッファを複数個割り当てることにより、ヘッダ領域として確保するバッファ容量を大きくすることができる。この時の手順を図１１Ａおよび図１１Ｂを参照して説明する。
【００３５】
バッファアレイ3300内に未使用の領域が存在する場合、すなわちバッファアレイテーブル3403に状態フィールドがInvalidを示す行が存在する場合、メインメモリ310のメモリ空間上の連続した所定の大きさの領域の１つをバッファアレイ3300内に確保する。バッファアレイテーブル3403内の次バッファポインタは、新たに確保したバッファを示す。図１１Ａの例では、始めにバッファアレイ3300にパケット種別3のパケットのためのバッファ領域を確保する。予め定義されたパケット種別「3」のヘッダサイズは「2」であるため、バッファアレイ3300上にバッファ33000に割り当てた領域に連続する領域を確保する。バッファ33001〜バッファ33003が使用され、バッファ33004に空きがあった場合、つまりバッファアレイテーブル3403上の1〜3行目がInvalidではなく、4行目がInvalidであった場合、バッファアレイテーブル3403の0行目の次バッファポインタは「4」となり、バッファ33004に対応する4行目のタグアドレスフィールドは、バッファ33000の「タグアドレス値+1」となる。
【００３６】
また、インタネットプロトコル（IP）セキュリティを（IPSec)等の認証プロトコルや暗号プロトコルによりカプセル化されたパケットを処理する場合、ヘッダ領域として必要なバッファ容量は、パケット種別よりも送信元アドレスや該当する適切なヘッダ値により関連付けた方がよいことがある。このため、図７に示すようなプリフェッチサイズ連想メモリ3407を備える。
【００３７】
プリフェッチサイズ連想メモリ3407は、パケット種別とヘッダ内の任意のビットフィールドの情報により決定される連想メモリである。また、中央処理装置201が受信したパケットのヘッダを解析中に、バッファアレイ3300内に格納されたヘッダ、つまりパケット種別テーブル34083により予め定義されたヘッダのサイズよりも多くのデータが必要になった時、中央処理装置201はプリフェッチを要求することができる。
【００３８】
プリフェッチを要求された場合、新たにバッファを割り当てるとともに、プリフェッチサイズ連想メモリ3407にパケット種別および任意のKeyで関連付けられるフィールドにヘッダサイズを格納する。用語「任意のKey」は、たとえば宛先アドレスや送信元を特定する情報、より一般的には属性を指し、パケット種別毎に決定される。パケット種別テーブル34083は、このためのフィールドを持つ。
【００３９】
パケット先頭からの位置を決定するオフセット値とマスク値により、Key位置は決定される。このKeyをインデックスとする連想メモリにより、必要なヘッダサイズの取得が可能となる。
【００４０】
制御レジスタ3408は、前述のパケット種別テーブル34083の他に、領域確保レジスタ34081および領域操作レジスタ34082（図７）を持つ。領域確保レジスタ34081は、メモリ空間上にパケットバッファ領域を確保するためにアクセスされる。中央処理装置201は、本レジスタへバッファ領域の先頭アドレスとパケット種別番号を書き込むと、パケット種別に応じたヘッダ領域をバッファアレイ3300内に確保する。領域操作レジスタ34082は、中央処理装置201からの操作により、プリフェッチ、ライトバックおよび領域解放を指示する制御レジスタ3408である。直近にアクセスしたバッファアレイ3300上のバッファに対して、領域の解放、プリフェッチおよびライトバックを指示する。
【００４１】
次に、入力側ネットワークインタフェース601からパケットを受信し、再び送信するまでの動作を図１および図５〜図１６を参照して説明する。先ず、一方のネットワークから入力側ネットワークインタフェース601はパケットを受信する。入力側ネットワークインタフェース601は、中央処理装置201に対し転送処理を依頼する(図９、ステップS1)。
【００４２】
パケットの受信を検出した中央処理装置201は次に、入力側ネットワークインタフェース601からの割込みにより、メインメモリ310のメモリ空間上に、あるバッファ領域（ここではこれをBと称する）を確保する。バッファ領域Bが確保されると、中央処理装置201は確保された領域の先頭アドレスを知る。本操作は中央処理装置201のメモリ管理システム上で行われる。
【００４３】
次に、中央処理装置201は、DMAコントローラ501に対しパケットを転送するよう指示を行う(S2)。DMAコントローラ501はこれを受け、入力側ネットワークインタフェース601からパケットデータを受け取り、パケット種別をバッファアレイテーブル3403内のパケット種別フィールドにセットする。さらに、このパケットデータをバッファメモリ部311に転送する(S3)。
【００４４】
バッファメモリ部311のコントローラ3400はこのパケットデータを受け取り、ヘッダ部を格納するための領域（ここではこれをAと称する）を、図１１Ａに示すバッファアレイテーブル3403内のパケット種別フィールドにあるパケット種別とパケット種別テーブルにあるヘッダサイズQを基に、バッファアレイ3300上に確保する。この場合、バッファ領域の先頭アドレスから連続する領域をバッファアレイ3300上に確保する。
【００４５】
次に、コントローラ3400は、この受け取ったパケットデータのヘッダ部をバッファアレイ3300上の領域Aに格納する。また、このパケットデータのデータ部をメインメモリ310に格納するため、メインメモリ310に転送する(S4)。メインメモリ310に格納する際は、先に確保したバッファ領域B内のヘッダ部の領域に続く領域Cに格納する。また、ヘッダ部をバッファアレイ3300に格納する際は、コントローラ3400は、バッファアレイ3300内にInvalid状態のバッファを探し出し、領域確保レジスタ34081にこのInvalid状態のバッファのアドレスを設定し、ヘッダ領域の確保を行う。また、バッファアレイ3300内の各バッファを示すインデックス（0〜63）と同じインデックスを有するバッファアレイテーブル3403の行のタグアドレスフィールドに上位アドレスを格納する。
【００４６】
コントローラ3400は、ヘッダ部の格納およびデータ部の格納が完了すると、DMAコントローラ501に対し完了通知を行う。DMAコントローラ501は、この完了通知を受け取り、中央処理装置201に対し転送の完了を通知する。
【００４７】
転送完了通知を受け取った中央処理装置201は、バッファアレイ3300内のヘッダ領域Aへアクセスし、当該ヘッダを取得し、ヘッダ情報の分析、加工、更新、転送制御の処理を行う(S5)。この場合、ヘッダ領域Aはメインメモリ310より高速な動作が可能なメモリからなるバッファアレイ3300内にあるため、中央処理装置201は高速でヘッダ情報を取得できる。
【００４８】
なお、コントローラ3400は、バス401に発生するメモリへのアクセスのトランザクションを常に監視している。アドレスが確保されたヘッダ領域内に含まれる場合は、バッファアレイ3300へのアクセスとしてトランザクションをバッファアレイ3300へ転送する。それ以外の領域であれば、メインメモリ310へのアクセスとして、トランザクションをメインメモリ310へ転送する。この制御を行っているのがバスマトリックス3401であり、ヘッダ領域へのアクセスは、バッファアレイ3300へ転送され、それ以外の領域に対するアクセスは、メインメモリ310へ転送する。すなわち、中央処理装置201からのアクセスであるヘッダ領域へのアクセスとDMAコントローラ501からのアクセスであるそれ以外の領域に対するアクセスは、バスマトリックス3401により同一の領域へのアクセスが競合しないように制御され、並列にアクセスすることができる。
【００４９】
次に、中央処理装置201は、転送関連の処理の終了後、更新後のヘッダ部を付してDMAコントローラ501に対し転送指示を行い、さらにDMAコントローラ501は、バッファメモリ301に更新後のヘッダ部を付して、転送指示を行う(S6)。バッファメモリ301のコントローラ3400は、ライトバックコントローラ3405にライトバックを指示する。ライトバックコントローラ3405は、領域操作レジスタ34082を用いて更新後のヘッダ部をメインメモリ310へ転送する。これは、バッファアレイ3300上にあるヘッダ部が更新されていることがあるため、この更新後のヘッダ部をメインメモリ310上の当該パケットのヘッダ部に上書きするためである。これにより、メインメモリ310上の当該パケットは送信パケットとして構成されることになる。
【００５０】
メインメモリ310への転送完了後、ライトバックコントローラ3405はDMAコントローラ501に対し転送完了通知を行う(S7)。また、ライトバックコントローラ3405は、領域操作レジスタ34082を用いてバッファアレイ3300上のバッファ領域の解放を行う。次に、DMAコントローラ501は、バッファメモリ301のコントローラ3400を経由してメインメモリ310から出力側ネットワークインタフェース603へ送信パケットのDMA転送を行う(S8)。バッファアレイ3300上のバッファ領域の解放は、DMA転送の完了後に行ってもよい。次に、出力側ネットワークインタフェース603より、他方のネットワークへ送信パケットが送出される(S9)。以上がパケット転送に関する一連の動作である。
【００５１】
ここで、ヘッダ領域として必要な容量は、パケットの種別により異なる場合がある。そのため、図１１Ａおよび図１１Ｂに示すように、バッファアレイテーブル3403とパケット種別テーブル34083を用いてパケット種別毎のヘッダサイズQを算出し、このヘッダサイズQに基づき必要なバッファ領域をバッファアレイ3300上に確保する。このようなパケット種別に応じたバッファメモリの確保について、図１１Ａ〜図１２を参照して、さらに詳述する。
【００５２】
先ず、パケットの受信に伴いバッファメモリ311のコントローラ3400は、バッファアレイ3300内に１つのヘッダ領域を確保する。この確保は、上述したようにバッファアレイテーブル3403に状態フィールドがInvalidを示す行に対して行なわれる。また、このとき、バッファアレイテーブル3403の0行目にTagとパケット種別を設定する。図１１Ａの例ではパケット種別＝3である(S901)。
【００５３】
次に、バッファアレイテーブル3403上からパケット種別を取得し、さらに、パケット種別テーブル34083上に当該パケット種別に合致するパケット種別に対応するヘッダサイズQを取得する。図１１Ｂの例ではヘッダサイズQ＝2である(S902)。
【００５４】
そこで、ヘッダ領域として必要な容量がバッファアレイ3300内の1個分の容量より大きい場合、バッファを複数個、割り当てることにより、ヘッダ領域として確保するバッファ容量を大きくすることができる。この動作は、ヘッダサイズQ＝＞2か否かのチェックによって行なわれる(S903)。ここで、否定的“N”の場合は、すなわちヘッダサイズQが「1」であれば、なにもしないで終了となる。なぜなら、すでに１つのヘッダ領域を確保済みであるからである。ステップS903で、肯定的“Y”の場合は、すなわちヘッダサイズQが2以上であれば、バッファアレイテーブル3403に状態フィールドがInvalidを示す行が（Q-１）個、存在するか否かをチェックする(S904)。
【００５５】
ここで、“Y”の場合は、すなわち、Invalidを示す行が（Q-１）個、存在すれば、メインメモリ310のメモリ空間上の連続した所定の大きさの領域（Q-１）個をバッファアレイ3300内に、さらに確保する(S905)。次に、バッファアレイテーブル3403内の次バッファポインタ欄を設定する(S909)。また、バッファアレイテーブル3403内で確保した行のタグ欄を、1つ前の行のタグ欄の値に+1を加算して設定する(S910)。
【００５６】
次に、このステップS909〜S910の処理を（Q-1）回、行う(S911)。また、Invalidを示す行が（Q-1）行、存在しなければ、すなわち、ステップS1005で、否定的“N”の場合は、所定の時間経過してから(S906)、所定の回数以内であれば(S907)、再度、状態フィールドがInvalidを示す行が（Q-1）行、存在するか否かをチェックするステップS904に戻る。所定の回数であれば(S907)、予め定められたエラー処理を行う(S908)。
【００５７】
このように、パケット種別に応じてバッファメモリを確保する特定の実施例について、その動作フローを説明した。しかし、確保可能なバッファ領域が存在しない場合の他の方法として、確保しない、あるいは特定のアルゴリズムによって決定される確保済みバッファ(例えば、最後に割り当てられたバッファ)を解放し、新たなバッファ領域として割り当てるように構成してもよい。
【００５８】
ここで、プリフェッチサイズ連想メモリによるバッファメモリの確保について図１５Ａおよび図１５Ｂを参照して、さらに詳述する。先ず、パケットの受信に伴い、バッファメモリ311はバッファアレイ3300内に１つのヘッダ領域を確保する。このとき、バッファアレイテーブル3403の0行目にTagとパケット種別を設定する。図１３の例ではパケット種別＝4である(S1001)。
【００５９】
そこで、プリフェッチコントローラ3406は、バッファアレイテーブル3403上からパケット種別を取得し、さらにパケット種別テーブル34083上の当該パケット種別に合致するパケット種別に対応するKeyオフセット値とKeyマスクを取得し、Keyを算出する。図１３の例ではKeyオフセット値＝6、Keyマスク＝6であり、Key＝送信元アドレスとなる(S1002)。
【００６０】
プリフェッチコントローラ3406は、プリフェッチサイズ連想メモリ3407上の（パケット種別、Key）に対応したヘッダサイズQを取得する。図１３の例ではヘッダサイズQ＝2である(S1003)。次に、ヘッダサイズQ＝＞2かどうかの判定を行う(S1004)。ここで、“N”の場合、すなわちヘッダサイズQが「1」であれば、なにもしないで終了となる。なぜなら、すでに１つのヘッダ領域を確保済みであるからである。ステップS1004で、“Y”の場合、すなわちヘッダサイズQが2以上であれば、バッファアレイテーブル3403に状態フィールドがInvalidを示す行が（Q-1）行、存在するか否かをチェックする(S1005)。ここで、“Y”の場合は、すなわちInvalidを示す行が（Q-1）行、存在すれば、メインメモリ310のメモリ空間上の連続した所定の大きさの領域（Q-1）個をバッファアレイ3300内に、さらに確保する(S1006)。
【００６１】
次に、バッファアレイテーブル3403内の次バッファポインタ欄を設定する(S1010)。また、バッファアレイテーブル3403内で確保した行のタグ欄を、1つ前の行のタグ欄の値に+1を加算して設定する(S1011)。次に、このステップS1010〜S1011の処理を（Q-1）回行う(S1012)。
【００６２】
また、ステップS1005において、“N”の場合、すなわちInvalidを示す行が（Q-1）個存在しなければ、所定の時間経ってから(S1007)、所定の回数以内であれば(S1008)、再度、状態フィールドがInvalidを示す行が（Q-1）行、存在するか否かをチェックするステップS1005に戻る。所定の回数であれば(S1008)、予め定められたエラー処理を行う(S1009)。
【００６３】
このように、特定の実施例について、プリフェッチサイズ連想メモリによるバッファメモリ311の確保の動作フローを説明した。しかし、前にも触れたように、確保可能なバッファ領域が存在しない場合の他の方法として、確保しない、あるいは特定のアルゴリズムによって決定される確保済みバッファ(例えば、最後に割り当てられたバッファ)を解放し、新たなバッファ領域として割り当てるように構成してもよい。
【００６４】
ここで、同一パケット種別のパケットを次に受信した場合、ヘッダ領域の確保は、プリフェッチサイズ連想メモリ3407に従って行われる。例えば、Keyが送信元IPアドレスに関連付けられ、そのKeyに対応するプリフェッチサイズ連想メモリ3407の内容が「2」である場合、再度、同一IPアドレスからのパケットを受信すると、始めからヘッダ領域としてバッファアレイ3300の2個分の領域が割り当てられる。
【００６５】
中央処理装置201によるパケットのヘッダ情報の解析の結果、バッファアレイ3300内に格納しているヘッダ領域内の情報よりもさらに多くの情報が必要になった場合は、領域操作レジスタ34082によりプリフェッチを指示する。これにより、動的にバッファメモリを確保する。すなわち、プリフェッチを指示されたバッファメモリ部311は、図１３に示すように、パケット種別テーブル34083内のKeyオフセット値と、Keyマスクから得られるKeyと、プリフェッチサイズ連想メモリ3407から得られるヘッダサイズQに基づいて、バッファアレイ3300内に格納されているヘッダ領域に連続する領域を新たに割り当て、コントローラ3400内のプリフェッチコントローラ3406によりメインメモリ310からバッファアレイ3300へDMA転送を行う。同時に、プリフェッチサイズ連想メモリ3407の内容を更新する。
【００６６】
以上のように本実施例では、中央処理装置201が必要とするパケットのヘッダ領域は、メインメモリより高速で動作可能なバッファアレイ3300の領域Aに割り当てられ、中央処理装置201のメモリアクセスの高速化および効率化を図ることができる。また、送信元IPアドレス等の任意のKeyによって関連付けられるプリフェッチサイズ連想メモリ3407で割り当てられるヘッダのサイズは、動的に変化させることができる。このように、中央処理装置201が転送処理に必要な情報を有するヘッダのみを高速なメモリに割り当てることにより、高価な高速メモリの小容量化が可能となる。
【００６７】
上述の実施例では、バッファメモリ部311とメインメモリ310が直接、接続されている。そこで、図１７に示すように、上述の実施例に比してバッファメモリ部311とメインメモリ310の間にさらにキャッシュメモリ312のようなメインメモリより高速にアクセス可能なメモリを追加したところが異なる第２の実施例を説明する。第２の実施例において、キャッシュメモリ312は、メインメモリ310上にあるパケットデータのうち使用頻度の高いパケットデータを蓄積しておき、中央処理装置201およびDMAコントローラ501は、このキャッシュメモリ312をアクセスすることにより低速なメインメモリ310へのアクセスを減らすことにより処理を高速化する。
【００６８】
第１の実施例では、中央処理装置201からのアクセスとDMAコントローラ501からのアクセスは、バスマトリックス3401により同一の領域へのアクセスが競合しないように制御され、並列にアクセスすることが可能であった。第２の実施例では、これに加えてさらに、DMAコントローラ501はキャッシュメモリ312とバッファメモリ部311を並列に、かつ高速にアクセスすることができる。これによって、中央処理装置201とDMAコントローラ501によるアクセスをさらに高速、かつ並列に処理することが可能となる。より詳細には、パケットのヘッダをバッファメモリ部311上に確保して中央処理装置201の処理を高速化させ、さらにメインメモリ310上にあるパケットデータへのアクセスをキャッシュメモリ312を用いて高速化させ、さらにDMAコントローラ501を用いてキャッシュメモリ312とバッファメモリ部311を並列に処理することができる。このため、なお一層の高速化を図ることができる。
【００６９】
第１の実施例では、バッファアレイ3300とバッファアレイテーブル3403を同一のインデックスを持つものとしたが、図１８に示す第３の実施例は、バッファアレイテーブル3403のインデックス(M-1)よりバッファアレイ3300のインデックス(N)が小さい構成を持つ。すなわち、(M-1)＞Nの関係にある。このため、バッファ状態として、Invalid、Allocate、Shared、ModifiedおよびUnallocateという状態が設けられている。このUnallocate状態は、メインメモリ310上に領域を確保し、バッファアレイテーブル3403上に領域確保を指示したが、バッファメモリ部311上には領域を確保していない状態である。
【００７０】
このように第３の実施例は、Unallocateという状態が追加的に設けられている。この状態では、メインメモリ310上に領域が確保され、バッファアレイテーブル3403上に領域の確保がされているが、バッファメモリ部311上には領域が確保されていない。この状態においては、バッファメモリ部311上に空きが発生した段階で、バッファ領域上にメモリを割り当て（Allocate）、連続してプリフェッチ動作を行う（Shared）。これによりメモリを有効に使うことができるため、メモリ容量を小さくできる。図１７の構成では、必要なバッファアレイ3300の容量が小さくなるため、小さなメモリ素子で構成できる。
【００７１】
ところで、第１の実施例において、バッファメモリ部311からメインメモリ310への書き戻し(ライトバック)は、中央処理装置201が領域操作レジスタ34082にアクセスすることで行う。ここで、状態フィールドに応じてバッファメモリ部311内で自律的にライトバック要求を生成する第４の実施例を図１９に示す。
【００７２】
この第４の実施例においては、バッファアレイ3300内に状態フィールドを設ける。バッファアレイ3300内にのみ有効なデータが存在する場合、状態フィールドの状態ビットはModifiedにセットされる。この時、Modifiedにセットされていて、かつ対応するバッファアレイテーブル3403内の状態ビットもModifiedにセットされている場合は、バッファに格納されているヘッダのライトバックの必要が生じる。この時、バッファメモリ部311内部でメインメモリ310へのライトバック要求を生成し、上述したライトバックの手順に従いライトバックを行う。ライトバックが完了すると、状態ビットはSharedに変更される。これにより、バッファの解放を行う場合に、Shared状態のバッファに格納されているヘッダは書き戻す必要がないため、書き戻しに関わるオーバヘッドが削減できる。
【００７３】
これらの実施例では、パケットのヘッダ領域のみを格納するように構成されていたが、パケット全体を格納するようにバッファアレイ3300内に領域を確保してもよい。また、これらの実施例では、CPUスレーブポート3101およびDMAスレーブポート3102が1つずつ設けられていたが、CPUスレーブポート3101やDMAスレーブポート3102のいずれか一方または両方が複数、存在してもよい。
【００７４】
さらに、上述の実施例では、メインメモリ領域Bの先頭アドレスから連続する大きさを有する領域をバッファアレイ3300内に格納していた。しかし、メインメモリ領域Bの先頭から特定のオフセットにあるアドレスから始まる領域をバッファアレイ3300内に格納するように構成してもよい。また、第１の実施例では、プリフェッチサイズ連想メモリ3407のKeyが1つであったが、複数のKeyや、ハッシュ値等のヘッダ情報から生成される値を用いてもよい。
【００７５】
以上に説明したように、本発明の実施例は、パケットのヘッダ領域のみをメインメモリより高速なバッファメモリに格納し、のバッファメモリの容量を小さくし、さらに中央処理装置がヘッダ情報に高速でアクセスできるように構成されている。また、パケット制御に必要な情報をヘッダ部以外からも必要に応じて動的にメインメモリからバッファメモリに転送することができる。そのため、各種のパケットが混在した場合にも、対応することできる。この技術はパケット伝送の全般に適用可能である。
【図面の簡単な説明】
【００７６】
【図１】本発明によるパケット転送装置の第１の実施例の構成を示す機能ブロック図である。
【図２】従来のパケット転送装置の概略図である。
【図３】従来のキャッシュメモリを用いたパケット転送装置の概略図である。
【図４Ａ】イーサネット（商標）のパケットの構成例を示すフォーマット図である。
【図４Ｂ】イーサネット（商標）のパケットの他の構成例を示すフォーマット図である。
【図４Ｃ】イーサネット（商標）のパケットのさらに他の構成例を示すフォーマット図である。
【図５】図１に示す第１の実施例におけるバッファメモリの機能ブロック図である。
【図６】第１の実施例におけるバッファアレイの構成図である。
【図７】第１の実施例におけるバッファメモリ内のコントローラの機能ブロック図である。
【図８】第１の実施例におけるバッファアレイテーブルの構成図である。
【図９】第１の実施例のパケット転送装置の動作の流れを示す動作フロー図である。
【図１０】第１の実施例におけるバッファアレイの状態フィールドの状態遷移図である。
【図１１Ａ】第１の実施例におけるパケット種別フィールドの関連を説明する図である。
【図１１Ｂ】第１の実施例におけるパケット種別フィールドの関連を説明する図である。
【図１２】第１の実施例におけるパケット種別に応じた高速バッファメモリの確保動作を示すフロー図である。
【図１３】第１の実施例におけるパケットサイズ連想メモリの関連を示す図である。
【図１４】第１の実施例におけるプリフェッチサイズ連想メモリによる高速バッファメモリの確保動作を示すフロー図である。
【図１５Ａ】第１の実施例におけるプリフェッチサイズ連想メモリによる高速バッファメモリの確保動作（ヘッダ情報の不足時）を示すフロー図である。
【図１５Ｂ】図１５Ａに続く高速バッファメモリの確保動作を示すフロー図である。
【図１６】第１の実施例における領域確保レジスタおよび領域操作レジスタの構成図である。
【図１７】本発明によるパケット転送装置の第２の実施例の構成を示す機能ブロック図である。
【図１８】本発明によるパケット転送装置の第３の実施例におけるバッファアレイがバッファアレイテーブルより小さい場合の関連を示す図である。
【図１９】本発明によるパケット転送装置の第４の実施例における自律的なライトバックの説明図である。
【符号の説明】
【００７７】
100  パケット転送装置
101  パケット処理部
201  中央処理装置
310  メインメモリ部
311  バッファメモリ部
312  キャッシュメモリ
403  バスブリッジ部
501  DMAコントローラ部
601  入力側ネットワークインタフェース
602  入力側ネットワーク
603  出力側ネットワークインタフェース
604  出力側ネットワーク
3201、3202  バスインタフェース
3203  メモリンタフェース
3300  バッファアレイ
33000〜33063  バッファ
3400  コントローラ
3401  バスマトリックス
3402  内部DMAコントローラ
3403  バッファアレイテーブル
3404  比較回路
3405  ライトバックコントローラ
3406  プリフェッチコントローラ
3407  プリフェッチサイズ連想メモリ
3408  制御レジスタ
3409  制御部
34081  領域確保レジスタ
34082  領域操作レジスタ
34083  パケット種別テーブル
34084  アドレス領域レジスタ
【図１】
2009088622.tif 000003
【図２】
2009088622.tif 000004
【図３】
2009088622.tif 000005
【図４Ａ】
2009088622.tif 000006
【図４Ｂ】
2009088622.tif 000007
【図４Ｃ】
2009088622.tif 000008
【図５】
2009088622.tif 000009
【図６】
2009088622.tif 000010
【図７】
2009088622.tif 000011
【図８】
2009088622.tif 000012
【図９】
2009088622.tif 000013
【図１０】
2009088622.tif 000014
【図１１Ａ】
2009088622.tif 000015
【図１１Ｂ】
2009088622.tif 000016
【図１２】
2009088622.tif 000017
【図１３】
2009088622.tif 000018
【図１４】
2009088622.tif 000019
【図１５Ａ】
2009088622.tif 000020
【図１５Ｂ】
2009088622.tif 000021
【図１６】
2009088622.tif 000022
【図１７】
2009088622.tif 000023
【図１８】
2009088622.tif 000024
【図１９】
2009088622.tif 000025