(57)【要約】低遅延メモリ１１８におけるデータ構造体を選択的に複製する方法および装置を提供する。このメモリ１１８は、同一データ構造体の複製コピーを格納するように構成される複数の個別のメモリバンク４３２を有する。格納されたデータ構造体へのアクセス要求を受信すると、低遅延メモリ１１８のアクセスコントローラ１６０はメモリバンクのうちの１つを選択し、次に、選択されたメモリバンクから格納データにアクセスする。メモリバンクの選択は、それぞれのメモリバンクの相対的有効性を比較するサーモメータ技術を用いて達成できる。最終的な効率を得られる例示的なデータ構造体には、決定性有限オートマトン（ＤＦＡ）グラフ、および格納されるよりも高頻度でロードされる他のデータ構造体が含まれる。【選択図】図４
2008512786.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリバンクを有する低遅延メモリを管理する方法であって、
この複数のメモリバンクへのデータ構造体の既定数の複製の格納要求を受信する工程と、
前記格納要求に応答して、前記既定数の複製のそれぞれを、前記複数のメモリバンクのうちのそれぞれ１つに格納する工程とを備えた低遅延メモリ管理方法。
【請求項２】
請求項１において、前記格納要求が、前記既定数を示す複製係数を含む低遅延メモリ管理方法。
【請求項３】
請求項２において、前記複製係数が２の累乗である低遅延メモリ管理方法。
【請求項４】
請求項１において、前記データ構造体が決定性有限オートマトンである低遅延メモリ管理方法。
【請求項５】
請求項１において、前記複数のメモリバンクのそれぞれは複数の低遅延メモリインタフェースのうちの１つを使用してアクセス可能であり、前記データ構造体の複製のうちの少なくともいくつかは異なる低遅延インタフェースを用いてアクセス可能である低遅延メモリ管理方法。
【請求項６】
請求項１において、さらに、
前記格納されたデータ構造体へのアクセス要求を受信する工程と、
前記アクセス要求に応答して、前記複数のメモリバンクのうち、前記要求されたデータ構造体の複製を格納しているメモリバンクを１つ選択する工程と、
前記選択されたメモリバンクにアクセスする工程とを備えた低遅延メモリ管理方法。
【請求項７】
請求項６において、前記メモリバンクを選択する工程が、
前記データ構造体の複製を格納する前記複数のメモリバンクうちの各メモリバンクの使用を判断する工程と、
前記判断された使用に対応して、前記複数のメモリバンクのうちの１つを選択する工程とを備えた低遅延メモリ管理方法。
【請求項８】
請求項７において、前記使用を判断する工程が、複数の待ち行列を比較する工程を備え、各待ち行列は前記複数のメモリバンクのうちのそれぞれ1つに関連づけられている低遅延メモリ管理方法。
【請求項９】
請求項１において、前記低遅延メモリが、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、低遅延ダイナミックランダムアクセスメモリ（ＲＬＤＲＡＭ）、同期ランダムアクセスメモリ（ＳＲＡＭ）、高速サイクルランダムアクセスメモリ（ＦＣＲＡＭ）およびこれらの組合せより成るグループから選択される低遅延メモリ管理方法。
【請求項１０】
低遅延メモリにアクセスするように構成された第１のメモリインタフェースであって、低遅延メモリは複数のメモリバンクを有する第１のメモリインタフェースと、
メインメモリにアクセスするように構成されたメインメモリインタフェースと、
前記メインメモリインタフェースに結合された命令ユニットであって、データ構造体の選択可能な数の複製を前記複数のメモリバンクのうちの２つ以上のメモリバンクに格納する要求を受信する命令ユニットと、
前記命令ユニットに結合された複数のスレッドエンジンであって、各スレッドエンジンは、前記複数のメモリバンクの選択可能な１つに関連づけられ、
前記命令ユニットに結合され、前記第１のメモリインタフェースと前記複数のスレッドエンジンの間に結合された低遅延メモリコントローラであって、前記低遅延メモリコントローラは、データ構造体の前記選択可能な数の複製のそれぞれを、前記複数のメモリバンクのうちのそれぞれ１つに格納する低遅延メモリコントローラとを備えた低遅延メモリ管理コントローラ。
【請求項１１】
請求項１０において、前記プロセッサがマルチコアプロセッサを備えている低遅延メモリ管理コントローラ。
【請求項１２】
請求項１０において、前記選択可能な数の複製を格納する要求が、この選択可能な数を示す複製係数を含む低遅延メモリ管理コントローラ。
【請求項１３】
請求項１２において、前記複製係数が２の累乗である低遅延メモリ管理コントローラ。
【請求項１４】
請求項１０において、前記低遅延メモリコントローラが複数の入力待ち行列を備え、入力待ち行列の１つが前記複数のメモリバンクのうちのそれぞれ１つに対するものであり、前記低遅延メモリコントローラは、決定値に応じて前記複数のメモリバンクのうちの１つを選択する低遅延メモリ管理コントローラ。
【請求項１５】
請求項１４において、前記決定値が、前記格納されるデータ構造体の使用に関するものである低遅延メモリ管理コントローラ。
【請求項１６】
請求項１４において、前記低遅延メモリコントローラが、前記複数の入力待ち行列の異なる待ち行列間の相対的な利用度を求めるサーモメータユニットを有し、各入力待ち行列は前記複数のメモリバンクのうちのそれぞれ１つに関連づけられている低遅延メモリ管理コントローラ。
【請求項１７】
請求項１０において、前記データ構造体が決定性有限オートマトンを備えた低遅延メモリ管理コントローラ。
【請求項１８】
請求項１０において、前記低遅延メモリが、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、低遅延ダイナミックランダムアクセスメモリ（ＲＬＤＲＡＭ）、同期ランダムアクセスメモリ（ＳＲＡＭ）、高速サイクルランダムアクセスメモリ（ＦＣＲＡＭ）およびこれらの組合せより成るグループから選択される低遅延メモリ管理コントローラ。
【請求項１９】
請求項１０において、前記複数のメモリバンクのうちのいくつかが第１の低遅延メモリインタフェースを使用してアクセス可能であり、前記複数のメモリバンクのうちのその他は第２の低遅延メモリインタフェースを使用してアクセス可能であり、前記データ構造体の複製のうちの少なくともいくつかは前記第１および第２の低遅延メモリインタフェースのいずれかを使用してアクセス可能である低遅延メモリ管理コントローラ。
【請求項２０】
請求項１０において、さらに、プロセッサインタフェースを備え、このインタフェースを介してプロセッサと通信する低遅延メモリ管理コントローラ。
【請求項２１】
複数のメモリバンクへのデータ構造体の既定数の複製の格納要求を受信する手段と、
前記格納要求に応答して、前記既定数の複製のそれぞれを、前記複数のメモリバンクのうちのそれぞれ１つに格納する手段とを備えた低遅延メモリのアクセスコントローラ。
【発明の詳細な説明】
【関連出願】
【０００１】
本出願は、2004年9月10日に出願された米国仮特許出願第60/609,211号、および2005年4月8日に出願された米国仮特許出願第60/669,655号の利益を主張するものであり、上記各出願の全内容は参照により本明細書に引用したものとする。
【背景技術】
【０００２】
開放型システム間相互接続（ＯＳＩ）参照モデルは、伝送媒体を介する通信に使用される７つのネットワークプロトコル層（Ｌ１−Ｌ７）を規定している。上位層（Ｌ４−Ｌ７）はエンド・ツー・エンド通信を表し、下位層（Ｌ１−Ｌ３）は局所的な通信を表す。
【０００３】
ネットワーキングアプリケーションアウェア型（アプリケーションが自動的にネットワークを制御する）システムは、Ｌ３からＬ７までの範囲のネットワークプロトコル層、例えば、ハイパーテキスト転送プロトコル（ＨＴＴＰ）およびシンプルメール転送プロトコル（ＳＭＴＰ）などのＬ７ネットワークプロトコル層、および伝送制御プロトコル（ＴＣＰ）などのＬ４ネットワークプロトコル層を処理し、フィルタリングし、かつ切り換える必要がある。ネットワークプロトコル層の処理に加えて、ネットワーキングアプリケーションアウェア型システムは、ファイアウォール、仮想プライベートネットワーク（ＶＰＮ）、セキュアソケットレイヤ（ＳＳＬ）、侵入検知システム、インターネットプロトコルセキュリティ、アンチウィルス／アンチスパム機能を含む、Ｌ４からＬ７までのネットワークプロトコル層を介するアクセスベースおよびコンテンツベースのセキュリティによって、これらのプロトコルの安全性を同時にワイヤスピードで保護する必要もある。
【０００４】
ネットワークプロセッサが、高スループットのＬ２およびＬ３ネットワークプロトコル処理に利用される。このＬ２およびＬ３ネットワークプロトコル処理は、パケットをワイヤスピードで転送するパケット処理の実行である。一般に、より高度の処理を必要とするＬ４からＬ７までのネットワークプロトコルの処理には、汎用プロセッサが使用される。例えば、Ｌ４ネットワークプロトコルである伝送制御プロトコル（ＴＣＰ）は、パケット内の全ペイロードにわたるチェックサムの計算、ＴＣＰセグメントバッファの管理および複数のタイマの接続毎の常時保持を含む複数の計算集約型タスクを必要とする。汎用プロセッサは、計算集約型タスクを実行できるが、データを処理してワイヤスピードで転送できるだけの十分な性能は備えていない。
【０００５】
さらに、パケットのコンテンツを調べるコンテンツアウェア型アプリケーション（コンテンツを自動的に認識するアプリケーション）は、データストリーム内の固定文字列および可変回数で反復される文字クラスの双方を含む表現を探索する必要がある。ソフトウェアでこのタスクを実行するために、複数の探索アルゴリズムが使用される。このようなアルゴリズムの１つが、決定性有限オートマトン（ＤＦＡ）である。ただし、ＤＦＡ探索アルゴリズムを使用する場合、反復パターンによるグラフサイズの指数関数的拡大およびデータストリーム内の偽一致などの制限が生じる可能性がある。
【０００６】
これらの制限があるため、コンテンツ処理アプリケーションは、パターン探索によって生じる結果に対してかなりの量の後処理を必要とする。後処理は、接続種別などの他の接続状態情報およびパケットに包含されるプロトコルヘッダ内の特定の値によって、一致パターンを識別する必要がある。またこれは、特定の他のタイプの計算集約型識別を必要とし、例えば、パターン一致が有効であるのは、それがデータストリーム内の特定の位置範囲内にあるか、あるいは、別のパターンが後に続いてかつ先行するパターンから特定の範囲内にあるか、または、先行するパターンから特定のオフセット位置もしくはそのオフセット位置の後にある場合のみである。例えば、正規表現一致は、種々の演算子と単一文字を組み合わせて、複雑な表現の構成を可能にする。
【発明の開示】
【０００７】
電気通信およびネットワーキングに使用されるアプリケーションのようなコンテンツ処理アプリケーションの性能は、一般に、比較的高速の処理速度を提供するプロセッサ上で動作することで達成できる。例えば、侵入検知／防止およびアンチウィルスなどのアプリケーションは、到着データを到着と同時に高速で処理してデータの遅延および／または損失を回避する。メモリへの高速アクセスはまた、パターン探索によって生じる結果に依存する処理を含む大量の後処理を必要とするアプリケーションにとっても重要である。低遅延メモリデバイスは、比較的高速のアクセス時間を可能にする１つの解決策を提供する。低遅延デバイスの中には、１００ナノ秒よりもかなり短いアクセス時間を提供するものもある。しかし、１つのメモリに格納されている同一データ構造に対して複数のアクセス要求がなされると、それが低遅延メモリであっても、同一データ構造に対する後続の要求は、一般に、先行の要求が完了するまで遅延されることになる。
【０００８】
重複するアクセス要求に起因する遅延を低減する手法の１つは、複数のメモリバンクを包含するように構成された低遅延メモリを使用することである。これにより、複数のメモリバンクのうち２つ以上のメモリ上に同一データが格納または複製される。低遅延メモリ内に格納される全データを複製すれば、データの冗長コピーが重複するアクセス要求に個別に対処するために確実に利用可能になり、これにより遅延が短縮される。不都合な点は、低遅延メモリは高価であり、結果的に他の従来メモリよりも容量が小さいことである。このように、全格納データを複製することは、アプリケーションによっては、実際的でなく、不可能である場合もある。さらに、複数の独立したプロセッサのそれぞれが低遅延メモリに格納されている同一データにアクセス要求を行うマルチプロセッサシステムでは、アクセス要求が重複する可能性は、一般により高くなる。
【０００９】
本発明は、複製の範囲が選択可能となるように、低遅延メモリに格納されたデータを選択的に複製することによって、これらの制限を克服する。例えば、複製の範囲は、特定データ構造体の重要度（例えば、利用頻度）に依存してもよい。したがって、比較的アクセス頻度の低いデータ構造体は、重複するアクセス要求の確率が相対的に低くなることから、複製されなくてもよいか、小範囲の複製でよい。逆に、相対的にアクセス頻度の高いデータ構造体は、重複するアクセス要求の確率が一般に利用頻度に応じて高まることから、２つまたはそれ以上複製されてもよい。
【００１０】
低遅延メモリのアクセスコントローラは、データ構造体を低遅延メモリに格納する要求を受信する。データ構造体は、例えば、決定性有限オートマトン（ＤＦＡ）グラフであってもよい。この要求は、システムの初期設定時にソフトウェアによって生成されることができ、格納されるデータ構造体の複製係数を含む。データ構造体は、複製係数に従って複製される。好ましくは、低遅延メモリは複数のメモリバンクを有するように構成され、各複製は異なるバンクに格納される。すでに格納されている複製されたデータ構造体へのアクセス要求を受信すると、低遅延メモリのアクセスコントローラは、要求されたデータ構造体の複製を格納している２つ以上のメモリバンクのうちの１つを選択する。選択すると、低遅延メモリのアクセスコントローラは、その選択されたメモリバンクにアクセスする。したがって、同一データ構造体の複製された他のバージョンは、この第１の要求が処理されている間であっても、同一データ構造体に対する後続の要求の処理に利用可能である。
【００１１】
複製係数は選択可能であり、選択された複製数を表す。例えば、複製係数は、データ構造体の１、２、４または８個のコピーの格納を指示する１、２、４または８であってもよい。低遅延メモリの種類は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、低遅延ダイナミックランダムアクセスメモリ（ＲＬＤＲＡＭ）、同期ランダムアクセスメモリ（ＳＲＡＭ）、高速サイクルランダムアクセスメモリ（ＦＣＲＡＭ）およびこれらの組合せから成るグループから選択されることができる。特定の実施形態においては、複製係数はソフトウェアによって決定される。例えば、ソフトウェアは、それぞれのデータ構造体に対するアクセス要求を追跡し、各データ構造体に対するアクセス回数および／またはアクセス頻度に基づいて複製係数を決定することができる。複製係数を格納し、そのデータ構造体が低遅延メモリに次にロードされる際に使用することができる。特定の実施形態においては、複製係数を不揮発性メモリに格納し、システムを次にリブートする際に使用できる。
【００１２】
２つ以上のメモリバンクのうちのいずれを使用するかの選択において、低遅延メモリのアクセスコントローラは、各メモリバンクのその時点での使用（使用量および／または使用頻度）を求める。特定の実施形態においては、低遅延メモリのアクセスコントローラは、複数のメモリバンクのそれぞれに対する各待ち行列を有する。低遅延メモリのアクセスコントローラは、次に、サーモメータ技術を用いてそれぞれの待ち行列のサイズを比較して、いずれのメモリバンクが利用可能であるか、または使用頻度が少ないメモリバンクはいずれであるかを判断する。例えば、各メモリバンクには、各待ち行列が設けられている。次に、要求されたデータ構造体の複製を格納している複数のメモリバンク間で待機中の命令の数を比較して、待機命令の数が最も少ないメモリバンクを選択することができる。このように、待機命令の数をサーモメータ値と見なすことにより、最低値を有するサーモメータを選択して、低遅延メモリへのアクセス要求が最小遅延で達成される可能性を増大させることができる。
【００１３】
特定の実施形態においては、低遅延メモリのアクセスコントローラは、２つ以上の低遅延メモリ（ＬＬＭ）アクセスバスを介して低遅延メモリに結合される。例えば、個別の１６のメモリバンクを有する低遅延メモリは、２つのＬＬＭアクセスバスを用いて低遅延メモリのアクセスコントローラに結合されてもよい。メモリバンクを複数のバス間に分散させれば、性能はさらに向上する。異なるメモリバンクに格納されている同一データ構造体の複製に対する重複するアクセスは、異なるメモリバンクが同一バスを用いて結合されている場合、衝突を生じることがある。冗長バスによって、バスの衝突および遅延の可能性が減じられる。一構成においては、第１の８個のメモリバンクが第１のＬＬＭアクセスバスを使用して結合され、第２の８個のメモリバンクが第２のＬＬＭアクセスバスを用いて結合される。低遅延メモリに格納されているデータ構造体を複製する場合、その複製の少なくともいくつかは、低遅延メモリコントローラに異なるアクセスバスで接続されているメモリバンクに格納される。
【００１４】
本発明の上述および他の目的、特徴および利点は、添付図面に示す本発明の好ましい実施形態に関する以下のより詳細な説明から明らかとなるであろう。添付図面では、同一参照符号は異なる図面においても同一部分を指す。図面は、必ずしも縮尺通りではなく、本発明の原理を示すことに重点を置いている。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の好ましい実施形態について説明する。
【００１６】
本発明は、メモリ内のデータ構造を選択的に複製することによって、低遅延メモリに効率的にアクセスする方法および装置を提供する。上記メモリは、同一データ構造の複製されたコピーを格納するように構成される複数の個別のメモリバンクを有する。格納されたデータ構造へのアクセス要求を受信すると、低遅延メモリのアクセスコントローラはメモリバンクのうちの１つを選択し、選択されたメモリバンク内の格納データにアクセスする。メモリバンクの選択は、異なるメモリバンクの相対的な利用度を比較するサーモメータ技術を用いて達成できる。取得される効率が反映された例示的なデータ構造体には、決定性有限オートマトン、および格納される（すなわち、書き込まれる）よりも高頻度でロードされる（すなわち、読み取られる）他のデータ構造が含まれる。
【００１７】
図１は、本発明の原理によるネットワークサービスプロセッサ１１０を含むセキュリティアプライアンスシステム１００を示すブロック図である。セキュリティアプライアンスシステム１００は、１つのイーサネット（登録商標）ポート（Ｇｉｇ Ｅ）で受信したパケットを別のイーサネット（登録商標）ポート（Ｇｉｇ Ｅ）に切り換えて、受信したパケットに複数のセキュリティ機能を実行した後にそのパケットを転送する、スタンドアロン型システムである。例えば、セキュリティシステム１００を用いて、広域ネットワーク（ＷＡＮ）上で受信するパケットに対してセキュリティ処理を実行した後に、そのパケットをローカルエリアネットワーク（ＬＡＮ）に転送することができる。
【００１８】
ネットワークサービスプロセッサ１１０は、ハードウェアパケット処理、バッファリング、ワークスケジューリング、順序づけ、同期化、およびキャッシュコヒーレンスサポートを提供することにより、全てのパケット処理タスクの速度を高める。ネットワークサービスプロセッサ１１０は、受信されたパケットにカプセル化されている開放型システム間相互接続ネットワークのＬ２からＬ７層までのプロトコルを処理する。
【００１９】
ネットワークサービスプロセッサ１１０は、イーサネット（登録商標）ポート（Ｇｉｇ Ｅ）から物理（ＰＨＹ）インタフェース１０４ａ、１０４ｂを介してパケットを受信し、受信されたパケットに対してＬ７〜Ｌ２ネットワークプロトコル処理を実行し、処理されたパケットを物理インタフェース１０４ａ、１０４ｂから、またはＰＣＩ（周辺装置相互接続（Peripheral Component Interconnect））バス１０６を介して転送する。ネットワークプロトコル処理には、ファイアウォール、アプリケーションファイアウォール、ＩＰセキュリティ（ＩＰＳＥＣ）および／またはセキュアソケットレイヤ（ＳＳＬ）を含む仮想プライベートネットワーク（ＶＰＮ）、侵入検知システムおよびアンチウィルスなどのネットワークセキュリティプロトコルの処理が含まれてもよい。
【００２０】
ネットワークサービスプロセッサ１１０内のダイナミックランダムアクセスメモリ（ＤＲＡＭ）コントローラは、ネットワークサービスプロセッサ１１０に結合されるＤＲＡＭ１０８へのアクセスを制御する。特定の実施形態においては、ＤＲＡＭ１０８はネットワークサービスプロセッサ１１０の外部に存在する。ＤＲＡＭ１０８は、ＰＨＹインタフェース１０４ａ、１０４ｂまたはＰＣＩインタフェース１０６から受信されるデータパケットを、ネットワークサービスプロセッサ１１０によって処理するために格納する。ＰＣＩインタフェース１０６は、ＰＣＩ拡張（ＰＣＩ−Ｘ）インタフェース１０６であってもよい。
【００２１】
ネットワークサービスプロセッサ１１０内の低遅延メモリコントローラは、低遅延メモリ（ＬＬＭ）１１８を制御する。ＬＬＭ１１８は、侵入検知システムまたはアンチウィルスアプリケーションに必要とされる正規表現一致を含む、高速検索を可能にするインターネットサービス／セキュリティアプリケーションに使用されることができる。
【００２２】
正規表現は、文字列一致パターンを表現する一般的な方法である。正規表現の極小要素は、一致されるべき単一文字である。これらは、ユーザが連結、選択、クリーネ・スターなどを表現できるようにするメタ文字演算子と組み合わせることもできる。連結は、単一文字（またはサブ文字列）から複数の文字一致パターンを生成するために使用され、選択（|）は、２つ以上のサブ文字列のいずれにも一致できるパターンを生成するために使用される。クリーネ・スター（*）を使用することによって、パターンが文字列内でそのパターンのゼロ（０）またはそれ以上の出現に一致することが可能になる。それぞれの演算子と単一文字との組合せにより、複雑な表現の構築が可能になる。例えば、表現（th(is|at)*）は、th、this、that、thisis、thisat、thatis、thatat、などに一致する。
【００２３】
図２は、図１に示すネットワークサービスプロセッサ１１０のブロック図である。ネットワークサービスプロセッサ１１０は、図１に関連して説明したとおり、少なくとも１つのプロセッサコア１２０を使用して高いアプリケーション性能を提供する。
【００２４】
パケットはＳＰＩ−４．２またはＲＧＭIIインタフェースを介して受信され、例えばＧＭＸ／ＳＰＸユニット１２２ａ、１２２ｂの任意の１つなどのようなインタフェースユニットによって処理される。パケットは、ＰＣＩインタフェース１２４によって受信されることもできる。ＧＭＸ／ＳＰＸユニット（１２２ａ、１２２ｂ）は、受信されたパケットに含まれるＬ２ネットワークプロトコルヘッダ内の様々なフィールドをチェックすることによって受信されたパケットの前処理を実行し、次にこのパケットをパケット入力ユニット１２６に転送する。
【００２５】
パケット入力ユニット１２６は、受信されたパケットに含まれるネットワークプロトコルヘッダ（例えば、Ｌ３およびＬ４ヘッダ）のさらなる前処理を実行する。前処理には、ＴＣＰ／ユーザデータグラムプロトコル（ＵＤＰ）（Ｌ３ネットワークプロトコル）に関するチェックサムのチェックが含まれる。
【００２６】
フリープールのアロケータ１２８が、レベル２キャッシュメモリ１３０および外部ＤＲＡＭ１０８における空きメモリへのポインタのプールを保持する。パケット入力ユニット１２６は、ポインタのプールの１つを使用して、受信されたパケットデータをレベル２キャッシュメモリ１３０に格納し、ポインタの別のプールを使用してプロセッサコア１２０に対してワーク待ち行列エントリを割り当てる。
【００２７】
パケット入力ユニット１２６は次に、レベル２キャッシュ１３０または外部ＤＲＡＭ１０８内のバッファにパケットデータを書き込む。好ましくは、上記パケットデータは、プロセッサコア１２０のうちの少なくとも１つで実行される上位層ソフトウェアに好都合のフォーマットでバッファに書き込まれる。したがって、上位層のネットワークプロトコルによるその後の処理が容易になる。
【００２８】
ネットワークサービスプロセッサ１１０は、１つまたは複数の特定用途向けコプロセッサを有することもできる。コプロセッサを有する場合、これらコプロセッサはプロセッサコア１２０から処理の一部をオフロード（負荷軽減）し、これにより、ネットワークサービスプロセッサ１１０が高スループットのパケット処理を達成可能にする。例えば、受信パケットの圧縮および解凍を専用に実行する圧縮／解凍コプロセッサ１３２が設けられる。図２を参照して、一実施形態においては、アンチウィルス、侵入検知システムおよび他のコンテンツ処理アプリケーションに必要なパターンおよび／または署名一致の処理を速くするように適合化された専用のＤＦＡスレッドエンジンを有するＤＦＡユニット４００が設けられる。ＤＦＡユニット４００の使用により、パターンおよび／または署名一致の処理が速くなり、例えば、最大４ギガビット／秒の速度で実行される。
【００２９】
Ｉ／Ｏインタフェース１３６は、全体のプロトコルおよびアービトレーション（調停）を管理し、コヒーレントなＩ／Ｏ区分化（partitioning）を提供する。Ｉ／Ｏインタフェース１３６は、Ｉ／Ｏブリッジ１３８およびフェッチ・アンド・アッドユニット１４０を有する。フェッチ・アンド・アッドユニット１４０内のレジスタを用いて、パケット出力ユニット１４６を介して処理されたパケットを転送するのに使用される出力待ち行列の長さを保持する。Ｉ／Ｏブリッジ１３８は、コヒーレントメモリバス１４４、Ｉ／Ｏバス１４２、パケット入力ユニット１２６、およびパケット出力ユニット１４６間で転送される情報を格納するためのバッファ待ち行列を含む。
【００３０】
パケット順序／ワークモジュール１４８は、プロセッサコア１２０に対するワークをキューイングして（待ち行列に入れて）スケジューリングする。ワーク待ち行列エントリを待ち行列に追加することによって、ワークがキューイングされる（待ち行列に入れられる）。例えば、ワーク待ち行列エントリは、パケットの到着毎にパケット入力ユニット１２６によって追加される。プロセッサコア１２０のワークのスケジューリングには、タイマユニット１５０が使用される。
【００３１】
プロセッサコア１２０は、パケット順序／ワークモジュール１４８にワークを要求する。パケット順序／ワークモジュール１４８は、プロセッサコア１２０のうちの１つに対してワークを選択（すなわち、スケジューリング）し、そのワークを記述するワーク待ち行列エントリを指すポインタをプロセッサコア１２０に返す。
【００３２】
次に、プロセッサコア１２０は、命令キャッシュ１５２、レベル１データキャッシュ１５４、および暗号アクセラレータ１５６を有する。一実施形態においては、ネットワークサービスプロセッサ１１０（図１）は、１６個のスーパースカラー縮小命令セットコンピュータ（ＲＩＳＣ）型プロセッサコア１２０を有する。特定の実施形態においては、スーパースカラーＲＩＳＣ型プロセッサコア１２０はＭＩＰＳ６４バージョン２プロセッサコアの拡張機能を含む。
【００３３】
レベル２キャッシュメモリ１３０および外部ＤＲＡＭ１０８は、プロセッサコア１２０およびＩ／Ｏコプロセッサデバイス（例えば、圧縮／解凍コプロセッサ１３２）の全てによって共有される。各プロセッサコア１２０は、コヒーレントメモリバス１４４によってレベル２キャッシュメモリ１３０に結合される。コヒーレントメモリバス１４４は、プロセッサコア１２０、Ｉ／Ｏインタフェース１３６、レベル２キャッシュメモリ１３０およびレベル２キャッシュメモリコントローラ１３１間の全てのメモリおよびＩ／Ｏトランザクションのための通信チャネルである。一実施形態においては、コヒーレントメモリバス１４４は１６個のプロセッサコア１２０に対して適応でき、ライトスルーによって完全にコヒーレントなレベル１データキャッシュ１５４をサポートする。好ましくは、コヒーレントメモリバス１４４はＩ／Ｏを優先順位付けする能力により高度なバッファ機能を果たす。
【００３４】
レベル２キャッシュメモリコントローラ１３１は、メモリ参照コヒーレンスを保持する。レベル２キャッシュメモリコントローラ１３１は、ブロックがレベル２キャッシュメモリ１３０もしくは外部ＤＲＡＭ１０８に格納されていても、または「処理中（in-flight）」であっても、あらゆるＦＩＬＬ（フィル）要求に対して、ブロックの最新コピーを返す。レベル２キャッシュメモリコントローラ１３１はまた、各プロセッサコア１２０内にデータキャッシュ１５４に対するタグを２部格納する。レベル２キャッシュメモリコントローラ１３１は、キャッシュブロック格納の要求のアドレスをデータキャッシュタグと比較し、格納命令が別のプロセッサコアからであるか、またはＩ／Ｏインタフェース１３６を介するＩ／Ｏコンポーネントからであるときは、常にプロセッサコア１２０のデータ−キャッシュタグを（２部とも）無効にする。
【００３５】
特定の実施形態においては、ＤＲＡＭコントローラ１３３は、最大１６メガバイトのＤＲＡＭ１０８をサポートする。好ましくは、ＤＲＡＭコントローラ１３３は、ＤＲＡＭ１０８との６４ビットまたは１２８ビットインタフェースのいずれかをサポートする。さらに、ＤＲＡＭコントローラ１３３は、ＤＤＲ−Ｉ（ダブルデータレート）およびＤＤＲ−IIプロトコルなどの好適なプロトコルをサポートすることができる。
【００３６】
プロセッサコア１２０によってパケットが処理されると、パケット出力ユニット１４６は、メモリ１３０、１０８からパケットデータを読み出し、Ｌ４ネットワークプロトコル後処理を実行し（例えば、ＴＣＰ／ＵＤＰチェックサムを生成し）、上記パケットをＧＭＸ／ＳＰＸユニット１２２ａ、１２２ｂを介して転送し、パケットによって使用されたＬ２キャッシュ１３０／ＤＲＡＭ１０８を解放する。
【００３７】
低遅延メモリコントローラ１６０は、低遅延メモリ１１８との間の処理中（in-flight）のトランザクション（ロード／格納）を管理する。好ましくは、低遅延メモリ１１８は全てのプロセッサコア１２０によって共有される。メモリ遅延とは、プロセッサコア１２０によって開始されたメモリ要求が満たされるまでに要する時間を指す。低遅延メモリ１１８は、マイクロ秒以下の遅延を実現できる。低遅延メモリの例示的な種類としては、ＤＲＡＭ、低遅延ダイナミックランダムアクセスメモリ（ＲＬＤＲＡＭ）、同期ランダムアクセスメモリ（ＳＲＡＭ）、高速サイクルランダムアクセスメモリ（ＦＣＲＡＭ）または技術的に公知の他の任意の種類の低遅延メモリが含まれる。例えば、ＲＬＤＲＡＭは、約３０ナノ秒またはそれ以下の遅延を提供する。各プロセッサコア１２０は、低遅延メモリ（ＬＬＭ）バス１５８によってＤＦＡユニット４００の低遅延メモリコントローラ１６０に直接結合される。ＬＬＭバス１５８は、プロセッサコア１２０と低遅延メモリコントローラ１６０との間のコンテンツアウェア型アプリケーション処理のための通信チャネルである。ＤＦＡユニット４００は、低遅延メモリ１１８へのアクセスを制御するためにプロセッサコア１２０と低遅延メモリ１１８との間に結合される。
【００３８】
図３は、本発明の原理によるＲＩＳＣプロセッサ１２０のうちの１つを示す、より詳細なブロック図である。プロセッサコア１２０は、整数演算ユニット３０２、命令ディスパッチユニット３０４、命令フェッチユニット３０６、メモリ管理ユニット３０８、システムインタフェース３１０、低遅延インタフェース３５０、ロード／格納ユニット３１４、書込みバッファ３１６、および１つまたは複数のセキュリティアクセラレータ１５６を有する。特定の実施形態においては、プロセッサコア１２０はデバッグ操作を実行できるデバッガインタフェース３３０（例えば、ＥＪＴＡＧインタフェース）も有する。システムインタフェース３１０は、外部メモリへのプロセッサアクセスを制御する。外部メモリは、個々のプロセッサ１２０の外部にある。例えば、外部メモリは、プロセッサコア１２０と同一半導体基板上などの同一デバイス上に配置することもできる。これに加えて、もしくは代替として、外部メモリはプロセッサデバイスの外部に、例えばマザーボード上、または異なるモジュール全体の上にあってもよい。外部メモリには、レベル２キャッシュメモリ１３０、主／メインメモリ（すなわち、外部ＤＲＡＭ１０８）およびレベル２キャッシュメモリ１３０とメインメモリ１０８との組合せが含まれてもよい。
【００３９】
整数演算ユニット３０２は一般に、乗算ユニット３２６、少なくとも１つのレジスタファイル（主レジスタファイル）３２８、および２つの保持レジスタ３３０ａ、３３０ｂを有する。保持レジスタ３３０ａ、３３０ｂは、低遅延メモリ１１８に書き込まれるデータと、低遅延メモリ１１８から読み出されたデータとを一時的に格納するために使用される。上記データは、本発明の原理に従って、低遅延メモリのロード／格納命令を用いてプロセッサコア１２０と低遅延メモリ１１８との間で転送される。さらに、保持レジスタ３３０ａ、３３０ｂは、命令パイプラインの効率を、このパイプラインを機能停止する前に２つの未処理ロードを許容することによって向上させる。２つの保持レジスタを示したが、１つ、または３つ以上の保持レジスタを使用してもよい。
【００４０】
特定の実施形態においては、乗算ユニット３２６は６４ビットのレジスタの直接乗算を実行できる。好ましくは、命令フェッチユニット３０６は、所望の命令をローカルに格納するための命令キャッシュ（ＩＣａｃｈｅ）１５２を有する。さらに、ロード／格納ユニット３１４はデータキャッシュ１５４を有する。一実施形態においては、命令キャッシュ１５２は３２キロバイトの記憶容量を備え、データキャッシュ１５４は８キロバイトの記憶容量を備え、書込みバッファ３１６は２キロバイトの記憶容量を備える。特定の実施形態においては、メモリ管理ユニット３０８は、計算速度をさらに上げるために変換ルックアサイドバッファ３４０を有する。
【００４１】
特定の実施形態においては、プロセッサコア１２０は、暗号アクセラレータを含む暗号アクセラレーションモジュール（セキュリティアクセラレータ）１５６を有する。暗号アクセラレーションは、一般に、１つまたは複数の暗号化アルゴリズムによって提供される。例示的なアルゴリズムとしては、トリプルデータ暗号化規格（３ＤＥＳ）、高度暗号化規格（ＡＥＳ）、セキュアハッシュアルゴリズム（ＳＨＡ−１）、メッセージダイジェストアルゴリズム５番（ＭＤ５）が含まれる。暗号アクセラレーションモジュール１５６は、転送を通して、演算ユニット３０２内の主レジスタファイル３２８と通信する。乗算／除算ユニット３２６では、ＲＳＡおよびディフィ−ヘルマン（ＤＨ）アルゴリズムなどのいくつかのアルゴリズムが実行される。これらのようなアルゴリズムはメモリ集約的であって、例えば、格納されているルックアップテーブルへの多大なアクセスを必要とする。これらのようなメモリ集約的アルゴリズムの性能は、低遅延メモリ１１８を使用してアルゴリズムで用いられるデータを格納／検索することにより、向上する。低遅延メモリ１１８とプロセッサ１２０とを専用のＬＬＭバス１５８を使用して結合すれば、システムの全体性能をさらに高めることができる。
【００４２】
ＤＦＡユニット４００は、低遅延メモリ１１８とのインタフェースのための低遅延メモリコントローラ１６０を有する。コントローラのタイプは、使用される低遅延メモリの種類に依存する。例えば、外部の低遅延メモリ１１８は、アイダホ州ボイジー所在のMicron Technology社から市販されている低遅延ＤＲＡＭ（ＲＬＤＲＡＭ）などのＤＲＡＭパーツを含んでもよい。
【００４３】
図４は、例示的なＤＦＡユニット４００のブロック図である。ＤＦＡユニット４００は３つの主コンポーネント、すなわち、低遅延メモリ１１８との相互アクセスを制御する低遅延メモリ（ＬＬＭ）コントローラ１６０と、低遅延メモリ１１８に格納されるＤＦＡグラフを走査する１つまたは複数のＤＦＡスレッドエンジン４０５と、ＤＦＡグラフへのアクセスがそれを介して達成される命令入力ユニット４１０とを有する。好ましくは、ＤＦＡユニット４００は、格納されているＤＦＡグラフへのほぼ同時のアクセスをサポートすることによってシステムの性能をさらに高めるために、２つ以上のＤＦＡスレッドエンジン４０５を有する。一般に、ＤＦＡスレッドエンジン４０５はほぼ同一であり、互換性がある。例示的な一実施形態では、ＤＦＡユニット４００は、低遅延メモリ１１８内に独立して格納される１６個のグラフまで走査できる１６個のＤＦＡスレッドエンジン４０５を有し、格納されたグラフのそれぞれにつき１つのＤＦＡスレッドエンジン４０５が使用される。冗長性によるが、上記独立して格納されるグラフのうちの少なくともいくつかは他のグラフの複製コピーであってもよい。すなわち全く同一のグラフを格納していてもよい。
【００４４】
ＤＦＡユニット４００は、ＬＬＭインタフェース４２５と称される適切なインタフェースを介して外部低遅延メモリ１１８に結合される。特定の実施形態においては、複数のＬＬＭインタフェースが設けられる。各インタフェース４２５は、個々のＬＬＭアクセスバスを介して低遅延メモリ１１８に結合される。好ましくは、ＤＦＡユニット４００は、低遅延メモリ１１８への同時アクセスをサポートするために、個々のＬＬＭアクセスバスを使用して低遅延メモリ１１８に結合される２つ以上のＬＬＭインタフェース４２５を有する。したがって、２つ以上のインタフェース４２５のうちの１つが第１のメモリアクセス要求に対処するために使用中である間、他のインタフェース４２５のうちの１つは別の要求に対処するのに利用できる状態にある。この例示的な実施形態では、ＤＦＡユニット４００は、それぞれが１８データビットを含む２つの低遅延ＤＲＡＭインタフェース４２５ａ、４２５ｂ（全体で４２５）を有する。当業者には周知のとおり、メモリへのインタフェースは、メモリとの間で読出し／書込みされるデータビットと、データが格納されているメモリ内の位置を示すアドレスビットと、チップ選択ビット、クロック、読出し／書込みイネーブルビットおよびバンク選択ビットなどの制御ビットとを含む。
【００４５】
ＤＦＡユニット４００は、Ｉ／Ｏブリッジ１３８およびＩ／Ｏバス１４２を介してメインメモリ１３０、１０８にも結合される。さらに、ＤＦＡユニット４００は、別のインタフェースを用いて１つまたは複数のプロセッサコア１２０に結合される。例えば、ＤＦＡユニット４００は、ＤＦＡユニット４００とプロセッサコア１２０との間の専用の直接アクセスのための、低遅延メモリバス１５８へのインタフェースを有する。ＬＬＭバス１５８は、メインＩ／Ｏバス１４２から分離されているため、通常はシステムの他の構成要素に対するアクセス要求のために先に占有されてしまうことがなく、したがって、低遅延メモリ１１８との間のアクセス速度はさらに上がる。さらに、専用のＬＬＭバス１５８の使用によってオペレーティングプロトコルの簡略化が可能であり、やはり全体的な実行速度が上がる。これは、一般に競合ベースのアクセスプロトコルを使用するＩ／Ｏバス１４２などの共有システムバス（すなわち、バス１４２がバストランザクションに対処していて使用中であれば、新規要求は拒絶されるか、少なくともバス１４２が利用可能になるまで遅延される）とは対照的である。
【００４６】
好ましくは、外部ＬＬＭインタフェース４２５のデータレートは、データの高速転送を高めるために比較的高速である。例えば、外部ＬＬＭインタフェース４２５のデータレートは、プロセッサコア１２０のクロックレートと同一であってもよい。このような高速インタフェース４２５を使用することにより、ＬＬＭコントローラ１６０は、外部低遅延メモリ１１８内の利用可能な１つまたは複数のメモリバンクに対する多くの処理中（in-flight）のトランザクションを管理できる。以下に詳述するように、ＤＦＡユニット４００は自動バンク複製も実行してバンク衝突を最小限に抑える。
【００４７】
この例示的な実施形態では、ＬＬＭコントローラ１６０は、ＬＬＭインタフェース４２５の任意の組合せにより、結合された１ギガバイトまでの低遅延メモリ１１８をアーキテクチャ的にサポートすることができる。ＬＬＭバス１５８はプロセッサコア１２０に直接接続され、これにより、プロセッサコア１２０には低遅延メモリ１１８への超高速アクセス経路が可能になる。この例示的な実施形態では、プロセッサコアの個々の動作は、３６ビットまたは６４ビットのロード／格納のいずれであってもよい。
【００４８】
暗号化処理などのコンテンツアウェア型アプリケーションの処理は、パターンおよび／または表現（データ）を利用する。パターンおよび／または表現は繰返し参照されてもよく、好ましくは低遅延メモリ１１８に格納される。パターンおよび／または表現は、ＤＦＡと称される特殊状態マシンの形式などの好適なデータ構造に従って配列される。ＤＦＡへの入力は、１つまたは複数のバイト（１バイト＝８ビット）で形成される文字列表現である。このようなＤＦＡでは、アルファベットが１バイトである。各入力バイトが、ＤＦＡの状態マシンを１つの状態から次の状態に遷移させる。状態および遷移関数は、グラフで表示することができる。
【００４９】
一般に、ＤＦＡは、図５Ａおよび図５Ｂに示すような弧によって相互に接続される複数のノードを含むグラフ、またはモデルとして表現できる。各グラフノードは状態マシンの個々の状態を表し、異なるグラフ弧は相互に接続されるノード間の状態遷移を表す。状態マシンの現在の状態は、グラフの特定のノードを選択するノード識別子である。特定の弧の選択は、状態マシン（例えば、ＤＦＡ）への入力バイト数によって決定される。したがって、第１のノードおよび入力バイト数を指定する状態を仮定すると、状態は、第１のノードから上記入力バイト数に対応する弧に沿って第２のノードに遷移する。場合によっては、第１のノードと第２のノードは同一である。ノード数は、小型サイズのグラフで数ノードから約128,000ノードまでの範囲内であってもよい。大型サイズのグラフは1,000,000ノードまでを有してもよく、それ以上であってもよい。
【００５０】
ＤＦＡスレッドエンジン４０５は、パターン探索の実行にも利用できる。図５Ａおよび図５Ｂに示す例では、ＤＦＡグラフ５００は、ターゲットの文字列表現「ａｂｃ」を探索するように設計されている。したがって、ＤＦＡグラフは、文字「ａｂｃ」の文字列に正確に一致する入力データを探索するために使用される。この表現は固定長表現であり、これより、ノード数、したがってグラフの深さは既知である（すなわち、一定である）。
【００５１】
ＤＦＡグラフ５００を生成するために、上記表現が解析され、コンパイラがルートノード（すなわち、ノード「０」）を生成し、意図する表現に即してグラフにノード１から３を追加する（すなわち、ターゲットの文字列の各文字につき１つの追加ノード）。本例を引き続き参照すると、例示的な文字の入力ストリームが文字列「…１２ａｂｃ３…」であるとする。ＤＦＡグラフを使用して入力文字列が探索され、ターゲットの文字列「ａｂｃ」が識別される。
【００５２】
ＤＦＡの初期状態は、ノード「０」である。各文字またはバイトは逐次読み取られ、ＤＦＡは、ターゲットの文字列表現の最初の文字が読み取られるまでノード０に留まる。例えば、入力ストリームにおけるターゲットの文字列表現の最初の文字「ａ」が検出されると、「ａ」で表記された弧が辿られ、状態はノード０からノード１に遷移する。次に、入力ストリームの次の文字が読み取られ、これがターゲットの文字列表現の次の文字（すなわち、「ｂ」）以外のいずれかの文字であることが検出されれば、「not ｂ」で表記された、ノード１からノード０に戻る弧が辿られる。しかし、入力ストリーム内の次の文字として文字「ｂ」が検出されると、「ｂ」で表記されたノード１からノード２への弧が辿られる。次いで、入力ストリームの次の文字が読み取られ、これがターゲットの文字列表現の次の文字（すなわち、「ｃ」）以外のいずれかの文字であれば、「not ｃ」で表記されたノード２からノード０に戻る弧が辿られる。しかし、ノード２において、入力ストリーム内の文字「ｃ」が検出されると、「ｃ」で表記されたノード２からノード３への弧が辿られる。ターゲットの文字列表現「ａｂｃ」は固定長表現であることから、ノード３は終端ノードであり、探索の結果が報告される。
【００５３】
図５Ｂに示す別の例では、２つの文字列「ａｂｃｄ」ＯＲ「ａｂｃｅ」の１つまたは複数の出現を見出すために、先の例のグラフが拡張されている。したがって、２つの追加ノード、すなわち、ノード４および５が追加されており（例えば、「ｄ」に対するノード４および「ｅ」に対するノード５）、１つのノードが各文字列の第４文字に対するものである。いずれの文字列も最初の３文字が同一であるため、ノード４および５は、図のようにノード３に接続されている。好ましくは、いずれの文字列の場合もその出現は全て、入力文字列を通る単一の「パス」上で識別される。
【００５４】
文字列「ｘｗａｂｃｄ４５４ａｂｃｅａｂｃｄｓｆｋ」などの例示的な入力文字列は、ＤＦＡを通過し、結果として３つの「マーク付けされた」遷移が生成される。マーク付けされた遷移は、入力文字列内に配置される文字列セグメントの終わりで発生する（例えば、「ｄ」または「ｅ」が存在している各位置で１つ）。したがって、３つのマーク付けされた遷移は、３つの文字列が発見されたことを表す。最初と最後のマークはノード３からノード４への遷移を示し、入力文字列内の文字列「ａｂｃｄ」の存在および位置を表す（すなわち、ＤＴＥバイト＝５、先行＝３、次＝４およびＤＴＥバイト＝１７、先行＝３、次＝４）。中央のマーク付けされたノードは、ノード３からノード５への遷移を示し、入力文字列内の文字列「ａｂｃｅ」の存在を表す（すなわち、ＤＴＥバイト＝１３、先行＝３、次＝５）。
【００５５】
さらに、コンパイラで１つまたは複数の意図する表現を解析し、意図する表現が要求する通りにグラフの適切なノードを生成することによって、さらに複雑なＤＦＡグラフを同様に生成することができる。したがって、単一のグラフを使用して、固定長、可変長および固定／可変長の組合せである複数の表現を探索することができる。
【００５６】
ＤＦＡスレッドエンジン４０５のそれぞれは、低遅延メモリ１１８に格納されている個々のＤＦＡグラフのノードを走査する能力を有する。一般に、ＤＦＡスレッドエンジン４０５は、ハードウェア、ソフトウェアまたはハードウェア／ソフトウェアの組合せを使用して実現できる状態マシンである。特定の実施形態においては、ＤＦＡスレッドエンジン４０５は、組合せ論理を用いてハードウェアで実現される。他の実施形態では、ＤＦＡスレッドエンジン４０５のそれぞれは異なるプロセッサ上で個々に実現される。さらに他の実施形態では、ＤＦＡスレッドエンジン４０５は共通プロセッサを使用して実現される。例えば、ＤＦＡスレッドエンジン４０５のそれぞれは、共有のマルチタスク環境を提供するように適合化された共通プロセッサ上で実行される個別のタスク（すなわち、命令シーケンス）であってもよい。マルチタスキングは、オペレーティングシステムにおいて複数の独立したジョブ（すなわち、ＤＦＡスレッドエンジン４０５）間で単一のプロセッサを共有する技術である。さらに、もしくは代替として、ＤＦＡスレッドエンジン４０５のそれぞれは、マルチスレッディング能力を提供するように適合化された共通プロセッサ上で実行される個別のプロセススレッドであってもよい。マルチスレッディングとマルチタスキングとの差は、スレッドが一般に、マルチタスキング下でタスクを実行するのに比べてその環境を互いに多く共用する点である。例えば、複数スレッドが単一アドレス空間および全体変数セットを共有する一方で、スレッドのプログラムカウンタおよびスタックポインタの値によって各スレッドを区別することもできる。
【００５７】
動作中、プロセッサコア１２０は、ＤＦＡ命令待ち行列４１５（図４）にＤＦＡ命令を送出する。例えば、ＤＦＡ命令待ち行列４１５はメインメモリ１３０、１０８内に維持される。ＤＦＡ命令は、いずれのパケットデータを使用し、いずれのＤＦＡグラフを走査するかを定義する。パケットデータは、一般にメインメモリ１３０、１０８に格納されるが、ＤＦＡグラフは低遅延メモリ１１８に格納される。動作中、ＤＦＡユニット４００は命令待ち行列４１５からの命令を逐次フェッチし、フェッチされた命令のそれぞれを利用可能なＤＦＡスレッドエンジン４０５の１つにスケジューリングする。ＤＦＡ命令を受信すると、ＤＦＡスレッドエンジン４０５は、必要であればメインメモリ１３０、１０８内のデータにアクセスし、メインメモリ１３０、１０８から検索されたデータを使用してアクセス要求を低遅延メモリ１１８に送る。低遅延メモリ要求は１つの待ち行列に格納され、低遅延メモリ内ではメモリバンク毎に１つの待ち行列が関連付けされている。ＬＬＭコントローラ１６０は、待機している低遅延メモリアクセス要求を実行する。同一で互換性のある複数のＤＦＡスレッドエンジン４０５を設けることにより、いずれの命令も複数のＤＦＡスレッドエンジン４０５のうちのいずれにもスケジューリングできる。利用可能なＤＦＡスレッドエンジン４０５のいずれもが、命令待ち行列から次の待機命令を受信することができる。
【００５８】
待機命令の１つを受信すると、ＤＦＡスレッドエンジン４０５は、同時に、
ａ．Ｉ／Ｏバス１４２を介してメインメモリ１３０、１０８から入力パケットデータ（すなわち、入力バイト）をフェッチし、フェッチしたバイトを使用してＤＦＡグラフの状態間遷移が実行され、
ｂ．パケットデータのバイト毎に、上記バイトについて次のＤＦＡグラフ状態に走査するための低遅延メモリロード命令を発行し、
ｃ．Ｉ／Ｏバス１４２を介して元のメインメモリ１３０、１０８に中間および最終結果を戻して書き込む。
【００５９】
さらに、もしくは代替として、コアプロセッサ１２０は、ＬＬＭバス１５８を使用して低遅延メモリ１１８に直接にアクセスすることができる。例えば、コアプロセッサ１２０は低遅延メモリ１１８にアクセスして、最初にグラフをメモリ１１８に格納しておくことができる。
【００６０】
特定の実施形態においては、低遅延メモリ１１８はコアプロセッサ１２０の外部に設けられる。例えば、低遅延メモリ１１８は、コアプロセッサ１２０に相互接続される１つまたは複数の物理デバイス（例えば、モジュールまたはチップ）内に設けられてもよい。その物理的構造に関わらず、個々のメモリデバイス１１８は、好ましくはコアプロセッサの近くに配置される（例えば、同一マザーボード上に共に配置される）。
【００６１】
低遅延メモリ１１８の例示的な実施形態を、図６に示す。メモリ１１８は、２つの物理メモリデバイス４３０ａ、４３０ｂ（総称して４３０）から成る。メモリデバイス４３０のそれぞれは、複数のメモリバンクを有する。図に示すとおり、デバイス４３０はそれぞれ、８個のメモリバンク４３２を有する。メモリバンク４３２は区別可能であり、例えば、ＬＬＭコントローラ１６０は複数のバンク４３２のそれぞれとの間で選択的にデータの書込み／読出しを行うことができる。メモリデバイス４３０のそれぞれは、ＤＦＡユニット４００のＬＬＭインタフェース４２５のそれぞれ1つに相互接続される個々のインタフェース５３０ａ、５３０ｂを有する。他の実施形態では、１つまたは３つ以上のメモリデバイス４３０を含むことができる。さらに、もしくは代替として、メモリデバイス４３０のそれぞれは、この例示的な実施形態の８個よりも多い、または少ないメモリバンク４３２を有するように構成されてもよい。さらに、もしくは代替として、メモリデバイス４３０のそれぞれは、２つ以上のＬＬＭインタフェース５３０を使用してＤＦＡユニット４００に結合されてもよい。
【００６２】
ＤＦＡユニット４００の各ＬＬＭインタフェース４２５は、低遅延メモリ１１８の個々のインタフェース５３０に結合される。インタフェース４２５、５３０は、一般に異なるグループ内に配置される複数の相互接続リードを含む。例えば、リードのいくつかは特定のメモリバンク４３２を選択するために使用される（例えば、リードが３つあれば、８個までのメモリバンクのいずれかを選択するのに十分である：２３＝８）。他の相互接続リードは、特定のメモリアドレスの選択または参照に使用することができる（例えば、２０本のリードは約５１２Ｋのメモリアドレスを選択でき、２１本のリードは約１０２４Ｋのメモリアドレスを選択できる）。また、さらに他の相互接続リードを用いて、低遅延メモリとＤＦＡユニット４００との間でデータを転送することもできる（例えば、３２本のリードは、一度に３２ビットまでのデータを転送できる）。さらに他の相互接続リードを用いて、情報（例えば、クロック信号を供給する）および／またはコマンドの識別（例えば、読出しコマンド対書込みコマンドなど、複数のコマンドから１つを選択する）のタイミングを調整することができる。
【００６３】
ＬＬＭコントローラ１６０（図４）は複数の低遅延メモリ（ＬＬＭ）待ち行列を有し、１つの待ち行列が低遅延メモリバンクのそれぞれに関連づけられている。各ＬＬＭ待ち行列は、個々の待ち行列に格納されている低レベルのメモリアクセス要求数を表示する個々の待ち行列ステータスインジケータを有する。ＤＦＡユニット４００は、サーモメータユニットおよび１つまたは複数のコンフィグレーションレジスタも有する。したがって、各ＬＬＭ待ち行列を、メモリバンクの１つに格納されているＤＦＡグラフにアクセスするために使用できる。例示した実施形態では、ＬＬＭコントローラ１６０は、１６個のメモリバンク４３２のそれぞれに１つ、したがって１６個のＬＬＭ待ち行列を有する。
【００６４】
命令ユニット４１０は、メインメモリ１３０、１０８のＤＦＡ命令先入れ先出し（ＦＩＦＯ）バッファに、ソフトウェアが先に書き込んでいる未処理のＤＦＡ命令の累積数を表示する値を格納するドアベルレジスタ４２０を有することができる。別のコンフィグレーションレジスタを設けて、低遅延メモリ１１８へのアクセスおよび使用に関連する他の態様を識別することもできる。
【００６５】
ＤＦＡユニット４００は、Ｉ／Ｏバス１４２を使用して、メインメモリ１３０、１０８内のＤＦＡ命令ＦＩＦＯから待機命令をフェッチする。ＤＦＡユニット４００は次に、いずれのＤＦＡスレッドエンジン４０５がそのフェッチされた命令を取り込むかを決定する。ＤＦＡスレッドエンジン４０５はＤＦＡ命令を処理し、低遅延メモリのアクセス要求を生成する。ＤＦＡユニット４００は、メモリアクセス要求を最小遅延で提供する可能性が最も高い低遅延メモリバンクはいずれであるかを決定する回路を有する。これを実行するために、ＤＦＡユニット４００は、メモリアクセス要求を、最小の待機エントリ数を有するＬＬＭ待ち行列に加える。各ＬＬＭ待ち行列内の待機エントリは、次に、ＤＦＡロード／格納コマンドを用いて、ＬＬＭコントローラ１６０によって処理される。
【００６６】
サーモメータユニットを用いて、複数の利用可能なＬＬＭ待ち行列のうちのいずれが最少の待機エントリを有するかを識別できる。これを達成するために、サーモメータユニットはまず、いずれのメモリバンクが要求されるＤＦＡグラフの複製を格納しているかに応じて、いずれのＬＬＭ待ち行列を検査するかを判断する。次に、サーモメータユニットは、複数のＬＬＭ待ち行列のそれぞれ内の待機エントリ数を比較する。サーモメータユニットは次に、利用可能な各ＬＬＭ待ち行列間で待機エントリ数を比較し、いずれのＬＬＭ待ち行列が最少の待機エントリ数を有するかを判断する。サーモメータユニットは次に、最少の待機エントリ数を有するＬＬＭ待ち行列の表示をＬＬＭコントローラ１６０に提供する。次に、ＬＬＭコントローラ１６０は、サーモメータユニットによって識別された最少の待機エントリ数を有するＬＬＭ待ち行列を使用して、メモリアクセス要求などの待機エントリを処理する。
【００６７】
待ち行列に格納されている命令の数は、待ち行列ステータスインジケータを使用して判断できる。例えば、待ち行列ステータスインジケータは、個々の待ち行列内の次に利用可能な命令の位置を指す単なるポインタであってもよい。待ち行列の終点が認識されると、行列に入っている命令の数は単純なポインタ演算を用いて計算される。
【００６８】
さらに、または代替として、待ち行列ステータスインジケータは、待機命令の数を表示するカウンタ値を格納することができる。したがって、待ち行列に命令が書き込まれると、待ち行列ステータスインジケータのカウンタ値はインクリメントされる。同様に、待ち行列から命令が読み出されると、待ち行列ステータスインジケータのカウンタ値はデクリメントされる。特定の実施形態においては、２つ以上の待ち行列が同一の最少数の待機命令を有する場合、いずれの待ち行列を使用するかを確定するアルゴリズムを用いてもよい。例えば、選択される待ち行列は、最高または最低のいずれかの参照指定を有するものである。あるいは、待ち行列は、上記複数の利用可能な待ち行列からランダムに選択されてもよい。
【００６９】
例示的な実施形態においては、ＤＦＡユニット４００のＬＬＭコントローラ１６０は、２つのＬＬＭインタフェース４２５ａ、４２５ｂのそれぞれで最大８個のメモリバンク４３２を制御できる。表１は、８バンクのメモリデバイス４３０を使用する個々の３６ビットＬＬＭ参照の主要性能特性を示す。本表はまた、いずれのインタフェースが使用され、メモリデバイス４３０内のいずれのバンク４３２が使用されるかも示す。インタフェース欄は、使用される１８ビットインタフェースの数を示す。
【００７０】
【表１】
2008512786.tif 000003
【００７１】
複製なしが選択されている２つのＬＬＭインタフェース４２５を有する例示的な構成においては、使用される特定のインタフェースは最初の値で決定される。例えば、最初の値は、命令内に設けられたオフセットフィールドにおける１つまたは複数のビットであってもよい。オフセット＜２＞の値および参照されるメモリバンクは、同一オフセットフィールド（例えば、オフセット＜５：３＞）内の他のビット値などの第２の値によって決定される。これより、オフセット＜２＞の値が＝１の場合、使用されるインタフェースはＬＬＭインタフェース＿１  ４２５ｂである。第１のＬＬＭインタフェース４２５ｂを介して相互接続される特定のメモリバンク４３２は、オフセット＜５：３＞の値によって決定される（すなわち、オフセット＜５：３＞＝”０１１”はメモリバンク３を指す）。
【００７２】
続いて、２つのＬＬＭインタフェース４２５を有し、複製係数が２（すなわち、２ｘ）である場合に、両方のインタフェースが使用される、例示的な構成について説明する。個々のインタフェースのそれぞれで参照される特定のメモリバンクは、オフセット＜４：２＞の値によって決定される。したがって、個々のＬＬＭインタフェース４２５を介して相互接続される８個の利用可能なメモリバンク４３２のうちの特定の１つは、オフセット＜４：２＞の値によって決定される（すなわち、オフセット＜４：２＞＝”１１１”は２つのメモリデバイス４３０のそれぞれにおけるメモリバンク８を指す）。
【００７３】
複製係数が４（すなわち、４ｘ）である場合は、両方のインタフェースが使用され、１対の選択可能なメモリバンク４３２の場合は、２つのメモリデバイス４３０のそれぞれ上で使用される。したがって、表１で識別されているとおり、オフセット＜３：２＞の値が、いずれのバンク４３２が使用されるかを決定する。同様に、複製係数が８（すなわち、８ｘ）である場合は、表１で示すとおり、やはり両方のインタフェースが使用され、２つのメモリデバイス４３０のそれぞれで使用される４つのメモリバンク４３２の選択可能なグループが用いられる。
【００７４】
図７は、低遅延メモリ１１８に格納される例示的なＤＦＡデータ構造体５００（すなわち、グラフ）を示す。先に述べたように、ＤＦＡグラフ５００は、その第１ノード（すなわち、ノード０）を指すポインタによって参照されてもよく、ＤＦＡスレッドエンジン４０５によって走査される。一般に、グラフ５００はＮ個の異なるノード５０５から成る。グラフ５００内の各ノード５０５は次のノードポインタ５１０のアレイを含み、次のノードポインタ５１０は各固有の入力バイト値毎に１つ設けられている。したがって、８ビットのアルファベットを有するＤＦＡグラフ５００では、２８＝２５６個の次のノードポインタ５１０が存在する。各次のノードポインタ５１０は、入力バイトの次のノード／状態を直接指定する次のノード識別子（ＩＤ）を含む。
【００７５】
特定の実施形態においては、ＤＦＡユニット４００は、１８ビットの次のノードポインタフォーマット５１５または３６ビットの次のノードポインタフォーマット５３０のいずれかをサポートする。１８ビットポインタ５１５では、各ノード５０５は、低遅延メモリ１１８内に１８＊２５６ビットすなわち約５１２バイトの格納を必要とする。３６ビットポインタ５３０では、各ノード５０５は、低遅延メモリ１１８内に３６＊２５６ビットすなわち約１キロバイトの格納を必要とする。したがって、格納データの任意の複製によって、全体的な容量要件が大きくなる。
【００７６】
１８ビットポインタ５１５の場合、次のノードポインタ５１０のぞれぞれは、１７ビットの次のノードＩＤ０などの次のノード識別フィールド５２０を含む。また、対応するパリティビット５２５も用意される。偶数パリティを使用する例示的実施形態では、パリティビットは、次のノードＩＤ５２０の全１７ビットの排他的ＯＲ（ＸＯＲ）として判断される。したがって、３６ビットワードは、それぞれが個々のパリティビット５２５、５２７を有する２つの１８ビットポインタ５２０、５２２を個々に格納されることができる。
【００７７】
３６ビットポインタ５３０の場合、次のノードポインタ５１０のぞれぞれは、２０ビットの次のノードＩＤフィールド５３５と、２ビットのタイプ値フィールド５４５と、７ビットのエラー訂正符号（ＥＣＣ）フィールド５５０と、未使用の７ビットフィールド５４０とを含む。好ましくは、未使用ビットはゼロに設定される。ＤＦＡスレッドエンジン４０５は、３６ビットポインタ５３０内のＥＣＣコード５５０を使用してシングルビットエラーを自動的に修正し、ダブルビットエラーを検出する。タイプ値５４５は次のノードタイプを表示し、例えば、以下の値を保持できる。
０＝ノーマル
１＝マーク付け
２＝終端
【００７８】
ＤＦＡスレッドエンジン４０５を使用するためには、システムのソフトウェアはまず、例えば図７に示すようなＤＦＡグラフ５００を有する低遅延メモリ１１８を事前ロードする。システムソフトウェアはまた、ＤＦＡユニット４００にグラフ開始を指すポインタ、開始ノードＩＤおよび特定の入力バイト数も提供する。各バイトの処理中に例示的なＤＦＡスレッドエンジン４０５によって実行される機能を記述する擬似コードリストを表２に示す。
【００７９】
【表２】
2008512786.tif 000004
【００８０】
特定の実施形態においては、ＤＦＡスレッドエンジン４０５は特殊なノードポインタ条件をサポートすることができる。例えば、ＤＦＡスレッドエンジン４０５は、表３に示す３つまでの特別なノードポインタ条件をサポートすることができる。
【００８１】
【表３】
2008512786.tif 000005
【００８２】
１８ビットモードでは、ＤＦＡスレッドエンジン４０５は、次のノードＩＤフィールド５２０、５２２の値を比較することによって、特殊なＴＥＲＭおよびＭＡＲＫＥＤ条件を判断する。この場合、マーク付けされたノード５０５に入る全ての遷移がマーク付けされる。３６ビットモードでは、ＤＦＡスレッドエンジン４０５は、特殊なＴＥＲＭおよびＭＡＲＫＥＤ条件を次のノードポインタ５３０内のタイプフィールド５４５から直接判断する。実際に、３６ビットモードでは、個々のノードそのものではなく、個々の遷移にマーク付けすることができる。
【００８３】
図５Ｂの例に戻って、１８ビットポインタを使用して、ノード４および５がマーク付けされる。したがって、入力文字列内の個々の探索文字列の出現を、いずれのノードの走査であるか表示し、後の分析においていずれのノードかを識別できる。代わりに、３６ビットポインタを使用して、ノード３からノード４および５までの弧がマーク付けされる。したがって、ＤＦＡマーク付け技術をＤＦＡスレッドエンジンと組み合せて使用することにより、同一入力文字列内の複数の異なる文字列の存在および位置を、入力文字列を通る単一パスで見出すことができる。
【００８４】
図１１は、可能な１７ビットノードＩＤ６９０を図示し、およびこれらが１８ビットモードにおいていかに分類されるかを明らかにしている。後に詳述するＤＦＡ命令は、終端ノードおよびマーク付きノードの数を明示するパラメータを含む（例えば、表２のIWORD3[TSize]パラメータは終端ノードの数を明示し、同じく表２のIWORD3[MSize]パラメータはマーク付きノードの数を明示する）。終端ノードＩＤの数（IWORD3[TSize]）は最大数であり、低遅延メモリ１１８に実際に格納してバックアップされる必要はない。ノーマルノードおよびマーク付きノードのみが、実際の低遅延メモリ格納装置によってバックアップされる。
【００８５】
ＤＦＡスレッドエンジン４０５は、低遅延メモリ１１８に格納されているグラフ５００を走査する間、例外的条件が発生すると結果ワードを生成する。ＭＡＲＫＥＤ、ＴＥＲＭまたはＰＥＲＲなどの次のノードポインタは、このような例外的条件を表す。２つの追加の例外的条件には、入力データの完了（ＤＡＴＡ＿ＧＯＮＥ）および結果スペースの消耗（ＦＵＬＬ）が含まれる。入力バイトに関するグラフ５００の走査は複数の例外的条件をもたらすこともあるが、単一の入力バイトから生成できる結果ワード（ＲＷＯＲＤ１＋）は多くても１つである。例えば、最後の入力バイトがＤＡＴＡ＿ＧＯＮＥ条件に遭遇すると、結果ワード「ＲＷＯＲＤ１＋」を生成する。最後の入力バイトもマーク付けされた次のノードに遭遇することがあるが、第２のＲＷＯＲＤ１＋結果は生成されない。グラフ５００の走査は、（優先順に）ＰＥＲＲ、ＴＥＲＭ、ＤＡＴＡ＿ＧＯＮＥまたはＦＵＬＬの例外的条件が発生した時点で停止し、ＤＦＡスレッドエンジン４０５はその最も高い優先順位の条件を報告する。
【００８６】
各ＤＦＡ命令は、ＤＦＡスレッドエンジン４０５によって、処理されるデータの構築にダイレクトモードまたはギャザーモードを使用すべきか否かを指定することができる。いずれの場合も、ＤＦＡユニット４００はメインメモリ１３０、１０８からバイトを読み出す。
【００８７】
図８は、メインメモリ１３０、１０８に格納されるＤＦＡ命令待ち行列６００の例示的な構造を示している。ＤＦＡ命令待ち行列６００は、１つまたは複数のＤＦＡ命令６１０ａ〜６１０ｅまで（総称して６１０）を含む。ＤＦＡ命令待ち行列６００は、ＤＦＡ命令を格納するためのチャンクまたはバッファ６０５を割り当てるソフトウェアによって構築される。ブート時において、待ち行列は開始テールポインタを書き込むことによって確立される。割当ては、パケットの受信に伴って進行していく。ＤＦＡユニット４００は、ＤＦＡスレッドエンジン４０５によって命令が処理された後にチャンク６０５を解放する。ＤＦＡユニット４００は、テール（ＤＦＡ命令待ち行列６００に格納されている最後のＤＦＡ命令）のアドレスを含むテールポインタ６２０を有する。
【００８８】
命令待ち行列６００は、「チャンク」またはバッファ６０５ａ、６０５ｂ、６０５ｃ（総称して６０５）のリンクされたリストである。２つ以上のチャンク６０５を有するＤＦＡ命令待ち行列６００の場合、異なるチャンク６０５は次のチャンクバッファポインタ６１５ａ、６１５ｂ（総称して６１５）によってリンクされる。図示したＤＦＡ命令待ち行列６００の場合、第１チャンク６０５ａは、第２チャンク６０５ｂに格納される第１のＤＦＡ命令６１０ｂを指す次のチャンクバッファポインタ６１５ａを含む。次に、第２チャンク６０５ｂは、複数のＤＦＡ命令６１０を含み、第３チャンク６０５ｃの第１のＤＦＡ命令６１０ｅを指す次のチャンクバッファポインタ６１５ｂがこれらの命令６１０の後に続く。第３チャンク６０５ｃは最後であり、したがって次のチャンクバッファポインタ６１５は不要である。図が示すように、ソフトウェアのヘッドポインタ６２５は、格納されている最後の命令６１０ｅの直後の次の空のバッファ位置を指す。
【００８９】
動作中、ＤＦＡユニット４００は、ＤＦＡ命令待ち行列６００からワードを読み出し（テールから開始）、チャンク６０５ａの最後の命令６１０ａに到達すると、次のチャンク６０５ｂを指す次のチャンクバッファポインタ６１５ａを走査する。このようにしてチャンク６０５を「ジャンプ」すると、ＤＦＡユニット４００は、前のチャンク／バッファ６０５ａをハードウェアが管理するプールに解放する。
【００９０】
コンフィグレーションレジスタ４５０に格納されるコンフィグレーション値は、ＤＦＡ命令のバッファリングに使用されるチャンク６０５のサイズを指示するために使用されてもよい。図８は、最小規定値である３つのＤＦＡ命令６１０のチャンクサイズの一例を示している。一般に、ＤＦＡ命令６１０は固定サイズ（例えば、３２バイト）である。チャンク６０５において、ＤＦＡ命令６１０の直後に存在する６４ビットワードは次のチャンクバッファポインタ６１５である。本例は、命令待ち行列６００内に５つのＤＦＡ命令６１０があることを示している。命令６１０すなわちコマンドはゼロから４までの連続番号を付され、より小さい番号はより古い（すなわち、早期に格納された）ＤＦＡ命令６１０を表し、最も小さい番号はこの待ち行列のテールに格納されている。ＦＩＦＯ構成により、ＤＦＡスレッドエンジン４０５ではより古い命令から先に開始される。好ましくは、各ＤＦＡ命令６１０はチャンク境界にまたがることなく、全体で１つのチャンク内に存在している。
【００９１】
ＤＦＡユニット４００は、待ち行列６００のテールに、ＤＦＡ命令６１０ａのアドレスを指すテールポインタ６２０を維持する。ソフトウェア（例えば、システムソフトウェア）は、待ち行列のヘッドに、最新に格納されたＤＦＡ命令６１０ｅを指すヘッドポインタ６３０を保持する。待ち行列６００にパケットを挿入するためには、ソフトウェアはまずＤＦＡ命令６１０を待ち行列６００に書き込み、必要であればチャンク６０５を割り当てなければならない。ドアベルレジスタ４２０（図４）は、待ち行列に格納されているＤＦＡ命令数のカウント数を格納する。
【００９２】
ヘッドポインタ６３０とテールポインタ８０６の距離は、ＤＦＡ命令待ち行列６００のサイズ、および未処理のドアベルカウント数の両方しい。ＤＦＡ命令待ち行列６００のサイズは、利用可能なメモリおよびＤＦＡ命令待ち行列６００についてのドアベルカウンタ４２０内のビット数によってのみ制限される。例えば、ドアベルカウンタが２０ビットである実施形態では、待ち行列は２２０ワードに制限される。
【００９３】
ドアベルカウンタが、チャンク６０５内の最後のＤＦＡ命令６１０が有効なＤＦＡ命令６１０を含むことを示し次第、ＤＦＡユニット４００は次のチャンクバッファポインタ６１５を読み取ってもよいことに留意されたい。これは、ソフトウェアが、チャンク６０５ａに最後のＤＦＡ命令６１０ａを書き込み次第、次のチャンクバッファ６０５を割り当て、先行するチャンク６０５内にこれを指す次のチャンクバッファポインタ６１５を設定しなければならないことを意味する。
【００９４】
ドアベル書込みはＤＦＡ命令を細分してなされ、ソフトウェアは、任意数のＤＦＡ命令６１０で「ドアベルを鳴らす」ことができる。ソフトウェアは、個々のＤＦＡ命令６１０に対してドアベル書込みを発行することができ、または、複数のＤＦＡ命令６１０をドアベルの単一の書込みにまとめてすることができる。唯一の要件は、待ち行列６００内の有効なＤＦＡ命令６１０の数は少なくともドアベルのカウント数と同一でなければならず、ＤＦＡ命令６１０間に散在する次のチャンクバッファポインタ６１５も適切に設定されなければならないことである。システムの始動時、すなわちブート時に、システムソフトウェアは、この値を格納するためにコンフィグレーションレジスタ４５０への書込みが確立された状態で、オリジナルの次のチャンクバッファポインタ６１５（すなわち、開始テールポインタ６２０）を有するＤＦＡ命令待ち行列６００を構成する。
【００９５】
図９は、例示的な次のチャンクバッファポインタのフォーマット６３０を示す。主コンポーネントは、メインメモリ１３０、１０８における有効バイトの位置を表示する値を格納するアドレス（Ａｄｄｒ）フィールド６３５である。Ａｄｄｒフィールド６３５はバイトアドレスを指すが、好ましくは、これは、１２８バイトキャッシュブロックの境界に当然に揃えられる。したがって、その最小位の７ビットはゼロになる。
【００９６】
各ＤＦＡ命令６１０は、ＤＦＡユニット４００がＤＦＡスレッドエンジン４０５を開始させ、入力データを読み出し、低遅延メモリ１１８内のグラフ５００を走査しかつ結果を書き込むために必要とする情報を有する。図１０の例示的なＤＦＡ命令フォーマットに示すとおり、各ＤＦＡ命令６１０は、メインメモリ１３０、１０８内に４つの独立したワード（すなわち、３２バイトを表す４つの６４ビットワード）６５５、６６０、６６５、６７０を含む。ＤＦＡ命令６１０は、命令を処理するようにスケジューリングされたＤＦＡスレッドエンジン４０５に対して入力バイトの位置および結果の位置を特定する。ＤＦＡユニット４００は、ＤＦＡ命令待ち行列６００が有効なＤＦＡ命令６１０を有していればメインメモリ１３０、１０８からＤＦＡ命令６１０および入力データを読み出し、結果をその生成に伴って書き込む。また、ＤＦＡユニット４００はワーク待ち行列エントリを終了後に随意に送出でき、したがって、ＤＦＡ命令６１０はワーク待ち行列ポインタのためのフィールドを含むこともできる。
【００９７】
例えば、第１のＤＦＡ命令ワード６５５は、その第１ノードのメモリ位置によってＤＦＡグラフを特定するベースアドレスを含む。第１のワード６５５は、予め選択された複製を格納する複製フィールド、および使用されるアドレス指定のタイプを示すタイプ値、ならびにグラフ処理のいずれのノードで開始するかを特定する開始ノードＩＤ６５６などの追加情報も提供する。第２のＤＦＡ命令ワード６６０は、ＤＦＡ４０５によって処理されるべきバイト数を指定する長さフィールド６６１と、処理されるバイトのアドレス参照を格納するアドレスフィールド６６２とを含む。第３のＤＦＡ命令ワード６６５は、任意の結果が書き込まれるアドレス（例えば、メインメモリ１３０、１０８内のアドレス）を特定する結果アドレスフィールド６６６と、許容される最大結果数を示す値を格納する最大結果フィールド６６７とを含む。さらに、第４のＤＦＡ命令ワード６７０は、ワーク待ち行列処理に関連する１つまたは複数のフィールドを含んでもよい。
【００９８】
図１２は、ＤＦＡスレッドエンジン４０５によって処理されるデータを構築するための、ダイレクトモードと称される利用法の一例を示す。ＤＦＡ命令６１０は、ＤＦＡ命令６１０のアドレスフィールド６６２内に提供されるメモリアドレスを使用して開始位置を、かつ長さフィールド６６１を使用して処理されるバイト数を直接指定する。対応するＤＦＡ命令６１０を処理するＤＦＡスレッドエンジン４０５は、指定されたアドレスから開始して、メインメモリ１３０、１０８から指定された数の連続するバイト７０５を読み出し、各バイトを順に処理する。
【００９９】
図１３は、ギャザーモードと称される代替モードの利用法の例を示す。ギャザーモードの使用により、ＤＦＡスレッドエンジン４０５によって処理されるデータ（すなわち、入力バイト）は、メインメモリ１３０、１０８内に連続して格納される必要がない。むしろ、入力バイトは、メインメモリ１３０、１０８の２つ以上の別個の位置に連続して格納されてもよい。ギャザーモードでは、ＤＦＡ命令６１０はまず、ギャザーモード識別フィールド６６３（図１０）を使用して、それがギャザーモードの命令であることを識別する。ギャザーモードでは、ＤＦＡ命令６１０のアドレスフィールド６６２が、同一のメインメモリ１３０、１０８に格納されている第１のギャザーポインタの開始位置およびＤＦＡギャザーポインタリスト７５５のサイズを指定する。ＤＦＡギャザーポインタリスト７５５の各エントリは、ＤＦＡスレッドエンジン４０５が処理する２つ以上の別個のメモリ位置の個々の開始位置およびサイズ（すなわち、バイト数）を指定する。ＤＦＡスレッドエンジン４０５が処理する入力されるバイトストリームの合計は、ギャザーリスト７５５で特定された各エントリによって指示される格納バイトを連結することによって取得される。したがって図１３の例では、入力バイトストリームは、第１の隣接する格納セグメント（すなわち、ＤＴＥバイト＿０）７６０ａと、第２の隣接する格納セグメント（すなわち、ＤＴＥバイト＿１）７６０ｂと、第３の隣接する格納セグメント（すなわち、ＤＴＥバイト＿２）７６０ｃとの連結であり、セグメント７６０のそれぞれは他のセグメント７６０とは不連続である。対応するＤＦＡ命令６１０を処理するＤＦＡスレッドエンジン４０５は、ギャザーリスト７５５の第１のエントリを読み出す。これが完了すると、ＤＦＡスレッドエンジン４０５はＤＦＡギャザーリスト７５５の第２のエントリを読み出し、入力バイトが全て読み込まれるまでこれを続行する。なお、ギャザーリスト７５５の第１のエントリは第１のセグメント７６０ａを指し、第２のエントリは第２のセグメント７６０ｃを指す。
【０１００】
図１４は、ＤＦＡギャザーポインタリスト７５５の各エントリを表す、例示的な６４ビットＤＦＡギャザーポインタフォーマット８００を示す。６４ビットギャザーポインタ８００は、隣接する個々のセグメント７６０内に格納される入力バイト数を示す値を格納する長さフィールド８１０を含む。また、隣接する個々のセグメント７６０の第１のバイトのアドレスを格納するアドレスフィールド８０５も設けられている。隣接する個々のメモリセグメント７６０の最後のバイトが処理されると、リストから次のＤＦＡギャザーポインタが読み出される。
【０１０１】
ＤＦＡギャザーポインタ７５５自体は、６４ビットの境界上に当然に揃えられるべきである。メインメモリ１３０、１０８内のＤＦＡギャザーポインタ７５５が指すバイトは、必ずしも当然に揃えられなくてもよく、任意のバイト配置を有することができる。ギャザーモードでは、入力バイトの合計数は、ＤＦＡギャザーポインタ７５５のそれぞれにおける個々の長さフィールド８１０の総和である。
【０１０２】
図１５は、ＤＦＡ命令６１０に応答してＤＦＡスレッドエンジン４０５により生成される結果を格納する、例示的なＤＦＡ結果フォーマット８５０を示す。ＤＦＡ結果フォーマット８５０は、可変サイズの結果を収容する。例えば、ＤＦＡ結果８５０は、第１の結果ワード（すなわち、「ＲＷＯＲＤ＿０」８６０）と、１つまたは複数の後続結果ワード（すなわち、「ＲＷＯＲＤ＿１＋」８６５）とを含み、後続ワード８６５は必要に応じて結果を収容するために設けられる。構造体の長さは、可変数のマーク付けされたノード５０５を走査するＤＦＡ命令６１０を収容するために可変であるが、最終的な長さは、ＤＦＡ命令フィールドに設けられる上限によって制限されることがある（例えば、この例示的な実施形態では、ＩＷＯＲＤ２[最大結果]に上限が設けられる）。ＤＦＡユニット４００はこれらの結果ワード８６０、８６５を、ＤＦＡ命令６１０の処理中および処理後にメインメモリ１３０、１０８に書き込む。ＤＦＡ結果８５０は、ＤＦＡ命令６１０内に含まれる結果アドレス６６６を始点としてメインメモリ１３０、１０８に書き込まれる。各結果ワード８６０、８６５は、メインメモリ１３０、１０８内で当然に配置されるべきである。
【０１０３】
なお、ＤＦＡ結果８５０の第１の結果ワード８６０は、ＤＦＡユニット４００によって２回以上書き込まれてもよい。第１の結果ワード８６０への最後の書込みのみが、有効な結果を含む。ＤＦＡユニット４００は、第１の結果ワード８６０を複数回書き込むことができるが、結果ワード書込みビット８６１を設定できるのは最後の書込みのみである。すなわち、結果ワード書込みビット８６１は、ＤＦＡユニット４００が他の全ての結果ワードを書き込むまで設定されない。ＤＦＡユニット４００にＤＦＡ命令６１０を渡す前にまず結果ワード書込みビット８６１にゼロを書き込んでおくことによって、システムソフトウェアは、結果ワード書込みビット８６１をポーリングして、ＤＦＡユニット４００がＤＦＡ命令６１０を完了した時点を判断することができる。結果ワード書込みビット８６１が設定されているときは、全体結果が存在する。
【０１０４】
図１６は、低遅延メモリのロード／格納命令８７０の例示的なフォーマットを示す。これらの命令８７０は、コア要求またはＤＦＡスレッドエンジン要求に応答して発行されてもよい。ロード／格納命令８７０は、ＬＬＭコントローラ１６０により、プロセッサコア１２０によって生成されるＤＦＡ命令に応答して低遅延メモリ１１８を参照するために発行される。これらの低遅延メモリのロード／格納命令８７０は、ロード／格納を直接プロセッサコア１２０と低遅延メモリ１１８との間で開始することにおいて（図３）、典型的な汎用命令セットで与えられる一般的なロード／格納命令とは異なる。このタイプのアクセスの直接性は、場合によっては、プロセッサコア１２０の主レジスタファイル３２８（図３）と、レベル１データキャッシュ１５４、レベル２キャッシュメモリ１３０およびＤＲＡＭ１０８（図４）を含むキャッシュコヒーレントメモリシステムとの間における、データをロードまたは格納するロード／格納命令とは異なる。例示的なこの実施形態では、これらのロード／格納命令８７０は、６４ビットまたは３６ビット命令のいずれであってもよい。プロセッサコア１２０が低遅延メモリバス１５８を使用して低遅延メモリ１１８に直接アクセスできるため、性能が向上する。これらの低遅延メモリ命令は、低遅延メモリ１１８におけるデータの検索／格納が、キャッシュコヒーレントメモリシステム１５４、１３０、１０８による他の方法で可能になる速度よりも高速で実行されることを可能にする。このようにして低遅延メモリ１１８にアクセスすれば、キャッシングを必要としない正規表現一致などのアプリケーションの性能を大幅に向上させることができる。例示的な低遅延メモリのロード／格納命令には、「ＤＭＴＣ２」命令（コプロセッサ２への倍移動（double move）を引き起こす）および「ＤＭＦＣ２」命令（コプロセッサ２からの倍移動を引き起こす）が含まれる。
【０１０５】
図１６に示すように、低遅延メモリのロード／格納命令８７０の例示的なフォーマットは、命令タイプフィールド８７５と、命令識別フィールド８８０と、主レジスタ識別フィールド８８５と、「ｉｍｐｌ」フィールド８９０とを含む。命令タイプフィールド８７５は、命令のタイプを示す値を格納する。例えば、命令タイプフィールド８７５に格納される値は、その命令が汎用命令ではなくコプロセッサ命令であることを示してもよい。命令識別フィールド８８０は、特定の命令タイプ（例えば、「へ移動（move to）」または「から移動（move from）」）を示す値を格納する。例えば、「へ移動」命令は、データが低遅延メモリ１１８からコアプロセッサの保持レジスタ３３０ａ、３３０ｂ（図３）の一方に移動されることを示す。これに対して、「から移動」命令は、データが保持レジスタ３３０ａ、３３０ｂの一方から主レジスタファイル３２８内の１つのレジスタ（図３）へ移動されることを示す。したがって、この実施形態では、「へ移動」／「から移動」命令はそれぞれ、データが一度に１ワード移動することを可能にする（例えば、３６ビットワードサイズを使用するメモリであれば、一度に３６ビット）。主レジスタ識別フィールド８８５は、プロセッサコアの主レジスタファイル３２８内のアクセスされるべき特定のレジスタを表示する値を格納する。「ｉｍｐｌ」フィールド８９０は、操作コードと共に、コプロセッサの移動命令のタイプおよび特定の保持レジスタ３３０ａ、３３０ｂを表示する値を格納する。
【０１０６】
保持レジスタ３３０の内容を主レジスタファイル３２８内のレジスタにロード（すなわち、ＤＭＦ）するために、主レジスタ識別フィールド８８５の内容は、レジスタファイル３２８内の、保持レジスタ３３０に格納されているデータの格納先となるレジスタを特定する。以下は、その一例である。
【０１０７】
ＧＰＲ［ｒｔ］＝ＬＬＭ＿ＤＡＴＡ０＜６３：０＞              （１）
この例では、ＬＬＭ＿ＤＡＴＡ０は特定の保持レジスタ３３０ａを表し、ＧＰＲは主レジスタファイル３２８の汎用レジスタを指す。
【０１０８】
書込み（すなわち、「へ移動」）命令の場合、主レジスタ識別フィールド８８５は、低遅延メモリ１１８内の位置アドレスを格納する、レジスタファイル３２８内のレジスタを特定する。以下は、その一例である。
【０１０９】
ＬＬＭ＿ＤＡＴＡ０＜６３：０＞＝ｌｌｍｅｍｏｒｙ［ｒｔ］    （２）
この例では、ＬＬＭ＿ＤＡＴＡ０は保持レジスタ３３０ａであり、ｌｌｍｅｍｏｒｙは低遅延メモリ１１８を指す。
【０１１０】
さらに例を挙げれば、保持レジスタ３３０ａに低遅延メモリの位置命令の内容をロードする際には、以下のような低遅延メモリのロード命令（ＤＭＴＣ２）を使用することができる。
ＤＭＴＣ２，＄５，0x0400                                      （３）
【０１１１】
この例では、(i)命令タイプフィールド８７５は、命令が、保持レジスタ３３０に低遅延メモリ１１８からのデータをロードする「へ移動」命令であることを表す値「ＤＭＴ」を含み、(ii)命令識別フィールド８８０は、それがコプロセッサ命令であることを示す値「Ｃ２」を含み、(iii)主レジスタ識別フィールド８８５は、主レジスタファイル３２８内の５番レジスタが低遅延メモリ１１８内の位置アドレスを保持することを示す値「＄５」を含み、(iv)ｉｍｐｌ値フィールド８９０は、特定の保持レジスタ３３０を特定する値「0x0400」を含む（この値は定数であり、別の実施形態では異なる値であってもよい）。
【０１１２】
同様に、データを保持レジスタ３３０から主レジスタファイル３２８に移動させる場合には、低遅延メモリの格納命令を使用することができる。例えば、以下のような低遅延メモリ格納命令を使用することもできる。
ＤＭＦＣ２，＄６，0x0402                                      （４）
【０１１３】
この例では、(i)命令タイプフィールド８７５は、コントローラ１６０が保持レジスタ３３０の内容を主レジスタファイル３２８内で指定されたレジスタに格納することを示す「から移動」型の命令を表す値「ＤＭＦ」を含み、(ii)命令識別フィールド８８０は、それがやはりコプロセッサ命令であることを示す値「Ｃ２」を含み、(iii)主レジスタ識別フィールド８８５は、主レジスタファイル３２８内の６番レジスタが宛先レジスタであることを示す値「＄６」を含み、ｉｍｐｌ値８９０の「0x0402」は、特定の保持レジスタ３３０を特定する（この場合もやはり、この値は定数であり、別の実施形態では異なる値であってもよい）。
【０１１４】
上述の命令フォーマットは例示的なものであり、当業者であれば、命令フォーマットが一般的でないロード／格納命令を許容するいかなるフォーマットであってもよいことは理解されるはずである。
【０１１５】
図１７は、低遅延メモリＤＲＡＭワードを参照するために使用される例示的な低遅延メモリアドレスフォーマット９００を示す。例えば、低遅延メモリアドレスフォーマット９００は、表２で示されている「graph＿ptr」に関連付けて使用されてもよい。低遅延メモリアドレスフォーマット９００は、少なくともオフセットフィールド９０５と、複製フィールド９１０とを含む。オフセットフィールド９０５は、低遅延メモリにおけるアドレスを示す値を格納する。複製フィールド９１０は、複製係数を示す複製値を定義する。例示的な一実施形態では、低遅延メモリアドレスフォーマット９００は６４ビット（ビット０〜６３まで）を含む。オフセットフィールド９０５は０〜２９のビットで定義されてもよく、複製フィールド９１０は３２〜３４のビットで定義されてもよい。アドレスフォーマット９００の残りのフィールドは、他の目的のために予約されてもよい。
【０１１６】
例示として、複製値ゼロ（すなわち、複製フィールド＝００）は、複製が存在しないことを示す。複製なしは、低遅延メモリ１１８内に各ワードの出現が１回のみ格納されていることを意味する。これは、複製係数「１」にも反映される（すなわち、そのワードは低遅延メモリ１１８内に１回出現する）。この例の説明を続けると、複製値１（すなわち、複製フィールド＝「０１」）は、複製が存在することと、低遅延メモリ１１８内の各ワードにはそのワードのコピーが１つ伴うこととを示す。これは、複製係数「２」にも反映される（すなわち、そのワードは低遅延メモリ１１８内に２回出現する）。同様に、複製値２および６（すなわち、複製フィールド＝それぞれ「１０」および「１１０」）は、複製が存在することと、低遅延メモリ１１８内の各ワードにはそのワードのコピーがそれぞれ３つおよび７つ伴うこととを示す。これらの値は、複製係数「４」および「８」にも反映される（すなわち、そのワードは低遅延メモリ１１８内にそれぞれ４回および８回出現する）。
【０１１７】
オフセットフィールド９０５に格納される値は、典型的には、メモリワードを示す「バイト」アドレスである。例えば、オフセット＜２９：２＞は、３６ビットのメモリワードを特定するバイトアドレスである。オフセット＜２９：２＞という表記法は、メモリアドレス９００のオフセットフィールド９０５のビット２から２９までに含まれるビット値を意味する。特定の実施形態においては、低遅延メモリコントローラ１６０の最小細分性は３６ビットワードである。したがって、順次的な３６ビットワードの差は４バイトになる。これは、オフセットフィールド９０５内の４の差分と解釈される（すなわち、バイトアドレスにおける差分４は、メモリに格納されるバイト数で４バイトの差を示す）。好ましくは、メモリアドレス参照は「当然に揃えられる」。この当然に揃えることは、オフセットフィールド９０５の２つの最下位ビットをゼロに設定する（すなわち、オフセット＜１：０＞＝００）ことによって達成することができる。
【０１１８】
複製値９１０がゼロに設定される場合には、オフセットの解釈は簡単であり、連続するオフセット値が連続する低遅延メモリ位置を参照する。しかし、複製値が非ゼロであるときは、オフセットの解釈は異なる。例示的なメモリアドレスフォーマット９００を使用して異なる複製値の単一のワードを格納するために使われる低遅延メモリの位置を、表４に示す。
【０１１９】
【表４】
2008512786.tif 000006
【０１２０】
アドレス構造体は、ワードの複製コピーが隣接するメモリ位置に格納されることを保証する。例えば、ＤＦＡユニット４００が、
(i)関連の複製値２（複製係数４）、および、
(ii)オフセット＜２９：０＞値＝１２、
を有する格納（例えば、３６ビットワードの格納）を処理する場合、コントローラ１６０は、この３６ビットデータワードの１つのコピーを低遅延メモリ１１８へオフセット４８、５２、５６および６０のそれぞれで格納する。例示的な複製値２による表４の第３行目を参照すると、まず、オフセット値（すなわち、１２）に前出の係数４を乗じることによって（すなわち、オフセット＜２７：０＞＊４）暫定値が決定され、暫定値４８が得られる。次に、低遅延メモリのオフセットが、暫定値４８に前出の値０、４、８および１２を加えることによって決定され、結果、オフセット４８、５２、５６および６０が得られる。最終的なオフセットアドレスは値４だけ相違し、これらが隣接する４バイトのメモリワードであることを意味する。
【０１２１】
４バイトを例にして説明を続けると、次のオフセット＜２９：０＞値は、１２＋４＝１６になる。同じく、複製値が２であれば、最終的なオフセットは、表４に従って、６４、６８、７２、７６になる。この場合も、複製は隣接しており、先行するオフセット値（すなわち、１２）の複製とも隣接する。
【０１２２】
これより、このアドレス構造体を使用すれば、順次的な３６ビットワードは、ワードが複製される場合でも、オフセットフィールド９０５において常に差分が４になる。これにより、ソフトウェア面で低遅延メモリＤＲＡＭのアドレス指定は、複製係数に関わりなく極めて類似的なものになり得る。これは、異なる複製値を有するワードは同時に使用されないことを仮定する。
【０１２３】
特定の実施形態においては、各プロセッサコア１２０は、図１６を参照して先に説明したＤＭＴＣ２およびＤＭＦＣ２命令などの特別な命令を使用して低遅延メモリ１１８を参照する。これらの命令は、６４ビットまたは３６ビットのいずれかのロード／格納を開始する。この場合もやはり、正しい演算を保証するために、アドレスは当然に揃えられるべきである。したがって、３６ビットのロード／格納では、オフセットフィールド９０５の最初の２つの最下位ビット（すなわち、オフセット＜１：０＞）はゼロとなるはずである。同様に、６４ビットのロード／格納の場合も、オフセットフィールド９０５の最初の３つの最下位ビット（すなわち、オフセット＜２：０＞）はゼロであるべきである。異なるワードサイズに関しても、当然に揃えることを保証するために同一概念を適用することができる（例えば、１２８ビットのロード／格納では、最初の４ビット＝０になる、他）。
【０１２４】
図１８Ａおよび１８Ｂはそれぞれ、３６ビットおよび６４ビットのロード／格納に関する例示的な低遅延メモリ１１８およびコアプロセッサレジスタフォーマットを示す。図は、格納されたワードが複製されていない場合の転送を表し、単一の低遅延メモリワード９６０がコアレジスタ９５０に対応する。格納されたワードが複製さている場合の転送では、低遅延メモリ１１８内に各ワードの対応する数のコピー（すなわち、２つ、４つまたは８つのコピー）が存在することになる。コピーは追加の低遅延メモリワード９６０によって表され、複製コピー毎に１つのメモリワード９６０が存在する。
【０１２５】
図１８Ａに示すように、３６ビットのロード／格納は、単一の３６ビット格納ワード９６０を参照する。格納の場合、ＤＦＡユニット４００のハードウェアは、データフィールド６５５を表すソースレジスタの下位の３６データビット（すなわち、データ＜３５：０＞）を上記３６ビット格納メモリワード９６０に直接書き込む。コアレジスタ９５０は、「ＸＯ」ビットと称するシングルビットとして示されるパリティフィールド９５５も含む。一般に、ＸＯビット９５５は、全３６格納ビットの排他的ＯＲ値を格納するように構成される。格納の場合、ＸＯビットはゼロでなければならない。ロードの場合、ＤＦＡハードウェアは、格納される３６ビットワードを宛先レジスタの下位の３６ビット（すなわち、データ＜３５：０＞）に置き、またＸＯビットを全３６格納ビットの排他的ＯＲに設定する。特定の実施形態においては、３６ビットのロード／格納の場合、ＤＦＡユニット４００はパリティ、または他の任意のエラーチェックまたは訂正コードを直接サポートしない。したがって、エラーの検出および／または訂正はソフトウェアに依存せざるを得ない。例えば、ソフトウェアは、必要に応じて、何らかの利用可能な未加工の３６ビットを使用してパリティまたはエラー訂正符号（ＥＣＣ）を実行してもよい。ＸＯビット９５５は、また、任意のソフトウェアエラー検出および／または訂正に関連して使用されてもよい。ＸＯビット９５５が使用される場合、これは、ソフトウェアが３６ビットのうちの１つに他の３５ビットの偶数パリティを書き込むとパリティエラーが存在することを示すため、読み出し動作におけるソフトウェアベースのパリティチェックを速くすることができる。
【０１２６】
次に、図１８Ｂを参照すると、６４ビットの低遅延メモリＤＲＡＭロード／格納オペレーションは連続する２つの３６ビット格納ワード９６５、９７０を参照する。格納ワード９６５、９７０はそれぞれ、個々のデータフィールドを含む。例えば、第１の３６ビット格納ワード９６５は単一のデータフィールド９７５（すなわち、データ＜３５：０＞）を含み、第２の３６ビット格納ワード９７０も単一のデータフィールド９８０（すなわち、データ＜３６：３６＞を含む。しかし、特定の実施形態においては、第２の格納ワード９７０の最上位ビットはエラー検出および／または訂正に使用されてもよい。
【０１２７】
例えば、上記最上位ビットは、８ビットのＳＥＣＤＥＤ ＥＣＣコードを格納するためのＥＣＣフィールド９８５と称することができる。３６ビットのロード／格納動作とは異なり、ＤＦＡユニット４００は、６４ビット格納に応答してＥＣＣコードを自動的に生成し、６４ビットロードにおけるデータを自動的にチェックして訂正する。特定の実施形態においては、６４ビットワードの各３６ビットワード９６５、９７０は別々に複製される。したがって、複製値が非ゼロであるとき、２つの格納ワード９６５、９７０は連続する（複製されない）低遅延メモリ位置に存在しなくてもよい。
【０１２８】
特定の実施形態においては、複製は、格納データ構造体ごとに判断される。したがって、第１のデータ構造体は複製係数２を有してもよく、第２のデータ構造体が異なる複製係数４を有してもよい。複製は、システムソフトウェアによりシステムの初期設定時に判断されてもよい。したがって、システムソフトウェアは、最初の段階で、低遅延メモリ１１８に１つまたは複数のデータ構造体（例えば、ＤＦＡグラフ）を格納する。上記複数のデータ構造体の各データ構造体は、必要に応じて複製される。特定のデータ構造体が複製されるか否か、および関連の複製が何であるかは、性能パラメータに従って判断することができる。例えば、ある特定のデータ構造体が他よりも頻繁にアクセスされれば、そのデータ構造体は低遅延メモリ１１８においてより高い度合いで複製されてもよい。同様に、ある特定のデータ構造体のアクセス頻度が比較的低ければ、そのデータ構造は低遅延メモリ１１８においてより低い度合いで複製されてもよく、またおそらくは、全く複製されない。さらに、各格納データ構造体の複製はユーザによって事前に決定されてもよい。
【０１２９】
データ構造体が複製される場合、そのデータ構造体への全ての書込みは、複製される全てのデータ構造体に書き込まれる。さらに、もしくは代替として、格納されて複製されたデータ構造体からの読出しは、複製されたデータ構造体の、独立して格納された任意の構成に向けられてもよい。したがって、要求されたデータ構造体を格納しているメモリバンクが、あるアクセス要求に対応して使用中であれば、ＤＦＡスレッドエンジン４０５は、本発明の原理に従って、アクセス要求を、要求されたデータ構造体の格納された複製値を含む他のメモリバンクの１つに向けてもよい。
【０１３０】
コア１２０は、格納されたデータ構造体の記録を後の使用のために保持する。例えば、システムソフトウェアは、ＤＦＡ命令を生成する際に、格納されたデータ構造体の記録にアクセスする。したがって、記録は、少なくとも格納されたデータ構造体のメモリ位置と、そのデータ構造体が当初から格納されている対応する複製物とを含む。特定の実施形態においては、システムソフトウェアは、メインメモリに、先に格納されている各データ構造体および関連の複製係数の開始メモリ位置を含むリストを格納するためのルックアップテーブルを保持する。このリストは、データ構造体（例えば、ＤＦＡグラフ）が初めて生成された時点で生成されても、低遅延メモリ１１８内でコンパイルされて格納されてもよい。先に述べたように、ＤＦＡ命令は、特定のＤＦＡグラフおよび任意の利用可能な複製を特定する。
【０１３１】
例示的な一実施形態では、コア１２０上で実行されるシステムソフトウェアは、１つまたは複数のＤＦＡ命令をメインメモリ１３０、１０８内に置かれるＤＦＡ命令待ち行列に書き込む。ドアベルレジスタ４２０は更新され、ＤＦＡ命令待ち行列内に残っているＤＦＡ命令の正確なカウント数を保持する。ＤＦＡユニット４００はドアベルレジスタ４２０をチェックし、１以上のドアベルカウント数を観測すると、ＤＦＡ命令待ち行列における次の命令をフェッチする。ＤＦＡユニット４００は、フェッチされた命令をＤＦＡユニットのローカル命令待ち行列またはバッファ４１５に一時的に格納する。同一のＤＦＡスレッドエンジン４０５のうちの利用可能な１つは、ローカル命令バッファ４１５に格納されている次の命令を読み出し、その命令の処理を開始する。
【０１３２】
図１０に関連して述べたとおり、ＤＦＡ命令は、先に格納されているＤＦＡグラフのうちの選択可能な１つの開始アドレスに対するメモリ参照を特定する。命令は、関連の複製も特定し、選択されたＤＦＡグラフの複製が低遅延メモリ１１８内で幾つ利用可能であるかを示す。ＤＦＡスレッドエンジン４０５は、ＤＦＡ命令によって処理されるパケットデータの第１のバイトをフェッチする。このバイトは、同じくＤＦＡ命令によって特定されるアドレスでメインメモリ１３０、１０８からフェッチされる。（ＤＦＡスレッドエンジン４０５は、入力パケットデータのバイト毎に低遅延メモリ参照を生成する。）ＤＦＡスレッドエンジン４０５は、入力されるバイトに応答してＬＬＭコントローラ１６０から低遅延メモリアクセスを要求し、この要求もまた複製の数を指定する。
【０１３３】
ＬＬＭコントローラ１６０は、まず要求されたＤＦＡグラフを格納している利用可能なメモリバンク４３２を全て識別することによって、利用可能な複製のうちのいずれを使用するかを決定する。例えば、ＬＬＭコントローラ１６０は、ＤＦＡコンフィグレーションレジスタにおける既に格納された値からインタフェースの数を決定する。インタフェースの数およびＤＦＡ命令からの複製値およびオフセット値を有するＬＬＭコントローラ１６０は、表１に示したたようにバンクを判断する。
【０１３４】
メモリアクセス命令が格納命令であれば、関連データは、識別されたバンクの全てに格納（すなわち、複製）される。しかし、メモリアクセス要求がロード命令であれば、ＬＬＭコントローラ１６０はいずれのメモリバンク４３２を使用するかを決定する。ＬＬＭコントローラ１６０は、次にサーモメータ論理４４０を使用して、特定されたメモリバンク４３２に関連づけられる待ち行列４３５の深さを読み取る。メモリバンク４３２は待機命令の数が最も少ないものが選択され、ＬＬＭコントローラ１６０は、図１８Ａおよび１８Ｂに関連して述べたとおり、対応する低レベルのメモリアクセス要求を生成する。
【０１３５】
本出願は、2004年9月10日に出願された米国仮特許出願第60/609,211号、2004年12月28日に出願された「Direct Access to Low-Latency Memory」と題する米国特許出願第11/024,002号、2005年4月8日に出願された「Deterministic Finite Automata (DFA) Processing」と題する米国仮特許出願第60/669,672号および同じく2005年4月8日に出願された「Deterministic Finite Automata (DFA) Instruction」と題する米国仮特許出願第60/669,603号に関連するものである。上述の出願の全内容は参照により本明細書に引用したものとする。
【０１３６】
以上、本発明をその好ましい実施形態に関連して詳細には示しかつ説明してきたが、当業者には、添付の請求の範囲に包含される本発明の範囲を逸脱することなく形態および細部に様々な変更を実行できることが理解されるであろう。
【図面の簡単な説明】
【０１３７】
【図１】本発明の原理によるネットワークサービスプロセッサを含むネットワークサービス処理システムを示すブロック図である。
【図２】図１に示すネットワークサービスプロセッサの一実施形態のより詳細なブロック図である。
【図３】本発明の原理による、図２に示す縮小命令セットコンピュータ（ＲＩＳＣ）コアのうちの１つの一実施形態のより詳細なブロック図である。
【図４】本発明の原理による、図２および図３に示すＤＦＡユニットの一実施形態のブロック図である。
【図５Ａ】例示的なＤＦＡグラフを示す概略図である。
【図５Ｂ】例示的なＤＦＡグラフを示す概略図である。
【図６】図２および図３の低遅延メモリの一実施形態を示すブロック図である。
【図７】図４に示すＤＦＡユニットのＤＦＡスレッドエンジンによってグラフの走査に使用される低遅延メモリのデータ構造の例示的な実施形態を示す図である。
【図８】本発明の原理による、図２および図４のレベル２ＤＲＡＭに組み込まれているＤＦＡ命令待ち行列の一実施形態を示す図である。
【図９】図８に示す次のチャックのバッファポインタの一実施形態をより詳細に示す図である。
【図１０】ＤＦＡ命令の例示的なフォーマットを示す図である。
【図１１】１８ビットモードのノードＩＤの例示的分類法による可能な１７ビットノードＩＤのすべてを示す図である。
【図１２】ＤＦＡスレッドエンジンによって処理されるデータを構成するためのダイレクトモードの例示的な使用法を示す図である。
【図１３】ＤＦＡスレッドエンジンによって処理されるデータを構成するためのギャザーモードの例示的な使用法を示す図である。
【図１４】図１３に示すＤＦＡギャザーポインタフォーマットをより詳細に示す図である。
【図１５】図１０に示すＤＦＡ命令に応答する例示的な結果フォーマットを示す図である。
【図１６】本発明の原理による、例示的な低遅延メモリのロード／格納命令フォーマットを示す図である。
【図１７】本発明の原理による、例示的な低遅延アドレスフォーマットを示す図である。
【図１８Ａ】本発明の原理による、３６ビットのロード／格納の例示的な低遅延メモリＤＲＡＭおよびコアレジスタフォーマットを示す図である。
【図１８Ｂ】本発明の原理による、６４ビットのロード／格納の例示的な低遅延メモリＤＲＡＭおよびコアレジスタフォーマットを示す図である。
【符号の説明】
【０１３８】
１１８  低遅延メモリ
１６０  アクセスコントローラ
４３２  メモリバンク
【図１】
2008512786.tif 000007
【図２】
2008512786.tif 000008
【図３】
2008512786.tif 000009
【図４】
2008512786.tif 000010
【図５Ａ】
2008512786.tif 000011
【図５Ｂ】
2008512786.tif 000012
【図６】
2008512786.tif 000013
【図７】
2008512786.tif 000014
【図８】
2008512786.tif 000015
【図９】
2008512786.tif 000016
【図１０】
2008512786.tif 000017
【図１１】
2008512786.tif 000018
【図１２】
2008512786.tif 000019
【図１３】
2008512786.tif 000020
【図１４】
2008512786.tif 000021
【図１５】
2008512786.tif 000022
【図１６】
2008512786.tif 000023
【図１７】
2008512786.tif 000024
【図１８Ａ】
2008512786.tif 000025
【図１８Ｂ】
2008512786.tif 000026
【国際調査報告】
2008512786.tif 000027
2008512786.tif 000028