(57)【特許請求の範囲】
【請求項１】
動的に構成可能なバンド幅を有するリンクを介して、コントローラーとスイッチファブリックを含むダウンストリームモジュールを、ホストプロセッサを含むアップストリームモジュールに接続するステップと、
前記コントローラーを初期化するステップと、を含み、
前記コントローラーが初期化された後に、前記ダウンストリームモジュールは、
前記ダウンストリームモジュールに対する入力／出力（Ｉ／Ｏ）バンド幅を決定し、かつ、
前記決定に基づいて、前記リンクのバンド幅を動的に調整し、
前記ダウンストリームモジュールは、
第１の時間が生じる以前に、前記決定されたバンド幅が前記リンクのバンド幅よりも大きい場合、即時にリンクのバンド幅を増加し、かつ、
第２の時間が生じた以降に、前記決定されたバンド幅が前記リンクのバンド幅よりも小さい場合、即時にではなくリンクの幅を減少し、
前記第２の時間は、前記第１の時間よりも長い、
ことを特徴とする方法。
【請求項２】
第１および第２のダウンストリームポートは、前記コントローラーを介してホストに接続されており、
前記ダウンストリームモジュールは、前記第１および前記第２のダウンストリームポートの両方に対するバンド幅要求に基づいて、前記Ｉ／Ｏバンド幅を決定する、
請求項１に記載の方法。
【請求項３】
前記ダウンストリームモジュールは、
前記決定されたバンド幅が第１の閾値よりも大きい場合、前記リンクのバンド幅を動的に増加し、かつ、
前記決定されたバンド幅が第２の閾値よりも小さい場合、前記リンクのバンド幅を低バンド幅設定まで動的に減少する、
請求項１に記載の方法。
【請求項４】
前記第１の閾値は、前記第２の閾値と等しくない、
請求項３に記載の方法。
【請求項５】
前記ダウンストリームモジュールは、
前記リンクのバンド幅が前記低バンド幅設定まで既に減少された後で、前記決定されたバンド幅が第３の閾値よりも小さい場合、さらに、前記リンクのバンド幅を前記低バンド幅設定より小さいバンド幅設定まで動的に減少する、
請求項３に記載の方法。
【請求項６】
前記ダウンストリームモジュールに接続された温度センサーの温度値を決定し、かつ、
前記温度センサーの前記決定された温度値に基づいて、前記リンクのバンド幅を動的に調整する、
請求項１に記載の方法。
【請求項７】
前記コントローラーを介して、第１および第２のダウンストリームポートがホストに接続されており、
前記リンクは、周辺機器相互接続エクスプレス（ＰＣＩｅ）リンクであり、前記コントローラーは、ＰＣＩｅコントローラーであり、
前記ダウンストリームモジュールは、前記コントローラーと、前記第１および第２のダウンストリームポートとを含むチップセットを含んでおり、
前記第１および第２のダウンストリームポートの両方に対するバンド幅要求に基づいて前記Ｉ／Ｏバンド幅を決定する、前記コントローラーと前記スイッチファブリックのうち少なくとも一つを含んでいる、
請求項１に記載の方法。
【請求項８】
前記ダウンストリームモジュールは、
前記第１のダウンストリームポートから生じたサイドバンドメッセージを介して、前記第１のダウンストリームポートに対する前記バンド幅要求に対応する、第１のデータを受け取り、
前記第２のダウンストリームポートから生じたサイドバンドメッセージを介して、前記第２のダウンストリームポートに対する前記バンド幅要求に対応する、第２のデータを受け取り、かつ、
前記第１および第２のデータの集計に基づいて、前記Ｉ／Ｏバンド幅を決定する、
請求項７に記載の方法。
【請求項９】
第１のダウンストリームポートは、前記コントローラーを介して前記ホストプロセッサに接続され、第２のダウンストリームポートは、前記コントローラーを介して前記ホストプロセッサに接続され、
前記ダウンストリームモジュールは、前記コントローラーと前記第１のダウンストリームポートを含むが、前記第２のダウンストリームポートは含まないチップセットを含んでおり、
前記ダウンストリームモジュールは、前記第１および第２のダウンストリームポートに対するバンド幅要求に基づいて前記Ｉ／Ｏバンド幅を決定する、
請求項１に記載の方法。
【請求項１０】
前記ダウンストリームモジュールは、
前記ダウンストリームモジュールに対するキューの深さと前記ダウンストリームモジュールによって処理されるパケットのサイズのうち少なくとも一つの決定に基づいて第１のメトリックを決定し、
前記第１のメトリックに基づいて前記Ｉ／Ｏバンド幅を決定する、
請求項１に記載の方法。
【請求項１１】
前記ダウンストリームモジュールは、
閾値を満たさない前記Ｉ／Ｏバンド幅を決定し、
前記Ｉ／Ｏバンド幅は前記閾値を満たさないとの前記決定に基づいてタイマーをスタートさせ、かつ、
前記タイマーの経過に基づいて前記リンクのバンド幅を減少する、
請求項１に記載の方法。
【請求項１２】
請求項１乃至１１のいずれか一項に記載の前記方法を少なくとも一つのプロセッサに実行させるように構成された一式のインストラクションを有するコンピュータプログラム。
【請求項１３】
コントローラーとスイッチファブリックを含むダウンストリームモジュールと、
動的に構成可能なバンド幅を有し、前記ダウンストリームモジュールをプロセッサを含むアップストリームモジュールに接続するリンクと、
前記コントローラーに接続されたメモリーであり、実行されると、前記コントローラーが既に初期化された後に、前記ダウンストリームモジュールに対する入力／出力（Ｉ／Ｏ）バンド幅を決定し、かつ、前記決定に基づいて、前記リンクのバンド幅を動的に調整する、インストラクションを含んでいるメモリーと、を含み、
前記メモリーは、さらに、実行されると、
第１の時間が生じる以前に、前記決定されたバンド幅が前記リンクのバンド幅よりも大きい場合、即時にリンクのバンド幅を増加し、かつ、
第２の時間が生じた以降に、前記決定されたバンド幅が前記リンクのバンド幅よりも小さい場合、即時にではなくリンクの幅を減少し、
前記第２の時間は、前記第１の時間よりも長い、
ことを特徴とする装置。
【請求項１４】
前記コントローラーを介してホストに接続されている第１および第２のダウンストリームポートを含み、
前記メモリーは、さらに、実行されると前記ダウンストリームモジュールに、
前記第１および前記第２のダウンストリームポートの両方に対するバンド幅要求に基づいて、前記Ｉ／Ｏバンド幅を決定させる、インストラクションを含む、
請求項１３に記載の装置。
【請求項１５】
前記メモリーは、さらに、実行されると前記ダウンストリームモジュールに、
前記決定されたバンド幅が第１の閾値よりも大きい場合、前記リンクのバンド幅を動的に増加させ、かつ、
前記決定されたバンド幅が第２の閾値よりも小さい場合、前記リンクのバンド幅を低バンド幅設定まで動的に減少させる、インストラクションを含む、
請求項１３に記載の装置。
【請求項１６】
前記コントローラーを介して前記プロセッサに接続された第１のダウンストリームポートと、
前記コントローラーを介して前記プロセッサに接続された第２のダウンストリームポートと、を含み、
前記メモリーは、さらに、実行されると前記ダウンストリームモジュールに、
前記第１および第２のダウンストリームポートに対するバンド幅要求に基づいて前記Ｉ／Ｏバンド幅を決定させる、インストラクションを含み、
前記ダウンストリームモジュールは、さらに、前記コントローラーと前記第１のダウンストリームポートを含むが前記第２のダウンストリームポートは含まないチップセットを含んでいる、
請求項１３に記載の装置。
【請求項１７】
前記メモリーは、さらに、実行されると前記ダウンストリームモジュールに、
前記第１のダウンストリームポートから生じたサイドバンドメッセージを介して、前記第１のダウンストリームポートに対する前記バンド幅要求に対応する、第１のデータを受け取らせ、
前記第２のダウンストリームポートから生じたサイドバンドメッセージを介して、前記第２のダウンストリームポートに対する前記バンド幅要求に対応する、第２のデータを受け取らせ、かつ、
前記第１および第２のデータの集計に基づいて、前記Ｉ／Ｏバンド幅を決定させる、インストラクションを含む、
請求項１６に記載の装置。
【請求項１８】
請求項１３乃至１７いずれか一項に係る前記ダウンストリームモジュールを含むコンピューターシステムであって、さらに、前記アップストリームモジュールを含むコンピューターシステム。
【請求項１９】
請求項１乃至１１いずれか一項に記載の前記方法を少なくとも一つのプロセッサに実行させるように構成された一式のインストラクションを含むコンピュータで読取り可能なストレージ媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的リンク幅調整に関する。
【背景技術】
【０００２】
プラットフォーム（例えば、サーバープラットフォーム）は、入力／出力（Ｉ／Ｏ）デバイスからの性能／電力（ｐｅｒｆｏｒｍａｎｃｅ／ｐｏｗｅｒ）ロードライン（ｌｏａｄ  ｌｉｎｅ）を必要とする。ここで、電力消費は、低バンド幅の利用時に減少するものと期待される。周辺機器相互接続エクスプレス（ＰＣＩｅ）デバイスは、低パフォーマンスの期間中に、プラットフォームが利用する低電力状態（ｌｏｗ  ｐｏｗｅｒ  ｓｔａｔｅ）を含んでいる。しかしながら、実際のサーバー負荷の特徴を観察すると、ＰＣＩｅリンク電力状態（例えば、Ｌ０、Ｌ１）は、利用の関数として、電力節減が理想より少ないことがわかる。例えば、Ｌ１状態は、ＯＳアイドル（ＯＳ  ｉｄｌｅ）又はそれに近い電力節減を提供するが、リンクは主としてアクティブ（ａｃｔｉｖｅ）である。非常に低いバンド幅（例えば、５％以下）においてさえも、そうである。Ｉ／Ｏトラフィックの性質（例えば、サーバーＩ／Ｏトラフィック）のために、タイムアウトベースのリンク消費電力管理状態は、レジデンシー（ｒｅｓｉｄｅｎｃｙ）が非常に低い。従って、そうした状態は存在するのだが、適切には利用されていない。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
結果として、Ｉ／Ｏ電力は、コンポーネントレベル及ぶプラットフォームレベルにおいて十分に利用されていない（例えば、不適当なファンの速さ及びそれに対応する電流の流れ）。熱暴走が起きた際の適切な温度スロットル（ｔｈｅｒｍａｌ  ｔｈｒｏｔｔｌｉｎｇ）が欠如していることにより、熱的な非効率をも生じている。
【課題を解決するための手段】
【０００４】
以降の記載において所定の詳細が数多く明らかにされるが、本発明の実施例は、これら所定の詳細が無くても実行し得るものである。よく知られた回路、構成、および、技術は、ここでの説明の理解を妨げないように、詳細には示されない。「一つの実施例」、「種々の実施例」等は、そのように記述された実施例が、所定の特徴、構成、または、特性を含み得ることを意味している。しかし、必ずしも全ての実施例が、所定の特徴、構成、または、特性を含むことを要しない。いくつかの実施例は、他の実施例のために説明された特徴のうち、いくつか又は全てを有し得るし、または、何も有さなくてよい。「第１の」、「第２の」、「第３の」等は、共通のオブジェクトを説明しており、類似のオブジェクトの異なるインスタンスが参照されていることを意味している。こうした形容詞は、そのように記述されたオブジェクトが与えられた順序でなければならないことを意味するものではない。一時的、空間的、ランキング又はあらゆる他の方法のいずれでもよい。「接続された」は、エレメントがお互いに直接に物理的または電気的に接触していることを意味している。そして、「結合された」は、お互いに協働または相互作用するエレメントを意味するが、それらは、直接に物理的または電気的に接触しても、しなくてもよい。また、異なる図面における同一または類似のパーツを示すために、類似または同一の参照番号が使用されるが、そうすることは、、類似または同一の参照番号を含む全ての図面が単一の又は同一の実施例を構成することを意味するものではない。
【０００５】
一つの実施例は、ハードウェア及び/又はソフトウェアモジュールを介して実施される、ポリシーを含んでいる。Ｉ／Ｏバンド幅要求のランタイムトラッキング、及び/又は、温度モニターに基づいて、動的にリンク（例えば、ＰＣＩｅリンク）の幅を動的に調整するためのポリシーである。こうした一つの実施例は、バンド幅の利用が、ネイティブ（ｎａｔｉｖｅ）なリンク幅と速度より小さい場合に、電力節減を提供する。こうした一つの実施例は、さらに、一時的な熱暴走の期間中に温度削減を提供する。一つの実施例において、ポリシーは、ダウンストリーム（ｄｏｗｎｓｔｒｅａｍ）コンポーネントの中に存在し、アップストリーム（ｕｐｓｔｒｅｍ）コンポーネントと協調する。アップストリームコンポーネントは、ダウンストリームコンポーネントによって交渉されているリンク幅構成を許可し、または、承諾する。
【０００６】
一つの実施例は、統合されたエンドポイント（ここにおいて、ときどき「ポート（ｐｏｒｔ）」としても参照されるもの）を有するダウンストリームＰＣＩｅコンポーネントを含んでいる。こうしたダウンストリームコンポーネントの実施例は、ＰＣＩｅコントローラーをも含むシステムオンチップ（ＳＯＣ）に含まれているシリアル接続スモールコンピューターシステムインターフェイス（ＳＡＳ）コントローラーを含んでいる。エンドポイントは、ＳＯＣ上に配置されており、従って「統合された」エンドポイントである。
【０００７】
しかしながら、別の実施例は、ＰＣＩｅエンドポイントのさらなるダウンストリームをサポートするＰＣＩｅポートまたはエンドポイントを伴うダウンストリームＰＣＩｅコンポーネントを含んでいる。例えば、そうしたダウンストリームポートは、ＰＣＩｅコントローラーを含むＳＯＣ上に、統合されていないストレージコントローラーを含んでいる。そうしたコンポーネントは、例えば、ＰＣＩｅコントローラーの「ダウンストリーム」ＰＣＩｅポートに取り付けられた個別のＰＣＩｅイーサネット（登録商標）カードまたはストレージコントローラーを含んでいる。
【図面の簡単な説明】
【０００８】
本発明の実施例の特徴および利点は、添付の特許請求の範囲、以降の一つまたはそれ以上の実施例の詳細な説明、および、対応する図面から明らかになる。
【図１】図１は、本発明の一つの実施例における、アップストリームおよびダウンストリームモジュールを含むデバイスのブロックダイヤグラムを示している。
【図２Ａ】図２Ａは、リンク幅を調整するための本発明の一つの実施例に関するフローチャートを示している。
【図２Ｂ】図２Ｂは、リンク幅を調整するための本発明の一つの実施例に関する関連のバンド幅チャートを示している。
【図３Ａ】図３Ａは、リンク幅を調整するための本発明の一つの実施例に関するフローチャートを示している。
【図３Ｂ】図３Ｂは、リンク幅を調整するための本発明の一つの実施例に関する関連のバンド幅チャートを示している。
【図４】図４は、本発明の一つの実施例における、模式的なメッセージ伝送ダイヤグラムを示している。
【図５】図５は、リンク幅を調整するための本発明の一つの実施例に関するフローチャートを示している。
【発明を実施するための形態】
【０００９】
図１は、統合および非統合ポートまたはエンドポイントに関する一つの実施例として、本発明の一つの実施例における、アップストリームおよびダウンストリームモジュールを含むデバイスのブロックダイヤグラムを示している。システム１００は、「アップストリーム」デバイス１０５と「ダウンストリーム」デバイス１２０を含んでいる。アップストリームデバイス１０５は、プロセッサ１０７、ルートコンプレックス（ｒｏｏｔ  ｃｏｍｐｌｅｘ）１１０、および、メモリー１１５を含んでいる。メモリーは、「アップコンフィグレーション」（つまり、リンク幅を増加させること）、および、「ダウンコンフィグレーション」（つまり、リンク幅を減少させること）を許可するためのインストラクションを含んでいる。リンク１２５は、ＰＣＩｅリンクを含んでよい。
【００１０】
ダウンストリームデバイス１２０は、ＰＣＩｅコントローラー１３０、ファブリック（ｆａｂｒｉｃ）１３５、および、ストレージコントローラー１４０を含む、種々のコンポーネントを有するチップセットを含んでいる。ストレージコントローラー１４０は、「統合されたエンドポイント」、または、固有のバンド幅要求を有するポートを構成する。また、ダウンリンク１４５は、モジュール１２０の中に統合されていないダウンストリームＰＣＩｅデバイスに接続されたＰＣＩｅポートを構成している。そうしたダウンストリームデバイスは、例えば、ＰＣＩｅイーサネットカード１６０を含んでいる。ＰＣＩｅイーサネットカードは、固有のバンド幅要求をもったダウンストリームエンドポイントを含んでいる。ＰＣＩｅコントローラー１３０は、インストラクションを有している一つまたはそれ以上のメモリー１３６に接続されている。インストラクションは、状態機械（ｓｔａｔｅ  ｍａｃｈｉｎｅ）として、アップおよびダウンリンクコンフィグレーションができるように機能する。バンド幅（ＢＷ）の見積り、および、リンク１２５の動的リンク幅（ｄｙｎａｍｉｃ  ｌｉｎｋ  ｗｉｄｔｈ：ＤＬＷ）に関する決定も同様である。以降に説明されるフローチャートにおいて、コントローラーモジュール１３０に対する種々の実施例が説明される。
【００１１】
一般的な注意として、たまに、ＢＷ見積り及びＤＬＷ意志決定インストラクションは、ＰＣＩｅコントローラー１３０の中に含まれるべきとされている。これは、説明をし易くするためであり、限定することを意味するものではない。例えば、実施例において、ＢＷ見積り及びＤＬＷ意志決定インストラクション／状態機械、等は、実施のためにはどちらの領域がより好適／便利であるかに基づいて、例えば、ファブリック１３５といった他の領域に含まれてよい。例えば、一つの実施例において、ＢＷ見積り及びＤＬＷ意志決定インストラクション／状態機械は、コントローラーの中に設定されている好適なレジスターを伴うファブリック１３５の中に含まれている。
【００１２】
一つの実施例は、ハードウェア自律的意志決定に基づくポリシーを含んでいる。ＰＣＩｅコントローラー１３０は、アップリンク１２５上のランタイムバンド幅要求をモニターし、リンクをアップコンフィグレーションするか、ダウンコンフィグレーションするかを決定する。一つの実施例において、ルートコンプレックス（ｒｏｏｔ  ｃｏｍｐｌｅｘ）１１０は、ＰＣＩｅコントローラー１３０からのアップストリームであり、ＰＣＩｅコントローラーはダウンストリームのデバイス１２０の中に配置されている。ルートコンプレックス１１０とモジュール１０５のあらゆるアップストリームポートは、一つの実施例において、コントローラーモジュール１３０からのリンク幅交渉に単純に従い、アップまたはダウンコンフィグレーションを実施するようにモジュール１３０と協調する。ルートコンプレックス１１０は、あらゆるバンド幅モニタリングにおいて何の役割も無くてよく、代わりに、そうしたモニタリングをコントローラーモジュール１３０のために残しておいている。
【００１３】
リンク１２５に関しては、ＰＣＩｅ構造が、ルートコンプレックスから始まる、階層的であることに留意する。ＰＣＩｅリンク、リンク１２５といったもの、は、ダウンストリームデバイス、デバイス１２０および１６０（デバイス１２０からのダウンストリームに配置されている）といったもの、に接続している。モジュールまたはデバイス１２０といったダウンストリームデバイスの観点から、リンク１２５は、ホスト１０５への「アップリンク（ｕｐｌｉｎｋ）」である。しかしながら、リンク１２５は、ルートコンプレックスの観点からは「ダウンリンク（ｄｏｗｎｌｉｎｋ）」である。リンク１２５は、両方向のトラフィックを許容するイングレス（ｉｎｇｒｅｓｓ）及び/又はエグレス（ｅｇｒｅｓｓ）レーン（ｌａｎｅ）を含んでいる。
【００１４】
図２Ａと２Ｂは、リンク幅を調整するための本発明の一つの実施例に関するフローチャートおよび関連のバンド幅チャートを示している。ブロック２０５は、「ＭａｘＬＷ」値の更新に対する待ち（ｗａｉｔｉｎｇ）を含んでいる。ＭａｘＬＷ値は、ダウンストリームデバイス１２０とデバイス１６０によって必要とされる最大のライン幅に係わるものである。このＭａｘＬＷは、統合エンドポイント（例えば、ダウンストリームモジュール１２０の中に統合されたストレージコントローラー１４０）、非統合エンドポイント（例えば、ダウンストリームモジュール１２０、すなわちＰＣＩｅコントローラー１３０、に統合されていないＰＣＩｅイーサネットカード）及び関連するポート（例えば、１５５）、および、統合及び非統合エンドポイントの組み合わせ、に基づいている。
【００１５】
本発明に係る種々の実施例は、要求されるバンド幅（例えば、ＭａｘＬＷ）を、種々のやり方で決定してよい。バンド幅モニタリングメカニズムは、ＰＣＩｅリンク上にわたるトラフィックに係るバンド幅要求をモニターする。そうしたメカニズムは、一般的に、コマンド／データキュー（ｑｕｅｕｅ）、利用可能なフリークレジット、バッファー利用、与えられたインターバルにわたる実際の累積されたデータパケット、等のモニタリングを含んでいる。種々のパフォーマンスモニターが、この効果のために使用され得る。
【００１６】
バンド幅モニタリングの一つの実施例において、ＰＣＩｅコントローラー１３０は、キューの深さをカウントする。例えば、ウィンドウタイマー上のイングレス及びエグレスポートにおいて、リーキーバケットアルゴリズム（ｌｅａｋｙ  ｂｕｃｋｅｔ  ａｌｇｏｒｉｔｈｍ）を使用して行う。そうしたポートは、ポート１５０、１５５、及び/又は、ファブリック１３５に対してポート接続されているコントローラー１４０を含んでいる。
【００１７】
別の実施例は、ある期間（例えば、ウィンドウタイマーによって測定されるもの）にわたるパッケトサイズをカウントすることによって実際のバンド幅を測定することを含んでいる。そうしたウィンドウは、約３００、４００、５００、６００、７００マイクロ秒、等であり得る。測定は、コントローラーから外に向かって進む（つまり、エグレス）トラフィックのバンド幅、および、コントローラーの中に向かって進む（つまり、イングレス）トラフィックのバンド幅を提供する。例えば、コントローラー１３０は、ホストプロセッサ１０７に向かって進むバンド幅（「エグレスＢＷ（ＥｇｒｅｓｓＢＷ）」）、および、ホストプロセッサ１０７から離れて進むバンド幅（「イングレスＢＷ（ＩｎｇｒｅｓｓＢＷ）」）を測定する。「ＮｅｔＢＷ」要求は、エグレスバンド幅（「エグレスＢＷ」）およびイングレスバンド幅（「イングレスＢＷ」）より大きい。このように、モニタリングによって、実際のトラフィックコントローラー１３０は、例えば、タイマーによって測定された、期間にわたるバンド幅利用を累積することができる。
【００１８】
別の実施例において、ＰＣＩｅコントローラー１３０は、統合されたエンドポイント（例えば、デバイス１４０）とダウンストリームポート（例えば、１６０）から、それぞれの最大バンド幅要求に関する入力を受け取る。コントローラー１３０は、そして、個々の入力を集めて、正味のアップリンクバンド幅要求を計算する。接続率ベースのスコアリングシステムが使用され、関与している機能（つまり、ストレージコントローラー１４０に関するストレージといった機能）が、例えば、アクティブなレーンの数量とオペレーティング速度に基づいて、最大のバンド幅要求を特定することができる。
【００１９】
一つの実施例において、バンド幅要求は、接続速度と同様にポート接続を計算することにより動的に算出される。例えば、統合された８ポート６Ｇｂ／ｓのＳＡＴＡコントローラーは、全ての８個のポートがアクティブである場合に最大で４８Ｇｂ／ｓの双方向バンド幅（つまり、「ポート接続の計算」＝８ポート接続×ポート毎の６Ｇｂ／ｓ＝４８Ｇｂ／ｓが必要とされるバンド幅）をサポートする。しかし、２つのポートだけアクティブな場合は、１２Ｇｂ／ｓ（つまり、２ポート接続×ポート毎の６Ｇｂ／ｓ＝１２Ｇｂ／ｓが必要とされるバンド幅）しかサポートされない。６Ｇｂ／ｓ接続は、４×１．５Ｇｂ／ｓ接続であるとしてカウントされる。同様に、トレイン／接続されていないリンク、または、電力節減状態にあるリンク（つまり、ＰＣＩｅに対するＬ０、ＳＡＳ／ＳＡＴＡに対するパーシャル／スランバー（ｐａｒｔｉａｌ／ｓｌｕｍｂｅｒ））は、０Ｇｂ／ｓとしてカウントされる。このことは、アプローチを実際のリンクプロトコルから独立したものにし、全てのタイプの統合されたＩ／Ｏエンドポイントとポート（例えば、ＳＡＴＡ／ＳＡＳ、ＰＣＩｅ、ＵＳＢといったリンクプロトコルと種々の生成速度）に順応する。
【００２０】
「スコアリングシステム（ｓｃｏｒｉｎｇ  ｓｙｓｙｔｅｍ）」に関し、一つの実施例において、コントローラー１４０は、２Ｇｂ／ｓ（５ポイントに等しいルックアップテーブルに従ったもの）を必要とし、カード１６０は、８Ｇｂ／ｓ（２０ポイントに等しいルックアップテーブルに従ったもの）を必要とする。スコアは、一緒に加算され正味２５ポイントとなり、４の幅と同等である。しかしながら、別の実施例においては、スコアが異なる重み付けをされてよい。例えば、コントローラー１４０が、カード１６０より大きく重み付けされ（例えば、２：１のコントローラー／イーサネットカードの比率）、アイテム１４０と１６０との間の異なるリンク速度を正規化しようと試みることができる。
【００２１】
より一般的には、一つの実施例において、「スコアリングシステム」により、それぞれの関連するエンドポイントは、その動的最大バンド幅要求を計算することができる。エンドポイント毎の動的最大バンド幅要求は、全てのアクティブなレーンに係るレーン毎のオペレーティング速度の合計であり得る（使用されていないもの、トレインされていないもの、及び/又は、アイドルのレーンは、ゼロバンド幅要求とされる）。このシステムは、いくつかのＩ／Ｏプロトコルに存在する８ｂ／１０ｂエンコードに対する正規化によって、有効なペイロードバンド幅を説明することもできる。所定のエンドポイントを他のものに比べて重視するように重み付けが割り当てられてよい。ＩＯＳＦサイドバンドメッセージにより、バンド幅要求を、例えば、０．５Ｇｂ／ｓの粒度レベルでレポートすることができる。
【００２２】
それぞれの関連する機能（例えば、コントローラー１５０、カード１６０）は、例えば、内部ファブリック上または直接的な電線を通じたメッセージを使用して、最大バンド幅要求を提供することができる。一つの実施例において、ダウンストリームポートは、サイドバンドメッセージ（例えば、ポストされたデータを伴うユニキャスト（ｕｎｉｃａｓｔ）メッセージ）をアップストリームコントローラーに対して送付し、専用の電線の使用を避け、プライマリーパスを開放する。全ての関連する機能（従って、統合および非統合エンドポイント）からそうした入力を集めることで、最大バンド幅要求を提供する。このように、統合された１２ＧのＳＡＳコントローラー（例えば、コントローラー１４０）と×８ＰＣＩｅダウンリンク（例えば、ダウンリンクＰＣＩｅ１４５）は、それぞれの最大バンド幅要求を含んでいるサイドバンドメッセージをスイッチファブリック１３５に対してそれぞれ送付する機能である。これらのアップデートは、ＰＣＩｅコントローラー１３０に対して、ウィンドウタイマーの期限切れ、または、バンド幅の値の変化、のいずれかにおいて提供され得る。
【００２３】
要求されるバンド幅が知られると、コントローラー１３０は、好適なリンク幅１２５を決定する。一つの実施例において、コントローラー１３０は、バンド幅要求をサポートされているバンド幅と比較する。例えば、ＰＣＩｅにより、×Ｎリンクは、サポートされている幅がより小さい×１幅までに再構成され得る。特に、×８ＰＣＩｅリンクは、×８、×４、×２、または、×１幅のリンクとして構成されてよい。それぞれが、最大バンド幅６４Ｇｂ／ｓ、３２Ｇｂ／ｓ、１６Ｇｂ／ｓ、および、８Ｇｂ／ｓに相当するものである。コントローラー１３０に接続されたメモリーの中に保管されている、ルックアップテーブルは、バンド幅要求をサポートされているリンク幅の一つに対してマップすることができる。
【００２４】
図２ａに戻ると、上記に説明したように、要求されるバンド幅を決定するための種々のやり方が存在する。そうした決定が成された後に、ブロック２０５において、ＭａｘＬＷ値が受け取られる。上記に説明したように、これは、一つまたはそれ以上の統合または非統合エンドポイント（例えば、コントローラー１５０、ＰＣＩｅイーサネットカード１６０、及び/又は、リンク１５０に接続されたダウンストリームポート、等）からのサイドバンドメッセージを介して受け取ることができる。フラグは、０（ゼロ）に設定される。ブロック２１０において、現在の幅（ＬＷ）が、所望のバンド幅（ＭａｘＬＷ）と比較される。アップデートされたリンク幅が、現在のリンク幅よりも大きい場合、コントローラーは、「即時に」（相対的な用語として）より高いバンド幅に移行する（例えば、レイテンシー（ｌａｔｅｎｃｙ）を最小にするように５または１０マイクロ秒より小さいもの）。アップコンフィグレーションのレイテンシー（ブロック２１５を参照）のためにパフォーマンス劣化が生じるのを避けるためである。イネーブル（ｅｎａｂｌｅ）された場合、ＰＣＩｅコントローラー１３０は、コンフィグレーションレジスター（例えば、ｕｐｃｆｇｃｔｌレジスター）において定義されたリンク幅へトレインする。値に変化がある場合（ブロック２１５を参照）、コントローラーは、伝送中のメッセージを送付することを止めて、新たな幅を再びトレインすることを開始する。ＤＬＷポリシーは、この移行の即時性を判断して、バンド幅が大きくなるとすぐにレジスターを変更する。
【００２５】
一つの実施例において、実際のＰＨＹレベルアップ又はダウンコンフィグレーションは、動的な幅構成をサポートするために、アップストリームモジュール１０５とダウンストリームモジュール１２０の両方を必要とする。ＰＣＩｅリンクの両方のエンドポイントがアップコンフィグレーションをサポートしている場合、ダウンストリームデバイス１２０のＰＣＩｅアップリンクコントローラー１３０は、動的リンクポリシーによって決定された新たな幅への移行を開始する。
【００２６】
アップデートされたリンク幅が現在のリンク幅よりも小さい場合（ブロック２２０を参照）、コントローラーは、要求をフィルターする。例えば、有限インパルス応答（ＦＩＲ）フィルター、移動平均フィルター、及び/又は、より小さな次の幅へのダウンコンフィグレーションの前のウィンドウタイマー、を使用するものである。一つの実施例において、フラグ設定＝０（これが、フローチャートのこの部分を通じた最初のトリップであることを示している）である場合、ブロック２２５において、タイマーがスタートする。タイマーの経過を待っている間に（ブロック２３０）、コントローラーは、あらゆるＭａｘＬＷのアップデートをチェックする。そうしたアップデートがある場合、プロセスは、ブロック２１０へと続く（フラグは、今や１に設定されるのだが）。アップデートが存在しない場合、プロセスはブロック２４０へ続く。タイマーが最終的に経過して、必要なバンド幅が、現在割り当てられている幅が扱うことができるものより未だに小さい場合、ブロック２４５において、コントローラー１３０は、次の、より小さなＬＷまで減少させる。例えば、ＬＷが８レーンに対して設定されていれば、４レーンに減少されてよい。フローチャートを通じた後続のトリップの際に、ＬＷは、４レーンから２レーンに、および、２レーンから１レーンに減少され得る。
【００２７】
このように、一つの実施例において、ダウンコンフィグレーションは、タイマー経過に基づいており、アップコンフィグレーションは、最大リンク幅（ＭａｘＬＷ）のアップデートに、相対的に即時に基づいている。リンク幅１２５に係るこの「非即時（ｎｏｎ−ｉｍｍｅｄｉａｔｅ）」ダウンコンフィグレーションは、頻繁なアップコンフィグレーションとダウンコンフィグレーションのサイクルによる、チャタリング（ｃｈａｔｔｅｒｉｎｇ）およびパフォーマンススロットルを防いでいる。このように、図２は、関連する機能から受け取った「ヒント（ｈｉｎｔ）」に基づいた、リンク幅決定フローを説明している。
【００２８】
図２ｂは、最大リンク幅要求（２５５）の関数として実際のリンク幅（２５０）を表しており、要求されるリンク幅に対してどのようにリンク幅が遅れて、調整されるかを示している。
【００２９】
ウィンドウタイマー上でのバンド幅の累積に基づいた他の実施例は、インターバルをカウントしている最中に高い基準値（つまり、上限の閾値）に達した場合に、リンクをアップコンフィグレーションするか、または、インターバルをカウントしている際にトラフィックが低い基準値（つまり、下限の閾値）である場合に、リンクをダウンコンフィグレーションする。例えば、図３ａ、３ｂは、リンク幅の調整に係る本発明の一つの実施例に関するフローチャートと関連のバンド幅チャートを含んでいる。
【００３０】
ブロック３０５において、タイマーがスタートし、バンド幅要求の累積が始まる。ブロック３１０においては、累積されたバンド幅要求が上限の閾値を超える場合、相対的に即時にアップコンフィグレーションが生じる（ブロック３１５）（例えば、レイテンシーを最小化するように５または１０マイクロ秒より小さいもの）。しかしながら、累積されたバンド幅要求が上限の閾値を超えない場合、プロセスは、タイマーが経過したものと判断する（ブロック３２０）。タイマーが経過していない場合、プロセスはブロック３１０に戻る。タイマーが経過している場合は、ブロック３２５において、累積されたバンド幅要求が、下限の閾値（ＤｎＴｈ）より大きいかどうか判断される。大きい場合、プロセスはブロック３０５に戻り、新たなタイマー期間が始まる。小さい場合は、ブロック３３０において、コントローラー１３０は、次のより小さなＬＷへと減少させる。例えば、ＬＷが８レーンに設定されている場合には、４レーンへと減少され得る。このフローチャートを通じて後続のトリップの際に、ＬＷは４レーンから２レーンへ、および、２レーンから１レーンへと減少され得る。
【００３１】
図３ｂは、要求されたバンド幅が、アップコンフィグレーションおよびダウンコンフィグレーションをどのように駆動するかを説明しており、種々の閾値を満たしているバンド幅要求および種々の閾値を満たすことができないバンド幅要求に従って、どのようにリンク幅が変化するかを示している。
【００３２】
図４は、本発明の一つの実施例における、模式的なメッセージ伝送ダイヤグラムを示している。ライン４０５は、ＰＣＩｅイーサネットカード１６０およびストレージコントローラー１５０といったダウンストリームＰＣＩｅポートを表している。一つの時間インターバルの中において（図３ａのブロック３０５における時間を参照）２つの有効リンク幅メッセージ伝送（ＥｆｆＬＷＭｅｓｓＴｘｎ）が送付され、スイッチファブリック１３５が累積される（ライン４１０を参照。スイッチファブリック（ＳＷＦ）１３５）。（別の実施例において、ポリシーは、ファブリック１３４の代わりにコントローラー１３０の中に在ってよく、結果として、コントローラー１３０において累積が発生する。）次に、好適なコンフィグレーションコマンド（コンフィグレーション書き込みメッセージ（「ＣｆｇＷｒＭｅｓｇ」）の中に含まれているアップまたはダウンコンフィグレーションコマンド）が、ファブリック１３５からコントロール１３０に対して、そして、例えば、ホストプロセッサ（ライン４１５を参照）およびルートコンプレックスに対して送付される。
【００３３】
図５は、リンク幅を調整するための本発明の一つの実施例に関するフローチャートおよび関連するバンド幅チャートを示している。特に、図５は、図２ａと図３ａの混成物を含んでおり、最大バンド幅のヒント（図２ａ）とバンド幅の累積又は集合（図３ａ）に基づいて、リンク幅要求を組み合わせている。この混成フローは、電力節減（例えば、ファンと電源のユニットの使用が削減されたことによるもの）とレイテンシーインパクトとの間の有益なトレードオフを提供する。
【００３４】
簡潔のために、図５のそれぞれのブロックに再度は言及しない。ブロック５０５、５１０、５１５、５２０、５２５は、図２ａにおいて同様に数字付けされた対応パーツ（２０５、２１０、２１５、２２０、２２５）を有している。しかしながら、ブロック５３０は、図２ａから派生しており、時間期間が経過するのを待つ一方で、バンド幅の累積を追加している（図３ａを参照）。これにより、ブロック５４０（ブロック２３５）、５４５（ブロック２４０、３２０）、および、５５０（ブロック３２５）に進む前に、ブロック５３５（図３ａのブロック３１０を参照）に導かれる。プロセスは、そして、ブロック５５５に進む。
【００３５】
たまに、リンク幅は、バンド幅の使用が大きくなっている場合でさえも、小さくなり得る。このことは、例えば、リンク幅の決定が閾値ベースである実施例によるものである。このように、バンド幅は大きくなってよいが、増加されたバンド幅が未だに好適な閾値よりも小さい場合、コントローラー１３０のロジックは、リンク幅を削減するか、または、リンク幅を維持するかを決定することができる。
【００３６】
別の実施例において、アップリンク１２５幅は、温度センサーに基づいて制限されてよい（上記に説明したバンド幅の要因に代わって又は追加してである）。例えば、温度が既定の閾値を超えた場合、リンクは、電力節減のために、より狭い幅に制限されてよく、それによって、温度の軽減を提供している。
【００３７】
一つの実施例において、可変の幅（例えば、×８、×４、×２、×１）は、アップストリーム１０５およびダウンストリーム１２０モジュールの両方によってサポートされなくてよい。しかしながら、リンク初期化の最中に、コントローラー又はプロセッサ１０７は、全ての可能な幅をトレインし、サポートされない幅をログすることができる。コントローラー１３０は、バンド幅要求に基づいてダウンコンフィグレーションし、、通常オペレーションの最中にサポートされない幅をログすることができる（そして、これらのサポートされない幅を避ける）。
【００３８】
このように、上記に説明された実施例は、ＰＣＩｅリンクの幅を動的にコンフィグレーションするだけでなく、好適なリンク幅を最適にコンフィグレーションするやり方を決定することに役に立つ。このことは、非常に低いトラフィック率においてさえも、ＰＣＩｅリンクがほとんどいつもアクティブである状況（さらには、アイドルに近い使用の場合でさえ、ＰＣＩｅデバイスに、温度デザイン電力（ＴＤＰ）に近い電力を消費させること）を避けるのに役に立つ。実施例は、こうした利点を、例えば、バンド幅要求のランタイムモニタリング、および、リンクの日和見性のダウンコンフィグレーションと即時性のアップコンフィグレーションのインテリジェントな意志決定に基づいて達成し、パフォーマンスに影響することなく、電力節減を提供することができる。
【００３９】
一つの実施例は、最大バンド幅要求を計算するシステムに基づいてリンク接続性と接続率を定める。しかし、計算インテンシブ（ｉｎｔｅｎｓｉｖｅ）ではなく、顕著な電力ペナルティーを維持するものではない。例えば、電力ペナルティーは、限定されている。種々の実施例は、変化が検知された場合だけ（継続的な実行に代わって）、最初にアクティブなロジックを有するからである。ウィンドウインターバル（例えば、ブロック２３０を参照）も、相対的に長い（例えば、数１００マイクロ秒）。
【００４０】
さらに、実施例は、メカニズムを提供し、それによって、ダウンストリームポートまたは統合されたポートが、それらの最大バンド幅要求を伝達することができる。この情報は、サイドバンドファブリックを介して、効率的に伝えることができる。このことは、バンド幅情報を集めるためのルートコンプレックスまたは他のアップストリームデバイス１０５のエフォートによるあらゆる試行と対照的である。例えば、統合されたストレージコントローラー１４０はＰＣＩｅリンク１２５を介してルートコンプレックス１１０に接続されている一方で、ストレージコントローラー１０も、数多くのストレージデバイス（図１に図示なし）に接続されてよい。このように、何台のＳＡＳ／ＳＡＴＡドライブのリンクがいかなる時にもアクティブであるかは、ストレージコントローラー１４０に対して知られているが、ルートコンプレックス１１０には知られていない。ここにおいて説明されたメッセージメカニズムが無ければ、ＰＣＩｅコントローラーは、必要とされるストレージドライブの接続性とバンド幅のレベルを削減することができない。
【００４１】
実施例は、ＰＣＩｅリンクがいつでも最大幅にトレインされている非効率的な方法と対照的である。メッセージーサイズまたはキューの深さにかかわらず、いつでもメッセージ／データが伝送されることを要する場合である。
【００４２】
一つの実施例は、ＰＣＩｅトラフィックに対してパフォーマンス−電力ロードライン（ｌｏａｄｌｉｎｅ）を伝達することにより、エネルギー効率のよいＩ／Ｏオペレーションを可能にするポリシーを実施する。例えば、サーバープラットフォームは、大きなＰＣＩｅポートのカウントを有している（例えば、ソケット毎に４０ポート、かつ、プラットフォーム毎に２−４ソケット）。いくつかのＰＣＩｅデバイスがサーバープラットフォームに接続されており、ストレージコントローラー（例えば、ＳＡＴＡ／ＳＡＳコントローラー）、イーサネットコントローラー、等が含まれている。上記に説明された種々の実施例を可能にすることにより、サーバープラットフォームは、プラットフォームの利用が低いときに顕著な電力節減を表すことができる。
【００４３】
このように、一つの実施例は、ホストプロセッサ／コントローラー（１０７）を含むアップストリームモジュールと、プロセッサ／コントローラー（１３０）を含むダウンストリームモジュールと、動的に構成可能な幅を有するリンク（１２５）であり、ダウンストリームモジュールをアップストリームモジュールに接続するリンクと、を有するシステムを含んでいる。コントローラー１３０は、メモリーに接続されてよい。メモリーは、実行されるとコントローラーが（コントローラーが既に初期化された後で）、ダウンストリームに対するＩ／Ｏバンド幅を決定すること、および、決定に基づいてリンクの幅を動的に調整すること、の両方をできるようにする。
【００４４】
コントローラーは、第１の時間が生じる以前に（例えば、ブロック２２５のタイマー）、決定されたバンド幅がリンクの幅よりも大きい場合（例えば、ブロック２１５）、即時にリンクの幅を増加してよい。そして、第２の時間が生じた以降に（例えば、ブロック２４０）、決定されたバンド幅がリンクの幅よりも小さい場合、即時にではなくリンクの幅を減少してよい。第２の時間は、第１の時間よりも長いものである。
【００４５】
一つの実施例は、コントローラー（例えば、コントローラー１３０）を介してホストに接続されている、第１および第２のダウンストリームポート（例えば、コントローラー１４０とカード１６０）を含んでよい。
【００４６】
一つの実施例において、ＰＣＩｅコントローラーは、決定されたバンド幅が第１の閾値より大きい場合、動的にリンクの幅を増加し（例えば、現在の幅ＬＷ）、かつ、決定されたバンド幅が第２の閾値より小さい場合、動的にリンクの幅を小さい幅の設定まで減少させる。第２の閾値は、第１の閾値と同一であってよく（例えば、両方ともＬＷである）、または、別の値であってもよい。直前のシナリオに代わって、または、追加的に、閾値は、Ｕｐｔｈ及び/又はＤｎＴｈ等に関連し得る。
【００４７】
実施例は、コードにおいて実施することができ、非一時的なストレージ媒体上に保管されてよい。媒体上には、インストラクションを実行するようにシステムをプログラムするために使用することができるインストラクションを有している。ストレージ媒体は、これらに限定されるわけではないが、以下のものを含むあらゆるタイプのディスクである。それらは、フロッピー（登録商標）ディスク、光ディスク、半導体ドライブ（ＳＳＤ）、コンパクトディスク読み出し専用メモリー（ＣＤ−ＲＯＭ）、コンパクトディスク再書き込み可能コンパクトディスク（ＣＤ−ＲＷ）、光磁気ディスク、読み出し専用メモリー（ＲＯＭ）といった半導体デバイス、ダイナミックアクセスメモリー（ＤＲＡＭ）といったランダムアクセスメモリー（ＲＡＭ）、スタティックランダムアクセスメモリー（ＳＲＡＭ）、消去可能プログラマブル読み出し専用メモリー（ＥＰＲＯＭ）、フラッシュメモリー、電気的に消去可能プログラマブル読み出し専用メモリー（ＥＥＰＲＯＭ）、磁気又は光カード、または、電気的インストラクションを保管するのに好適なあらゆる他のタイプの媒体、である。本発明の実施例は、インストラクション、ファンクション、プロシージャ、データ構造、アプリケーションプログラム、コンフィグレーション設定、コード、等といったデータに関して、ここにおいて説明されてよい。マシンによってデータがアクセスされる場合、ここにおいてより詳細が説明されるように、タスクを実行し、抽象的なデータタイプを定義し、低レベルのハードウェアコンテクストを確立し、及び/又は、他のオペレーションを実行することによって、マシンは対応することができる。データは、揮発性、及び/又は、不揮発性データストレージの中に保管されてよい。用語「コード（ｃｏｄｅ）」または「プログラム（ｐｒｏｇｒａｍ）」は、アプリケーション、ドライバー、プロセス、ルーチン、メソッド、モジュール、および、サブプログラムを含み、幅広くコンポーネントと構成をカバーしている。そして、処理システムによって実行される場合に、所望のオペレーションを実行するインストラクションのあらゆる収集を参照してよい。加えて、代替的な実施例は、開示された全てより少ないオペレーションを使用するプロセスを含んでよい。追加のオペレーションを使用するプロセス、異なるシーケンスにおいて同一のオペレーションを使用するプロセス、および、個々のオペレーションがここにおいて開示されたプロセスは、組み合わされ、細分され、または、そうでなければ変更される。コンポーネントまたはモジュールは、望むように結合され、または、分離されてよい。そして、デバイスの一つまたはそれ以上の部分に配置されてよい。
【００４８】
ここにおいて使用されているように、プロセッサまたはコントローラーは、従来技術として知られている幅広い種々のコントロールロジックのあらゆるものを表わすように意図されたコントロールロジックを含んでよい。かつ、そのように、マイクロプロセッサ、マイクロコントローラー、フィールドでプログラム可能なゲートアレイ（ＦＰＧＡ）、特定アプリケーション用集積回路（ＡＳＩＣ）、プログラム可能ロジックデバイス（ＰＬＤ）、等として、うまく実施される。いくつかの実施例において、コントローラー１３０及び類似のものは、コンテンツ（例えば、ソフトウェアインストラクション、等）を表すように意図されており、実行されると、ここにおいて説明された機能を実施する。
【００４９】
ここにおいて使用されるように、モジュールは、あらゆるハードウェア、ソフトウェア、または、それらの組み合わせを参照するものである。しばしば、モジュールの境界は、分離したものとして説明され、一般的には変化し、潜在的には重なり合う。例えば、第１および第２のモジュールは、ハードウェア、ソフトウェア、または、それらの組み合わせを共有してよいが、一方で、潜在的に、いくつかの独立したハードウェア、ソフトウェア、または、ファームウェアを保持している。一つの実施例において、用語ロジックの使用は、トランジスターといったハードウェア、または、プログラム可能な論理デバイスといった他のハードウェアを含むものである。しかしながら、別の実施例において、ロジックは、また、ファームウェアまたはマイクロコードといった、ソフトウェアまたはハードウェアと統合されたコードを含んでいる。
【００５０】
本発明開示は、限定された数量の実施例に関して説明されてきたが、当業者であれば、そうした実施例から、多くの変形およびバリエーションを認識するであろう。例えば、他のメモリーアーキテクチャー、例として、ダイナミックＤＡＭ（ＤＲＡＭ）が説明された実施例で使用される。添付の特許請求の範囲は、全てのこうした変形およびバリエーションを、本発明開示に係る真の精神と発明の範囲の中にあるものとして包含するように意図されたものである。
【図１】
0006017584.tif 000002
【図２Ａ】
0006017584.tif 000003
【図２Ｂ】
0006017584.tif 000004
【図３Ａ】
0006017584.tif 000005
【図３Ｂ】
0006017584.tif 000006
【図４】
0006017584.tif 000007
【図５】
0006017584.tif 000008