(57)【要約】ホストオンチップ（ＳｏＣ）は、ＳｏＣの内部ブロック間でローカルトラフィックを送信するためのネットワークオンチップ（ＮｏＣ）と、信頼できないデバイスからのメッセージをホストＳｏＣで受信するための外部プロセッサリンクと、を含む。外部プロセッサリンクと接続されたホストＳｏＣ内のトラフィックコントローラは、信頼できないデバイスからの外部トラフィックを１つ以上の時間間隔のセットに亘って監視し、外部トラフィックの量に基づいてトラフィックポリシーの違反を検出し、違反を検出したことに応じて、信頼できないデバイスからのメッセージから生じるＮｏＣ内のトラフィックを低減する。【選択図】図１
2019525619.tif 000002
【特許請求の範囲】
【請求項１】
ホストシステムオンチップ（ＳｏＣ）であって、前記ＳｏＣの内部ブロック間でローカルトラフィックを送信するように構成されたネットワークオンチップ（ＮｏＣ）を備えるホストＳｏＣと、
信頼できないデバイスからのメッセージを前記ホストＳｏＣにおいて受信するように構成された外部プロセッサリンクと、
前記外部プロセッサリンクと接続されたトラフィックコントローラと、を備え、
前記トラフィックコントローラは、
前記信頼できないデバイスからの外部トラフィックの量を１つ以上の時間間隔のセットに亘って監視し、
外部トラフィックの量に基づいてトラフィックポリシーの違反を検出し、
前記違反を検出したことに応じて、前記信頼できないデバイスからのメッセージから生じる前記ＮｏＣ内のトラフィックを低減するように構成されている、
装置。
【請求項２】
前記トラフィックコントローラは、前記時間間隔のセットのうち第１時間間隔の間に前記信頼できないデバイスから前記ホストＳｏＣに送信されたメッセージの数が前記第１時間間隔についての最大閾値を超えるか否かを判別することによって、前記トラフィックポリシーの違反を検出するように構成されている、
請求項１の装置。
【請求項３】
前記トラフィックコントローラは、メッセージカウンタを備え、
前記メッセージカウンタは、
前記外部プロセッサリンクにおいて前記信頼できないデバイスから受信したメッセージに応じてインクリメントし、
前記第１時間間隔の経過に応じてリセットするように構成されている、
請求項２の装置。
【請求項４】
前記トラフィックコントローラは、構成ロジックを備え、
前記構成ロジックは、
前記最大閾値を変更するための要求を受信し、
前記要求の認証に応じて、前記要求に従って前記最大閾値を変更し、
前記要求の認証に失敗したことに応じて、前記要求を無視するように構成されている、
請求項２の装置。
【請求項５】
前記トラフィックコントローラは、前記信頼できないデバイスから前記ホストＳｏＣに送信されたメッセージの数が前記第１時間間隔についての最大閾値を超えたと判別したことに応じて、前記メッセージの数と前記第１時間間隔についての最大閾値との差に対応する分だけ、次の時間間隔についての最大閾値を減少させるように構成されている、
請求項２の装置。
【請求項６】
前記トラフィックコントローラは、前記時間間隔のセットのうちＮ個の最近の時間間隔のウィンドウに亘る前記信頼できないデバイスからのメッセージの平均数を計算し、前記平均数が最大閾値を超えたことを判別することによって、前記トラフィックポリシーの違反を検出するように構成されている、
請求項１の装置。
【請求項７】
前記トラフィックコントローラは、
シフトバッファ内の複数のレジスタであって、各レジスタが、前記レジスタに関連する前記Ｎ個の最近の時間間隔のうち当該レジスタに関連する時間間隔についてのメッセージの数を記憶するように構成されている、複数のレジスタと、
前記複数のレジスタに記憶された数を合計するように構成された加算器と、を備える、
請求項６の装置。
【請求項８】
前記トラフィックコントローラは、
前記Ｎ個の最近の時間間隔のうちＮ−１個の前の時間間隔の各々について検出されたメッセージの数の時間加重和を記憶するように構成された第１レジスタと、
前記Ｎ個の最近の時間間隔のうち最も最近の時間間隔について検出されたメッセージの数を記憶するように構成された第２レジスタと、
前記第１レジスタ内の時間加重和のビットシフトバージョンに前記第２レジスタ内の数を加算することによって、新たな時間加重和を計算するように構成されたロジックと、を備える、
請求項６の装置。
【請求項９】
前記トラフィックコントローラは、前記信頼できないデバイスからのトラフィックを所定期間制限することによって、前記ＮｏＣ内のトラフィックを低減するように構成されたスロットルロジックを備える、
請求項１の装置。
【請求項１０】
前記トラフィックコントローラは、前記ローカルトラフィックがローカルトラフィック閾値を超えたか否かを判別するように構成されたローカルトラフィックモニタを備え、
前記トラフィックコントローラは、前記ローカルトラフィックが前記ローカルトラフィック閾値を超えたときに前記違反を検出したことに応じて、前記ＮｏＣ内のトラフィックを低減するように構成されている、
請求項１の装置。
【請求項１１】
前記ホストＳｏＣ内のネットワークオンチップ（ＮｏＣ）を介して、ホストシステムオンチップ（ＳｏＣ）の内部ブロック間でローカルトラフィックを送信することと、
前記ホストＳｏＣにおいて、外部プロセッサリンクを介して信頼できないデバイスからのメッセージを受信することと、
前記信頼できないデバイスからの外部トラフィックの量を１つ以上の時間間隔のセットに亘って監視することと、
前記外部トラフィックの量に基づいてトラフィックポリシーの違反を検出することと、
前記違反を検出したことに応じて、前記信頼できないデバイスからのメッセージから生じる前記ＮｏＣ内のトラフィックを低減することと、を含む、
方法。
【請求項１２】
前記トラフィックポリシーの違反を検出することは、前記時間間隔のセットのうち第１時間間隔において前記信頼できないデバイスから前記ホストＳｏＣに送信されたメッセージの数が、前記第１時間間隔についての最大閾値を超えたか否かを判別することを含む、
請求項１１の方法。
【請求項１３】
前記最大閾値を変更するための要求を外部デバイスから受信することと、
前記要求の認証に応じて、前記要求に従って前記最大閾値を変更することと、
前記要求の認証に失敗したことに応じて、前記要求を無視することと、を含む、
請求項１２の方法。
【請求項１４】
前記信頼できないデバイスから前記ホストＳｏＣに送信されたメッセージの数が前記第１時間間隔についての最大閾値を超えたと判別したことに応じて、前記メッセージの数と、記第１時間間隔についての最大閾値との差に対応する分だけ、次の時間間隔についての最大閾値を減少させることを含む、
請求項１２の方法。
【請求項１５】
前記トラフィックポリシーの違反を検出することは、
前記時間間隔のセットのうちＮ個の最近の時間間隔のウィンドウに亘る前記信頼できないデバイスからのメッセージの平均数を計算することと、
前記平均数が最大閾値を超えたことを判別することと、を含む、
請求項１１の方法。
【請求項１６】
前記信頼できないデバイスからのトラフィックを所定期間制限することによって、前記ＮｏＣ内のトラフィックを低減することを含む、
請求項１５の方法。
【請求項１７】
前記ローカルトラフィックがローカルトラフィック閾値を超えたか否かを判別することと、
前記ローカルトラフィックが前記ローカルトラフィック閾値を超えたときに前記違反を検出したことに応じて、前記ＮｏＣ内のトラフィックを低減することと、を含む、
請求項１１の方法。
【請求項１８】
信頼できないデバイスと、
メモリと、
前記メモリに接続されたホストシステムオンチップ（ＳｏＣ）であって、外部プロセッサリンクを介して前記信頼できないデバイスに接続されたホストＳｏＣと、を備え、
前記外部プロセッサリンクは、前記信頼できないデバイスからのメッセージを前記ホストＳｏＣにおいて受信するように構成されており、
前記ホストＳｏＣは、前記信頼できないデバイスからのメッセージに応じて、データを、前記メモリから前記信頼できないデバイスに送信するように構成されており、
前記ホストＳｏＣは、
前記ＳｏＣの内部ブロック間でローカルトラフィックを送信するように構成されたネットワークオンチップ（ＮｏＣ）と、
前記外部プロセッサリンクに接続されたトラフィックコントローラと、を備え、
前記トラフィックコントローラは、
前記信頼できないデバイスからの外部トラフィックの量を１つ以上の時間間隔のセットに亘って監視し、
外部トラフィックの量に基づいてトラフィックポリシーの違反を検出し、
前記違反を検出したことに応じて、前記信頼できないデバイスからのメッセージから生じる前記ＮｏＣ内のトラフィックを低減するように構成されている、
システム。
【請求項１９】
前記外部プロセッサリンクは、前記外部プロセッサリンクのバッファ容量に基づいて、前記信頼できないデバイスからのトラフィックを調整するように構成されたフロー制御ロジックを備える、
請求項１８のシステム。
【請求項２０】
前記トラフィックコントローラは、前記ホストＳｏＣと共に単一の集積回路チップ上に配置されている、
請求項１８のシステム。
【請求項２１】
前記信頼できないデバイスからのメッセージには、前記メモリへの読み出し要求、書き込み要求及びアドレス変換要求が含まれる、
請求項１８のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
最近のコンピュータシステムの中には、中央処理装置（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）又は他のシステムオンチップ（ＳｏＣ）等の複数の処理ユニットを利用するものがあり、これらは、ハイパートランスポート（ＨＴ）等の通信インタフェースを介して互いに通信することができる。一例として、ＨＴは、複数のプロセッサが互いに又は他のデバイスとポイントツーポイント方式で通信するのを可能にする高帯域幅双方向シリアル／パラレルバスである。
【０００２】
しかしながら、このようなシステムでは、システム内の１つ以上のＳｏＣ又は他のデバイスの非協働的な動作（設計不良、バグ又は悪意によるものであるか否かにかかわらず）が、協働するＳｏＣ又はデバイスの性能に悪影響を及ぼす可能性がある。例えば、かかるデバイスが、如何なる制約もなく、過剰なメモリ要求や他のトラフィックを、外部インタフェース（例えば、ＨＴ）を介して他のＳｏＣに発行することが許可されている場合には、サービス妨害（ＤＯＳ）攻撃や他の問題を引き起こす可能性がある。
【０００３】
本開示は、添付の図面において、限定したものではなく、一例として示されている。
【図面の簡単な説明】
【０００４】
【図１】コンピューティングシステムの一実施形態を示す図である。
【図２】一実施形態による、処理ユニットと、メモリと、を含むコンピューティングシステムの一部を示す図である。
【図３】トラフィックコントローラモジュールの一実施形態を示す図である。
【図４】一実施形態による、トラフィックカウント値の時間加重平均を実施するためのロジックを示す図である。
【図５】一実施形態による、信頼できない外部デバイスからのトラフィックをスロットルするためのプロセスを示すフロー図である。
【発明を実施するための形態】
【０００５】
以下の説明では、実施形態の十分な理解を提供するために、特定のシステム、コンポーネント、方法等のいくつかの例等の多数の特定の詳細を説明している。しかしながら、少なくともいくつかの実施形態は、このような特定の詳細なしに実施され得ることが当業者には明らかであろう。他の例では、実施形態を不必要に分かり難くするのを避けるために、周知のコンポーネント又は方法は、詳細には説明されないか、単純なブロック図で提示される。したがって、説明する特定の詳細は、単なる例示である。特定の実装形態は、このような例示的な詳細とは異なる場合があり、それでも実施形態の範囲内にあると考えられる。
【０００６】
一実施形態では、コンピューティングシステム内のホストプロセッサ又は他のシステムオンチップ（ＳｏＣ）は、コンピューティングシステム内の他のＳｏＣ、デバイス及びモジュールとの通信を可能にするハイパートランスポート（ＨＴ）等の外部インタフェースを含む。しかしながら、これらの外部デバイスの動作は、特に外部デバイスがサードパーティによって提供されている場合に、保証できないことがよくある。したがって、外部デバイスの連携が保証できない場合、ホストＳｏＣは、このようなデバイスを信頼できない外部エージェントとして扱い、性能の低下と、サービス妨害（ＤＯＳ）攻撃と、信頼できないデバイス又は信頼できないデバイスにおいて動作中のソフトウェアが、如何なる制約もなく特定のアクションを実行することが許可される場合に生じる他の問題と、を抑制することができる。例えば、外部インタフェースを介してホストＳｏＣに過剰な数のメモリ要求を発行する外部デバイスは、ホストＳｏＣのネットワークオンチップ（ＮｏＣ）に過度な負担をかける可能性があるので、ホストＳｏＣの内部ブロック間でローカルトラフィックが提供されるのを制限するＤＯＳ状況を生じさせる場合がある。
【０００７】
一実施形態において、外部プロセッサリンクインタフェースは、フロー制御メカニズム（例えば、クレジットベースのフロー制御）を実施する。しかしながら、このようなメカニズムは、単に、ローカルハードウェア構造及びリソース（例えば、バッファ）がオーバーサブスクライブ又はオーバーフローしないことを保証するのみである。クレジットベースのフロー制御メカニズムの場合、要求がネットワーク内で先に移されると、クレジットの使用が許可され、より多くの要求を送信することができる。このようなフロー制御メカニズムは、短期間のトラフィックのバーストがハードウェアリソースを埋め尽くさないことを保証するが、これは必ずしもトラフィック全体の長期的な管理を提供するわけではない。
【０００８】
一実施形態では、ホストＳｏＣは、信頼できない外部デバイスからのトラフィックを監視し、外部デバイスからの外部トラフィックの量（メッセージ数、バイト数等で測定される）がトラフィックポリシーに違反することを検出すると、外部デバイスからのトラフィックを抑制（スロットル）するトラフィックコントローラメカニズムを実装する。一実施形態では、トラフィックコントローラは、信頼できないデバイスからのトラフィック量がポリシーに違反しているかどうかを判別するために、信頼できないデバイスからのメッセージ数又はバイト数を、１つ以上の時間間隔のセットに亘ってカウントする。ポリシーに違反している場合、トラフィックコントローラは、その後のいくつかの時間間隔の間、信頼できないデバイスから受け入れるトラフィックの量を制限する。
【０００９】
図１は、上述したように、信頼できないデバイスのためのトラフィック制御メカニズムを実装するコンピューティングシステム１００の一実施形態を示す図である。概して、コンピューティングシステム１００は、例えば、ラップトップコンピュータ又はデスクトップコンピュータ、携帯電話、サーバ等が含まれるがこれらに限定されない、いくつかの異なるタイプのデバイスの何れかとして具現化することができる。コンピューティングシステム１００は、バス１０１を介して互いに通信するいくつかのコンポーネント１０２〜１０８を含む。コンピューティングシステム１００では、コンポーネント１０２〜１０８の各々は、バス１０１を介して、又は、他のコンポーネント１０２〜１０８のうち１つ以上のコンポーネントを介して、他のコンポーネント１０２〜１０８と通信することができる。コンピューティングシステム１００内のコンポーネント１０２〜１０８は、ラップトップ若しくはデスクトップシャーシ等の単一の物理的なケーシング、又は、携帯電話のケーシング等に収容される。代替の実施形態では、コンピューティングシステム１００のいくつかのコンポーネントは、コンピューティングシステム１００の全体が単一の物理的なケーシング内に存在しないように、周辺機器として具現化することができる。
【００１０】
また、コンピューティングシステム１００は、ユーザから情報を受信し又はユーザに情報を提供するためのユーザインタフェースデバイスを含む。具体的には、コンピューティングシステム１００は、キーボード、マウス、タッチスクリーン又はユーザから情報を受信するための他のデバイス等の入力デバイス１０２を含む。コンピューティングシステム１００は、モニタ、発光ダイオード（ＬＥＤ）ディスプレイ、液晶ディスプレイ又は他の出力デバイス等のディスプレイ１０５を介して、ユーザへの情報を表示する。
【００１１】
コンピューティングシステム１００は、有線又は無線ネットワークを介してデータを送受信するためのネットワークアダプタ１０７をさらに含む。また、コンピューティングシステム１００は、１つ以上の周辺機器１０８を含む。周辺機器１０８は、大容量ストレージデバイス、位置検出デバイス、センサ、入力デバイス、コンピューティングシステム１００によって使用される他のタイプのデバイスを含むことができる。
【００１２】
コンピューティングシステム１００は、メモリサブシステム１０６に記憶された命令１０６ａを受信して実行するように構成された処理ユニット１０４を含む。一実施形態では、処理ユニット１０４は、複数の処理要素を含み、各処理要素は、グラフィックス処理ユニット（ＧＰＵ）、アクセラレーテッド処理ユニット（ＡＰＵ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、又は、他の特定用途向け集積回路（ＡＳＩＣ）若しくはＳｏＣであってもよい。
【００１３】
メモリサブシステム１０６は、ランダムアクセスメモリ（ＲＡＭ）モジュール、読み出し専用メモリ（ＲＯＭ）モジュール、ハードディスク及び他の非一時的なコンピュータ可読媒体等のように、コンピューティングシステム１００によって使用されるメモリデバイスを含む。メモリサブシステム１０６に含まれるメモリは、コンピューティングシステム１００内のメインメモリとして使用される。追加のタイプのメモリを、メモリサブシステム１０６又はコンピューティングシステム１００の他の場所に含むことができる。例えば、キャッシュメモリ及びレジスタは、処理ユニット１０４、又は、コンピューティングシステム１００の他のコンポーネント上に存在することができる。
【００１４】
図２は、メモリサブシステム１０６に含まれるメモリ２３０と共に２ソケットシステムとして実装される処理ユニット１０４の一実施形態を示す図である。処理ユニット１０４において、各ソケット２０１，２０２は、ＳｏＣ（例えば、マルチコアチップ、ＡＰＵ等）を含み、外部プロセッサリンク２４０を介して互いに接続されている。一実施形態では、外部プロセッサリンク２４０を実装するためのインタフェースは、ハイパートランスポート等のオープンスタンダード、クイックパスインターコネクト（ＱＰＩ）等の独自のインタフェース、又は、他の何らかの同様のインタフェースとすることができる。
【００１５】
両方のソケット２０１，２０２が同一の設計者によるＳｏＣを含む場合、ＳｏＣは、リンク２４０の帯域幅を公平に共有する際に、互いに協働するように設計されてもよい。しかしながら、一実施形態では、２ソケットシステムは、ホストＳｏＣ２１０を、異なる設計者による信頼できない外部デバイス２２０に接続する。したがって、利用可能な帯域幅の公平な消費に関するデバイス２２０の協力的な動作が保証されない場合がある。しかしながら、信頼できないデバイス２２０は、依然として、リンク２４０を介してメモリ要求（例えば、メモリ読み出し及び書き込み要求）と他のメッセージ又はトランザクション（例えば、メモリ変換要求）とを発行することができる。
【００１６】
一実施形態では、ホストＳｏＣ２１０は、メモリ２３０に接続されている。メモリ２３０は、メモリサブシステム１０６の一部である。いくつかの実施形態では、メモリ２３０は、入力デバイス又は通信でバンス等の周辺機器の中のメモリを表す場合がある。メモリ２３０は、メモリ２３０に向けられ、ホストＳｏＣ２１０を介して送信されるメモリ要求及びメッセージを介して、外部デバイス２２０によってアクセスされる。例えば、外部デバイス２２０は、メモリ２３０をホストＳｏＣ２１０に読み書きさせるために、メモリ要求をホストＳｏＣ２１０に発行する。ホストＳｏＣ２１０は、外部デバイス２２０からの読み出し要求に対して、メモリ２３０から読み出したデータを外部デバイス２２０に返すことによって、読み出し要求に応答する。また、外部デバイス２２０は、同じ経路を使用して、メモリ２３０に対するメモリ変換要求を実行し、ホストＳｏＣ２１０は、変換されたメモリアドレスを外部デバイスに返すことによって、メモリ変換要求に応答する。
【００１７】
外部デバイス２２０とホストＳｏＣ２１０との間のこれらの通信は、ＨＴ、ＱＰＩ又は他の技術を用いて実装された外部プロセッサリンク２４０を介して送信される。また、外部プロセッサリンクは、外部デバイス２２０からのトラフィックを調整するためのフロー制御ロジック２１１を含む。一実施形態では、ホストＳｏＣ２１０は、外部デバイス２２０からの着信メッセージを管理するための入力バッファ又は他のハードウェアリソースを含む。これにより、フロー制御ロジック２１１は、入力バッファ及び他のハードウェアリソースの容量に基づいて外部デバイス２２０からのメッセージトラフィックを調整して、外部デバイス２２０がこれらのハードウェアリソースの容量を超えないようにする。一実施形態では、フロー制御ロジック２１１は、ホストＳｏＣ２１０において利用可能な入力バッファの数を示すクレジットを外部デバイス２２０に送信するクレジットベースのフロー制御メカニズムを実装する。次に、外部デバイス２２０は、受信したクレジットの数に対応する数のメッセージを送信する。
【００１８】
ホストＳｏＣ２１０は、ホストＳｏＣ２１０の内部ブロック（例えば、ブロック２１４，ブロック２１５）間でローカルトラフィックを送信するのに使用されるオンチップ相互接続であるネットワークオンチップ（ＮｏＣ）２１３を含む。また、ＮｏＣ２１３は、メモリ２３０に向けられる外部デバイス２２０からのメッセージ（例えば、メモリ要求）と、外部デバイス２２０に返されるメモリ２３０からのデータと、を伝える。例えば、メモリ２３０に向けられる外部デバイス２２０からのメッセージは、メモリ２３０で受信される前に、外部プロセッサリンク２４０、フロー制御ロジック２１１、トラフィックコントローラ２１２及びＮｏＣ２１３を介して送信される。メモリ２３０からのデータ（例えば、読み出し要求に応じて読み出されたデータ）は、同じ経路を通って外部デバイス２２０に返される。
【００１９】
よって、外部デバイス２２０があまりに多くのメモリ要求を発行した場合、ＮｏＣ２１３が混雑した状態になる可能性がある。その結果、ホストＳｏＣ２１０の内部ブロック（例えば、ブロック２１４〜２１５）からのローカルトラフィックは、ＮｏＣ２１３内の混雑、及び／又は、メモリ２３０でのキューイング遅延による性能の低下に遭遇する可能性がある。
【００２０】
よって、一実施形態は、トラフィックコントローラ２１２を、ホストＳｏＣ２１０と同じ集積回路チップ上に含むことができる。トラフィックコントローラ２１２は、外部プロセッサリンク２４０に接続されており、いくつかの機能（信頼できない外部デバイス２２０から１つ以上の時間間隔のセットに亘って受信したメッセージ数又はバイト数を監視することと、メッセージ数に基づいてトラフィックポリシーの違反を検出することと、トラフィックポリシーに違反している場合に、信頼できないデバイス２２０からのメッセージから生じるＮｏＣ２１３内のトラフィックを低減することと、を含む）を実行する。
【００２１】
図３は、トラフィックコントローラ２１２の一実施形態を示す図である。トラフィックコントローラ２１２は、外部プロセッサリンク２４０を介して外部デバイス２２０との間で送受信されるトラフィックを動的に監視するための監視モジュール３１０と、観察したトラフィックが所定のトラフィックポリシーに違反しているかどうかを判別するための評価モジュール３２０と、外部デバイス２２０から生じる過剰なトラフィックによって引き起こされる望ましくない影響をスロットル又は軽減するためのスロットルロジック３３０と、を含む。
【００２２】
モジュール３１０，３２０，３３０の動作によって、トラフィックコントローラ２１２は、信頼できない外部デバイス２２０からホストＳｏＣ２１０に送信されたメッセージ数（又は、バイト数）が、いくつかの連続する時間間隔の各々に対する最大閾値を超えるか否かを判別することによって、所定のトラフィックポリシーの違反を検出する。
【００２３】
監視モジュール３１０は、外部プロセッサリンク２４０を介して外部デバイス２２０との間で送受信されるトラフィックを監視する。一実施形態では、監視モジュール３１０は、外部デバイス２２０によって送信されたメッセージの数をカウントする。或いは、監視モジュール３１０は、送信されたバイト数等の他の何らかの測定基準を追跡することができる。したがって、カウンタ３１１は、連続する時間間隔の各々について、外部プロセッサリンク２４０を介して外部デバイス２２０によって送信されたメッセージ又はバイトの数をカウントする。
【００２４】
監視モジュール３１０は、時間間隔を定義するためのタイマ３１３を含む。タイマ３１３は、各間隔の始めに、カウンタ３１１を０にリセットする。カウンタ３１１は、時間間隔が経過すると、外部デバイス２２０との間の全てのトラフィックを監視する。例えば、カウンタ３１１は、外部プロセッサリンク２４０において外部デバイスから受信したメッセージ毎にインクリメントすることができる。代替の実施形態では、カウンタ３１１は、外部デバイスに送信されたメッセージと、外部デバイスから受信したメッセージと、の各々毎にインクリメントすることができる。
【００２５】
カウントレジスタ３１２（レジスタ３１２−１，３１２−２，…，３１２−Ｎを含む）は、循環シフトバッファとして論理的に動作するシフトレジスタであり、各レジスタは、１つの時間間隔に対するカウント値を記憶するために使用される。したがって、時間間隔が経過したことをタイマ３１３が示すと、現在の時間間隔について観察されたメッセージ数又はバイト数を示すカウンタ３１１のカウント値が、現在選択されているカウントレジスタ３１２に記憶される。
【００２６】
現在のカウント値が現在選択されているレジスタ（例えばレジスタ３１２−１）に記憶された後、タイマ３１３は、カウントレジスタ３１２のセット内の次のレジスタ（例えば、レジスタ３１２−２）を選択する。最後のレジスタ３１２−Ｎが選択された後に時間間隔が経過すると、最初のレジスタ３１２−１が再び選択されて上書きされる。このようにして、カウントレジスタ３１２の各々は、Ｎ個の最新の時間間隔のセットのうち１つの時間間隔についてのカウント値を記憶する。
【００２７】
評価モジュール３２０は、レジスタ３１２内のカウント値に基づいて合計、平均又は他の測定基準を計算する加算器ロジック３２１を含む。次に、加算器ロジック３２１の出力は、対応する時間間隔に関する閾値と比較される。一実施形態では、加算器ロジック３２１は、その時間間隔に関する閾値と比較するために、レジスタ３１２のうち１つのレジスタ（例えば、最近経過した時間間隔に対応するレジスタ）を単に選択することができる。
【００２８】
或いは、加算器ロジック３２１は、Ｎ個の最近の時間間隔のスライディングウィンドウに亘る信頼できない外部デバイス２２０からのメッセージの平均数を計算するように構成されてもよい。例えば、加算器ロジック３２１は、連続する時間間隔の各々が経過するときにこのような時間ベースの移動平均を計算するために、タイマ３１３によってトリガされてよい。このようにして、加算器ロジック３２１は、時間間隔毎に、レジスタ３１２に現在記憶されているＮ個のカウント値の平均を計算する。Ｎが２の累乗である実装形態では、Ｎによる除算は、レジスタの合計のｌｏｇ２（Ｎ）最下位ビットを単に落とすことによって効率的に達成されるので、平均の計算が簡単である。
【００２９】
いくつかのシナリオでは、遠い過去は、最近の動作よりも重要ではない。したがって、より古い時間間隔について計測されたカウント値は、総計に対してこれらの入力を減らすように重み付けされる。一構成では、加算器ロジック３２１は、レジスタ３１２内のカウント値の時間加重平均を計算する。Ｎ個の最近のカウント値がｘ０，ｘ１，…，ｘＮ−１として表される場合、重み付けされていない移動平均を、
【数１】
2019525619.tif 000003
として表すことができる。
【００３０】
指数的加重移動平均は、以下の式によって表される。ここで、αは、０より大きく１未満の値である。
【数２】
2019525619.tif 000004
【００３１】
αが２の累乗（例えば１／２）である場合、ハードウェアオーバーヘッドは、Ｎ個のレジスタから僅か２つのレジスタに減らすことができる。図４は、一実施形態による、α＝１／２の場合の時間加重平均を実施する加算器ロジック３２１と、２つのレジスタ３１２−１，３１２−２と、を示す図である。レジスタ３１２−１は、Ｎ−１個の前の（Ｎ個のうち１番目からＮ−１番目までの）時間間隔の時間加重和を記憶し、レジスタ３１２−２は、最近の（Ｎ番目の）時間間隔についてのカウント値（カウンタ３１１によって決定される）を記憶する。現在の時間間隔の終わりに、レジスタ３１２−１内の値は、ビットシフタ４０１によって２で除算され、レジスタ３１２−２からのカウント値に（加算器４０２を介して）加算される。加算器４０２からの新たな時間加重和は、レジスタ３１２−１に戻って記憶される。次に、レジスタ３１２−２は、０にリセットされ、次の間隔のカウントを開始する。次いで、レジスタ３１２−１内の新たな時間加重和がＮで除算されることによって、新たな時間加重平均が計算される。
【００３２】
図３に戻ると、評価モジュール３２０は、Ｎ個の時間間隔の各々についての最大閾値を記憶する構成レジスタ３２２に接続された入力を有する比較ロジック３２４を含む。代替の実施形態では、構成レジスタ３２２は、Ｎ個の時間間隔の全てに対して１つの閾値を記憶する。
【００３３】
所定の時間間隔についての最大閾値は、トラフィックポリシーに違反することなく、当該時間間隔中に信頼できない外部デバイス２２０から外部プロセッサリンク２４０を介して受信することができるメッセージ又はバイトの数を示している。代替の実施形態では、最大閾値は、ホストＳｏＣ２１０から外部デバイス２２０に送信されたメッセージ若しくはバイトの数にも適用され、又は、外部デバイス２２０に送信されたメッセージ若しくはバイトの数と、外部デバイス２２０から受信したメッセージ若しくはバイトの数と、の両方にも適用され得る。
【００３４】
トラフィックコントローラ２１２において、最大閾値は、ソフトウェア（例えば、ファームウェアによって設定されるか、コンピューティングシステム１００上で実行中のオペレーティングシステムによって指定される）によってプログラム可能である。代替の実施形態では、閾値は、製造時にプログラムされてもよいし、固定値であってもよい。構成レジスタ３２２内の閾値は、レジスタ３２２に記憶された値を構成するための構成ロジックを含む構成モジュール３２６を介してプログラム可能である。構成モジュール３２６は、１つ以上の新たな最大閾値を示す再構成要求３２５を受信したことに応じて、１つ以上の新たな閾値を構成レジスタ３２２に記憶する。
【００３５】
再構成要求３２５は、ホストＳｏＣ２１０によって発行され、或いは、外部デバイス又はプロセス（例えば、コンピューティングシステム１００内の別のＳｏＣ、又は、別のＳｏＣ上で実行されているプロセス等）によって発行されてもよい。一実施形態では、閾値は、信頼できるデバイス又はソフトウェアのみによってプログラム可能である。したがって、構成モジュール３２６は、要求３２５を認証して当該要求３２５が信頼できるエンティティからのものであることを保証し、認証が成功したことに応じて構成レジスタ３２２を更新するだけである。したがって、構成モジュール３２６は、要求３２５の認証に失敗したことに応じて、要求３２５を破棄又は無視する。
【００３６】
信頼できるソフトウェアの例には、ファームウェア、オペレーティングシステム、又は、他の信頼できるシステムによって暗号的に署名及び認証された他のソフトウェアが含まれる。一実施形態では、トラフィックコントローラ２１２の他のパラメータ（例えば、時間間隔の持続時間等）は、同様の要求及び認証メカニズムによって構成されている。
【００３７】
比較ロジック３２４は、加算器ロジック３２１の出力（合計、平均、時間加重平均、又は、レジスタ３１２から計算された他の測定基準を表す）を、最近完了した時間間隔に対応する最大閾値（構成レジスタ３２２によって提供される）と比較する。比較ロジック３２４は、加算器ロジック３２１の出力が最大閾値を超えた場合に、その出力をアサートする。
【００３８】
比較ロジック３２４の出力は、スロットルロジック３３０に接続されている。一実施形態では、比較ロジック３２４の出力は、閾値を超えたメッセージ数又はバイト数をスロットルロジック３３０に示す。これにより、比較ロジック３２４の出力が、信頼できない外部デバイス２２０との間の過剰なトラフィックによって生じたトラフィックポリシーの違反を示す場合に、スロットルロジック３３０は、外部デバイス２２０との間のトラフィックを所定期間制限する。
【００３９】
外部デバイス２２０のトラフィックを制限するための１つの方法は、外部デバイス２２０からのトラフィックを所定の低レベルに絞り込み（スロットルし）、これにより、外部デバイス２２０からの僅かなメッセージしかＮｏＣ２１３にアクセスできないようにすることである。これは、外部デバイス２２０が先に進行し続けることを可能にするが、外部デバイス２２０がホストＳｏＣへ／からの外部プロセッサリンク２４０インタフェースを利用する能力を低下させる。また、スロットルの正確なレベルは、信頼できるデバイス又はソフトウェアからの認証された再構成要求によって構成可能である。
【００４０】
いくつかの実施形態では、スロットルレベルは、現在の時間間隔が経過するまで外部デバイス２２０にメッセージが送信されない又は外部デバイス２２０からメッセージを受信しないように設定することができる。特に、この方法は、外部デバイスの長期的な枯渇を避けるために、トラフィックコントローラ２１２が比較的短い間隔長を使用している場合に使用することができる。クレジットベースのフロー制御メカニズムが使用される実施形態では、ホストＳｏＣ２１０は、現在の時間間隔が経過するまで外部デバイス２２０に返されるクレジットの数を制限することによって、外部デバイス２２０からのトラフィックを制限（スロットル）する。
【００４１】
一実施形態では、外部デバイス２２０は、現在の間隔の残りの部分に対して単に絞られるのではなく、次のＭ個の間隔に対して絞られる。一実施形態では、スロットルレベルは、Ｍ個の間隔に亘って徐々に緩和されて制限が小さくなり、外部デバイス２２０からのトラフィックが、最終的に、通常の制限されていないレベルに戻ることが可能になる。Ｍの値及び緩和レートは、他のパラメータと同様に、信頼できるデバイス又はプロセスからの認証された再構成要求によって構成可能である。
【００４２】
一実施形態では、スロットルロジック３３０は、次に続く時間間隔についての最大閾値を、現在の時間間隔についてのカウント値と最大閾値との差に対応する分だけ減少させることによって、外部デバイス２２０からのトラフィックを抑制（スロットル）する。一実施形態では、スロットルロジック３３０は、次の時間間隔に対応する閾値を、計算した差だけデクリメントする。或いは、同じ効果を達成する別の方法は、現在の時間間隔の終わりにカウンタを０にリセットする代わりに、カウンタ３１１を閾値の大きさだけデクリメントすることである。例えば、カウント値が１２で閾値が１０の場合のようにカウント値が閾値を超えると、違反が生じることになる。したがって、カウント値１２は、閾値１０だけデクリメントされ、次の間隔のカウント値の初期値として２が残る。次の間隔において、外部デバイス２２０は、閾値を超える前に、さらに８つのメッセージを送信することができる。
【００４３】
実際には、トラフィック閾値を超える外部デバイス２２０は、そのカウンタが０よりも大きな値で始まることから、次の間隔において閾値により早く達することになる。したがって、現在の時間間隔におけるトラフィックポリシーの違反は、次に続く時間間隔についての閾値の減少を効果的に生じさせるので、外部デバイスは、次の時間間隔からトラフィッククレジットを「借りる」ことができる。その後、その借り（debt）が、次の間隔の開始時に返済される。
【００４４】
一実施形態では、トラフィックコントローラ２１２は、トラフィックポリシーに違反した後でも外部デバイス２２０がホストＳｏＣ２１０と通信し続けることを可能にするが、閾値に達した後に受信したトラフィックの量（メッセージ数又はバイト数等）をカウントする。閾値を超えるトラフィックの量は、外部デバイスが、その次の時間間隔の間に外部デバイスが返済する借りとして記録される。
【００４５】
その後の時間間隔においてＮｏＣ２１３又はメモリ２３０が混雑（congest）するようになった場合、トラフィックコントローラ２１２は、外部デバイス２２０からのトラフィックを抑制（スロットル）する。外部デバイス２２０からのメッセージがスロットルのためにホストＳｏＣ２１０によって遅延される各時間間隔に対して、外部デバイス２２０の借りが、構成可能な量Ｒだけ減少される。
【００４６】
また、トラフィックコントローラ２１２は、外部デバイス２２０が回収不能な借りになるのを防ぐために、時間ベースの債務（debt）免除を実施する。一実施形態では、トラフィックコントローラ２１２は、Ｃ個の時間間隔毎に現在の借りを係数βだけ減らす。例えばβが０．５でＣが１０の場合、借りは１０分の１間隔毎に半分になる。
【００４７】
トラフィックコントローラ２１２は、外部デバイス２２０との間の外部プロセッサリンク２４０インタフェースを介したトラフィックの監視に加えて、ローカルトラフィックに起因するＮｏＣ２１３内のトラフィックレベルを監視するローカルトラフィックモニタ３４０を含む。監視されたローカルトラフィックは、ホストＳｏＣ２１０の内部ブロック（例えば、内部ブロック２１４，２１５）間のトラフィック、ホストＳｏＣ２１０の計算ユニット（例えば、中央処理装置又はグラフィックス処理ユニット）からＮｏＣ２１３へのトラフィック、ホストＳｏＣ２１０のメモリシステムとの間のトラフィック、又は、他のローカルトラフィック測定基準を含む。
【００４８】
ローカルトラフィックモニタ３４０がローカルトラフィックレベルに関する情報をスロットルロジック３３０に提供することによって、スロットルロジック３３０は、ＮｏＣ２１３がローカルトラフィック及び外部デバイス２２０からのトラフィックを提供するのに十分な帯域幅を有する場合に、外部デバイス２２０からのトラフィックを不必要にスロットルするのを回避することができる。例えば、ホストＳｏＣ２１０が殆ど使用されていない場合（例えば、ホストＳｏＣ２１０が作業を外部デバイス２２０にオフロードしている場合）、このメカニズムは、外部デバイス２２０が、可能な限り最高の速度でホストＳｏＣ２１０にトラフィックを注入して、外部デバイス２２０がその性能を最大限にすることを可能にする。
【００４９】
換言すれば、ホストＳｏＣ２１０のローカルトラフィック需要が十分に低い場合、トラフィックコントローラ２１２は、外部デバイス２２０が通常の間隔毎の（又は、移動平均の）閾値を超えた場合であっても、外部デバイス２２０が高速で要求を発行し続けるのを可能にする。
【００５０】
一実施形態では、ローカルトラフィックモニタ３４０は、時間間隔毎にホストＳｏＣ２１０から発生し、ＮｏＣ２１３を介して送信されたメッセージ又はバイトの数をカウントするための１つ以上のカウンタを含む。ローカルトラフィックモニタ３４０は、このローカルトラフィックカウント値に基づいて、ＮｏＣ２１３におけるローカルトラフィックがローカルトラフィック閾値を超えるか否かを判別する。ローカルトラフィックがローカルトラフィック閾値を超えると、ローカルトラフィックモニタは、外部デバイス２２０がトラフィックポリシーに違反した場合に、スロットルロジック３３０が、外部デバイス２２０によるトラフィックを減らすことを可能にする。
【００５１】
上述したように、トラフィックコントローラ２１２は、ホストＳｏＣ２１０とは別の集積回路パッケージに実装された外部デバイス２２０との間のトラフィックを調整する。代替の実施形態では、トラフィックコントローラ２１２に実装されたメカニズムは、ホストシステムと同じ集積回路パッケージ内の信頼できないブロックとの間のトラフィックを調整するために使用される。例えば、いくつかのＳｏＣ設計には、サードパーティの設計者からの信頼できないブロックが組み込まれており、この場合、このようなブロックの協働を保証することができない。
【００５２】
このような場合には、トラフィックコントローラ２１２によって実施される同じ監視及びスロットルメカニズムが、内部ブロックをＮｏＣ２１３に接続するオンチップ相互接続に適用され、信頼できないブロックが、過度のメッセージングから生じる性能の問題（ＤＯＳの動作等）を引き起こさないことを保証する。
【００５３】
代替の実施形態では、マルチチップモジュール（ＭＣＭ）技術及び／又はシリコンインターポーザベースの集積化（２．５Ｄスタッキング）を使用して、複数のチップが一緒にパッケージされ、１つ以上のチップがサードパーティの設計者から供給される場合がある。このようなパッケージは、トラフィックコントローラ２１２のトラフィック制御メカニズムが適用される、チップ間の何らかの形態の相互接続（例えば、ＨＴ、アドバンストエクステンシブルインタフェース（ＡＸＩ）等）を提供するであろう。
【００５４】
図５は、一実施形態による、信頼できない外部デバイスからのトラフィックをスロットルするためのプロセス５００を示すフロー図である。プロセス５００の動作は、トラフィックコントローラ２１２及びコンピューティングシステム１００の他のコンポーネントによって実行される。
【００５５】
プロセス５００は、ブロック５０１において開始する。ブロック５０１において、ホストＳｏＣ２１０の内部ブロック（例えば、ブロック２１４，２１５）は、ＮｏＣ２１３を介して互いにローカルトラフィックを送信することによって、互いに通信する。また、ＮｏＣ２１３は、外部デバイス２２０とメモリ２３０との間、又は、外部デバイス２２０とホストＳｏＣ２１０の内部ブロックとの間でメッセージを伝達するために使用される。プロセス５００は、ブロック５０１からブロック５１１に続く。
【００５６】
ブロック５１１において、トラフィックコントローラ２１２は、構成モジュール３２６が再構成要求３２５を受信したか否かを判別する。再構成要求３２５は、ホストＳｏＣ２１０、ホストＳｏＣ２１０に接続された外部デバイス又は他の何らかのデバイス若しくはプロセスから発生する。再構成要求３２５は、例えば、ローカルトラフィック閾値、外部デバイス２２０に対する最大のトラフィック閾値、トラフィックポリシー違反の後に外部デバイス２２０をスロットルするための間隔の数Ｍ等のように、トラフィックコントローラ２１２の１つ以上の動作パラメータに関する新たな値を指定する。また、再構成要求３２５は、トラフィックコントローラ２１２によって実施されるスロットル方法（例えば、Ｍ個の間隔に対するスロットル、借りの発生及び返済等）を選択するために使用される。
【００５７】
ブロック５１３において、構成モジュール３２６は、再構成要求３２５を認証して、要求３２５が、トラフィックコントローラ２１２を再構成することを許可されている信頼できるデバイスから発生したものであるか否かを判別する。認証が成功した場合、構成モジュール３２６は、要求３２５に従って構成を変更する（ブロック５１５）。例えば、構成モジュール３２６が、外部デバイス２２０からのトラフィックに関する最大閾値の変更を要求する再構成要求３２５の認証に成功した場合、構成モジュール３２６は、要求３２５の認証に成功した後に、要求３２５に示された新たな値を用いて、レジスタ３２２に記憶された閾値を更新する。ブロック５１３において、再構成要求３２５の認証が成功しなかった場合、構成モジュール３２６は、ブロック５１７において、要求を無視し、レジスタ３２２を更新しない。プロセス５００は、ブロック５１５又はブロック５１７からブロック５２１に続く。
【００５８】
ブロック５２１において、ローカルトラフィックモニタ３４０は、ＮｏＣ２１３におけるローカルトラフィック（すなわち、ホストＳｏＣ２１０の内部ブロック間のトラフィック）がローカルトラフィック閾値を超えたか否かを判別する。ローカルトラフィックモニタは、ローカルメッセージの数又は送信されるバイトの数をカウントする。このカウント値がローカルトラフィックの閾値を超えない場合、スロットルロジックは、ブロック５２３において、無効にされる。ＮｏＣ２１３は、ローカルトラフィックの需要が低いため、外部デバイス２２０からの過度のトラフィックを監視又は場合によってはスロットルする必要なく、外部デバイス２２０からのトラフィックを提供するのに十分な帯域幅を有する。よって、ＮｏＣ２１３を介した外部デバイス２２０からのメッセージの送信は、スロットルを無効にした状態でブロック５０１に続く。
【００５９】
ブロック５２１においてローカルトラフィックカウント値がローカルトラフィック閾値を超えた場合、ローカルトラフィックモニタ３４０は、ブロック５３１において、スロットルロジック３３０を有効にする。ブロック５３３でのローカルトラフィック及び外部デバイス２２０からのトラフィックの送信は、スロットルロジック３３０が有効にされた状態で継続する。スロットルロジック３３０が有効にされると、トラフィックコントローラ２１２は、外部デバイス２２０からのトラフィックを監視し、トラフィックポリシーの違反の検出に応じて、外部デバイス２２０によるＮｏＣ２１３内のトラフィックの量を減らす。プロセス５００は、ブロック５３３からブロック５３５に続く。
【００６０】
ブロック５３５において、メッセージが、外部デバイス２２０から外部プロセッサリンク２４０を介してホストＳｏＣ２１０で受信されていない場合、プロセス５００は、ブロック５２１に戻って継続する。ブロック５３５において、１つ以上のメッセージが外部デバイス２２０からのものである場合、カウンタ３１１は、受信したメッセージ（又は、バイト）の数だけインクリメントする（ブロック５３７）。プロセス５００は、ブロック５３７からブロック５３９に続く。
【００６１】
ブロック５３９にて現在の時間間隔の終わりに達していない場合、プロセス５００は、ブロック５３３に戻って継続する。これにより、ブロック５３３〜５３９は、現在の時間間隔の終わりまで繰り返される。トラフィックコントローラ２１２は、ブロック５３３〜５３９を繰り返すことによって、現在の時間間隔の間に信頼できない外部デバイス２２０から受信したメッセージの数を監視する。タイマ３１３によって示される時間間隔の終わりに、プロセス５００は、ブロック５３９からブロック５４１に続く。
【００６２】
ブロック５４１において、トラフィックコントローラ２１２の様々なコンポーネントは、最近経過した時間間隔についての計算を更新する。例えば、加算器ロジック３２１は、Ｎ個の最近の時間間隔のウィンドウに亘る信頼できない外部デバイス２２０からのメッセージの数の合計又は平均を計算する。使用されるスロットル方法に応じて、経過した時間間隔毎に他の計算も実行される。例えば、時間間隔の最終カウント値がレジスタ３１２の１つに記憶され、Ｎ個の時間間隔のカウント値の合計又は平均が加算器ロジック３２１で計算され、過去の違反に関する残りの借り及び残りのスロットル時間が計算される等である。プロセス５００は、ブロック５４１からブロック５４３に続く。
【００６３】
ブロック５４３において、比較ロジック３２４は、計算されたＮ個の間隔のカウント値の合計又は平均に基づいて、トラフィックポリシーの違反が発生したか否かを検出する。比較ロジック３２４は、合計又は平均を、経過した時間間隔に対応する最大閾値（構成レジスタ３２２によって提供される）と比較する。最大閾値を超えた場合にはトラフィックポリシーの違反が発生しており、プロセス５００は、ブロック５４５に続く。
【００６４】
ブロック５４５においてで、トラフィックコントローラ２１２は、信頼できない外部デバイス２２０からのトラフィックの抑制（スロットル）を開始することによって、違反に応答する。スロットルは、所定の時間間隔（例えば、Ｍ個の間隔）の間、信頼できない外部デバイス２２０からのメッセージに起因するＮｏＣ２１３内のトラフィックを低減する。スロットルロジック３３０によって実行される特定の動作は、使用されているスロットルメカニズムに依存する。一実施形態では、スロットルメカニズムは、構成レジスタ３２２で指定される。上述したように、１つのスロットルメカニズムは、時間間隔についてカウントされたメッセージ（又は、バイト）の数と、当該時間間隔についての最大閾値との差に対応する分だけ、次に続く時間間隔についての最大閾値を減少する。このスキームによれば、スロットルロジック３３０は、カウンタ３１１を０にリセットする代わりに、カウンタ３１１を閾値だけデクリメントする。上述した別のスロットルメカニズムは、借りの発生及び返済のメカニズムである。このスキームによれば、ブロック５４５において、スロットルロジック３３０は、トラフィックポリシー違反及び経過時間の各々に応じて、借り発生及び減少を開始する。代替の構成及び実施形態では、ブロック５４５において、外部デバイス２２０からのメッセージに起因するＮｏＣ２１３内のトラフィックを低減するための他の動作が実行される。
【００６５】
ブロック５４３において、最近経過した時間間隔についての最大閾値を超えていない場合、プロセス５００は、ブロック５４７において継続する。ブロック５４７において、スロットルロジックは、（使用されるスロットルメカニズムに応じた）いくつかの条件のうち何れかを評価して、スロットルを終了させるか否かを判別する。例えば、トラフィックポリシー違反が発生した後にＭ個の時間間隔に亘って外部デバイス２２０からのトラフィックを制限するスロットル方法を実施する場合、スロットルロジック３３０は、Ｍ個の間隔が経過した場合にスロットルを終了させる。借りの発生及び返済のメカニズムを含むスロットル方法を実施する場合、スロットルロジック３３０は、外部デバイス２２０に関連する借りが返済された場合にスロットルを終了させる。したがって、他のスロットル方法については、他の基準に基づいてスロットルが終了する。
【００６６】
スロットルを終了させるための基準が満たされない場合、ブロック５４５において、スロットルが継続される。プロセス５００は、ブロック５４５からブロック５０１に続く。ここで、ローカルトラフィック及び外部デバイス２２０からのトラフィックの送信は、実質的にスロットルされながら続く。ブロック５４７において基準が満たされた場合、スロットルがブロック５４９において終了し、プロセス５００は、ブロック５０１において継続する。ここで、ローカルトラフィック及び外部デバイス２２０からのトラフィックの送信は、外部デバイス２２０のスロットル無しに継続する。
【００６７】
したがって、プロセス５００は、ローカルトラフィックが少ない（すなわち、ローカルトラフィック閾値を下回る）場合、ブロック５０１，５１１，５２１，５２３をループして、ローカルトラフィック及び信頼できない外部デバイス２２０からの外部トラフィックを外部トラフィックの監視及びスロットル無しに提供する。ローカルトラフィックが多い（すなわち、ローカルトラフィックの閾値を超える）場合、プロセス５００は、ブロック５０１，５１１，５２１，５３１〜５４９をループして、外部デバイス２２０からの外部トラフィックを１つ以上の時間間隔のセットに亘って監視し、外部トラフィックに起因するトラフィックポリシーの違反の検出に応じて、ＮｏＣ２１３内のトラフィックを低減する。
【００６８】
したがって、上述した処理ユニットは、ＳｏＣの内部ブロック間でローカルトラフィックを送信するように構成されたネットワークオンチップ（ＮｏＣ）を含むホストシステムオンチップ（ＳｏＣ）と、ホストＳｏＣにおいて信頼できないデバイスからのメッセージを受信するように構成された外部プロセッサリンクと、外部プロセッサリンクに接続されたトラフィックコントローラと、を含む。トラフィックコントローラは、信頼できないデバイスからの外部トラフィックの量を時間間隔のセットに亘って監視し、外部トラフィックの量に基づいてトラフィックポリシーの違反を検出し、違反の検出に応じて、信頼できないデバイスからのメッセージによって生じるＮｏＣ内のトラフィックを低減するように構成されている。
【００６９】
特に、トラフィックコントローラは、所定の時間間隔の間に信頼できないデバイスからホストＳｏＣに送信されたメッセージの数が、当該時間間隔についての最大閾値を超えるか否かを判別することによって、トラフィックポリシーの違反を検出する。トラフィックコントローラは、外部プロセッサリンクを介して信頼できないデバイスから受信したメッセージの各々に応じてインクリメントし、所定の時間間隔の経過に応じてリセットするメッセージカウンタを含む。
【００７０】
また、トラフィックコントローラは、最大閾値を変更するための要求を受信することができる構成ロジックを含む。構成ロジックは、要求の認証に応じて、当該要求に従って最大閾値を変更し、又は、要求の認証に失敗したことに応じて、当該要求を無視する。
【００７１】
さらに、トラフィックコントローラは、信頼できないデバイスからホストＳｏＣに送信されたメッセージの数が所定の時間間隔についての最大閾値を超えるとの判別したことに応じて、その次の時間間隔についての最大閾値を減少させるように構成されている。トラフィックコントローラは、所定の時間間隔において受信したメッセージの数と、所定の時間間隔についての最大閾値との差に対応する分だけ、次の時間間隔についての最大閾値を減少させる。
【００７２】
トラフィックコントローラは、Ｎ個の最近の時間間隔のウィンドウに亘る信頼できないデバイスからのメッセージの平均数を計算し、平均数が最大閾値を超えることを判別することによって、トラフィックポリシーの違反を検出する。
【００７３】
また、トラフィックコントローラは、シフトバッファ内に複数のレジスタを含む。各レジスタは、Ｎ個の最近の時間間隔のうち当該レジスタに関連する時間間隔についてのメッセージの数を記憶する。さらに、トラフィックコントローラは、レジスタに記憶された数を合計するための加算器を含む。
【００７４】
トラフィックコントローラは、Ｎ個の最近の時間間隔のうちＮ−１個の前の時間間隔の各々について検出されたメッセージの数の時間加重和を記憶する第１レジスタと、Ｎ個の最近の時間間隔のうち最も最近の時間間隔について検出されたメッセージの数を記憶する第２レジスタと、を含む。また、トラフィックコントローラは、第１レジスタ内の時間加重和のビットシフトバージョンに第２レジスタ内の数を加算することによって、新たな時間加重和を計算するためのロジックを含む。
【００７５】
さらに、トラフィックコントローラは、信頼できないデバイスからのトラフィックを所定期間制限することによって、ＮｏＣ内のトラフィックを低減するスロットルロジックを含む。
【００７６】
また、トラフィックコントローラは、ローカルトラフィックがローカルトラフィック閾値を超えているか否かを判別するローカルトラフィックモニタを含む。トラフィックコントローラは、ローカルトラフィックがローカルトラフィック閾値を超えたときに違反を検出したことに応じて、ＮｏＣ内のトラフィックを低減する。
【００７７】
信頼できないデバイスからのトラフィックをスロットルする方法は、ホストＳｏＣ内のネットワークオンチップ（ＮｏＣ）を介して、ホストシステムオンチップ（ＳｏＣ）の内部ブロック間でローカルトラフィックを送信することと、ホストＳｏＣにおいて、外部プロセッサリンクを介して信頼できないデバイスからのメッセージを受信することと、信頼できないデバイスからの外部トラフィックの量を１つ以上の時間間隔のセットに亘って監視することと、外部トラフィックの量に基づいてトラフィックポリシーの違反を検出することと、違反の検出に応じて、信頼できないデバイスからのメッセージから生じるＮｏＣ内のトラフィックを低減することと、を含む。
【００７８】
また、トラフィックポリシーの違反を検出することは、時間間隔のセットのうち所定の時間間隔において信頼できないデバイスからホストＳｏＣに送信されたメッセージの数が、当該時間間隔についての最大閾値を超えたか否かを判別することを含む。
【００７９】
信頼できないデバイスからのトラフィックをスロットルする方法は、最大閾値を変更するための要求を外部デバイスから受信することと、当該要求の認証に応じて、当該要求に従って最大閾値を変更することと、当該要求の認証に失敗したことに応じて、当該要求を無視することと、を含む。
【００８０】
また、方法は、信頼できないデバイスからホストＳｏＣに送信されたメッセージの数が所定の時間間隔についての最大閾値を超えたと判別したことに応じて、メッセージの数と、当該時間間隔についての最大閾値との差に対応する分だけ、次の時間間隔についての最大閾値を減少させることを含む。
【００８１】
トラフィックポリシーの違反を検出することは、時間間隔のセットのうちＮ個の最近の時間間隔のウィンドウに亘る信頼できないデバイスからのメッセージの平均数を計算することと、当該平均数が最大閾値を超えたことを判別することと、を含む。
【００８２】
また、信頼できないデバイスからのトラフィックをスロットルする方法は、信頼できないデバイスからのトラフィックを所定期間制限することによって、ＮｏＣ内のトラフィックを低減することを含む。
【００８３】
さらに、方法は、ローカルトラフィックがローカルトラフィック閾値を超えたか否かを判別することと、ローカルトラフィックがローカルトラフィック閾値を超えたときに違反を検出したことに応じて、ＮｏＣ内のトラフィックを低減することと、を含む。
【００８４】
信頼できないデバイスを含むコンピュータシステムは、メモリと、メモリに接続されたホストシステムオンチップ（ＳｏＣ）であって、外部プロセッサリンクを介して信頼できないデバイスに接続されたホストシステムオンチップと、を含み、外部プロセッサリンクは、信頼できないデバイスからのメッセージをホストＳｏＣにおいて受信する。ホストＳｏＣは、信頼できないデバイスからのメッセージに応じて、データを、メモリから信頼できないデバイスに送信する。また、ホストＳｏＣは、ＳｏＣの内部ブロック間でローカルトラフィックを送信するように構成されたネットワークオンチップ（ＮｏＣ）と、外部プロセッサリンクに接続されたトラフィックコントローラと、を含む。
【００８５】
トラフィックコントローラは、信頼できないデバイスからの外部トラフィックの量を１つ以上の時間間隔にセットに亘って監視し、外部トラフィックの量に基づいてトラフィックポリシーの違反を検出し、違反の検出に応じて、信頼できないデバイスからのメッセージから生じるＮｏＣ内のトラフィックを低減する。トラフィックコントローラは、ホストＳｏＣと共に単一の集積回路チップ上に配置されている。
【００８６】
また、外部プロセッサリンクは、外部プロセッサリンクのバッファ容量に基づいて、信頼できないデバイスからのトラフィックを調整するフロー制御ロジックを含む。
【００８７】
信頼できないデバイスからのメッセージには、メモリへの読み出し要求、書き込み要求及びアドレス変換要求が含まれる。
【００８８】
本明細書で使用される場合、「に接続される」という用語は、直接的に、又は、１つ以上の介在するコンポーネントを介して間接的に接続されることを意味してもよい。本明細書で説明される様々なバスを介して提供される何れの信号も、他の信号と時分割多重化され、１つ以上の共通のバスを介して提供されてもよい。また、回路コンポーネント間又はブロック間の相互接続は、バス又は単一の信号線として示すことができる。各バスは、代替的に１つ以上のの単一の信号線であってもよく、単一の信号線は、代替的にバスであってもよい。
【００８９】
特定の実施形態は、非一時的なコンピュータ可読媒体に記憶された命令を含み得るコンピュータプログラム製品として実装されてもよい。このような命令は、説明した動作を実行するように汎用又は専用プロセッサをプログラムするために使用されてもよい。コンピュータ可読媒体は、機械（例えば、コンピュータ）によって読み出し可能な形態（例えば、ソフトウェア、処理アプリケーション）で情報を記憶又は送信するための任意のメカニズムを含む。非一時的なコンピュータ可読記憶媒体は、磁気記憶媒体（例えば、フロッピー（登録商標）ディスク）、光記憶媒体（例えば、ＣＤ−ＲＯＭ）、光磁気憶媒体、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能なプログラマブルメモリ（例えば、ＥＰＲＯＭ及びＥＥＰＲＯＭ）、フラッシュメモリ、又は、電子命令を記憶するのに適した別のタイプの媒体を含むことができるが、これらに限定されない。
【００９０】
また、いくつかの実施形態は、コンピュータ可読媒体が２つ以上のコンピュータシステムに記憶され、及び／又は、２つ以上のコンピュータシステムによって実行される分散コンピューティング環境において実施することができる。さらに、コンピュータシステム間で転送される情報は、コンピュータシステムを接続する伝送媒体を介して出し入れ（pulled or pushed）されてもよい。
【００９１】
概して、コンピュータ可読記憶媒体に維持されるホストＳｏＣ２１０及び／又はその一部を表すデータ構造は、プログラムによって読み出すことができ、ホストＳｏＣ２１０を備えるハードウェアを製造するために直接又は間接的に使用することができるデータべース又は他のデータ構造であってよい。例えば、データ構造は、Ｖｅｒｉｌｏｇ又はＶＨＤＬ等の高水準設計言語（ＨＤＬ）におけるハードウェア機能の動作レベル記述又はレジスタ転送レベル（ＲＴＬ）記述であってもよい。記述は、ゲートのリストを含むネットリストを合成ライブラリから生成するために当該記述を合成することができる合成ツールによって読まれてもよい。ネットリストは、ホストＳｏＣ２１０を含むハードウェアの機能を表すゲートのセットを含む。次に、ネットリストを配置及びルーティングして、マスクに適用される幾何学形状を記述するデータセットを生成することができる。次いで、マスクを様々な半導体製造工程で使用して、ホストＳｏＣ２１０に対応する１つ以上の半導体回路を製造することができる。或いは、コンピュータ可読記憶媒体上のデータベースは、ネットリスト（合成ライブラリを伴う若しくは伴わない）、データセット、又は、必要に応じてグラフィックデータシステム（ＧＤＳ）ＩＩデータであってもよい。
【００９２】
本明細書における方法の動作は、特定の順序で図示及び説明されているが、特定の動作が逆の順序で実行されるように、又は、特定の動作が少なくとも部分的に他の動作と同時に実行されるように、各方法の動作の順序を変更することができる。別の実施形態では、異なる動作の命令又はサブ動作（sub-operations）は、断続的及び／又は交互的な方法であってもよい。
【００９３】
上述した明細書において、特定の例示的な実施形態を参照して実施形態を説明した。しかしながら、添付の特許請求の範囲に記載された発明のより広い範囲から逸脱することなく、様々な変形及び変更を加えることができることは明らかであろう。したがって、明細書及び図面は、限定的な意味ではなく、例示的な意味で考慮されるべきである。
【図１】
2019525619.tif 000005
【図２】
2019525619.tif 000006
【図３】
2019525619.tif 000007
【図４】
2019525619.tif 000008
【図５】
2019525619.tif 000009
【国際調査報告】
2019525619.tif 000010
2019525619.tif 000011