(57)【要約】パイプラインプロセッサにおけるストールを最小限に抑える方法および装置を提供する。順不同の命令スケジューラにおける命令は、順序づけ待ち行列を介して格納データを外部メモリに送ることによって、パイプラインをストールすることなく順番に実行される。【選択図】図３
2008512785.tif 000002
【特許請求の範囲】
【請求項１】
外部メモリに格納されるデータを格納する複数の書込みバッファエントリを有する書込みバッファと、
システムインタフェースとを備えたプロセッサであって、
このシステムインタフェースは、
順序づけ待ち行列であって、前記書込みバッファに格納されているデータが、この順序づけ待ち行列における順序づけ待ち行列エントリを経由して前記外部メモリに送られる順序づけ待ち行列と、
格納順序づけ命令の実行を検出すると、前記順序づけ待ち行列における順序づけ待ち行列エントリによって特定される書込みバッファアドレスが、次に発行される格納命令のアドレスよりも先に外部メモリに送られることを保証する順序づけ待ち行列論理とを有するプロセッサ。
【請求項２】
請求項１において、前記順序づけ待ち行列論理は、各書込みバッファアドレスに対して外部メモリから返されるコミットインジケータを監視することによって、書込みバッファアドレスが送られたことを保証するプロセッサ。
【請求項３】
請求項１において、前記書込みバッファ内においてアクティブな書込みバッファエントリを検出すると、前記システムインタフェースは、順序づけ待ち行列エントリを割り当て、この順序づけ待ち行列エントリにおいて前記アクティブな書込みバッファエントリを特定するプロセッサ。
【請求項４】
請求項１において、前記書込みバッファ内においてアクティブな書込みバッファエントリを検出せず、かつ前記順序づけ待ち行列において少なくとも１つの順序づけ待ち行列エントリを検出すると、前記システムインタフェースは、最後の順序づけ待ち行列エントリに格納順序づけ命令の実行インジケータを設定するプロセッサ。
【請求項５】
請求項１において、前記書込みバッファにおいてアクティブな書込みバッファエントリを検出せず、かつ前記順序づけ待ち行列において順序づけ待ち行列エントリを検出しなければ、前記システムインタフェースは、順序づけ待ち行列エントリを割り当て、この割り当てられた順序づけ待ち行列エントリ内に格納順序づけ命令の実行インジケータを設定するプロセッサ。
【請求項６】
請求項１において、前記書込みバッファはＮ個の書込みバッファエントリを有し、前記順序づけ待ち行列は（Ｎ＋１）個の順序づけ待ち行列エントリを有するプロセッサ。
【請求項７】
請求項５において、Ｎ＝１６であるプロセッサ。
【請求項８】
請求項１において、前記書込みバッファエントリは、外部メモリに格納されるデータを格納するバッファと、このバッファ内の各バイトにそれぞれ対応するビットを有するマスクとを備えたプロセッサ。
【請求項９】
請求項１において、前記順序づけ待ち行列エントリは、格納順序づけ命令の実行インジケータと、各書込みバッファエントリにそれぞれ対応するビットを有する順序づけマスクとを備えたプロセッサ。
【請求項１０】
プロセッサにおいて格納データを順序づける方法であって、
外部メモリに格納されるデータを書込みバッファ内の書込みバッファエントリに格納する工程と、
前記書込みバッファに格納されているデータを、順序づけ待ち行列における順序づけ待ち行列エントリを経由して前記外部メモリに送る工程と、
格納順序づけ命令の実行を検出すると、前記順序づけ待ち行列における順序づけ待ち行列エントリによって特定される書込みバッファアドレスが、次に発行される格納命令のアドレスよりも先に外部メモリに送られることを保証する工程とを備えた格納データの順序づけ方法。
【請求項１１】
請求項１０において、前記保証工程が、各書込みバッファアドレスに対して外部メモリから返されるコミットインジケータを監視する格納データの順序づけ方法。
【請求項１２】
請求項１０において、さらに、
前記書込みバッファ内においてアクティブな書込みバッファエントリを検出すると、順序づけ待ち行列エントリを割り当て、この順序づけ待ち行列エントリにおいて前記アクティブな書込みバッファエントリを特定する工程を備えた格納データの順序づけ方法。
【請求項１３】
請求項１０において、さらに、
前記書込みバッファ内においてアクティブな書込みバッファエントリを検出せず、かつ前記順序づけ待ち行列において少なくとも１つの順序づけ待ち行列エントリを検出すると、最後の順序づけ待ち行列エントリに格納順序づけ命令の実行インジケータを設定する工程を備えた格納データの順序づけ方法。
【請求項１４】
請求項１０において、さらに、
前記書込みバッファにアクティブな書込みバッファエントリを検出せず、かつ前記順序づけ待ち行列において順序づけ待ち行列エントリを検出しなければ、順序づけ待ち行列エントリを割り当て、この割り当てられた順序づけ待ち行列エントリ内に格納順序づけ命令の実行インジケータを設定する工程を備えた格納データの順序づけ方法。
【請求項１５】
請求項１０において、前記書込みバッファエントリは、外部メモリに格納されるデータを格納するバッファと、このバッファ内の各バイトにそれぞれ対応するビットを有するマスクとを備えた格納データの順序づけ方法。
【請求項１６】
請求項１０において、前記順序づけ待ち行列エントリは、格納順序づけ命令の実行インジケータと、各書込みバッファエントリにそれぞれ対応するビットを有する順序づけマスクとを備えた格納データの順序づけ方法。
【請求項１７】
請求項１０において、前記書込みバッファはＮ個の書込みバッファエントリを有し、前記順序づけ待ち行列は（Ｎ＋１）個の順序づけ待ち行列エントリを有する格納データの順序づけ方法。
【請求項１８】
請求項１７において、Ｎ＝１６である格納データの順序づけ方法。
【請求項１９】
外部メモリに格納されるデータを格納する複数の書込みバッファエントリを有する書込みバッファと、
前記書込みバッファに格納されているデータを、順序づけ待ち行列における順序づけ待ち行列エントリを経由して前記外部メモリに送る手段と、
格納順序づけ命令の実行を検出すると、前記順序づけ待ち行列における順序づけ待ち行列エントリによって特定される書込みバッファアドレスが、次に発行される格納命令のアドレスよりも先に外部メモリに送られることを保証する手段とを備えたプロセッサ。
【請求項２０】
キャッシュメモリと、
少なくとも１つのプロセッサコアとを備えたネットワークサービスプロセッサであって、
このプロセッサコアは、
前記キャッシュメモリに格納されるデータを格納する複数の書込みバッファエントリを有する書込みバッファと、
システムインタフェースとを備え、
このシステムインタフェースが、
順序づけ待ち行列であって、前記書込みバッファに格納されているデータが、この順序づけ待ち行列における順序づけ待ち行列エントリを経由して前記キャッシュメモリに送られる順序付け待ち行列と、
格納順序づけ命令の実行を検出すると、前記順序づけ待ち行列における順序づけ待ち行列エントリによって特定される書込みバッファアドレスが、次に発行される格納命令のアドレスよりも先に前記キャッシュメモリに送られることを保証する順序づけ待ち行列論理とを有するネットワークサービスプロセッサ。
【発明の詳細な説明】
【関連出願】
【０００１】
本出願は、2004年9月10日に出願された米国仮特許出願第60/609,211号の出願の利益を主張する、2004年11月30日に出願された米国特許出願第11/002,728号の継続出願である。上記出願の全内容は参照により本明細書に引用したものとする。
【背景技術】
【０００２】
パイプライン化技術は、一般に、縮小命令セットコンピュータ型（ＲＩＳＣ）プロセッサにおいて、命令処理を一連のパイプラインステージに分割するために使用される。命令が命令パイプラインを流れていく際に、各ステージが異なる機能を実行する。同時に２つ以上の命令が処理されてもよく、各命令は異なるパイプラインステージで処理される。パイプラインにおける最も遅いステージによって決定されるクロックレートで、命令はパイプラインのステージを進行していく。新しい命令はクロックサイクル毎に開始することができ、先の命令が完了するまで新しい命令の処理を始めることができない非パイプラインプロセッサとは対照的である。プロセッサのスループットは、（i）パイプラインステージのクロック速度、（ii）正常な実行の間のパイプライン利用度すなわち「効率」、および（iii）パイプラインストール（停止）の数、の関数である。スーパースカラーＲＩＳＣプロセッサは、複数の命令が同時に発行されて複数の演算ユニットに並列してディスパッチされることを可能にして、スループットをさらに増大させる。
【０００３】
命令パイプラインは、リソースの制約および命令のデータ依存性に起因して頻繁にストール（停止）する。後に発行される命令が、未だ完了していない先の命令によって生成される結果を必要とする場合に、命令間のデータ依存性がストールを招く。したがって、後に発行される命令は、最初の命令の結果が利用可能になるまでパイプライン内でストールされる。また、ストールは、格納データの不十分なバッファリングによっても発生することがある。マルチコアキャッシュのコヒーレントなメモリチップ／システムでは、コヒーレントメモリバスが高度にパイプライン化されていてアドレス、データおよび実行操作を分離することがあるために、格納の順序づけが複雑になる場合がある。
【発明の開示】
【０００４】
本発明の原理による、プロセッサに実装される格納命令を順序づけるシステムおよび方法は、命令パイプラインのストールを最小限に抑える。
【０００５】
プロセッサは、外部メモリに格納されるデータを格納する複数の書込みバッファエントリを有する書込みバッファと、システムインタフェースとを備える。システムインタフェースは、順序づけ待ち行列および順序づけ待ち行列論理を有する。書込みバッファに格納されているデータは、順序づけ待ち行列における順序づけ待ち行列エントリを経由して外部メモリに送られる。格納順序づけ命令の実行を検出すると、順序づけ待ち行列論理は、順序づけ待ち行列における順序づけ待ち行列エントリによって特定される書込みバッファアドレスが、次に発行される格納命令のアドレスよりも先に外部メモリに送られることを保証する。順序づけ待ち行列論理は、各書込みバッファアドレスに対して外部メモリから返されるコミットインジケータを監視することによって、書込みバッファアドレスが送られることを保証する。
【０００６】
格納順序づけ命令が実行される際には、書込みバッファにアクティブな書込みバッファエントリが存在し、順序づけ待ち行列に順序づけ待ち行列エントリが存在する。書込みバッファ内においてアクティブな書込みバッファエントリを検出すると、システムインタフェースは、順序づけ待ち行列エントリを割り当て、順序づけ待ち行列エントリにおいてアクティブな書込みバッファエントリを特定する。書込みバッファ内においてアクティブな書込みバッファエントリを検出せず、かつ順序づけ待ち行列において少なくとも１つの順序づけ待ち行列エントリを検出すると、システムインタフェースは、最新の順序づけ待ち行列エントリに格納順序づけ命令の実行インジケータを設定する。書込みバッファにおいてアクティブな書込みバッファエントリを検出せず、かつ順序づけ待ち行列において順序づけ待ち行列エントリを検出しなければ、システムインタフェースは、順序づけ待ち行列エントリを割り当て、割り当てられた順序づけ待ち行列エントリ内に格納順序づけ命令の実行インジケータを設定する。
【０００７】
書込みバッファはＮ個の書込みバッファエントリを有し、順序づけ待ち行列は（Ｎ＋１）個の順序づけ待ち行列エントリを有する。順序づけ待ち行列におけるエントリ数が書込みバッファにおけるエントリ数よりも多いことから、順序づけ命令が実行される際には順序づけ待ち行列エントリが利用可能であり、したがって、格納順序づけ命令のストールを排除することができる。一実施形態においては、Ｎは１６である。書込みバッファエントリは、外部メモリに格納されるデータを格納するバッファと、バッファ内の各バイトに対応するビットを有するマスクとを有してもよい。順序づけ待ち行列エントリは、格納順序づけ命令の実行インジケータと、各書込みバッファエントリに対応するビットを有する順序づけマスクとを有してもよい。
【０００８】
本発明の上述および他の目的、特徴および利点は、添付図面に示す本発明の好ましい実施形態に関する以下のより詳細な説明から明らかとなるであろう。添付図面では、同一参照符号は異なる図面においても同一部分を指す。図面は、必ずしも縮尺通りではなく、本発明の原理を示すことに重点を置いている。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の好ましい実施形態について説明する。
【００１０】
プロセッサは、命令を解釈して実行する中央処理装置（ＣＰＵ）である。図１は、本発明の原理による格納命令を順序づけるための命令を含む命令セットを有する縮小命令セットコンピュータ型（ＲＩＳＣ）プロセッサ１００を示すブロック図である。
【００１１】
プロセッサ１００は、演算ユニット１０２、命令ディスパッチユニット１０４、命令フェッチユニット１０６、ロード／格納ユニット１１８、メモリ管理ユニット（ＭＭＵ）１０８、システムインタフェース１１０、書込みバッファ１２２、およびセキュリティアクセラレータ１２４を有する。プロセッサコアはまた、デバッグ操作を実行できるＥＪＴＡＧインタフェース１２０も有する。システムインタフェース１１０は、外部メモリ、すなわち、プロセッサの外部にあるレベル２（Ｌ２）キャッシュメモリのような外部メモリへのアクセスを制御する。
【００１２】
演算ユニット１０２は、乗算ユニット１１４、および少なくとも１つのレジスタファイル１１６を有する。乗算ユニット１１４は、６４ビットのレジスタの直接乗算を実行できる。命令フェッチユニット１０６は、命令キャッシュ（ＩＣａｃｈｅ）１２６を有する。ロード／格納ユニット１１８は、データキャッシュ１２８を有する。データキャッシュの一部２４０は、ローカルなスクラッチパッドすなわちローカルメモリ１３０として確保されてもよい。一実施形態においては、命令キャッシュ１２６は３２キロバイトであり、データキャッシュ１２８は８キロバイトであり、書込みバッファ１２２は２キロバイトである。メモリ管理ユニット１０８は、変換ルックアサイドバッファ（ＴＬＢ）１１２を有する。
【００１３】
一実施形態においては、プロセッサ１００は、トリプルデータ暗号化規格（３ＤＥＳ）、高度暗号化規格（ＡＥＳ）、セキュアハッシュアルゴリズム（ＳＨＡ−１）、メッセージダイジェストアルゴリズム５番（ＭＤ５）のための暗号化アクセラレーションを有する暗号アクセラレーションモジュール（セキュリティアクセラレータ）１２４を有する。暗号アクセラレーションモジュール１２４は、転送を通して、演算ユニット１０２内の主レジスタファイル１１６と通信する。乗算ユニット１１４では、ＲＳＡおよびディフィ−ヘルマン（ＤＨ）アルゴリズムが実行される。
【００１４】
スーパースカラープロセッサはスーパースカラー命令パイプラインを有し、複数の命令が同時に発行されて複数の演算ユニットに並列にディスパッチされることを許容することにより、２つ以上の命令が各クロックサイクルにおいて完了できる。ＲＩＳＣ型プロセッサ１００は、プログラマがそれによってＲＩＳＣ型プロセッサとインタフェースする命令を定義する命令セットアーキテクチャを有する。プロセッサ１００の外部に存在するメモリである外部メモリにアクセスするのは、ロード／格納命令のみである。一実施形態においては、外部メモリはコヒーレントメモリバス１３４でアクセスされる。他の命令は全て、プロセッサ１００における主レジスタファイル１１６内に格納されるデータに作用する。一実施形態においては、プロセッサは命令同時発行のスーパースカラープロセッサである。
【００１５】
命令パイプラインは複数のステージに分割され、各ステージは１クロックサイクルで完了する。したがって、５ステージパイプラインでは各命令を処理するのに５つのクロックサイクルを要し、各命令が所定の任意のクロックサイクルにおいてパイプラインの異なるステージによって処理される、５つの命令の同時処理が可能である。一般には、５ステージパイプラインは、フェッチ、デコード、実行、メモリおよびライトバックの各ステージを含む。
【００１６】
フェッチステージでは、命令フェッチユニット１０６が、プログラムカウンタに格納されているメモリアドレスによって特定される命令キャッシュ１２６の位置において命令キャッシュ１２６から命令をフェッチする。デコードステージでは、フェッチステージでフェッチされた命令が命令ディスパッチユニット１０４によってデコードされ、コンテキストを発行するために次にフェッチされる命令のアドレスが計算される。実行ステージでは、整数演算ユニット１０２が、命令のタイプに応じて操作を実行する。例えば、整数演算ユニット１０２は、レジスタ間命令のための算術もしくは論理演算を開始し、ロードもしくは格納操作のために仮想アドレスを計算し、または分岐命令の分岐条件が真であるか否かを判断する。メモリステージでは、データがロード／格納ユニット１１８によって整列させられ、外部メモリにおけるその宛先に転送される。ライトバックステージでは、レジスタ間命令またはロード命令の結果がレジスタファイル１１６に戻して書き込まれる。
【００１７】
システムインタフェース１１０は、コヒーレントメモリバスを介して外部メモリに結合されている。一実施形態においては、コヒーレントメモリバスは３８４ビットを有し、４つの別々のバス、すなわち、アドレス／コマンドバス、データ格納バス、コミット／応答制御バスおよびデータフィルバス、を含む。格納データは全て、書込みバッファ１２２内の書込みバッファエントリを介して、コヒーレントメモリバス１３２上で、外部メモリに送られる。一実施形態においては、書込みバッファは１６個の書込みバッファエントリを有する。
【００１８】
格納データは、ロード／格納ユニット１１８から書込みバッファ１２２へ、次に書込みバッファ１２２からシステムインタフェース１１０を介して外部メモリに流れる。プロセッサ１００が外部メモリに格納されるデータを生成する速度は、システムインタフェース１１０が外部メモリに格納データを書き込む速度よりも速い。書込みバッファ１２２が、外部メモリへのデータの転送に先立ってデータを格納するためのリソースを設けることによって、パイプラインストールを最小限に抑える。
【００１９】
書込みバッファ１２２はまた、外部メモリにデータを書き込まれる速度を最大化するために、コヒーレントメモリバス１３２で外部メモリに格納されるデータを、整列されたキャッシュブロックに集めるのに使用される。さらに、書込みバッファは、複数の格納部を外部メモリ内の同一位置にマージすることもでき、これにより、外部メモリへの書込み操作は単一になる。書込みバッファ１２２の書込みマージ操作によって、外部メモリへの書込み順を格納命令の実行順とは異なるものにすることができる。
【００２０】
通常の操作では、ロード／格納メモリアクセスがプロセッサ１００の外側のビューワに現れる順序はアーキテクチャによって指定されない。命令セットは、本明細書ではＳＹＮＣＷ命令と称する、格納命令を順序づける命令（格納順序づけ命令）を含む。ＳＹＮＣＷ命令は、先に発行された全ての格納命令を、後続の格納命令が現れる前にプロセッサ１００の外部に見えるようにする。例えば、以下の４つの命令シーケンスは、２つのＳＹＮＣＷ命令を含む。
ＳＴ ＤＡＴＡ
ＳＹＮＣＷ
ＳＴ ＦＬＡＧ
ＳＹＮＣＷ
このＳＹＮＣＷ命令は、データ格納命令（ＳＴ ＤＡＴＡ）およびフラグ格納命令（ＳＴ ＦＬＡＧ）の順序を保証する。すなわち、ＳＴ ＤＡＴＡ命令の後のＳＹＮＣＷ命令はＳＴ ＤＡＴＡ命令についての格納データがプロセッサの外側に見えること、つまり、ＳＴ ＦＬＡＧ命令よりも前にコヒーレントメモリバス１３２上で送られることを保証する。ＳＴ ＦＬＡＧ命令の後のＳＹＮＣＷ命令は、任意の後続の格納についてのデータがプロセッサの外側に見えるよりも前に、ＳＴ ＦＬＡＧがプロセッサの外側に見えることを保証する。
【００２１】
このタイプの同期は、外部メモリ内のデータバッファの更新がＦＬＡＧ変数の更新よりも前に行われることを保証するため、および、ＦＬＡＧ変数の更新を、任意の後続の格納命令からのデータが見える前に可能な限り早く見えるようにすることを強制するために共通して必要とされる可能性がある。
【００２２】
図２は、図１に示す書込みバッファ１２２における書込みバッファエントリ２００を示す。書込みバッファエントリ２００は、外部メモリに格納される連続データブロックを格納するバッファ２０２を含む。書込みバッファエントリ２００はまた、バッファ２０２内の各バイトにそれぞれ対応するビットを有するマスクフィールド２０４も含む。ビットマスク２０４内の各ビットの状態は、バッファ２０２内の対応するバイトが外部メモリへ書き込まれるデータを格納しているか否かを示す。書込みバッファエントリにおけるキャッシュブロックアドレスフィールド２１０は、バッファ２０２内に格納される１２８バイトのキャッシュブロックの外部メモリにおける開始アドレスを格納する。書込みバッファエントリ２００はまた、アクティブビット２０６および有効ビット２０８も含む。有効ビット２０８は、バッファ２０２が外部メモリに書き込まれるデータを格納する場合に設定され、バッファ２０２に格納されているデータが外部メモリに書き込まれた後にクリアされる。一実施形態においては、バッファは１２８バイトの連続データブロックを格納することができ、マスクは、１ビットがバッファ１２８内の各バイトに対応する１２８ビットを有する。
【００２３】
書込みバッファ１２２は、マージング書込みバッファであり、すなわち、書込みバッファエントリ２００内のキャッシュブロックアドレス２１０に格納されたアドレスによって特定されるキャッシュブロック内にデータを格納する別々の格納命令を、外部メモリへの単一の書込み操作に縮小することができる。
【００２４】
アクティブビット２０６の状態は、続いて実行される格納命令からのデータが書込みバッファエントリ２００にまとめられうるか否か、すなわち、書込みバッファエントリ２００のバッファ２０２内に格納されたデータが外部メモリへの書込み処理中であるか否かを示す。書込みバッファエントリにおけるマスク２０４およびバッファ２０２は、格納命令からのデータが既存の書込みバッファエントリ２００にまとめられると、それに応じて更新される。
【００２５】
格納命令に関して外部メモリに格納されるデータは、上記データが格納される外部メモリ内のアドレスに応じて、アクティブな書込みバッファエントリに加えられ、すなわちまとめられ、または新しい書込みバッファエントリが割り当てられる。格納命令におけるアドレスは、現時点でアクティブな全ての書込みバッファエントリ２００におけるキャッシュブロックアドレスフィールド２１０に格納されているアドレスと比較される。格納されるデータを、アクティブな書込みバッファエントリ２００内のバッファ２０２において既に格納されているキャッシュブロックにまとめることができる場合は、バッファ２０２およびマスクフィールド２０４がそれに応じて更新される。
【００２６】
アクティブな書込みバッファエントリにまとめることが不可能な場合は、無効書込みバッファエントリ（クリアされた有効ビットを有する書込みバッファエントリ）のプールから書込みバッファエントリが割り当てられる。割当ての後に、書込みバッファエントリ２００内の有効ビット２０８が設定される。例えば、書込みバッファエントリに格納されたキャッシュブロックアドレスが0x1000であれば、アドレス0x1010に格納されるバイトは0x1000で始まる１２８バイトのキャッシュブロック内に位置し、書込みバッファエントリの格納領域に格納されることができる。すなわち、格納データは書込みバッファエントリに加えられる。キャッシュブロック内のアドレス0x1000への後続の格納命令は、書込みバッファエントリ内のこのキャッシュブロックに既に格納されているデータに上書きされ、すなわち、アクティブな書込みバッファエントリにまとめられる。
【００２７】
外部メモリに書き込まれる格納命令の結果（格納される値）は、プロセッサ１００がこの結果を外部メモリへ書き込む前に、しばらく書込みバッファにおける書込みバッファエントリ２００内に置かれてもよい。
【００２８】
図３は、書込みバッファエントリ２００に格納されたデータをコヒーレントメモリバス１３２で外部メモリに送信するプロセッサコア内のシステムインタフェース１１０における制御論理を示すブロック図である。図３には、書込みバッファ１２２の一部である書込みバッファアドレスファイル３１２も示されている。
【００２９】
書込みバッファ１２２内の書込みバッファエントリ２００に格納される全てのデータは、順序づけ待ち行列３００におけるエントリ３１４を介して外部メモリに送られる。順序づけ待ち行列は、先入れ先出し（ＦＩＦＯ）行列として実装される。書込みバッファエントリ２００内のアクティブビット２０６がクリアされる度に、順序づけ待ち行列３００内の順序づけ待ち行列エントリ３１４が割り当てられ、書込みバッファエントリ２００内のバッファ２０２に格納されているデータが外部メモリに書き込まれるべきであることを示す。例えば、書込みバッファエントリ２００内のアクティブビット２０６を、外部メモリに最後の格納データの書込み以降、またはＳＹＮＣＷ命令の実行後、予め選択されているＣＰＵサイクル数が経過した時点でクリアすることができる。各順序づけ待ち行列エントリ３１４は、外部メモリに書き込まれるデータを格納する１つまたは複数の書込みバッファエントリ２００を特定する。カウントフィールド３２６が、順序づけ待ち行列エントリのカウント数を格納する。
【００３０】
図４は、図３に示す順序づけ待ち行列３００における順序づけ待ち行列エントリ３１４の１つを示すブロック図である。順序づけ待ち行列エントリ３１４は、書込みバッファエントリマスク４００、およびＳＹＮＣＷフィールド４０２を含む。書込みバッファエントリマスク４００は、書込みバッファ１２２内の各書込みバッファエントリ２００にそれぞれ対応するビットを含む。書込みバッファエントリマスク４００内の各ビットの状態は、書込みバッファ１２２内の対応する書込みバッファエントリ２００が順序づけ待ち行列エントリ３１４に関して外部メモリに書き込まれるべきものであるか否かを示す。ＳＹＮＣＷフィールド４０２は単一ビットであり、このビットの状態は、ＳＹＮＣＷ命令が実行されたか否かを示す。すなわち、ＳＹＮＣＷフィールド４０２は、格納順序づけ命令の実行インジケータである。
【００３１】
プロセッサ１００は、第１の順序づけ待ち行列エントリ３１４における書込みバッファエントリマスク４００によって特定される全ての書込みバッファエントリ２００を、上記第１の順序づけ待ち行列エントリを削除する前、かつ次の順序づけ待ち行列エントリにおける書込みバッファエントリマスク４００によって特定される任意の書込みバッファエントリ２００を送る前に、外部メモリに送る。例えば、一実施形態においては、書込みバッファエントリ２００はＮ個存在し、順序づけ待ち行列３００内の各順序づけ待ち行列エントリ３１４は、書込みバッファエントリを特定するＮビットの書込みバッファエントリマスク（ベクトル）４００を有する。順序づけ待ち行列３００内にはＭ＝Ｎ＋１個の順序づけ待ち行列エントリ３１４が存在し、これにより、順序づけ待ち行列３００はオーバーフローすることなく、かつ、ＳＹＮＣＷ命令の実行は絶対にストールされない。別の実施形態においては、順序づけ待ち行列３００内の順序づけ待ち行列エントリ３１４の数はこれよりも少なく、その場合、順序づけ待ち行列３００が満杯であれば、ＳＹＮＣＷ命令の実行はストールされることがある。
【００３２】
図３に戻って、外部メモリに書き込まれるデータを格納する書込みバッファエントリ２００は、マルチプレクサ３０８および順序づけ待ち行列制御論理３０６を介して順序づけ待ち行列３００に追加される。システムインタフェース１１０は、コヒーレントメモリバスを介する格納データの外部メモリへの転送を制御するコヒーレントバスのアービトレーション（arbitration）論理３０４およびコミットカウンタ３０２も有する。コミットカウンタ３０２は、外部メモリへの格納操作の完了の経過を追う。コミットカウンタがゼロのとき、システムでは先行する全ての格納を見ることができる。
【００３３】
図４に関連して述べたように、各順序づけ待ち行列エントリ３１４はマスクフィールド４００およびＳＹＮＣＷビット４０２を含む。図示の実施形態では、１６個の書込みバッファエントリ（Ｎ＝１６）と、１７個の順序づけ待ち行列エントリ（Ｍ＝Ｎ＋１）が存在する。マルチプレクサ３０８は、１６の書込みバッファアクティブビット３１６（各書込みバッファエントリ２００から１つのアクティブビット２０６）、または単一エントリに１ビットのみが対応する１６ビットベクトル３１８のいずれかを選択する。選択された１６のアクティブビット３１６は順序づけ待ち行列制御論理３０６に転送され、順序づけ待ち行列３００内の順序づけ待ち行列エントリ３１４に格納される。順序づけ待ち行列制御論理３０６は、追加／削除制御信号によって順序づけ待ち行列内の順序づけ待ち行列エントリを追加または削除する。例えば、順序づけ待ち行列は縮小（collapsing）先入れ先出し（ＦＩＦＯ）として実装されてもよく、新しいエントリは待ち行列の一端に追加され、エントリは待ち行列の他端（先頭）から処理される。
【００３４】
書込みバッファエントリを１つしか有しない順序づけ待ち行列エントリ３１４は、当業者には周知であるように、多くの異なる状態に対して生成されることができる。例えば、書込みバッファオーバーフロー状態またはタイムアウト状態に対して、生成されることができる。ただし、書込みバッファエントリを１つしか有しない順序づけ待ち行列エントリを生成するためのこれら状態は、本発明の範囲外である。
【００３５】
各順序づけ待ち行列エントリ内のＳＹＮＣＷビット４０２は、順序づけ待ち行列３００内の各順序づけ待ち行列エントリ３１４における他のフィールドから分離して示されている。各順序づけ待ち行列エントリ３１４内のＳＹＮＣＷビット４０２はまた、順序づけ待ち行列制御論理３０６に転送される。
【００３６】
ＳＹＮＣＷビットが順序づけ待ち行列３００の先頭の順序づけ待ち行列エントリ３１４に設定されると、順序づけ待ち行列論理は、順序づけ待ち行列内の順序づけ待ち行列エントリによって特定される書込みバッファアドレスが後に発行される格納命令についてのアドレスに先行して外部メモリに送られることと、これらのアドレスが後続のいずれのアドレスの送信よりも前にコミットされることとを保証する。順序づけ待ち行列制御論理３０６は、コヒーレントバスのアービトレーション論理３０４に送信要求３２４を発行して、順序づけ待ち行列エントリ３１４内のマスクフィールド４００によって特定される次の書込みバッファエントリ２００におけるバッファ２０２に格納されているキャッシュブロックアドレスをコヒーレントバスのアービトレーション論理３０４に送る。コヒーレントバスのアービトレーション論理３０４は、この要求をコヒーレントバスのアドレスバス上で外部メモリに発行する。
【００３７】
一実施形態においては、現順序づけ待ち行列エントリ３１４における書込みバッファエントリマスクビット４００はまた、現在処理中の書込みバッファエントリ２０４に格納されているキャッシュブロックアドレスを選択するために、第１セットビット発見論理３１０に転送される。書込みバッファアドレスファイル３１２では、順序づけ待ち行列エントリ３１４内のマスク４００における第１セットビットに対応する書込みバッファエントリ２００内のキャッシュブロックアドレスフィールド２１０に格納されているキャッシュブロックアドレスが選択され、コヒーレントバスのアドレスバス３２２上に転送される。
【００３８】
第１の書込みバッファエントリ２００におけるキャッシュブロックアドレス２１０がコヒーレントメモリバスで外部メモリに転送された後に、順序づけ待ち行列制御論理３０６は、書込みバッファエントリ２００に対応する現順序づけ待ち行列エントリ３１４内の書込みバッファエントリマスク４００内のビットをクリアする。
【００３９】
順序づけ待ち行列エントリ３１４内の書込みバッファエントリマスクビット４００によって特定される全ての書込みバッファアドレス２００が、順序づけ待ち行列エントリ３１４の削除および次の順序づけ待ち行列エントリ３１４内の書込みバッファエントリ２００の処理に先立って、コヒーレントメモリバスで外部メモリに送られる。順序づけ待ち行列エントリは、全てのマスクビットが送られ、かつ、ａ）ＳＹＮＣＷビットがクリアされるか、もしくはｂ）コミットカウンタがゼロになった後に、削除されることができる。書込みバッファエントリ２００に格納されているデータが外部メモリに書き込まれた後、有効ビット２０８はクリアされて、書込みバッファエントリ２００が空きとなって割当てに利用できることが示される。
【００４０】
ＳＹＮＣＷ命令の実行は、アクティブな書込みバッファエントリにおける全ての格納を強制することによる格納命令の順序づけをもたらす。すなわち、格納データは、任意の後続の格納アドレスが外部メモリに送られる前に外部メモリにコミットされる。ＳＹＮＣＷ命令が全く実行されていなければ、各順序づけ待ち行列エントリ内のＳＹＮＣＷビットはクリア状態である。
【００４１】
メモリの順序づけ命令の実装が、先の格納命令が完了しないこと、または書込みバッファにおける不十分なバッファリングに起因して、命令の実行をストールする場合がある。本発明においては、メモリの順序づけ命令の実行は、先行してバッファされた格納（およびＳＹＮＣＷ）が必ず一意の順序づけ待ち行列、すなわち、順序づけ待ち行列３００内に割り当てられる順序づけ待ち行列エントリ３１４、に入ることができるため、ストールされる必要がない（Ｍ＝Ｎ＋１であれば）。
【００４２】
ＳＹＮＣＷは、ＳＹＮＣＷ命令が実行される度にアサート（表明）され、新しい順序づけ待ち行列エントリが生成される。新しい順序づけ待ち行列エントリが生成されないときは、最も新しい既存の順序づけ待ち行列エントリ内にＳＹＮＣＷビットを設定して、先行する格納の後続の格納に対する順序を保証する必要がある。演算ユニット１０２およびロード／格納ユニット１１８の組合せは、ＳＹＮＣＷ命令の実行を検出し、ＳＹＮＣＷをアサートする。
【００４３】
ＳＹＮＣＷ命令の実行によって、順序づけ待ち行列エントリ３１４にＳＹＮＣＷビット４０２が設定される。順序づけ待ち行列エントリにＳＹＮＣＷビット４０２が設定されると、この順序づけ待ち行列エントリは、以下の条件、すなわち、（１）（書込みバッファエントリマスク４００によって特定される）順序づけ待ち行列エントリに含まれる書込みバッファエントリ２００のアドレスが全て外部メモリに送られている、および（２）この順序づけ待ち行列エントリもしくは他の順序づけ待ち行列エントリによってシステムに送られる全てのアドレスが見える、すなわちコミットカウンタ３０２がゼロである、が全て満たされるまで削除されない。
【００４４】
図５は、順序づけ待ち行列制御論理３０６に実装される、ＳＹＮＣＷ命令の実行後に格納命令を順序づける方法を示すフローチャートである。本フローチャートを、図３に関連して説明する。
【００４５】
ステップ５００において、書込みバッファ制御論理３０６はＳＹＮＣＷ命令の実行を監視する。ＳＹＮＣＷ命令の実行が検出されれば、処理はステップ５０２に続く。
【００４６】
ステップ５０２において、書込みバッファ制御論理３０６は、アクティブな書込みバッファエントリが存在するか否か、すなわち、書込みバッファ内の書込みバッファエントリがアクティブビット２０６に設定されているか、をチェックする。設定されていれば、処理はステップ５０４に続き、設定されていなければ、処理はステップ５１２に続く。
【００４７】
ステップ５０４では、書込みバッファ内にアクティブな書込みバッファエントリが存在し、ステップ５０４による処理が続く。
【００４８】
ステップ５０４では、順序づけ待ち行列３００内に順序づけ待ち行列エントリ３１４が割り当てられ、処理はステップ５０６に続く。
【００４９】
ステップ５０６では、割り当てられた順序づけ待ち行列エントリ３１４内において、書込みバッファ１２２内の全てのアクティブな書込みバッファエントリ２００に対応する書込みバッファエントリマスクビット４００が設定され、処理はステップ５０８に続く。
【００５０】
ステップ５０８では、割り当てられた順序づけ待ち行列エントリ３１４に含まれる書込みバッファエントリが、各書込みバッファエントリ２００内のアクティブビット２０８をクリアすることによって非アクティブにされる。各書込みバッファエントリ２００内の有効ビット２０８は、書込みバッファエントリ２００内のバッファ２０２に格納されているデータが外部メモリに書き込まれるまで、設定されたままである。
【００５１】
ステップ５１０において、割り当てられた順序づけ待ち行列エントリ３１４にＳＹＮＣＷビット４０２が設定される。処理はステップ５００へと続き、次のＳＹＮＣＷ命令の実行が待機される。
【００５２】
ステップ５１２では、書込みバッファ１２２内にアクティブな書込みバッファエントリ２００が存在せず、書込みバッファ制御論理３０６は、順序づけ待ち行列３００内に順序づけ待ち行列エントリ３１４が存在するか否かをチェックする。存在すれば、処理はステップ５１４に続き、存在しなければ、処理はステップ５１６に続く。
【００５３】
ステップ５１４では、書込みバッファ１２２内にアクティブな書込みバッファエントリ２００が存在せず、順序づけ待ち行列３００内に少なくとも１つの順序づけ待ち行列エントリ３１４が存在する。順序づけ待ち行列エントリは割り当てられないが、その代わり、順序づけ待ち行列３００に割り当てられた順序づけ待ち行列エントリ３１４のうちの最後のエントリ３１４のＳＹＮＣＷビット４０２が設定される。処理はステップ５００へと続き、次のＳＹＮＣＷ命令の実行が待機される。
【００５４】
ステップ５１６では、書込みバッファ１２２内にアクティブな書込みバッファエントリ２００が存在せず、順序づけ待ち行列３００内に順序づけ待ち行列エントリ３１４は存在しない。順序づけ待ち行列エントリ３１４は割り当てられるが、外部メモリに格納されるデータを有するアクティブな書込みバッファ２００が存在しないことから、書込みバッファエントリマスクビット４００は設定されない。処理はステップ５１０に続き、割り当てられた順序づけ待ち行列エントリにＳＹＮＣＷビット４０２が設定される。
【００５５】
図６は、図１に示すコヒーレントメモリバス１３２での格納操作を示す。このコヒーレントメモリバスは、ＡＤＤ（加算）バスと、ＳＴＯＲＥ（格納）バスと、ＣＯＭＭＩＴ（コミット）バスと、ＦＩＬＬ（フィル）バスとを有する。ＡＤＤバスおよびＣＯＭＭＩＴバスへのインタフェースは、図３に示されている。ＡＤＤバスは、コヒーレントメモリバスのトランザクションを開始するためにアドレス／制御情報を転送する。ＳＴＯＲＥバスは、このトランザクションに関連づけられる格納データを転送する。ＣＯＭＭＩＴバスは、外部メモリからのトランザクション応答を開始する制御情報を転送する。ＦＩＬＬバスは、外部メモリからプロセッサにキャッシュブロックを転送する。
【００５６】
コヒーレントバスのアービトレーション論理３０４は、格納操作を制御する。格納操作は、順序づけ待ち行列制御論理３０６から送信要求３２４を受け取った時点で開始される。書込みバッファ２００内に格納されているキャッシュブロックのアドレス２１０は、ＡＤＤバスで書込みバッファアドレスファイル３１２から送られ、コミットカウンタ３０２はインクリメントされる。ＡＤＤバスサイクルは、ＳＴＯＲＥバスサイクルの間に必要な１２８ビット（オクタワード（１６バイト））転送の数も送る。
【００５７】
ＳＴＯＲＥバス転送は、後に、ＳＴＯＲＥバスが利用可能になりかつバッファ空間が外部メモリにおいてデータ用に利用可能になった時点で、スケジューリングされる。プロセッサは、格納データをＳＴＯＲＥバスに送出する。図示した例では、格納の完了には５つのＳＴＯＲＥバスサイクルが必要であり、各ＳＴＯＲＥバスサイクルで１６バイト（１２８ビット）が転送される。書込みバッファエントリ２００内のバッファ２０２に格納されている１２８バイトキャッシュブロック全体を転送するためのＳＴＯＲＥバスサイクルの数は、１から８までの範囲内である。外部メモリのコントローラはＡＤＤおよびＳＴＯＲＥバス情報をバッファリングし、外部メモリへの書込み操作を行う。ＣＯＭＭＩＴバスで受け取られるコミット表示（コミットインジケータ）３２０は、メモリコントローラがアドレスを受け取って順序づけを行ったこと、すなわち、そのアドレスが外部メモリに送られたことを示す。
【００５８】
コミットカウンタ３０２は、ＣＯＭＭＩＴバスでコミット表示３２０が受け取られるとデクリメントされる。コミット表示３２０は、コヒーレントメモリバス１３２の全てのユーザに格納データが見えることを表示する。コミット表示３２０は、実際の格納操作が完全に終了する前に送られてもよい。例えば、外部メモリのコントローラは、データがまだ外部メモリに書き込まれていなくても、コヒーレントメモリバスによる任意の後続の操作も更新された格納情報を見ることができるという条件で、格納操作についてコミットバスでプロセッサにコミット表示３２０を送ることができる。
【００５９】
順序づけ待ち行列制御論理３０６は、コミットカウンタが０であること、すなわち、先行する格納サイクルが完了したこと、を検出した時点で、コヒーレントバスのアービトレーション論理がコヒーレントメモリバスで別の格納サイクルを開始するように要求することができる。
【００６０】
多くの高性能メモリシステムでは、命令が順不同で提供されることから、メモリの順序づけ命令は必要である。特に、高いパケット処理性能の場合、操作はパケット処理アプリケーションによって処理中に保持されることが多いため、高性能メモリの順序づけ命令は重要である。
【００６１】
図７は、図１に示す少なくとも１つのプロセッサを含むネットワークサービスプロセッサ７００を有するセキュリティアプライアンス７０２を示すブロック図である。
【００６２】
セキュリティアプライアンス７０２は、１つのイーサネット（登録商標）ポート（Ｇｉｇ Ｅ）で受信したパケットを別のイーサネット（登録商標）ポート（Ｇｉｇ Ｅ）に切り換えて、受信したパケットに複数のセキュリティ機能を実行した後にそのパケットを転送する、スタンドアロン型システムである。例えば、セキュリティアプライアンス７０２を用いて、広域ネットワーク上で受信するパケットに対してセキュリティ処理を実行した後に、そのパケットをローカルエリアネットワークに転送することができる。
【００６３】
ネットワークサービスプロセッサ７００は、ハードウェアのパケット処理、バッファリング、ワークスケジューリング、順序づけ、同期化、およびコヒーレンスサポートを提供することにより、全てのパケット処理タスクの速度を高める。ネットワークサービスプロセッサ７００は、受信されたパケットにカプセル化されている開放型システム間相互接続ネットワークのＬ２からＬ７層までのプロトコルを処理する。
【００６４】
ネットワークサービスプロセッサ７００は、イーサネット（登録商標）・ポート（Ｇｉｇ Ｅ）から物理（ＰＨＹ）インタフェース７０４ａ、７０４ｂを介してパケットを受信し、受信されたパケットに対してＬ７〜Ｌ２ネットワークプロトコル処理を実行し、処理されたパケットを物理インタフェース７０４ａ、７０４ｂから、またはＰＣＩ（周辺装置相互接続（Peripheral Component Interconnect））バス７０６を介して転送する。ネットワークプロトコル処理には、ファイアウォール、アプリケーションファイアウォール、ＩＰセキュリティ（ＩＰＳＥＣ）および／またはセキュアソケットレイヤ（ＳＳＬ）を含む仮想プライベートネットワーク（ＶＰＮ）、侵入検知システム（ＩＤＳ）およびアンチウィルス（ＡＶ）などのネットワークセキュリティプロトコルの処理が含まれてもよい。
【００６５】
ネットワークサービスプロセッサ７００内のダイナミックランダムアクセスメモリ（ＤＲＡＭ）コントローラは、ネットワークサービスプロセッサ７００に結合される外部ＤＲＡＭ７０８へのアクセスを制御する。ＤＲＡＭ７０８はネットワークサービスプロセッサ７００の外部に存在する。ＤＲＡＭ７０８は、ＰＨＹインタフェース７０４ａ、７０４ｂまたは周辺装置相互接続拡張（ＰＣＩ−Ｘ）インタフェース７０６から受信されるデータパケットを、ネットワークサービスプロセッサ７００によって処理するために格納する。
【００６６】
ネットワークサービスプロセッサ７００は、低遅延ＤＲＡＭ７１８を制御する別のメモリコントローラを有する。低遅延ＤＲＡＭ７１８は、侵入検知システム（ＩＤＳ）またはアンチウィルス（ＡＶ）アプリケーションに必要とされる文字列一致を含む、高速検索を可能にするインターネットサービス／セキュリティアプリケーションに使用される。
【００６７】
図８は、図７に示すネットワークサービスプロセッサ７００のブロック図である。ネットワークサービスプロセッサ７００は、図１に関連して説明したとおり、少なくとも１つのプロセッサコア１００を使用して高いアプリケーション性能を提供する。ネットワークアプリケーションは、データプレーン（実データを転送するための伝送ネットワーク）操作と制御プレーン（実データの転送制御を行うための制御ネットワーク）操作とに分類することができる。各プロセッサコア１００は、データプレーン操作または制御プレーン操作を専門に行うことができる。データプレーン操作は、パケット転送のためのパケット操作を含む。制御プレーン操作は、インターネットプロトコルセキュリティ（ＩＰＳｅｃ）、通信制御プロトコル（ＴＣＰ）およびセキュアソケットレイヤ（ＳＳＬ）などの複雑な上位層プロトコルの一部を処理することを含む。データプレーン操作は、これらの複雑な上位層プロトコルの他の部分の処理を含んでもよい。各プロセッサコア１００は、フルオペレーティングシステムを実行する、すなわち、制御プレーン処理を実行することができ、または、調整されたデータプレーンコード（データプレーン処理）を実行することができる。例えば、全てのプロセッサコアは調整されたデータプレーンコードを実行することができるか、全てのプロセッサコアはそれぞれフルオペレーティングシステムを実行することができるか、または一部のプロセッサコアがオペレーティングシステムを実行することができて残りのプロセッサコアがデータプレーンコードを実行することができる。
【００６８】
ＳＹＮＣＷ命令は、一般的には、異なるプロセッサ上で同時に実行することのできる複数の命令ストリームを有する並列プログラムにおいて使用される。他のプロセッサによって格納命令の効果が観察される順序は、並列プログラムにおいてデータを確実に共有するために必要なアクションを決定する。
【００６９】
あるプロセッサによって実行される格納命令の効果は、他のプロセッサによってプログラムの順序から離れて観察されてもよいので、並列プログラムは確実にデータを共有するために明示的なアクションを行う。プログラムの臨界点では、命令ストリームからの格納の効果が全てのプロセッサに対して同一順序で発生しなければならない。ＳＹＮＣＷ命令は、ＳＹＮＣＷ命令の実行に先行する全ての格納の効果が、ＳＹＮＣＷ命令実行後の任意の格納の効果よりも前に全てのプロセッサによって見られることを可能にする。ＳＹＮＣＷ命令は、ＳＹＮＣＷ命令が実行される際の格納命令の厳密な順序づけを可能にする。
【００７０】
以下の表１におけるコードフラグメントは、別々の書込みおよび読出し命令ストリーム間での共有データの使用を調整するために、格納命令がいかに使用されることができるかを示す。
【００７１】
【表１】
2008512785.tif 000003
【００７２】
ＦＬＡＧは、共有されるデータアイテムＤＡＴＡが有効であるか否かを判断するために、命令ストリームによって使用される。書込みによって実行される最初のＳＹＮＣＷは、外部メモリへのＤＡＴＡの格納を、ＦＬＡＧへの格納が実行される前に実行させる。書込みによって実行される第２のＳＹＮＣＷは、ＦＬＡＧへの格納が他のプロセッサコアに見えるようになる前に書込みバッファでＦＬＡＧへの格納が長引かないことを保証する。
【００７３】
パケットは、ＳＰＩ−４．２またはＲＧＭIIインタフェースを介して、ＧＭＸ／ＳＰＸユニット８１０ａ、８１０ｂのいずれか一方によって処理されるために受信される。パケットは、ＰＣＩインタフェース８２４によって受信されることもできる。ＧＭＸ／ＳＰＸユニットは、受信されたパケットに含まれるＬ２ネットワークプロトコルヘッダ内の様々なフィールドをチェックすることによって受信されたパケットの前処理を実行し、次にこのパケットをパケット入力ユニット８１４に転送する。
【００７４】
パケット入力ユニット８１４は、受信されたパケットに含まれるネットワークプロトコルヘッダ（Ｌ３およびＬ４）のさらなる前処理を実行する。前処理には、通信制御プロトコル（ＴＣＰ）／ユーザデータグラムプロトコル（ＵＤＰ）（Ｌ３ネットワークプロトコル）に関するチェックサムのチェックが含まれる。
【００７５】
フリープールのアロケータ（ＦＰＡ）８３６が、レベル２キャッシュメモリ８１２およびＤＲＡＭにおける空きメモリへのポインタのプールを保持する。パケット入力処理ユニット８１４は、ポインタのプールの１つを使用して、受信されたパケットデータをレベル２キャッシュメモリまたはＤＲＡＭに格納し、ポインタの別のプールを使用してプロセッサコアにワーク待ち行列エントリを割り当てる。
【００７６】
パケット入力ユニット８１４は次に、レベル２キャッシュ８１２またはＤＲＡＭ内のバッファにパケットデータを、上位層のネットワークプロトコルによるその後の処理のために、少なくとも１つのプロセッサコア１００で実行される上位層ソフトウェアに好都合のフォーマットで書き込む。
【００７７】
ネットワークサービスプロセッサ７００は、ネットワークサービスプロセッサが高スループットを達成するように、プロセッサコア１００をオフロード（負荷軽減）する特定用途向けコプロセッサを有することができる。圧縮／解凍コプロセッサ８０８は、受信パケットの圧縮および解凍を専用に実行する。ＤＦＡモジュール８４４は、アンチウィルス（ＡＶ）、侵入検知システム（ＩＤＳ）および他のコンテンツ処理アプリケーションに必要なパターンおよび署名一致を最大４ギガビット／秒の速度で促進する専用のＤＦＡエンジンを有する。
【００７８】
Ｉ／Ｏブリッジ（ＩＯＢ）８３２は、全体のプロトコルおよびアービトレーションを管理し、コヒーレントなＩ／Ｏ区分化（partitioning）を提供する。ＩＯＢ８３２は、ブリッジ８３８およびフェッチ・アンド・アッドユニット（ＦＡＵ）８４０を有する。ＦＡＵ８４０内のレジスタを用いて、パケット出力ユニット８１８を介して処理されたパケットを転送するのに使用される出力待ち行列の長さを保持する。ブリッジ８３８は、Ｉ／Ｏバス、コヒーレントメモリバス、パケット入力ユニット８１４、およびパケット出力ユニット８１８間で転送される情報を格納するためのバッファ待ち行列を含む。
【００７９】
パケット順序／ワーク（ＰＯＷ）モジュール８２８は、プロセッサコア１００のワークをキューイングして（待ち行列に入れて）スケジューリングする。ワーク待ち行列エントリを待ち行列に追加することによって、ワークが待ち行列に入れられる。例えば、ワーク待ち行列エントリは、パケットの到着毎にパケット入力ユニット８１４によって追加される。プロセッサコアのワークのスケジューリングには、タイマユニット８４２が使用される。
【００８０】
プロセッサコア１００は、ＰＯＷモジュール８２８にワークを要求する。ＰＯＷモジュール８２８は、プロセッサコア１００に対してワークを選択（すなわち、スケジューリング）し、そのワークを記述するワーク待ち行列エントリを指すポインタをプロセッサコア１００に返す。
【００８１】
プロセッサコア１００は、命令キャッシュ１２６、レベル１データキャッシュ１２８、および暗号化アクセラレーション１２４を有する。一実施形態においては、ネットワークサービスプロセッサ１００は、１６個のスーパースカラーＲＩＳＣ（縮小命令セットコンピュータ）型プロセッサコアを含む。一実施形態においては、各スーパースカラーＲＩＳＣ型プロセッサコアはＭＩＰＳ６４バージョン２プロセッサコアの拡張である。
【００８２】
レベル２キャッシュメモリ８１２およびＤＲＡＭメモリは、プロセッサコア１００およびＩ／Ｏコプロセッサデバイスの全てによって共有される。各プロセッサコア１００は、コヒーレントメモリバス１３２によってレベル２キャッシュメモリ８１２に結合される。コヒーレントメモリバス１３２は、プロセッサコア１００、Ｉ／Ｏブリッジ（ＩＯＢ）８３２ならびにレベル２キャッシュおよびコントローラ８１２間の全てのメモリおよびＩ／Ｏトランザクションのための通信チャネルである。一実施形態においては、コヒーレントメモリバス１３２は１６個のプロセッサコアに対して適応でき、ライトスルーによって完全にコヒーレントなレベル１データキャッシュ１２８をサポートし、高度なバッファ機能を果たして、Ｉ／Ｏを優先順位付けすることができる。
【００８３】
レベル２キャッシュメモリコントローラ８１２は、メモリ参照コヒーレンスを保持する。レベル２キャッシュメモリコントローラ８１２は、ブロックがＬ２キャッシュもしくはＤＲＡＭに格納されていても、または処理中であっても、あらゆるＦＩＬＬ（フィル）要求に対して、ブロックの最新コピーを返す。レベル２キャッシュメモリコントローラ８１２は、各プロセッサコア１００内にデータキャッシュ１２８に対するタグを２部格納する。レベル２キャッシュメモリコントローラ８１２は、キャッシュブロック格納の要求のアドレスをデータキャッシュタグと比較し、格納命令が別のプロセッサコアからであるか、またはＩ／Ｏブリッジ８３２を介するＩ／Ｏコンポーネントからであるときは、常にプロセッサコア１００のデータキャッシュタグを（２部とも）無効にする。
【００８４】
プロセッサコア１００によってパケットが処理されると、パケット出力ユニット（ＰＫＯ）８１８は、メモリからパケットデータを読み出し、Ｌ４ネットワークプロトコル後処理を実行し（例えば、ＴＣＰ／ＵＤＰチェックサムを生成し）、上記パケットをＧＭＸ／ＳＰＣユニット８１０ａ、８１０ｂを介して転送し、パケットによって使用されたＬ２キャッシュ／ＤＲＡＭを解放する。
【００８５】
以上、本発明をセキュリティアプライアンスに含まれるプロセッサコアに関連して説明した。しかしながら、本発明はセキュリティアプライアンスにおけるプロセッサコアに限定されるわけではない。本発明は、任意のパイプライン化プロセッサにおける格納命令の順序づけに適用される。
【００８６】
以上、本発明をその好ましい実施形態に関連して詳細には示しかつ説明してきたが、当業者には、添付の請求の範囲に包含される本発明の範囲を逸脱することなく形態および細部に様々な変更を実行できることが理解されるであろう。
【図面の簡単な説明】
【００８７】
【図１】本発明の原理による格納命令を順序づけるためのメモリ順序づけ命令を含む命令セットを有する縮小命令セットコンピュータ型（ＲＩＳＣ）プロセッサを示すブロック図である。
【図２】図１に示す書込みバッファにおける書込みバッファエントリを示す図である。
【図３】書込みバッファエントリに格納されるデータをコヒーレントメモリバス上で外部メモリに送信するプロセッサコア内のシステムインタフェースにおける制御論理を示すブロック図である。
【図４】図２に示す順序づけ待ち行列における順序づけ待ち行列エントリの１つを示すブロック図である。
【図５】順序づけ待ち行列制御論理に実装される、ＳＹＮＣＷ命令の実行後に格納命令を順序づける方法を示すフローチャートである。
【図６】図５に示すコヒーレントメモリバス上の格納操作を示す図である。
【図７】図１に示す少なくとも１つのＲＩＳＣプロセッサを有するネットワークサービスプロセッサを備えたセキュリティアプライアンスを示すブロック図である。
【図８】図７に示すネットワークサービスプロセッサ７００のブロック図である。
【符号の説明】
【００８８】
１１０  システムインタフェース
１２２  書込みバッファ
３００  順序づけ待ち行列
３０６  順序づけ待ち行列制御論理
【図１】
2008512785.tif 000004
【図２】
2008512785.tif 000005
【図３】
2008512785.tif 000006
【図４】
2008512785.tif 000007
【図５】
2008512785.tif 000008
【図６】
2008512785.tif 000009
【図７】
2008512785.tif 000010
【図８】
2008512785.tif 000011
【国際調査報告】
2008512785.tif 000012
2008512785.tif 000013
2008512785.tif 000014