(58)【調査した分野】(Int.Cl.,DB名)
前記ネットワークエンジンが、受信したデータパケットが既知のデータフローに関連付けられているか否かを判断し、前記受信したデータパケットが既知のデータフローに関連付けられている場合、前記受信したデータパケットを転送し、前記受信したデータパケットが既知のデータフローに関連付けられていない場合、前記受信したデータパケットをフロー識別のため前記メインプロセッサに転送するように構成され、前記メインプロセッサが、前記受信したデータパケットが前記ネットワークエンジンにより前記メインプロセッサに転送された場合、前記受信したデータパケットが関連付けられているデータフローを識別し、前記識別されたデータフローを既知のデータフローとして前記ネットワークエンジンに設定するように構成されたことを特徴とする、請求項2に記載の統合処理システム。
前記ネットワークエンジンが、前記受信したデータパケットが前記メインプロセッサにより以前に前記ネットワークエンジン内に設定されたデータフローに関連付けられているか否かを判断することで、前記受信したデータパケットが既知のデータフローに関連付けられているか否かを判断するように構成されたことを特徴とする、請求項3に記載の統合処理システム。
データフローが、特定のタイプのデータパケット、ソースに関連付けられたデータパケット、宛先に関連付けられたデータパケットの1つ以上を含むことを特徴とする、請求項3乃至5のいずれかに記載の統合処理システム。
前記オフロードサブシステムが、受信したデータパケットに対してセキュリティ関連タスクを実行するためのセキュリティエンジンを含むことを特徴とする、請求項1乃至6のいずれかに記載の統合処理システム。
前記メインプロセッサが第1のプロセッサタイプであり、前記追加のプロセッサが、前記第1のプロセッサタイプと異なる第2のプロセッサタイプであることを特徴とする、請求項10に記載の統合処理システム。
前記メインプロセッサが、相互接続を介して前記オフロードサブシステムによるメインプロセッサメモリキャッシュへのアクセスを可能としていることを特徴とする、請求項1乃至11のいずれかに記載の統合処理システム。
さらに、前記相互接続に接続され、前記メインプロセッサおよび前記オフロードサブシステムにより読み出し可能な、関連付けられた各メールボックスを格納するメモリと、前記メインプロセッサが前記オフロードサブシステムに関連付けられた前記メールボックスにメッセージを書き込むことを可能にし、前記オフロードサブシステムが前記メインプロセッサに関連付けられたメールボックスにメッセージを書き込むことを可能にする、前記相互接続と、を含むことを特徴とする、請求項1乃至11のいずれかに記載の統合処理システム。
前記外部コンポーネントが、ソフトウェアドライバを介して制御可能な外部コンポーネントを含み、前記メインプロセッサが前記ソフトウェアドライバの第1部分を実行し、前記オフロードサブシステムが前記ソフトウェアドライバの第2部分を実行することを特徴とする、請求項1に記載の統合処理システム。
前記インターフェイスが、コンフィギュラブルインターフェイスを含み、前記コンフィギュラブルインターフェイスが、複数の異なる物理インターフェイスのいずれかと組み合わせた動作向けに構成可能なコンフィギュラブルコンポーネントを含むことを特徴とする、請求項1乃至11のいずれかに記載の統合処理システム。
前記コンフィギュラブルコンポーネントが、前記メインプロセッサにより構成可能なSerDes(シリアライザ/デシリアライザ)を含むことを特徴とする、請求項15に記載の統合処理システム。
前記複数の異なる物理インターフェイスが、PCIe(Peripheral Component Interconnect express)インターフェイス、SATA(Serial Advanced Technology Attachment)インターフェイス、USB(ユニバーサルシリアルバス)インターフェイスを含むことを特徴とする、請求項16に記載の統合処理システム。
集積回路パッケージ内に、統合処理システム外部の外部コンポーネントからデータパケットが受信されるときに使用されるパケットベースのプロトコル中の管理または制御パケットに関連付けられたプロトコル管理タスクを実行するメインプロセッサを提供する工程と、
前記集積回路パッケージ内に、前記パケットベースのプロトコルに従って受信されたデータパケットに対してデータ処理タスクを実行するオフロードサブシステムを提供する工程と、
前記集積回路パッケージ内に、前記外部コンポーネントとの通信を可能にするインターフェイスを提供する工程と、
前記集積回路パッケージ内に、前記メインプロセッサ、前記オフロードサブシステム、前記インターフェイスに接続され、前記メインプロセッサと前記オフロードサブシステムの両方が、前記インターフェイスを介して前記外部コンポーネントと通信することを可能にする相互接続を提供する工程と、を含むことを特徴とする、
方法。
集積回路パッケージ内のメインプロセッサにより、前記集積回路パッケージ外部の外部コンポーネントからデータパケットが受信されるときに使用されるパケットベースのプロトコル中の管理または制御パケットに関連付けられたプロトコル管理タスクを実行する工程と、
前記集積回路パッケージ内のオフロードサブシステムにより、前記パケットベースのプロトコルに従って受信したデータパケットに対してデータ処理タスクを実行する工程と、
前記メインプロセッサと前記オフロードサブシステムの両方により、前記外部コンポーネントを制御する工程と、を含むことを特徴とする、
方法。
前記データ処理タスクが、特定のタイプのデータパケットに対して実行される1つ以上のタスクを含み、前記方法がさらに、前記オフロードサブシステムにより、受信したデータパケットが前記特定のタイプのデータパケットであるか否かを判断する工程と、前記受信したデータパケットが前記特定のタイプのデータパケットであると判断された場合、前記オフロードサブシステムにより、1つ以上のタスクを実行する工程と、前記受信したデータパケットのデータパケットタイプが前記オフロードサブシステムにより判断できない場合、前記受信したデータパケットを前記オフロードサブシステムからデータパケットタイプの識別のために前記メインプロセッサに転送する工程と、前記受信したデータパケットが前記メインプロセッサに転送された場合、前記メインプロセッサにより、前記受信したデータパケットのデータパケットタイプを識別する工程と、識別された前記データパケットタイプを前記オフロードサブシステム内に設定する工程と、を含むことを特徴とする、請求項19に記載の方法。
さらに、前記データ処理タスクを実行するように、前記オフロードサブシステム内のコンフィギュラブルなハードコードされたハードウェアを構成する工程を含むことを特徴とする、請求項19または20に記載の方法。
さらに、前記オフロードサブシステムによるメインプロセッサメモリキャッシュへのアクセスを可能とする工程を含むことを特徴とする、請求項19乃至21のいずれかに記載の方法。
前記外部コンポーネントが、ソフトウェアドライバを介して制御可能な外部コンポーネントを含み、前記メインプロセッサが実行する工程が、前記ソフトウェアドライバの第1部分の実行を含み、前記オフロードサブシステムが実行する工程が、前記ソフトウェアドライバの第2部分に関連付けられたタスクの実行を含む、ことを特徴とする、請求項19に記載の方法。
さらに、前記相互接続に接続され、イーサネット(登録商標)パケットの転送を実行するネットワークエンジンと、それぞれがWiFiドライバトンネルモジュールを含む前記メインプロセッサおよび前記オフロードサブシステムを含み、前記ネットワークエンジンを介して、前記メインプロセッサと前記オフロードサブシステム間で交換するためにWiFiパケットがイーサネットパケットにカプセル化されることを特徴とする、請求項24に記載の処理アーキテクチャ。
前記メインプロセッサが、上位レイヤWiFiドライバソフトウェアを実行するように構成され、前記オフロードサブシステムが、下位レイヤWiFiドライバソフトウェアを実行するように構成され、前記下位レイヤWiFiドライバソフトウェアが、前記オフロードサブシステムに、未知のフローの最初に受信したWiFiデータパケットをフロー識別のために前記メインプロセッサに転送させ、前記メインプロセッサによるフロー識別後、そのフローからの後続のパケットを処理させることを特徴とする、請求項24に記載の処理アーキテクチャ。
前記インターフェイスが、PCIe(Peripheral Component Interconnect express)インターフェイスを含むことを特徴とする、請求項24乃至26のいずれかに記載の処理アーキテクチャ。
周辺デバイス用のドライバソフトウェア内において、周辺デバイスが動作に使用するパケットベースのプロトコル内の管理または制御パケットに関連付けられたプロトコル管理タスクを特定する工程と、
前記プロトコル管理タスクを含む前記ドライバソフトウェアの部分を、前記ドライバソフトウェアの残り部分から分離する工程と、
前記ドライバソフトウェアの残り部分の実装を提供する工程と、
前記ドライバソフトウェアの前記部分と前記ドライバソフトウェアの前記残り部分間のインターフェイスと一致する上位レイヤインターフェイスと、前記ドライバソフトウェアの前記残り部分の実装と一致する下位レイヤインターフェイスを含み、前記ドライバソフトウェアの前記残り部分の実装から、前記ドライバソフトウェアの前記部分を異なるハードウェア上で実行可能とする、ソフトウェアアダプテーションレイヤを提供する工程と、を含むことを特徴とする、
方法。
統合処理システム内のメインプロセッサにより、集積回路パッケージ外部の外部コンポーネントからデータが受信されるときに使用されるプロトコルに関連付けられたプロトコル管理タスクを実行する工程と、
前記統合処理システム内の前記メインプロセッサに接続されたオフロードサブシステムにより、前記プロトコルに従って受信されたデータが、前記オフロードサブシステム内に設定された既知のデータフローに関連付けられているか否かを判断する工程と、
前記受信したデータが既知のデータフローに関連付けられている場合、前記オフロードサブシステムにより、前記受信したデータに対してデータ処理タスクを実行する工程と、
前記受信したデータが既知のデータフローに関連付けられていない場合、前記受信したデータを前記オフロードサブシステムから前記メインプロセッサにデータフロー識別のために転送する工程と、
前記受信したデータが前記メインプロセッサに転送された場合、前記メインプロセッサにより、前記受信したデータが関連付けられているデータフローを識別する工程と、
前記メインプロセッサにより、前記識別されたデータフローを既知のデータフローとして前記オフロードサブシステムに設定する工程と、
前記オフロードサブシステムにより、前記識別されたデータフローに関連付けられた後続の受信データに対してデータ処理タスクを実行する工程と、を含むことを特徴とする、
方法。
【発明を実施するための形態】
【0008】
マルチサービス処理は、安全なデータ、音声、動画、モバイルサービスにサービスの低下を生じることなく、同時に回線速度の帯域幅を提供できる単一の配信プラットフォームで提供される。
【0009】
データネットワーキングおよびアプリケーション処理は、単一のチップまたは集積回路パッケージに統合される。柔軟なハードウェア設計、複数のデータインターフェイス、オフロードハードウェアと組み合わせた1つ以上の汎用メインプロセッサ、および効率的なプロセッサ間の通信といった特徴が含まれる。
【0010】
処理の負荷が高い機能向けにハードウェアオフロードまたはアクセラレーションを可能にするために、1つの専用プロセッサ、複数のプロセッサ、および(または)専用ハードウェアが提供されることがある。このアプローチでは、プライマリ汎用プロセッサ(アプリケーションプロセッサ、メインCPUとも呼ばれる)から機能をオフロードして、CPUの処理能力を、例えば付加価値の高い追加のサービスに確保しておくことができる。
【0011】
処理プラットフォーム内の汎用メインCPU(中央処理装置)にはネットワーキングまたはデータ通信タスク実行の負荷がかかり、残りの処理能力がその他のタスク、例えばアプリケーション関連またはサービス関連のタスク実行に不十分となることがある。ネットワーキングに関するパフォーマンスを維持するために、アプリケーションやサービスのパフォーマンスが限定的になる、または低下することがある。例えば、ネットワーキングタスクがメインCPU処理サイクルの75〜80%を占め、アプリケーションやサービスの処理には限られたリソースしか残らないことがある。
【0012】
メインCPUリソースの高い使用率は、消費電力および(または)動作温度にも影響を生じる場合がある。例えば、STBのメインCPUは比較的高消費電力の部品であり、そのデバイスの中で潜在的消費電力が最も高い部品である可能性がある。
【0013】
CPUによる実際の消費電力はその使用率によって異なり、使用率が高いほど消費電力も高い。高使用率は熱の生成も増加し、ヒートシンクやその他温度制御対策に対する要求も高まる。本発明で開示されるような、専用の再構成可能な(reconfigurable)エンジンを利用することを通じて、大幅な効率向上が得られる。
【0015】
図1は処理アーキテクチャの例を示すブロック図である。
図1に示すアーキテクチャ例100は、デュアルプロセッサメインCPUアーキテクチャで、2つのメインCPU102、104を備えている。任意の多様なインターフェイスを提供してもよい。アーキテクチャ例100には複数のインターフェイスがあり、これらには、同一の物理レイヤ(PHY)インターフェイスコンポーネントを共有する3セットのPCIeコントローラとSATAコントローラを表す3つのPCIe(Peripheral Component Interconnect express)またはSATA(Serial Advanced Technology Attachment)インターフェイス118、120、122、SATAインターフェイス124、USBホストインターフェイス126、ユニバーサルシリアルバス(USB)ホスト/デバイスインターフェイス128、液晶ディスプレイ(LCD)インターフェイス130、単一のインターフェイスまたは2つの同時PCMインターフェイス、I
2S(IC間サウンド)バスインターフェイス、またはSPDIF(Sony(登録商標)/Philips Digital Interconnect Format)インターフェイスのいずれかをサポートするパルス符号変調(PCM)インターフェイスとして構成可能なSSP(Synchronous Serial Port)インターフェイス132、I
2C(IC間)バスインターフェイス134、SD(セキュアデジタル)インターフェイス136、JTAG(Joint Test Action Group)インターフェイス、この例では5つまでのチップセレクトを備えたSPI(Serial Peripheral Interface)、およびGPIO(General Purpose Input Output)インターフェイスの例を含むインターフェイスセット138、4つのUART(Universal Asynchronous Receiver/Transmitter)インターフェイス140、フラッシュメモリインターフェイス142、この例では6つまでのトランスポートストリームをサポートするトランスポートストリーム受信(Rx)インターフェイス144、GMAC(Gigabit Media Access Controller)インターフェイス146、148、150、が含まれる。
【0016】
また、
図1は例えばSTBで導入される場合これらのインターフェイスの一部に結合されるコンポーネントの例も示す。提示された例において、これらのコンポーネントには、802.11nワイヤレスモジュール、SLIC(加入者回線インターフェイスコントローラ)、フラッシュメモリ、無線(RF)チューナー、HPNA(Home Phone Networking Alliance)アダプタ、スイッチおよび物理レイヤ(PHY)コンポーネント、ワイヤレスモデムが含まれる。別の実施態様において、
図1に示すものに加えて、またはそれらに代えて、その他種類のコンポーネントをインターフェイスに結合することができる。
【0017】
アーキテクチャ例100は、256kB L2キャッシュ152、8kBセキュアブートROM(Read Only Memory)154、キャッシュコヒーレンシポート156、ネットワークエンジン158、セキュリティエンジン160、パケットエンジン162、トラフィックマネージャ164、DMA(Direct Memory Access)コントローラ165、256kBパケットバッファ166、16ビットまたは32ビットDDR(Double Data Rate)メモリコントローラ168を含んでもよい。
別の実施態様において、
図1に示すメモリのサイズおよびタイプに加えて、またはそれらに代えて、その他のサイズおよび(または)タイプのメモリを提供することができる。
【0018】
図1のアーキテクチャ例100、およびその他の図の内容は、例示のみを目的としており、かつこの開示は図に明確に示された、および本明細書で説明されている、特定の実施態様に制限されないことを理解されたい。
【0019】
アーキテクチャ例100のコンポーネントはすべて同一のチップまたは集積回路パッケージに統合するか、複数の集積回路に跨ることもできる。単一のチップまたはパッケージの場合ネットワーキングとデータ処理コンポーネント両方を含む。例えば、特定の処理タスクをネットワークエンジン158、セキュリティエンジン160および(または)パケットエンジン162内のあまり強力ではないながらも電力効率により優れたプロセッサに割り当て、それによって、より強力な汎用メインCPU102、104の処理サイクルをアプリケーション関連またはサービス関連タスクなどのその他のタスクの実行に利用可能にすることができる。
【0020】
この種のアーキテクチャは、あまり強力ではないが特定のタスク向けに最適化されたプロセッサで実行できるタスクのためのメインCPU102、104の利用率を下げることで、より電力効率を高めることができる。パフォーマンスの向上は、より多くのメインCPU102、104の処理サイクルをその他のタスク実行に利用可能にすることでも実現可能である。
【0021】
例えば、セキュリティタスクがメインCPU102、104からセキュリティエンジン160にオフロードされた場合、メインCPUはより多くの処理サイクルをアプリケーション関連またはサービス関連タスクに利用することができる。
メインCPUアーキテクチャを備えたデバイスは、アーキテクチャ例100に基づいたアーキテクチャを備えたデバイスと類似または同等のデータレートを提供できるかもしれないが、アーキテクチャ例100に基づいたアーキテクチャを備えたデバイスは、1つ以上のエンジン158、160、162にタスクをオフロードすることでメインCPUの可用性がより高められているため、より機能が豊富なアプリケーションまたはサービスおよび(または)より優れたアプリケーション/サービス応答時間をサポートできる可能性がある。
【0022】
これはサービスプロバイダネットワークにおけるより高度なパフォーマンスを実現するためのハードウェアアクセラレーション機能の例である。
一実施態様において、ハードウェアアクセラレーション機能は、上位レイヤのソフトウェアコンポーネントおよびアプリケーションに対してハードウェアを透過的にするカスタマイズされたソフトウェアデバイドライバを通じてアクセスされる。Linux(登録商標)環境では、例えば、オープンソースドライバおよび若干変更を加えたカーネルを使用することができる。これによりユーザーはカーネルをさらにカスタマイズし、Linux環境に加えてソフトウェアアプリケーションを実行することができる。この種のハードウェア抽象化アプローチを使用してその他のオペレーティングシステムをサポートすることができる。
【0023】
アーキテクチャ例100は、ネットワークエンジン158でのネットワーキング作業、セキュリティエンジン160でのセキュリティ、およびパケットエンジン162でのパケット処理作業(トランスポートストリームフレームアグリゲーションなど)のためのアクセラレーションハードウェアを統合する。ネットワーキング作業には、例えば、クラス分けとACL(アクセス制御リスト)処理、VLAN(仮想ローカルエリアネットワーク)の運用、例えばLinux(登録商標) QDiscモデルを通じたQoS(サービス品質)、転送、NAT(Network Address Translation)/Netfilterの運用、マルチキャスティング、および(または)キューイング/スケジューリングの1つ以上が含まれる。
アーキテクチャ例100でメインCPU102、104からセキュリティエンジン160にオフロードできる機能と関連処理には、IPSec(Internet Protocol Security)、DTCP(Digital Transmission Content Protection)、SRTP(Secure Real−time Transport Protocol)、および(または)SSL(Secure Sockets Layer)の1つ以上が含まれる。前述は
図1に示すアーキテクチャ例100の全般的な説明である。より詳細には以下の実施例で説明する。
【0025】
一実施態様において、各メインCPU102、104は市販の汎用プロセッサである。プロセッサの一例は速度が600MHz〜750MHzである。
図1には32kBのレイヤ1またはL1インストラクション(I)とデータ(D)キャッシュ110、112、114、116が示されている。
メインCPUは、コードサイズ削減とアプリケーションアクセラレーションのためのソフトウェアアクセラレーション、シングルまたはマルチオペレーティングシステム(O/S)アプリケーション向けの非対称型マルチプロセッシング(AMP)と対称型マルチプロセッシング(SMP)、グラフィックス/演算処理向けのSIMD(Single Instruction Multiple Data)命令セット、JTAG/プログラムとレースインターフェイス(PTM)、パフォーマンスモニタリング、および(または)例えば、仮想アドレストランスレーションを加速するためのバッファリングなどのその他機能をサポートすることができる。本発明の開示はいかなる特定のメインCPUまたはメインCPUのタイプにも限定されない。また、アーキテクチャ例100はデュアルCPUアーキテクチャであるが、本発明の開示の要素はシングルCPUアーキテクチャおよび(または)2つを超えるメインCPUを備えたアーキテクチャにも適用できる。
【0026】
一実施態様におけるメインCPU102、104の構成は、コンフィギュレーションレジスタでの構成パラメータ設定を含む。各メインCPU102、104がリセット後にブートされると、構成パラメータを読み込む。これらのパラメータは、メインCPUコア102、104のデフォルト構成に加えてL2キャッシュ152のデフォルト構成も提供することができる。構成パラメータを変更するには、適切なレジスタを変更し、メインCPU102、104のいずれかまたは両方に再起動またはリセットが発行される。
一実施態様において、システム内のレジスタはメモリマッピングされている。その場合、構成パラメータは各レジスタがメモリ空間内で割り当てられたアドレスに書き込むことで変更される。
【0027】
図2はプロセッサコンプレックス例のブロック図である。このプロセッサコンプレックス例200には
図1に示すコンポーネントの多くが含まれており、さらにコンポーネントが追加されている。追加コンポーネントには、グローバル制御インターフェイス270と、動的制御可能フレキシブル相互接続272が含まれ、前記グローバル制御インターフェイス270を通じて割り込みおよび(または)その他制御信号をメインCPU102、104とその他コンポーネントに提供することができ、前記動的制御可能フレキシブル相互接続272は、例えば、ネットワークエンジン制御モジュール274、(手動のオン/オフ切り替えを可能にするための)電源/(赤外線リモートコントロールデバイスを通じた制御を可能にするための)コンシューマー赤外線(CIR)/(タイマーベースの制御を可能にするための)リアルタイムクロック(RTC)インターフェイス276、シリアライザ/デシリアライザ(SerDes)コントローラ278(これを通じてメインCPU102、104および(または)その他コンポーネントがSerDesコンポーネントの構成を制御する、以下でさらに説明する)、一般に
図1に示すようなGMAC、UART、SPI、GPIOインターフェイスなどのペリフェラルインターフェイスを指定する、「汎用ペリフェラル」ブロック280、のようなスイッチングファブリックを1つ以上使用して実装することができる。
【0028】
図2に示すように、メインCPU102、104は多様なインターフェイスに、そしてこれらのインターフェイスに前記フレキシブル相互接続272を通じて接続されたあらゆるペリフェラルに接続される。ネットワークエンジン158、セキュリティエンジン160、パケットエンジン162もインターフェイスおよび前記フレキシブル相互接続272を通じてペリフェラルに接続され、直接これらのペリフェラルと通信する、またはこれらを制御することができる。
前記フレキシブル相互接続272、メインCPU102、104および別個の「オフロード」用プロセッサを含むシステム内のあらゆるプロセッサ、または、例えばネットワークエンジン158、セキュリティエンジン160、および(または)パケットエンジン162を実装したオフロード用サブシステム内のハードウェアが、システム内の任意のリソースを制御できる。これによって、システムのソフトウェアはランタイムでどのプロセッサがどの入力/出力(I/O)を制御するかを割り当てることができる。これによって別個のオフロード用プロセッサまたはハードウェアが、PCIeインターフェイスなど高帯域幅のSerDes I/Oの制御に取って代わり、メインCPU102、104から関連処理をオフロードすることが可能になる。
【0029】
図2はメインCPU102、104でのキャッシュコヒーレントペリフェラル入力も示す。
一実施態様において、各メインCPU102、104はキャッシュコヒーレンシポートを備えている。完全なI/Oコヒーレンシを提供するため、特定のメモリアドレスをキャッシュコヒーレンシポートに割り当てることができる。キャッシュコヒーレンシポートでの読み出しがいずれかのメインCPUのL1データキャッシュにヒットし、キャッシュコヒーレンシポートでの書き込みがL1キャッシュ内のいずれかの古いデータを無効にしてL2キャッシュ152にライトスルーすることが可能である。これによりシステムパフォーマンスの大幅な向上と節電を可能にし、同時にドライバソフトウェアを簡素化することができる。L2/L3メモリシステムが最新であることを確約するためにデバイスドライバがキャッシュクリーニングやフラッシュを実行する必要がなくなる。キャッシュコヒーレンシについては以下で詳細に説明する。
【0031】
図1と
図2に示すネットワークエンジン158は、高速パケット転送、編集、キューイング、シェーピング、ポリシングなどの機能を提供できる。ネットワークエンジン158は、PPPoE(Point−to−Point Protocol over Ethernet)トンネリングおよびTCP(Transmission Control Protocol)セグメンテーションなどのパケットサービスをメインCPUの介入なしで切り替え、ルーティング、実行することができるため、これらのネットワーキングタスクをメインCPU102、104からオフロードすることができる。
【0032】
図3はネットワークエンジン例のブロック図である。ネットワークエンジン例300には、イングレスおよびイグレスネットワークインターフェイス302、310、転送エンジン304、キューマネージャ306、スケジューラ308が含まれる。一実施態様において、ネットワークエンジン例300は構成可能かつハードコードされたハードウェアに実装される。
【0033】
参照を容易にするため、ネットワークエンジン例300が相互作用するその他コンポーネントも示されている。これらのその他コンポーネントには、メモリ312、1つ以上のオフロード/アクセラレーションエンジンプロセッサ316、DMAコントローラ165、メインCPU102、104が含まれる。メモリ312には1つ以上の記憶素子が含まれる。一実施態様において、メモリ312はDDRメモリを含む。
【0034】
一実施態様において、ネットワークエンジン例300は、Linux IPスタックパケット転送スキームを達成するために複数のフォワーディングテーブルを使用することができる。Linuxルールテーブルとフローテーブルはハードウェアに実装することができる。ルールテーブルは現在のパケットに含まれる情報に基づいている。ファイアウォールエントリなど一部のルールベースのエントリは、システムソフトウェアによってトラフィックのフローが開始される前に構成することができる。他のオペレーティングシステムまたはカスタムフォワーディングスタックへの適用にも対応することができる。
【0035】
フローテーブルはフローの最初のパケットが受信されたときにシステムソフトウェアによってプログラムすることができ、その後そのフローの後続の各パケットをネットワークエンジン例300によってメインCPU102、104による介入なく処理することができる。マッチしないパケットはメインCPU102、104に送り、フィルタリングオプションに基づいて破棄するか、学習プロセスを開始することができる。例えば、フローに関連付けられたペイロードによりディープなパケット検査が必要な場合、アクセラレーションにネットワークエンジン例300を使用しているハードウェアフローの合計数がハードウェアフローの特定数を超過する場合、および(または)あらゆる組み合わせの任意のパケットフィールドに基づいたハードウェアルックアップ数がルックアップの特定数を超過する場合など、選択されたフロー中のパケットをメインCPU102、104に送ることができる。
一実施態様において、ネットワークエンジン例は、メインCPU102、104に選択されたフローが転送されるまでに、最大8192のハードウェアフローと12000のハードウェアルックアップをサポートする。ネットワークエンジン例300を使用したハードウェアアクセラレーションは、フローごと/ルールごとにオンまたはオフにすることもできる。
【0036】
カーネルによってLinuxベースのフロー接続を確立した後、ハードウェアテーブルにプログラムすることができる。このネットワークエンジンモデルによって、Linuxカーネルとネットワーキングアプリケーションが新たなフローについてすべてを決定することが可能になる。
【0037】
ここで言及するデータフローまたはフローは、何らかの共通の特性を共有するデータと関連付けられていてもよい。例えば、特定のタイプのデータに特定の処理タスクが実行される。その場合、そのタイプのデータ用のデータフローは、ここで開示されるように、メインCPU102、104がそのタイプのデータに最初に遭遇し、特定したときに構成され、それによりそれ以降受信されるそのタイプのデータが既知のデータフローと関連付けられていると特定され、それに従ってオフロード用サブシステムでメインCPUの関与なく処理されるようにすることができる。データのタイプは、異なるデータフローを差別化できる特性またはパターンの一例である。その他の例としては、送信元(ソース)アドレスおよび(または)宛先アドレスが含まれる。
【0038】
ネットワークエンジン例300の運用について、以下の例でさらに説明する。パケットが、例えば、イーサネット(登録商標)GMACインターフェイス146、148、150(
図1)のいずれかを通じて、イングレスネットワークインターフェイス302に到着するが、それが既知のトラフィックフローの一部ではないと仮定する。不明のフローはドロップされるか、メインCPU102、104に転送されて検査が行われる。パケットがドロップされると、それ以上何も起こらない。例示のため、この例では受信したパケットが検査のためにメインCPU102、104に転送されるシナリオを考察する。
【0039】
一実施態様において、パケットはPSPID(物理ソースポートID)と呼ばれるものに到着し、パケット、いくつかのアーリーL2解析情報、タイムスタンプが転送エンジン304に渡される。転送エンジン304はいくつかのルックアップのステージを実行することができる。
PSPID→LSPID(論理ソースポートID)マッピング。このマッピングは、例えば、ポートアグリゲーションの場合など、例えば、物理ポートと仮想ポート間で遷移(transition)がある場合に適用されることがある。転送エンジン304自体はLSPIDを理解する一方で、この例では、ネットワークインターフェイス302はPSPIDで動作する。
パケットクラス分け。パケットがアップストリームに向かっている、またはユーザーポート(ユーザーネットワークインターフェイス、UNI)アップストリームからである、またはパケットがネットワークダウンストリームのサービスプロバイダ側からきている場合、例えば、クラス分けはパケットで実行される。クラス分けから、パケットに対するサービスまたは一般運用(general operation)が決定される。
一実施態様において、サービスデータベース(SDB)がパケットに対して実行される検索のタイプと、転送のクラス分けに基づいたいくつかの全体的構成を設定する。
次にハッシュとプレフィックスロンゲストマッチ検索が実行される。これらはパケットを転送する方法、QoSを設定する方法などを決定することができる。それらがさらにIPおよびMAC(メディアアクセス制御)アドレステーブルに差し向けられ、NATが必要な場合パケットヘッダで何を置き換えるかを決定する。
また、一実施態様において、レイヤ2転送検索のためVLANのメンバーとしてポートを割り当てるためのVLANメンバーシップテーブルもある。
最後に、VLANとQoSの結果テーブルにより、VLANの追加/削除およびQoS値の変更のため、パケットを変更することができる。
【0040】
ルックアップの結果は、それら結果の中のヒットと優先マッピングに基づいて決定される。転送ルックアップの結果に基づき、転送エンジン304は送信のためパケットを変更することができる。パケットヘッダが変更されなくても、(例えばメインCPUキューに)転送されるパケットの要素、ポリシングインデックス等が決定され、考慮される。転送結果はACLに基づいて変更またはオーバーライドされることがある。
【0041】
一例として、ACLはパケットのタイプを観察し、ACLにおけるデフォルトのアクションと異なるあらゆる転送エンジンのアクションをオーバーライドするように設定することができる。また、ACLエントリは相互に論理的につなげることもできる。例えば、いくつかのACLエントリは異なるアクションに対して書かれているが、それらの結果を「AND」でつなげてそれらACL規則の上位集合を形成することができる。
【0042】
不明のフローからのパケットの例に戻り、例示の目的のため、異なるアクションを指定するACLがないと仮定すると、この特定のパケットは転送エンジンポートへの通常の転送がされない(この例では既知のフローの一部ではない)ため、メインCPU102、104向けに意図されたVOQ(仮想出力キュー)に置かれる。
図3に示すように、このエンキュー操作はキューマネージャ306を通じてメモリ312に置かれる。パケットは、パケットがメインCPUキューを出るスケジューリングをするスケジューラ308による命令を受けてデキューされるまでVOQに留まる。
【0043】
スケジューラ308がパケットをデキューすると、メモリに対するインターフェイス、またはDMAコントローラ165のいずれかを通じて、メインCPU102、104がメモリ312でのキューからパケットをデキューする。その後パケットはメインCPU102、104によって解析される。この例の目的のため、パケットの検査で新しいフローが特定され、メインCPU102、104がいくらかの変換を加えて転送エンジン304ポートに転送する必要があると決定したものと仮定する。転送エンジン304は変換されたパケットにそのポートを通過させることができる。メインCPU102、104は変換されたパケットをそれが失われないようにこの時点で転送するか、フレームロスが懸念されない場合次のフレームまで待つことができる。
上述したようにフレキシブル相互接続272(
図2)はシステム内のメインCPU102、104を含むあらゆるプロセッサ、およびオフロードサブシステムをあらゆるリソースと通信させ、制御を担うことを可能にするため、メインCPU102、104は変換されたパケットを転送することができる。また、この例において、メインCPU102、104はフローテーブルも更新する。
【0044】
次回同じタイプのパケットがイングレスネットワークインターフェイス302で受信されると、転送エンジン304はフォワーディングテーブル内にヒットがあり(クラス分け後)、前に決定されたパケット変換が行われてパケットが変更され、アウトバウンドのVOQがネットワークインターフェイス310ポート(例えばイーサネットポート)にマークされる。
【0045】
これでパケットがキューマネージャ306ハードウェアVOQにエンキューされたことになり、やがてスケジューラ308によってデキューされる。スケジューラ308で構成されたアップストリームまたはダウンストリームVOQがイーサネットポート宛のパケットをデキューする。キューマネージャ306はパケットをイグレスネットワークインターフェイス310に渡す。パケットがデキューされるとき、エラーチェックを実行することができ、例えば巡回冗長検査(CRC)コードをチェックして、メモリのエラー(ソフトエラー)がパケットに生じていないことを確認することができる。エラーチェックはキューマネージャ306または別の要素によって実行することができる。エラーチェックにパスしない場合、オプションとしてパケットにはCRCコード無効とスタンプすることができ、それにより受け取り側がエラーを受信し、フレームをドロップすることを確約することができる。パケットはその後送信ポートにキューされ、送信される。
【0046】
上述したように、パケットは転送プロセスの間に変換されてもよい。パケット変換または編集機能は、例えば、次を含むことができる。
・ TCPおよびUDP(User Datagram プロトコル)パケットの送信元および宛先ポート変更
・ PPPoE/PPPヘッダ挿入/削除
・ MAC送信元アドレス(SA)/宛先アドレス(DA)の変更と置換
・ IPv4およびIPv6のIP送信元/宛先アドレス変更
・ 現在のIPオプションおよび(または)拡張ヘッダの維持
・ IEEE802.1p/DSCP(Differentiated Services Code Point)−サービスタイプ(ToS)などのQoSフィールド変更
・ 1つまたは2つのVLANペアでのVLAN運用(QinQサポート)
・ IPv4ヘッダチェックサムの更新
・ L4(TCPまたはUDP)ヘッダチェックサムの更新
【0047】
PPPoE/PPPカプセル化/カプセル化解除の例を考察する。この例はパケット変換だけでなく、転送エンジン304とオフロード/アクセラレーションエンジンプロセッサ316間の相互作用も示す。
【0048】
メインCPU102、104で稼働するソフトウェアがフローで最初のPPPoEパケットを受け取ると、転送エンジン304のフローテーブルでワイドエリアネットワーク(WAN)インターフェイスからPPPoE/PPPヘッダを削除するようにフローを構成する。その後、転送エンジン304のフローテーブルでWAN宛てのトラフィックにPPPoE/PPPヘッダを追加するように別のフローを構成し、これ以降このフロー中の各パケットがハードウェアのみによって処理される。
【0049】
PPPoE/PPPパケットのカプセル化を解除するには、パケットエンジン(この例ではオフロード/アクセラレーションエンジンプロセッサ316によりサポートされる)にPPPoE/PPPからのパケットをIPv4/IPv6に変換するように通知するため、転送エンジン304がパケットヘッダにビットを設定する。
パケットはそれがIPv4またはIPv6パケットに変換される前に、0x8864のイーサネットタイプ、あるいは0x0021または0x0057いずれかのPPPタイプを有する必要がある。変換中に、イーサネットタイプは、IPv4の場合0x0800、またはIPv6の場合0x86DDのいずれかで置き換えられる。次の6バイト、PPPoEヘッダ(V、T、コード、セッションID、長さ)およびPPPタイプはすべて取り除かれる。
【0050】
パケットのカプセル化解除はVLANタグ付きパケットで可能である。パケットエンジンはカプセル化されたPPPタイプを超えるパケットのIP部分を解析することもできる。これによってPPPoE/PPPパケットのIP/VLAN/MAC運用が可能となる。
【0051】
IP/VLANおよびMACの運用は、この例ではパケットをPPPoE/PPPにカプセル化する、パケットエンジン下で利用できる。転送エンジン304は、そのフロー結果に基づいてどのパケットをカプセル化するかを特定することができる。その後パケットエンジンはフローから内部パケットのIPバージョンとともに提供されるセッションIDを使用して、パケットをカプセル化する。バージョン、タイプ、コードを含むイーサネットタイプフィールドとPPPoEフィールドがこの例では転送エンジン304で構成される。
【0052】
以下にフィールド設定例を示す。
・ Version=1
・ Type=1
・ Code=0
【0053】
PPPoEのVersion、Type、Codeのフィールドが、パケットエンジンによってカプセル化のために元のパケットに挿入される16ビットのヘッダを構成する。セッションID、長さ、PPPタイプも挿入される。長さのフィールドはPPPoEヘッダとパケットの残りを含むパケットの長さである。この例で、メインCPU102、104は最初のフロー識別と転送エンジン304フローテーブルの構成に関与する。
フローテーブルが構成されたら、カプセル化/カプセル化解除タスクとセキュリティタスク(あれば)は、オフロード/アクセラレーションプロセッサ316によって実行される。カプセル化/カプセル化解除とセキュリティタスクは、ここで開示されるデータ処理タスクの例であり、メインCPU102、104で多くの処理サイクルを占用し、その他のタスクに利用可能な処理サイクルはわずかしか残らないことがある。
【0054】
オフロード/アクセラレーションプロセッサ316にこれらのタスクをオフロードすることで、データ処理タスクの実行のためメインCPU102、104の処理負荷を軽減する。
オフロード/アクセラレーションエンジンプロセッサ316と転送エンジン304の相互作用は、上述したようにパケットがメインCPU102、104に検査のため転送される状況においてVOQを通じて行うことができる。
一実施態様において、パケットエンジンに1ポート、セキュリティエンジンに1ポートあり、これらの各ポートがそれぞれスケジューラ308により制御され、宛先VOQとして設定可能な8つのキューを有する。パケットがパケットエンジン、または同様にセキュリティエンジンに到着すると、パケットが処理され、そのヘッダがパケットエンジンにより変更されたり、セキュリティエンジンにより暗号化または暗号化解除されたりすることがある。処理後のパケットは、例えば、オフロード/アクセラレーションエンジンプロセッサ316のオンボードローカルDMAコントローラを通じて、最終的にパケットエンジンポートまたはセキュリティエンジンポートの外に移動されるか、メモリ312に戻される。この種のポートとキューの配備は、この例ではメインCPU102、104とオフロード/アクセラレーションエンジンプロセッサ316間で、効率的なプロセッサ間の通信を提供する。
【0055】
キューイングをより詳細に考察すると、ネットワークエンジン例300は上述のようにVOQを使用して、どのパケットキューが送信を待つ間パケットを格納するかを特定する。
一実施態様においては、112のVOQがある。パケットがGMAC146、148、150(
図1)、メインCPU102、104、またはその他ソースなど任意のソースにより受け取られると、それらは転送エンジン304に渡され、それがパケットをドロップするか転送するか(適切であれば変更する)を最終的に決定する。パケットが転送される場合、スケジューラ308によってパケットの放出がスケジュールされるまでそのパケットを保持するキューを転送エンジン304が特定する。Linuxなどのオペレーティングシステムの場合、これはパケットのスケジューリングができるトラフィック制御モジュールによって制御されることがある。
【0056】
例えば音声、ビデオ、制御されたメッセージなどの優先トラフィックにQoSを提供するため、1ポートに複数のキューがある場合がある。一実施態様において、キューはすべてのギガビットポート、パケットエンジン(IPフラグメンテーションの再アセンブリ、IPSec等のタスクのため)、パケットレプリケーション(rootスケジューラ)、およびメインCPU102、104に提供される。メインCPU102、104は異なるトラフィックのタイプに対する多様な優先度をサポートするため多数のキューがある場合がある。ユーザータイプは、例えばよりハイエンドの企業向けアプリケーションをサポートするためにクラス分けすることができる。
【0057】
ネットワークエンジン例300のキューマネージャ306は、転送エンジン304からパケットを受け入れてメモリ312内のキューにそれらを格納する。キューマネージャ306はメモリバッファを管理するため優先度とサービスクラスを維持するように構成することができる。
【0058】
スケジューラ308は次のような機能を提供することができる。
・ 絶対優先(SP)サービス
・ 不足ラウンドロビン(DRR)スケジューリングサービス
・ マルチキャストサービス向けRootキューサポート
・ 物理ポート当たりのSP/DRRキューの組み合わせ階層
・ ポート、rootキュー、メインCPUスケジューラを扱うメインスケジューラ
【0059】
任意の多様なスケジューリングタイプ、および場合によっては複数のスケジューリングタイプがスケジューラ308により提供される。
一実施態様において、スケジューラ308は階層型スケジューリングを実装する。例えば、rootキュースケジューラ、メインCPUスケジューラ、ポート毎のスケジューラがトラフィックキューをトップレベルのスケジューラにすべてスケジュールすることができる。より下のレベルのスケジューラはそれぞれSPキューとDRRキューをスケジュールすることができる。DRRスケジューラはDRRキューからのトラフィックをスケジュールすることができ、その後SPキューとDRRスケジュール済みキューがトップレベルのスケジューラにフィードする次のレベルのSPまたはDRRスケジューラでスケジュールされる。ポート毎のスケジューラはさらにすべてのポートに対する次のレベルのスケジューラ、例えば、トップレベルのスケジューラにフィードするラウンドロビン(RR)スケジューラにフィードすることができる。
【0060】
SPスケジューリングはすべてのキューに、それらの優先度に従って、サービスを提供する。より優先度の高いキューはより優先度の低いキューより前にサービスが提供される。音声およびビデオアプリケーションは高優先度のキューで低ジッタ、低遅延、低パケット損失のサービスを受けることができる。
SPスケジューリングは高優先度のアプリケーションに良好なサービスを提供する一方で、低優先度のパケットは枯渇してしまう可能性がある。この問題を克服するために、パケットポリサーおよび(または)シェイパーを最高優先度のサービスに使用し、DDRスケジューリングを残りに使用することができる。DRRを使用することで帯域幅がすべてのサービスで共有され、同時にQoSを維持できる。ユーザー要件に従って異なる優先度に重み付けを適用することができる。
【0061】
図3には具体的に示されていないが、トラフィックマネージャ164(
図1)を使用してパケットのポリシングとキューイングパラメータを制御することができる。また、キューデプス(depth)および(または)その他トラフィック管理機能に基づいてリンク上で一時停止フレームをいつ送信するかを決定する能力も提供する。
【0062】
一実施態様において、輻輳回避機能も提供される。例えば、WRED(Weighted Random Early Discard)機能は、AQD(平均キューデプス)に基づいてトラフィックキューに対するパケットの破棄可能性を決定することができる。AQDはソフトウェア設定可能な重み付けで計算でき、線形の破棄プロファイルを、例えば、最小AQD、最大AQD、最大破棄可能性インターセプトポイントによって定義することができる。バックプレッシャは、輻輳および(または)輻輳によるパケット破棄の減少または回避のために利用できるもう1つの機能の例である。この種の機能はキューマネージャ306またはその他の場所に実装することができる。
【0063】
ネットワークエンジンにより、その他の機能も代わりに提供することができる。前述は例示のみを目的としている。
【0064】
オフロード/アクセラレーションサブシステム
【0065】
図4は、オフロード/アクセラレーションサブシステム例400のブロック図である。このサブシステム例400は、パケットインターフェイス402、1つ以上のパケットエンジンプロセッサ404、1つ以上のセキュリティエンジン408、メモリブロック410、DMAコントローラ412、SA(セキュリティアソシエーション)データベース414、非パケットインターフェイス416を含む。
セキュリティエンジン160とパケットエンジン162は
図1と
図2で別々に示されているが、サブシステム例400はこれらのエンジンを両方実装している。
【0066】
パケットインターフェイス402は、サブシステム例400がこの例では少なくともデータ、パケットを他のコンポーネントと交換することを可能にする。パケットインターフェイス402を通じて、処理のためトラフィックキューからパケットが送られてきたり、処理後にキューまたはその他コンポーネントに返されたりする。パケットインターフェイス402、または場合によっては別のインターフェイスは、上述のようにVOQからオフロード/アクセラレーションエンジンプロセッサ316(
図4にパケットエンジンプロセッサ404として示される)へのパケットをスケジューリングするスケジューラ308(
図3)へのバックプレッシャ信号など、その他のタイプの信号交換をサポートすることができる。
一実施態様において、パケットインターフェイス402はパケットエンジンプロセッサ404とセキュリティエンジン408に接続するための複数の仮想内部ポートを提供する。この内部インターフェイスは、上述したように一実施態様においてポートおよびVOQを使用して、IPSec、GRE(汎用ルーティングカプセル化)、またはその他トンネルあるいはブリッジされたフレームなど、複数のパス(pass)でパケットに極めて高速のターンアラウンドを実現する。非パケットインターフェイス416は同様に、サブシステム例400が他のコンポーネントと少なくともデータを交換することを可能にするが、非パケットインターフェイスの場合、このデータはパケットの形式ではない。
一実施態様において、パケットインターフェイス402はイーサネットインターフェイスであり、非パケットインターフェイスは、例えば、PCIe、SATA、および(または)USBインターフェイスを含むことができる。
【0067】
パケットエンジンプロセッサ404(またはより一般的に、任意のオフロードプロセッサ)は、メインCPU102、104(
図1から
図3)と同じタイプのプロセッサ、または異なるタイプのプロセッサとすることができる。しかし、メインCPU102、104と異なり、パケットエンジンプロセッサ404などのオフロードプロセッサは、特定のタイプの機能を実行するための特殊用途または専用プロセッサとして構成される。
サブシステム例400において、これらの機能はパケットエンジンのパケット処理機能を含む。この例におけるパケットエンジンはメモリ410または別のメモリに格納されたソフトウェアに実装され、パケットエンジンプロセッサ404によって実行される。パケットエンジンプロセッサ404または別のオフロードプロセッサのタイプは、メインCPU102、104からオフロードされる特定機能によって異なる。一般に、メインCPU102、104はオフロードプロセッサより強力であるため、メインCPUのオフロードは、オフロードされるハードウェア(メインCPU)ほど複雑ではない追加のハードウェアに依存しない。これはまた、メインCPUからオフロードプロセッサまたはその他のオフロードハードウェアへのタスクの移動時に電力を節約できることにもつながる。
【0068】
サブシステム例400のセキュリティエンジン408は、セキュリティ機能のハードウェア実装を表す。一実施態様において、セキュリティエンジン408は構成可能であるがハードコードされたコアである。従ってサブシステム例400は2つのタイプのオフロードエンジンを示しており、ソフトウェアエンジンを実行する1つ以上のオフロードプロセッサ(この例ではパケットエンジンソフトウェアを実行するパケットエンジンプロセッサ404)と、1つ以上のハードウェアエンジン、すなわちセキュリティエンジン408を含んでいる。
【0069】
サブシステム例400のメモリ410は、一実施態様において、1つ以上のソリッドステートメモリを含むことができる。例えば、メモリ410はSRAM(Static Random Access Memory)の複数のブロックを含むことができる。SAデータベース414もメモリに格納されるが、
図4ではメモリ410とは別に示されている。
一実施態様において、セキュリティエンジン408、および場合によっては複数のセキュリティエンジンが実装されていても1つのセキュリティエンジンのみが、SAデータベース414に対する完全なダイレクトアクセスを有する。サブシステム例400のその他のコンポーネントおよび(または)サブシステム例が実装されているシステムのコンポーネントは、SAデータベース414が格納されているメモリデバイスまたは領域にライトオンリーのアクセスを有することがある。
【0070】
DMAコントローラ412はオンボードDMAコントローラを表し、サブシステム例400に
図3において312で示されるメモリ、SRAM、および(または)1つ以上のオンチップメモリなどの外部メモリへのアクセスを提供する。DMAコントローラ412は、一実施態様において、セキュリティキーおよびデータを移動して遅延と処理オーバーヘッドを減少するためLinuxドライバとも共有される。
【0071】
パケットエンジンは、専有のおよび(または)新しいカプセル化プロトコルをアクセラレーションするためにカスタマイズできる、強力で再構成可能なブロックである。
一実施態様において、パケットエンジンは異なるプロトコルを橋渡しする。例えば、一実施態様において、ネットワークエンジン例300(
図3)はイーサネットスイッチングを処理するためにハードコードされており、パケットエンジンがネットワークエンジンとその他非イーサネットインターフェイス間のトラフィックを橋渡しする。この場合、パケットは最初の処理またはイーサネットへのトランスレーション/変換のため非パケットインターフェイス416を通じてパケットエンジンプロセッサ404に渡され、その後ネットワークエンジンに提供される。
【0072】
パケットエンジンにサポートされる機能の例には、次を1つ以上含むことができる。
・ IPSecパケット処理(リプレイ、SA変更、カプセル化、カプセル化解除)
・ IPフラグメント再アセンブリ
・ ディスクブロック暗号化/暗号解除
・ IPトンネリング作成および終了
・ ワイヤレスブリッジング、IEEE802.11とEthernet II/IEEE 802.3間の変換など
【0073】
ディスクブロック暗号化/暗号解除などのセキュリティ関連タスクには、セキュリティエンジン408も関与する。
【0074】
上掲の例のようなデータ処理タスクは、メインCPU102、104からサブシステム例400にオフロードすることができ、それによりメインCPUのデータ処理実行の負荷を減少できる。それでより多くのメインCPU処理サイクルが、より上位のレイヤアプリケーション、またはサービス関連タスクなど、他のタスク実行に利用できるようになる。オフロードエンジン、またはより一般的に、そのようなエンジンをサポートするオフロードサブシステムは、オフロードされる特定のデータ処理タスク向けに最適化することもでき、それによりそれらのタスクがメインCPU102、104に留まった場合よりも効率的かつ高速にそれらのタスクを実行することができる。
一実施態様において、パケットエンジンは、メインCPU102、104(セキュリティエンジン408と合わせて暗号化をサポートするため)と、カプセル化、暗号化、ブリッジング、再アセンブリをサポートするためのネットワークエンジン158、300を含む2つのユーザータイプを有することができる。これらのユーザーは、一部の実施態様においては同時に、各ユーザーに対してチップ上で複数のセキュリティアソシエーションをあらかじめ構成するためにセキュリティエンジン408を使用できる。
【0075】
セキュリティエンジン408は任意の多様なアルゴリズム、暗号、ハッシュ、およびIPSec暗号化/暗号解除、ディスクブロック暗号化/暗号解除、ベースステーション暗号化/暗号解除などのセキュリティ機能をサポートすることができる。
【0076】
またセキュリティエンジン408はメインCPU102、104から暗号タスクをオフロードするために使用することもできる。そのようなタスクは、純粋にソフトウェアに実装した場合、処理負荷が高い。実装可能なモデルとしては、メインCPU102、104が直接セキュリティエンジン408を制御するモデルと、パケットエンジンプロセッサ404などのオフロードプロセッサがセキュリティエンジンを制御するモデルの2つがある。
【0077】
直接制御する場合、メインCPU102、104で実行するソフトウェアが、暗号化/暗号解除など1つ以上のセキュリティ機能を実行するように、例えばセキュリティエンジンを制御するメモリマップドレジスタを使用して、セキュリティエンジン408をプログラムする。その後メインCPU102、104がセキュリティエンジン408により処理される1つ以上のパケットの場所を示すメモリポインタを提供できる。セキュリティエンジン408はパケットの暗号化/暗号解除またはその他処理を行ってから、ポインタをメインCPU102、104に返す。この例では、データがメインCPU102、104とセキュリティエンジン408間でメモリポインタの交換を通じて共有される。その他のデータ共有または交換メカニズムも、または代わりに、セキュリティエンジン408へのセキュリティタスクのオフロードを可能にするために利用することができる。
メインCPU102、104ではなく、オフロードプロセッサがセキュリティエンジン408を制御する「間接的な」制御の実施態様の場合、メインCPUが処理される1つ以上のパケットをオフロードプロセッサに示すか、または提供する。例えば、メモリポインタをパケットエンジンプロセッサ404に提供してもよい。その後オフロードプロセッサがセキュリティエンジン408をプログラムして、セキュリティエンジン408によるパケットの暗号化/暗号解除またはその他セキュリティ処理を調整する。これにはセキュリティエンジン408にメモリポインタを提供すること、およびセキュリティ処理が完了したときセキュリティエンジンからメモリポインタを受け取ることが含まれる。その後オフロードプロセッサが、例えばメモリポインタをメインCPUに返すことで、メインCPU102、104に完了を示す。
【0078】
当然のことながら、パケットエンジンプロセッサ404とセキュリティエンジン408は、オフロードまたはアクセラレーションエンジンの例である。その他の実施態様は追加のエンジンおよび(または)異なるエンジンを含むことができる。例えば、パケットエンジンプロセッサ404は、他のエンジンのためのソフトウェア実行にも使用される共有プロセッサとすることができる。
セキュリティエンジン408同様に、専用のハードウェアに他のオフロードまたはアクセラレーションエンジンを実装することができる。連結リストウォーカーエンジン、バッファアロケータエンジン、SAMBAオフロードエンジンは、さらに機能性を高めるためにオフロードまたはアクセラレーションサブシステムに実装できる他のオフロードまたはアクセラレーションエンジンの例である。これらの追加エンジン例は
図4に示されていないが、パケットエンジンプロセッサ404およびセキュリティエンジン408と同じように、セキュリティエンジンについて示されているSAデータベース414への直接のフルアクセスを例外として、
図4のその他コンポーネントと相互接続することができる。
【0079】
連結リストウォーカーエンジンは、例えば、連結リストウォーキングのタスクをオフロードするハードウェアモジュールとして実装することができる。パケットを処理するソフトウェアは連結リストデータ構造に配置されたパケットの格納と取得に時間がかかることがある。これらの構造はかなり複雑になり、パケットが格納されているリーフノードを追跡するために数多くのメモリ読み出しを要する場合がある。
連結リストウォーカーエンジンはメインCPU102、104で実行されるソフトウェアからこの処理をオフロードするために使用することができる。連結リスト構造で数多くのメモリ読み出しを行う代わりに、メインCPU102、104は、連結リスト構造をリーフノードレベルまで辿った連結リスト構造のヘッドを連結リストウォーカーエンジンに提供することができる。これが行われると、パケットのソフトウェアによる読み出し/書き込みが簡単になる。
【0080】
一実施態様において、連結リストウォーカーエンジンは、次のポインタのアドレスを示すバイトを見つける場所およびリストの構造に関するその他フォーマット情報など、リストのフォーマットでプログラムすることができる。連結リストウォーカーエンジンは、例えば、各フォーマットがインデックスによって識別される、複数の異なるフォーマットをプログラムすることができる。メインCPU102、104で稼働するソフトウェアがリストをウォークするとき、連結リストウォーカーエンジンに、リストのヘッドのアドレス、リストのフォーマットを説明するインデックス番号、実行するアクションのインジケータを提供することができる。
実行できるアクションには、例えば、リストの終わりに1つ以上の新規項目を挿入すること(その場合挿入する項目を含むメモリ内のアレイへのポインタをメインCPU102、104が提供できる)、リストから最後のN項目を削除すること(その場合連結リストウォーカーエンジンが埋めることができるメモリ内の空きアレイへのポインタをメインCPUが提供できる)、および(または)その他のアクションが含まれる。連結リストウォーカーエンジンは、一実施態様において、割り込みを設定することでメインCPUに完了を知らせる。
【0081】
バッファアロケータエンジンは、例えば、メモリアロケーションコールのハードウェア実装として、実装することができる。メインCPU102、104で稼働するソフトウェアがメモリに何かを格納したいとき、メモリアロケーションコールを使用してカーネルにメモリ割り当てを要求することがある。このコールはたくさんのメインCPUサイクルを使用し、毎秒何回も発生することがある。オフロードエンジンアーキテクチャでは、ソフトウェアがメモリを必要とするとき代わりにバッファアロケータエンジンからメモリを要求することができる。バッファアロケータエンジンはシステム内の利用可能なメモリを追跡し、ソフトウェアに要求されたバッファを返す特殊なハードウェアオフロードエンジンとすることができる。
一実施態様において、バッファアロケータエンジンによりメインCPU102、104に返されるのは、割り当てられたバッファ(のメモリアドレス、例えば)へのポインタである。
【0082】
SAMBAオフロードエンジンはSAMBAプロトコルをアクセラレートする実装である。SAMBAプロトコルはハードディスクドライブなどのストレージをネットワーク上でアクセス可能にする。このプロトコルはネットワーキングトラフィックを受け取り、ディスク上への格納に適したフォーマットに処理することを必要とする。ネットワーキングインターフェイスで受け取る各パケットをSAMBAで処理する必要があるため、たくさんのCPUサイクルを要することがある。
SAMBAオフロードエンジンは、メインCPU102、104がディスク宛てのネットワークトラフィックをSAMBAオフロードエンジンにただ転送することを可能にする。その後SAMBAオフロードエンジンはSAMBAプロトコルに従ってトラフィックを処理し、すべての得られたファイルシステム管理を処理するため、メインCPUで実行されるはずであったデータ処理タスクを実行することで、メインCPU102、104の処理負荷を軽減する。
【0083】
詳細な実施例−WiFi(登録商標)(Wireless Fidelity)ウェブフィルタリング
【0084】
処理アーキテクチャのコンポーネントは
図1から
図4を参照した例として上述されている。WiFiアプリケーションのコンテキストでオフロードを提供する実施態様の詳細な実施例について、処理アーキテクチャの更なる例のブロック図である
図5から
図8を参照しながら、以下で説明する。
【0085】
図5のアーキテクチャ例500は、5GHz IEEE 802.11ac WiFiモジュール502を含む。他の実施態様はその他のタイプのWiFiモジュールを含むことができる。イーサネットネットワークインターフェイスカード(NIC)504も示されている。これらモジュールの両方がこの例ではPCIeインターフェイスに接続されている。PCIeインターフェイスは
図5で別途示されていないが、
図1と
図2では118、120、122で示されている。デュアルメインCPUアーキテクチャが
図5に示されている。複雑化を回避するために、メインCPUは1つのブロック510で示されている。
各メインCPU510がLinuxネットワーキングプロトコルスタック512をサポートし、別の実施態様ではその他のオペレーティングシステムをサポートしてもよい。WiFiドライバ514は下位レイヤドライバ516と上位レイヤドライバ518を含む。イーサネットドライバが520で示され、メインCPU510はネットワークインターフェイスドライバ522も実行する。CPUポート524はメインCPU510とネットワークエンジン530間の通信を可能にする。
【0086】
ネットワークエンジン530は転送エンジン532を含み、ネットワークエンジン530のその他ハードコードされた機能は534で示されている。アーキテクチャ例500には、536で示すように、1ポートにつき8つの優先キューがある。ネットワークエンジン530内の1つ以上のネットワークインターフェイスがギガビットイーサネット(GE)0、GE1、GE2として示されるイーサネット接続上で通信を可能にする。これらの接続は、一実施態様において、GMACインターフェイス146、148、150を介している(
図1)。
【0087】
図5のアーキテクチャ例500は、ネットワークエンジン530の形式でハードウェアオフロードエンジンまたはアクセラレータを含む。さらにオフロード/アクセラレーションハードウェアが
図6のアーキテクチャ例600に示されている。セキュリティエンジン0、セキュリティエンジン1、パケットエンジン0、パケットエンジン1は追加のオフロードとアクセラレーションを可能にする。
ここで説明されるように、セキュリティエンジンはセキュリティ関連機能を処理し、パケットエンジンはデータプレーン機能を処理する。セキュリティエンジンはハードコードされているがメインCPU501で稼働するシステムソフトウェアにより構成可能であり、パケットエンジンはパケットエンジンプロセッサ602、612、パケットメモリ604、614、およびDMAコントローラ606、616をそれぞれ含む。
【0088】
メインCPU510は、上述のとおり、Linuxネットワーキングプロトコルスタック512をサポートし、ネットワークエンジン530およびネットワークインターフェイスドライバ522との通信にCPUポート524を提供する。ネットワークエンジンカーネルモジュール626が転送機能を制御し、Linuxネットワーキングプロトコルスタック512インターフェイスと530で示されるネットワークエンジンハードウェア間のインターフェイスを実装する。ネットワークエンジンカーネルモジュール626はネットワークエンジン530でオフロードとフロー管理機能を可能にするためのカーネルフックも提供し、ネットワークエンジンの操作、構成、モニタリングを制御する。
【0089】
アーキテクチャ例700(
図7)には、PCIeインターフェイスを介してパケットエンジンに接続する、2.4GHz IEEE802.11nモジュール702と、5GHz IEEE802.11acモジュール704を含む2つのWiFiモジュールがある。パケットエンジン0とパケットエンジン1は
図7においてこれらのエンジンによってこの実施態様で実行される機能を例示する機能ブロックで主に表されている。
図に示すように、パケットエンジン0は下位レイヤWiFi送信(Tx)ドライバ714を実行し、パケットエンジン1は下位レイヤWiFi受信(Rx)ドライバを実行する。各パケットエンジンは、メモリに格納されるプロセッサ間通信(IPC)メールボックス716、726と、例えばトンネリング作成と終了を処理するためのWiFiドライバトンネルモジュール718、728を含む。1つ以上のセキュリティモジュールも提供され、パケットエンジンおよび(または)メインCPU510により使用されるが、図の複雑化を回避するために
図7には示されていない。メインCPU510はLinuxネットワーキングプロトコルスタック512をサポートし、かつネットワークインターフェイスドライバ522と、ネットワークエンジンカーネルモジュール626を含む。また各メインCPU510は、ネットワークエンジン530と通信するためのCPUポート524、IPCメールボックス734、上位レイヤドライバ740とWiFiオフロードアダプテーションレイヤ(WOAL)738を含むWiFiドライバ736、およびWiFiドライバトンネルモジュール742、744も含む。
【0090】
メインCPU510とパケットエンジンでWiFiドライバトンネルモジュール742、744により提供されるWiFiドライバトンネルは、802.11(WiFi)フレームをネットワークエンジン530経由でメインCPUに送達することができる802.3(イーサネット)フレームにカプセル化する。
一実施態様において、ネットワークエンジン530は標準のイーサネットに基づいており、802.3フレームを把握して転送することができる。WiFiモジュール702、704経由で送受信されるフレームは802.3フレームとは非常に異なる802.11フレームの形式である場合がある。
【0091】
IPCメールボックス734はパケットエンジンのIPCメールボックス716、726と共に動作し、メインCPU510とパケットエンジン間の効率的な通信メカニズムを提供する。これについては以下で詳細に説明する。
メインCPU510とパケットエンジン間のIPCメカニズムは、一実施態様において、構成、制御、管理機能に使用される。現在のWiFiオフロード例では、ステーションごとに、802.11フレームと802.3フレーム間の相互変換を直接制御および更新するために使用される。また、診断およびパフォーマンスモニタリングなどの管理にも使用できる。
【0092】
WiFiテクノロジーにおける「ステーション」とは、アクセスポイント(AP)に接続された任意のクライアントデバイスを指す。ここで開示されるプロセッサアーキテクチャは、例えば、家庭用ゲートウェイなどのAPに実装することができる。ステーション対ステーションの通信は、通常APを経由する。各ステーションで、802.11フレームヘッダが異なることがあり、一実施態様において、パケットエンジンが各ステーション、または各宛先MACアドレスに対するトランスレーションテーブルを保持する。
【0093】
WiFiドライバ736について、例えば
図5において、WiFiユーザーデータフレームの処理時にメインCPUの利用率が高い理由は、高コンテキストスイッチと長いメモリアクセスレイテンシである。
図7に示すWiFiオフロードの目的は、ユーザーデータトラフィックを移し、パケットエンジンとネットワークエンジン530に転送してこのボトルネックを排除することにある。その結果、それらのデータフレームはメインCPUパスを通過しなくなる。
図7に示すオフロード設計の例では、パケットエンジンがデータインターフェイスを処理し、ユーザーデータフレームをWiFiモジュール702、704に、およびWiFiモジュール702、704から移動させる。したがって、パケットエンジンは714、724で示されるように下位のレイヤドライバ機能を実行し、プロトコル管理とコントロールに関連する上位レイヤドライバ機能は、740で示されるように、メインCPU510上のWiFiドライバ736に留まる。WOAL738はこのオフロードを可能にするが、これについては以下でより詳細に説明する。
【0094】
ネットワークエンジン530は、転送、フレームバッファリング、QoS機能などの提供を継続する。下位レイヤドライバ714、724は主に、WiFiモジュール702、704とパケットエンジン間(オフロードケース、
図7)で、またはメインCPU510間(非オフロードケース、
図5)でのデータフレームの移動に関与する。さらに、下位レイヤドライバ714、724は、イーサネットベースのネットワークエンジン530のための802.11形式から802.3フレーム形式への変換、フレームアグリゲーション、速度コントロール、省電力などのその他データ処理タスクを選択的に処理する。フレーム変換が行われる場合、802.11ヘッダ情報はステーションごとに異なるため、パケットエンジンが各ステーション用の変換テーブルを保持する。このテーブルは、コントロールおよび管理フレームを使用して各テーブルとステーションの関連付けを担っているメインCPU510によりIPCメールボックス734、726、716経由で動的に更新される。
【0095】
運用において、WiFiモジュール702、704はPCIeまたはホストインターフェイスで、802.11フレーム形式または802.3フレーム形式の2つのユーザーデータフレーム形式のいずれかをサポートする。例示の目的で、フレームが宛先MACアドレスに基づいて転送されるブリッジングモードになるようにLinuxネットワーキングプロトコルスタック512が構成された実施例を考察する。
【0096】
WiFiドライバトンネルモジュール718、728、742、744により提供されるWiFiドライバトンネルは、パケットエンジンとメインCPU510上のWiFiデバイスドライバ736の上位レイヤドライバ740間でフレームを送信する内部経路である。これらのトンネルは、一実施態様において、ネットワークエンジン530内の専用フローとして確立され、ネットワークエンジンによって認識可能な802.3フレーム内に802.11フレームをカプセル化する機能を有する。このカプセル化は、一実施態様において、WiFiドライバトンネルモジュール718、728、742、744によって提供される。WiFiドライバトンネル742、744はCPUポート524上の別個の論理インターフェイスとすることができ、それぞれ8つの仮想優先キューを持つ。この実装例において、CPUポート524は8つの論理インターフェイスまたは64の仮想優先キューをサポートする。ネットワークエンジン530に接続された各GEインターフェイスもネットワークインターフェイスドライバ522上に8つの仮想優先キューを有することができる。
【0097】
受信(Rx)の動作では、フレームタイプにより識別される管理フレームがWiFiモジュール702、704のいずれかからパケットエンジン1によって受信されると、パケットエンジンはWiFiドライバトンネルモジュール728、744間のWiFiドライバトンネルを介してこのフレームを直接メインCPU510に送信する。このフレームは上位レイヤドライバ740に透過的に送達される。WOAL738はデータ処理タスクのオフロードを可能にし、上位レイヤドライバ740と下位レイヤドライバ714、724間のインターフェイスを提供して、オフロードが上位レイヤドライバに透過的に行われる。
【0098】
異なるフレームタイプによって識別されたデータフレームが、WiFiモジュール702、704の1つからパケットエンジン1に受信されると、パケットエンジンの下位レイヤドライバ724がまず送信またはフォワーディングテーブルをチェックし、宛先MACアドレスについてテーブルにすでにエントリがあるか判断する。エントリがある場合、このフレームはデータフロー中でその宛先MACアドレスに対する最初のデータフレームではなく、ネットワークエンジン530に送られて転送・処理される。エントリがない場合、それはその宛先MACアドレスに対する最初のデータフレームであり、WiFiドライバトンネルを介してメインCPU510に転送される。
上位レイヤドライバ740は、802.11から802.3へのフレーム形式の変換を含め、
図5の上位レイヤドライバ518と同じようにそのフレームを処理する。その後そのフレームがLinuxネットワーキングプロトコルスタック512に渡され、そこで転送決定が行われる。この決定はフレームの転送先となるイグレスポートを提供する。ネットワークエンジンカーネルモジュール626はソースのMACアドレスについてネットワークエンジン530内にフローエントリを作成する。フレームはネットワークインターフェイスドライバ522に渡され、さらにそこからネットワークエンジン530に送信されて転送される。
【0099】
一方、送信(Tx)の動作では、フレームがネットワークエンジン530のイーサネットインターフェイスのいずれかで受信され、その宛先MACアドレスにフローエントリの一致がない場合、メインCPU510のネットワークインターフェイスドライバ522に転送される。ネットワークインターフェイスドライバ522はフレームをLinuxネットワーキングプロトコルスタック512に渡し、転送の決定が行われる。このフレーム用のイグレスポートがWiFiインターフェイスの場合、802.3形式のフレームがWiFiデバイスドライバ736の上位レイヤドライバ740に渡されて処理される。その後、または実質的に同時に、ネットワークエンジンカーネルモジュール626によってフローエントリがネットワークエンジン530で作成され、それ以降同じ宛先MACアドレスを備えたフレームはメインCPU510の関与なくネットワークエンジン530から直接パケットエンジン0に転送され、これによりオフロードの効果が提供される。
フレームがネットワークエンジン530により直接転送されたときのWiFi下位レイヤデバイスドライバ714での基本動作は、他の処理機能の中でも特に、802.3フレームを802.11フレームに変換することである。フレームはWiFiドライバトンネルを介してパケットエンジン0に送信される。その後、または実質的に同時に、WOAL736はパケットエンジン0にコンフィギュレーションメッセージを送信し、送信テーブルにエントリが作成され、その宛先MACアドレスによりインデックスされる。このエントリによって、その宛先MACアドレスを持つ802.3フレームが802.11フレームに変換され、適切なWiFiモジュール702、704に直接送信することが可能となる。
【0100】
図8のアーキテクチャ例800は、
図7のアーキテクチャ例700に実質的に類似しているが、パケットエンジン0とパケットエンジン1の両方が送信および受信の動作を処理する点が異なる。したがって、下位レイヤドライバ814、824、IPCメールボックス816、826、およびWiFiドライバトンネルモジュール818、828、842、844は双方向通信をサポートする。IPCメールボックス816、826間の相互作用もアーキテクチャ例800では若干異なり、この例ではIPCメールボックスが相互に直接相互作用する必要がなく、パケットエンジンが送受信両方を処理する。
図7のアーキテクチャ例700と
図8のアーキテクチャ例800の違いの1つは、前者はWiFiモジュール702、704の処理能力要件が非対称な場合、ロードバランシングが可能である点である。しかし、両方のWiFiモジュール702、704をアーキテクチャ例800におけるパケットエンジン0と1両方に相互接続することも可能である。
【0101】
図9の処理アーキテクチャ例900はウェブフィルタリングに関連する。この実施態様において、ウェブフィルタリングに関連するデータ処理タスクがメインCPU510からハッシュクラシファイア908、トラフィックマネージャ906、転送エンジン932を含むネットワークエンジン930にオフロードされる。ネットワークエンジン930は他の実施態様と同じように実装できるが、
図9では、一部の実施態様における転送タスクに加えて、ウェブフィルタリングタスクのオフロードを提供することを示すため、異なるラベル付けがされている。
ネットワークエンジン930はインターネット902と通信する。プロトコル管理または制御タスクは、
図9においてURL(Uniform Resource Locator)プロセッシング910として示されているメインCPU510に留まる。URLプロセッシング910はこの実施例においてメインCPU510により実行されるソフトウェアの形式である。ローカルURLデータベース912は、データトラフィックがどのようにフィルタされるかを指定するフィルタリング制御情報を格納する。
一実施態様において、ローカルURLデータベース912は「ホワイトリスト」または許可されているデータトラフィックを指定した許可済みフロー情報(許可されていないフローがドロップされる、または別の方法でフィルタされる)を格納することができる。ローカルURLデータベース912は、示された例において、クラウドセキュリティサーバー904からのURLデータベース更新によって自動入力される。これらの更新は毎日、および(または)その他自動化されたスケジュール、および(または)要求により実行することができる。ネットワークエンジンカーネルモジュール914も
図9に示されている。
【0102】
ハッシュクラシファイア908、転送エンジン932、およびトラフィックマネージャ906は、一実施態様において、ハードウェアベースであり、例えば、コンフィガラブルながらもハードコードされたハードウェアに実装される。ハッシュクラシファイア908は、処理アーキテクチャ例900において、ネットワークエンジンドライバ914によるホワイトリスト構成に基づき、HTTPフローを識別する。例えば、フロー中の新しいパケットの場合など、HTTP(HyperText Transfer Protocol)フロー(1)がハッシュクラシファイア908に識別されない場合、そのフローは識別のためメインCPUに転送される(2)。URLプロセッシング910の一部として、ローカルURLデータベース912、および(または)クラウドサービスセキュリティサーバー904がコンサルトされる(3)、(4)。フローが許可されたフローの場合(5)、ネットワークエンジンカーネルモジュール914によってその許可されたフローに対してハッシュクラシファイア908のハッシュテーブルが構成される(6)か、URLプロセッシング910が拒否されたフローに対するTCPセッションリセットとともにHTTP応答、または、URLリダイレクトメッセージ(図示しない)を送信する(5−拒否)。このHTTP応答またはリダイレクトがネットワークエンジン930を通じて要求しているユーザーシステムに返される。
【0103】
ハッシュクラシファイア908に認識されたフローは、メインCPU510の関与なくネットワークエンジン930により処理され、それにより最初の識別後は、メインCPUからデータ処理がオフロードされる。
【0104】
図5から
図9のWiFiとウェブフィルタリングの例は、メインCPU510からの実質的なデータ処理タスクのオフロードを可能にする最初のパケット処理の形態を示している。フローがオフロードエンジンによって認識されないときメインCPU510は関与するが、メインCPU510で実行されるソフトウェアに最初に識別された後のフローに対するデータ処理はオフロードすることができる。管理または制御タスクはメインCPU510に留まり、データ処理はオフロードエンジンにオフロードされる。
図7と
図8のWiFiの例では、メインCPU510が上位レイヤWiFiプロトコル管理または制御タスクをやはり処理しているため、オフロードすることでプロトコルがどのように運用されるかが変化したり、あるいはWiFiモジュール702、704に変更が必要になったりすることはない。同様に、
図9のウェブフィルタリング例では、URLプロセッシング910がメインCPU510にあり、ネットワークエンジン930のハッシュクラシファイア908へのフィルタリングのオフロードはHTTPとTCPの動作に影響しない。HTTPとTCPのプロトコル管理または制御タスクはメインCPU510によって処理され、データ処理はネットワークエンジン930にオフロードされる。
【0105】
ソフトウェアパーティショニング/スプリッティング
【0106】
ここで開示される処理アーキテクチャは、1つ以上のメインCPUから1つ以上のオフロードまたはアクセラレーションエンジンにタスクをオフロードすることを可能にする。例えば、周辺デバイスドライバなどのソフトウェアがプロトコル管理または制御タスクとデータ処理タスクを含むことがある。
一実施態様において、管理または制御タスクはメインCPUに留まるため、オフロードによってプロトコルまたはWiFiモジュールなどのインターフェイスデバイスが運用される方法が変化することはなく、下位レイヤデータ処理タスクがオフロードされる。そのようなソフトウェアパーティショニングまたはスプリッティングは、どのソフトウェアまたはどのタスクをオフロードエンジンに移すとよいか、どのソフトウェアまたはタスクをメインCPUに留めるべきかを特定することを必要とする。
一実施態様において、ほとんどのデータトラフィックを処理し、そのため汎用アプリケーションプロセッサ上で最も低効率であるソフトウェアドライバは、書き換え、修正、またはその他の方法でオフロードエンジンに移され、メインCPUにより実行されるために留まるソフトウェアから除外される。
【0107】
図10にパーティション済みデバイスドライバの例を示す。パーティション済みデバイスドライバ例1000は、上位レイヤドライバ740がメインCPU510に残り、下位レイヤドライバ814、824がパケットエンジンにオフロードされる、
図7のWiFiデバイスドライバのパーティショニングに関連する。このオフロードはWOAL738によって可能とされる。WiFiドライバトンネルモジュール742、744とIPCメールボックス734が
図7ではWOAL738から分離して示されているが、
図10ではWOALの一部として示されている。これは、WOALがこれらのコンポーネントと相互作用して下位レイヤドライバ814、824と上位レイヤドライバ740間のアダプテーションレイヤまたはインターフェイスを提供するためである。パーティション済みデバイスドライバ例1000において、WOAL738はアプリケーションプログラミングインターフェイス(API)である。このAPIの目的は、下位レイヤドライバと上位レイヤドライバの分離を可能にして、いずれかにおける変更の他方に対する影響をほぼ、またはまったくなくすことである。
【0108】
一実施態様において、上位レイヤドライバ740は802.11プロトコル管理タスクを実行し、Linuxネットワーキングスタック512(
図7、
図8)にデバイスドライバインターフェイスを提供する。下位レイヤドライバ814、824は、示された例ではPCIeインターフェイスとPCIeコントローラドライバ914を介して、周辺デバイス、すなわちWiFiモジュール702、704(
図7、
図8)との間の実際のデータ移動を処理する。1002でのフレームコンバータによる802.11/802.3フレーム変換、1004でのフレームアグリゲータによるフレームアグリゲーション、1006での速度コントローラによる速度制御、1008での電源コントローラによる省電力機能などのタスクは、この例では下位レイヤドライバ814、824でオフロードされる。
【0109】
WiFiモジュール702、704と下位レイヤドライバ714、724、814、824間のデータの移動は、一実施態様において、パケットリング構造を介したDMA操作により実行される。このパケットリング構造には、パケットメモリに格納されたパケットをリードポインタとライトポインタで記述するパケットディスクリプタを含む。各パケットディスクリプタ1010、1012は、そのパケットに対するメモリロケーションやパケット長などのパケット情報を有する。パケットをWiFiモジュール702、704からパケットエンジンに転送する準備ができると、割り込み信号がパケットエンジンに送信される。その後パケットエンジンが受信パケットリング内のリードポインタから送信を開始する。パケットエンジンからWiFiモジュール702、704への送信用に類似のパケットリングがある。
【0110】
上位レイヤドライバ740と下位レイヤドライバ814、824間に、WOAL738は上位レイヤドライバに透過的な方法でオフロード機能を可能にする「shim」またはインターフェイスレイヤを提供する。WOAL738は、IPCメールボックス734を介してオフロードエンジン、この例ではすなわちパケットエンジンを制御し、これと通信するとともに、透過的なデータ送達のためのWiFiドライバトンネルも提供する。
WOAL738により提供されるオフロードAPIとの互換性のために下位レイヤドライバ814、824を書き換えまたはその他修正することができ、それがその後上位レイヤドライバ740とのインターフェイスとなる。オフロードは、WOAL738がインターフェイス定義または仕様と一貫した上位レイヤドライバへのインターフェイスを提供し、それを通じてメインCPU510に残るルーチンまたは関数(
図7、
図8)とオフロードされるルーチンまたは関数を相互作用させることで、完全に上位レイヤドライバ740に透過的にすることができる。例えば、WOAL738はドライバの「ネイティブ」型で上位レイヤドライバ740からの関数またはルーチン呼び出しを受け入れ、結果もネイティブ型で上位レイヤドライバに返すように適応されることもできる。ネイティブ型とオフロードされたタスクまたは機能の実行に使用されるその他の型間のトランスレーションはWOAL738により処理することができる。WiFiドライバトンネルモジュール742、744はこの種の例を表しており、パケットエンジンとメインCPU510間でネットワークエンジン530を通じてWiFiフレームをトランスポートすることができる(
図7)。
【0111】
図10は、1つ以上のメインCPUからオフロードプロセッサおよび(または)その他ハードウェアへの機能をオフロードするためのWiFiデバイスドライバソフトウェアのスプリッティングまたはパーティショニングに関するものである。類似のソフトウェアスプリットまたはパーティションを
図8の処理アーキテクチャ例800で使用することができる。他の実施態様においては、その他タイプのデバイス用ドライバおよび(または)さらにはその他タイプのソフトウェアをスプリットまたはパーティションして特定のタスクをオフロードすることができる。例えば、
図9の処理アーキテクチャ例900では、ウェブフィルタリングソフトウェアメインCPU510とネットワークエンジン930間でスプリットされている。プロトコル管理または制御タスクを処理するURL処理は、メインCPUに留まる。データ処理タスク(この場合はフィルタリング)は、ネットワークエンジン930にオフロードされる。
ソフトウェアスプリッティングをより一般的に考慮すると、メインCPUからのタスクオフロードの目的の1つは、汎用プロセッサ上では非効率なタスクを、あまり強力ではないものの専用に構成されたプロセッサまたはその他オフロードハードウェアに移すことである場合がある。この種のアプローチは例えば、メインCPU処理のボトルネックおよび(または)高いメインCPUの使用状況に動機付けられる可能性がある。また、オフロード戦略の開発において、プロトコルを変更しないことが望ましく、変更すると処理負荷の増加および(または)処理アーキテクチャに接続するデバイスにおける変更を生じる場合があるためである。
WiFiオフロードを例としてみると、一部のタスクはデータがPCIeインターフェイスに到着する前に「フロントエンド」で実行されるように、WiFiモジュール702、704(
図7、
図8)を変更することが可能であるかもしれない。しかしながら、このアプローチは、WiFiデバイスの設計に大きな影響を与える。従来、WiFiデバイスはインテリジェントではなく、処理のインテリジェンスは処理システム内のほかの場所に存在する。そのインテリジェンスをWiFiデバイス自体に移すことはデバイス設計に大きな変化を必要とし、WiFiプロトコルにも重大な影響を与える。
【0112】
一実施態様において、デバイスドライバソフトウェアおよび(または)その他のタイプのソフトウェアの分析を実施し、一実施態様において、単一のレイヤのみでのデータ処理を含む下位レイヤ(例:レイヤ1またはレイヤ2)データ処理のボトルネックを特定することができる。プロトコル管理または制御タスクはあまりプロセッサに負荷をかけない傾向があり、一般的にデータ処理タスクよりも頻繁に実行されないため、プロトコル管理または制御タスクはメインCPUに残す好ましい候補となり得る。
データ処理タスクがオフロードに特定されると、それらのタスクを実行するソフトウェアをオフロードハードウェアで実行できるように書き換えまたはその他修正することができる。一部の実施態様において、そのようなタスクはソフトウェアのタスクを模擬するハードウェアにハードコードすることができる。オフロードタスクのハードコーディングは速度の面でさらにメリットを提供できる。
【0113】
例えば、デバイスドライバは、特定のデータ対応に特定のタスクを実行する場合がある。したがって、特定のタイプまたはパターンの入力について(ここでは一般的に「フロー」と呼ばれる)、特定のタスクまたは特定の一連のタスクが常に実行される。この種のアクションはオフロードエンジンにソフトコードまたはハードコードすることができる。
一実施態様において、新しいデータフローのための最初のパケットがヘッダ処理またはその他プロトコル管理処理に基づく識別のためにメインCPUに提供される。続いてメインCPUで実行されるソフトウェアがオフロードエンジンテーブルを更新するか、その他の方法でオフロードエンジンに識別情報を提供することができ、それ以降同じフロー内のその他のパケットを識別し、メインCPUの関与なく同じデータ処理タスクを実行することができる。この例においてそのようなメインCPUによる「最初のパケット」処理は一元化されたプロトコル管理処理を提供すると同時に、データ処理タスクのオフロードを可能にする。最初のパケットは、一実施態様において、オフロードのためのフローがメインCPUで特定されるまで複数のパケットを含むように延長することができる。
【0115】
ソフトウェア機能のスプリッティングまたはパーティショニングはメインCPUとオフロードプロセッサ間に通信オーバーヘッドを生じる。一部の実施態様においてはキャッシュコヒーレンシハードウェアが提供され、プロセッサ間のシステムバスに跨るトランザクションが各プロセッサのメモリサブシステムの観点からコヒーレントであるようにすることを可能にする。これによってリソースのロックとロック解除に費やされるオーバーヘッドの量を減少し、結果的にプロセッサの通信をより高速化することができる。キャッシュコヒーレンシの実装は同種のメインCPU/オフロードプロセッサアーキテクチャ(すなわち、メインCPUとオフロードプロセッサが同じタイプのものである)または異種プロセッサアーキテクチャに提供できる。
【0116】
キャッシュコヒーレンシは、スピンロックやメールボックスなどメッセージを渡すメカニズムを待つオーバーヘッドを生じることなく、メインCPUがメモリとキャッシュを使用してオフロードエンジンと通信することを可能にする。これにより、メインCPUクロックサイクルの浪費を減らし、それによって消費電力を最小化すると同時にパフォーマンスを最大化する。
【0117】
一実施態様において、キャッシュコヒーレンシは、オフロードエンジンにプロセッサキャッシュコヒーレンシポートを介してメインCPUのL1キャッシュとL2キャッシュへのアクセスを提供することにより実装される。オフロードエンジンがキャッシュコヒーレントアクセスを使用するように構成されているとき、メインCPUのL1キャッシュまたはL2キャッシュを通じ、DDRまたはSRAMメモリロケーションからの読み出しとそれらへの書き込みを行う。
【0118】
例えば、メインCPUはオフロードエンジンに格納されたパケットの場所を示すメモリポインタを渡す場合がある。非キャッシュコヒーレント構成において、その後オフロードエンジンはメモリから直接パケットを読み出し、それを処理する。続いてそのパケットを再びメモリに書き込むが、オンチッププロセッサの速度に対してメモリの速度が遅いため、時間がかかることがある。メインCPUがオフロードエンジンの作業中に同じパケットデータを読み出そうとすると、誤ったデータを取得する。これを回避するため、代わりにメインCPUはソフトウェアサイクルを使用してポーリングまたはその他の方法でオフロードエンジンがメモリへの書き込み完了を示すまで待ってから、メモリからのパケットデータ再読み出しを行う必要がある。
【0119】
コヒーレンスが有効なシステムでは、オフロードエンジンがメインCPUのL1/L2キャッシュ構造を通じてパケットを読み出す。これは、メインCPUにパケットデータをメモリから読み出させ、そのパケットデータをそのキャッシュに暴露させる。オフロードエンジンがパケットの変更を終えると、パケットを再びメインCPUのL1/L2キャッシュ構造に書き込む。これにより、CPUは変更されたデータがメモリに再び書き込まれるのを待つ必要なく、すぐにそのデータにアクセスすることができる。
【0120】
ここで開示された処理アーキテクチャは、キャッシュコヒーレントモードまたは非キャッシュコヒーレントモードで動作できる。非キャッシュコヒーレントモードの場合、オフロードエンジンとメインCPU間の通信を促進するIPCメールボックスが提供される。
図7と
図8に示すようなメールボックスは、相対的に低いCPUオーバーヘッドで信頼性の高いメッセージを渡すことができる。オフロードエンジンがタスクを完了すると、メインCPU向けに完了を示すメッセージをメールボックスに配置できる。一実施態様において、これはメインCPUに割り込みの発生を引き起こす。続いてメインCPUは、割り込み処理ルーチンの一部として、メッセージを読み出し、タスクの完了を知ることができる。これはメインCPUとオフロードエンジンの相互同期を維持する。
【0122】
一実施態様において、
図2の272で示されるような、フレキシブルで動的に制御可能な相互接続は、処理システム内の任意のプロセッサまたはオフロード/アクセラレーションエンジンがシステム内の任意のリソースを制御することを可能にする。これにより、ソフトウェアによってどのプロセッサまたはハードウェアがどのI/Oをランタイムで制御するかを割り当てることができる。例えば、オフロードプロセッサは、特定のPCIeインターフェイスがWiFiモジュールに接続され、WiFiのためのデータ処理タスクがオフロードされるときなど、そうすることが意味を成すときに、PCIeなど高帯域幅のSERDES I/Oを制御することができる。
【0123】
また、一部の実施態様は代わりに同一のピンまたはポート上でインターフェイスの多重化を提供する場合がある。I/Oにおけるこの種の柔軟性が低速インターフェイスを示すブロック図である
図11の例で示されている。
図11に示すように、PCMインターフェイス132、フラッシュインターフェイス142、LCDインターフェイス130などの低速インターフェイスは、GPIOインターフェイス138向けのGPIO機能と多重化することができる。これにより、ソフトウェアがI/Oピンを機能に動的に割り当てることを可能にする。
【0124】
図12は高速インターフェイスと類似の多重化機能を示すブロック図である。インターフェイス配置例1200はSerDesベースのフレキシブルI/Oを示す。
図1に118、120、122として示すように、PCIeインターフェイスおよびSATAインターフェイスは2つの異なるプロトコルであっても同じI/Oで共有できる。これはインターフェイス配置例1200でSerDes1202、マルチプレクサ1204、PCIeインターフェイスおよびSATAインターフェイス1206、1208を含めて実装できる。
システムソフトウェアによりSerDesのI/OがPCIeインターフェイスまたはSATAインターフェイスとして動作すべきか否かを決定し、チップの動作中、そのプロトコルに構成することができる。他の高速インターフェイスは同様の方法で多重化でき、USBインターフェイス1210は
図12のようなインターフェイスの一例として示されている。
【0125】
ここで開示したアプリケーション処理アーキテクチャ例は任意の多様なアプリケーションにおいて実装することができる。
【0126】
例えば、サービスプロバイダービデオゲートウェイにおいて、PCIe統合インターフェイス118、120、122(
図1)を使用して2つの独立したWiFi接続と追加の高速マルチチャネルトランスコーディング/デコーディングを提供し、完全なビデオソリューションを促進することができる。USBポート126、128の1つを処理アーキテクチャへのアクセスに使用し、一実施態様において、他方をホストまたはデバイスユーザーのプリンターやディスクアタッチドストレージ接続用に利用可能にしておくことができる。統合SATAポート124、および(または)1つ以上のPCIeインターフェイス/SATAインターフェイス118、120、122はこの種のアプリケーションにおいてパーソナルビデオレコーダ(PVR)および(または)ネットワークアタッチドストレージ(NAS)機能に使用することができる。
【0127】
プロセッサアーキテクチャにおける拡張性の高いインターフェイスとパフォーマンスは、幅広いコストとパフォーマンスのメディアサーバーモデルをサポートできる。
図1のアーキテクチャ例100は、例えば、118、120、122、124で4つまでのSATAポートをサポートし、それらのいずれも、またはすべてを幅広いNASソリューションの実装に使用できる。LCDインターフェイス130は、一実施態様において、ピクチャーフレーム機能を直接サポートし、また例えばハイデフィニションマルチメディアインターフェイス(HDMI(登録商標))コンバータを通じてパネルに接続し、低コストの中解像度ディスプレイを提供することもできる。
【0128】
ルーター/VPNコンセントレータでの実装においては、2つのUSBポート126、128の1つをデバイスデバイスモードで構成し、USBストレージとその他USBデバイスの接続を可能にすることができる。USBデバイスモード下で、USBポートはPCまたはその他接続されたシステムにUSBマスストレージデバイスとみなされる。118、120、122、124のSATAポートも外付けストレージに使用することができる。VPNアプリケーションはセキュリティエンジン160により提供される暗号化機能を使用することもできる。
【0129】
また、アーキテクチャ例100は、カメラ数の多いビデオコンバータ向けの3つのPCIeインターフェイス118、120、122を通じて、セキュリティ施設設備向けの低コストのソリューション提供にも役立てることができる。セキュリティエンジン160に搭載された暗号化機能により、エンコードされたビデオの安全な格納が可能である。メインCPU102、104の処理能力は追加のハードウェアサポートを必要とすることなく、複数のカメラのトランスコーディングをサポートできる。ビデオキャプチャデバイスがコーディングをサポートする場合、アーキテクチャ例100はセキュリティエンジン160によりストレージデータの暗号化と暗号解除のみを提供することができる。
【0130】
図13はマルチサービスシステム例を示すブロック図である。このマルチサービスシステム例1300は、ピコクラウド1302(家庭用または中小企業(SME)向け設備を表すことができる)を含む。ここに開示される処理アーキテクチャはピコクラウド1302内に実装し、
図13に示される任意の、またはすべての多様なサービスをサポートすることができる。フェムトセル1304は、例えば、LTE(Long Term Evolution)ワイヤレス接続上で提供される。1つ以上のUSBデバイス1306がUSB接続を介してピコクラウド1302に接続される。NATサービスは1つ以上のSATA接続とディスクストレージ1308を通じて実現できる。1つ以上のWiFiデバイス1310は上で詳細に説明したPCIe接続を通じてピコクラウド1302に接続することができる。TVサービス1312は1つ以上のトランスポートストリーム(TS)接続を介して実現される。
マルチサービスシステム例1300において、LANサービス1314は1つ以上のイーサネット接続を介して提供できる。1316では、例えばホームセキュリティ用に、ディープパケットインスペクション(DPI)モジュールを提供してもよい。DPIモジュール1316は、ピコクラウド1302内の処理アーキテクチャ中のネットワークエンジンに接続可能な別個のハードウェアモジュールとすることができる。電話サービスは、1318で示される1つ以上のPCM接続上でサポート可能であり、インターネット1320へのWAN接続も提供可能である。
【0131】
DPIモジュール1316に関して、ただL2、L3またはL4ヘッダを見てパケットの許可/遮断/ルーティングを決定する代わりに、このモジュールは非常にディープに、例えば、パケットのL7コンテンツなどを見てどうするかを決定することができる。DPIモジュール1316は何を見るか、およびどんなアクションをするかを指定する「規則」を採用し、例えば、パケットを見てウイルスを見つけるためなどに使用することができる。感染したパケットは特定され、遮断される。これはクラウド環境において、任意の「エッジ」で悪意あるアクティビティをクラウドネットワークに侵入する前に防止するために利用できる。
【0132】
一実施態様において、ピコクラウド1302は、処理アーキテクチャと複数のインターフェイスを含むゲートウェイにより提供される。
図14はゲートウェイ例を示すブロック図である。
【0133】
ゲートウェイ例1400は、この例では110V電源に接続されたレギュレータ1404と、バッテリー1406などの電源コンポーネントを含む。バッテリー1406は、例えば、動作に電力を必要とする電話のための「ライフライン」保護に実装することができる。ゲートウェイ例1400を家庭の電話サービスに使用すれば、停電が起きても、バッテリー1406が電話サービスを少なくとも一時的に維持することができる。
ここに提供される教示に基づいた処理アーキテクチャ1402は、さまざまなインターフェイスを通じ、この例ではDRAM1404とフラッシュメモリ1422の形式のメモリに接続される。WiFi無線1406、1408は、組み込まれたPCIeインターフェイスを通じて処理アーキテクチャ1402に接続される。1410、1412で示されるUSBポートには、外付けUSBデバイスを接続できる。また、ゲートウェイは、処理アーキテクチャ1402のSATAインターフェイスに接続されたハードドライブ1414などのディスクストレージも含むことができる。電話用ジャックなどの電話インターフェイス1416は、組み込まれた1つ以上のPCMインターフェイス、および(または)、例えばVoIP(Voice over IP)電話の場合、処理アーキテクチャ1402内の他のインターフェイスに接続することができる。ビデオ対応ゲートウェイは、処理アーキテクチャ1402内のトランスポートストリームインターフェイスに接続された1つ以上のTVチューナー1418を含むことができる。1420で示されるイーサネットポートは、1つ以上のスタンドアロンコンピュータおよび(または)ネットワーク化されたコンピュータに対するインターネット接続の提供に使用することができる。
【0134】
本明細書の説明は、本発明の実施態様の原理のアプリケーションを例示したのみであり、本発明の範囲から逸脱することなく当業者はその他の配置および方法も実施可能である。例えば、図面は例示のみを目的としている。その他の実施態様には、類似の配置で相互接続された、より多い、より少ない、および(または)追加コンポーネントを含むことができる。各メインCPU102、104(
図1)は、例えばそれぞれがデータキャッシュと命令キャッシュを備えたデジタルシグナルプロセッサ(DSP)を含んでもよい。一実施態様において、これらのキャッシュはそれぞれ32kBであるが、異なる数および(または)容量のキャッシュも検討できる。
【0135】
さらに、方法とシステムのコンテキストで主に説明されているが、例えばコンピュータで判読可能な媒体に格納された命令(instructions)など、本発明のその他の実施も検討可能である。
【0136】
本明細書における単数形または複数形の特徴は、実施態様を任意の数のインスタンスまたはコンポーネントに制限することを意図していない。例えば、本明細書で開示された処理アーキテクチャは、複数のメインCPUと組み合わせて実装する必要はない。
【0137】
また、パケットは例であり、ここで開示されるとおりに処理可能なデータブロックの非限定的な例であることに注意する。セル、フレーム、および(または)その他のデータブロックをパケットと同じまたは類似の方法で処理することができる。