JP3801919B2 - パケットルーティング動作におけるプロセッサ用キューイングシステム - Google Patents

パケットルーティング動作におけるプロセッサ用キューイングシステム Download PDF

Info

Publication number
JP3801919B2
JP3801919B2 JP2001558844A JP2001558844A JP3801919B2 JP 3801919 B2 JP3801919 B2 JP 3801919B2 JP 2001558844 A JP2001558844 A JP 2001558844A JP 2001558844 A JP2001558844 A JP 2001558844A JP 3801919 B2 JP3801919 B2 JP 3801919B2
Authority
JP
Japan
Prior art keywords
packet
queue
identifier
processor
packets
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2001558844A
Other languages
English (en)
Other versions
JP2003523112A (ja
Inventor
ネミロフスキイ,マリオ
ムソル,エンリケ
メルビン,ステイーブン
サンカー,ナレンドラ
サンパス,ナンダクマール
ネミロフスキイ,アドルフオ
Original Assignee
ミップス テクノロジーズ インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ミップス テクノロジーズ インコーポレイテッド filed Critical ミップス テクノロジーズ インコーポレイテッド
Publication of JP2003523112A publication Critical patent/JP2003523112A/ja
Application granted granted Critical
Publication of JP3801919B2 publication Critical patent/JP3801919B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2441Traffic characterised by specific attributes, e.g. priority or QoS relying on flow classification, e.g. using integrated services [IntServ]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/32Flow control; Congestion control by discarding or delaying data units, e.g. packets or frames
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/621Individual queue per connection or flow, e.g. per VC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/6215Individual queue per QOS, rate or priority
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/20Support for services
    • H04L49/201Multicast operation; Broadcast operation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/901Buffering arrangements using storage descriptor, e.g. read or write pointers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9063Intermediate storage in different physical parts of a node or terminal
    • H04L49/9068Intermediate storage in different physical parts of a node or terminal in the network interface card
    • H04L49/9073Early interruption upon arrival of a fraction of a packet
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/20Support for services
    • H04L49/205Quality of Service based

Landscapes

  • Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Hardware Redundancy (AREA)
  • Studio Devices (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Multi Processors (AREA)

Description

【0001】
(発明の分野)
本発明は、ディジタル処理の分野で、パケットネットワーク用のルータ内でのパケットの処理の装置および方法に関し、具体的には、特にダイナミックマルチストリーミングプロセッサでの、異なるタイプのプロセッサおよびマルチプロセッサシステムを使用するルーティング動作でのパケットのキューイングおよび優先順位付けの装置および方法に関する。
【0002】
(関連文書の相互参照)
本明細書は、2000年8月2日出願の米国仮特許出願第60/181364号の米国特許法119(e)条の下での優先の利益を主張し、前の特許出願のすべての開示を参照によって組み込む。
【0003】
(発明の背景)
よく知られているインターネットネットワークは、本願の提出の時点で有名なよく知られた公衆がアクセス可能な通信ネットワークであり、これまでに使用可能にされたものの中で最も堅牢な情報および通信のソースであると論証できる。インターネットは、主な例として、本明細書で教示される装置および方法から利益を得るデータパケットネットワークの現在の応用分野の例で使用されるが、このデータパケットネットワークは、特定の標準化されたプロトコルに従うネットワークの1つにすぎない。やはり非常によく知られているように、インターネット(および関係するネットワーク)は、常に仕掛品である。すなわち、多数の研究者および開発者が、そのようなネットワークの動作を機能強化するための、ソフトウェアを含む新しいよりよい装置および方法を提供するために常時競争している。
【0004】
一般に、データパケットネットワークでの最も需要の多い改良は、より高速のルーティング(単位時間あたりのパケット数が多い)と、メッセージングでのよりよい信頼性および忠実度を提供するものである。一般に必要とされているものは、パケットをルータ内で処理できる速度を高めるルータ装置および方法である。
【0005】
当技術分野でよく知られているように、パケットルータは、データパケットを、通常は複数のポートの1つまたは複数で受信し、ある形で処理し、ルータの同一のまたは他のポートに送出して、下流の宛先へ継続する、コンピュータ化された機械である。そのようなコンピュータ化された動作の例として、インターネットが、個々のルータの膨大な相互接続されたネットワークであることを念頭におくと、個々のルータは、それが通信ポートによって接続されている外部ルータがどれであるかと、着信パケットについてネットワークを介する代替経路のどれが最適経路であるかを記憶しなければならない。個々のルータは、フローアカウンティングも達成しなければならず、フローは、一般に、共通のソースおよび終点宛先を有するパケットのストリームを意味する。一般に望まれているものは、個々のフローが共通の経路に従うことである。当業者は、コンピュータ化された処理に関する多数のそのような要件を知っている。
【0006】
通常、インターネットネットワーク内のルータは、必要な多数のコンピューティングタスクを達成するための専用マイクロプロセッサとして1つまたは複数の中央処理装置(CPU)を有する。本願出願時点での最新技術では、これらが、単一ストリーミングプロセッサである、すなわち、各プロセッサが、命令の単一のストリームを処理することができる。いくつかの場合に、開発者は、そのようなルーティング動作にマルチプロセッサ技術を適用する。本発明人は、複数の命令ストリームを同時に処理することができるダイナミックマルチストリーミング(DMS)プロセッサの開発にしばらくかかわった。そのようなプロセッサに好ましい応用分野が、インターネットなどのパケットネットワークでのパケットの処理である。
【0007】
上の「関連文書の相互参照」に記載の仮特許出願に、パケット処理へのDMS応用に好ましいアーキテクチャの説明および図面がある。そのアーキテクチャの機能領域の1つが、キューイングシステムを含む、汎用キューとそれに関連する方法および回路である。本発明が関係するのは、権能を付与する詳細を下で説明する、このキューイングシステムである。
【0008】
(発明の概要)
本発明の好ましい実施形態では、データパケットプロセッサにおいて、処理中のパケットアカウンティング用の構成可能キューイングシステムが提供され、このシステムには、1つまたは複数のクラスタに配置された複数のキューと、到着するパケットのパケット識別子を作成する識別機構と、パケット識別子をキューに挿入し、パケット識別子をどのキューに挿入するかを決定する挿入論理と、識別されたパケットの処理の開始、完了したパケットのダウンロード、または選択されたパケット識別子の再キューイングのためにキューからのパケット識別子を選択する選択論理とが含まれる。
【0009】
いくつかの実施形態では、すべてのキュー内のパケット識別子の総数が、固定され、クラスタの数およびクラスタごとのキューの数を、1から同一の最大個数まで変更することができ、クラスタの数が1と等しい場合に、キューの数が最大個数になり、逆も同様である。また、いくつかの実施形態で、キューの数を決定するクラスタの相対的な数が、プロセッサに関連する構成レジスタをセットすることによってセットされる。
【0010】
いくつかの場合に、パケット識別子の総数が256であり、256個のパケットが、どの時点でもデータパケットプロセッサ内で処理中になることができることを意味する。また、いくつかの場合に、クラスタまたはキューのいずれかの最大個数が32であり、クラスタまたはキューの数が2のべきになるように制御される。
【0011】
いくつかの実施形態で、作成される前記パケット識別子が、前記パケット自体が処理中に保管されるメモリ位置に関連する。この場合に、処理中にパケットデータを保管するオンボードメモリが、パケットページに配置され、前記パケット識別子が、パケットの前記パケットデータが保管されるパケットページの先頭を識別するアドレスである。もう1つの機能強化で、作成されキューイングされる前記パケット識別子が、前記メモリ位置の他に、前記パケットがそこから受信された装置の1つまたは複数の識別子と、前記パケットが処理中に総サイズが増加または減少したかどうかの表示と、関連するパケットに対する処理が完了したか否かの表示と、前記パケット識別子を挿入しなければならない次のキューと、前記パケットが現在処理中であるかどうかの識別子とを含む。
【0012】
いくつかの実施形態で、前記挿入論理が、パケットの優先順位を判定し、判定された前記優先順位に応じて前記パケットを特定のキューに挿入する。クラスタに番号を付けることができ、識別されたパケットを処理する優先順位が、これらの場合では、クラスタ番号による。
【0013】
いくつかの実施形態で、選択システムが、前記パケット識別子内でセットされた次のキュー番号の値に基づいて再キューイングのためにパケットを選択する。また、いくつかの実施形態で、選択システムが、関連するパケットに対する処理が完了したかどうかの表示の値に基づいて、ダウンロードのためにパケットを選択する。
【0014】
いくつかの実施形態で、選択システムが、キュー番号による優先順位に基づいて処理のためにパケットを選択し、いくつかの場合に、処理のためにパケットを選択するために優先順位クラスタ内のキューを選択する時に、公平アルゴリズムに従う。
【0015】
いくつかの好ましい実施形態では、前記データパケットプロセッサが、コンテキストレジスタによって実施され個々のストリームに関連する別々のコンテキストを有するマルチストリーミングプロセッサであり、選択システムが、選択された識別子に関連するパケットからのヘッダ情報を、使用可能なコンテキストにロードさせる。ストリームより多数のコンテキストが存在することができ、使用可能なコンテキストへのヘッダ情報のローディングを、バックグラウンドすなわち、パケットの処理と並列に、達成することができる。
【0016】
本発明のいくつかの実施形態では、プロセッサによって実行されるソフトウェアが、パケット識別子内のフィールドの個々の1つの値を操作することをイネーブルされる。また、いくつかの実施形態では、前記挿入論理が、少なくとも部分的にフローに従って、パケットをキューに挿入し、挿入および選択論理が、個々のフロー内のパケットの順序を保存するために協力する。さらなる実施形態では、前記挿入論理が、ネットワークまたはスイッチングファブリックから着信するパケットを、キューへの識別子挿入に関する最高の優先順位を用いて扱い、再キューイングされるパケット識別子を次に高い優先順位を用いて扱い、ソフトウェアによって生成されるパケットの識別子を最低の優先順位を用いて扱う。
【0017】
本発明のもう1つの態様では、1つまたは複数のソースからの着信パケットをバッファリングする入力バッファと、処理中にパケットデータを保管するローカルパケットメモリと、パケットデータを処理するストリームプロセッサユニットと、処理中のパケットアカウンティング用の構成可能なキューイングシステムとを含むデータパケットプロセッサが提供される。前記キューイングシステムが、1つまたは複数のクラスタに配置された複数のキューと、到着するパケットのパケット識別子を作成する識別機構と、パケット識別子をキューに挿入し、パケット識別子をどのキューに挿入するかを決定する挿入論理と、識別されたパケットの処理の開始、完了したパケットのダウンロード、または選択されたパケット識別子の再キューイングのためにキューからパケット識別子を選択する選択論理とを含む。
【0018】
プロセッサのいくつかの実施形態では、すべてのキュー内のパケット識別子の総数が、固定され、クラスタの数およびクラスタごとのキューの数を、1から同一の最大個数まで変更することができ、クラスタの数が1と等しい場合に、キューの数が最大個数になり、逆も同様である。また、いくつかの実施形態で、キューの数を決定するクラスタの相対的な数が、プロセッサに関連する構成レジスタをセットすることによってセットされる。
【0019】
いくつかの場合に、パケット識別子の総数が256であり、256個のパケットが、どの時点でも前記データパケットプロセッサ内で処理中になることができることを意味する。また、いくつかの場合に、クラスタまたはキューのいずれかの最大個数が32であり、クラスタまたはキューの数が2のべきになるように制御される。
【0020】
いくつかの実施形態で、作成される前記パケット識別子が、前記パケット自体が処理中に保管されるメモリ位置に関連する。これらの実施形態では、処理中にパケットデータを保管するオンボードメモリが、パケットページに配置され、前記パケット識別子が、パケットの前記パケットデータが保管されるパケットページの先頭を識別するアドレスである。
【0021】
いくつかの場合に、作成されキューイングされる前記パケット識別子が、前記メモリ位置の他に、前記パケットがそこから受信された装置の1つまたは複数の識別子と、前記パケットが処理中に総サイズが増加または減少したかどうかの表示と、関連するパケットに対する処理が完了したか否かの表示と、前記パケット識別子を挿入しなければならない次のキューと、前記パケットが現在処理中であるかどうかの識別子とを含む。
【0022】
いくつかの実施形態で、前記挿入論理が、パケットの優先順位を判定し、判定された前記優先順位に応じて前記パケットを特定のキューに挿入する。これらの実施形態の一部では、クラスタが、番号を付けられ、識別されたパケットを処理する優先順位が、クラスタ番号による。
【0023】
いくつかの場合に、選択システムが、前記パケット識別子内でセットされた次のキュー番号の値に基づいて再キューイングのためにパケットを選択する。また、いくつかの場合に、選択システムが、関連するパケットに対する処理が完了したかどうかの表示の値に基づいて、ダウンロードのためにパケットを選択する。さらに、キューが優先順位によって番号を付けられる場合に、選択システムが、キュー番号による優先順位に基づいて処理のためにパケットを選択することができる。この場合に、処理のためにパケットを選択するために優先順位クラスタ内のキューを選択する時に従う公平アルゴリズムを設けることができる。
【0024】
いくつかの好ましい実施形態では、前記データパケットプロセッサが、コンテキストレジスタによって実施され個々のストリームに関連する別々のコンテキストを有するマルチストリーミングプロセッサであり、選択システムが、選択された識別子に関連するパケットからのヘッダ情報を、使用可能なコンテキストにロードさせる。これらの実施形態のいくつかで、ストリームより多数のコンテキストがあり、使用可能なコンテキストへのヘッダ情報のローディングが、バックグラウンドすなわち、パケットの処理と並列に、達成される。
【0025】
このプロセッサのいくつかの実施形態で、プロセッサによって実行されるソフトウェアが、パケット識別子内のフィールドの個々の1つの値を操作することをイネーブルされる。また、このプロセッサのいくつかの実施形態で、前記挿入論理が、少なくとも部分的にフローに従って、パケットをキューに挿入し、挿入および選択論理が、個々のフロー内のパケットの順序を保存するために協力する。いくつかの場合に、前記挿入論理が、ネットワークまたはスイッチングファブリックから着信するパケットを、キューへの識別子挿入に関する最高の優先順位を用いて扱い、再キューイングされるパケット識別子を次に高い優先順位を用いて扱い、ソフトウェアによって生成されるパケットの識別子を最低の優先順位を用いて扱う。
【0026】
本発明のもう1つの態様で、データパケットプロセッサ内でのパケットのアカウンティングの方法であって、(a)プロセッサ内で1つまたは複数のクラスタ内の複数のキューを設けるステップと、(b)到着するパケットのパケット識別子を作成するステップと、(c)どのキューに挿入するかを決定する論理を有する挿入機構によってパケット識別子をキューに挿入するステップと、(d)識別されたパケットの処理の開始、完了したパケットのダウンロード、または選択されたパケット識別子の再キューイングのために、選択論理によってキューからパケット識別子を選択するステップとを含む方法。
【0027】
この方法のいくつかの実施形態では、すべてのキュー内のパケット識別子の総数が、固定され、クラスタの数およびクラスタごとのキューの数を、1から同一の最大個数まで変更することができ、クラスタの数が1と等しい場合に、キューの数が最大個数になり、逆も同様である。いくつかの実施形態では、キューの数を決定するクラスタの相対的な数が、プロセッサに関連する構成レジスタをセットすることによってセットされる。
【0028】
この方法のいくつかの実施形態では、パケット識別子の総数が256であり、256個のパケットが、どの時点でもデータパケットプロセッサ内で処理中になることができることを意味する。クラスタまたはキューのいずれかの最大個数を32にすることができ、クラスタまたはキューの数が2のべきになるように制御される。
【0029】
この方法の他の実施形態では、作成される前記パケット識別子が、前記パケット自体が処理中に保管されるメモリ位置に関連する。メモリをパケットページに配置することができ、前記パケット識別子が、パケットの前記パケットデータが保管されるパケットページの先頭を識別するアドレスである。
【0030】
いくつかの場合に、作成されキューイングされる前記パケット識別子が、前記メモリ位置の他に、前記パケットがそこから受信された装置の1つまたは複数の識別子と、前記パケットが処理中に総サイズが増加または減少したかどうかの表示と、関連するパケットに対する処理が完了したか否かの表示と、前記パケット識別子を挿入しなければならない次のキューと、前記パケットが現在処理中であるかどうかの識別子とを含む。
【0031】
いくつかの実施形態で、前記挿入論理が、パケットの優先順位を判定し、判定された前記優先順位に応じて前記パケットを特定のキューに挿入する。これらの場合のいくつかでは、クラスタが、番号を付けられ、識別されたパケットを処理する優先順位が、クラスタ番号による。これらの場合では、選択システムが、前記パケット識別子内でセットされた次のキュー番号の値に基づいて再キューイングのためにパケットを選択する。
【0032】
この方法のいくつかの実施形態では、選択システムが、関連するパケットに対する処理が完了したかどうかの表示の値に基づいて、ダウンロードのためにパケットを選択し、キュー番号による優先順位に基づいて処理のためにパケットを選択することができる。処理のためにパケットを選択するために優先順位クラスタ内のキューを選択する時に、公平アルゴリズムに従うことができる。
【0033】
本発明のいくつかの好ましい実施形態では、前記データパケットプロセッサが、コンテキストレジスタによって実施され個々のストリームに関連する別々のコンテキストを有するマルチストリーミングプロセッサであり、選択システムが、選択された識別子に関連するパケットからのヘッダ情報を、使用可能なコンテキストにロードさせる。
【0034】
いくつかの実施形態で、ストリームより多数のコンテキストがあり、使用可能なコンテキストへのヘッダ情報のローディングが、バックグラウンドすなわち、パケットの処理と並列に、達成される。
【0035】
いくつかの実施形態で、プロセッサによって実行されるソフトウェアが、パケット識別子内のフィールドの個々の1つの値を操作することをイネーブルされる。また、いくつかの実施形態で、前記挿入論理が、少なくとも部分的にフローに従って、パケットをキューに挿入し、挿入および選択論理が、個々のフロー内のパケットの順序を保存するために協力する。いくつかの場合に、前記挿入論理が、ネットワークまたはスイッチングファブリックから着信するパケットを、キューへの識別子挿入に関する最高の優先順位を用いて扱い、再キューイングされるパケット識別子を次に高い優先順位を用いて扱い、ソフトウェアによって生成されるパケットの識別子を最低の優先順位を用いて扱う。
【0036】
本発明のもう1つの態様では、処理を待っている到着するパケットを管理するキューイングシステムを有するデータパケットプロセッサにおいて、固定された範囲のパケット番号と、割当機構とを有するパケット番号付けシステムが提供される。前記割当機構が、前記固定された範囲の個別の番号をアカウンティングし、前記キューイングシステム内のパケットが処理のために送られる時に番号をインアクティブとマークし、インアクティブな番号を前記キューイングシステムに置かれる新たに到着したパケットに再割り当てする。
【0037】
いくつかの実施形態で、プローブビットが、ある時点でパケットに割り当てられたパケット番号が別の時点で同一のパケットに割り当てられることを保証するために各パケットに関連付けられ、前記プローブビットが、パケット番号が割り当てられる時にデアサートされ、ストリームによって実行されるProbe and Setコマンドによってアサートされ、プローブビットがアサートされた後のどの時刻にも、アサートされたプローブビットが、前記パケット番号が前記同一のパケットに関連することを示すようにすることを特徴とする。
【0038】
下の権能を付与する詳細で教示される本発明の実施形態は、初めて、従来の機器を用いて前に可能であった速度をはるかに超える速度で、効率的でコスト効率のよい形で、着信パケットをキューに入れ、管理する、データパケットプロセッサを提供する。
【0039】
(好ましい実施形態の説明)
上で参照した仮特許出願第60/181364号に、発明人がXCaliberプロセッサと呼ぶ、パケットネットワークでのパケット処理専用のDMSプロセッサのアーキテクチャに関する開示がある。参照された開示には、2つの広範囲の図面が提供され、その1つのNIOブロック図と称する図には、XCaliberプロセッサの全体的なアーキテクチャが、パケット処理ASICとの間の入出力ポートと共に示され、他方の図には、NIO図に示された汎用キューの多数の態様が示されている。この優先権書類のNIOシステムは、本明細書のパケット管理ユニット(PMU)と等しい。本明細書が対象とするものは、汎用キューの複数の態様である。
【0040】
図1は、優先権文書のNIO図に示されたものより高水準の機能ユニットの副分割を伴うXCaliber DMSプロセッサ101の単純化されたブロック図である。図1では、XCaliber DMSプロセッサ101が、3つの機能領域に編成されるものとして示されている。外側のシステムインターフェースユニット(SIU)領域107は、外部装置すなわち、XCaliberプロセッサの外部の、通常はパケットを送信し、受信するための装置との通信を提供する。内側では、プロセッサ101が、2つの広範囲の機能ユニットすなわち、上記の優先権文書のNIOシステムと等しいパケット管理ユニット(PMU)103と、ストリームプロセッサユニット(SPU)107に分割される。PMUの機能には、受信され処理されるすべてのパケットの、アカウンティングと管理が含まれる。SPUは、すべての計算タスクの責任を負う。
【0041】
PMUは、XCaliberプロセッサのうちで、コストの高いパケットヘッダアクセスとパケットのソートおよび管理のタスクの実行からSPUをオフロードする部分であり、これらのタスクは、こうなっていなければ、プロセッサ全体の性能を大きく低下させるはずである。
【0042】
パケット管理は、(a)パケット記憶用に割り振られるオンチップメモリの管理と、(b)バックグラウンドで、着信パケットからのパケットヘッダ情報をXCaliberプロセッサの異なるコンテキスト(下でさらに説明するコンテキストレジスタ)にアップロードすることと、(c)柔軟なキューイングシステムで、現在XCaliber内で処理中のパケットのパケット識別子を維持することによって達成される。
【0043】
説明した、PMUによって実行されるパケット管理およびアカウンティングのタスクは、SPUコアによるパケットの処理と並列に実行される。この機能性を実装するために、PMUは、ネットワークから着信するパケットをバッファリングし、それらをSPUコアに供給し、必要な場合に、処理が完了した時にそれらをネットワークに送出する、ハードウェア構造の組を有する。PMUは、本明細書の焦点である、内部パケットメモリストレージおよびキューイングシステムの構成など、その複数の機能の高い度合のプログラム可能性を特徴とする。
【0044】
図2は、追加の詳細を示す、図1のXCaliberプロセッサのブロック図である。SIU107およびSPU105は、図1で使用されたものと同一の符号を有する、単一のブロックとして図2に示されている。しかし、PMUは、要素の間に通信回線を示されて、かなり拡大されて詳細に示されている。
【0045】
図2では、ネットワーク/スイッチングファブリックインターフェース203が示されており、これは、いくつかの場合に、たとえばインターネットなどのネットワークへまたは、たとえばパケットを受信し、送信し、XCaliberプロセッサとパケットをやりとりする、パケットルータ内のスイッチングファブリックへの直接のインターフェース専用の特定用途向け集積回路(ASIC)である。この特定の例では、プロセッサ201と通信する2つのインポートと2つのアウトポートがある。ネットワークインインターフェース回路205およびネットワークアウトインターフェース回路215は、プロセッサへおよびプロセッサからのパケットトラフィックを処理し、これらの2つのインターフェースは、図2では便宜上別々に図示されているが、正しくはSIU107の一部である。
【0046】
また、PMU内のネットワークインターフェースには、プロセッサ201内に、入力バッファ207および出力バッファ217があり、これらは、プロセッサ201から出入りするパケットのフローをバッファリングするように働く。
【0047】
図1をもう一度参照すると、パケット管理ユニット(PMU)103が示されており、このPMU103を、パケット管理およびアカウンティングの要件をストリーム処理ユニットからオフロードするユニットとして説明した。これは、具体的には、図2で展開されたユニットであり、実質的に、入力バッファ(IB)207、出力バッファ(OB)217、ページングメモリ管理ユニット(PMMU)209、ローカルパケットメモリ(LPM)219、コマンドユニット(CU)213、キューイングシステム(QS)211、構成レジスタ221、およびレジスタ転送ユニット(RTU)227からなる。PMUの要素の間の通信経路は、図2では矢印によって示されており、特に本明細書の特定の焦点であるQS211を含む、PMUの要素のさらなる説明を、下で提供する。
【0048】
PMUの概要
図2に、PMUの要素が示されており、これらを下で簡単に識別する。パケットは、この例では、16バイトネットワーク入力インターフェースを介してPMUに到着する。この実施形態では、パケットデータが、20Gbps(最大)の速度でPMUに到着する。300MHzのXCaliberコア周波数動作速度で、平均8バイトのパケットデータが、すべてのXCaliberコアサイクルに受信される。ネットワーク入力インターフェースからの着信データは、インバッファ(IB)ブロック207でバッファリングされる。XCaliber内のネットワークインターフェース205は、外部装置がパケット送信の前にパケットにサイズを付加できなかった場合に、送信されるパケットのサイズをパケット自体に付加する機能を有する。2つまでの装置が、XCaliberに(装置ごとに10Gbps)でパケットデータを送信することができ、2つのインポートが、接続されたASICから図示されている。特定のASICの存在および使用が、例示的であり、パケットを、他の装置から受信できることを理解されたい。さらに、いくつかの実施形態で、図示された2つのインポートより多数またはより少数のポートを設けることができる。
【0049】
パケットメモリマネージャユニット(PMMU)209は、各着信パケットをオンチップローカルパケットメモリ(LPM)219に保管しなければならないかどうかを決定するか、たとえばLPMにそれを保管する余地が存在しない場合に、SIUブロックを介して、図示されていない外部パケットメモリ(EPM)にパケットを送り出すかパケットをドロップすることを決定することができる。パケットをLPMに保管する場合には、PMMUは、パケットを保管する位置を決定し、それを行うのに必要なすべてのアドレスを生成する。生成されるアドレスは、好ましい実施形態では、LPM内の16バイトラインに対応し、パケットが、このメモリ内に連続して保管される。
【0050】
PMMUが着信パケットをドロップしない(最もありそうな)場合に、パケット識別子が作成され、このパケット識別子には、パケットが保管され始めたパケットメモリ内の固定サイズページへのポインタ(packetPageと称する)が含まれる。識別子は、作成され、キューイングシステム(QS)ブロック211にエンキューされる。QSは、0から255までの番号(packetNumberと称する)を、新しいパケットのそれぞれに割り当てる。QSは、パケットの優先順位に基づいて、XCaliber内で生きているパケットの識別子をソートし、SPUコアがパケットの状況に対する変更を通知する時に、ソーティングを更新する。QSは、次にSPUに供給されるパケット識別子を選択する。やはり、QSは、本発明の特定の焦点である。
【0051】
レジスタ転送ユニット(RTU)ブロック227は、QSからパケット識別子(packetPageおよびpacketNumber)を受け取る時に、好ましい実施形態のXCaliberが特徴とする8つのコンテキストの中から、使用可能なコンテキスト(229、図2)を検索する。アーキテクチャおよび説明の目的から、コンテキストは、図2では別のユニット229として図示されているが、より広義のストリーム処理ユニットの一部とみなされる。
【0052】
使用可能なコンテキストがない場合には、RTUは、1組の割込みを介してSPUにこのイベントについて通知する能力を有する。コンテキストが使用可能である場合には、RTUは、パケット識別子情報とパケットのヘッダの選択されたフィールドとをコンテキストにロードし、その後、コンテキストを解放する(これは、その時点でSPUの制御下に来る。RTUは、SIUを介してパケットのヘッダ情報にアクセスする。というのは、パケットが、オフチップEPMに保管されている可能性があるからである。
【0053】
結局、SPUコア内のストリームが、コンテキストを処理し、この事実についてQSに通知する。好ましい実施形態では、DMSコア内に8つのストリームがある。その後、QSは、パケットの状況を(完了に)更新し、結局、このパケットが、ダウンロードのために選択される(すなわち、対応するパケットのパケットデータが、XCaliberプロセッサから2つの外部装置の1つに送り出される)。
【0054】
パケットが、ダウンロードのために選択される時に、QSは、packetPage(他の情報の中でも)をPMMUブロックに送り、PMMUブロックは、対応するラインアドレスを生成して、LPMからパケットデータを読み取るか(パケットがオンチップローカルメモリに保管された場合)、SIUに外部パケットメモリからPMUにパケットを移動するように指示する。どの場合でも、読み取られたパケットデータのラインが、アウトバッファ(OB)ブロックにバッファリングされ、そこから、16バイトネットワーク出力インターフェースを介して装置に送り出される。このインターフェースは、出力の相対物と独立である。好ましい実施形態のこのインターフェースの最大集計帯域幅も、出力装置ごとに10Gbpsの20Gbpsである。
【0055】
コマンドユニット(CU)213は、SPU105によって送られたコマンドを受け取る。コマンドは、多くの場合に新たに定義された命令である、SPUコアによってディスパッチされたパケット命令である。これらのコマンドは、3つの独立のタイプに分類され、PMUは、サイクルごとにタイプごとに1つのコマンド(合計3コマンド毎サイクルまで)を実行することができる。コマンドは、ロード様またはストア様とすることができる(PMUがSPUへの応答を提供するか否かに依存する)。
【0056】
PMUの多数の特徴が、メモリマップされた構成レジスタ221を介して、SPUによって構成される。そのような特徴の一部は、ブート時にプログラムされなければならず、残りは、動的に変更することができる。後者の一部について、SPUは、特徴の機能性を正しくプログラムするために、単一スレッドモードで動作していなければならない。CUブロックは、これらの構成レジスタの更新を管理する。
【0057】
PMUは、ASIC203とXCaliber DMSプロセッサ201の間のフロー制御を助ける機構を提供する。LPM219またはQS211が満杯になろうとしている時に、2つの異なる割込みが、SPU105に対してPMUによって生成される。ソフトウェアによって、対応する構造が完全に満杯になる前に、前もって何回の割込みが生成されるかが制御される。ソフトウェアは、これらの割込みの生成をディスエーブルすることもできる。
【0058】
LPM219も、メモリマップ式であり、SPU105は、従来のロード/ストア機構を介してこれにアクセスすることができる。構成レジスタ221とLPM219の両方が、SIU107によって保たれる開始アドレス(ベースアドレス)を有する。SPU105からのLPM219および構成スペースに対する要求は、SIUブロック107を介してPMUに到達する。SIUは、外部パケットメモリのベースアドレスも知っている。
【0059】
インバッファ(IB)
外部装置によって送られたパケットデータは、ネットワーク入力インターフェース205を介して、好ましい実施形態ではXCaliberコアサイクルごとに8バイトの平均速度でPMUに到着する。PMUのIBブロック207が、このデータを受け取り、バッファリングし、FIFO様の形でLPM219に供給し、いくつかの場合に、SIUにも供給する(本明細書の別の個所で説明する、パケットオーバーフローの場合に)。
【0060】
XCaliber DMSプロセッサ201は、潜在的に、2つまでの独立の装置との間でパケットデータを送信/受信することができる。各装置は、パケットデータと共に供給される装置識別子を用いてSIU107でタグを付けられる。1つの装置がパケットからのデータの送信を開始する時に、その装置は、パケットの終りに達するかバスエラーがSIUによって検出されるまで、その同一のパケットからのデータの送信を継続する。
【0061】
好ましい実施形態では、パケットの最初のバイトが、必ず、そのパケットの最初に送信される16バイトのバイト0から始まる。パケットの最初の2バイトによって、パケットのバイト単位のサイズ(最初の2バイトを含む)が指定される。これらの2バイトは、外部装置がそれを付加しなかった場合に、SIUによって必ず付加される。16バイトチャンクのバイトkが、有効なバイトである場合に、バイト0からk−1も、有効なバイトである。これを保証できるのは、パケットの最初のバイトが、必ずバイト0から始まるからである。パケットが、必ず16バイトチャンクのバイト0から始まり、パケットのサイズが前もって知られる(最初の2バイトで)ので、各バイトを検証するための有効ビットが不要であることに留意されたい。ネットワークインターフェースは、すべてのコアクロックで、16バイトチャンクに少なくとも1つの有効なバイトが含まれるかどうかを指定する制御ビットを供給する。
【0062】
ネットワーク入力インターフェースから受け取られた有効なデータは、バッファ207内で編成される。これは、8エントリのバッファであり、各エントリが、16バイトのデータと各チャンクに関連する制御ビットとを保持する。PMMU209は、各エントリの制御ビットを調べ、新しいパケットが開始されるのかどうか、または2つ(までの)アクティブパケットのどちらにデータが属するかを判定し、それ相応に動作する。
【0063】
IB207のエントリのそれぞれの16バイトチャンクは、LPM219内またはEPM(図示せず)内に保管される。LPMコントローラまたはSIUのいずれかによって、パケットメモリに書き込む帯域幅が、少なくとも着信パケットデータの帯域幅に一致することと、パケットメモリへの着信パケットデータの書込が、パケットメモリへの他のアクセスより高い優先順位を有することが保証される。
【0064】
いくつかの場合に、PMMU209がストールしたのでIB207が満杯になる可能性があり、したがって、LPMが、ストールが解決されるまでIBのデータをそれ以上消費しなくなる。IBが満杯になった時には、必ず、信号がネットワーク入力インターフェース205に送られ、ネットワーク入力インターフェース205は、IBが受け入れるまで、必要な回数だけ次の16バイトチャンクを再送出する。したがって、IBが満杯になることに起因して失われるパケットデータはない。
【0065】
アウトバッファ(OB)
ネットワーク出力インターフェース215も、入力インターフェースと同様に、20Gbps(出力装置ごとに10Gbps)の総集計帯域幅をサポートする。300MHzのXCaliberクロック周波数で、ネットワーク出力インターフェースは、OBブロックから、すべてのXCaliberサイクルに平均8バイトのデータを受け入れ、2つの出力装置の1つにそれを送る。ネットワーク入力インターフェースおよびネットワーク出力インターフェースは、互いに完全に独立である。
【0066】
2つまでのパケット(出力装置ごとに1つ)を、同時に送ることができる。パケットが送られる装置は、パケットを送る装置に対応する必要がない。送出されるパケットデータは、LPM219またはEPM(図示せず)のいずれかから来る。
【0067】
ネットワークアウトインターフェース215で接続された2つの出力装置のそれぞれについて、PMMU209は、ダウンロードされ始める準備ができたパケットまたはダウンロード中のパケットを有するか、ダウンロードすべきパケットを有しないことができる。すべてのサイクルに、PMMU209は、両方の出力装置にまたがって最高のパケットを選択し、そのパケットに関する16バイトのデータのダウンロードを開始する。PMMUが、パケットから出力装置にパケットデータをダウンロードしている時には、必ず、現在のパケットが完全にダウンロードされるまで、異なるパケットからのデータが、同一の装置にダウンロードされない。
【0068】
LPM219から読み取られた(関連する制御情報と共に)パケットデータの16バイトチャンクは、2つの8エントリバッファ(装置識別子ごとに1つ)の1つに供給される。これらのバッファの1つの先頭の内容は、ネットワーク出力インターフェースがそれを要求する時に、必ずネットワーク出力インターフェースに供給される。両方のバッファの先頭が有効である時には、OBが、ラウンドロビン式にデータを供給する。
【0069】
ネットワーク入力インターフェースと異なって、ネットワーク出力インターフェースに送られる16ビットチャンク内では、バイトkが有効である場合に、バイト0からk−1も有効であることを保証できない。この理由は、パケットが送出される時に、メモリ内の16バイトチャンクのバイト0から開始する必要がないからである。したがって、送出されるパケットの先頭を含むデータの16バイトチャンクのそれぞれについて、OB217は、チャンクの第1の有効なバイトがどこに存在するかをネットワークインターフェースに通知する必要がある。さらに、パケットの最初の2バイトにバイト単位のパケットのサイズが含まれるので、ネットワーク出力インターフェースは、そのパケットの最後の16バイトチャンクのデータ内にあるパケットの最後の有効なバイトを見つけるための情報を有する。さらに、OB217は、SIU107に、それがパケットのCRCを計算する必要があるかどうかと、必要な場合にCRCのタイプを知らせる制御ビットも供給する。この制御ビットは、PMMU209によってOB217に供給される。
【0070】
ページングメモリ管理ユニット(PMMU)
パケットメモリアドレススペースは、16MBである。16MBのうちで、XCaliberプロセッサは、256KBオンチップを特徴とする。残り(または一部)は、外部ストレージを使用して実装される。
【0071】
パケットメモリアドレススペースは、SPU105のTLB内で、ユーザスペースまたはカーネルスペースとして、かつ、キャッシュ可能またはキャッシュ不能としてマッピングすることができる。キャッシュ可能としてマッピングされる場合に、パケットメモリスペースは、SPU105のL1データキャッシュにキャッシュ(ライトスルー)されるが、L2キャッシュにはキャッシュされない。
【0072】
PMMU209の目標は、着信パケット(およびSPUが生成したパケットも)をパケットメモリに保管することである。ネットワーク入力インターフェースからのパケットがLPM219におさまる場合に、PMMU209は、それを保管する場所を決定し、LPM219への必要な書込アクセスを生成するが、ネットワーク入力インターフェースからのパケットがEPMに保管されようとしている場合には、SPU105は、EPM内のどこにパケットを保管する必要があるかを判定し、SIU107が、パケットの保管を担当する。どちらの場合でも、パケットは、連続的に保管され、パケット識別子が、PMMU209によって作成され、QS211に送られる。
【0073】
SPU105は、所与のサイズより大きいパケットが絶対にLPMに保管されないように、LPM219を構成することができる。そのようなパケットならびに、余地がないのでLPMにおさまらないパケットは、PMMU209によって、SIU107を介してEPMに送られる。これは、オーバーフローと呼ばれる機構であり、PMUがそれを行うようにSPUによって構成される。パケットのオーバーフローが許容されない場合には、パケットがドロップされる。この場合には、PMMU209が、SPUに割り込む(やはり、そうするように構成されている場合)。
【0074】
パケットメモリへのパケットのアップロード
IB205の先頭に有効なデータがある時には、必ず、対応する装置識別子ビットを使用して、データがどのパケット(受け取られる2つの可能なパケットのうちの)に属するかを判定する。ネットワーク入力インターフェースが、装置識別子dと共に新しいパケットのデータの送出を開始する時に、データの残りのすべてが、エラーがネットワークインターフェースブロックによって識別されないかぎり、結局、同一の装置識別子dと共に到着する。ネットワーク入力インターフェースは、2つの異なる装置識別子からのデータをインターリーブすることができるが、所与のサイクル内には、1つの装置からのデータだけがIB207によって受け取られる。
【0075】
パケットをLPM219に保管する必要がある時には、PMMU209が、LPM219に対するすべての書込アドレスおよび書込ストローブを生成する。パケットをEPMに保管する必要がある場合には、SIU107がそれらを生成する。
【0076】
図3は、LPM219または、図3で要素305として示されているが図2に図示されていないEPMのいずれかへのデータのアップロードを示す図である。LPMまたはEPMへの書込ストローブは、IBのヘッダが有効なデータを有しない場合には生成されない。書込ストローブが生成される時には、必ず、IBの先頭のデータの16バイトチャンク(LMPラインに対応する)が、IBから削除され、LPMまたはEPMに保管される。IBの先頭の装置識別子ビットは、2つのアドレスジェネレータ(入力装置ごとに1つ)から正しい書込アドレスを選択するのに使用される。
【0077】
現在の実施形態では、1つの着信パケットだけを、SIUによってEPMに同時に保管することができる(すなわち、1時に1つのオーバーフローパケットだけを、SIUによって処理することができる)。したがって、オーバーフローを必要とする第2のパケットがネットワーク入力インターフェースによって送られる場合に、このパケットのデータは、捨てられる(すなわち、パケットがドロップされる)。
【0078】
2バイトパケットサイズヘッダ
ネットワーク入力インターフェースは、必ず、外部装置から受信したパケットに2バイトを付加する(この外部装置がまだそれを行っていない場合。そうでない場合には、SIUが、それらを付加しないようにプログラムされる)。この付加されたデータは、2つの付加されたバイトを含む、パケット全体のバイト単位のサイズを示す。したがって、XCaliber DMSプロセッサによって処理されるパケットの最大サイズは、最初の2バイトを含めて65535バイトである。
【0079】
ネットワーク出力インターフェースは、パケットがPMUによって返される時に(その処理中にドロップされなかった場合)、最初の2バイトが、やはり処理されたパケットのサイズを示すことを期待する。元のパケットのサイズが、XCaliberプロセッサによって実行される処理の結果として変更される可能性がある(パケットが増大または縮小する可能性がある)。したがって、処理が64K−1バイトを超えるサイズの増加をもたらす場合には、そのパケットを2つの異なるより小さいパケットに分割することが、ソフトウェアの責任になる。
【0080】
PMUは、受け取られるパケットの優先順位が前もってわかっている時に、より効率的である。外部装置が優先順位情報をPMUに提供できる場合に、パケットの第3バイトが、優先順位のために使用される。ソフトウェアは、PMUを、このバイトの情報を使用するか否かについてプログラムし、これは、Log2InQueuesと称するブート時構成レジスタを介して行われる。
【0081】
パケットのドロップ
LPM219またはEPM305のいずれかに完全に保管されたパケットは、SPU105が、それをドロップするコマンドを明示的にPMUに送った場合に限ってドロップされる。パケットメモリに既に保管されているパケットの自動的なドロップは、行うことができない。言い換えると、XCaliber DMSプロセッサによって受け取られたパケットのドロップアルゴリズムは、すべて、ソフトウェアで実装される。
【0082】
しかし、PMUが着信パケットをドロップする可能性がある、いくつかの情況が存在する。(a)パケットがLPMにおさまらず、パケットのオーバーフローがディスエーブルされている、(b)パケットに関する受け取られたバイトの総数が、ASIC固有ヘッダの最初の2バイトでASICによって指定されたバイト数と同一でない、または(c)外部装置とSIUのネットワーク入力インターフェースブロックの間で送信エラーが発生した場合がある。PMMUブロックは、そのようなエラーについて通知される。
【0083】
上のケース(a)、(b)、および(c)のそれぞれについて、SPUへの割込みが生成される。ソフトウェアは、AutomaticPacketDropIntEnable、PacketErrorIntEnableオンザフライ構成フラグを使用して、これらの割込みの生成をディスエーブルすることができる。
【0084】
仮想ページ
PMMU209の重要な処理が、メモリ断片化をできる限り少なくして、パケットをLPM219に連続的に保管する効率的な方法を提供することである。好ましい実施形態のアーキテクチャでは、SPU105に、LPM219の同一の領域内で類似するサイズのパケットをできる限りグループ化する機能が与えられる。これによって、総合的なメモリ断片化が減る。
【0085】
低断片化特徴を実装するために、LPM219が、それぞれ64KBの4つのブロックに論理的に分割される。各ブロックは、256バイトの固定されたアトミックページに分割される。しかし、すべてのブロックが、2のべきの増分での256バイトから64KBまで範囲の仮想ページを有する。ソフトウェアは、VirtualPageEnableと称するオンザフライ構成レジスタを使用して、4つのブロックのそれぞれについて仮想ページの異なるサイズをイネーブル/ディスエーブルすることができる。これによって、いくつかのブロックを、あるサイズまでのパケットを保管するように構成することができるようになる。
【0086】
PMUの編成および特徴は、サイズsのパケットが、s未満の最大仮想ページサイズを有するブロックに絶対に保管されないことを保証する。しかし、rの最小仮想ページサイズを有するブロックは、rより小さいサイズのパケットを受け入れる。これは、通常は、たとえば、1つまたは複数の他のブロックがより小さいパケットを保管するように構成されているが、満杯である場合に、そうなる。
【0087】
ソフトウェアは、LPMの4つのブロックのどれであっても所有権を得ることができ、これは、対応する64KBのメモリが、ソフトウェア管理になることを意味する。このために、ブロックごとに構成フラグ(SoftwareOwned)が存在する。PMMUブロックは、関連するSoftwareOwnedフラグがアサートされているLPMのブロックには、ネットワーク入力インターフェースからの着信パケットを保管しない。同様に、PMMUは、SoftwareOwnedフラグがアサートされているブロックのメモリについて、GetSpace動作(他所で説明する)を満足しない。しかし、PMMUは、ソフトウェア所有ブロックにソフトウェアによって保管されたパケットを、どれでもダウンロードすることができる。
【0088】
PMMU論理は、着信パケットがLPMのブロックのどれかにおさまるかどうかを判定する。パケットがおさまる場合に、PMMUは、4つのブロックのどれにおさまるかを判定し(パケットが複数のブロックにおさまる可能性があるので)、選択されたブロック内でパケットが使用する最初および最後のアトミックページを判定する。アトミックページが、着信パケットのために割り振られる。アトミックページに保管されるパケットデータが、ネットワーク出力インターフェースを介してXCaliberプロセッサから安全に送出された時に、LPM内の対応するスペースを割振り解除する(すなわち、他の着信パケットに使用可能にする)ことができる。
【0089】
EPMは、LPNと同様に、256バイトのアトミックページに論理的に分割される。しかし、PMMUは、これらのページの割振り状況を維持しない。これらのページの割振り状況は、ソフトウェアによって管理される。どのパケットを保存するかに無関係に、PMMUは、パケットの最初のデータが保管される位置の、パケットメモリ内のオフセット(アトミックページ単位)を生成する。このオフセットを、今後、packetPageと呼ぶ。パケットメモリの最大サイズは16MBなので、packetPageは16ビット値である。
【0090】
PMMUが、パケットをLPM内に安全に保管するか、パケットの最後のバイトがEPMに安全に保管されたことの肯定応答をSIU107から受け取るや否や、そのパケットのために作成されたpacketPageが、QSに送られる。QSの動作は、下の権能を付与する詳細で説明する。
【0091】
packetPageオフセットの生成
PMMUは、IBの先頭のパケットデータに関連する装置識別子(deviceId)を常に監視する。deviceIdが現在アクティブでない(すなわち、そのdeviceIdによって送信された前のパケットが完全に受信済みである)場合に、これは、IBの先頭に新しいパケットの最初のデータが含まれることを示す。この場合には、最初の2バイト(16バイトチャンクのバイト0およびバイト1)によって、バイト単位のパケットのサイズが指定される。新しい着信パケットのサイズの情報を用いて、PMMUは、そのパケットがLPM219におさまるかどうかを判定し、そうである場合には、それが4つのブロックのどれに保管されるかと、そのブロック内の開始アトミックページおよび終了アトミックページを判定する。
【0092】
パケットがLPM219におさまるかどうかを判定し、その場合にどのアトミックページが必要であるかを判定する、PMMUの現在の実施形態での必要なスループットは、2サイクルごとに1パケットである。1つの可能な2サイクル実装は、次のようになる:(a)判定が1サイクルで行われ、1時に1つの判定だけが行われ、(b)判定の次のサイクルに、パケットを保管するのに必要なアトミックページが、割り振られ、仮想ページの新しい状態(割振り済み/割振り解除)を計算する。このサイクルでは、判定は許容されない。
【0093】
図4aは、ローカルパケットメモリに関する、並列の判定および割振りを示す図である。判定論理は、図示のように、4つの64KBブロックのすべてについて並列に実行される。
【0094】
図4bに、4つの64KBブロックのそれぞれについて維持される必要がある状態を示す。この状態は、AllocationMatrixと呼ばれ、1つまたは複数のアトミックページが割り振られるか割振り解除されるたびに再計算され、判定論理の入力である。FitsVectorおよびIndexVectorに、AllocationMatrixから計算される情報が含まれる。
【0095】
AllocationMatrix[VPSize][VPIndex]は、バイト単位のサイズVPSizeの仮想ページ番号VPIndexが既に割り振られているか否かを示す。FitsVector[VPSize]は、ブロックが、少なくとも1つの割り振られていないサイズVPSizeの仮想ページを有するかどうかを示す。FitsVector[VPSize]がアサートされている場合には、IndexVector[VPSize]ベクトルに、サイズVPSizeの割り振られていない仮想ページのインデックスが含まれる。
【0096】
SPUは、どの仮想ページサイズがイネーブルされているかをブロックのそれぞれについてプログラムする。EnableVector[VPSize]にこの情報が含まれる。この構成は、VirtualPageEnableオンザフライ構成レジスタを使用して実行される。対応するSoftwareOwnedフラグがアサートされている場合に、AllocationMatrix[][]、FitsVector[]、IndexVector[]、およびEnableVector[]が、ドントケアであることに留意されたい。
【0097】
この例では、判定論理のアルゴリズム(サイズsバイトのパケットに関する)が、次のようになる。
【0098】
1)Fits論理:ブロックのそれぞれについて、パケットがおさまるか否かを検査する。おさまる場合に、仮想ページサイズと、そのサイズの最初の仮想ページの番号を記憶する。
【数1】
Figure 0003801919
【0099】
2)ブロック選択:パケットをおさめることができる最小の仮想ページ(イネーブルされていてもいなくても)を有するブロックが候補である。最小のイネーブルされた仮想ページを有するブロックを選択する。
【数2】
Figure 0003801919
Figure 0003801919
【0100】
パケットがLPMにおさまる場合に、作成されるpacketPageは、パケットの最初のデータが保管されるLPM内のアトミックページの番号(LPM内には1K個までの異なるアトミックページがある)になる。パケットがおさまらない場合には、packetPageは、構成レジスタOverflowAddressの内容を右に8ビットシフトしたものになる。パケットオーバーフロー機構を、副題「パケットオーバーフロー」の下で、本明細書の他所で説明する。
【0101】
パケットをどこに保管するかの判定の次のサイクルに、選択されたブロックについて、AllocationMatrix、FitsVector、およびIndexVectorの新しい値を再計算しなければならない。FitsVector[VPSize]がアサートされる場合には、IndexVector[VPSize]が、対応する仮想ページサイズについて可能な最大の割り振られていない仮想ページのインデックスである。FitsVector[VPSize]がデアサートされる場合には、IndexVector[VPSize]は未定義である。
【0102】
パケットを保管するのに必要なアトミックページの数を計算し(NumAPs)、対応するアトミックページを割り振る。選択されたブロック(B)に関するアトミックページの割振りは、下記のように行われる。
【0103】
1.jが最初のアトミックページ、kが最後のアトミックページ(k−j+1=NumAPs)であるものとして、AllocationMatrix[APsize][j..k]内のアトミックページの割振り状況に、割振り済みをセットする。
【0104】
2.AllocationMatrix[r][s]の仮想ページの割振り状況を、図4bのメッシュ構造に従って更新する。(2k+1バイト仮想ページを構成する2つの2バイト仮想ページのいずれかが割り振られる場合に、2k+1バイト仮想ページが割り振られる)。
【0105】
packetPageが生成された時に、そのpacketPageが、エンキューのためにQSに送られる。QSは、満杯の場合(非常にまれ)に、PMMUによって供給されるpacketPageを受け入れることができない。この場合には、PMMUは、次の新しいパケットのために新しいpacketPageを生成することができなくなる。これがIBに圧力をかけ、IBは、QSが複数サイクルにわたって満杯のままである場合に満杯になる可能性がある。
【0106】
PMMUブロックは、QSがpacketPageを保管しなければならないキュー番号も送る。PMMUがこのキュー番号を生成する方法は、下で特にQSに割り当てられた節で説明する。
【0107】
ページ割振りの例
図5aおよび5bに、アトミックページを割り振る方法の例を示す。簡単にするために、この例では、それぞれ2KBの2つのブロック(0および1)があり、アトミックページサイズが256バイトであり、両方のブロックがSoftwareOwnedフラグをデアサートされていると仮定する。単一および二重の斜線区域は、割り振られた仮想ページを表す(単一の斜線のページは、現在のサイクルで割り振られるページに対応する)。この例では、256バイト、512バイト、1Kバイト、および512バイトのパケットサイズのシーケンスについて、ページがどのように割り振られるかを示す。このシーケンスの後に、たとえば2Kバイトパケットが、この例のLPMにおさまらないことに留意されたい。
【0108】
FitsVector[VPSize]がアサートされる時には、必ず、IndexVector[VPSize]に、仮想ページサイズVPSizeの最大の割り振られていない仮想ページインデックスが含まれる。最大のインデックスを選択する理由は、メモリスペースがよりよく利用されるからである。これを、図6aおよび6bに示すが、この図では、2つの256バイトパケットが、1ブロックに保管されている。シナリオAでは、256バイト仮想ページが、ランダムに選択されるが、シナリオBでは、最大のインデックスが必ず選択される。図からわかるように、シナリオAのブロックでは、2つの512バイト仮想ページだけが許容されるが、シナリオBのブロックでは、3つが許容される。しかし、両方が、同数の256バイトパケットを許容するが、これは、このサイズが最小の割振り単位であるからである。常に最小の仮想ページインデックス番号を選択することによって、同一の効果が得られることに留意されたい。
【0109】
パケットオーバーフロー
パケットをLPMに保管できない理由は、次の2つだけである。(a)パケットのサイズが、4つのすべてのブロックにまたがってイネーブルされた最大の仮想ページより大きい、または(b)パケットのサイズが、イネーブルされた最大仮想ページ以下であるが、LPM内で余地を見つけることができない。
【0110】
パケットがLPMにおさまらない時には、PMMUが、SIUを介してEPMにパケットをオーバーフローさせる。それを行うために、PMMUは、パケットが保管される初期アドレスをSIUに供給する(パケットメモリ内の16バイトオフセット)。この20ビットアドレスは、次のようにして得られる。(a)16MSBビットは、OverflowAddress構成レジスタの16MSBビットに対応する(すなわち、パケットメモリ内のアトミックページ番号)。(b)4LSBビットは、HeaderGrowthOffset構成レジスタに対応する。このオーバーフローされるパケットのpacketPage値(QSに送られる)は、OverflowAddress構成レジスタの16MSBビットである。
【0111】
オンザフライ構成フラグOverflowEnableがアサートされている場合に、PMMUは、OverflowStartedInt割込みを生成する。OverflowStartedInt割込みが生成される時に、オーバーフローされるパケットのバイト単位のサイズが、PMMUによって、SPU読取専用構成レジスタSizeOfOverflowedPacketに書き込まれる。この時点で、PMMUは、新しいパケットのオーバーフローを防ぐ内部ロックフラグをセットする。このロックフラグは、ソフトウェアがオンザフライ構成レジスタOverflowAddressに書き込む時にリセットされる。パケットのオーバーフローが必要であるが、ロックフラグがセットされている場合には、そのパケットがドロップされる。
【0112】
この機構を用いて、オーバーフローされるパケットごとに1つの割込みだけが生成され、サービスされることが保証される。これによって、オーバーフローされる次のパケットが保管される開始アドレスが、SizeOfOverflowedPacketレジスタを介して割り込みサービスルーチンに可視になる場所をソフトウェアが決定するためのプラットフォームも作られる。言い換えると、ソフトウェアがEPMを管理する。
【0113】
ソフトウェアが、2つのOverflowStartedInt割込みの間にOverflowAddressを複数回書き込む場合には、その結果は未定義である。さらに、ソフトウェアが、OverflowAddressの16MSBビットに0から1023をセットする場合に、パケットメモリ内の最初の1KアトミックページがLPMに対応するので、その結果も未定義である。
【0114】
パケットメモリからのパケットのダウンロード
結局、SPUは、パケットの処理を完了し、その事実をQSに知らせる。この時点で、パケットを、LPMまたはEPMのいずれかのメモリからダウンロードし、OBを介して、接続された装置の1つに送信することができる。図7は、パケットのダウンロードに使用されるXCaliber DMSプロセッサのブロックの最上位の概略であり、図7の要素は、図2と同一の符号を付されている。ダウンロード処理は、以下の説明の助けを得て図7で追跡することができる。
【0115】
QS211が、パケットの処理が完了したことを知らされた時に、QSは、このパケットを完了としてマークし、数サイクル後(パケットの優先順位に依存する)に、QSが、パケットに関する下記の情報をPMMU209に供給する(PMMUがそれを要求する限り)。
(a)packetPage
(b)優先順位(それが抽出された元のクラスタ番号)
(c)末尾増大/縮小情報(本明細書で後で説明する)
(d)アウトバウンド装置識別子ビット
(e)CRCタイプフィールド(本明細書で後で説明する)
(f)KeepSpaceビット
【0116】
PMMUブロック209に送られる装置識別子は、パケットが送信される外部装置を指定する1ビット値である。このアウトバウンド装置識別子は、ソフトウェアによって、2ビット値としてQS211に供給される。
【0117】
パケットがLPM219に保管された場合には、PMMU209が、LPM219への(16ビットライン)読取アドレスおよび読取ストローブのすべてを生成する。読取アドレスが計算され、LPM219から読み取られるラインをバッファリングするのに十分な余地がOB217にあると、すぐに、読取ストローブが生成される。OB内のバッファdが、装置識別子dに関連付けられる。このバッファは、2つの理由すなわち、(a)外部装置dが、一時的にXCaliberからのデータを受け入れないか、(b)OBからの読取データの速度が、それに書き込まれるデータの速度より低いのいずれかである場合に、満杯になる可能性がある。
【0118】
アトミックページ内のパケットデータが、すべてダウンロードされ、OBに送られると、すぐに、そのアトミックページを割振り解除することができる。1つまたは複数のアトミックページの割振り解除は、上で説明したものと同一の手順に従う。しかし、LPMビットがデアサートされている場合には、アトミックページの割振り解除は行われない。パケットがEPM701にある場合には、KeepSpaceビットがドントケアになる。
【0119】
パケットがEPM701に保管された場合には、PMMU209は、パケットの最初のバイトがあるEPM内のアドレスをSIU107に供給する。SIUは、EPMからのパケットのダウンロードを実行する。SIUは、OB217内の対応するバッファ内のバッファスペースも監視して、EPM701から読み取られる16バイトチャンクを書き込む余地があるかどうかを判定する。パケットが完全にダウンロードされた時に、SIUは、その事実についてPMMUに知らせ、その結果、PMMUが、同一の装置識別子を有する次のパケットをダウンロードできるようにする。
【0120】
2つのパケット(装置ごとに1つ)が、同時に送信されている時に、最高優先順位のパケットからのデータが、まずメモリから読み出される。このプリエンプションは、16バイト境界で、またはパケットがその伝送を終了した時に、発生する可能性がある。両方のパケットが同一の優先順位(QSによって供給される)を有する場合には、ラウンドロビン法を使用して、データを次にダウンロードされるパケットを選択する。この選択論理では、OB内の2つのバッファがどれほど満杯であるかも考慮に入れる。たとえばバッファdが満杯である場合に、装置識別子dを有するパケットは、データの次の16バイトチャンクのダウンロードのためにPMMU内で選択されなくなる。
【0121】
パケットが、パケットメモリ(ローカルまたは外部)からのダウンロードを開始される時に、PMMUは、パケットの最初の有効なバイトがどこに存在するかを知っている。しかし、パケットのサイズは、パケットデータの最初のライン(または、いくつかの場合に最初の2ライン)がパケットメモリから読み取られるまで未知である。というのは、パケットのサイズが、パケットデータの最初の2バイトに含まれるからである。したがって、パケットのダウンロードの処理では、まず、パケットのサイズを判定するのに必要なラインアドレスを生成し、その後、必要な場合に、アクセスの残りを生成する。
【0122】
この論理では、パケットのサイズを指定する最初の2バイトが、データの16バイトライン内のどの位置にも存在する可能性があることを考慮に入れる。特定のケースが、最初の2バイトが2つの連続するラインにまたがる時である(これは、最初のバイトがラインの第16バイトであり、第2バイトが次のラインの第1バイトである時に発生する。
【0123】
PMMUが、パケットのダウンロードを終了する(パケットのすべてのデータがパケットメモリから読み取られ、OBに送られた)とすぐに、PMMUが、このイベントについてQSに通知する。QSは、対応するパケットをそのキューイングシステムから無効化する。
【0124】
パケットのダウンロードが開始される時に、パケットを先取りすることができない、すなわち、パケットが、その送信を終了する。同一のアウトバウンド装置識別子を有する、ダウンロードの準備ができた他のパケットは、前のパケットが送信されつつある間は、前のパケットが完全に送信されるまで送信することができない。
【0125】
パケットの増大/縮小
パケットの処理の結果として、ネットワークパケットのサイズが、増大、縮小、または同一サイズにとどまる可能性がある。サイズが変化する場合には、SPUが、パケットの同一の最初の2バイトにパケットの新しいサイズを書き込まなければならない。パケットの増大および縮小の現象を、図8に示す。
【0126】
パケットのヘッダと末尾の両方が、増大または縮小することができる。パケットが増大する時に、追加されるデータによって、ヘッダ増大を経験するパケットの直前に保管されていた可能性がある別のパケットまたは末尾増大の場合には真後に保管された別のパケットのデータが上書きされる可能性がある。この問題を避けるために、パケットがパケットメモリに保管される時に、すべてのパケットの前後に空のスペースが割り振られるようにPMUを構成することができる。これらの空のスペースは、それぞれHeaderGrowthOffsetおよびTailGrowthOffsetというブート時構成レジスタを用いて指定され、これらのレジスタの粒度は、16バイトである。最大のHeaderGrowthOffsetは240バイト(15個の16バイトチャンク)であり、最大のTailGrowthOffsetは、1008バイト(63個の16バイトチャンク)である。どちらの場合でも、最小値は0バイトである。これらの増大オフセットが、すべての着信パケットに適用される、すなわち、異なる増大オフセットを異なるパケットに適用する機構がないことに留意されたい。
【0127】
PMMUは、LPM内のスペースを検索する時に、Size(packet)+((HeaderGrowthOffset+TailGrowthOffset)<<4)の連続したスペースを探す。したがって、パケットの最初のバイト(ASIC固有ヘッダの最初のバイト)は、実際には、パケットメモリ内のオフセット((packetPage<<8)+(HeaderGrowthOffset<<4))から始まる。
【0128】
ソフトウェアは、デフォルトオフセットがいくつであるかを知っており、したがって、パケットが先頭と末尾の両方でどれだけ安全に増大できるかを知っている。パケットが最大オフセットを超えて増大する必要がある場合には、ソフトウェアは、パケットメモリ内の新しい位置にパケットを明示的に移動しなければならない。これを行うステップは、次の通りである。
【0129】
1)ソフトウェアが、PMUに、新しいサイズの連続したスペースのチャンクを要求する。PMUは、この新しいスペースを識別する(ポイントする)新しいpacketPageを返す。
【0130】
2)ソフトウェアが、データを新しいメモリスペースに書き込む。
【0131】
3)ソフトウェアが、新しいpacketPageを用いて古いpacketPageの名前を変更する。
【0132】
4)ソフトウェアが、PMUに、古いpacketPageに関連付けられたスペースを割振り解除するように要求する。
【0133】
ヘッダ増大または縮小の場合に、パケットデータは、もはや((packetPage<<8)+(HeaderGrowthOffset<<4))から始まらない。新しい開始位置は、パケットの処理が完了した時にSPUによって実行される特殊な命令を用いてPMUに供給される。この情報が、QSブロックによってPMMUに供給される。
【0134】
タイムスタンプ
PMU(次の節で詳細に説明する)のQSブロックは、XCaliberプロセッサ内で処理中のパケットのpacketPage識別子をFIFO様キューに保存することによって、着信パケットの順序を保証する。しかし、ソフトウェアは、QSから明示的に識別子を抽出し、それらをキューのいずれかの末尾に挿入することによって、この順序付けを破ることができる。
【0135】
ソフトウェアがパケットの相対順序を保証するのを助けるために、PMMUブロックに到着するすべてのパケットにタイムスタンプを付けるように、オンザフライ構成フラグTimeStampEnabledを使用してPMUを構成することができる。タイムスタンプは、8バイト値であり、コアクロックサイクルごとに増分される64ビットカウンタから得られる。
【0136】
タイムスタンプ機能がオンである時には、PMMUが、各パケットの前に8バイトタイムスタンプ値を付加し、タイムスタンプは、パケットがネットワーク出力インターフェースに送られる時にはぎとられる。タイムスタンプ値は、必ず、パケットメモリの第(k−1)16バイトチャンクの8MSBバイトを占め、ここで、kは、パケットのデータが開始される16バイトラインオフセットである(k>0)。HeaderGrowthOffsetが0の場合には、タイムスタンプ値は、TimeStampEnabledがアサートされている場合であっても、付加されない。
【0137】
完全な64ビットタイムカウンタ値は、読取専用構成レジスタ(TimeCounter)を介してソフトウェアに供給される。
【0138】
PMMUでのソフトウェア動作
ソフトウェアは、PMMUにアクセスして、連続するスペースのチャンクを要求するか解放する。具体的に言うと、ソフトウェアがPMMMUに対して実行できる2つの動作がある。まず、ソフトウェアは、動作GetSpace(size)を介して、LPM内でsizeバイトの連続したスペースを見つけることを試みることができる。PMUは、見つかった連続するスペースが始まるアトミックページ番号(すなわちpacketPage)と、成功ビットを用いて応答する。PMUが、スペースを見つけることができた場合には、成功ビットに「1」がセットされ、そうでない場合には「0」がセットされる。SoftwareOwned構成ビットがアサートされているメモリのブロックについては、GetSpaceは満足されない。したがって、ソフトウェアは、ソフトウェア所有のLPMブロックのメモリスペースを明示的に管理する。
【0139】
PMMUは、要求されたスペースに必要なアトミックページを割り振る。着信パケットのアトミックページの割振りに使用されるビットの組EnableVectorは、GetSpace動作ではドントケアである。言い換えると、sizeバイトを含むのに十分な連続する割り振られていないアトミックページが、特定のブロックに存在する限り、GetSpace(size)動作は、そのブロック内のすべての仮想ページがディスエーブルされている場合であっても成功する。
【0140】
さらに、ソフトウェア所有でないブロックの中で、GetSpace動作は、まずその仮想ページのすべてをディスエーブルされているブロックを使用してサービスされる。そのようなブロックが複数存在する場合には、最も小さいブロック番号が選択される。sizeが0である場合には、GetSpace(size)は「0」を返す。
【0141】
ソフトウェアがPMMUに対して実行できる第2の動作が、FreeSpace(packetPage)である。この動作では、PMUが、前に割り振られたアトミックページ(packetPageで始まる)を割振り解除する。このスペースは、着信パケットの結果としてPMMUによって自動的に割り振られたものまたはGetSpaceコマンドの結果としてのいずれかであった可能性がある。FreeSpaceは、結果をソフトウェアに返さない。SoftwareOwnedビットをアサートされたブロックに対するFreeSpace動作は、無視される(何も行われず、結果がSPUに返されない)。
【0142】
ローカルパケットメモリ
図2および7の219に示されたローカルパケットメモリ(LPM)は、この実施形態では、256KBのサイズ、バイトイネーブルを伴う16バイトライン幅、2バンク(偶数/奇数)、バンクごとに1つの読取ポートと1つの書込ポートを有し、完全にパイプライン式であり、1サイクルの待ち時間を有する。
【0143】
パケット処理において、LPMは、PMMUおよびSIUの両方から読取要求および書込要求を受け取る。LPMコントローラが、PMMUからの要求が最高の優先順位を有することを保証する。PMMUは、別のパケットを書き込んでいる間に、多くとも1つのパケットを読み取る。LPMコントローラは、PMMUが、必ずLPMへの専用ポートを有することを保証する。
【0144】
悪意のあるソフトウェアが、PMMUによって書き込まれている/読み取られているものと同一のデータを読み取る/書き込むことができる。したがって、同一サイクル内の読取アクセスと書込アクセスが、異なる16バイトラインアドレスに対して実行されるという保証はない。
【0145】
LPMへの要求は、この例では、16バイトの単一アクセス(読取または書込のいずれか)として定義される。SIUは、マスクドロードまたはマスクドストアに関する複数の要求を生成するが、これは、本発明人が知っている新しい命令であり、少なくとも1つの別の特許申請書の主題である。したがって、マスクドロード/ストア動作は、最高優先順位のPMMUアクセスが同一のポートを必要とする場合に、これらの複数の要求の途中でストールされる可能性がある。
【0146】
PMMUが読み取るか書き込む時に、バイトイネーブル信号が、セットされていると仮定される(すなわち、ライン内の16バイトのすべてが、読み取られるか書き込まれる)。SIUが読取または書込を行う時には、バイトイネーブル信号が、意味を持ち、SIUによって供給される。
【0147】
SPUが、LPM内の単一のバイト/ワードを読み取る時に、SIUは、対応する16バイトラインを読み取り、所望のバイト/ワードの抽出および右寄せを実行する。SPUが、単一のバイト/ワードを書き込む時には、SIUが、正しい位置にそのバイト/ワードを有する16バイトラインと有効バイト信号を生成する。
【0148】
動作の間の優先順位付け
PMMUは、3つの異なるソース(IB、QS、およびソフトウェア)から、動作を実行する要求を3つまで受け取ることができる。たとえば、連続するスペースのチャンクに関する検索を実行する要求と、対応するアトミックページサイズを割り振る要求と、生成されたpacketPageを供給する要求が、IBおよび/またはソフトウェアから来る場合がある。所与のpacketPageに関連するアトミックページの割振り解除を実行する要求が、QSおよび/またはソフトウェアから来る場合もある。
【0149】
これらの動作の最初の動作が、2つを超えないサイクルを要することと、第2の動作が、1つを超えないサイクルを要することが必要である。PMMUは、1時に1つの動作だけを実行する。PMMUブロックは、最高から最低への順で、IB、QS、およびソフトウェアからの要求に優先順位を与える。
【0150】
早期満杯PMMU検出
PMUは、外部装置とXCaliberプロセッサの間のフロー制御を助ける機構を実施する。この機構の一部は、LPMが満杯になることの検出であり、この場合には、SPUに対するNoMorePagesOfXsizeInt割込みが生成される。EPMは、ソフトウェア制御であり、したがって、その状態は、PMMUハードウェアによって維持されない。
【0151】
ソフトウェアは、仮想ページサイズsを指定することによって、NoMorePagesOfXsizeInt割込みをイネーブルすることができる。PMMUは、そのサイズの使用可能な仮想ページが使用可能でない(すなわち、すべてのブロックについてFitsVector[s]がデアサートされている)ことを検出した時に、必ずこの割込みを生成する。選択された仮想ページサイズが大きいほど、割込みが早く生成される。仮想ページのサイズは、オンザフライ構成レジスタIntIfNoMoreThanXsizePages内の4ビット値(0:256バイト、1:512バイト、…、8:64KB)を用いて示される。この値が8を超える時には、割込みは絶対に生成されない。
【0152】
最小仮想ページサイズが選択される(256バイト)場合には、LPMが完全に満杯(すなわち、1バイトパケットであっても、これ以上パケットが受け入れられない)時に、NoMorePagesOfXsizeInt割込みが生成される。
【0153】
一般に、IntIfNoMoreThanXsizePagesがXである場合に、最も早く割込みが生成されるのは、ローカルパケットメモリが(100/2)%満杯の時である。アトミックページが256バイトなので、LPMが、3Kバイトのパケットデータで満杯になる可能性がある(パケットごとに3バイト、各パケットが1アトミックページを使用)ことに留意されたい。
【0154】
パケットサイズ不一致
PMMUは、何バイトがLPMまたはEPMにアップロードされているかを記憶する。このサイズが、最初の2バイトで指定されたサイズと異なる場合には、SPUに対するPacketErrorInt割込みが生成される。この場合に、不一致のパケットサイズを有するパケットは、ドロップされる(既に割り振られたアトミックページは、割振り解除され、packetPageは作成されない)。この場合には、AutomaticDropInt割込みは生成されない。実際のサイズが、最初の2バイトで指定されたサイズより大きい場合には、ASCIから受け取られつつある残りのパケットデータが、安全に破棄される。
【0155】
パケットサイズ不一致が、インバウンド装置識別子D(D=0、1)で検出された時には、同一の装置識別子から受け取られるそれ以降のパケットが、ソフトウェアがClearErrorD構成レジスタに(なんらかの値を)書き込むまで、ドロップされる。
【0156】
バスエラー回復
不完全なパケットデータが、外部バスエラーに起因して、PMUに到着するかPMUから出てゆく可能性がある。具体的に言うと、ネットワーク入力インターフェースが、送り込まれたデータの16バイトチャンクがバスエラーを有することを通知する場合があり、また、SIUが、EPMからダウンロードされたデータの16バイトチャンクがバスエラーを有することを通知する場合がある。どちらの場合でも、PMMUは、PacketErrorInt割込みを生成して、このイベントについてSPUに通知する。他の情報は、SPUには供給されない。
【0157】
エラーがLPM内で生成される場合には、このオンチップメモリ内でエラー検出機構が実装されていないので、そのエラーが検出されないことに留意されたい。バスエラーが発生する時には、必ず、影響されたパケットのデータが、それ以上はPMUによって受け取られなくなる。これは、どちらの場合でもSIUによって行われる。第1の場合について、PMMUは、エラーイベントの前に受け取ったパケットデータのために使用された既に割り振られているアトミックページを割振り解除するだけでよい。
【0158】
バスエラーが、インバウンド装置識別子D(D=0、1)で検出される時には、同一の装置識別子から受け取られるそれ以降のパケットが、ソフトウェアがClearErrorD(D=0、1)構成レジスタに(なんらかの値を)書き込むまでドロップされる。
【0159】
キューイングシステム(QS)
XCaliberプロセッサのPMU内のキューイングシステム(QS)は、現在XCaliberプロセッサ内で処理中のパケットのパケット識別子およびパケットの状態を保持する機能、デフォルトまたはソフトウェア供給の優先順位によってパケットをソートされた状態に保つ機能、使用可能なコンテキストの1つにプリロードされる必要がある(バックグラウンドで)パケットを選択する機能、および外部装置への送出の準備ができた処理済みパケットを選択する機能を有する。
【0160】
図9は、QSと、PMUおよびSPU内の他のブロックとの間の高水準通信を示すブロック図である。PMMUが、packetPageを作成する時に、そのpacketPageが、キュー番号および装置識別子と共にQSに送られる。QSは、そのpacketPageを対応するキューにエンキューし、そのパケットに番号(packetNumber)を関連付ける。結局、パケットが、選択され、RTUに供給され、RTUは、packetPage、packetNumberおよびパケットヘッダの選択されたフィールドを、使用可能なコンテキストにロードする。結局、SPUが、そのコンテキストを処理し、他の情報の中でも、パケットの処理が完了するかパケットがドロップされた時を、PMUに通信する。この通信に関して、SPUは、パケット識別子としてpacketNumberを供給する。QSは、完了(最初のケースで)としてそのパケットをマークし、パケットは、結局、パケットメモリからのダウンロードのために選択される。
【0161】
同一のフロー(同一のソースおよび宛先)のパケットが、XCaliberプロセッサに到着したのと同一の順序で外部装置に送出される必要がある(ソフトウェアが明示的にこの順序付けを壊さない限り)ことが、この実施形態の要件である(非常に望ましい)。SPUがパケットの処理を開始する時には、フローは知られていない。フロー内のパケットの順序付けの記憶は、必要な処理の量に起因して、また、応用分野によってはアクティブフローの数が非常に大きくなる可能性があるので、コストの高いタスクである。したがって、フロー内の順序は、通常は、アグリゲーテッドフローキューを使用することによって記憶される。アグリゲーテッドフローキューでは、異なるフローからのパケット識別子が、順序付けのために同一のフローからのものとして扱われる。
【0162】
QSは、アグリゲーテッドフローキューの維持というコストの高いタスクを、ハードウェアでバックグラウンドで行うことによって、このタスクをオフロードする。現在の実施形態では、32個までのアグリゲーテッドフローキューを維持することができ、これらのキューのそれぞれが、暗黙の優先順位を有する。ソフトウェアは、32個までのキューのどれにでもpacketPageをエンキューすることができ、あるキューから別のキューへpacketPage識別子を移動することができる(たとえば、そのパケットの優先順位がソフトウェアによって発見された時に)。ソフトウェアは、必要な場合に、同一のフローに属するパケットのすべてのpacketPage識別子を同一のキューにエンキューすることが期待される。そうでなければ、パケットが、同一のフロー内で順序はずれで送出されるので、ネットワークの性能の低下が発生する可能性がある。ソフトウェアの介入なしで、QSは、フローごとの到着の順序を保証する。
【0163】
汎用キュー
QSは、32個までのFIFO様キューの組を実装し、これらのキューは、32キューの場合に、0から31までの番号が付けられる。各キューは、256個までのエントリを有することができる。しかし、すべてのキューのすべてのエントリの合計が、256を超えることはできない。したがって、キューサイズは動的である。キューエントリは、packetPage識別子と他の情報を合わせたものに対応する。したがって、256個までのパケットが、所与の時点でXCaliberプロセッサ内で処理中であることを許容される。この最大値は、ソフトウェアには不可視である。
【0164】
QSがpacketPageをエンキューする時には、必ず、0から255までの番号(packetNumber)が、packetPageに割り当てられる。この番号は、packetPageの値と共にソフトウェアに供給される。ソフトウェアは、QSに対する動作を実行したい時に、packetNumber識別子を供給する。この識別子は、QSによって、packetPage(および対応するパケットに関連する他の情報)をそのキューの中およびキューの間で突き止めるのに使用される。
【0165】
ソフトウェアは、XCaliberプロセッサ内のキューの最大の個数が32であることを知っている。キューは、使用されない限りディスエーブルされる。すなわち、ソフトウェアは、何個のキューが必要であるかを前もって判断する必要がない。キューは、少なくとも1つのパケットがそのキューに存在する時にイネーブルされる。
【0166】
異なるキューからの複数のパケット識別子が、実行される特定の動作の候補になることができる。したがって、動作が最初に適用されるパケット識別子を選択するための、優先順位付け機構が存在しなければならない。ソフトウェアは、「オンザフライ」構成レジスタPriorityClustersを使用して、キューの間での相対優先順位を(オンザフライで)構成することができる。これは、異なるキューをクラスタにグループ化する方法を指定する3ビット値である。各クラスタは、優先順位を関連付けられる(クラスタ番号が高いほど、優先順位が高い)。QSを構成することができる現在の実施形態での6つの異なるモードを、図10に示す。
【0167】
図10の最初の列は、「オンザフライ」構成レジスタPriorityClustersの値である。ソフトウェアは、この番号を制御し、それによってQS構成が定義される。たとえば、PriorityClusters=2の場合に、QSは、4つのクラスタに構成され、各クラスタに8つのキューがある。4つのクラスタの第1のクラスタが、キュー0から7を有し、第2のクラスタが、キュー8から15を有し、第3のクラスタが、16から23、4つのクラスタの最後のクラスタが、キュー24から31を有する。
【0168】
クラスタ内のキューは、ラウンドロビン式に公平に扱われる。クラスタは、厳密な優先順位式に扱われる。したがって、すべてのキューの枯渇がないことを保証する唯一のモードが、32個のキューの1つのクラスタを意味する、PriorityClustersが0である時である。
【0169】
QSへのpacketPage/deviceIdの挿入
図11は、この実施形態の、図2および7のQS211の包括的なアーキテクチャを示す図である。packetPageおよびDeviceIdの情報の挿入が、個々のキューに向かう矢印によって示されている(この例では32個のキュー)。この情報は、3つの可能なソースすなわち、PMMU、SPU、およびQSからの再挿入から挿入される可能性がある。複数のソースがQSへの挿入の準備ができているpacketPageを有する場合のための、機能要素1101によって示される優先順位論理がある。この実施形態では、優先順位は、優先順位の降順で、PMMU、QS、およびSPU(ソフトウェア)である。
【0170】
SPU(ソフトウェア)からのパケットの挿入に関して、ソフトウェアは、それ自体でパケットを作成することができる。それを行うために、ソフトウェアは、まず、所与のサイズの空きスペースの連続したチャンク(SPUドキュメンテーションを参照されたい)をPMUに要求し、PMUが、スペースが見つかった場合にpacketPageを返す。ソフトウェアは、パケットが結局送出されるようにするために、そのpacketPageを明示的に挿入する必要がある。QSがこのpacketPageを挿入する時に、作成されたpacketNumberがSPUに返される。ソフトウェアは、コマンドユニットを介して挿入を要求する(図2を参照されたい)。
【0171】
QSからの挿入の場合には、キューの先頭にあるエントリを、別のキューの末尾に移動することができる。この動作は、選択機能1103として図示されている。
【0172】
PMUからの挿入の場合には、パケットがXCaliberプロセッサに到着した時に、PMMUが、パケットにpacketPageを割り当て、対応するパケットがパケットメモリに安全に保管されるや否や、packetPageがQSに送られる。
【0173】
キュー内の例示的なエントリが、要素1105として図示されており、これは、下記のフィールドを有する。Valid(1)は、エントリを検証する。PacketPage(16)は、パケットによって使用されるメモリ内の最初のアトミックページ番号である。NextQueue(5)は、このエントリが現在属するキュー番号と異なる場合があり、その場合には、この番号によって、エントリがキューの先頭に達した時にpacketPageが次に挿入される必要があるキューを示す。Delta(10)には、パケットのヘッダが増大または縮小のいずれかを受けたバイト数が含まれる。この値は、2の補数でコード化される。Completed(1)は、ソフトウェアが対応するパケットの処理を終了したかどうかを示す単一ビットである。DeviceId(2)は、パケットに関連する装置識別子である。Complete動作がパケットに対して実行される(下で説明する)前には、DeviceIdフィールドに、パケットを送り込んだ外部装置の装置識別子が含まれる。Complete動作の後には、このフィールドに、パケットが送られる装置の装置識別子が含まれる。Active(1)は、関連するパケットが現在SPUによって処理中であるかどうかを示す単一ビットである。CRCtype(2)は、CRCをパケットについて計算する必要がある場合に、そのCRCのタイプをネットワーク出力インターフェースに示す。Complete動作がパケットに対して実行される前には、このフィールドは0である。KeepSpace(1)は、パケットがLPM内で占めるアトミックページを、PMMUが割振り解除する(KeepSpaceがデアサートされている)か否か(KeepSpaceがアサートされている)を指定する。パケットがEPMに存在する場合には、このビットは、PMMUによって無視される。
【0174】
QSは、packetPageが挿入されるキューの番号を知る必要がある。ソフトウェアがpacketPageを挿入する時には、キュー番号が、XStreamパケット命令によって明示的に供給され、このXStreamパケット命令は、SPUの機能であり、本明細書の他所で説明する。packetPageが、QS自体によって挿入される場合には、キュー番号は、packetPageが存在するエントリのNextQueueフィールドの値である。
【0175】
packetPageがPMMUによって挿入される時に、キュー番号は、ソフトウェアがLog2InputQueues構成レジスタを(ブート時に)どのように構成したかに依存する。Log2InputQueuesに0がセットされている場合には、着信パケットのすべてのpacketPageが、同一のキューにエンキューされ、このキューは、オンザフライ構成レジスタFirstInputQueueによって指定される。Log2InputQueuesにk(1≦k≦5)がセットされている場合には、パケットの第3バイトのk個のMSBビットによって、キュー番号が決定される。したがって、外部装置(またはSIUのネットワーク入力インターフェースブロック)は、PMUに送られるパケットのそれぞれについて、256個までの優先順位を割り当てることができる。QSは、この256個の優先順位を、2にマッピングし、キュー番号FirstInputQueueからFirstInputQueue+2−1までを使用して、着信パケットのpacketPageおよびdeviceId情報を挿入する。
【0176】
外部装置が、同一フローのすべてのパケットについて、第3バイトの同一の5MSBビットを送信することが期待される。そうでないと、パケットが同一のフロー内で順序はずれで外部装置に送り返される可能性があるので、ネットワークの性能の低下が発生する可能性がある。ソフトウェアは、外部装置(またはSIU)が第3バイトでパケットの優先順位の情報を提供できるか否かを知っている。
【0177】
packetPage pがキューqに挿入される時に、使用されるエントリのPacketPageフィールドにpがセットされ、Validフィールドに「1」がセットされる。他のフィールドの値は、挿入のソースに依存する。ソースがソフトウェア(SPU)である場合には、Completedが「0」であり、NextQueueがSPUによって供給され、DeviceIdが「0」であり、Activeが「1」であり、CRCtypeが0であり、KeepSpaceが0であり、Probedが0である。
【0178】
ソースがQSである場合には、残りのフィールドに、挿入されるpacketPageが現在存在するエントリでそれらのフィールドが有する値が割り当てられる。ソースがPMMUである場合には、Completedが「0」であり、NextQueueがqであり、DeviceIdが、パケットをXCaliberに送信した外部装置の装置識別子であり、Activeが「0」であり、CRCtypeが0であり、KeepSpaceが0であり、Probedが0である。
【0179】
監視論理
QSは、すべてのキューのエントリを監視して、ある状態を検出するか、エントリを再エンキューする、ダウンロードのためにPMMUにpacketPage(および他の情報)を送る、packetPage(および他の情報)をRTUに送るなど、対応する動作を実行する。
【0180】
検出のすべてが、単一サイクルで行われ、並列に行われる。
【0181】
エントリの再エンキュー
QSは、キューの先頭のエンティティのすべてを監視して、パケットを別のキューに移動する必要があるかどうかを判定する。再エンキューされる候補エントリは、有効であり、キューの先頭にあり、パケットが現在存在するキューのキュー番号と異なるNextQueueフィールド値を有する必要がある。
【0182】
再エンキューの複数の候補が存在する場合には、選択されるエントリは、本明細書で後で説明する優先順位方式に従って選択される。
【0183】
ダウンロードのためのエントリのPMMUへの送出
QSは、キューの先頭のエンティティのすべてを監視して、パケットがパケットメモリからのダウンロードを必要としているかどうかを判定する。この動作が、図11の1102である。XCaliberから送出される候補エントリは、有効であり、キューの先頭にあり、パケットが現在存在するキューのキュー番号と同一のNextQueueフィールド値を有し、Completedフラグをアサートされ、Activeフラグをデアサートされている必要がある。さらに、QSは、ダウンロードコマンドをQSに発行したものと同一のコンテキストからの保留中の読取または書込が存在しないことを保証する必要がある。
【0184】
ダウンロードの候補が複数存在する場合には、選択されるエントリは、本明細書で後で説明する優先順位方式に従って選択される。
【0185】
選択された候補は、PMMUがそれを要求した場合に、PMMUに送られるのみである。候補が要求された場合に、選択されたpacketPageが、それが抽出されたクラスタ番号、末尾増大/縮小、アウトバウンド装置識別子ビット、CRCtypeおよびKeepSpaceビットと共に、PMMUに送られる。
【0186】
図12は、Deviceidフィールドのコーディングを示す表である。Deviceidフィールドが0である場合には、アウトバウンドデバイス識別子は、インバウンドデバイス識別子と同一であり、後は表に示された通りである。
【0187】
エントリがPMMUに送られる時に、そのエントリは、「送信中」としてマークされ、キューイングシステムから抽出される(その結果、そのエントリが、送信の準備ができている他のパケットをブロックせず、異なるアウトバウンド装置識別子に進むようになる)。しかし、エントリは、対応するパケットが完全にダウンロードされたことをPMMUが通知するまで、無効化されない。したがって、このエントリに対するプローブタイプの動作は、有効としてすなわち、まだXCaliberプロセッサ内に存在するものとして扱われる。
【0188】
リインカーネーション効果
上で説明したように、QSは、0から255まで(合計256個の数)のpacketNumberを、XCaliberに到達し、キューに挿入されるパケットのそれぞれに割り当てる。これは、パケット識別子が挿入される256エントリのテーブルを維持することによって行われる。この時点で、パケット識別子のValidビットもアサートされる。XCaliberによって処理されるパケットの総数は256をはるかに超えるので、パケット番号は、もちろん、XCaliberプロセッサの動作全体を通じて再利用されなければならない。したがって、パケットがダウンロードのために選択される時に、ある時点で、packetNumberが、もはや進行中の有効なパケットに関連しなくなり、その番号を再利用できるようになる。
【0189】
パケットは、XCaliber内で有効である限り、当初に割り当てられたpacketNumberに関連する。packetNumberを再利用に使用可能にする通常の形は、処理の前にコンテキストにプリロードするためにパケットがQSによってRTUに送られることである。その後、パケットが、完全に処理され、完全にメモリからダウンロードされた時に、packetNumberを関連付けるテーブル内のパケット識別子が、Validビットを操作することによって無効とマークされる(図11および付随するテキストを参照されたい)。
【0190】
通常の動作では、これまでに説明したシステムが、完全に妥当である。しかし、発明人は、ActiveビットおよびValidビットが、ストリームの間の競合を回避するのに十分でない状況があることを発見した。これらの状況の1つが、時々ガーベジコレクションと称するクリーンアップ処理に関係し、この処理では、ソフトウェアが、すべてのパケット番号を監視して、パケットがシステム内に長くとどまりすぎている時を判定し、ある条件の下でパケットを破棄し、新たに到着するパケットのためにシステム内のスペースを解放する。
【0191】
ガーベジコレクションなどのこれらの特殊な動作では、ストリームが、パケットの所有権を得なければならず、ストリームがパケットに対して実行する動作が、実際に正しいパケットに対して実行されることを保証しなければならない。しかし、ソフトウェアがパケットをプローブする時に、処置を講ずる前に、複数のストリームが動作しているので、また、システムの通常の動作によって、パケットがたとえばRTUにも送られる可能性があるので、これらの特殊な動作で、プローブされるパケットが、特殊な動作が完了する前に、別のストリームによって選択され、影響を受けることが、完全に可能である。パケットは、たとえば、RTUに送られ、処理され、ダウンロードされる可能性があり、新しいパケットが、そのpacketNumberに割り当てられる可能性があり、その新しいパケットが、当初のパケットと正確に同一のpacketPageに保管される可能性さえある。ガーベジコレクション処理でのパケットの破棄などの特殊な動作が、元々破棄のために選択されたパケットではなく、新しい完全に有効なパケットを破棄する危険性がある。これは、もちろん、トラブルにつながる可能性がある、潜在的に多数のそのような特殊な動作の1つにすぎない。
【0192】
上記を検討して、発明人は、時間上の2つの異なる絶対点、たとえば時刻sおよび時刻rを与えられて、時刻sでの有効なpacketNumberと時刻rでの同一のpacketNumberが、同一のパケットに関連付けられていることを保証する機構を提供した。単純なプローブ動作は、十分でない。というのは、sの後でrの前のある時に関連するパケットがダウンロードされ、もう1つの(異なる)パケットが到着し、前のパケットと正確に同一のメモリ位置に保管され、ダウンロードされたパケットと同一のpacketNumberを割り当てられている可能性があるからである。
【0193】
異なる時刻での特定のパケットとのpacketNumberの関連を保証するためにXCaliberで実装された機構には、パケット識別子内のプローブビットが含まれる。ガーベジコレクションなどの処理を実行する第1のストリームが、パケットをプローブする時に、Probe&Setと称する特殊なコマンドが使用される。Probe&Setは、プローブビットをセット(アサート)し、Validビット、Activeビット、packetPageアドレス、およびプローブビットの古い値などの通常の情報が、返される。第1ストリームは、その後、本明細書の他所で説明するConditional Activate命令を実行して、パケットの所有権を得る。また、キューイングシステムは、このConditional Activate命令を実行する時に、パケットのアクティブビットをアサートする。第1ストリームによってプローブビットがセットされた後のどの時刻であっても、第2ストリームが、後に同一のパケットをプローブする時に、アサートされたプローブビットによって、第1ストリームがこのパケットの制御を得ようとしていることが示される。第2ストリームは、このパケットをそのままにしておくことを知る。このプローブビットは、パケットがXCaliberプロセッサに入り、新しい(有効でない)番号が割り当てられる時にデアサートされる。
【0194】
RTUへのエントリの送出
RTUは、SPU内でXCaliberプロセッサに対してバックグラウンドで、到着し、パケットメモリに完全に保管されたパケットのヘッダのいくつかのフィールドをアップロードする。このバックグラウンドでのパケットのヘッダのアップロードは、同一のパケットに関して複数回行われる場合がある。QSは、どのパケットをRTUに送る必要があるかを記憶する。この選択動作が、図11に1104として図示されている。
【0195】
RTUは、パケットをプリロードするコンテキストを選択する時に、かならず、対応するパケットがもはやインアクティブパケットでないことをQSに通知する。QSは、そのパケットをアクティブとしてマークする。
【0196】
RTUに送られる候補エントリは、有効であり、ActiveビットおよびCompletedビットをデアサートされた最も古いエントリであり、パケットが現在存在するキューのキュー番号と同一のNextQueueフィールド値を有し、候補が存在するキュー内のある個数を超えないパケットがSPU内で現在処理されつつあるという制限に従う必要がる。この制限に関するさらなる詳細は、本明細書で後に提供する。エントリがプリロードのためにRTUに送られる時に、対応するActiveビットがアサートされる。
【0197】
キューは、既にRTUに提示されたパケット識別子を有するエントリと、まだ提示されていないエントリを有することができる。すべてのキューが、RTUに送られる必要がある、そのキュー内で最も古いエントリをポイントするポインタ(NextPacketForRTU)を有する。キュー内では、パケット識別子が、キューに挿入されたのと同じ順序で、RTUに送られる。
【0198】
RTUに送られる候補パケット識別子は、キューに関連する異なるNextPacketForRTUによってポイントされる識別子である。しかし、これらのポインタのいくつかが、存在しないエントリをポイントする場合がある(たとえば、キューが空の時、またはすべてのエントリが既にRTUに送られている時)。キューのそれぞれの状態を記憶するハードウェアが、これらの状態を判定する。NextPacketForRTUポインタによってポイントされる有効なエントリであることのほかに、候補エントリは、現在RTU内で別のエントリによって使用されていないRTU優先順位(本明細書で後に説明する)を関連付けられることが必要である。複数の候補が存在する場合には、選択されるエントリは、本明細書で後に説明する優先順位方式に従って選択される。
【0199】
エントリがダウンロードのためにPMMUに送られる場合と異なって、RTUに送られるエントリは、そのキューから抽出されない。そうではなく、対応するNextPacketForRTUポインタが更新され、対応するActiveビットがアサートされる。
【0200】
QSは、エントリが有効な候補であり、RTUテーブル内の対応するスロットが空いている限り、RTUブロック内の8エントリテーブルにエントリを送る。RTUは、RTUがSPUに対して生成できる割込みのそれぞれについて1つの、多くとも8つのエントリを受け入れる。
【0201】
QSは、RTUに送りたいエントリ(それが存在するキュー番号によって与えられる)の優先順位を、RTUによって処理される8つの優先順位(RTU優先順位)の1つにマッピングする。このマッピングを、図13の表に示すが、このマッピングは、異なるキューがグループ化されるクラスタの数(構成レジスタPriorityClusters)およびエントリが存在するキュー番号に依存する。
【0202】
RTUは、RTU優先順位ごとに1つの8エントリのテーブルを有する。各エントリには、パケット識別子(packetPage、packetNumber、キュー番号)と、それを検証するValidビットが含まれる。RTUは、そのテーブルのエントリpの対応するValidビットがデアサートされている場合に、必ずRTU優先順位pのパケット識別子を受け入れる。RTUが、QSからRTU優先順位pのパケット識別子を受け取る時に、テーブルのエントリpのValidビットがアサートされ、パケット識別子が保管される。その時に、QSが、対応するNextPacketForRTUポインタを更新することができる。
【0203】
キュー内で送られるパケット数の制限
ソフトウェアが、キューごとに、アクティブにすることができる(すなわち、SPU内のストリームのいずれかによって処理される)パケットの数を制限することができる。これは、MaxActivePacketsオンザフライ構成レジスタを介して達成され、このレジスタでは、キューごとに、そのキュー内でストリームによって処理されることができるパケットの最大個数に対応する、1と256の間の値が指定される。
【0204】
QSは、キューqの現在アクティブなパケットの数を記憶する、キューqごとのカウンタを維持する。このカウンタは、パケット識別子がキューqからRTUに送られる時、Move動作によってパケットがキューqに移動される時、またはInsert動作によってパケット識別子がキューqに挿入される時に、必ず増分され、下記の動作のいずれかがキューq内の有効なエントリ内で実行される時に減分される:Complete動作、Extract動作、エントリを異なるキューに移動するMove動作、またはエントリをいずれかのキュー(同一のキューを含む)に移動するMoveAndReactivate動作。Move、MoveAndReactivate、Insert、Complete、およびExtractは、本明細書の他所で説明する動作である。
【0205】
キューqのカウンタの値が、MaxActivePackets構成レジスタで指定された対応する最大値以上である時には、必ず、キューqのエントリが、RTUへの送出を許可されない。カウンタの値が、より大きくなる可能性があるのは、ソフトウェアが、変更の時点でカウンタ値より小さい値にキューのMaxActivePackets構成レジスタを変更することができ、キューが移動または挿入のバーストを受け取ることができるからである。
【0206】
QSに対するソフトウェア動作
ソフトウェアは、QSに影響する複数の命令を実行する。下記は、XStreamパケット命令のSPUコアによるディスパッチの結果としてQSに対して生成される可能性があるすべての命令のリストである。
【0207】
Insert(p、q):packetPage pを、キューqに挿入する。挿入が成功であった場合には、SPUに「1」が返され、そうでない場合には「0」が返される。挿入は、使用可能なエントリがない時(すなわち、256個のエントリのすべてが有効である時)に限って不成功になる。
【0208】
Move(n、q):qに対して、packetNumber nが存在するエントリのNextQueueフィールドをアサートする。
【0209】
MoveAndReactivate(w、q):packetNumber nが存在するエントリのNextQueueフィールドをqにアサートし、Activeビットをデアサートする。
【0210】
Complete(n、d、e):packetNumber nが存在するエントリのCompletedフラグをアサートし、Deltaフィールドをdにアサートし、deviceIdフィールドをeにアサートする。Activeビットをデアサートし、KeepSpaceビットをデアサートする。
【0211】
CompleteAndKeepSpace(n、d、e):Complete()と同一であるが、KeepSpaceビットをアサートする。
【0212】
Extract(n):packetNumber nが存在するエントリのValidフラグをリセットする。
【0213】
Replace(n、p):packetNumber nが存在するエントリのPacketPageフィールドにpacketPage pをセットする。
【0214】
Probe(n):packetNumber nがQS内に存在するか否かの情報をソフトウェアに返す。存在する場合には、PacketPage、Completed、NextQueue、DeviceId、CRCtype、Active、KeepSpace、およびProbedフィールドを返す。
【0215】
ConditionalActivate(n):packetNumber nが有効であり、Probedがアサートされ、Activeがデアサートされ、パケットが送信中でない場合に、「1」を返す。この場合に、Activeビットがアサートされる。
【0216】
QSは、潜在的にアクティブにされているパケットのパケット識別子が、RTUテーブルにあり、プリロードを待っている、またはプリロードされているかどうかを判定するためにRTUに照会する。パケット識別子がテーブル内にある場合に、RTUがそれを無効化する。キューが、たまたは同時にそのパケットのプリロードを開始する場合には、QSはそのパケットをアクティブにしない。
【0217】
ProbeAndSet(n):Probe()と同一であるが、Probedビットをアサートする(返されるProbedビットは、古いProbedビットである)。
【0218】
Probe(q):キューq内のサイズ(すなわち、有効なエントリの数)を提供する。
【0219】
無効な(すなわち存在しない)packetNumberに対するMove()、MoveAndReactivate()、Complete()、CompleteAndKeepSpace()、Extract()、およびReplace()は、無視される(割込みが生成されない)。
【0220】
Activeビットがデアサートされている有効なpacketNumberに対するMove、MoveAndReactivate、Complete、CompleteAndKeepSpace、Extract、およびReplaceは、生じてはならない(ソフトウェアによって保証される)。生じた場合には、結果は未定義である。Insert、Probe、ProbeAndSet、およびConditionalActivate動作だけが、SPUに応答する。
【0221】
ソフトウェアが、同一のパケットに影響するmove様動作をPMUに発行する場合に、結果は未定義である。というのは、移動がソフトウェアが指定した通りに発生するという保証がないからである。
【0222】
図14は、有効なパケットのActiveビット、Completedビット、およびProbedビットの許容される組合せを示す表である。
【0223】
基本動作
ソフトウェア動作および監視論理をサポートするために、QSは、下記の基本動作をサポートする。
1.エントリを、キューの末尾にエンキューする。
2.エントリを、それが存在するキューからデキューする。
3.エントリを、それが現在存在するキューの先頭から別のキューの末尾に移動する。
4.キューのエントリをRTUに供給する。
5.キューのサイズを供給する。
6.packetNumberに関連するフィールドのいずれかを更新する。
【0224】
上の動作1、2、4、および6(同時に異なるパケットに適用される)は、本発明の好ましい実施形態では4サイクルで完了する。これは、1サイクルあたり1命令のスループットを暗示する。
【0225】
複数の動作が、同時に実行を開始される可能性がある時に、なんらかの優先順位付けが必要である。最高から最低の優先順位への順で、これらのイベントは、PMMUからの挿入、エントリのデキュー、あるキューから別のキューへのエントリの移動、プリロードのためにRTUへのエントリの送出、またはソフトウェア動作である。ソフトウェア動作の間の優先順位付けは、ソフトウェア動作が必ず順番に実行されるので、設計によって提供される。
【0226】
早期QS満杯検出
PMUは、ASIC(図2の要素203など)とXCaliberプロセッサの間のフロー制御を助ける機構を実装する。この機構の一部は、QSが満杯になりつつあることを検出することであり、この場合には、SPUに対してLessThanXpacketIdEntriesInt割込みが生成される。ソフトウェアは、0より大きい数zを指定する(IntIfLessThanXpacketIdEntries構成レジスタで)ことによって、この割込みをイネーブルすることができる。割込みは、256−y<zの時に生成され、このyは、現在XCaliber内で処理中のパケットの総数である。z=0の時には、割込みは絶対に発生しない。
【0227】
レジスタ転送ユニット(RTU)
RTUブロックの目標は、使用可能なコンテキストに、XCaliber内で生きているパケットの情報をプリロードすることである。この情報は、パケットのpacketPageおよびpacketNumberと、そのヘッダのいくつかのフィールドである。選択されたコンテキストは、プリロードの時点でPMUによって所有され、プリロードされるや否や、SPUに解放される。したがって、SPUは、ヘッダ情報をロードする、コストの高いロード動作を実行する必要がなく、したがって、パケット処理の総合的な待ち時間が減らされる。
【0228】
RTUは、QSからパケット識別子(packetPage、packetNumber)と、パケットがそこから来たキューの番号を)QSから受け取る。この識別子は、部分的にはネットワーク入力インターフェースを介してXCaliberに新しいパケットが到着した結果としてPMMUによって作成され(packetPage)、部分的にはpacketPageおよびデバイス識別子がエンキューされる時にQSによって作成される(packetNumber)。
【0229】
RTUのもう1つの機能が、SPUコアによってディスパッチされたマスクドロード/ストア命令を実行することである。というのは、マスクドロード/ストア命令を実行する論理が、プリロードを実行する論理に類似するからである。したがって、両方の動作についてハードウェアを共用することができる。この理由から、RTUは、1時に両方ではなく、マスクドロード/ストア命令またはプリロードのいずれかを実行する。マスクドロード/ストア命令は、コマンドキュー(CU)ブロックを介してRTUに到達する。
【0230】
コンテキストの状態
コンテキストは、PMU所有またはSPU所有の2つの状態の1つになることができる。コンテキストの所有権は、現在の所有者がコンテキストを解放する時に変更される。PMUは、3つの場合にSPUにコンテキストを解放する。第1に、RTUが、コンテキストへのパケットの情報のプリロードを終了した時である。第2に、SPUがRTUにコンテキストを要求する時に、PMUがSPUにコンテキストを解放する。この場合には、RTUが、解放できるコンテキストを有する場合に、そのコンテキストを解放する。第3に、8つのすべてのコンテキストが、PMU所有である。プリロードされているコンテキストは、PMU所有コンテキストとみなされることに留意されたい。
【0231】
SPUは、XStream RELEASE命令をディスパッチする時に、RTUにコンテキストを解放する。
【0232】
コンテキストのプリロード
ブート時に、PMUが、現在の例で説明される本発明の実施形態で使用可能な8つのコンテキストのうちの7つを所有し、SPUが、1つのコンテキストを所有する。PMUは、それが所有するコンテキストにパケットの情報をプリロードすることだけができる。コンテキストへのパケットの情報のプリロードの処理は、2ステップに分割することができる。パケットが開始されるアドレス(パケットメモリアドレススペース内のオフセット)をロードする第1フェーズ。このオフセットは、パケットのバイト単位のサイズをコーディングする2バイト値の第1バイトをポイントする。パケットが、タイムスタンプされ、HeaderGrowthOffsetが、0でない場合には、タイムスタンプ値が、オフセット−4に配置される。オフセットアドレスは、(packetPage<<8)|(HeaderGrowthOffset<<4)として計算される。このオフセットは、選択されたコンテキストのレジスタ番号StartLoadingRegisterにロードされる。StartLoadingRegisterは、ブート時構成レジスタである。packetNumber値は、レジスタ番号StartLoadingRegister+1にロードされる。
【0233】
第2フェーズは、パケットヘッダをロードすることである。パケットヘッダは、レジスタStartLoadingRegister+2、StartLoadingRegister+3、…(GPRレジスタが存在する限り、必要なだけいくつでも)を使用してロードされる。PatternMatchingTable[q](qは、パケットに関連するキュー番号である)マスクによって、パケットのヘッダをコンテキストのGPRレジスタにロードする方法が指定される。PatternMatchingTableは、マスクを含む、オンザフライ構成レジスタである。ヘッダデータを得るために、RTUは、必要な数のパケットデータの16バイトラインをパケットメモリに読み込むようにSIUに要求する。RTUは、パケットメモリから16バイトライン(ローカルまたは外部のいずれか)を受け取る時に、この動作を制御するパターンマスクを使用して、コンテキストにロードすることが望まれるバイトを選択する。
【0234】
直前で説明した、パケットヘッダをロードするステップは、オンザフライPreloadMaskNumber構成レジスタを介して、キューごとに、ソフトウェアによってディスエーブルすることができる。このレジスタでは、QS内の可能な32個のキューのそれぞれについて、PatternMatchingTable内のどのマスク(0から23まで)が、プリロードに使用されることになるかを指定する。24と31の間の値が、この構成レジスタ内で指定される場合には、それは、RTUによって、実行しないものとして解釈される。
【0235】
RTUは、コンテキストのGPRレジスタにロードするだけである。必要なCP0レジスタは、SPUによって初期化される。ロードされるコンテキストは、PMU所有コンテキストなので、RTUは、ロードを実行するために、そのコンテキストへの使用可能なすべての書込ポート(この実施形態では4つ)を有する。
【0236】
プリロード動作が開始される時には、必ず、RTUが、専用インターフェースを介してSPUにこのイベントを通知する。同様に、プリロード動作が完了する時にも、RTUが、SPUに通知する。したがって、SPUは、パケットのプリロードのそれぞれについて、2回の通知(開始および終了)を期待する。RTUが、同一サイクルでプリロードを開始し、終了する時(これは、パケットヘッダのロードのステップがディスエーブルされてる時に発生する)には、特別な通知が、SPUに供給される。この3つの場合のどれでも、RTUは、パケットに関連するコンテキスト番号およびCodeEntryPoint構成レジスタの内容を供給する。PMUが、8つのすべてのコンテキストがPMU所有なのでSPUにコンテキストを解放する場合には、CodeEntryPointSpecialの内容が、SPUに供給される。RTUは、8エントリのテーブル(コンテキストごとに1エントリ)を有し、各エントリが、プリロードの準備ができているパケット識別子と、そのエントリを検証する有効ビットを有する。RTUは、プリロードを行うために、必ず、最高のエントリインデックスの有効な識別子を選択する。コンテキストが、この識別子に関連付けられる時に、対応する有効ビットが、デアサートされる。RTUは、1時に1つのコンテキストをプリロードする。コンテキストをロードした後に、そのコンテキストが、SPUに解放され、SPU所有コンテキストになる。この時点で、RTUは、コンテキストにプリロードされる次のパケットについてテーブルを検索する(少なくとも1つのPMU所有コンテキストがある場合)。
【0237】
パターン照合テーブル
図15に、サブマスクの組を含むオンザフライ構成レジスタであるパターン照合テーブルを示す。RTUは、コンテキストのプリロードに、このテーブル内のサブマスク(0から23まで)のどれでも使用することができる。サブマスクを、複数のサブマスクを含むより大きいマスクにグループ化することもできる。
【0238】
図16に、マスクのフォーマットを示す。マスクは、図示のように、それぞれ32×2ビットのサブマスクの変数番号(1から8まで)である。すべてのサブマスクが、複合マスクが対応するサブマスクで終るのか、次のサブマスクに継続するのかを示す、関連付けられたビット(EndOfMask)を有する。サブマスクの最大の総数は32であり、そのうちの24個(サブマスクインデックス0から23)がグローバルであり、これは、SPU内のすべてのストリームが、それを使用でき更新できることを意味し、8個が、ストリームごとのサブマスクである。ストリームごとのサブマスクは、EndOfMaskビットを有しないが、これは、ストリームごとのサブマスクのグループ化が許容されないからである。
【0239】
各サブマスクの2つの32ビットベクトルを、SelectVectorおよびRegisterVectorと呼ぶ。SelectVectorは、パケットのヘッダからのどのバイトが、コンテキストに保管されるかを示す。RegisterVectorは、SelectVectorによって選択されたバイトを保管し続けるためにコンテキスト内の次の連続するレジスタに切り替える時を示す。バイトは、レジスタ内で必ず右寄せされる。
【0240】
図17に、図16のマスクを使用するプリロード動作の例を示す。SelectVectorでアサートされたビットによって、ヘッダの対応するバイトがレジスタに保管されることが示される。たとえば、ヘッダのバイト0、1、および7が、それぞれGPR番号StartLoadingRegister+2のバイト0、1、および2にロードされる(すなわち、ヘッダバイトは、レジスタにロードされる時に右寄せされる)。RegisterVectorでアサートされたビットは、現在のGPRレジスタにそれ以上のヘッダバイトがロードされないことと、次のヘッダバイトがある場合に、それが次の(連続する)GPRレジスタにロードされることを示す。この例では、ヘッダのバイト12および13が、GPR番号StartLoadingRegister+3にロードされる。
【0241】
PMU所有コンテキストの選択
PMUコアには、合計8つの機能ユニットがある。しかし、複雑さと性能のトレードオフに起因して、ストリーム(コンテキスト)は、4つの機能ユニットの固定された組に命令を発行することだけができる。
【0242】
RTUは、所与の時に複数のコンテキストを所有することができる。したがって、プリロードが実行される時またはコンテキストをSPUに供給する時に、コンテキストの1つを選択する論理が設けられる。この論理は、PMUコア内の異なるストリーム(コンテキスト)が、異なる機能ユニットに潜在的にどのように命令をディスパッチできるかに基づいて定義され、この論理の目標は、SPU内の機能ユニットが潜在的に受け取ることができる動作のバランスをとることである。
【0243】
選択論理は、入力として、コンテキストごとに1ビットの、そのコンテキストがPMU所有またSPU所有のどちらであるかを示す8ビットをとる。この論理は、選択が可能なPMU所有コンテキストを出力する。
【表1】
Figure 0003801919
【0244】
選択論理は、前の254個の番号のリストを用いて指定される。数のそれぞれが、SPU/PMU所有コンテキストの可能な組合せに関連する。たとえば、第1の数は、組合せ「00000001」に対応する、すなわち、コンテキスト番号0がPMU所有であり、コンテキスト番号1から7がSPU所有である(LSB桁がコンテキスト0に対応し、MSB桁がコンテキスト7に対応し、0の値がSPU所有を意味し、1の値がPMU所有を意味する)。第2の数は、組合せ「00000010」に対応し、第3の数は、組合せ「00000011」に対応し、組合せ「11111110」まで同様である。19番目の組合せ(「00010011」)は、前のリストの数3(または「00000011」)に関連し、これは、コンテキスト0および1を選択できることを意味する。コンテキスト4を選択することもできるが、これは、SPUコア内の機能ユニットの使用のバランスをとるための最適の選択ではない。
【0245】
使用可能なコンテキストがない時の割込み
RTUは、NewPacketIdTable)と呼ばれる8エントリのテーブルを有する。このテーブルのエントリpには、pのRTU優先順位を有するパケット識別子(packetPage、packetNumber、およびキュー番号)と、その識別子を検証するValidビットが含まれる。RTUは、プリローディングまたはマスクドロード/ストアの実行でビジーでない時に、このテーブルから、最高のRTU優先順位を有する有効な識別子を得る。それが存在し、少なくとも1つのPMU所有コンテキストがある場合に、RTUは、PMU所有コンテキストのプリロードを開始し、テーブル内のValidビットをリセットする。
【0246】
PMU所有コンテキストがない場合には、RTUは、コンテキストがSPUによって解放されるまで、アイドルになる(保留中のソフトウェア動作がないと仮定して)。コンテキストが解放された時点で、RTUは、やはり、NewPacketIdTableから最高の有効なRTU優先順位の識別子を得る(RTUがSPUによるコンテキストの解放を待っている間に、最高のRTU優先順位を有する新しい識別子が、QSによって送られた可能性があるので)。Validビットがリセットされ、パケット情報が、使用可能なコンテキストへのプリロードを開始される。この時点で、RTUは、QSからRTU優先順位pのパケットを受け入れることができる。
【0247】
RTU優先順位pを有する識別子が、QSによってRTUに送られる時に、その識別子が、NewPacketIdTableのエントリpにロードされ、Validビットがセットされる。この時に、NewPacketIdTable内の有効な識別子の数(やってくる1つをカウントせずに)が、現在の使用可能なPMU所有コンテキスト(RTUが現在ロードしようとしているコンテキストをカウントせずに)以上である場合に、PacketAvailableButNoContextPriorityPInt割込みが、SPUに対して生成される。Pは、0から7までの範囲であり、その値は、ブート時構成フラグPacketAvailableButNo ContextIntMappingによって決定される。このフラグが「0」である場合には、Pは、3ビットのブート時構成レジスタDefaultPacketPriorityによって決定される。このフラグが「1」の場合には、Pは、RTU優先順位である。しかし、PacketAvailableButNoContextPriorityPintは、対応する構成フラグPacketAvailableButNoContextPriorityPintEnableがデアサートされている場合には、生成されない。
【0248】
SPUは、割込みを受け取った時に、RTUが新しいパケットのpacketPage、packetNumber、およびヘッダ情報をプリロードできるようにするために、それが所有するコンテキストを解放するか否かを決定する。
【0249】
RTUは、PacketAvailableButNoContextPriorityPInt割込みを生成する時に、数サイクル後に、SPUによって解放されたコンテキストを受け取る場合がある。しかし、このコンテキストは、たとえばストリームの1つがパケットの処理を終了した時に解放されたものである可能性がある。これは、PacketAvailableButNoContextPriorityPInt割込みの割り込みサービスルーチンが終了する前に発生する可能性がある。したがって、コンテキストが、ISR完了に起因して解放される時に、割込みを引き起こしたプリロードされたパケットが、すでに、SPU内の別のストリームによって最初に解放されたコンテキストを使用している可能性がある。したがって、割込みに起因して解放されるコンテキストが、別の(おそらく将来の)パケットプリロードに使用される。NewPacketIdTable内の他のエントリが有効でない場合には、コンテキストは、識別子がRTUに到達するか、SPRがRTUにコンテキストを要求するまで、使用され、そのままになる。
【0250】
コンテキストがSPU所有になり、RTUが保留中のプリロードを有する時には、必ず、RTUが、最高優先順位の保留中のプリロード(NewPacketTable内の最高の有効なエントリに対応する)を選択し、プリロードを開始する。このレベルに関連するPacketAvailableButNoContextPriorityint割込みがアサートされた場合には、プリロードが開始される時に、その割込みがデアサートされる。
【0251】
RTUでのソフトウェア動作
ソフトウェアは、RTUに影響する複数の命令を実行する。下記は、SPUコアによるXStreamパケット命令のディスパッチの結果としてRTUに対して生成される可能性があるすべての動作のリストである。動作は、コマンドキュー(CU)を介して、命令を発行したストリームに関連するコンテキスト番号と共にRTUに到着する。
【0252】
1.Release(c):コンテキスト番号cが、PMU所有になる。
【0253】
2.GetContext:RTUが、PMU所有コンテキスト番号の番号を返す。このコンテキストは、存在する場合に、SPU所有になり、成功フラグがアサートされて返される。存在しない場合には、デアサートされて返され、この場合には、コンテキスト番号は無意味である。
【0254】
3.MaskedLoad(r、a、m)、MaskedStore(r、a、m):SPUコアが、特殊な機能ユニットとしてRTUを使用して、マスクドロード/ストア命令を実行する。というのは、マスクドロード/ストア命令を実行する論理が、プリロードを実行する論理に似ているからである。したがって、両方の動作についてハードウェアを共用することができる。この理由から、RTUは、1時に、両方ではなく、マスクドロード/ストアまたはプリロードのいずれかを実行する。マスクドロードまたはマスクドストアのいずれかについて、RTUは、下記のパラメータを受け取る。
(a)マスクドロード/ストア動作によって使用される、PatternMatchingTable内の最初のサブマスクのインデックスに対応するマスク番号m。
(b)マスクの適用が開始される(すべての)メモリ内の最初のバイトをポイントする36ビットアドレスa。
(c)マスクドロード/ストア動作に用いられる最初のレジスタに対応するレジスタ番号r(供給されたコンテキスト番号内の)。同一のコンテキスト番号内の後続のレジスタが、選択されたマスクに従って使用される。
【0255】
マスクドロード/ストア動作に関して、マスクは、メモリの任意のバイトで適用を開始されることができるが、プリロード動作で(マスクドロード様動作)は、マスクが、必ず16バイト境界アドレスから適用される。というのは、ネットワーク入力インターフェースから来るパケットデータが、必ず、パケットメモリ内で16バイトライン内のLSBバイトから保管されるからである。
【0256】
MaskedLoad動作、MaskedStore動作、およびGetContext動作は、RTUとSPUの間の専用インターフェースを介して、完了した時をSPUに通信する。RTUは、ソフトウェア動作にパケットプリロードより高い優先順位を与える。プリロードでは、パケットメモリにアクセスするが、マスクドロード/ストアでは、キャッシュ可能またはライトスルーでない限り、システム内のどのメモリにもアクセスすることができる。そうでない場合には、結果は未定義である。
【0257】
RTUは、前のマスクドロード/ストアコマンドを実行している間にGetContextコマンドまたはReleaseコマンドを実行することができる。
【0258】
プログラミングモデル
ソフトウェアは、ブート時またはオンザフライのいずれかで、PMUの特徴のいくつかを構成することができる。ブート時のみに構成可能な特徴のすべて、およびオンザフライで構成可能な特徴の一部が、SPUが単一ストリームモードで動作している時に限って発生しなければならない。そうでない場合には、結果は未定義である。PMUは、SPUがどのモードで動作しているかを検査しない。
【0259】
ソフトウェアは、所与のパケットについてPMUが維持する情報の一部を更新することができ、この情報を得ることもできる。これは、別の特許出願の対象である新しいXStreamパケット命令を介して、ソフトウェアによって達成される。これらの命令は、PMUによって実行される3つの異なるタイプの動作(動作がPMUのどのブロックすなわち、PMMU、QS、またはRTUのどれに影響するかに依存する)を作る。これらの動作の一部が、結果をPMUからSPUに送り返すことを必要とする。
【0260】
パケットメモリおよび構成スペースは、メモリマップ式である。SIUは、パケットメモリのベースアドレスを用いて構成レジスタ(16MB整列)を維持し、EPMのベースアドレスを用いて第2の構成レジスタを維持する。ソフトウェアは、連続するスペースとしてパケットメモリを見る。しかし、このシステムでは、パケットメモリのEPM部分を異なるスペースにマッピングすることができる。
【0261】
SIUは、PMU構成レジスタスペースのベースを用いて、第3の構成レジスタも維持する。SPUによって実行されるLPMおよびおよび構成スペースへのロード/ストアアクセスのすべてが、SIUを介してPMUに達する。SIUは、アクセスがどのスペースに属するかを判定し、PMUに、アクセスがLPMまたはPMU構成スペースのどちらに対するものであるかを知らせる。EPMへのアクセスは、PMUには透過的である。
【0262】
PMUは、あるイベントが発生した時にSPUに割り込むことができる。ソフトウェアは、構成レジスタを介して、これらの割込みのすべてをディスエーブルすることができる。
【0263】
構成レジスタ
PMUの構成レジスタは、XCaliberアドレススペースのPMU構成スペース内にある。このスペースのベースアドレスは、SIUによって維持され、PMUによって可視にする必要はない。SIUは、SPUによって実行される読取/書込アクセスがこのスペースに属する時を、書込アクセスの際に特定のレジスタを更新するのに必要な情報と共に、信号を用いてPMUに通知する。
【0264】
PMU構成レジスタには、ブート時にのみ構成することができるものと、オンザフライで構成することができるものがある。すべてのブート時構成レジスタおよび一部のオンザフライ構成レジスタには、単一ストリームモードでアクセスする必要がある。ブート時構成レジスタは、PMUがリセットモードである場合にのみ更新されなければならない。そうでない場合には、結果は未定義である。PMUは、単一ストリームモード構成レジスタが更新される時に、SPUが実際に単一ストリームモードであるかどうかを検査しない。すべての構成レジスタが、リセットシーケンスの後にデフォルト値を有する。
【0265】
この実施形態では、4KBのXCaliberアドレススペースが、PMU構成スペースに割り振られる。XCaliberのPMU内では、これらの構成レジスタの一部が、使用されないか、まばらに使用される(すなわち、32ビット構成レジスタの一部のビットだけが意味を持つ)のいずれかである。PMU構成スペース内の定義されていないビットは、将来のPMU世代のために予約されている。ソフトウェアは、これらの予約済みビットを読み取るか書き込むことができるが、その内容は、完全に決定的ではあるが、未定義である。
【0266】
図18に、論理的に32ビットワードに分割される、PMU構成スペースを示す。各ワードまたはワードの組に、構成レジスタが含まれる。
【0267】
図19aおよび19bは、異なるPMU構成レジスタの、構成スペースの異なるワードへのマッピングを示す表の2つの部分である。各構成レジスタのブロック所有者も、この表に示されている。
【0268】
下記は、この特定の実施形態のすべての構成レジスタと、説明およびデフォルト値(PMUリセット後の)のリストである。構成レジスタのそれぞれについて、ビット幅を括弧内に示す。特に指定されない限り、構成レジスタの値は、構成スペース内の対応するワード内で右寄せされる。
【0269】
ブート時のみ構成レジスタ
1.Log2InputQueues(5)
(a)デフォルト値:0
(b)説明:入力キューとして使用されるQS内のキューの数(すなわち、PMMUからのpacketPage/deviceIdが挿入されるキューの数)。
【0270】
2.PriorityClustering(3)
(a)デフォルト値:5(32クラスタ)
(b)説明:QS内の異なるキューが優先順位クラスタ内でどのようにグループ化されるかを指定する(0:1クラスタ、1:2クラスタ、2:4クラスタ、…、5:32クラスタ)。
【0271】
3.HeaderGrowthOffset(4)
(a)デフォルト値:0
(b)説明:パケットがパケットメモリに保管される時にパケットの前に残される空の16バイトチャンクの数。最大値は、15個の16バイトチャンク。最小値は0。
【0272】
4.TailGrowthOffset(6)
(a)フォルト値:0
(b)説明:パケットがパケットメモリに保管される時にパケットの後に残される空の16バイトチャンクの数。最大値は、63個の16バイトチャンク。最小値は0。
【0273】
5.PacketAvailableButNoContextIntMapping(1)
(a)デフォルト値:0
(b)説明:PacketAvailableButNoContextPriorityPInt割込みがイネーブルされる場合のPを指定する。可能な値は次の通り:
(1)0:PはDefaultPacketPriorityレジスタによって指定される。
(2)1:PはRTU優先順位である。
【0274】
6.StartLoadingRegister(5)
(a)デフォルト値:1
(b)説明:選択されたコンテキストでのパケットヘッダのバックグラウンドロードを実行する時にRTUによってロードされる最初のGPRレジスタ番号を決定する。このレジスタには、値(packetPage<<8)|(HeaderGrowthOffset<<4)がロードされる。packetNumberは、次のGPRレジスタにロードされる。それに続くGPRレジスタは、PatternMatchingMask0マスクがイネーブルされる場合に、それに続いてパケットヘッダデータをプリロードするのに使用される。
【0275】
7.PreloadMaskNumber(32×5)
(a)デフォルト値:すべてのキューについてマスク31(すなわち、ヘッダのプリロードがディスエーブルされる)。
(b)説明:QSの32個の可能なキューのそれぞれについて、PatternMatchingTable内のどのマスクがプリロードに使用されるかを指定する。
【0276】
図19aから19cに、PreloadMaskNumber構成レジスタのマッピングを示す。
【0277】
上で説明した構成レジスタは、現在の例のブート時のみ構成レジスタである。真下に、オンザフライ構成レジスタをリストする。
【0278】
単一ストリーム構成レジスタ
1.OverflowEnable(1)
(a)デフォルト値:0
(b)説明:パケットがLPMにおさまらない場合のパケットのオーバーフローをイネーブル/ディスエーブルする。ディスエーブルされた時には、パケットがドロップされる。
【0279】
2.PatternMatchingTable(24×(32×2+1)
(a)デフォルト値(24個のエントリのそれぞれについて)
(1)SelectVector:すべてのバイトを選択する
(2)RegisterVector:レジスタごとに4つの連続するバイトを保管する
(3)EndOfMask:1
(b)説明:マスクドロード/ストア動作について、どのバイトをどの(連続する)レジスタにロード/ストアするかを指定する。このテーブルのマスク0は、RTUによって、バックグラウンドで、使用可能なコンテキストの1つにパケットのヘッダの一部のバイトをプリロードするのに使用される。合計24個のマスクがある。
(c)注:マスク0は、PMUがフリーズされる時(セクション0を参照されたい)に書き込まれる必要があり、そうでなければ、結果は未定義である。
【0280】
図21に、真上で説明したPatternMatchingTableを示す。
【0281】
3.Freeze(1)
(a)デフォルト値:1
(b)説明:フリーズモードをイネーブル/ディスエーブルする。
【0282】
4.Reset(1)
(a)デフォルト値:0
(b)説明:1がセットされている時に、PMUに強制的にリセットシーケンスを実行させる。PMU内のすべてのパケットデータが失われる。リセットシーケンスの後には、すべての構成レジスタがデフォルト値を有する。
【0283】
複数ストリーム構成レジスタ
1.ClearErrorD(D=0、1)
(a)デフォルト値:0
(b)説明:ソフトウェアによって(なんらかのデータを)書き込まれる時に、装置識別子Dで検出されたパケットエラー状態がクリアされる。
【0284】
2.PacketAvailableButNoContextPriorityPintEnable(8)[P=0..7]
(a)デフォルト値:0(すべてのレベルについて)
(b)説明:PacketAvailableButNoContextPriorityPint割込みをイネーブル/ディスエーブルする。
【0285】
3.AutomaticPacketDropIntEnable(1)
(a)デフォルト値:1
(b)説明:AutomaticPacketDropInt割込みをイネーブル/ディスエーブルする。
【0286】
4.TimeStampEnable(1)
(a)デフォルト値:0
(b)説明:パケットのタイムスタンプをイネーブル/ディスエーブルする。イネーブルされ、HeaderGrowthOffsetが0より大きい時に、パケットがパケットメモリに書き込まれる前に、4バイトのタイムスタンプがパケットに付加される。
【0287】
5.PacketErrorIntEnable(1)
(a)デフォルト値:0
(b)説明:PacketErrorInt割込みをイネーブル/ディスエーブルする。
【0288】
6.VirtualPageEnable(9×4)
(a)デフォルト値:すべてのブロックについてすべての仮想ページがイネーブルされる。
(b)説明:LPMが分割される4つのブロックのそれぞれの仮想ページをイネーブル/ディスエーブルする。256バイト(LSBビットによってイネーブルされる)から64Kバイト(MSBビットによってイネーブルされる)までの、その間は2のべきのサイズの、9つまでの仮想ページがある。
【0289】
図22に、VirtualPageEnableレジスタを示す。
【0290】
7.OverflowAddress(24)
(a)デフォルト値:0x40000(EPM内の最初のアトミックページ)。
(b)説明:16MSBビットが、オーバーフローしたパケットが保管され始めるパケットメモリ内のアトミックページ番号に対応する。8LSBビットは、「0」にハードワイヤされる(すなわち、ソフトウェアによってこれらのビットにセットされた値が、無視される)。OverflowAddressは、16MBパケットメモリ内のオフセットアドレスである。SIUは、このオフセットを、EPM内の対応する物理アドレスに変換する。パケットメモリの最初の1Kアトミックページが、LPMに対応する。ソフトウェアが、OverflowAddressの16MSBに0から1023までの値をセットした場合には、結果は未定義である。パケットがオーバーフローした時に、OverflowAddressの16MSBビットが、そのパケットのpacketPageになる。SPUは、この構成レジスタに書き込んだ時に、次のパケットオーバーフローを許容する。
【0291】
8.IntIfNoMoreXsizePages(4)
(a)デフォルト値:0xF(すなわち、割込みが絶対に生成されない)。 (b)説明:仮想ページのインデックスを指定する(0:256バイト、1:512バイト、…、8:64Kバイト、9から15:仮想ページなし)。PMMUが、すべてのLPMにそのサイズの仮想ページがこれ以上存在しないことを検出した時に、必ず、SPUに対してNoMoreThanXSizePagesInt割込みが生成される。
【0292】
9.IntIfLessThanXpacketIdEntries(9)
(a)デフォルト値:0
(b)説明:新しいパケット識別子に使用可能なQS内のエントリの最小個数。使用可能なエントリの実際の個数がこの数未満である場合には、SPUに対して割込みが生成される。この数が0である場合には、LessThanXPacketIdEntriesInt割込みは生成されない。
【0293】
10.DefaultPacketPriority(3)
(a)デフォルト値:0
(b)説明:PacketAvailableButNoContextMappingが0である時の、PacketAvailableButNoContextInt割込みの優先順位レベルを与える。
【0294】
11.ContextSpecificPatternMatchingMask:(8×(32×2))
(a)デフォルト値:
(1)SelectVector:すべてのバイトを選択する
(2)RegisterVector:各レジスタに4バイトを保管する(EndOfMaskは1にハードワイヤされる)
(b)説明:マスクドロード/ストア動作について、どのバイトをどの(連続する)レジスタにロード/ストアするかを指定する。ソフトウェアは、ストリームがその対応するコンテキスト固有マスクだけにアクセスすることを保証する。
【0295】
図23に、ContextSpecificPAtternMAtchingマスク構成レジスタを示す。
【0296】
12.FirstInputQueue(5)
(a)デフォルト値:0
(b)説明:PMMUからのパケットが挿入されるキューの最小の番号を指定する。
【0297】
13.SoftwareOwned(4)
(a)デフォルト値:0(ソフトウェア所有でない)
(b)説明:LPMブロックごとに1ビット。「1」の場合に、そのブロックがソフトウェア所有され、そのブロックのメモリがソフトウェアによって管理されることを示し、そのブロックのVirtualPageEnableビットがドントケアであることを示す。
【0298】
14.MaxActivePackets(32×9)
(a)デフォルト値:キューのそれぞれについて256。
(b)説明:各キューqについて、SPUによって処理できるキューq内のパケットの最大個数に対応する、0と256の間の値を指定する。
【0299】
図24に、MaxActivePackets構成レジスタを示す。
【0300】
15.CodeEntryPoint(32×30)
(a)デフォルト値:キューのそれぞれについて0。
(b)説明:キューqに関連するCodeEntryPointレジスタの内容は、キューqに存在するパケットをプリロードされたコンテキストがアクティブにされる時に、SPUに送られる。
【0301】
16.CodeEntryPointSpecial(30)
(a)デフォルト値:0
(b)説明:このレジスタの内容は、すべてのコンテキストがPMU所有になるという事実に起因してコンテキストがアクティブにされる時に、SPUに送られる。
【0302】
17.BypassHooks(9)
(a)デフォルト値:0
(b)説明:図32を参照されたい。各ビットが、1つのハードウェアバイパスフックをアクティブにする。バイパスフックは、このレジスタの対応するビットがアサートされているサイクルに適用される。
【0303】
18.InternalStateWrite(12)
(a)デフォルト値:0
(b)説明:図33を参照されたい。内部PMU状態の1ワードを指定する。内部状態のワードは、InternalStateRead構成レジスタを読み取る時に、ソフトウェアから使用可能になる。InternalStateWrite構成レジスタは、1実施形態では、PMUのデバッグに使用されるのみである。
【0304】
読取専用レジスタ
1.SizeOfOverflowedPacket(16)
(a)デフォルト値:0
(b)説明:PMUがパケットをオーバーフローしなければならない時に、必ず、このレジスタに、そのパケットのバイト単位のサイズが含まれる。
【0305】
2.TimeCounter(64)
(a)デフォルト値:0
(b)説明:PMUの最後のリセット以降のコアクロックサイクルの数が含まれる。
【0306】
TimeCounter構成レジスタを、図25に示す。
【0307】
3.StatusRegister(8)
(a)デフォルト値:1
(b)説明:PMUの状態が含まれる。このレジスタは、リセットまたはフリーズが完了した時を見つける(FreezeビットおよびResetビット)か、インバウンド装置識別子ごとのパケットエラーのソースを見つける(Err:1−エラー、0−エラーなし;EPM:1−パケットをEPMにオーバーフローする間にエラーが発生した、0−パケットをLPMにストアしている間にエラーが発生した;PSM:1−パケットサイズ不一致に起因するエラー、0−バスエラーに起因するエラー)ために、SPUによってポーリングされる。
【0308】
図26に、StatusRegister構成レジスタを示す。
【0309】
割込み
PMUは、あるイベントが発生した時にSPUに割り込むことができる。ソフトウェアは、上にリストした構成レジスタの一部を使用して、これらの割込みのすべてをディスエーブルすることができる。さらに、各ストリームが、これらの割込みを個別にマスクすることができるが、これは、別の特許出願の対象である。PMUが生成する割込みのリストは、次の通りである。
【0310】
1.OverflowStartedInt
(a)割込み条件:PMMUは、着信パケットをLocalPacketMemoryに保管できない時に、SIUを介してExternalPacketMemoryにパケットをオーバーフローする。
(b)ディスエーブル条件:OverflowEnable=「0」
【0311】
2.NoMorePagesOfXSizeInt
(a)割込み条件:IntIfNoMoreXSizePagesで示されたサイズの、使用可能な空き仮想ページがない。
(b)ディスエーブル条件:IntIfNoMoreXSizePages={10、11、12、13、14、15}。
【0312】
3.LessThanXPacketIdEntriesInt
(a)割込み条件:QS内で使用可能なエントリの実際の個数が、IntIfLessThanXPacketIdEntries未満である。
(b)ディスエーブル条件:IntIfLessThanXPacketIdEntries=0
【0313】
4.PacketAvailableButNoContextPriorityPint(P=0..7)
(a)割込み条件:パケットが、QSからRTUによって受け取られたが、使用可能なコンテキストがない。
【0314】
(b)ディスエーブル条件:PacketAvailableButNoContextPriorityPIntEnable=「0」
【0315】
5.AutomaticPacketDropInt
(a)割込み条件:パケットをLPMに保管することができず、OverflowEnable=「0」である時。
(b)ディスエーブル条件:AutomaticPacketDropIntEnable=「0」
【0316】
6.PacketErrorInt
(a)割込み条件:ASICから受け取られるパケットの実際のサイズが、ASIC固有ヘッダの最初の2バイトの値と一致しない時、またはバスエラーが発生した時。
(b)ディスエーブル条件:PacketErrorIntEnable=「0」
【0317】
この実施形態でのSPUへの割込みは、エッジトリガであり、これは、割込みがサービスされる時に、割込みを引き起こした条件がハードウェアでクリアされることを意味する。これは、割込みがSPUによってサービスされる前に、割込みを引き起こした条件が複数回発生する可能性があることも意味する。したがって、対応する割込みサービスルーチンは、割込みを引き起こした条件が複数回発生した場合であっても、1回だけ実行される。
【0318】
この挙動は、いくつかの割込みについて望ましくない。それらの場合について、割込みがサービスされるまでその条件がさらに発生しないことを保証する特殊なインターロック機構が、ハードウェアで実装される。
【0319】
特殊なインターロック機構の例が、OverflowStartedInt割込みおよびPacketAvailableButNoContextPriorityPInt割込みの場合である。第1の場合には、パケットがオーバーフローされた時に、ソフトウェアがオンザフライ構成レジスタOverflowAddressに新しいアドレスを書き込むまで、他のパケットはオーバーフローされない。パケットがオーバーフローされたが、OverflowAddressレジスタがまだソフトウェアによって書き込まれていない場合には、LPMにおさまらないのでそうでなければオーバーフローされるはずの後続のパケットを、ドロップしなければならない。
【0320】
8つのPacketAvailableButNoContextPriorityPInt(P=0..7)割込みについて、PMUアーキテクチャは、暗黙のうちに、複数の条件(Pのそれぞれについて)が発生しないことを保証する。これが設計によって保証されるのは、下記の理由による。
(a)PacketAvailableButNoContextPriorityPInt割込みは、RTU優先順位Pのパケット識別子がRTUに到達した時に限って生成され、
(b)RTU優先順位Pを有するパケット識別子は、多くとも1つだけがRTUに存在する。
【0321】
他の割込みは、複数の条件の影響をこうむる可能性がある。したがって、ソフトウェアは、条件が発生した回数を正確に知るために、所与のタイプの割込みが発生した回数をカウントすることに頼ってはならない。
【0322】
保護の問題
この実施形態のPMUのアーキテクチャは、下記の保護の問題を生じる。
【0323】
1.ストリームが、それが処理しているもの以外のパケットからデータを読み取る/書き込むことができる。ストリームは、すべてのパケットメモリにアクセスでき、パケットメモリがカーネルスペースとしてマッピングされない限り、ストリームが、全く関係のないパケットからのデータにアクセスできなくする機構がない。
【0324】
2.構成レジスタがメモリマップ式なので、どのストリームでも、SPUが単一ストリームモードであるか否かに無関係に、構成レジスタを更新することができる。具体的に言うと、どのストリームでも、PMUをフリーズし、リセットすることができる。
【0325】
3.パケットが、再アクティブ化を伴う完了または移動を行われる時に、必ず、ソフトウェアがそのパケットの「処理」を継続することを妨げるものがない。
【0326】
コマンドユニット(CU)
ソフトウェアは、所与のパケットについてPMUが維持するいくつかの情報を更新し、この情報を得ることができる。これは、上で参照した新しいXStreamパケット命令の一部を介して、ソフトウェアによって達成される。これらの命令の一部は、PMUからの応答を必要とするという意味で、ロード様である。他の命令は、ストア様命令であり、PMUからの応答を必要としない。
【0327】
図27は、この例のXCaliberの他のブロックに関連する、図2のコマンドユニット213の図であり、図27のブロックのすべてが、図2と同一の符号を有する。SPUは、すべてのコンテキストにまたがって1サイクルあたり多くとも2つのパケット命令をディスパッチする(SPUのクラスタごとに1命令)。パケット命令のタイプは、命令が影響するPMUブロック(PMMU、QS、またはRTU)に対応する。SPUがパケット命令をディスパッチする時に、PMUへの単一のコマンドが、生成され、CUブロック内の3つの異なるキューの1つに挿入される(コマンドが送られるPMUブロックごとに1つのキュー)。PMUに対するコマンドは、PMMUコマンドキュー2703に発行され、QSへのコマンドは、QSコマンドキュー2705に進み、RTUへのコマンドは、RTUコマンドキュー2707に進む。各キューが、8つまでのコマンドを保持することができる。SPUは、対応するキューに十分な空きエントリがある場合に限って、CUにコマンドをディスパッチする。
【0328】
CUは、コマンドをめいめいのブロックにディスパッチし、SPUに返される応答をキューイングする8エントリのResponseQueue2709に応答(ある場合に)を収集する責任を負う。CUは、所与のサイクルで3つ(3つのブロックのそれぞれから1つ)までの応答を受け取ることができる。(a)ストリームごとに1つの未解決のパケット命令だけが許容され、(b)Response Queueが、ストリームと同数のエントリを有し、(c)PMUに対するコマンドがパケット命令ごとに1つだけ生成され、(d)各ロード様コマンドごとに1つの応答だけが生成されるので、PMUブロックによって生成された応答をエンキューするのに十分なスペースがResponseQueueにあることが保証される。ResponseQueueは、1時に2つまでのコマンドをエンキューできなければならない。
【0329】
CU213は、SIU107から、構成レジスタを更新する要求も受け取る。これらのコマンドは、コマンドとしてPMMU、RTU、およびQSブロックにも送られる。PMMU、QS、およびRTUは、それらに適用される構成レジスタのローカルコピーを保持する。CUも、すべての構成レジスタのコピーを保持し、このコピーが、SIUからの構成レジスタ読取を満足するのに使用される。
【0330】
読取専用構成レジスタに関して、CUと読取専用構成レジスタを所有する特定のユニットとの間に特殊なインターフェースが設けられる。XCaliberのPMU内には、2つの読取専用構成レジスタが存在し、一方はPMMUブロック内(SizeOfOverflowedPacket)、他方はCUブロック内(StatusRegister)に存在する。PMMUは、SizeOfOverflowedPacketレジスタに書き込む時に、必ず、CUに通知し、CUは、そのローカルコピーを更新する。
【0331】
異なるキュー内のコマンドは、独立であり、PMUによって順序はずれで実行することができる。しかし、キュー内では、コマンドが、順番に、1時に1つずつ実行される。PMUは、1サイクルあたり3つまでのコマンドの実行を開始することができる。PMMUブロックおよびQSブロックは、他のイベント(新しいパケットがPMMUに達した時の新しいpacketPageの作成、またはQSに送出する必要があるパケット識別子の抽出など)に、SPUからのコマンドより高い優先順位を与える。これは、SPUにデータを送り返すことを要求するコマンドが、PMMUまたはQSのいずれかが他の動作の実行でビジーなので、実行に複数サイクルを要する可能性があることを意味する。
【0332】
RTU227は、コマンドの2つのソースすなわち、QS(使用可能なコンテキストにパケット情報をプリロードするため)およびSPU(ソフトウェアコマンド)を有する。RTUは、必ず、より高い優先順位をSPUコマンドに与える。しかし、RTUは、保留中のSPUコマンドを実行する前に、進行中のコンテキストプリロード動作を終了する。
【0333】
コマンド/応答フォーマット
CMUによって受け取られるコマンドは、この実施形態では3つのフィールドを有する。
1.コンテキスト番号。これは、コマンドを生成したストリームに関連するコンテキストである。
2.コマンドオペコード。これは、PMUによって実行されるコマンドのタイプを指定する数である。
3.コマンドデータ。これは、コマンドオペコードフィールドで指定されたコマンドを実行するために、PMUが必要とする異なる情報である。
【0334】
PMUは、コマンドを受け取った時に、そのコマンドを挿入する必要があるコマンドキューがどれであるかを判定する。キューのいずれかに挿入されたコマンドは、受け取られたコマンドに類似する構造を有するが、オペコードおよびデータのビット幅は、キューによって変化する。図28の表に、キューのそれぞれに挿入されるコマンドのフォーマットを示す。含まれていないのが、CUがPMMUブロック、QSブロック、およびRTUブロックに送るRead Configuration RegisterコマンドおよびWrite Configuration Registerコマンドである。
【0335】
応答を必要とするコマンドのそれぞれが、そのコマンドを生成したストリームに関連するコンテキストに対応する番号を用いてタグを付けられる。生成される応答も、同一のコンテキスト番号を用いてタグを付けられ、その結果、SPUが、発行されたコマンドのどれにその応答が属するかを知るようになる。
【0336】
上で説明したように、3つのPMUブロックからの応答をバッファリングするResponseQueue2709(図27)が、1つだけ存在する。応答を必要とするパケット命令が、ストリームごとに多くとも1つが未解決になるので、応答がどのブロックから来たかを示す必要がないことに留意されたい。したがって、応答に関連するコンテキスト番号は、応答をストリームに関連付けるのに十分な情報である。
【0337】
図29は、異なるブロックが生成してCUに返す応答のフォーマットを示す表である。この表に含まれていないのは、CUが構成レジスタ読取を実行する時の、ブロックのそれぞれによってCUに供給される構成レジスタ値である。
【0338】
RTUは、下記のイベントについて、CUをバイパスする専用インターフェース(図27の経路2711)を介してSPUに通知する。
【0339】
1.マスクドロード/ストア動作が完了した。インターフェースは、コンテキスト番号を供給する。
【0340】
2.GetContextが完了した。GetContext動作をディスパッチしたストリームに関連するコンテキスト番号およびRTUによって選択されたコンテキスト番号が、インターフェースによって供給される。GetContextが成功した時には、成功ビットがアサートされ、そうでない場合にはデアサートされる。
【0341】
3.プリロードの開始または終了。パケットに関連するコンテキスト番号および優先順位が、SPUに供給される。
【0342】
リセットモードおよびフリーズモード
PMUは、次の2つの場合にリセットモードに入ることができる。
1.SPUがReset構成フラグをセットした。
2.XCaliberがブートされた。
【0343】
PMUは、次の2つの場合にフリーズモードに入ることができる。
1.SPUがFreeze構成フラグをセットした。
2.PMUがリセットシーケンスを完了した
【0344】
PMUのリセットシーケンスは、数サイクルを要する。このシーケンス中に、StatusRegister構成レジスタのResetビットがセットされる。リセットシーケンスの後に、すべての構成レジスタに、そのデフォルト値がセットされ、PMUが、フリーズモードに入る(StatusRegisterのResetビットが、リセットされ、Freezeビットがセットされる)。これが終わった時に、SPUが、Freeze構成フラグをリセットし、その時点から、PMUが通常モードで動作する。
【0345】
SPUが、Freeze構成フラグをセットする時に、PMUは、StatusRegisterのFreezeビットをセットする前に、現在の1つまたは複数のトランザクションを終了する。フリーズモードに入った後は、PMUは、ネットワーク入力インターフェースからのデータを受け入れず、ネットワーク出力インターフェースを介してデータを送出せず、パケットをプリロードしない。
【0346】
PMUは、フリーズモードである間にすべてのSPUコマンドの実行を継続する。
【0347】
SPUは、StatusRegister構成レジスタをポーリングして、PMUがどのモードであるか(リセットまたはフリーズ)を判定し、PMUがモードを変更する時を検出する必要がある。
【0348】
CUブロックは、残りのブロックに、リセットおよびフリーズを実行するように指示する。下記は、CUがリセットおよび/またはフリーズ構成ビットへの書込を受け取る時の、CUと他のブロックの間のプロトコルである。
1.CUは、フリーズまたはリセットのいずれかを実行する必要があるブロックに通知する。
2.すべてのブロックが、フリーズまたはリセットを実行する。完了の後に、ブロックが、フリーズまたはリセットを完了したことをCUにシグナルバックする。
3.CUは、リセットまたはフリーズが完了されるや否や、StatusRegisterのビットを更新する。ソフトウェアが、StatusRegisterをポーリングして、PMUが完全にフリーズした時を判定する。
【0349】
PMU内の異なるブロックは、下記の時にフリーズを終了する。
1.IB、LPM、CU、およびQSは、フリーズする必要がない。
2.インバウンドパケットがある場合に、PMMUがインバウンドパケットのアップロードを終了すると同時に、およびアウトバウンドパケットがある場合に、PMMUがそのダウンロードを終了すると同時に。
3.プリロード動作がある場合に、RTUが現在のプリロード動作を終了すると同時に。
4.OBが空になると同時に。
【0350】
フリーズモードの時には、ブロックは、
1.新しいパケットのアップロードを開始せず、完了したパケットのダウンロードを開始せず、SPU(PMMU)への割込みを生成せず、
2.コンテキストをプリロードせず、SPU(RTU)への割込みを生成しない。
【0351】
ソフトウェアが、Freeze/Reset構成レジスタに「1」を書き込み、その後、PMUがフリーズまたはリセットする前に「0」を書き込む場合に、結果は未定義である。PMUは、フリーズ/リセットシーケンスを開始した後に、それを完了する。
【0352】
性能カウンタインターフェース
PMUは、異なるユニット内のいくつかのイベントをプローブする。これらのプローブは、SIUに送られ、性能プローブとしてソフトウェアによって使用される。SIUは、PMUがSIUに送るイベントの一部をカウントするのに使用されるカウンタの組を有する。ソフトウェアが、XCaliberチップ全体を通じて監視したいイベントを決定する。ソフトウェアが性能カウンタをどのように構成できるかに関するさらなる情報については、SUIアーキテクチャ仕様文書を参照されたい。
【0353】
図30に、PMUとSIUの間の性能カウンタインターフェースを示す。64個までのイベントを、PMU内でプローブすることができる。64個のすべてのイベントが、各サイクルに、64ビットバスを介してSIU(EventVector)に送られる。
【0354】
64個のイベントのそれぞれに、値(0から64K−1)を関連付けることができる。ソフトウェアが、イベントのうちの2つを選択する(EventAおよびEventB)。この2つのそれぞれについて、PMUが、イベントがEventVectorバスに供給されるのと同時に、関連する16ビット値(それぞれEventDataAおよびEventDataB)を供給する。
【0355】
イベントは、レベルトリガである。したがって、PMUが、2つの連続するサイクルにわたってイベントをアサートする場合に、そのイベントは、2回カウントされる。EventVectorの対応する信号は、イベントが発生した場合に限って、イベントの状態が保持されるサイクルにわたってアサートされる。
【0356】
SIUは、実際にカウントされるイベントを選択する(ソフトウェアがSIUをどのようにプログラムしたかに基づく)。SIUが、EventAまたはEventBと異なるイベント番号をカウントすると決定した場合に、SIU内のカウンタが、EventVector内の対応するビットがアサートされるサイクルについてイベントをカウントする。監視されるイベントがEventAおよび/またはEventBである場合に、SIUは、イベント/sをカウントするほかに、イベントが発生するたびに、EventDataAおよび/またはEventDataBによってもう1つのカウンタを増分する。
【0357】
図31に、PMU103内の異なるブロック間の内部インターフェースの可能な実装を示す。CUは、PMUとSIUの間の、性能カウンタに関するインターフェースとして働く。CU213は、EventAおよびEventB内の情報を異なるユニットに分配し、ユニットのそれぞれの個々のEventVector、EventDataA、およびEventDataBを収集する。
【0358】
CUブロックは、異なるブロックからすべてのイベントを収集し、それらをSIUに送る。CUは、異なるブロックとインターフェースして、各ブロック内のどのイベントがEventDataAおよび/またはEventDataB値を提供する必要があるかを通知する。
【0359】
性能イベントは、タイムクリティカルではない、すなわち、性能イベントは、発生したのと同一のサイクルにSIUに報告される必要がない。
【0360】
図34から39に、性能カウンタに関連するすべてのイベントをリストした表が含まれる。これらのイベントは、PMU内のブロックによってグループ化される。イベント番号を、第2列に示す。この番号は、イベントが発生する時にアサートされる、EventVector内のビットに対応する。第3列は、イベント名である。第4列に、イベントに関連するデータ値と、括弧内にそのビット幅を示す。最後の列に、イベントの説明を示す。
【0361】
CUブロックは、異なるブロックからすべてのイベントを収集し、それらをSIUに送る。CUは、異なるブロックとインターフェースして、各ブロック内のどのイベントがEventDataAおよび/またはEventDataB値を提供する必要があるかを通知する。
【0362】
性能イベントは、タイムクリティカルではない、すなわち、性能イベントは、発生したのと同一のサイクルにSIUに報告される必要がない。
【0363】
デバッグバイパスおよびトリガイベント
ハードウェアデバッグフックが、シリコンのデバッグを助けるためにPMU内で実装されている。デバッグフックは、下記の2つのカテゴリに分類される。
1.バイパスフック:これによって、潜在的に欠陥のある機能をバイパスする。これらの機能によって生成される不完全な結果(または、場合によっては、結果が全くない)の代わりに、バイパスフックは、他の隣接するブロックをテストできるようにする少なくともいくつかの機能性を提供する。
2.トリガイベント:PMU内で特定の条件(トリガイベント)が発生する時に、PMUは、自動的にシングルステップモードに入り、これは、OCIインターフェース(セクション)を介して、SIUがシングルステップモードを抜けるコマンドをPMUに送るまで続く。
【0364】
さらに、PMUは、シングルステップされる能力を有する。信号(SingleStep)が、OCIインターフェースから来る。サイクルごとに、PMUの異なるブロックが、この信号を監視する。この信号がデアサートされている時に、PMUは、普通に機能する。SingleStepがアサートされた時に、PMUは、作業を一切実行しなくなり、進行中のすべての動作が、この信号がデアサートされるまで保持される。言い換えると、PMUは、この信号がアサートされた時に何も行わない。これに対する唯一の例外が、ブロックがデータを失う可能性がある時である(例は、2つのブロックの間のインターフェース内とすることができる。ブロックAが、データをブロックBに送り、ブロックBが次のサイクルにそのデータを得ると仮定する。SingleStepがこのサイクルにアサートされた場合には、ブロックBは、Aからのデータが失われないことを保証しなければならない)。
【0365】
バイパスフック
PMU内の異なるバイパスフックは、オンザフライBypassHooks構成レジスタを介してアクティブ化される。図40は、PMU内で実装される異なるバイパスフックを示す表である。各フックの番号は、BypassHooksレジスタ内のビット番号に対応する。バイパスフックは、このレジスタ内の対応するビットがアサートされているサイクルの間、適用される。
【0366】
トリガイベント
下記は、PMU内で実装されるトリガイベントのリストである。
【0367】
1.サイズsバイトの新しいパケットが、IBUの先頭にある。
【数3】
Figure 0003801919
【0368】
2.packetPage ppを有するソースsからのpacketIdが、QSのキューqに挿入される。
【数4】
Figure 0003801919
【0369】
3.packetPage ppおよびpacketNumbet pnを有するキューqからのpacketIdが、RTUに送られる。
【数5】
Figure 0003801919
【0370】
4.packetPage ppおよびpacketNumber pnを有するpacketIdが、QSのキューqの先頭に達する。
【数6】
Figure 0003801919
【0371】
5.RTU優先順位pとpacketPage ppおよびpacketNumber pnを有するパケットが、コンテキストcにプリロードされる。
【数7】
Figure 0003801919
【0372】
6.packetPage ppおよびpacketNumber pnを有するキューqからのpacketIdが、ダウンロードのためにPMMに送られる。
【数8】
Figure 0003801919
【0373】
7.packetPage ppおよびpacketNumber pnを有するpacketIdが、QSのキューqの先頭に達する。
【数9】
Figure 0003801919
【0374】
8.パケットコマンドpcが、ブロックbによって実行される。
【数10】
Figure 0003801919
【0375】
SPUおよびSIUとの詳細なインターフェース
前の節で説明したアーキテクチャは、図41に示されたハードウェアブロックで実装される。
【0376】
SPU−PMUインターフェース
図42から45で、SPU−PMUインターフェースを説明する。
【0377】
SPU−PMUインターフェース
図46から49で、SIU−PMUインターフェースを説明する。
【0378】
上の明細書で、パケットの処理に適応するマルチストリーミングプロセッサのパケットメモリユニット(PMU)を権能を付与する詳細で説明した。アーキテクチャ、ハードウェア、ソフトウェア、および動作の詳細が、例示的実施形態で与えられる。説明した実施形態を、本発明の趣旨および範囲から逸脱せずにかなり詳細に変更できることが、当業者に明白であろう。たとえば、教示された新規のアーキテクチャおよび機能性を厳守しながらICハードウェア、ファームウェア、およびソフトウェアをさまざまな形で達成できることが、よく知られている。したがって、添付の請求項は、最も広義の解釈と一致しなければならない。
【図面の簡単な説明】
【図1】 本発明の好ましい実施形態のDMSプロセッサの機能領域の関係を示す単純化されたブロック図である。
【図2】 追加の詳細を示す、図1のDMSプロセッサのブロック図である。
【図3】 本発明の実施形態でのLPMまたはEPMへのデータのアップロードを示すブロック図である。
【図4a】 本発明の実施形態でのデータアップロードのための判定および割振りを示す図である。
【図4b】 4つの64KBブロックのそれぞれについて維持される必要がある状態を示す図である。
【図5a】 本発明の実施形態でアトミックページがどのように割り振られるかの例を示す図である。
【図5b】 本発明の実施形態でアトミックページがどのように割り振られるかの例を示す図である。
【図6a】 本発明の実施形態でメモリスペースがどのように効率的に使用されるかを示す図である。
【図6b】 本発明の実施形態でメモリスペースがどのように効率的に使用されるかを示す図である。
【図7】 パケットのダウンロードに使用されるXCaliber PMUユニットのブロックの最上位の概略を示す図である。
【図8】 パケットの増大および縮小の現象を示す図である。
【図9】 本発明の実施形態での、QSと、PMUおよびSPU内の他のブロックとの間の高水準通信を示すブロック図である。
【図10】 QSを構成できる、本発明の実施形態での6つの異なるモードを示す表である。
【図11】 本発明の実施形態での、図2および図7のQSの包括的なアーキテクチャを示す図である。
【図12】 本発明の実施形態でのアウトバウンドDeviceIdフィールドのコーディングを示す表である。
【図13】 本発明の実施形態でのRTU転送の優先順位マッピングを示す表である。
【図14】 本発明の実施形態での有効パケットのActiveビット、Completedビット、およびProbedビットの許容される組合せを示す表である。
【図15】 本発明の実施形態でのパターン照合テーブルの図である。
【図16】 本発明の1実施形態でのマスクのフォーマットを示す図である。
【図17】 図16のマスクを使用するプリロード動作の例を示す図である。
【図18】 本発明の実施形態でのPMU構成スペースを示す図である。
【図19a】 構成レジスタマッピングの表である。
【図19b】 構成レジスタマッピングの表である。
【図19c】 構成レジスタマッピングの表である。
【図20】 PreloadMaskNumber構成レジスタを示す図である。
【図21】 本発明の好ましい実施形態のPatternMatchingTableを示す図である。
【図22】 本発明の好ましい実施形態のVirtualPageEnable構成レジスタを示す図である。
【図23】 本発明の好ましい実施形態のContextSpecificPatternMatchingMask構成レジスタを示す図である。
【図24】 本発明の実施形態のMaxActivePackets構成レジスタを示す図である。
【図25】 本発明の実施形態のTimeCounter構成レジスタを示す図である。
【図26】 本発明の実施形態のStatusRegister構成レジスタを示す図である。
【図27】 本発明の実施形態のコマンドユニットおよびコマンドキューの概略を示す図である。
【図28】 本発明の実施形態のコマンドキューに挿入されるコマンドのフォーマットを示す表である。
【図29】 本発明の実施形態の異なるブロックが生成してCUに返す応答のフォーマットを示す図である。
【図30】 本発明の実施形態のPMUとSIUの間の性能カウンタインターフェースを示す図である。
【図31】 本発明の実施形態のPMU内の異なるユニット間の内部インターフェースの可能な実装を示す図である。
【図32】 本発明の実施形態のBypassHooks構成レジスタの図である。
【図33】 本発明の実施形態のInternalStateWrite構成レジスタの図である。
【図34】 本発明の実施形態の性能カウンタに関連するイベントをリストした表である。
【図35】 本発明の実施形態の性能カウンタに関連するイベントをリストした表である。
【図36】 本発明の実施形態の性能カウンタに関連するイベントをリストした表である。
【図37】 本発明の実施形態の性能カウンタに関連するイベントをリストした表である。
【図38】 本発明の実施形態の性能カウンタに関連するイベントをリストした表である。
【図39】 本発明の実施形態の性能カウンタに関連するイベントをリストした表である。
【図40】 本発明の実施形態のPMU内で実装される異なるバイパスフックを示す表である。
【図41】 本発明の実施形態の関連するアーキテクチャブロックおよびハードウェアブロックを示す表である。
【図42】 本発明の実施形態のSPU−PMUインターフェースを示す表である。
【図43】 本発明の実施形態のSPU−PMUインターフェースを示す表である。
【図44】 本発明の実施形態のSPU−PMUインターフェースを示す表である。
【図45】 本発明の実施形態のSPU−PMUインターフェースを示す表である。
【図46】 本発明の実施形態のSIU−PMUインターフェースを示す表である。
【図47】 本発明の実施形態のSIU−PMUインターフェースを示す表である。
【図48】 本発明の実施形態のSIU−PMUインターフェースを示す表である。
【図49】 本発明の実施形態のSIU−PMUインターフェースを示す表である。

Claims (59)

  1. データパケットプロセッサにおいて、処理中のパケットアカウンティング用の構成可能なキューイングシステムであって、
    1つまたは複数のクラスタに配置された複数のキューと、
    到着するパケットのパケット識別子を作成する識別機構と、
    パケット識別子をキューに挿入し、パケット識別子をどのキューに挿入するかを決定する挿入論理と、
    識別されたパケットの処理、完了したパケットのダウンロードの開始のためにキューからパケット識別子を選択し、または選択したパケット識別子を再キューイングする選択論理と
    を有するキューイングシステム。
  2. すべてのキューのパケット識別子の総数が、固定され、クラスタの数およびクラスタごとのキューの数を、1から同一の最大個数まで変化することができ、クラスタの数が1と等しい場合、キューの数が最大個数になり、逆も同様である、請求項1に記載のキューイングシステム。
  3. キューの数を決定するクラスタの相対的な数が、プロセッサに関連する構成レジスタをセットすることによってセットされる、請求項2に記載のキューイングシステム。
  4. パケット識別子の総数が256であり、256個のパケットが、どの時点でもデータパケットプロセッサで処理中になることができることを意味する、請求項2に記載のキューイングシステム。
  5. クラスタまたはキューのいずれかの最大個数が32であり、クラスタまたはキューの数が2のべきになるように制御される、請求項2に記載のキューイングシステム。
  6. 作成される前記パケット識別子が、前記パケット自体が処理中に保管されるメモリ位置に関連する、請求項1に記載のキューイングシステム。
  7. 処理中にパケットデータを保管するオンボードメモリが、パケットページに配置され、前記パケット識別子が、パケットの前記パケットデータが保管されるパケットページの先頭を識別するアドレスである、請求項6に記載のキューイングシステム。
  8. 作成されキューイングされる前記パケット識別子が、前記メモリ位置の他に、前記パケットがそこから受信された装置の1つまたは複数の識別子と、前記パケットが処理中に総サイズが増加または減少したかの表示と、関連するパケットに関する処理が完了したか否かの表示と、前記パケット識別子を挿入すべき次のキューと、前記パケットが現在処理中であるかどうかの識別子とを含む、請求項6に記載のキューイングシステム。
  9. 前記挿入論理が、パケットの優先順位を決定し、決定した前記優先順位に応じて前記パケットを特定のキューに挿入する、請求項1に記載のキューイングシステム。
  10. クラスタが、番号を付けられ、識別されたパケットを処理する優先順位が、クラスタ番号による、請求項9に記載のキューイングシステム。
  11. 選択システムが、前記パケット識別子にセットされた次のキュー番号の値に基づいて再キューイングするパケットを選択する、請求項8に記載のキューイングシステム。
  12. 選択システムが、関連するパケットに関する処理が完了したかどうかの表示の値に基づいて、ダウンロードするパケットを選択する、請求項8に記載のキューイングシステム。
  13. 選択システムが、キュー番号による優先順位に基づいて処理するパケットを選択する、請求項10に記載のキューイングシステム。
  14. 処理するパケットを選択するために優先順位クラスタのキューを選択する時に、公平アルゴリズムを伴う、請求項13に記載のキューイングシステム。
  15. 前記データパケットプロセッサが、コンテキストレジスタによって実施され個々のストリームに関連する別々のコンテキストを有するマルチストリーミングプロセッサであり、選択システムが、選択された識別子に関連するパケットからのヘッダ情報を、使用可能なコンテキストにロードさせる、請求項1に記載のキューイングシステム。
  16. ストリームより多数のコンテキストがあり、使用可能なコンテキストへのヘッダ情報のローディングが、バックグラウンドで、すなわち、パケットの処理と並列に、達成される、請求項15に記載のキューイングシステム。
  17. プロセッサによって実行されるソフトウェアが、パケット識別子のフィールドの個々の値を操作することが可能な、請求項8に記載のキューイングシステム。
  18. 前記挿入論理が、少なくとも部分的にフローに従って、パケットをキューに挿入し、挿入および選択論理が、個々のフローのパケット順序を保存するために協力する、請求項1に記載のキューイングシステム。
  19. 前記挿入論理が、ネットワークまたは交換装置から着信するパケットを、キューへの識別子挿入に関する最高の優先順位を用いて扱い、再キューイングするパケット識別子を次に高い優先順位を用いて扱い、ソフトウェアによって生成されるパケットの識別子を最低の優先順位を用いて扱う、請求項1に記載のキューイングシステム。
  20. データパケットプロセッサであって、
    1つまたは複数のソースからの着信パケットをバッファリングする入力バッファと、
    処理中にパケットデータを保管するローカルパケットメモリと、
    パケットデータを処理するストリームプロセッサユニットと、
    処理中のパケットアカウンティング用の構成可能なキューイングシステムと
    を含み、前記キューイングシステムが、1つまたは複数のクラスタに配置された複数のキューと、到着するパケットのパケット識別子を作成する識別機構と、パケット識別子をキューに挿入し、パケット識別子をどのキューに挿入するかを決定する挿入論理と、識別されたパケットの処理の開始のためにキューからパケット識別子を選択し、完了したパケットをダウンロードし、または選択したパケット識別子を再キューイングする選択論理とを含む
    データパケットプロセッサ。
  21. すべてのキューのパケット識別子の総数が固定され、クラスタの数およびクラスタごとのキューの数が、1から同一の最大個数まで変化することができ、クラスタの数が1と等しい場合、キューの数が最大個数になり、逆も同様である、請求項20に記載のプロセッサ。
  22. キューの数を決定するクラスタの相対的な数が、プロセッサに関連する構成レジスタをセットすることによってセットされる、請求項21に記載のプロセッサ。
  23. パケット識別子の総数が256であり、256個のパケットが、どの時点でも前記データパケットプロセッサで処理中になることができることを意味する、請求項21に記載のプロセッサ。
  24. クラスタまたはキューのいずれかの最大個数が32であり、クラスタまたはキューの数が2のべきになるように制御される、請求項21に記載のプロセッサ。
  25. 作成される前記パケット識別子が、前記パケット自体が処理中に保管されるメモリ位置に関連する、請求項20に記載のプロセッサ。
  26. 処理中にパケットデータを保管するオンボードメモリが、パケットページに配置され、前記パケット識別子が、パケットの前記パケットデータが保管されるパケットページの先頭を識別するアドレスである、請求項25に記載のプロセッサ。
  27. 作成されキューイングされる前記パケット識別子が、前記メモリ位置の他に、前記パケットがそこから受信された装置の1つまたは複数の識別子と、前記パケットが処理中に総サイズが増加または減少したかの表示と、関連するパケットに関する処理が完了したか否かの表示と、前記パケット識別子を挿入すべき次のキューと、前記パケットが現在処理中かどうかの識別子とを含む、請求項25に記載のプロセッサ。
  28. 前記挿入論理が、パケットの優先順位を決定し、決定した前記優先順位に応じて前記パケットを特定のキューに挿入する、請求項20に記載のプロセッサ。
  29. クラスタが、番号を付けられ、識別されたパケットを処理する優先順位が、クラスタ番号による、請求項28に記載のプロセッサ。
  30. 選択システムが、前記パケット識別子にセットされた次のキュー番号の値に基づいて再キューイングするパケットを選択する、請求項27に記載のプロセッサ。
  31. 選択システムが、関連するパケットに関する処理が完了したかどうかの表示の値に基づいて、ダウンロードするパケットを選択する、請求項27に記載のプロセッサ。
  32. 選択システムが、キュー番号による優先順位に基づいて処理するパケットを選択する、請求項29に記載のプロセッサ。
  33. 処理するパケットを選択する優先順位クラスタのキューを選択する時に、公平アルゴリズムを伴う、請求項32に記載のプロセッサ。
  34. 前記データパケットプロセッサが、コンテキストレジスタによって実施され個々のストリームに関連する別々のコンテキストを有するマルチストリーミングプロセッサであり、選択システムが、選択された識別子に関連するパケットからのヘッダ情報を、使用可能なコンテキストにロードさせる、請求項20に記載のプロセッサ。
  35. ストリームより多数のコンテキストがあり、使用可能なコンテキストへのヘッダ情報のローディングが、バックグラウンドで、すなわち、パケットの処理と並列に、達成される、請求項34に記載のプロセッサ。
  36. プロセッサによって実行されるソフトウェアが、パケット識別子のフィールドの個々の値を操作することができる、請求項27に記載のプロセッサ。
  37. 前記挿入論理が、少なくとも部分的にフローに従って、パケットをキューに挿入し、挿入および選択論理が、個々のフローでパケットの順序を保存するために協力する、請求項20に記載のプロセッサ。
  38. 前記挿入論理が、ネットワークまたは交換装置から着信するパケットを、キューへの識別子挿入に関する最高の優先順位を用いて扱い、再キューイングするパケット識別子を次に高い優先順位を用いて扱い、ソフトウェアによって生成されるパケットの識別子を最低の優先順位を用いて扱う、請求項20に記載のプロセッサ。
  39. データパケットプロセッサのパケットのアカウンティングの方法であって、
    (a)プロセッサで1つまたは複数のクラスタに複数のキューを設けるステップと、
    (b)到着するパケットのパケット識別子を作成するステップと、
    (c)どのキューに挿入するかを決定する論理を有する挿入機構によってパケット識別子をキューに挿入するステップと、
    (d)識別されたパケットの処理の開始、完了したパケットのダウンロード、または選択されたパケット識別子の再キューイングのために、選択論理によってキューからパケット識別子を選択するステップと
    を含む方法。
  40. すべてのキューのパケット識別子の総数が、固定され、クラスタの数およびクラスタごとのキューの数が、1から同一の最大個数まで変化することができ、クラスタの数が1と等しい場合に、キューの数が最大個数になり、逆も同様である、請求項39に記載の方法。
  41. キューの数を決定するクラスタの相対的な数が、プロセッサに関連する構成レジスタをセットすることによってセットされる、請求項40に記載の方法。
  42. パケット識別子の総数が256であり、256個のパケットが、どの時点でもデータパケットプロセッサで処理中になることができることを意味する、請求項40に記載の方法。
  43. クラスタまたはキューのいずれかの最大個数が32であり、クラスタまたはキューの数が2のべきになるように制御される、請求項40に記載の方法。
  44. 作成される前記パケット識別子が、前記パケット自体が処理中に保管されるメモリ位置に関連する、請求項39に記載の方法。
  45. 処理中にパケットデータを保管するオンボードメモリが、パケットページに配置され、前記パケット識別子が、パケットの前記パケットデータが保管されるパケットページの先頭を識別するアドレスである、請求項44に記載の方法。
  46. 作成され、キューイングされる前記パケット識別子が、前記メモリ位置の他に、前記パケットがそこから受信された装置の1つまたは複数の識別子と、前記パケットが処理中に総サイズが増加または減少したかの表示と、関連するパケットに関する処理が完了したか否かの表示と、前記パケット識別子を挿入すべき次のキューと、前記パケットが現在処理中であるかの識別子とを含む、請求項44に記載の方法。
  47. 前記挿入論理が、パケットの優先順位を決定し、決定した前記優先順位に応じて前記パケットを特定のキューに挿入する、請求項39に記載の方法。
  48. クラスタが、番号を付けられ、識別したパケットを処理する優先順位が、クラスタ番号による、請求項47に記載の方法。
  49. 選択システムが、前記パケット識別子にセットされた次のキュー番号の値に基づいて再キューイングのためにパケットを選択する、請求項46に記載の方法。
  50. 選択システムが、関連するパケットに関する処理が完了したかどうかの表示の値に基づいて、ダウンロードのためにパケットを選択する、請求項46に記載の方法。
  51. 選択システムが、キュー番号による優先順位に基づく処理のためにパケットを選択する、請求項48に記載の方法。
  52. 処理のためにパケットを選択する優先順位クラスタのキューを選択する時に、公平アルゴリズムを伴う、請求項43に記載の方法。
  53. 前記データパケットプロセッサが、コンテキストレジスタによって実施され、個々のストリームに関連する別々のコンテキストを有するマルチストリーミングプロセッサであり、選択システムが、選択された識別子に関連するパケットからのヘッダ情報を、使用可能なコンテキストにロードさせる、請求項39に記載の方法。
  54. ストリームより多数のコンテキストがあり、使用可能なコンテキストへのヘッダ情報のローディングが、バックグラウンドすなわち、パケットの処理と並列に、達成される、請求項53に記載の方法。
  55. プロセッサによって実行されるソフトウェアが、パケット識別子のフィールドの個々の値を操作することが可能な、請求項48に記載の方法。
  56. 前記挿入論理が、少なくとも部分的にフローに従って、パケットをキューに挿入し、挿入および選択論理が、個々のフローのパケット順序を保存するために協力する、請求項39に記載の方法。
  57. 前記挿入論理が、ネットワークまたは交換装置から着信するパケットを、キューへの識別子挿入のために最高の優先順位を用いて扱い、再キューイングされるパケット識別子を次に高い優先順位を用いて扱い、ソフトウェアによって生成されるパケットの識別子を最低の優先順位を用いて扱う、請求項39に記載の方法。
  58. 処理を待っている到着するパケットを管理するキューイングシステムを有するデータパケットプロセッサにおいて、
    パケット番号の固定された範囲と、
    割当機構と
    を有し、前記割当機構が、前記固定された範囲の個別の番号をアカウンティングし、前記キューイングシステムのパケットが処理のために送られるかソフトウェアがパケットをアクティブにする時に番号を無効とマークし、前記キューイングシステムに置かれる新たに到着したパケットに無効な番号を再割り当てすることを特徴とする
    パケット番号付けシステム。
  59. ある時点でパケットに割り当てられたパケット番号が別の時点で同一のパケットに割り当てられることを保証するために、プローブビットが各パケットに関連付けられ、前記プローブビットが、パケット番号が割り当てられる時にデアサートされ、ストリームによって実行されるプローブ・アンド・セット(Probe and Set)コマンドによってアサートされ、プローブビットがアサートされた後のどの時刻にも、アサートされたプローブビットが、前記パケット番号が前記同一のパケットに関連することを示すようにすることを特徴とする、請求項58に記載のシステム。
JP2001558844A 2000-02-08 2001-01-08 パケットルーティング動作におけるプロセッサ用キューイングシステム Expired - Fee Related JP3801919B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US18136400P 2000-02-08 2000-02-08
US60/181,364 2000-02-08
US09/737,375 2000-12-14
US09/737,375 US7058064B2 (en) 2000-02-08 2000-12-14 Queueing system for processors in packet routing operations
PCT/US2001/000587 WO2001059585A1 (en) 2000-02-08 2001-01-08 Queueing system for processors in packet routing operations

Publications (2)

Publication Number Publication Date
JP2003523112A JP2003523112A (ja) 2003-07-29
JP3801919B2 true JP3801919B2 (ja) 2006-07-26

Family

ID=26877123

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001558844A Expired - Fee Related JP3801919B2 (ja) 2000-02-08 2001-01-08 パケットルーティング動作におけるプロセッサ用キューイングシステム

Country Status (7)

Country Link
US (3) US7058064B2 (ja)
EP (1) EP1259888B1 (ja)
JP (1) JP3801919B2 (ja)
AT (1) ATE460030T1 (ja)
AU (1) AU2001227736A1 (ja)
DE (1) DE60141452D1 (ja)
WO (1) WO2001059585A1 (ja)

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7065096B2 (en) 2000-06-23 2006-06-20 Mips Technologies, Inc. Method for allocating memory space for limited packet head and/or tail growth
US7032226B1 (en) 2000-06-30 2006-04-18 Mips Technologies, Inc. Methods and apparatus for managing a buffer of events in the background
US7155516B2 (en) 2000-02-08 2006-12-26 Mips Technologies, Inc. Method and apparatus for overflowing data packets to a software-controlled memory when they do not fit into a hardware-controlled memory
US7058064B2 (en) 2000-02-08 2006-06-06 Mips Technologies, Inc. Queueing system for processors in packet routing operations
US7649901B2 (en) 2000-02-08 2010-01-19 Mips Technologies, Inc. Method and apparatus for optimizing selection of available contexts for packet processing in multi-stream packet processing
US7058065B2 (en) 2000-02-08 2006-06-06 Mips Tech Inc Method and apparatus for preventing undesirable packet download with pending read/write operations in data packet processing
US7042887B2 (en) * 2000-02-08 2006-05-09 Mips Technologies, Inc. Method and apparatus for non-speculative pre-fetch operation in data packet processing
US20010052053A1 (en) * 2000-02-08 2001-12-13 Mario Nemirovsky Stream processing unit for a multi-streaming processor
US7076630B2 (en) * 2000-02-08 2006-07-11 Mips Tech Inc Method and apparatus for allocating and de-allocating consecutive blocks of memory in background memo management
US7165257B2 (en) * 2000-02-08 2007-01-16 Mips Technologies, Inc. Context selection and activation mechanism for activating one of a group of inactive contexts in a processor core for servicing interrupts
US7139901B2 (en) * 2000-02-08 2006-11-21 Mips Technologies, Inc. Extended instruction set for packet processing applications
US7082552B2 (en) * 2000-02-08 2006-07-25 Mips Tech Inc Functional validation of a packet management unit
US7502876B1 (en) 2000-06-23 2009-03-10 Mips Technologies, Inc. Background memory manager that determines if data structures fits in memory with memory state transactions map
US7000034B2 (en) * 2000-03-02 2006-02-14 Agere Systems Inc. Function interface system and method of processing issued functions between co-processors
US7162615B1 (en) 2000-06-12 2007-01-09 Mips Technologies, Inc. Data transfer bus communication using single request to perform command and return data to destination indicated in context to allow thread context switch
GB2371705B (en) * 2001-01-30 2003-04-23 3Com Corp Network switch with mutually coupled look-up engine and network processor
JP2004071103A (ja) * 2002-08-08 2004-03-04 Sharp Corp 自己同期型fifoメモリ装置
US7263105B2 (en) * 2002-12-18 2007-08-28 Intel Corporation WLAN device and method for interfacing between a MAC sublayer and a physical layer
US8731378B2 (en) 2003-06-30 2014-05-20 Broadcom Corporation System, method, and apparatus for playing back a plurality of video elementary streams with one playback channel
US7664823B1 (en) 2003-09-24 2010-02-16 Cisco Technology, Inc. Partitioned packet processing in a multiprocessor environment
US8243744B2 (en) * 2004-03-01 2012-08-14 Futurewei Technologies, Inc. Priority sorting
US7385984B2 (en) * 2004-03-30 2008-06-10 Extreme Networks, Inc. Packet processing system architecture and method
US8161270B1 (en) 2004-03-30 2012-04-17 Extreme Networks, Inc. Packet data modification processor
US7778168B1 (en) * 2004-08-02 2010-08-17 Lsi Corporation Queuing system with mechanism to limit blocking of high-priority packets
US7366865B2 (en) * 2004-09-08 2008-04-29 Intel Corporation Enqueueing entries in a packet queue referencing packets
CA2590686C (en) * 2004-12-17 2013-05-21 Onechip Photonics Inc. Compact load balanced switching structures for packet based communication networks
US8331380B2 (en) * 2005-02-18 2012-12-11 Broadcom Corporation Bookkeeping memory use in a search engine of a network device
US7664041B2 (en) * 2005-05-26 2010-02-16 Dale Trenton Smith Distributed stream analysis using general purpose processors
WO2007018852A1 (en) * 2005-07-27 2007-02-15 Sinett Corporation Queuing and scheduling architecture using both internal and external packet memory for network appliances
US7584286B2 (en) * 2006-06-28 2009-09-01 Intel Corporation Flexible and extensible receive side scaling
JP4626582B2 (ja) * 2006-07-03 2011-02-09 ソニー株式会社 カード型周辺機器およびカード通信システム
US7760748B2 (en) 2006-09-16 2010-07-20 Mips Technologies, Inc. Transaction selector employing barrel-incrementer-based round-robin apparatus supporting dynamic priorities in multi-port switch
US7961745B2 (en) 2006-09-16 2011-06-14 Mips Technologies, Inc. Bifurcated transaction selector supporting dynamic priorities in multi-port switch
US7773621B2 (en) 2006-09-16 2010-08-10 Mips Technologies, Inc. Transaction selector employing round-robin apparatus supporting dynamic priorities in multi-port switch
US7990989B2 (en) * 2006-09-16 2011-08-02 Mips Technologies, Inc. Transaction selector employing transaction queue group priorities in multi-port switch
CN101277175B (zh) * 2007-03-30 2012-02-29 国际商业机器公司 改进会话启动协议服务器性能的方法和装置
US8170042B2 (en) * 2007-11-27 2012-05-01 Cisco Technology, Inc. Transmit-side scaler and method for processing outgoing information packets using thread-based queues
EP2417737B1 (en) * 2009-04-07 2018-10-24 Cisco Technology, Inc. Transmit-side scaler and method for processing outgoing information packets using thread-based queues
EP2443776A1 (en) * 2009-06-16 2012-04-25 Ontime Networks AS Method on a network element for the purpose of synchronization of clocks in a network
CN102385558B (zh) * 2010-08-31 2015-08-19 国际商业机器公司 请求控制装置、请求控制方法及相关的处理器
US9197576B2 (en) * 2010-11-15 2015-11-24 Rockwell Automation Technologies, Inc. Method and apparatus for allocating and prioritizing data transmission
US8605732B2 (en) 2011-02-15 2013-12-10 Extreme Networks, Inc. Method of providing virtual router functionality
US8490107B2 (en) 2011-08-08 2013-07-16 Arm Limited Processing resource allocation within an integrated circuit supporting transaction requests of different priority levels
US9582440B2 (en) 2013-02-10 2017-02-28 Mellanox Technologies Ltd. Credit based low-latency arbitration with data transfer
US9641465B1 (en) * 2013-08-22 2017-05-02 Mellanox Technologies, Ltd Packet switch with reduced latency
CN105912273B (zh) * 2016-04-15 2019-05-24 成都欧飞凌通讯技术有限公司 一种报文共享储存管理的fpga实现方法
US10810038B2 (en) 2017-09-22 2020-10-20 International Business Machines Corporation Accounting and enforcing non-process execution by container-based software receiving data over a network
US10545786B2 (en) 2017-09-22 2020-01-28 International Business Machines Corporation Accounting and enforcing non-process execution by container-based software transmitting data over a network
CN111258832B (zh) * 2020-01-22 2023-06-20 泰康保险集团股份有限公司 一种接口参数校验方法、装置、设备及介质
CN112187667B (zh) * 2020-09-16 2022-09-13 深圳希施玛数据科技有限公司 数据下载方法、装置、设备及存储介质

Family Cites Families (143)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR294864A (fr) * 1899-12-01 1900-01-01 Vicarino Charles Auguste Nouveau systeme d'eclairage des voitures de chemins de fer par dynamo a vitesse variable et accumulateurs
US4200927A (en) * 1978-01-03 1980-04-29 International Business Machines Corporation Multi-instruction stream branch processing mechanism
US4707784A (en) * 1983-02-28 1987-11-17 Honeywell Bull Inc. Prioritized secondary use of a cache with simultaneous access
US4942518A (en) * 1984-06-20 1990-07-17 Convex Computer Corporation Cache store bypass for computer
US5021945A (en) 1985-10-31 1991-06-04 Mcc Development, Ltd. Parallel processor system for processing natural concurrencies and method therefor
CA1293819C (en) * 1986-08-29 1991-12-31 Thinking Machines Corporation Very large scale computer
US5023776A (en) * 1988-02-22 1991-06-11 International Business Machines Corp. Store queue for a tightly coupled multiple processor configuration with two-level cache buffer storage
US5295258A (en) * 1989-12-22 1994-03-15 Tandem Computers Incorporated Fault-tolerant computer system with online recovery and reintegration of redundant components
US5161156A (en) * 1990-02-02 1992-11-03 International Business Machines Corporation Multiprocessing packet switching connection system having provision for error correction and recovery
US5121383A (en) * 1990-11-16 1992-06-09 Bell Communications Research, Inc. Duration limited statistical multiplexing in packet networks
US5291461A (en) * 1990-11-28 1994-03-01 Raytheon Company Elastomer structure for transducers
US5367643A (en) 1991-02-06 1994-11-22 International Business Machines Corporation Generic high bandwidth adapter having data packet memory configured in three level hierarchy for temporary storage of variable length data packets
EP0504537A1 (en) 1991-03-22 1992-09-23 International Business Machines Corporation Method and apparatus for the testing and evaluation of geographically distributed telecommunication networks
US5659797A (en) * 1991-06-24 1997-08-19 U.S. Philips Corporation Sparc RISC based computer system including a single chip processor with memory management and DMA units coupled to a DRAM interface
US5291481A (en) * 1991-10-04 1994-03-01 At&T Bell Laboratories Congestion control for high speed packet networks
US5295133A (en) * 1992-02-12 1994-03-15 Sprint International Communications Corp. System administration in a flat distributed packet switch architecture
US6047122A (en) 1992-05-07 2000-04-04 Tm Patents, L.P. System for method for performing a context switch operation in a massively parallel computer system
US5742760A (en) * 1992-05-12 1998-04-21 Compaq Computer Corporation Network packet switch using shared memory for repeating and bridging packets at media rate
US5465331A (en) * 1992-12-23 1995-11-07 International Business Machines Corporation Apparatus having three separated and decentralized processors for concurrently and independently processing packets in a communication network
US5796966A (en) * 1993-03-01 1998-08-18 Digital Equipment Corporation Method and apparatus for dynamically controlling data routes through a network
US5675790A (en) * 1993-04-23 1997-10-07 Walls; Keith G. Method for improving the performance of dynamic memory allocation by removing small memory fragments from the memory pool
JPH06314264A (ja) * 1993-05-06 1994-11-08 Nec Corp セルフ・ルーティング・クロスバー・スイッチ
US5864679A (en) * 1993-09-06 1999-01-26 Kabushiki Kaisha Toshiba Transaction routing in a multiple processor system using an extracted transaction feature parameter and transaction historical data
US5471598A (en) * 1993-10-18 1995-11-28 Cyrix Corporation Data dependency detection and handling in a microprocessor with write buffer
GB2288097B (en) * 1994-03-23 1998-09-23 Roke Manor Research ATM queuing and scheduling apparatus
US5812810A (en) * 1994-07-01 1998-09-22 Digital Equipment Corporation Instruction coding to support parallel execution of programs
US5521916A (en) * 1994-12-02 1996-05-28 At&T Corp. Implementation of selective pushout for space priorities in a shared memory asynchronous transfer mode switch
US5619497A (en) * 1994-12-22 1997-04-08 Emc Corporation Method and apparatus for reordering frames
US5724565A (en) * 1995-02-03 1998-03-03 International Business Machines Corporation Method and system for processing first and second sets of instructions by first and second types of processing systems
US5550803A (en) * 1995-03-17 1996-08-27 Advanced Micro Devices, Inc. Method and system for increasing network information carried in a data packet via packet tagging
US5684797A (en) * 1995-04-05 1997-11-04 International Business Machines Corporation ATM cell multicasting method and apparatus
US5918050A (en) * 1995-05-05 1999-06-29 Nvidia Corporation Apparatus accessed at a physical I/O address for address and data translation and for context switching of I/O devices in response to commands from application programs
US5742840A (en) * 1995-08-16 1998-04-21 Microunity Systems Engineering, Inc. General purpose, multiple precision parallel operation, programmable media processor
US5893077A (en) * 1995-08-23 1999-04-06 Microsoft Corporation Method and apparatus for generating and collecting a billing event object within an on-line network
US5708814A (en) * 1995-11-21 1998-01-13 Microsoft Corporation Method and apparatus for reducing the rate of interrupts by generating a single interrupt for a group of events
US5784649A (en) * 1996-03-13 1998-07-21 Diamond Multimedia Systems, Inc. Multi-threaded FIFO pool buffer and bus transfer control system
KR100225910B1 (ko) * 1996-04-04 1999-10-15 구자홍 액정표시장치(liquid crystal display device)
US5778187A (en) * 1996-05-09 1998-07-07 Netcast Communications Corp. Multicasting method and apparatus
US7266686B1 (en) 1996-05-09 2007-09-04 Two-Way Media Llc Multicasting method and apparatus
US5784699A (en) * 1996-05-24 1998-07-21 Oracle Corporation Dynamic memory allocation in a computer using a bit map index
US5978893A (en) * 1996-06-19 1999-11-02 Apple Computer, Inc. Method and system for memory management
US6247105B1 (en) * 1996-06-20 2001-06-12 Sun Microsystems, Inc. Externally identifiable descriptor for standard memory allocation interface
US5987578A (en) * 1996-07-01 1999-11-16 Sun Microsystems, Inc. Pipelining to improve the interface of memory devices
US6173327B1 (en) * 1996-07-11 2001-01-09 Jeroen De Borst Object-oriented method and apparatus for information delivery
US5951670A (en) * 1996-09-06 1999-09-14 Intel Corporation Segment register renaming in an out of order processor
US6247040B1 (en) * 1996-09-30 2001-06-12 Lsi Logic Corporation Method and structure for automated switching between multiple contexts in a storage subsystem target device
US6009516A (en) * 1996-10-21 1999-12-28 Texas Instruments Incorporated Pipelined microprocessor with efficient self-modifying code detection and handling
JPH10177482A (ja) 1996-10-31 1998-06-30 Texas Instr Inc <Ti> マイクロプロセッサおよび動作方法
US5835491A (en) * 1996-11-21 1998-11-10 Xerox Corporation Method for supporting multicast capabilities in switching networks with a reservation ring
US5978379A (en) * 1997-01-23 1999-11-02 Gadzoox Networks, Inc. Fiber channel learning bridge, learning half bridge, and protocol
US6412004B1 (en) * 1997-03-27 2002-06-25 Microsoft Corporation Metaserver for a multimedia distribution network
US6314511B2 (en) * 1997-04-03 2001-11-06 University Of Washington Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers
US6067608A (en) * 1997-04-15 2000-05-23 Bull Hn Information Systems Inc. High performance mechanism for managing allocation of virtual memory buffers to virtual processes on a least recently used basis
US5892966A (en) 1997-06-27 1999-04-06 Sun Microsystems, Inc. Processor complex for executing multimedia functions
US5896517A (en) * 1997-08-18 1999-04-20 Bull Hn Information Systems Inc. High performance processor employing background memory move mechanism
US6226680B1 (en) * 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
US6567839B1 (en) * 1997-10-23 2003-05-20 International Business Machines Corporation Thread switch control in a multithreaded processor system
US6085294A (en) * 1997-10-24 2000-07-04 Compaq Computer Corporation Distributed data dependency stall mechanism
EP0918280B1 (en) * 1997-11-19 2004-03-24 IMEC vzw System and method for context switching on predetermined interruption points
US6188699B1 (en) * 1997-12-11 2001-02-13 Pmc-Sierra Ltd. Multi-channel encoder/decoder
US6131163A (en) * 1998-02-17 2000-10-10 Cisco Technology, Inc. Network gateway mechanism having a protocol stack proxy
US6219339B1 (en) * 1998-02-20 2001-04-17 Lucent Technologies Inc. Method and apparatus for selectively discarding packets
US6088745A (en) * 1998-03-17 2000-07-11 Xylan Corporation Logical output queues linking buffers allocated using free lists of pointer groups of multiple contiguous address space
US6023738A (en) * 1998-03-30 2000-02-08 Nvidia Corporation Method and apparatus for accelerating the transfer of graphical images
US6151644A (en) * 1998-04-17 2000-11-21 I-Cube, Inc. Dynamically configurable buffer for a computer network
US6219783B1 (en) 1998-04-21 2001-04-17 Idea Corporation Method and apparatus for executing a flush RS instruction to synchronize a register stack with instructions executed by a processor
EP0953898A3 (en) * 1998-04-28 2003-03-26 Matsushita Electric Industrial Co., Ltd. A processor for executing Instructions from memory according to a program counter, and a compiler, an assembler, a linker and a debugger for such a processor
GB2339035B (en) * 1998-04-29 2002-08-07 Sgs Thomson Microelectronics A method and system for transmitting interrupts
US7100020B1 (en) 1998-05-08 2006-08-29 Freescale Semiconductor, Inc. Digital communications processor
JP2003527755A (ja) 1998-05-08 2003-09-16 シー・ポート・コーポレーション ディジタル通信プロセッサ
US6070202A (en) * 1998-05-11 2000-05-30 Motorola, Inc. Reallocation of pools of fixed size buffers based on metrics collected for maximum number of concurrent requests for each distinct memory size
US6157955A (en) * 1998-06-15 2000-12-05 Intel Corporation Packet processing system including a policy engine having a classification unit
US6593937B2 (en) 1998-06-18 2003-07-15 Sony Corporation Method of and apparatus for handling high bandwidth on-screen-display graphics data over a distributed IEEE 1394 network utilizing an isochronous data transmission format
US6820087B1 (en) 1998-07-01 2004-11-16 Intel Corporation Method and apparatus for initializing data structures to accelerate variable length decode
US6640248B1 (en) * 1998-07-10 2003-10-28 Malibu Networks, Inc. Application-aware, quality of service (QoS) sensitive, media access control (MAC) layer
US6249801B1 (en) * 1998-07-15 2001-06-19 Radware Ltd. Load balancing
US6195680B1 (en) * 1998-07-23 2001-02-27 International Business Machines Corporation Client-based dynamic switching of streaming servers for fault-tolerance and load balancing
US6155840A (en) 1998-09-18 2000-12-05 At Home Corporation System and method for distributed learning
US6477562B2 (en) * 1998-12-16 2002-11-05 Clearwater Networks, Inc. Prioritized instruction scheduling for multi-streaming processors
US7257814B1 (en) * 1998-12-16 2007-08-14 Mips Technologies, Inc. Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors
US6389449B1 (en) * 1998-12-16 2002-05-14 Clearwater Networks, Inc. Interstream control and communications for multi-streaming digital processors
US6574230B1 (en) * 1998-12-18 2003-06-03 Nortel Networks Limited Scheduling technique for delayed queue service
US6377972B1 (en) * 1999-01-19 2002-04-23 Lucent Technologies Inc. High quality streaming multimedia
US6393028B1 (en) * 1999-02-25 2002-05-21 Advanced Micro Devices, Inc. Method and apparatus for providing EOF for frame modification
US6546366B1 (en) * 1999-02-26 2003-04-08 Mitel, Inc. Text-to-speech converter
US6453360B1 (en) * 1999-03-01 2002-09-17 Sun Microsystems, Inc. High performance network interface
US6483804B1 (en) * 1999-03-01 2002-11-19 Sun Microsystems, Inc. Method and apparatus for dynamic packet batching with a high performance network interface
US6650640B1 (en) 1999-03-01 2003-11-18 Sun Microsystems, Inc. Method and apparatus for managing a network flow in a high performance network interface
US6389468B1 (en) * 1999-03-01 2002-05-14 Sun Microsystems, Inc. Method and apparatus for distributing network traffic processing on a multiprocessor computer
US6721794B2 (en) * 1999-04-01 2004-04-13 Diva Systems Corp. Method of data management for efficiently storing and retrieving data to respond to user access requests
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6618820B1 (en) * 2000-01-10 2003-09-09 Imagex.Com, Inc. Method for configuring an application server system
US6813268B1 (en) * 1999-05-21 2004-11-02 Broadcom Corporation Stacked network switch configuration
US6581102B1 (en) * 1999-05-27 2003-06-17 International Business Machines Corporation System and method for integrating arbitrary isochronous processing algorithms in general media processing systems
US6169745B1 (en) * 1999-06-18 2001-01-02 Sony Corporation System and method for multi-level context switching in an electronic network
US6549996B1 (en) * 1999-07-02 2003-04-15 Oracle Corporation Scalable multiple address space server
US6539476B1 (en) * 1999-08-12 2003-03-25 Handspring, Inc. Mobile computer system capable for copying set-up application including removal routine from peripheral device for removing device programs after the device is removed
US6477580B1 (en) 1999-08-31 2002-11-05 Accenture Llp Self-described stream in a communication services patterns environment
US6502213B1 (en) * 1999-08-31 2002-12-31 Accenture Llp System, method, and article of manufacture for a polymorphic exception handler in environment services patterns
US6738371B1 (en) * 1999-09-28 2004-05-18 Ericsson Inc. Ingress data queue management in a packet data router
US6529515B1 (en) * 1999-09-30 2003-03-04 Lucent Technologies, Inc. Method and apparatus for efficient network management using an active network mechanism
US6438135B1 (en) * 1999-10-21 2002-08-20 Advanced Micro Devices, Inc. Dynamic weighted round robin queuing
US6523109B1 (en) * 1999-10-25 2003-02-18 Advanced Micro Devices, Inc. Store queue multimatch detection
US6611724B1 (en) * 1999-11-24 2003-08-26 Square D Company On line monitor for a control device
US20020124262A1 (en) * 1999-12-01 2002-09-05 Andrea Basso Network based replay portal
US6714978B1 (en) * 1999-12-04 2004-03-30 Worldcom, Inc. Method and system for processing records in a communications network
CA2393621C (en) * 1999-12-10 2010-02-09 Diva Systems Corporation Method and apparatus for performing user migration within a video on demand environment
US6625808B1 (en) * 1999-12-10 2003-09-23 Microsoft Corporation Method and apparatus for facilitating memory management in a program comprised of heterogeneous components
EP1258145B1 (en) * 1999-12-14 2006-07-05 General Instrument Corporation Mpeg re-multiplexer having multiple inputs and multiple outputs
US7058065B2 (en) 2000-02-08 2006-06-06 Mips Tech Inc Method and apparatus for preventing undesirable packet download with pending read/write operations in data packet processing
US7082552B2 (en) * 2000-02-08 2006-07-25 Mips Tech Inc Functional validation of a packet management unit
US7165257B2 (en) * 2000-02-08 2007-01-16 Mips Technologies, Inc. Context selection and activation mechanism for activating one of a group of inactive contexts in a processor core for servicing interrupts
US7139901B2 (en) * 2000-02-08 2006-11-21 Mips Technologies, Inc. Extended instruction set for packet processing applications
US7032226B1 (en) * 2000-06-30 2006-04-18 Mips Technologies, Inc. Methods and apparatus for managing a buffer of events in the background
US7065096B2 (en) 2000-06-23 2006-06-20 Mips Technologies, Inc. Method for allocating memory space for limited packet head and/or tail growth
US7042887B2 (en) 2000-02-08 2006-05-09 Mips Technologies, Inc. Method and apparatus for non-speculative pre-fetch operation in data packet processing
US7076630B2 (en) * 2000-02-08 2006-07-11 Mips Tech Inc Method and apparatus for allocating and de-allocating consecutive blocks of memory in background memo management
US7058064B2 (en) * 2000-02-08 2006-06-06 Mips Technologies, Inc. Queueing system for processors in packet routing operations
US7502876B1 (en) * 2000-06-23 2009-03-10 Mips Technologies, Inc. Background memory manager that determines if data structures fits in memory with memory state transactions map
US7649901B2 (en) * 2000-02-08 2010-01-19 Mips Technologies, Inc. Method and apparatus for optimizing selection of available contexts for packet processing in multi-stream packet processing
US7155516B2 (en) * 2000-02-08 2006-12-26 Mips Technologies, Inc. Method and apparatus for overflowing data packets to a software-controlled memory when they do not fit into a hardware-controlled memory
US20010052053A1 (en) * 2000-02-08 2001-12-13 Mario Nemirovsky Stream processing unit for a multi-streaming processor
US6381242B1 (en) * 2000-08-29 2002-04-30 Netrake Corporation Content processor
US20020107962A1 (en) * 2000-11-07 2002-08-08 Richter Roger K. Single chassis network endpoint system with network processor for load balancing
US6792509B2 (en) * 2001-04-19 2004-09-14 International Business Machines Corporation Partitioned cache of multiple logical levels with adaptive reconfiguration based on multiple criteria
US7058070B2 (en) * 2001-05-01 2006-06-06 Integrated Device Technology, Inc. Back pressure control system for network switch port
US20020174244A1 (en) 2001-05-18 2002-11-21 Telgen Corporation System and method for coordinating, distributing and processing of data
US6965982B2 (en) 2001-06-29 2005-11-15 International Business Machines Corporation Multithreaded processor efficiency by pre-fetching instructions for a scheduled thread
US6738378B2 (en) * 2001-08-22 2004-05-18 Pluris, Inc. Method and apparatus for intelligent sorting and process determination of data packets destined to a central processing unit of a router or server on a data packet network
US7272659B2 (en) 2002-06-25 2007-09-18 Olympus Corporation Information rewriting method, recording medium storing information rewriting program and information terminal device
US7283549B2 (en) * 2002-07-17 2007-10-16 D-Link Corporation Method for increasing the transmit and receive efficiency of an embedded ethernet controller
US20040049570A1 (en) * 2002-09-17 2004-03-11 Frank Ed H. Method and system for network management in a hybrid wired/wireless network
EP1546930B1 (en) * 2002-09-18 2015-10-21 IBM International Group BV Programmable streaming data processor for database appliance having multiple processing unit groups
US7099997B2 (en) * 2003-02-27 2006-08-29 International Business Machines Corporation Read-modify-write avoidance using a boundary word storage mechanism
US20040210663A1 (en) * 2003-04-15 2004-10-21 Paul Phillips Object-aware transport-layer network processing engine
US7138019B2 (en) * 2003-07-30 2006-11-21 Tdk Corporation Method for producing magnetostrictive element and sintering method
US7346680B2 (en) * 2003-09-22 2008-03-18 Intel Corporation Speculative prefetch of a protocol control block from an external memory unit
US7325099B2 (en) * 2004-10-27 2008-01-29 Intel Corporation Method and apparatus to enable DRAM to support low-latency access via vertical caching
JP2006187901A (ja) * 2005-01-04 2006-07-20 Funai Electric Co Ltd プリンタ装置およびレーザビームプリンタ装置
US7463593B2 (en) * 2005-01-13 2008-12-09 International Business Machines Corporation Network host isolation tool
US8121148B2 (en) * 2005-03-24 2012-02-21 Ixia Protocol stack using shared memory
US20070008989A1 (en) * 2005-06-30 2007-01-11 Intel Corporation Packet processing
US20080072264A1 (en) * 2006-08-02 2008-03-20 Aaron Crayford Distribution of content on a network

Also Published As

Publication number Publication date
ATE460030T1 (de) 2010-03-15
EP1259888B1 (en) 2010-03-03
WO2001059585A1 (en) 2001-08-16
JP2003523112A (ja) 2003-07-29
US7715410B2 (en) 2010-05-11
US20060159104A1 (en) 2006-07-20
US20060153197A1 (en) 2006-07-13
US20010043610A1 (en) 2001-11-22
US7551626B2 (en) 2009-06-23
AU2001227736A1 (en) 2001-08-20
DE60141452D1 (de) 2010-04-15
US7058064B2 (en) 2006-06-06
EP1259888A1 (en) 2002-11-27
EP1259888A4 (en) 2008-02-13

Similar Documents

Publication Publication Date Title
JP3801919B2 (ja) パケットルーティング動作におけるプロセッサ用キューイングシステム
US7765554B2 (en) Context selection and activation mechanism for activating one of a group of inactive contexts in a processor core for servicing interrupts
US7197043B2 (en) Method for allocating memory space for limited packet head and/or tail growth
US8081645B2 (en) Context sharing between a streaming processing unit (SPU) and a packet management unit (PMU) in a packet processing environment
US7280548B2 (en) Method and apparatus for non-speculative pre-fetch operation in data packet processing
US7139901B2 (en) Extended instruction set for packet processing applications
US7058065B2 (en) Method and apparatus for preventing undesirable packet download with pending read/write operations in data packet processing
US7644307B2 (en) Functional validation of a packet management unit
US8321385B2 (en) Hash processing in a network communications processor architecture
US8539199B2 (en) Hash processing in a network communications processor architecture
US8935483B2 (en) Concurrent, coherent cache access for multiple threads in a multi-core, multi-thread network processor
US8537832B2 (en) Exception detection and thread rescheduling in a multi-core, multi-thread network processor
US8910171B2 (en) Thread synchronization in a multi-thread network communications processor architecture

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050812

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050927

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20051221

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20060104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060322

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060418

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060426

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 3801919

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090512

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100512

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110512

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110512

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120512

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120512

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130512

Year of fee payment: 7

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140512

Year of fee payment: 8

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees