以下の説明では、種々の実施形態が記載される。説明の目的上、実施形態の十分な理解を提供するために、特定の構成及び詳細が記載される。しかしながら、さらに、実施形態は特定の詳細を伴わずに実施され得ることが当業者には明らかであるだろう。さらに、記載されている実施形態を不明瞭にしないために、既知の特徴は省略または簡素化され得る。
コンピューティングシステムは複数の周辺デバイスを含み得る。周辺デバイスはコンピューティングシステムの機能性を拡張、適合及び/または変更してよい。例えば、周辺デバイスは、コンピューティングシステムにサポートされるストレージ、ネットワーク接続及び/またはオーディオ及びビデオ等を提供してよい。周辺デバイスは、通常、1つ以上のバスを通じてコンピューティングシステムと通信する。バス上のデータ転送はバスプロトコルにより規定され得る。バスプロトコルの例として、とりわけバスプロトコルのペリフェラルコンポーネントインターコネクト(PCI)の一群(例えば、PCI、PCI−eXtended(PCI−X)、PCI Express(PCIe)、アクセラレーテッドグラフィックスポート(AGP)などのPCI派生物等)を含んでよい。
本明細書に記載の技法は周辺デバイスのコンフィグレーション空間の一部または全てをエミュレートする構成要素及び方法を含む。エミュレートされたコンフィグレーション空間は周辺デバイスにより使用され、周辺デバイス自体を様々なケーパビリティを伴う様々なタイプの周辺デバイスとして表し得る。例えば、エミュレートされたコンフィグレーション空間により、周辺デバイスは、ある場合には、周辺デバイス自体がネットワークインターフェースカードとして表され、他の場合には、ビデオカードとして表されること等ができ得る。エミュレートされたコンフィグレーション空間はさらに、動的に変更、拡張、複製または全く異なるコンフィグレーション空間に置換することができる。追加的に、複数のエミュレートされたコンフィグレーション空間は様々な機能に対して保持され得る。エミュレートされたコンフィグレーション空間はさらに、より少ないハードウェアを必要とし得る。例えば、シングルルート入出力仮想化(SR−IOV)を実施するデバイスは、任意の数の物理機能及び/または仮想機能に縮小され得るエミュレートされたコンフィグレーションを含んでよく、これには各機能に対する物理的なハードウェアレジスタは必要ない。さらに、エミュレートされたコンフィグレーション空間によりエミュレートされる機能の数は動的に変更できる。
本明細書に記載の技法はさらに、エミュレートされたコンフィグレーション空間へのアクセスを容易にするエミュレーションモジュールを提供してよい。エミュレーションモジュールはソフトウェア、ハードウェアまたはソフトウェアとハードウェアとの組み合わせ(例えば、周辺デバイスのプロセッサにより実行されるソフトウェア)として実装されてよい。エミュレーションモジュールはエミュレートされたコンフィグレーション空間と相互作用してよく、これはコンフィグレーションレジスタの読み取り及び書き込み表現を含む。
I.システム
図1は、複数の周辺デバイスを含むコンピューティングシステム100の一例を例示する。周辺デバイスは、コンピューティングシステムに連結され、システムに機能性を追加し得るハードウェアデバイス及び/またはハードウェアとソフトウェアとの組み合わせを含むデバイスを含んでよい。周辺デバイスの例は、とりわけ、ストレージデバイス、ビデオカード、オーディオカード、有線及び/または無線ネットワークアダプタ、シリアル及び/またはパラレルポートなどの追加ポートをシステムに提供するアダプタ、追加の周辺デバイスにポートを提供するブリッジ、ハブ及び/またはスイッチを含む。一般的に、周辺デバイスはコンピューティングシステムから接続及び切断され、システムの機能性を変更し得る。いくつかの場合、コンピューティングシステムは、周辺デバイスの追加または取り外しに対して電源を切らなければならない。別の場合、周辺デバイスは、コンピュータシステムの電源が投入されている間に連結または取り外される場合がある(例えば、「ホットスワップ」または「ホットプラグ」と呼ばれることが多い)。
図1の例はペリフェラルコンポーネントインターコネクト(PCI)バス規格の1つ以上の変形形態を実装する周辺機器を含むシステムを例示する。バスは、コンピューティングシステム内またはコンピューティングシステムと他のデバイスとの間でデータを転送する通信チャネルである。規格化されたバスプロトコルは、種々の製造者により仕様が定義及び採用されているデータ転送プロトコルである。準拠デバイスはバスプロトコルを実装するコンピューティングシステムと互換性があり、その逆も同様である。PCIは関連性のある、規格化されたバスプトコルの一群を表す。本明細書で使用される場合、PCIはオリジナルPCI規格、PCI−eXtended(PCI−X)、アクセラレーテッドグラフィックスポート(AGP)及びPCI Express(PCIeであり、PCI−XPとも呼ばれる)を含む。本明細書で使用される場合、用語「PCI」はバスプロトコルのPCI群の任意のプロトコルを表すために使用され得る。図1に示す例では、PCIはコンピューティングシステムにより実装され得るバスプロトコルの一例としてのみ提供される。他のバスプロトコルは、例えば、インダストリ・スタンダード・アーキテクチャ(ISA)、拡張ISA(EISA)、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(VESA)、マイクロチャネル、バスのアドバンスドテクノロジーアタッチメント(ATA)群のいずれか等を含んでよい。例示の例は規格化されたバスプロトコル、プロプライエタリなバスプロトコルの組み合わせ及び/または規格化されたプロプライエタリなバスプロトコルの組み合わせで実装され得る。
コンピューティングシステム100の例は、プロセッサ102、1つ以上のルートコンプレックス104a〜b、メモリサブシステム106、スイッチ108、ブリッジ114及び多数の周辺デバイスを含んでよい。周辺デバイスは「エンドポイント」と呼ばれ得る。プロセッサ102は、Intel(登録商標)、AMD(登録商標)、ARM(登録商標)、Qualcomm(登録商標)等で製造されるような汎用コンピューティングユニットでよく、一般的にソフトウェアコードを実行することができる。プロセッサ102は複数の処理コアを含んでよい。
ルートコンプレックス104aは、プロセッサ100及びメモリサブシステム106をエンドポイント110a〜c,112a〜cに接続するハードウェアデバイスまたはハードウェア及びソフトウェアデバイスであってよい。エンドポイント110a〜c,112a〜cはルートコンプレックス104aに直接接続されてよい。代替的または追加的に、エンドポイント110a〜c,112a〜cはスイッチ108またはハブ等を通じてルートコンプレックス104aに接続されてよい。ブリッジ114はさらに、ルートコンプレックス104aに接続されてよい。ルートコンプレックス104aはプロセッサ102とトランザクション及び応答を相互に転送してもよく、及び/またはプロセッサ102の代わりにトランザクションの生成及び応答を行ってよい。いくつかの場合、ルートコンプレックス104aはさらに、エンドポイント110a〜c,112a〜cから別のエンドポイントに、及び/またはエンドポイント110a〜c,112a〜c、スイッチ108及びブリッジ114の間のトランザクションをルーティングしてよい。ルートコンプレックス104aは、ホットプラグコントローラ、電源管理コントローラ、割り込みコントローラ及び/またはエラー検出及び報告などのサービスをコンピュータシステム100に提供してよい。いくつかの場合、ルートコンプレックス104a及び/または104bはホストシステムの一部(例えば、プロセッサ102)として実装されてよい。いくつかの実施形態では、コンピューティングシステム100は2つ以上のルートコンプレックスを含んでよい。各ルートコンプレックスは様々なセットの周辺デバイスに接続されてよい。いくつかの場合、1つ以上の周辺デバイスは2つ以上のルートコンプレックスに接続されてよい。例えば、図1に例示する通り、エンドポイント110aはルートコンプレックス104a及び104bの両方に接続され得る。
メモリサブシステム106は、コンピューティングシステム100により使用され得るデータの一時的または長期的な記憶を提供する。メモリサブシステム106は、ダイナミックランダムアクセスメモリ(DRAM)(例えば、同期DRAM(SDRAM)、ダブルデータレート(DDR)SDRAM等)及び/またはスタティクランダムアクセスメモリ(SRAM)、フラッシュメモリ等の他のタイプのメモリを含んでよい。
エンドポイント110a〜c,112a〜cはデータトランザクションの生成及び/または応答を行うことができる周辺デバイスである。例えば、エンドポイント110a〜c,112a〜cは「リクエスタ」(トランザクション生成側)及び/または「コンプリータ」(トランザクション応答側)となり得る。PCI実装では、エンドポイント110a〜cはPCIeを実装する周辺デバイスを含んでよく、エンドポイント112a〜cはレガシPCIを実装する周辺デバイスを含んでよい。エンドポイント110a〜c,112a〜cは共有バスを通じてコンピューティングシステム100に接続されてよい。例えば、レガシエンドポイント112b〜cは共有PCIバス116に接続される。代替的または追加的に、エンドポイント110a〜c,112a〜cはスイッチングファブリックトポロジで接続されてよい。スイッチングファブリックトポロジは、ファブリックに接続されるデバイス間のポイント・ツー・ポイント接続を含んでよく、デバイス間でメッセージを通過させるためのルーティングシステムを含んでよい。スイッチングファブリックにおいて、トランザクションは複数の物理リンクにわたり広がってよい。ファブリック内のデバイス間の接続118a〜fはさらに、バスと呼ばれ得る。
スイッチ108は、ルートコンプレックス104a及びエンドポイント110a〜c、112aを含む種々の周辺デバイス間のブリッジとして機能する。スイッチ108はエンドポイント110a〜c、112a間及びエンドポイント110a〜c、112aとルートコンプレックス104との間のトランザクションをルーティングしてよい。スイッチ108はさらに、受信及び送信データトランザクションに優先順位をつけるアービトレーションを提供し得る。ルートコンプレックス104及びエンドポイント110a〜c、112aは、スイッチ108を別の周辺デバイスリクエスタ及び/またはコンプリータとして処理し得る。
ブリッジ114は他のバスまたはスイッチングファブリックに接続を提供し得る。他のバスまたはスイッチングファブリックはPCIの別形または別のプロトコルを実装し得る。例えば、図1の例では、ブリッジ114はレガシPCI規格を実装するバスへの接続を提供する。ブリッジ114はレガシPCIなどの1つのバス規格から、PCIeなどの別のプロトコルに変換する機構を含んでよい。
図1の例では、プロセッサ102、ルートコンプレックス104a〜b、メモリサブシステム106、スイッチ108、ブリッジ114及びエンドポイント110a〜c,112a〜cなどの構成要素は個別の構成要素として例示される。いくつかの実装では、これらの構成要素の1つ以上が単一の構成要素に組み合わされてよい。別の実装では、これらの構成要素の1つ以上が単一のチップに実装されてよい。別の実装では、これらの構成要素の1つ以上が、ハードウェア、ソフトウェア及び/またはハードウェアとソフトウェアとの組み合わせに部分的にまたは完全に実装されてよい。
上記の通り、エンドポイントまたは周辺デバイスはコンピューティングシステム100の機能性を追加及び/または変更してよい。例えば、1つのエンドポイント110aはWi−Fi(登録商標)アダプタ120を実装してよい。Wi−Fi(登録商標)アダプタ120を使用すると、コンピューティングシステム100は無線アクセスポイント122と無線で通信することができ得、これによりネットワークにアクセスする。別の例として、別のエンドポイント110bはビデオカードを実装してよい。ビデオカードはモニタ124または他の表示デバイスを接続するポートを含んでよい。さらなる例として、コンピューティングシステム100はサウンドカードを実装するレガシエンドポイント112aを含んでよい。サウンドカードはスピーカ126または他のオーディオ出力デバイス用のプラグを受け入れるポートまたはジャックを含んでよい。もう1つの例として、エンドポイント110cはEthernet(登録商標)アダプタを実装し、DSLまたはケーブルモデムなどのゲートウェイデバイス128への接続を提供してよい。ゲートウェイデバイス128を使用することにより、コンピューティングシステム100はネットワーク130にアクセスしてよい。
これらの例に例示の通り、ネットワークアダプタ、ビデオカード、オーディオカード及びその他を含む、様々なタイプの周辺デバイスがシステムに接続できる。いくつかの場合、周辺デバイスは2つ以上の機能デバイスを実装してよい。例えば、いくつかの場合、単一のエンドポイントはモニタ124に出力するためのビデオカードと、スピーカ126に出力するためのサウンドカードとの両方を含んでよい。いくつかの実装では、例えば、ドーターカードまたは外部デバイスを、周辺デバイス上の拡張スロットまたは外部ポートに接続することにより、周辺デバイスにさらに機能を追加することができる。いくつかの実施形態では、PCIを実装する周辺デバイスは最大で8つの個別の機能を含んでよい。これらの実装では、PCIデバイスは、クラスコード及び任意のサブクラスコードを使用して実装された機能(複数可)を示してよい。クラスコード及び任意のサブクラスコードはコンフィグレーションレジスタに配置されてよい。コンフィグレーションレジスタは以下にさらに詳細に説明する。
表1にPCIデバイスクラスコード及びその説明を列挙する。クラスコードは8ビットの16進法の値として与えられる。
初めに、図1に例示するコンピューティングシステム100などのコンピューティングシステムに電源を投入すると、プロセッサ102はシステムに接続される任意のエンドポイントを認識しない場合がある。プロセッサ102はルートコンプレックス104a〜bを認識し、さらに場合によっては、ルートコンプレックスが1つ以上のバスに接続されていることを認識し得る。プロセッサ102はエンドポイント110a〜c,112a〜cと、これらがシステムをスキャン及び構成する処理を実行することにより提供する機能とを発見し得る。この処理はエニュメレーション処理とも呼ばれ得る。エニュメレーション処理の間、プロセッサ102上で実行するソフトウェアは、ルートコンプレックス104に接続される各バス118a,118e,118fをスキャンし、各バス118a,118e,118fに連結される各エンドポイント110a〜c,112a〜c、スイッチ108及び/またはブリッジ114を識別し得る。プロセッサ102はさらに、ルートコンプレックス104に、各エンドポイント110a〜c,112a〜c、スイッチ108及び/またはブリッジ114のコンフィグレーションレジスタに読み出し及び書き込みを行うトランザクションを開始するように指示し得る。コンフィグレーション読み出しトランザクションは、プロセッサ102に、各エンドポイント110a〜c,112a〜c、スイッチ108及び/またはブリッジ114のデバイスのケーパビリティ及びタイプを通知し得る。コンフィグレーション書き込みトランザクションは、各エンドポイント110a〜c,112a〜c、スイッチ108及び/またはブリッジ114を構成及び制御するために使用できる。例えば、エニュメレーション中に、各エンドポイント110a〜c,112a〜c、スイッチ108及び/またはブリッジ114はバス及びデバイス番号を割り当てられてよい。コンフィグレーションレジスタは、通常、周辺デバイスの物理的なハードウェアレジスタとして実装され、周辺デバイスにおけるコンフィグレーションレジスタの定義は通常固定され、動的に変更できない。
上記の通り、エンドポイントは複数の機能を実装してよい。エニュメレーション処理はさらに、各エンドポイントにより実施される機能を発見してよい。いくつかの場合、各機能は機能自体のコンフィグレーションレジスタのセットを含んでよい。読み出し機能に特化したコンフィグレーションレジスタは、プロセッサ102に、機能の性質(例えば、機能がビデオドライバを実装する)を通知してよい。機能特化したコンフィグレーションレジスタはさらに、機能に特化した構成及び設定を記憶してよい。書き込み機能に特化したレジスタは、コンピューティングシステムまたはプロセッサ102により要求される通り、機能を構成してよい。
スイッチ108を発見すると、プロセッサ102はさらに、スイッチ108に接続されるエンドポイント110a〜cをスキャン及び構成してよい。ブリッジ114を発見すると、プロセッサ102はさらに、ブリッジ114の別方向上のバス116に連結されるエンドポイント112b〜cをスキャン及び構成してよい。
いくつかの場合、エミュレートされたコンフィグレーション空間を実装する周辺デバイスは、それ自体を様々な周辺デバイスとしてコンピューティングシステムに表してよい。例えば、エミュレートされたコンフィグレーション空間を実装する周辺デバイスは、ある場合には、周辺デバイス自体をネットワークインターフェースカードに特化したコンフィグレーションレジスタを伴うネットワークインターフェースカードとして表わしてよく、あるいは、別の場合には、周辺デバイス自体を係る周辺デバイスに特化したコンフィグレーションレジスタを伴うビデオカードもしくはサウンドカードなどの様々な周辺デバイスとして表わしてよい。エミュレートされたコンフィグレーション空間はさらに、変更、複製または全く異なるコンフィグレーション空間に置換することができる。追加的に、複数のエミュレートされたコンフィグレーション空間は特定の機能に対して保持されてよい。例えば、コンピューティングシステムは複数の仮想マシンを実行していてよく、コンピューティングシステムにおいて各仮想マシンは様々なオペレーティングシステムを実行している。各仮想マシンは、周辺デバイスにより提供される同じ機能に対して異なるコンフィグレーションを要求してよい。係る場合、周辺デバイスのエミュレートされたコンフィグレーション空間はエミュレートされたコンフィグレーションを各仮想マシンに対し提供してよい。エミュレートされたコンフィグレーション空間はさらに、より少ないハードウェアを必要とし得る。例えば、SR−IOVを含むデバイスは、各機能に対する物理的なハードウェアレジスタを要求する代わりに、任意の数の物理機能及び/または仮想機能に対してエミュレートされたコンフィグレーションを含んでよい。
II.エミュレートされたコンフィグレーション空間
図2は、いくつかの実施形態に係る、エミュレートコンフィグレーション空間を実装する周辺デバイス200の一例を例示する。例えば、周辺デバイス200は図1に例示の1つ以上のエンドポイント及び/またはルートコンプレックスを置換するために使用できる。周辺デバイス200はスタンドアロンのデバイスとして示されるが、周辺デバイス200の構成要素は、周辺デバイス200及びホストシステムが同じシリコンダイまたはパッケージに実装できるよう、ホストシステム(例えば、ホストプロセッサ)に統合できることに留意すべきである。例えば、周辺デバイス200は、ホストプロセッサと同じチップ上に実装される統合グラフィックスデバイスであり得る。例示される周辺デバイスの例は、ISA、EISA、VESA、マルチチャネル等、プロトコルのPCI群などの任意のバスプロトコルを実装してよい。バスプロトコルは指定アドレスにより、周辺デバイスが包含される予定のコンフィグレーションレジスタに定義を与え得る。図2の周辺デバイス200は実装されるバスプロトコルに対して定義されるコンフィグレーションアドレス空間の少なくとも一部をエミュレートしてよい。いくつかの場合、周辺デバイス200はさらに、周辺デバイスの基本機能性(例えば、バス速度の設定用など)及び/または特定のバスプロトコルを実装する全ての周辺デバイスに共通する基本機能性を実装するコンフィグレーションレジスタなどのエミュレートされないコンフィグレーションレジスタを含んでよい。これらのエミュレートされないコンフィグレーションレジスタは「ネイティブ」コンフィグレーション空間と呼ばれ得る。
いくつかの実装では、エミュレーションはプログラムまたはデバイスが別のプログラムまたはデバイスを模倣する能力を指す。例えば、図2の周辺デバイス200は様々な周辺デバイスの機能(複数可)をエミュレートする、エミュレートされたコンフィグレーション空間を含んでよい。例えば、周辺デバイス200は、ある状況においてビデオカードをエミュレートし、別の状況において大容量ストレージデバイスをエミュレートしてよい。別の例として、ある機能を実装し、ある企業により製造される周辺デバイス200は、様々な企業により製造され同じ機能を実装する周辺デバイスをエミュレートできてよい。いくつかの実施形態では、周辺デバイス200は2つ以上の周辺デバイスをエミュレートするために使用することができ、その結果、いくつかのシナリオでは、周辺デバイス200は周辺サブシステム全体をエミュレートできる。
周辺デバイス200はバスインターフェースコア210、コンフィグレーション管理モジュール220、ローカルハードウェア230及びメモリ240を含んでよい。周辺デバイス200はバス202上でコンピューティングシステムと通信状態にあってよい。バス202は特定のバスプロトコルを実装してよい。
バスインターフェースコア210は、バス202と通信するために周辺デバイス200が必要とする回路及び論理を含んでよい。例えば、バスインターフェースコア210は、バス202と通信するためのバスインターフェース214を含んでよい。バスインターフェース214は、バス202に対するリンクの任意の電気特性を管理する回路を含む、バス202への物理接続を含んでよい。バスインターフェース214はさらに、他の動作の中でとりわけ、バス202への同期、受信トランザクションの復号、送信トランザクションの暗号化及び/または送受信データのエラーの検出及び管理(場合による)に対する論理を含んでよい。
バスインターフェースコア210はさらに、ネイティブコンフィグレーション空間212を含んでよい。エミュレートされたコンフィグレーション空間を含まない周辺デバイスでは、通常、バスインターフェースコア210は、例えば、バスプロトコルに定義される、周辺デバイスの全てのコンフィグレーションレジスタを含む。さらに、係る実装では、バスインターフェースコア210は、通常、全ての読み出し及び書き込みトランザクションをコンフィグレーションレジスタに供給し(コンフィグレーションアクセス要求またはコンフィグレーションアクセスとも呼ばれ得る)、応答(必要であれば)をバス202に提供する。対照的に、周辺デバイス200の例では、ネイティブコンフィグレーション空間212は、周辺デバイス200のコンフィグレーションレジスタのサブセットである、ネイティブコンフィグレーションレジスタを含んでよい。例えば、ネイティブコンフィグレーションレジスタは所与のバスプロトコルに対する周辺デバイス全てに共通となり得る基本機能(例えば、バス速度の設定用など)に関連してよく、及び/または別様にはエミュレートが不要または不都合なコンフィグレーションレジスタであってよい。いくつかの実施形態では、ネイティブコンフィグレーション空間212はさらにエミュレートされ得る。
いくつかの実装では、バスインターフェースコア210はネイティブコンフィグレーション空間212に向けられる読み出し及び書き込みトランザクションを検出してよい。係る実装では、バスインターフェースコア210は、ネイティブコンフィグレーションレジスタ212に導かれるコンフィグレーショントランザクションを供給してよい。さらに、これらの実装では、ネイティブコンフィグレーション空間212内に存在しないコンフィグレーション空間に向けられるコンフィグレーショントランザクションはコンフィグレーション管理モジュール220に導かれてよい。別の実装では、バスインターフェースコア210はコンフィグレーション読み出し及び書き込みトランザクションの全てを、どこに向けられるかに関わらず、コンフィグレーション管理モジュール220に導き、コンフィグレーション管理モジュール220はトランザクションがネイティブコンフィグレーション空間212に対するものかどうかを判断してよい。
コンフィグレーション管理モジュール220は、コンフィグレーションレジスタに導かれる読み出し及び書き込みトランザクションの管理を提供してよい。いくつかの実装では、コンフィグレーション管理モジュール220はトランザクションロギングを提供してよい。トランザクションロギングは受信コンフィグレーショントランザクションを記録または追跡するハードウェア及び/またはソフトウェアにより実施されてよい。コンフィグレーショントランザクションを受信すると、バスインターフェースコア210はコンフィグレーション管理モジュール220によりトランザクションを記録してよい。バスインターフェースコア210は他の動作を続けてよく、記録されたコンフィグレーショントランザクションが完了するのを待つ必要はない。コンフィグレーショントランザクションは、例えば、ローカルハードウェア230が自由に行うときはいつでも、トランザクションログから読み出され、ローカルハードウェア230により供給することができる。ローカルハードウェア230はトランザクションが読み出されると、ログからトランザクションを取り除いてもよく、あるいはトランザクションが実行され応答された後でトランザクションを取り除いてもよく、あるいは別様には、トランザクションが供給されたこと、または供給途中であることをログに示してよい。
ローカルハードウェア230は、コンフィグレーショントランザクションを処理するように適合された1つ以上のローカルプロセッサ、1つ以上のローカルプロセッサコア、ローカルプロセッサクラスタ、プログラム可能ゲートアレイまたは制御論理回路として実装することができる。複数のプロセッサまたはプロセッサコアを含む実装では、各プロセッサまたはプロセッサコアは独立してまたは協調してソフトウェアコードを実行してよい。係る実装では、各プロセッサまたはプロセッサコアは、コンフィグレーション管理モジュール210から複数のトランザクションを同時に供給してよい。1つのプロセッサを含む実装では、プロセッサはマルチスレッド型でよく、さらに複数のトランザクションを同時に供給することができてよい。ローカルハードウェア230はオペレーティングシステム232を実行してよい。オペレーティングシステム232は、Linux(登録商標)、Windows(登録商標)、iOS(登録商標)等などの市販のオペレーティングシステムでよく、あるいはプロプライエタリなオペレーティングシステムでよい。
ローカルハードウェア230はエミュレーションモジュール236を実装または実行してよい。いくつかの実施形態では、コンフィグレーショントランザクションは高速な応答時間を要求し得るため、エミュレーションモジュールはコンフィグレーショントランザクションの処理が割り込まれないよう、セキュアな環境で実行され得るか、十分な権限を有する状態で実行され得る。エミュレーションモジュール236は、コンフィグレーショントランザクションを含むトランザクションをコンフィグレーション管理モジュール220から受信してよく、これらのトランザクションを供給してよい。トランザクションの供給は、必要であれば、トランザクションのタイプ(例えば、読み出し及び/または書き込み)の識別、トランザクションのソースの識別、トランザクションが導かれる宛先の識別、トランザクションの実行及び/またはトランザクションへの応答の生成を含んでよい。例えば、コンフィグレーション読み出しトランザクションは、コンフィグレーションレジスタの読み出しと、レジスタから読み出された情報の応答とを含んでよい。別の例として、コンフィグレーション書き込みレジスタはコンフィグレーションレジスタのコンテンツの更新を含んでよい。いくつかの場合、コンフィグレーション書き込みは、書き込みトランザクションが完了したことを確認した状態で、応答されてよい。
いくつかの実装では、エミュレーションモジュール236は、コンフィグレーショントランザクションがネイティブコンフィグレーション空間212に導かれるかまたはエミュレートされたコンフィグレーション空間242に導かれるかを判断してよい。コンフィグレーショントランザクションがネイティブコンフィグレーション空間212に導かれる場合、エミュレーションモジュール236はバスインターフェースコア210と通信し、ネイティブコンフィグレーションレジスタの読み出しまたは書き込みを行ってよい。コンフィグレーション読み出しがエミュレートされたコンフィグレーション空間242に導かれる場合、エミュレーションモジュール236はコンフィグレーションレジスタのコンテンツを表す値を、エミュレートされたコンフィグレーション空間242から読み出してよい。コンフィグレーション書き込みが、エミュレートされたコンフィグレーション空間242に導かれる場合、エミュレーションモジュール236はコンフィグレーションレジスタのコンテンツを表すエミュレートされたコンフィグレーション空間242のデータを書き込みまたは更新してよい。いくつかの実装では、コンフィグレーショントランザクションは1つ以上の機能に関連するコンフィグレーションレジスタに導かれてよく、この場合、エミュレーションモジュール236は機能を識別し、その機能に特化したエミュレートされたコンフィグレーションレジスタにアクセスしてよい。別の実装では、コンフィグレーショントランザクションは複数のソースのうちの1つ、例えば、様々なオペレーティングシステムを実行中であり得るいくつかの仮想マシンの1つなどから来てよい。係る実装では、エミュレーションモジュール236はソースを識別し、そのソースに対して指定され得るまたは適切となり得るエミュレートされたコンフィグレーションレジスタにアクセスしてよい。
メモリ240はローカルハードウェア230により動作され得るデータの記憶を提供する。メモリモジュール240は、DRAM(例えば、SDRAM、DDR−SDRAM)、SRAM、フラッシュもしくはいくつかの他のメモリタイプ、またはそれらの任意の組み合わせを含んでよい。いくつかの実施形態では、メモリ240は外部メモリモジュールとして、または周辺デバイス200の内部メモリとして、またはその組み合わせとして実装され得る。メモリモジュール240はエミュレートされたコンフィグレーション空間242を記憶してよい。エミュレートされたコンフィグレーション空間242は任意の数の周辺デバイスに対して定義されたコンフィグレーションレジスタアドレス空間の全てまたはいくつかの表現を含んでよい。いくつかの実装では、エミュレートされたコンフィグレーション空間242は周辺デバイスの機能の動作に影響を及ぼし得るコンフィグレーション空間を含む。いくつかの実装では、エミュレートされたコンフィグレーション空間242は、バスプロトコルを実装する全ての周辺デバイスに対して基礎的及び/または共通となり得るか、あるいはエミュレートが不要または不都合となり得るネイティブコンフィグレーション空間を除く。エミュレートされたコンフィグレーションレジスタは、読み出し専用で読み出しクリア(または読み出しクリアビットを有する)のフィールドを含んでよく、読み取り可能及び書き込み可能の両方であってもよく、0書き込みクリア(もしくは0書き込みクリアビットを有する)であってよく、及び/または1書き込み設定(もしくは書き込み設定ビットを有する)であってよい。
エミュレートされたコンフィグレーション空間242は、テキストファイル、ソースコード、オブジェクトコードとして、スクリプトとして、及び/またはエミュレーションモジュール236により読み出し可能ないくつかの他の形式でメモリ240に記憶されてよい。いくつかの実施形態では、エミュレートされたコンフィグレーション242は暗号化されてよい。いくつかの実装では、エミュレートされたコンフィグレーション242は変更または置換され得る。例えば、追加のエミュレートされたコンフィグレーションレジスタまたはエミュレートされたコンフィグレーションレジスタの更新バージョンが、例えば、インターネットのウェブサイトを通じて提供されてよい。これらの実装では、追加または更新された、エミュレートされたコンフィグレーションレジスタは、インターネットからダウンロードされ、メモリ240にアップロードされ得る。いくつかの実装では、メモリ240は、複数のエミュレートされたコンフィグレーション空間242または同じエミュレートされたコンフィグレーション空間242の複数バージョンを記憶してよい。
図3は、いくつかの実施形態に係る、周辺デバイス300のPCIe実装の一例を例示する。図3のPCIe周辺デバイス300は、PCIeコア310、コンフィグレーション管理モジュール320、ローカルハードウェア330及びメモリ340を含んでよい。PCIe周辺デバイス300は、バス302を通じてコンピューティングシステムと通信状態にあってよい。バス302はPCIeプロトコルを実装してよい。
PCIeコア310はPCIeを使用してバス上の通信を支援するのに必要な少なくともいくつかの機能性を含んでよい。PCIeコア310はバスインターフェース314を含んでよい。バスインターフェース314は受信及び送信トランザクションを管理するネットワークプロトコル層314a〜dを実装してよい。アウトバウンドトランザクションでは、トランザクション層314aは、PCIeコア310自体、コンフィグレーション管理モジュール320またはローカルハードウェア330などのトランザクションイニシエータにより提供される情報でパケットを形成してよい。データリンク層314bは追加情報をパケットに追加してもよく、追加情報は、例えば、トランザクションの受信者が情報の整合性を検証するために使用し得るパケットヘッダ情報及び/またはエラー確認情報である。メディアアクセス層314cはソースの物理アドレス及びトランザクションの宛先の物理アドレスなどのアドレス指定情報を提供してよい。物理層314dはパケットを電気信号に暗号化し、パケットをバス302上に送信してよい。受信トランザクションでは、物理層314dはバス302からパケットを受け取り、パケットを復号する。メディアアクセス層314cはトランザクションのソース及び宛先アドレスを処理してよい。データリンク層314bはパケットヘッダ情報をパースし、エラーを確認してよい。トランザクション層314aはパケットに包含される情報を、PCIeコア310及び/またはローカルプロセッサ330により処理可能な形式に変換してよい。
PCIeコア310はさらに、ネイティブコンフィグレーション空間312を含んでよい。ネイティブコンフィグレーション空間312は基本機能性に関連し、及び/またはPCIeベースの周辺デバイスに共通し得る、及び/またはエミュレートが不要または不都合であり得るコンフィグレーションレジスタを含んでよい。係るレジスタの例は、タイプ0/1共通レジスタヘッダ316、アドバンストエラーリポーティングケーパビリティレジスタ312a、拡張メッセージシグナル割り込み(MSI−X)ケーパビリティレジスタ312b、電源管理ケーパビリティレジスタ312cを含む。例えば、エミュレートされたコンフィグレーション空間324内に任意の残りのコンフィグレーションレジスタ空間を見つけてよい。いくつかの実施形態では、ネイティブコンフィグレーション空間312はさらにエミュレートされてよい。したがって、例えば、いくつかの実施形態では、PCIeベースの周辺デバイスは、そのPCIeコンフィグレーション空間レジスタの全てをエミュレートしてよい。
いくつかの実装では、PCIeコア310はネイティブコンフィグレーション空間312に対する読み出し及び書き込みトランザクションを検出してよい。係る実装では、PCIeコア310は、ネイティブコンフィグレーション空間312に導かれるコンフィグレーショントランザクションを供給してよい。さらに、これらの実装では、ネイティブコンフィグレーション空間312内に存在しないコンフィグレーション空間に向けられたコンフィグレーショントランザクションはコンフィグレーション管理モジュール320に導かれてよい。他の実装では、PCIeコア310は、全てのコンフィグレーション読み出し及び書き込みトランザクションを、それらがネイティブコンフィグレーション空間312に向けられるかどうかに関わらず、コンフィグレーション管理モジュール320に導く。
コンフィグレーション管理モジュール320は、コンフィグレーションレジスタに導かれる読み出し及び書き込みトランザクションの管理を提供してよい。いくつかの実装では、コンフィグレーション管理モジュール310はトランザクションロギングを提供してよい。コンフィグレーショントランザクションを受信すると、PCIeコア310はコンフィグレーション管理モジュール320によりトランザクションを記録してよい。PCIeコア310は、次いで、他の動作を続けてよい。コンフィグレーショントランザクションはログから読み出され、ローカルハードウェア330により供給されてよい。ローカルプロセッサ330はトランザクションが読み出されると、ログからトランザクションを取り除いてよく、あるいはトランザクションが実行及び応答された後でトランザクションを取り除いてよく、あるいは別様には、トランザクションが供給されたこと、または供給途中であることをログに示してよい。
ローカルハードウェア330は、コンフィグレーショントランザクションを処理するように適合された1つ以上のプロセッサ、1つ以上のプロセッサコア、プロセッサクラスタ、プログラム可能ゲートアレイまたは制御論理回路を含んでよい。ローカルハードウェア330はオペレーティングシステム332を実行してよい。オペレーティングシステム332はユーザモード332a及び特権モード332bを提供してよい。ユーザモード332aは、例えば、PCIe周辺デバイス300にロードされたユーザアプリケーションを実行してよい。特権モード332bはシステム機能を実行してよい。
ローカルハードウェア330はさらに、動作のセキュアモード334(例えば、ARMセキュアモード等)を含んでよい。セキュアモード334で実行するプログラムまたはソフトウェアは、ローカルハードウェア330内の他のプログラムから分離されてよい。例えば、オペレーティングシステムモジュール332及び/またはオペレーティングシステムモジュール332上で実行するアプリケーションは、セキュアモジュール334内で実行するモジュールにアクセスできない場合がある。逆に、いくつかの実施形態では、セキュアモード334内で実行するプログラムは、セキュアモジュール234の外部で実行するモジュールには影響を及ぼし得ない場合がある。その結果、セキュアモード334は、ローカルハードウェア330内で実行中であり得る他のプログラムからの割り込みまたは干渉がない状態でプログラムが実行できる環境を提供し得る。セキュアモード334で実行するプログラムは高度に最適化されてもよく、及び/または他のプログラムより高い優先度を有してよい。いくつかの実施形態では、セキュアモード334はローカルハードウェア330内で論理的及び/または物理的に分離されたハードウェア及び/またはソフトウェアのセクションとして実装されてよい。
いくつかの実施形態では、エミュレーションモジュール336はローカルハードウェア330のエミュレーション制御論理回路として、及び/またはセキュアモード334で実行中のエミュレーションソフトウェアとして実装され得る。エミュレーションソフトウェアはConfigSpaceエミュレーションソフトウェア(CSES)と呼ばれ得る。エミュレーションモジュール336は、コンフィグレーショントランザクションを含むトランザクションをコンフィグレーション管理モジュール320から受信してよく、これらのトランザクションを供給してよい。例えば、コンフィグレーション読み出しトランザクションの供給は、コンフィグレーションレジスタをエミュレートされたコンフィグレーション空間から読み出すことと、レジスタから読み出された情報に応答することとを含んでよい。別の例として、コンフィグレーション書き込みレジスタの供給は、エミュレートされたコンフィグレーション空間にあるコンフィグレーションレジスタのコンテンツを更新することを含んでよい。いくつかの場合、コンフィグレーション書き込みは、書き込みトランザクションが完了したことを確認した状態で、応答されてよい。
いくつかの実装では、エミュレーションモジュール336は周辺デバイスに導かれるコンフィグレーショントランザクションの一部または全てを受信してよい。いくつかの実装では、エミュレーションモジュール336は、コンフィグレーショントランザクションがネイティブコンフィグレーション空間312に導かれるか、またはエミュレートされたコンフィグレーション空間342に導かれるかどうかを判断してよい。コンフィグレーショントランザクションがネイティブコンフィグレーション空間312に導かれる場合、エミュレーションモジュール336はPCIeコア310と通信し、ネイティブコンフィグレーションレジスタの読み出しまたは書き込みを行ってよい。いくつかの実施形態では、コンフィグレーション管理モジュールは、エミュレーションモジュール336の関与なく、ネイティブコンフィグレーションレジスタのアクセスを処理してよい。コンフィグレーション読み出しが、エミュレーションコンフィグレーション342に導かれる場合、エミュレーションモジュール336はコンフィグレーションレジスタのコンテンツを表す値を、エミュレートされたコンフィグレーション空間342から読み出してよい。コンフィグレーション書き込みが、エミュレートされたコンフィグレーション空間342に導かれる場合、エミュレーションモジュール336はコンフィグレーションレジスタを表すエミュレートされたコンフィグレーション空間342のデータを書き込みまたは更新してよい。いくつかの実装では、エミュレーションモジュール336は、それ自体が、1つ以上のコンフィグレーションレジスタを内部にエミュレートしてよい。係る実装では、エミュレーションモジュール336はコンフィグレーションレジスタの内部表現を読み出すか、または書き込んでよく、エミュレートされたコンフィグレーション空間342にアクセスする必要がなくなり得る。
いくつかの実装では、エミュレーションモジュール336はPCI割り込み機構を利用し、エミュレートされたコンフィグレーションレジスタのアクセスを処理してよい。例えば、エミュレーションモジュール336はPCIeコア0割り込みをセキュアな割り込みと定義し、この割り込みに対するハンドラを登録してよい。割り込みハンドラは、割り込みが受信された際にトリガされる独立したソフトウェア機能となり得る。PCIeコア0割り込みがトリガされると、エミュレーションモジュール336が警告を受けてよく、コンフィグレーション管理モジュール320からトランザクションの供給を開始してよい。PCIeコア0割り込みをセキュアとして定義することにより、割り込みが隠されるか、オペレーティングシステムモジュール332などの非セキュアなモジュールからマスクされてよい。いくつかの実施形態では、セキュアな割り込みはさらに、非セキュアな割り込みハンドラに割り込んでよい。
メモリ340はローカルハードウェア330により動作され得るデータの記憶を提供する。メモリ340は、DRAM(例えば、SDRAM、DDR−SDRAM等)、SRAM、フラッシュメモリもしくはいくつかの他のメモリタイプまたはそれらの組み合わせを含んでよい。いくつかの実施形態では、メモリ340は外部メモリモジュールとして、または周辺デバイス200の内部メモリとして、またはその組み合わせとして実装され得る。メモリ340はエミュレートされたコンフィグレーション空間342を記憶してよい。エミュレートされたコンフィグレーション空間342は、4KBのPCIeコンフィグレーションアドレスの全てまたは一部に対する表現を含んでよい。いくつかの実装では、エミュレートされたコンフィグレーション空間342はPCIe拡張ケーパビリティレジスタを含んでよい。例えば、エミュレートされたコンフィグレーション空間342は、アドバンストエラーリポーティングケーパビリティレジスタ、仮想チャネルケーパビリティレジスタ、デバイスシリアル番号レジスタ及び/または電源管理ケーパビリティレジスタを含み得る。代替的または追加的に、エミュレートされたコンフィグレーション空間342はSR−IOV拡張ケーパビリティレジスタを含んでよい。係る場合、エミュレートされたコンフィグレーション空間342は、SR−IOVの物理機能及び仮想機能を制御可能にするケーパビリティレジスタを含んでよい。SR−IOVを以下にさらに詳細に説明する。
いくつかの実装では、エミュレートされたコンフィグレーション空間342は動的に置換及び/または変更されてよい。例えば、PCIe拡張ケーパビリティは、エミュレートされたコンフィグレーション空間342で追加または取り除かれてよい。他の実装では、PCIe周辺デバイス300は、様々な仮想マシン、様々なオペレーティングシステム及び/または様々なデバイスタイプに適した複数のエミュレートされたコンフィグレーション空間を含んでよい。
表2はエミュレートされたコンフィグレーション空間342の一例を例示する。オフセットはエミュレートされたコンフィグレーション空間の開始からのオフセットを記述する。オフセットは12ビットの16進法の値として与えられる。エミュレートされたコンフィグレーションは各エミュレートされたコンフィグレーションレジスタに関する他の情報を含んでよい。例えば、いくつかのエミュレートされたコンフィグレーションレジスタは、ルートコンプレックスにより、読み出し専用、書き込み専用、または読み出し可能/書き込み可能専用としてマークされてよい。別の例として、いくつかのエミュレートされたコンフィグレーションレジスタにデフォルトまたはリセット値を提供してよい。いくつかの実施形態では、エミュレートされたコンフィグレーション空間342は、表2に示すコンフィグレーションレジスタの複数セットに対する表現を含んでよい。例えば、いくつかの実施形態では、PCIe周辺デバイス300は、1つ以上のPCIeエンドポイントに対する接続を提供し得るPCIスイッチ、ブリッジまたはハブを実装するために使用され得る。係るシナリオでは、エミュレートされたコンフィグレーション空間342は、スイッチ、ブリッジまたはハブのコンフィグレーションレジスタ、ならびにスイッチ、ブリッジまたはハブに関連する各エンドポイントデバイスに対するコンフィグレーションレジスタに対する表現を含んでよい。
上述の通り、コンフィグレーショントランザクションロギングは受信コンフィグレーショントランザクションを追跡するために実装されてよい。コンフィグレーショントランザクションロギングは受信コンフィグレーション読み出し及び書き込みトランザクションの一部または全てのログを保持してよい。いくつかの実装では、コンフィグレーショントランザクションロギングは所与のコンフィグレーショントランザクションを記録するために、いくつかのレジスタを使用してよい。これらのレジスタは、アドレスレジスタ、データレジスタ及び完了レジスタを含んでよい。
アドレスレジスタは、コンフィグレーション読み出しまたは書き込みトランザクションがコンフィグレーショントランザクションロギングに送信される際に設定されてよい。アドレスレジスタは、インバウンドコンフィグレーショントランザクションのターゲットであるコンフィグレーションレジスタを識別するのに必要な情報を包含してよい。いくつかの場合、アドレスレジスタは、エミュレーションモジュール336により読み出される際にクリアされてよい。一例として、アドレスレジスタは、アドレスレジスタが有効かどうかを示す有効インジケータ、コンフィグレーションタイプ(例えば、タイプ0またはタイプ1)、ターゲットレジスタオフセット、トランザクションが読み出しアクセスか書き込みアクセスかを示す読み出し/書き込みインジケータ、物理機能または仮想機能のどちらがコンフィグレーションアクセスのターゲットであるかを示すデバイス機能フィールド及びターゲットバス番号などの情報を含んでよい。いくつかの実施形態では、有効なインジケータを設定することにより、エミュレーションモジュールに対する割り込みまたは低遅延通知をトリガし、エミュレーションモジュールにコンフィグレーションアクセス要求を供給するように要求してよい。
データレジスタはコンフィグレーショントランザクションに関連するデータを記憶してよい。コンフィグレーション書き込みトランザクションでは、データレジスタは書き込まれるデータを記憶してよい。コンフィグレーション読み出しトランザクションでは、データレジスタはエミュレーションモジュール336によりターゲットコンフィグレーションレジスタから読み出されるデータを記憶してよい。
完了レジスタはコンフィグレーション読み出しまたは書き込みトランザクションのステータスを示す。完了レジスタは、エミュレーションモジュール336がコンフィグレーショントランザクションを完了すると、エミュレーションモジュール336により書き込まれてよい。完了レジスタに書き込まれる値は、コンフィグレーショントランザクションのイニシエータ(例えば、ルートコンプレックス)に送信される完了応答を形式化するために使用され得る。例えば、完了レジスタの値は完了表示を生成するために使用されてよい。完了表示は、バス番号、デバイス番号及び/または周辺デバイスの機能番号ならびにコンフィグレーショントランザクションの受け入れ及び供給を行った機能を識別してよい。いくつかの場合、エミュレーションモジュール336が完了レジスタに書き込む際、保留コンフィグレーショントランザクションは完了したとみなされ、解放されてよい。いくつかの場合、完了レジスタは各インバウンドコンフィグレーショントランザクションに対して1度のみ書き込まれてよい。
一例として、完了レジスタは、完了ステータス、ターゲットバス番号、ターゲットデバイス番号及びターゲット機能番号などの情報を含んでよい。完了ステータスは、コンフィグレーショントランザクションの完了が成功したか、コンフィグレーショントランザクションが無効だったか(例えば、ターゲット機能番号またはターゲットバス番号が存在し得ない)、コンフィグレーショントランザクションを再試行すべきか(例えば、周辺デバイスがコンフィグレーショントランザクションを受け入れることができず、コンフィグレーショントランザクションがトランザクションのイニシエータにより再度送信されるべきである)またはコンフィグレーショントランザクションが中止されたか(例えば、周辺デバイスはコンフィグレーショントランザクションを受け入れたが、完了できなかった)を示してよい。ターゲットバス番号は、どのバス番号を完了識別子で使用するかを示してよい(例えば、アドレスレジスタに提供されるターゲットバス番号が返されるか、ターゲット機能に関連するバス番号が返される)。例えば、周辺デバイスはバス番号1上に存在してよい。インバウンドコンフィグレーショントランザクションは、コンフィグレーションタイプ1であってよく、バス番号2に導かれてよい。この場合、エミュレーションモジュールはバス番号1または2のいずれかを返し得る。ターゲットデバイス番号は、どのターゲットデバイス番号を完了識別子で使用するかを示してよい(例えば、アドレスレジスタに提供されるターゲットデバイス番号が返されるか、ターゲット機能に関連するデバイス番号が返される)。ターゲット機能番号は、どのターゲット機能番号を完了識別子で使用するかを示してよい(例えば、アドレスレジスタに提供されるターゲット機能番号が返されるか、ポート機能番号が返される)。
エミュレートされたコンフィグレーション技法を伴う周辺デバイスは、柔軟性及び構成可能性に加え、さらに、向上したセキュリティを提供し得、これはエミュレートされない周辺デバイスでは得られない場合がある。
例えば、周辺デバイスはサービス攻撃の拒絶対象となり得る。係る攻撃では、悪意のある仮想マシンは、デバイスハードウェア及び/またはソフトウェアの障害を引き起こそうと試みて、周辺デバイスに大量のコンフィグレーショントランザクションを送り得る。しかしながら、エミュレーションモジュールを備える周辺デバイスは、(例えば、トランザクションログを監視することにより)仮想マシンによるコンフィグレーションアクセス速度を追跡可能になり得る。エミュレーションモジュールは、この結果、仮想マシンによる異常なアクセス増加を検出し得、その仮想マシンからのさらなるアクセスを拒否し得る。
別の例では、仮想マシンは初期化されていない機能または架空の機能にアクセスしてよい。普通の周辺デバイスは係る場合に停止することがある。しかしながら、エミュレーションモジュールは係るアクセスを取り込み、初期化されていない機能または架空の機能に対してコンフィグレーションレジスタをエミュレートするか、アクセスが架空の機能であると認識することにより、適切に応答し得る。エミュレーションモジュールは、その結果、周辺デバイスが停止することを防ぎ得る。
さらに別の例では、仮想マシンは不適切な時間に機能のリセットを開始し得る。しかしながら、エミュレーションモジュールは、係るソフトウェアベースのリセットを取り込み記録し得る。エミュレーションモジュールは、次に、例えば、全ての保留トランザクションを完了することを可能にした後などの適切な時間にリセットを処理してよい。代替的に、エミュレーションモジュールは単に不適切なリセットをブロックしてよい。
最後の例として、仮想マシンは無効またはタイミングの悪いコンフィグレーション変更を試みることがある。例えば、仮想マシンはバスリンクの速度または幅を変更しようと試みることがある。しかしながら、エミュレーションモジュールは、これらの不適切なコンフィグレーション変更を含む全てのコンフィグレーションアクセスを取り込むことがあり、これらの無効またはタイミングの悪いコンフィグレーション変更アクセスを拒否し得る。
III.コンフィグレーショントランザクション処理
図4はコンフィグレーション読み出しトランザクションを供給する周辺デバイス400の一例を例示する。図4の周辺デバイス400は他の周辺デバイス及び/または複数のデバイス機能を柔軟にエミュレートしてよい。周辺デバイス400は、バスインターフェースコア410、コンフィグレーショントランザクションロギングユニット408、ネイティブコンフィグレーション空間412、エミュレーションモジュール430及びメモリ440を含んでよい。
バスインターフェースコア410は、周辺デバイス400をコンピューティングシステムに接続するバスと通信するための機能性を含んでよい。バスインターフェースコア410は、バスへの物理接続を含んでよく、ハードウェア及び/またはソフトウェアを提供してバスへの電気接続を管理し、受信トランザクションを復号し、送信トランザクションを暗号化し、及び/または受信及び送信トランザクションのエラーを管理してよい。
コンフィグレーショントランザクションロギングユニット408は受信コンフィグレーショントランザクションを追跡してよい。コンフィグレーショントランザクションロギングユニット408は受信コンフィグレーション読み出し及び書き込みトランザクションの一部または全てのログを保持してよい。ログはリストまたは表の形式、あるいはリスト及び/または表の組み合わせの形態をとってよい。いくつかの実装では、コンフィグレーショントランザクションロギングユニット408は、いくつかのトランザクションが他のトランザクションより早く供給され得るよう、受信コンフィグレーショントランザクションに優先度を割り当ててよい。係る実装では、コンフィグレーショントランザクションロギングユニット408はさらに、一貫性、つまり読み出し及び書き込みが適切な順序で発生するよう保持してよい。例えば、レジスタの読み出しトランザクションが、同じレジスタに対する書き込みトランザクションの後に受信される場合、書き込みトランザクションが最初に発生しなければならない。他の実装では、コンフィグレーションロギング408は受信トランザクションを受信した順序で保持する。
ネイティブコンフィグレーション空間412は、周辺デバイス400によりエミュレートされていないネイティブコンフィグレーションレジスタを含んでよい。ネイティブコンフィグレーションレジスタは、通常、物理アドレスを有し、その結果、1つ以上のアドレス空間を占めてよい。
エミュレーションモジュール430は、コンフィグレーショントランザクションを処理するように適合された1つ以上のプロセッサ、1つ以上のプロセッサコア、プロセッサクラスタ、プログラム可能ゲートアレイまたは制御論理回路を使用して実装することができる。エミュレーションモジュール430は、上記の通り、オペレーティングシステム及び/またはエミュレーションソフトウェアなどのソフトウェアコードを実行してよい。いくつかの実施形態では、エミュレーションソフトウェアの機能性はハードウェア(例えば、制御論理回路)に実装できる。エミュレーションモジュール430は、ネイティブコンフィグレーション空間412をターゲットにするトランザクション及びエミュレートされたコンフィグレーション空間442をターゲットにするトランザクションの両方を含む、受信コンフィグレーション読み出し及び書き込みトランザクションの一部または全てを供給してよい。
メモリ440はエミュレーションモジュール430により動作され得るデータの記憶を提供する。メモリ440はエミュレートされたコンフィグレーション空間442を記憶してよい。エミュレートされたコンフィグレーション空間442は、周辺デバイス400によりエミュレートされている1つ以上の周辺デバイスに対して定義されたコンフィグレーションレジスタの一部または全ての表現を含んでよい。いくつかの実装では、エミュレートされたコンフィグレーション空間442はエミュレート中の周辺デバイスの動作をもたらすコンフィグレーションレジスタを主に含んでよい。エミュレートされたコンフィグレーション空間442は、テキストファイル、ソースコード、オブジェクトコード、スクリプトの形態またはいくつかの他の形式で記憶されてよい。いくつかの実施形態では、エミュレートされたコンフィグレーション空間442は暗号化されてよい。いくつかの実装では、メモリ440は2つ以上のエミュレートされたコンフィグレーション空間を含んでよい。例えば、周辺デバイスは複数の他の周辺デバイス及び/または複数の機能をエミュレートしてよい。係る場合、メモリ440はエミュレート中の各周辺デバイス及び/またはエミュレート中の各機能に対してエミュレートされたコンフィグレーション空間を含んでよい。
図4の例は、コンフィグレーション読み出しトランザクションが受信される際に、周辺デバイス400により実行され得るステップを例示する。ステップ452では、コンフィグレーション読み出しトランザクションがバスから(例えば、ルートコンプレックスまたはホストから)受信される。バスインターフェースコア410はコンフィグレーショントランザクションを受信し、トランザクションを受け入れるべきであると判断してよい。バスインターフェースコア410は、この判断を行うために、例えば、トランザクションのターゲットバス識別子、デバイス識別子、機能識別子及び/またはアドレスを調査してよい。周辺デバイス400は2つ以上の周辺デバイス及び/または2つ以上の機能をエミュレート中であってよい。したがって、バスインターフェースコア410は、エミュレート中の任意の数の周辺デバイスに対してトランザクションを受け入れてよい。
ステップ454では、バスインターフェースコア410はコンフィグレーション読み出しトランザクションをコンフィグレーショントランザクションロギングユニット408に送信してよい。コンフィグレーショントランザクションロギングユニット408は読み出しトランザクションをそのトランザクションログに追加してよい。いくつかの実施形態では、一度読み出しトランザクションが記録されると、バスインターフェースコア410は他の動作に進んでよく、読み出しトランザクションが完了するのを待つ必要はない。
ステップ456では、コンフィグレーショントランザクションロギングユニット408は割り込みをエミュレーションモジュール430に送信してよい。エミュレーションモジュール430は、エミュレーション処理を起動することにより、割り込みに応答してよい。エミュレーション処理はコンフィグレーショントランザクションロギングユニット408からコンフィグレーショントランザクションを検索し、コンフィグレーショントランザクションを供給してよい。いくつかの実施形態では、エミュレーションモジュール430の準備ができ次第または割り込みルーチンに従って、エミュレーションモジュール430はコンフィグレーショントランザクションを供給してよい。いくつかの実施形態では、エミュレーションモジュール430は、コンフィグレーショントランザクションを供給するための専用リソースを含んでよい。例えば、エミュレーションモジュール430はコンフィグレーショントランザクションを供給するために指定されたプロセッサコアまたは実行スレッドを有してよい。代替的または追加的に、コンフィグレーショントランザクションロギングユニット408は、トランザクションがステップ454でコンフィグレーショントランザクションロギングに送信され次第、割り込みをエミュレーションモジュール430に送信してよい。割り込みはエミュレーションモジュール430が作動すべきことをエミュレーションモジュール430に通知する。いくつかの場合、エミュレーションモジュール430はさらに、バスにより規定されるタイミング要件に従う必要があり得る。例えば、いくつかのバスプロトコルは、周辺デバイスが一定時間内に読み出しトランザクションに応答するだろうと予測してよい。
コンフィグレーショントランザクションは、ステップ452でバスインターフェースコア410により受信されたものと同じ順序で、ステップ456においてフェッチまたは受信されてよい。代替的に、コンフィグレーショントランザクションロギングユニット408は、優先度のより高いトランザクションが最初に供給されるよう、記録したトランザクションに再度優先順位をつけてよい。
コンフィグレーション読み出しトランザクションを受信またはフェッチすると、エミュレーションモジュール430は、トランザクションがエミュレートされたコンフィグレーション空間442に導かれるか、またはネイティブコンフィグレーション空間412に導かれるかを判断してよい。この判断は読み出されるコンフィグレーションレジスタのアドレスに基づいてよく、アドレスはエミュレートされたコンフィグレーション空間またはネイティブコンフィグレーション空間に該当し得る。いくつかの場合、読み出しトランザクションがエミュレートされたコンフィグレーション空間442に導かれる場合、エミュレーションモジュール430は、ステップ458aにおいて、ターゲットのコンフィグレーションレジスタのコンテンツを表す値を、メモリ440のエミュレートされたコンフィグレーション空間442から読み出してよい。他の場合では、エミュレーションモジュール430はターゲットのコンフィグレーションレジスタがエミュレートされておらず、ネイティブコンフィグレーション空間412の一部であることを判断してよい。係る場合、エミュレーションモジュール430は、ステップ458bで、コンフィグレーションレジスタのコンテンツをネイティブコンフィグレーション空間412から読み出してよい。
次に、ステップ460では、エミュレーションモジュール430はコンフィグレーション読み出しへの応答を生成してよい。いくつかの実装では、エミュレーションモジュール430は検索したデータをバスインターフェースコア410に送信してよい。係る実装では、バスインターフェースコア410は、バス上で送信するために読み出しデータをパッケージ化し、パッケージ化されたデータを送信してよい。他の実装では、エミュレーションモジュール430は、データをバスインターフェースコア410に提供する前に、読み出しデータをパッケージ化してよい。
ステップ462では、エミュレーションモジュール430は、ステップ462の後、コンフィグレーショントランザクションロギングユニット408を更新し、コンフィグレーション読み出しトランザクションが完了したことを示してよい。いくつかの実装では、エミュレーションモジュール430は、読み出しトランザクションを供給した後、読み出しトランザクションをコンフィグレーショントランザクションロギングユニット408から取り除いてよい。
周辺デバイス400はPCIを実装する周辺デバイスであってよい。周辺デバイス400がPCI周辺デバイスである場合、上記のステップはいくつかの実施形態に従って、以下に記載されてよい。
ステップ452では、例えば、ルートコンプレックスから、コンフィグレーション読み出しトランザクション層パケット(TLP)が受信されてよい。コンフィグレーション読み出しTLPはPCIeバス上で受信されてもよく、PCIeコアにより受信されてよい。PCIeコアはTLPをアンパックし、コンフィグレーション要求を、より簡単に処理される形式に縮小する。
ステップ454では、PCIeコアはコンフィグレーション読み出し要求をコンフィグレーショントランザクションロギングに転送してよい。例えば、PCIeコアは、コンフィグレーション読み出し要求情報により、コンフィグレーショントランザクションロギングのアドレスレジスタを更新してよい。コンフィグレーショントランザクションロギングは、コンフィグレーション読み出し要求を、保留コンフィグレーショントランザクションのログに追加してよい。コンフィグレーション読み出し要求をコンフィグレーショントランザクションロギングに転送した後、PCIeコアは他の動作を自由に実行してよい。
ステップ456では、コンフィグレーショントランザクションロギングはエミュレーションモジュールに割り込みを送信してよい。割り込みを受信すると、エミュレーションモジュールはエミュレーション処理を起動してよく、コンフィグレーショントランザクションロギングは応答を待ってよい。
ステップ458aでは、エミュレーションモジュールは、コンフィグレーション読み出しトランザクションによりターゲットにされる、エミュレートされたコンフィグレーションレジスタを検索してよい。エミュレーションモジュールはメモリのエミュレートされたコンフィグレーション空間にアクセスし、要求されたエミュレートされたコンフィグレーションレジスタをその内部に配置してよい。要求されたエミュレートされたコンフィグレーションレジスタを配置すると、エミュレーションモジュールはエミュレートされたコンフィグレーションレジスタの値を読み出してよい。いくつかの場合、読み出し要求を、エミュレートされたコンフィグレーションレジスタに供給することは、周辺デバイスのハードウェアからの追加情報を要求してよい。これらの場合、エミュレーションモジュールは、物理ポートコンフィグレーションレジスタまたはネイティブコンフィグレーション空間のレジスタなどの、追加のコンフィグレーションレジスタを読み出してよい。
ステップ460では、エミュレーションモジュールは、エミュレートされたコンフィグレーションレジスタから読み出した値をコンフィグレーショントランザクションロギングユニットに転送し、完了ステータスをコンフィグレーショントランザクションロギングユニットの完了成功として更新してよい。ステップ462では、エミュレーションモジュールまたはコンフィグレーショントランザクションロギングユニットは読み出し値をPCIeデバイスコアに伝達し、PCIeデバイスコアは次に読み出し値をパッケージ化し、ルートコンプレックスに送信する。例えば、PCIeデバイスコアはコンフィグレーション完了TLPをルートコンプレックスに送信してよい。いくつかの実施形態では、コンフィグレーション読み出し要求が完了できなかった場合、これに応じてエミュレーションモジュールは完了ステータスを更新してよい。
図5は、コンフィグレーション書き込み要求を供給する周辺デバイス500の一例を例示する。周辺デバイス500は様々な周辺デバイス及び/または複数のデバイス機能を柔軟にエミュレートしてよい。周辺デバイス500は、バスインターフェースコア510、コンフィグレーショントランザクションロギングユニット508、ネイティブコンフィグレーション空間512、エミュレーションモジュール530及びメモリ540を含んでよい。バスインターフェースコア510は、周辺デバイスをコンピューティングシステムに接続するバスと通信するための機能性を含んでよい。コンフィグレーショントランザクションロギングユニット508は受信コンフィグレーショントランザクションを追跡してよい。コンフィグレーショントランザクションロギングユニット508は受信コンフィグレーション読み出し及び書き込みトランザクションの一部または全てのログを保持してよい。ネイティブコンフィグレーション空間512は、周辺デバイス500によりエミュレートされていないコンフィグレーションレジスタを含んでよい。エミュレーションモジュール530は、コンフィグレーショントランザクションを処理するように適合された1つ以上のプロセッサ、1つ以上のプロセッサコア、プロセッサクラスタ、プログラム可能ゲートアレイまたは制御論理回路を使用して実装することができる。エミュレーションモジュール530は、オペレーティングシステム及び/またはエミュレーションモジュールなどのソフトウェアコードを実行してよい。いくつかの実施形態では、エミュレーションソフトウェアの機能性はハードウェア(例えば、制御論理回路)に実装できる。メモリ540はエミュレーションモジュール530により動作され得るデータの記憶を提供する。メモリ540は1つ以上のエミュレートされたコンフィグレーション空間を含んでよい。エミュレートされたコンフィグレーション空間542は、エミュレートされる周辺デバイス及び/または機能に対して定義されたコンフィグレーションレジスタの一部または全ての表現を含んでよい。いくつかの実施形態では、メモリ540はエミュレートされる各周辺デバイス及び/または機能に対してエミュレートされたコンフィグレーション空間542を含んでよい。
図5の例は、コンフィグレーション書き込みトランザクションが受信される際に、周辺デバイス500により実行され得るステップを例示する。ステップ552では、コンフィグレーション書き込み要求がバスから(例えば、ルートコンプレックスまたはホストから)受信される。バスインターフェースコア510はコンフィグレーション書き込みトランザクションを受信し、トランザクションを受け入れるべきであると判断してよい。周辺デバイス500は2つ以上の周辺デバイス及び/または機能をエミュレート中であってよい。したがって、デバイスコア510は、エミュレート中の任意の数の周辺デバイスに対するトランザクションを受け入れてよい。
ステップ554では、バスインターフェースコア510はコンフィグレーション書き込みトランザクションをコンフィグレーショントランザクションロギング508に送信してよい。コンフィグレーショントランザクションロギング508はコンフィグレーション書き込みトランザクションをそのトランザクションログに追加してよい。一度コンフィグレーション書き込みトランザクションが記録されると、バスインターフェースコア510は他の動作に進んでよく、書き込みトランザクションが完了するのを待つ必要はない。
ステップ556では、コンフィグレーショントランザクションロギング508は割り込みをエミュレーションモジュール530に送信してよい。エミュレーションモジュール530は、エミュレーションモジュールを起動することにより、割り込みに応答してよい。エミュレーションモジュール530はコンフィグレーショントランザクションロギング508からコンフィグレーショントランザクションを検索し、コンフィグレーショントランザクションを供給してよい。エミュレーションモジュール530の準備ができ次第、エミュレーションモジュール530はコンフィグレーショントランザクションを供給してよい。いくつかの実施形態では、エミュレーションモジュール530は、コンフィグレーショントランザクションを供給するための専用リソースを含んでよい。いくつかの場合、エミュレーションモジュール530は、ステップ554でコンフィグレーショントランザクションがコンフィグレーショントランザクションロギングユニット508に追加され次第、割り込みを受信してよい。
コンフィグレーション書き込みトランザクションを受信またはフェッチすると、エミュレーションモジュール530は、トランザクションがエミュレートされたコンフィグレーション空間542に導かれるか、またはネイティブコンフィグレーション空間512に導かれるかを判断してよい。いくつかの場合、コンフィグレーション書き込みトランザクションがエミュレートされたコンフィグレーション空間542に導かれる場合、処理クラスタ530は、ステップ558aで、エミュレートされたコンフィグレーション空間542のターゲットになるコンフィグレーションレジスタの表現を書き込みデータで更新してよい。書き込みトランザクションがネイティブコンフィグレーション空間512に導かれる場合、エミュレーションモジュール530は、ステップ558bで、ネイティブコンフィグレーション空間512のコンフィグレーションレジスタを書き込みデータで更新してよい。
ステップ562では、エミュレーションモジュール530は、コンフィグレーショントランザクションロギングユニット508を更新し、コンフィグレーション書き込みトランザクションが完了したことを示してよい。いくつかの実装では、エミュレーションモジュール530は、書き込みトランザクションを供給した後、書き込みトランザクションをコンフィグレーショントランザクションロギングユニット508から取り除いてよい。
いくつかの実装では、エミュレーションモジュール530は、書き込みトランザクションの完了が成功したことを示すために、書き込みトランザクションへの応答を生成してよい。これらの実装では、エミュレーションモジュール530はバスインターフェースコア510に応答を生成するよう指示してよい。代替的には、エミュレーションモジュール530自体が応答を生成し、応答をバスに送信してよい。
周辺デバイス500はPCIを実装する周辺デバイスであってよい。周辺デバイス500がPCI周辺デバイスである場合、上記のステップはいくつかの実施形態に従って、以下に記載されてよい。
ステップ552では、例えば、ルートコンプレックスから、コンフィグレーション書き込みTLPが受信されてよい。コンフィグレーション書き込みTLPはPCIeバス上で受信されてよく、PCIeコアにより受信されてよい。PCIeコアはTLPをアンパックし、コンフィグレーション要求を、より簡単に処理される形式に縮小してよい。
ステップ554では、PCIeコアは、例えば、アドレスレジスタをコンフィグレーション書き込み要求情報で更新することにより、コンフィグレーション書き込み要求をコンフィグレーショントランザクションロギングに転送してよい。コンフィグレーショントランザクションロギングは、コンフィグレーション書き込み要求をその保留コンフィグレーショントランザクションのログに追加してよい。コンフィグレーション書き込み要求をコンフィグレーショントランザクションロギングユニットに転送した後、PCIeコアは他の動作を自由に実行してよい。
ステップ556では、コンフィグレーショントランザクションロギングユニットは割り込みをエミュレーションモジュールに送信してよい。割り込みを受信すると、エミュレーションモジュールはエミュレーションモジュールを起動してよく、コンフィグレーショントランザクションロギングユニットは応答を待ってよい。
ステップ558aでは、エミュレーションモジュールはコンフィグレーション書き込みトランザクションにより書き込まれる、エミュレートされたコンフィグレーションレジスタを検索してよい。エミュレーションモジュールはメモリのエミュレートされたコンフィグレーション空間にアクセスし、要求されたエミュレートされたコンフィグレーションレジスタをその内部に配置してよい。ターゲットになるエミュレートされたコンフィグレーションレジスタを配置すると、エミュレーションモジュールはエミュレートされたコンフィグレーション空間のエミュレートされたコンフィグレーションレジスタを書き込みデータで更新してよい。いくつかの場合、エミュレートされたコンフィグレーションレジスタに書き込まれる値は、周辺デバイス500のハードウェアへの更新を要求してよい。これらの場合、エミュレーションモジュールは、物理ポートコンフィグレーションレジスタまたはネイティブコンフィグレーション空間のレジスタなどの、追加のコンフィグレーションレジスタを書き込んでよい。
ステップ562では、エミュレーションモジュールはコンフィグレーショントランザクションロギングの完了ステータスを更新してよい。この完了ステータスは、コンフィグレーション書き込みトランザクションの完了が成功したことを示してよい。コンフィグレーショントランザクションロギングは完了ステータスをPCIeデバイスコアに伝達してよい。PCIeデバイスコアは完了の成功をルートコンプレックスに示してよい。例えば、PCIeデバイスコアはコンフィグレーション完了TLPをルートコンプレックスに送信してよい。いくつかの実施形態では、コンフィグレーション書き込み要求が完了できなかった場合、これに応じてエミュレーションモジュールは完了ステータスを更新してよい。
図4〜5は、エミュレートされたコンフィグレーション空間を伴う周辺デバイスがどのようにコンフィグレーション読み出し及び書き込みトランザクションを供給し得るかの一例を例示する。エミュレートされたコンフィグレーション空間は変更及び/または置換され、これにより、エミュレートされている周辺デバイス及び/または機能の変更及び/または置換を行う。さらに、周辺デバイスのエミュレーションコンフィグレーション空間は複数のエミュレートされたコンフィグレーションを含んでよく、これにより周辺デバイスは複数のデバイス及び/または機能をエミュレートすることができる。エミュレーション技法は、この結果、柔軟性及び適合性のあるコンフィグレーション空間を伴う周辺デバイスの構築を可能にし、いくつかの場合、周辺デバイスの固定及び変更不可能なコンフィグレーション定義を削減または排除し得る。
IV.SR−IOV
図6は、シングルルート入出力仮想化(SR−IOV)ケーパビリティを伴う周辺デバイス600の一例を例示する。SR−IOVは、物理リソース(例えば、単一のネットワークインターフェースコントローラ)が複数のリソース(例えば、64のネットワークインターフェースコントローラ)のように見えることが可能になる拡張ケーパビリティである。その結果、特定の機能性を提供する周辺デバイスは、その機能性を提供する複数のデバイスのように見え得る。SR−IOVが可能な周辺デバイスの機能は物理機能(PF)と仮想機能(VF)とに分類され得る。物理機能は、発見、管理及び操作可能なデバイスの完全装備機能である。物理機能は周辺デバイスを構成または制御するために使用可能なコンフィグレーションリソースを有する。物理機能は非仮想化デバイスが有するだろう同一のコンフィグレーションアドレス空間及びメモリアドレス空間を含む。物理機能は物理機能に関連する多数の仮想機能を有し得る。仮想機能は物理機能と類似しているが、コンフィグレーションリソースがない簡易な機能であり、通常、物理機能の基本物理機能のコンフィグレーションにより制御される。物理機能及び/または仮想機能のそれぞれは、コンピューティングシステム上で実行するそれぞれの実行スレッド(例えば、仮想マシンなど)に割り当てられてよい。
図6に示す、SR−IOVが可能なデバイス600の例は、PCIeポート602、内部ルーティング604及び606a〜m、1つ以上の物理機能610a〜m、物理機能610a〜m当たりの1つ以上の仮想機能(例えば、620a〜c、621a〜c)を含んでよい。PCIeポート602は物理接続をPCIeバスに提供してよい。内部ルーティング604及び606a〜mはバストランザクションを適切な物理機能610a〜m及び仮想機能に導き得る。各物理機能610a〜mは内部ルーティング604を通じてPCIeポート602に接続されてよい。各仮想機能は第1レベルの内部ルーティング606a〜mを通じて、次いで第2レベルの内部ルーティング604を通じて、PCIeポート602に接続されてよい。内部ルーティング604は、各物理機能610a〜mとPCIeポート602との間、または任意の仮想機能6120a〜fとPCIeポート602との間のポイント・ツー・ポイント接続を提供してよい。
各物理機能610a〜mは物理リソースに関連し、それぞれの物理機能を実施し得る。例えば、PF 0 610aは物理リソース618aに関連し、PF m 610mは物理リソース618mに関連し得る。仮想機能のそれぞれはさらに、それぞれの物理リソースに関連し、仮想機能の機能性を実施し得る。各物理機能610a〜mはさらに、それぞれのコンフィグレーションリソース612a〜m及びそれぞれのアドレス変換キャッシュ(ATC)614a〜mを含んでよい。コンフィグレーションリソース612a〜mのそれぞれは、例えば、4KBのコンフィグレーションアドレス空間を含んでよい。アドレス変換キャッシュ614a〜mのそれぞれは、直近で使用されたアドレス変換を記憶してよい。物理機能610a〜mは、コンピューティングシステムに可視のアドレス空間が、連結される周辺デバイスの物理アドレス空間と異なる場合、アドレス変換を提供してよい。例えば、ある位置にアクセスする仮想マシンは、物理アドレスに変換される仮想アドレスを使用してよい。
いくつかの実施形態では、SR−IOVに関連するコンフィグレーションレジスタは、周辺デバイスのエミュレートされたコンフィグレーション空間でエミュレートすることができる。各物理機能は一定数のベースアドレスレジスタ(BAR)を含んでよい。ベースアドレスレジスタは物理機能の入出力アドレス範囲及び/またはメモリアドレス範囲を指定するコンフィグレーションレジスタである。ベースアドレスレジスタに記憶される値を必要に応じて変更し、物理機能に割り当てられたアドレス空間を変更してよい。ベースアドレスレジスタはエミュレートされたコンフィグレーション空間に含まれてよい。エミュレートされたコンフィグレーション空間は、例えば、物理機能に関連する6つのBAR、SR−IOVケーパビリティに対する6つのBAR、拡張読み出し専用メモリ(ROM)に対するアドレスを記憶する1つのBAR(周辺デバイスがデバイスROMを内蔵する場合)の表現を含んでよい。いくつかの実装では、物理機能のエミュレートされたコンフィグレーション空間のベースアドレスレジスタはデフォルト値を有してよい。
物理機能のエミュレートされたコンフィグレーション空間はさらに、SR−IOVケーパビリティレジスタの表現を含んでよい。いくつかの場合、SR−IOVケーパビリティレジスタは、物理機能のエミュレートされたコンフィグレーション空間のケーパビリティリストから読み出され得るオフセットに存在してよい。代替的または追加的に、エミュレーションモジュールは、このオフセットのローカルコピーを保持してもよく、これによりエミュレーションモジュールは最初にケーパビリティリストを読み出すことなく、SR−IOVケーパビリティレジスタにアクセスし得る。
いくつかの実装では、SR−IOVケーパビリティレジスタの設定の変更(例えば、コンフィグレーション書き込み)に仮想機能を使用不可能にすることが必要な場合がある。例えば、仮想機能の数及び/または仮想機能に対するベースアドレスレジスタへの変更は、仮想機能を使用不可能にすることが必要な場合がある。いくつかの場合、仮想機能を使用不可能にすること及び仮想機能を再度使用可能にすることは仮想機能のリセットを引き起こし得る。SR−IOVケーパビリティレジスタの設定が変更されると、物理機能は全てのアクティブな仮想機能をリセットし得る。物理機能はさらに、変更されたSR−IOVケーパビリティレジスタを読み出し、どの設定が変更されたかを判断し得る。物理機能は、次いで、必要な場合、SR−IOVケーパビリティレジスタの変更された設定を基に、仮想機能のコンフィグレーションを更新し得る。
いくつかの実装では、物理機能及びその関連する仮想機能に対してエミュレートされたコンフィグレーション空間は、第1アドレスオフセットにおける物理機能コンフィグレーション空間、第2アドレスオフセットにおける仮想機能コンフィグレーション空間及び第3アドレスオフセットにおける追加のコンフィグレーションイメージに組織されたコンフィグレーションイメージの一部であり得る。
SR−IOVに対してエミュレートされたコンフィグレーション空間は少なくとも3つの構成要素、つまり、各物理機能に対するSR−IOVケーパビリティコンフィグレーション空間と、各仮想機能の状態及びケーパビリティを保持するためのコンフィグレーション空間と、SR−IOVベースアドレスレジスタ(BAR)に対するコンフィグレーション空間とを含んでよい。いくつかの実装では、物理機能のエミュレートされたコンフィグレーション及び仮想機能のエミュレートされたコンフィグレーションへのアクセスは、PCIeコアに到達するコンフィグレーション空間アクセスを取得及び処理することにより、処理され得る。SR−IOVベースアドレスレジスタは、いくつかの実装では、例えば、少なくとも1対のベースアドレスレジスタをネイティブコンフィグレーション空間に確保することにより、ネイティブコンフィグレーション空間でベースアドレスレジスタを使用して実装してよい。
いくつかの実施形態では、機能レベルリセット(FLR)、バスマスタ使用可能(BME)、メモリ空間使用可能(MSE)等などのコンフィグレーション空間の特定ビットへの変更は、対応する物理機能及び関連する仮想機能を利用するアプリケーションに伝達される。例えば、アプリケーションはFLR要求を受信及び確認してもよく、エミュレーションモジュールは、FLRが完了したことをアプリケーションが確認するまで、機能保留FLRに対する任意のトランザクションへの応答を留保してよい。アプリケーションは任意のコマンドを実行する前に、各機能(FLR、BME、MSE等)のステータスを確認してよい。アプリケーションは、各機能に対する保留トランザクションがあるかどうかをエミュレーションモジュールに通知し、BAR、仮想機能の数等のコンフィグレーション空間に構成される種々の設定を確認してよい。
いくつかの実施形態では、物理機能及び関連する仮想機能のステータス(機能プロパティとも呼ばれ得る)はエミュレートされたコンフィグレーション空間で保持され、アプリケーションまたはエミュレーションモジュールに伝達され得る。各機能のステータスを追跡するためのメモリ空間のサイズは、例えば、物理機能または仮想機能当たり4バイトの整数であり得る。第1の整数は物理機能のステータスを提供し得、第2の整数は第1仮想機能のステータスを提供し得るなどである。
各機能のステータスは即時のアプリケーション応答を要求しない情報を含み得るが、アプリケーションは入出力処理中にプロパティを検査すべきである。例えば、機能が保留FLRである場合、保留FLRに対して受信される任意のコマンドは破棄されるべきである。別の例として、BMEが設定されない場合、アプリケーションはDMAトランザクションを機能に対してポスティングすることを避けるべきである。いくつかの実施形態では、各機能のステータスは、機能が使用可能かどうか(物理機能が常に使用可能となり得る)、機能がFLR保留を有するかどうか、MSEが使用可能かどうか(物理機能に対して)、BMEが使用可能かどうか及びMSI−Xが使用可能かどうかなどの情報を提供してよい。
以下は機能レベルリセットを行う一例を提供する。機能レベルリセットは特定の物理機能及びその関連する仮想機能をリセットするための機構を提供する。通常、物理機能のリセットは物理機能に関連する仮想機能のリセットをトリガする場合がある。機能レベルリセットは段階的な機構であり、仮想機能及び物理機能が保留動作を完了し、静止またはアイドル状態に入ることを可能にする。一度機能が休止状態になると、機能はリセットされ得る。
エミュレーションモジュールが物理機能をリセットすることを識別する機能レベルリセット要求を受信してよい。関連する仮想機能は最初に静止状態になってよい。エミュレーションモジュールは、仮想機能に対してFLRビットを機能プロパティに設定することにより、仮想機能がリセットされていることを示してよい。エミュレーションモジュールは次にFLRメッセージをアプリケーションキューに送信してよく、仮想機能への任意のさらなる要求は、アプリーションがFLRを確認するまで、「サポートされていない要求」応答で応答されるだろう。一度仮想機能が任意の保留トランザクションを完了すると、アプリケーションは機能レベルリセット要求を確認するだろう。アプリケーションは、次いで、エミュレーションモジュールのためにメッセージをキューに送信してよい。エミュレーションモジュールがコンフィグレーションアクセス要求を受信すると、エミュレーションモジュールはキューをポーリングし、FLR確認を受信する。エミュレーションモジュールは、次いで、仮想機能に対するさらなる要求に応答してよい。仮想機能のステータスまたはプロパティは更新されてよい。例えば、MSI−X及びBMEは使用不可能になり得る。
物理機能では、機能レベルリセットを受信すると、エミュレーションモジュールは、MSE及びBMEステータスビットを介して、メモリ空間及びバスマスタを使用不可能にしてよい。さらに、エミュレーションモジュールは全てのエミュレートされたレジスタ及びネイティブコンフィグレーションレジスタをデフォルト値に戻してよい。エミュレーションモジュールはさらに、FLRメッセージをアプリケーションキューに送信してよく、物理機能への任意のさらなる要求は、アプリケーションにより別様に指示されるまで、「サポートされていない要求」応答で応答されるだろう。アプリケーションはその物理機能データ構造及び保留トランザクションキューをリセットしてよい。これらの動作を完了すると、アプリケーションは、エミュレーションモジュールのためにメッセージをキューに送信することにより、機能レベルリセット要求を確認してよい。エミュレーションモジュールがコンフィグレーションアクセス要求を受信すると、エミュレーションモジュールはキューをポーリングし、FLR確認を受信する。エミュレーションモジュールは、次いで、物理機能に対するさらなる要求に応答してよい。物理機能に関連する仮想機能は、ルートコンプレックスにより再度使用可能になるまで、使用不可能であってよい。
以下の例は、周辺デバイスによるSR−IOVケーパビリティのエミュレーションを例示する。周辺デバイスは、例えば、PF0として指定される1つの物理機能を含んでよい。PF0に対するエミュレートされたコンフィグレーションはSR−IOV拡張ケーパビリティレジスタを含む。さらに、PF0は、周辺デバイスがPF0に関連する仮想機能を発見、設定及び管理するために使用されてよい。通常、エミュレートされたSR−IOVレジスタは、SR−IOVプロトコルにより定義されたのと同じデフォルト値で周辺デバイスにアップロードされてよい。いくつかの実装では、SR−IOVレジスタは他の値でアップロードされてよい。例えば、PF0に割り当てられた仮想機能の合計数は4Kに設定されてよく、エミュレートされたSR−IOVレジスタ内の第1仮想機能に対するデフォルトオフセットは257に設定されてよく、デフォルト仮想機能ストライドは1に設定されてよい。
本例では、仮想機能はMSI−Xケーパビリティを含んでよい。さらに、物理機能と仮想機能の両方がアドバンスドルーティング識別(ARI)ケーパビリティを含んでよい。ARIは周辺デバイスが9つ以上の機能をサポートできる機構を提供する。ARIをサポートする周辺デバイスは、PCIコンフィグレーションヘッダのデバイスIDフィールドを、機能番号の一部として解釈する。これにより、周辺デバイスは最大256の機能をサポートする能力を得る。
いくつかの実装では、SR−IOV制御レジスタは、ARIが可能な階層が使用可能かどうかを示す。ARIが可能な階層を使用可能にすると、例えば、仮想機能は8〜255の機能番号を使用することができる。ARIが可能な階層設定はさらに、ARIがルートコンプレックスまたは周辺デバイスのアップストリームに隣接するスイッチで使用可能であったことを示す。ルートコンプレックスは、ルートコンプレックスまたはスイッチ内のARI転送使用可能設定に一致するようARIが可能な階層設定を設定してよい。周辺デバイスは、ARIが可能な階層設定のコンフィグレーションを使用して第1仮想機能のオフセットを決定してよい。例えば、第1仮想機能へのデフォルトオフセットは、ARI及び非ARIの両方のモードに対して257に設定され得る。
通常、バス番号及びデバイス番号はコンピューティングシステムに包含されるPCI階層がルートコンプレックスによりエニュメレーションされる前には、割り当てられない。エニュメレーション処理の間、エミュレーションモジュールはPF0をターゲットにしないコンフィグレーションアクセスへの応答をやめてよい。これは、周辺デバイスが2つ以上の物理機能を含むという印象を、周辺デバイスがルートコンプレックスに与えたくない場合があるためである。コンピューティングシステムの機能及びデバイスがルートコンプレックスによりマッピングされた後、ルートコンプレックスはARIケーパビリティ階層設定、ならびにSR−IOVコンフィグレーションレジスタの仮想機能使用可能設定を設定することを可能にし得る。
いくつかの場合、エミュレーションモジュールは仮想機能を使用可能にするトランザクションを取り込んでよい。これらの場合、一度仮想機能が使用可能になると、エミュレーションモジュールはPF0に割り当てられた以外のバス番号、デバイス番号及び機能番号をターゲットにするコンフィグレーショントランザクションを受け入れ可能であってよい。
いくつかの実装では、周辺デバイスは、物理機能に対するバス番号より高いバス番号に位置するように、仮想機能をエミュレートしてよい。これらの実装では、仮想機能へのコンフィグレーションアクセスは恐らくコンフィグレーションタイプ1、これはコンフィグレーションアクセスがより高い番号のバスにブリッジされるべきであることを意味する。表3は本例の種々のコンフィグレーショントランザクションがどのように処理され得るかの一例を提供する。コンフィグレーショントランザクションはコンフィグレーションタイプ0(ローカルバスに導かれる)またはコンフィグレーションタイプ1(より高レベルのバスに導かれ、そのバスに到達するためにブリッジされるべきである)であってよい。ターゲットバスは、例示の周辺デバイスが位置するものであり得るか、またはより高いバス番号であり得る。コンフィグレーションタイプ及びターゲットバスを考慮して、表は、コンフィグレーショントランザクションが物理機能及び/または任意の関連する仮想機能をターゲットにし得るかどうかを示す。最後に、表は周辺デバイスがこれらのコンフィグレーショントランザクションにどのように応答し得るかを示す。
コンフィグレーショントランザクションが、物理機能または任意の仮想機能のいずれにも割り当てられないバス番号をターゲットにする場合、周辺デバイスはサポートされていない要求で応答してよい。
表4は様々な仮想機能の数に対するバス割り当ての例を提供する。
バス割り当て、及び、どの物理機能及び仮想機能が利用可能かは、物理機能及び仮想機能に対してエミュレートされたコンフィグレーションを読み出すことにより知ることができる。存在しない機能に対するコンフィグレーショントランザクションが受信されると、エミュレーションモジュールはサポートされていない要求応答で応答し得る。
表5は、仮想機能が使用可能かどうか、及びARIが可能な階層が使用可能かどうかに基づく応答例を提供する。
V.方法
図7〜9は周辺デバイスのコンフィグレーション空間をエミュレートするための方法の実施形態を例示する。これらの方法は、上記のシステムにより実施されてよい。
図7は、コンフィグレーションアクセス要求を供給する処理700を例示する。コンフィグレーションアクセス要求は、エミュレートされたコンフィグレーション空間を含む周辺デバイスにより受信されてよい。エミュレートされたコンフィグレーション空間により、周辺デバイスは1つ以上の様々な周辺デバイス及び/または機能をエミュレートすることができ得る。コンフィグレーションアクセス要求はコンフィグレーションレジスタの読み出し及び/またはコンフィグレーションレジスタの書き込みに対する要求であってよい。
ステップ702では、周辺デバイスはコンフィグレーションアクセス要求を受信する。コンフィグレーションアクセス要求はバス上で受信されてよい。コンフィグレーションアクセス要求はコンフィグレーションアクセス要求のターゲットを識別する情報を含んでよい。例えば、コンフィグレーションアクセス要求はバス識別子、デバイス識別子、機能識別子及び/またはアドレスを含んでよい。識別情報は、周辺デバイスがコンフィグレーションアクセス要求を受け入れ及び供給すべきかどうかを示してよい。いくつかの実装では、周辺デバイスは複数の周辺デバイス及び/または機能をエミュレートしてよい。係る実装では、周辺デバイスは、2つ以上の周辺デバイス及び/または機能に対するコンフィグレーションアクセス要求を受け入れてよい。
ステップ706では、周辺デバイスは、コンフィグレーションアクセス要求が、周辺デバイスのネイティブコンフィグレーション空間以外のコンフィグレーション空間に対すると判断し得る。コンフィグレーションアクセス要求はエミュレートされているアドレス空間にあるコンフィグレーションレジスタに対するものであってよい。ネイティブコンフィグレーション空間に対するコンフィグレーションアクセス要求は、処理700により例示されるものとは異なる方法で処理されてよい。例えば、ネイティブコンフィグレーションに対するコンフィグレーションアクセス要求は、周辺デバイスのバスインターフェースコアなどの、周辺デバイスのネイティブハードウェアにより処理されてよい。
ステップ710では、周辺デバイスは、エミュレートされたコンフィグレーション空間からエミュレートされたコンフィグレーションを検索してよい。エミュレートされたコンフィグレーションは1つ以上のコンフィグレーションレジスタに対する表現を含んでよい。いくつかの実装では、エミュレートされたコンフィグレーション空間は、2つ以上の機能に対してエミュレートされたコンフィグレーションヘッダ及び/またはレジスタ(エミュレートされたコンフィグレーションと呼ばれてよい)を含む。係る実装では、周辺デバイスはコンフィグレーションアクセス要求に対するターゲット機能を判断し、適切なエミュレートされたコンフィグレーションを検索してよい。
ステップ712では、周辺デバイスは、エミュレートされたコンフィグレーションを使用してコンフィグレーションアクセス要求を供給してよい。コンフィグレーションアクセス要求を供給することは、コンフィグレーションアクセス要求がアクセスを要求しているレジスタを識別することを含んでよい。いくつかの実装では、コンフィグレーションアクセス要求を供給することは、エミュレートされたコンフィグレーションをコンフィグレーションアクセス要求のソースに提供することを含んでよい。係る実装では、周辺デバイスは識別されたコンフィグレーションレジスタの表現をエミュレートされたコンフィグレーションから読み出してよい。他の実装では、コンフィグレーションアクセス要求を供給することはエミュレートされたコンフィグレーションを更新することを含んでよい。係る実装では、周辺デバイスは識別されたコンフィグレーションレジスタの表現をエミュレートされたコンフィグレーションに書き込みまたは更新してよい。
図8は、コンフィグレーションレジスタを読み出すコンフィグレーションアクセス要求を供給する処理800の一例を例示する。処理800は、PCIを、周辺デバイスにより実施され得るバスプロトコルの一例として使用して例示される。周辺デバイスはPCIをエミュレートしたコンフィグレーション空間を実装してよい。PCIをエミュレートしたコンフィグレーション空間により、周辺デバイスは1つ以上のPCIデバイス及び/または機能をエミュレートすることができ得る。いくつかの実施形態では、処理800は、周辺デバイスが様々なバスプロトコルに適合するエミュレートされたコンフィグレーション空間を使用している場合などでは、他のバスプロトコルで実施されてよい。
ステップ802では、周辺デバイスのPCIコアはPCIコンフィグレーションアクセス要求をルートコンプレックスから受信してよい。コンフィグレーションアクセス要求はコンフィグレーションアクセス要求のターゲットを識別する情報を含んでよい。識別情報は、周辺デバイスがコンフィグレーションアクセス要求を受け入れ及び供給すべきかどうかを示してよい。周辺デバイスは複数の周辺デバイス及び/または機能をエミュレートしてよい。係る実装では、周辺デバイスは、2つ以上の周辺デバイス及び/または機能に対するコンフィグレーションアクセス要求を受け入れてよい。
ステップ804では、周辺デバイスのPCIコアは、PCIコンフィグレーションアクセス要求を周辺デバイスのコンフィグレーション管理モジュールに送信してよい。コンフィグレーション管理モジュールはコンフィグレーションアクセス要求のログを保持してよい。ログは周辺デバイスにより受信されたコンフィグレーションアクセス要求の記録をつけてよい。
ステップ806では、コンフィグレーション管理モジュールは、PCIコンフィグレーションアクセス要求がネイティブコンフィグレーション空間以外のコンフィグレーション空間をターゲットにすることを判断してよい。ネイティブコンフィグレーション空間は、エミュレートが不要及び/または不都合であり得るバス速度選択などの、基本機能性に対するコンフィグレーションレジスタを含んでよい。ネイティブコンフィグレーション空間以外のコンフィグレーション空間はエミュレートされてよい。エミュレートされたコンフィグレーション空間はエミュレートされたコンフィグレーションヘッダを使用して表わされてよい。
ステップ808では、周辺デバイスのコンフィグレーション管理モジュールは低遅延通知(例えば、割り込み要求)を周辺デバイスのエミュレーションモジュール(例えば、プロセッサ、制御論理回路等として実装され得る)に送信してよい。割り込みは周辺デバイスのエミュレーションモジュールに、コンフィグレーションアクセス要求が受信されたこと、及び/またはエミュレーションモジュールがコンフィグレーションアクセス要求を供給すべきことを通知してよい。
ステップ810では、周辺デバイスのエミュレーションモジュールは、(例えば、コンフィグレーションアクセス要求を処理するためにコンフィグレーション空間エミュレーションソフトウェアを実行することにより)割り込み要求に応答してよい。エミュレーションモジュールは、エミュレートされたコンフィグレーションをエミュレートされたコンフィグレーション空間から検索してよい。いくつかの実装では、周辺デバイスは1つ以上の周辺デバイス及び/または機能をエミュレートしていてよい。係る実装では、コンフィグレーションアクセス要求は、ターゲットになるエミュレートされた周辺デバイス及び/または機能の識別を含んでよい。さらに、コンフィグレーション空間エミュレーションソフトウェアは、ターゲットになるエミュレートされた周辺デバイス及び/または機能に対するコンフィグレーションを検索してよい。いくつかの実装では、エミュレートされたコンフィグレーション空間はDRAMに記憶されるか、内部でエミュレートされ得る。電源喪失の間、エミュレートされたコンフィグレーション空間がメモリに保持されるよう、永続メモリをさらに使用してエミュレートされたコンフィグレーション空間を記憶してよい。いくつかの実施形態では、永続メモリに記憶されたエミュレートされたコンフィグレーション空間は、起動時にDRAMまたはローカルメモリにロードすることができ、エミュレーションコンフィグレーション空間に対してより高速なアクセスを提供する。いくつかの実装では、コンフィグレーション空間エミュレーションソフトウェアが分離された環境で実行される。分離された環境では、コンフィグレーション空間エミュレーションソフトウェアは、他のソフトウェアによる割り込みまたは干渉がない状態で、セキュアに実行することができ得る。
ステップ812では、PCIコンフィグレーションアクセス要求は、検索されたエミュレートされたコンフィグレーションを使用して供給されてよい。いくつかの実装では、コンフィグレーションアクセス要求はコンフィグレーション読み出し要求であってよい。係る実装では、処理800はステップ814を含んでよく、ステップ814では、コンフィグレーションアクセス要求の供給は、検索されたエミュレートされたコンフィグレーションをPCIルートコンプレックスに送信することを含んでよい。いくつかの実施形態では、読み出されているエミュレートされたコンフィグレーションが、読み出した時に、その状態を変化するレジスタのタイプ(例えば、読み出しクリアレジスタまたは読み出しクリアビットを有する)を含む場合、処理800はさらに、エミュレートされたコンフィグレーションのコンテンツを、コンフィグレーションアクセス要求を供給することの一部として変更してよい。
図9は、コンフィグレーションレジスタを書き込むコンフィグレーションアクセス要求を供給する処理900の一例を例示する。処理900は、PCIを、周辺デバイスにより実装され得るバスプロトコルの一例として使用して例示される。周辺デバイスはPCIエミュレーションシステムを実装していてよい。PCIのエミュレーションシステムにより、周辺デバイスは1つ以上のPCIデバイス及び/または機能をエミュレートすることができ得る。処理900は、周辺デバイスが様々なバスプロトコルを使用するエミュレーションシステムを使用している場合などでは、他のバスプロトコルで実施されてよい。
ステップ902では、周辺デバイスのPCIコアはPCIコンフィグレーションアクセス要求をルートコンプレックスから受信してよい。コンフィグレーションアクセス要求はコンフィグレーションアクセス要求のターゲットを識別する情報を含んでよい。識別情報は、周辺デバイスがコンフィグレーションアクセス要求を受け入れ及び供給すべきかどうかを示してよい。周辺デバイスは複数の周辺デバイス及び/または機能をエミュレートしてよい。係る実装では、周辺デバイスは、2つ以上の周辺デバイス及び/または機能に対するコンフィグレーションアクセス要求を受け入れてよい。
ステップ904では、周辺デバイスのPCIコアは、PCIコンフィグレーションアクセス要求を周辺デバイスのコンフィグレーション管理モジュールに送信してよい。コンフィグレーション管理モジュールはコンフィグレーションアクセス要求のログを保持してよい。ログは周辺デバイスにより受信されたコンフィグレーションアクセス要求の記録をつけてよい。
ステップ906では、コンフィグレーション管理モジュールは、PCIコンフィグレーションアクセス要求がネイティブコンフィグレーション空間以外のコンフィグレーション空間をターゲットにすることを判断してよい。ネイティブコンフィグレーション空間は、エミュレートが不要及び/または不都合であり得るバス速度選択などの、基本機能性に対するコンフィグレーションレジスタを含んでよい。ネイティブコンフィグレーション空間以外のコンフィグレーション空間はエミュレートされてよい。エミュレートされたコンフィグレーション空間はエミュレートされたコンフィグレーションヘッダを使用して表わされてよい。
ステップ908では、周辺デバイスのコンフィグレーション管理モジュールは低遅延通知(例えば、割り込み要求)を周辺デバイスのエミュレーションモジュールに送信してよい。割り込みは周辺デバイスのエミュレーションモジュールに、コンフィグレーションアクセス要求が受信されたこと、及び/またはエミュレーションモジュールがコンフィグレーションアクセス要求を供給すべきことを通知してよい。
ステップ910では、周辺デバイスのエミュレーションモジュールは、(例えば、コンフィグレーション空間エミュレーションソフトウェアを実行する)割り込み要求に応答してよい。エミュレーションモジュールはエミュレートされたコンフィグレーションをエミュレートされたコンフィグレーション空間から検索してよい。いくつかの実装では、周辺デバイスは1つ以上の周辺デバイス及び/または機能をエミュレートしていてよい。係る実装では、コンフィグレーションアクセス要求は、ターゲットになるエミュレートされた周辺デバイス及び/または機能の識別を含んでよい。さらに、コンフィグレーション空間エミュレーションソフトウェアは、ターゲットになるエミュレートされた周辺デバイス及び/または機能に対するコンフィグレーションを検索してよい。いくつかの実装では、エミュレートされたコンフィグレーション空間はDRAMに記憶されるか、内部でエミュレートされ得る。電源喪失の間、エミュレートされたコンフィグレーション空間がメモリに保持されるよう、永続メモリをさらに使用してエミュレートされたコンフィグレーション空間を記憶し得る。いくつかの実施形態では、永続メモリに記憶されたエミュレートされたコンフィグレーション空間は、起動時にDRAMまたはローカルメモリにロードすることができ、エミュレートションコンフィグレーション空間へのより高速なアクセスを提供する。いくつかの実装では、コンフィグレーション空間エミュレーションソフトウェアが分離された環境で実行される。分離された環境では、コンフィグレーション空間エミュレーションソフトウェアは、他のソフトウェアによる割り込みまたは干渉内で、セキュアに実行することができ得る。
ステップ912では、PCIコンフィグレーションアクセス要求は、エミュレートされたコンフィグレーションヘッダを使用して供給されてよい。いくつかの実装では、コンフィグレーションアクセス要求はコンフィグレーション書き込み要求であってよい。係る実装では、処理900はステップ914を含んでよく、ステップ914では、コンフィグレーションアクセス要求の供給は、エミュレートされたコンフィグレーションを更新することを含んでよい。
図7〜9に例示される処理の一部または全て(または本明細書に記載される任意の他の処理、または変形形態、及び/またはその組み合わせ)は実行可能な命令により構成される1つ以上のコンピュータシステムの制御下で行われてもよく、ハードウェアまたはその組み合わせにより、1つ以上のプロセッサ上で集合的に実行されるコード(例えば、実行可能な命令、1つ以上のコンピュータプログラムまたは1つ以上のアプリケーション)として実装されてよい。コードは、例えば、1つ以上のプロセッサにより実行可能な複数の命令を備えるコンピュータプログラムの形態でコンピュータ可読記憶媒体上に記憶されてよい。コンピュータ可読記憶媒体は非一時的であってよい。一般的に、本明細書に開示される任意の構成要素、システム及び周辺機器は、ハードウェアまたはハードウェアとソフトウェアとの組み合わせで部分的にまたは完全に実装され得る。ハードウェアは、システムオンチップ(SoC)、特定用途向け集積回路(ASIC)、プロセッサまたはフィールドプログラマブルゲートアレイ(FPGA)などの電子回路を含み得る。
VI.コンピュータシステム
図10は、少なくとも1つの実施形態例に係る、1つ以上のネットワークを介して接続される1つ以上のサービスプロバイダコンピュータ及び/またはユーザデバイスを含む、本明細書に記載の特徴及びシステムのためのアーキテクチャの一例を例示する。図1〜14に記載のデバイスは、図10に記載のコンピューティングデバイスの1つ以上の構成要素を使用してよく、あるいは図10に記載の1つ以上のコンピューティングデバイスを表してよい。例示のアーキテクチャ1000では、1人以上のユーザ1002はユーザコンピューティングデバイス1004(1)〜(N)を使用し、1つ以上のネットワーク1008を介して、アプリケーション1006(例えば、ウェブブラウザまたはモバイルデバイスアプリケーション)にアクセスしてよい。いくつかの態様では、コンピューティングリソースサービスまたはサービスプロバイダによりアプリケーション1006をホスト、管理及び/または提供してよい。1つ以上のサービスプロバイダコンピュータ1010は、ユーザ(複数可)1002が相互作用し得るユーザデバイス1004上で実行するように構成されるネイティブアプリケーションを提供してよい。サービスプロバイダコンピュータ(複数可)1010は、いくつかの例では、クライアントエンティティ、低遅延データ記憶、耐久性のあるデータ記憶、データアクセス、管理、仮想化、クラウドベースソフトウェアソリューション、電子コンテンツ性能管理等などであるが、これらに限定されないコンピューティングリソースを提供してよい。サービスプロバイダコンピュータ(複数可)1010はさらに、ウェブホスティング、コンピュータアプリケーション開発及び/または実装プラットフォーム、前述の組み合わせなどを、ユーザ(複数可)1002に提供するように動作可能であってよい。サービスプロバイダコンピュータ(複数可)1010は、いくつかの例では、1つ以上のサードパーティコンピュータ1012と通信してよい。
いくつかの例では、ネットワーク(複数可)1008は、多くの様々なタイプのネットワーク、例えば、ケーブルネットワーク、インターネット、無線ネットワーク、セルラネットワークならびに他のプライベート及び/またはパブリックネットワークの任意の1つまたは組み合わせを含んでよい。例示の例はネットワーク(複数可)1008上でアプリケーション1006にアクセスしているユーザ(複数可)1002を表す一方、記載された技法は、ユーザ(複数可)1002がユーザデバイス(複数可)1004を介して、固定電話上で、キオスクを介して、または任意の他の様式で、サービスプロバイダコンピュータ(複数可)1010と相互作用する例に、同様に適用されてよい。記載された技法が、非クライアント/サーバ配置(例えば、ローカルに記憶されたアプリケーション等)だけでなく、他のクライアント/サーバ配置(例えば、セットトップボックス等)に適用されてよいことがさらに留意される。
簡単に上述した通り、アプリケーション1006により、ユーザ(複数可)1002は、ウェブコンテンツ(例えば、ウェブページ、音楽、ビデオ等)にアクセスすることなど、サービスプロバイダコンピュータ(複数可)1010と相互作用することが可能になり得る。サーバのクラスタ内またはサーバファームとして配置され得るサービスプロバイダコンピュータ(複数可)1010は、アプリケーション1006及び/またはクラウドベースのソフトウェアサービスをホストしてよい。他のサーバアーキテクチャはさらに、アプリケーション1006をホストするためにも使用されてよい。アプリケーション1006は、多くのユーザ1002からの要求を処理し、それに応答して、種々のアイテムウェブページを供給することが可能であってよい。アプリケーション1006は、ソーシャルネットワーキングサイト、オンライン小売店、情報サイト、ブログサイト、検索エンジンサイト、ニュース及びエンターテイメントサイトなどを含む、ユーザ相互作用をサポートする任意のタイプのウェブサイトを提供し得る。上述の通り、記載された技法は、ユーザデバイス(複数可)1004上で実行している他のアプリケーションなどのアプリケーション1006の外部で同様に実施され得る。
ユーザデバイス(複数可)1004は、携帯電話、スマートフォン、携帯情報端末(PDA)、ラップトップコンピュータ、デスクトップコンピュータ、シンクライアントデバイス、タブレットPC、電子書籍(e−book)リーダ等であるがそれらに限定されない、任意のタイプのコンピューティングデバイスであってよい。いくつかの例において、ユーザデバイス(複数可)1004は、ネットワーク(複数可)1008を介して、または他のネットワーク接続を介して、サービスプロバイダコンピュータ(複数可)1010と通信状態にあってよい。代替的に、ユーザデバイス(複数可)1004は、サービスプロバイダコンピュータ(複数可)1010により管理されるか、制御されるか、別様にはその一部である分散システムの一部(例えば、サービスプロバイダコンピュータ1010に統合されるコンソールデバイス)であってよい。
1つの例示的な構成において、ユーザデバイス(複数可)1004は、少なくとも1つのメモリ1014及び1つ以上の処理ユニット(またはプロセッサ(複数可)1016)を含んでよい。プロセッサ(複数可)1016は、ハードウェア、コンピュータ実行可能命令、ファームウェアまたはそれらの組み合わせにおいて適切に実装されてよい。プロセッサ(複数可)1016のコンピュータ実行可能命令またはファームウェア実装は、記載された種々の機能を行うために任意の適切なプログラミング言語で書かれたコンピュータ実行可能またはマシン実行可能命令を含んでよい。ユーザデバイス(複数可)1004はさらに、ユーザデバイス(複数可)1004に関連する地理的位置情報を提供及び/または記録するための地理的位置デバイス(例えば、全地球測位システム(GPS)デバイスなど)を含んでよい。
メモリ1014は、プロセッサ(複数可)1016上でロード可能及び実行可能であるプログラム命令、ならびに、これらのプログラムの実行中に生成されたデータを記憶してよい。ユーザデバイス(複数可)1004の構成及びタイプに応じて、メモリ1014は揮発性(ランダムアクセスメモリ(RAM)など)及び/または不揮発性(読み出し専用メモリ(ROM)、フラッシュメモリ等など)であってよい。ユーザデバイス(複数可)1004はさらに、磁気ストレージ、光学ディスク及び/またはテープストレージを含むがそれらに限定されない、追加の取り外し可能ストレージ及び/または取り外し不可能ストレージを含んでよい。ディスクドライブ及びそれらの関連するコンピュータ可読媒体は、コンピューティングデバイスに、コンピュータ可読命令、データ構造、プログラムモジュール及び他のデータの不揮発性ストレージを提供してよい。いくつかの実装において、メモリ1014は、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)、またはROMなどの複数の異なるタイプのメモリを含んでよい。
さらに詳細にメモリ1014のコンテンツに注目すると、メモリ1014は、ブラウザアプリケーション1006または専用アプリケーション(例えば、スマートフォンアプリケーション、タブレットアプリケーション等)を介するなど、少なくとも1人のユーザが提供する入力要素または電子サービスウェブページを含む、本明細書に開示された特徴を実装するためのオペレーティングシステムと、1つ以上のアプリケーションプログラムまたはサービスとを含んでよい。ブラウザアプリケーション1006は、サービスプロバイダコンピュータ(複数可)1010と相互作用するためのウェブサイトまたは他のインターフェースを受信、記憶及び/または表示するように構成されてよい。追加的に、メモリ1014は、アクセス認証情報及び/または他のユーザ情報(例えば、ユーザID、パスワード及び/または他のユーザ情報であるが、これらに限定されない)を記憶してよい。いくつかの例では、ユーザ情報は、アカウントアクセス要求を認証するための情報(例えば、装置ID、クッキー、IPアドレス、位置などであるが、これらに限定されない)を含んでよい。追加的に、ユーザ情報は、セキュリティ質問に対してユーザが提供した応答またはユーザデバイス1004により得られる地理的位置を含んでよい。
いくつかの態様では、サービスプロバイダコンピュータ(複数可)1010はさらに、任意のタイプのコンピューティングデバイスであってよく、以下に限定されないが、例えば、携帯電話、スマートフォン、携帯情報端末(PDA)、ラップトップコンピュータ、デスクトップコンピュータ、サーバコンピュータ、シンクライアントデバイス、タブレットPC等である。追加的に、いくつかの実施形態では、サービスプロバイダコンピュータ(複数可)1010は、ホスト型コンピューティング環境に実装された1つ以上の仮想マシンにより実行されることに留意すべきである。ホスト型コンピューティング環境は、1つ以上の迅速に提供及び解放されるコンピューティングリソースを含んでよく、コンピューティングリソースは、コンピューティングデバイス、ネットワーキングデバイス及び/またはストレージデバイスを含んでよい。ホスト型コンピューティング環境はさらに、クラウドコンピューティング環境と呼ばれてよい。いくつかの例では、サービスプロバイダコンピュータ(複数可)1010は、ユーザデバイス(複数可)1004及び/または他のサービスプロバイダと、ネットワーク1008を介して、または他のネットワーク接続を介して通信状態にあってよい。サービスプロバイダコンピュータ(複数可)1010は、1つ以上のサーバを含んでよく、おそらくクラスタ内に、サーバファームとして、または互いに関連しない別個のサーバとして、配置される。これらのサーバは、本明細書で記載したキーワード分類及び評価機能サービスを、統合された分散コンピューティング環境の一部として実施するように構成されてよい。
1つの例示的な構成において、サービスプロバイダコンピュータ(複数可)1010は、少なくとも1つのメモリ1018及び1つ以上の処理ユニット(またはプロセッサ(複数可)1020)を含んでよい。プロセッサ(複数可)1020は、ハードウェア、コンピュータ実行可能命令、ファームウェアまたはそれらの組み合わせにおいて適切に実装されてよい。プロセッサ(複数可)1020のコンピュータ実行可能命令またはファームウェア実装は、記載された種々の機能を行うために任意の適切なプログラミング言語で書かれたコンピュータ実行可能またはマシン実行可能命令を含んでよい。
いくつかの例では、ハードウェアプロセッサ(複数可)1020はシングルコアプロセッサまたはマルチコアプロセッサであってよい。マルチコアプロセッサは同じプロセッサ内の複数の処理ユニットを含んでよい。いくつかの実施形態では、マルチコアプロセッサは、バス及びマルチコア間の第2または第3レベルのキャッシュなどの特定のリソースを共有してよい。いくつかの例では、シングルまたはマルチコアプロセッサの各コアはさらに、複数の実行論理プロセッサ(またはスレッド)を含んでよい。(複数の論理プロセッサをサポートする)係るコアにおいて、実行パイプラインのいくつかのステージ及びさらに低レベルのキャッシュはさらに共有されてよい。
メモリ1018は、プロセッサ(複数可)1020上でロード可能及び実行可能であるプログラム命令、ならびに、これらのプログラムの実行中に生成されたデータを記憶してよい。サービスプロバイダコンピュータ(複数可)1010の構成及びタイプに応じて、メモリ1018は揮発性(RAMなど)及び/または不揮発性(ROM、フラッシュメモリ等など)であってよい。サービスプロバイダコンピュータ(複数可)1010またはサーバはさらに、追加のストレージ1022を含んでよく、ストレージ1022は取り外し可能ストレージ及び/または取り外し不可能ストレージを含んでよい。追加のストレージ1022は、磁気ストレージ、光学ディスク及び/またはテープストレージを含んでよいが、これらに限定されない。ディスクドライブ及びそれらの関連するコンピュータ可読媒体は、コンピューティングデバイスのためのコンピュータ可読命令、データ構造、プログラムモジュール及び他のデータの不揮発性ストレージを提供してよい。いくつかの実装において、メモリ1018は、SRAM、DRAMまたはROMなどの複数の異なるタイプのメモリを含んでよい。
メモリ1018、取り外し可能及び取り外し不可能の両方の追加のストレージ1022は全て、コンピュータ可読記憶媒体の例である。例えば、コンピュータ可読記憶媒体は、情報(例えば、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータ)の記憶のための任意の方法または技術で実装された揮発性または不揮発性、取り外し可能または取り外し不可能な媒体を含んでよい。メモリ1018及び追加のストレージ1022は全て、コンピュータ記憶媒体の例である。サービスプロバイダコンピュータ(複数可)1010に存在し得る追加タイプのコンピュータ記憶媒体としては、PRAM、SRAM、DRAM、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD−ROM、DVDもしくは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または任意の他の媒体であって、所望の情報を記憶するために使用できるもの、及びサービスプロバイダコンピュータ(複数可)1010がアクセスできるものを含んでよいが、これらに限定されない。前述の任意の組み合わせはさらに、コンピュータ可読媒体の範囲内に含まれるべきである。
代替的に、コンピュータ可読通信媒体は、コンピュータ可読命令、プログラムモジュールまたはデータ信号内で送信される他のデータ(例えば搬送波または他の送信)を含んでよい。しかしながら、本明細書で使用する場合、コンピュータ可読記憶媒体にはコンピュータ可読通信媒体は含まれない。
サービスプロバイダコンピュータ(複数可)1010はさらに、通信接続(複数可)1024であって、サービスプロバイダコンピュータ(複数可)1010が、記憶されたデータベース、別のコンピューティングデバイスもしくはサーバ、ユーザ端末及び/またはネットワーク(複数可)1008上の他のデバイスと通信することを可能にする通信接続(複数可)1024を包含してよい。サービスプロバイダコンピュータ(複数可)1010はさらに、入出力デバイス(複数可)1026(例えば、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス、ディスプレイ、スピーカ、プリンタなど)を含んでよい。
メモリ1018は、オペレーティングシステム1028、1つ以上のデータストア1030及び/または管理バッファ1032及びロギングバッファ1040を含む本明細書に開示の特徴を実施するための1つ以上のアプリケーションプログラムもしくはサービスを含んでよい。本明細書に記載のモジュールは、ソフトウェアモジュール、ハードウェアモジュールまたはその適切な組み合わせでよい。モジュールがソフトウェアモジュールの場合、モジュールは非一時的なコンピュータ可読媒体上に具現化され、本明細書に記載の任意のコンピュータシステムのプロセッサにより処理され得る。記載の処理及びアーキテクチャは、任意のユーザ相互作用の前に、リアルタイムモードまたは非同時モードのいずれかで行われ得ることに留意すべきである。モジュールは図10に提示された様式で構成されてもよく、及び/または本明細書に記載の機能は個別のモジュールとして存在する1つ以上のモジュールにより提供することができ、及び/または本明細書に記載のモジュール機能は複数のモジュールにわたり広がり得る。
図11は、種々の実施形態に係る、態様を実施するための環境例1100の態様を例示する。理解される通り、説明のためにウェブベースの環境が使用されるが、適切であれば、種々の実施形態を実装するために様々な環境が使用され得る。環境は、電子クライアントデバイス1102を含み、このデバイスは、適切なネットワーク1104上で要求、メッセージまたは情報を送信及び受信するように、ならびにデバイスのユーザに情報を返すように動作可能な、任意の適切なデバイスを含み得る。係るクライアントデバイスの例には、パーソナルコンピュータ、携帯電話、ハンドヘルドメッセージングデバイス、ラップトップコンピュータ、セットトップボックス、携帯情報端末、電子書籍リーダなどが含まれる。ネットワークは、イントラネット、インターネット、セルラネットワーク、ローカルエリアネットワークもしくは任意の他の係るネットワーク、またはそれらの組み合わせを含む、任意の適切なネットワークを含み得る。係るシステムに使用される構成要素は、選択されるネットワーク及び/または環境のタイプに少なくとも部分的に依存し得る。係るネットワークを介した通信のためのプロトコル及び構成要素は既知であり、本明細書では詳細に述べない。ネットワーク上の通信は、有線接続または無線接続及びそれらの組み合わせによって使用可能になり得る。本例では、ネットワークはインターネットを含み、環境は要求を受信及びそれに応答するコンテンツの供給を行うウェブサーバ1106を含むが、他のネットワークの場合、同様の目的を供給する代替デバイスが使用できることが当業者には明らかであろう。
例示の環境は、少なくとも1つのアプリケーションサーバ1108及びデータストア1110を含む。連結されるかまたは別様に構成可能であり、適切なデータストアからデータを取得するなどのタスクを行うために相互作用可能な、いくつかのアプリケーションサーバ、層または他の要素、処理もしくは構成要素が存在し得ることを理解すべきである。本明細書で使用される場合、用語「データストア」は、任意の標準型、分散型またはクラスタ型の環境において、任意の組み合わせ及び数のデータサーバ、データベース、データストレージデバイス及びデータ記憶媒体を含んでよい、データの記憶、アクセス及び検索が可能な任意のデバイスまたはデバイスの組み合わせを指す。アプリケーションサーバは、クライアントデバイスに対する1つ以上のアプリケーションの態様を実行し、アプリケーションに対する大部分のデータアクセス及びビジネス論理を処理するために、必要に応じてデータストアに統合するための、任意の適切なハードウェア及びソフトウェアを含み得る。アプリケーションサーバは、データストアと協働してアクセス制御サービスを提供し、ユーザに転送されるテキスト、グラフィックス、オーディオ及び/またはビデオなどのコンテンツを生成することが可能であり、これをウェブサーバによって、本例ではハイパーテキストマークアップ言語(「HTML」)、拡張可能マークアップ言語(XML)または別の適切な構造言語の形態でユーザに供給してよい。全ての要求及び応答の処理、ならびにクライアントデバイス1102とアプリケーションサーバ1108との間のコンテンツの送達は、ウェブサーバによって処理可能である。本明細書で述べられる構造化コードは、本明細書の他の場所で述べられるような任意の適切なデバイスまたはホストマシン上で実行可能であるため、ウェブサーバ及びアプリケーションサーバは必須ではなく単なる例示の構成要素であることを理解すべきである。
データストア1110は、特定の態様に関するデータを記憶するための、いくつかの個別のデータテーブル、データベースまたは他のデータ記憶機構及び媒体を含み得る。例えば、例示のデータストアは、製造データ1112及びユーザ情報1116を記憶するための機構を含み、これを使用して製造側にコンテンツを供給し得る。データストアはさらに、ログデータ1114を記憶するための機構を含むように示されており、これは報告、分析または他の係る目的に使用され得る。データストアに記憶する必要があり得る多くの他の態様が存在し得ることを理解すべきであり、例えば、適切であるものとして上記で列挙した機構のいずれか、またはデータストア1110の追加の機構に記憶可能なページイメージ情報及びアクセス権情報などに対してのものである。データストア1110は、それに関連付けられた論理を介してアプリケーションサーバ1108から命令を受信し、それに応答してデータの取得、更新または別様の処理を行うように、動作可能である。一例では、ユーザはあるタイプのアイテムに対する検索要求を提出する場合がある。この場合、データストアは、ユーザの識別を検証するためにユーザ情報にアクセスする可能性があり、カタログ詳細情報にアクセスしてそのタイプのアイテムに関する情報を取得することができる。次いで、ユーザがユーザデバイス1102上でブラウザを介して見ることができるウェブページ上に列挙された結果にあるなどの情報をユーザに返すことができる。対象の特定アイテムに関する情報は、ブラウザの専用ページまたはウィンドウで見ることができる。
各サーバは、通常、そのサーバの一般的な管理及び動作に関する実行可能プログラム命令を提供するオペレーティングシステムを含むことになり、通常、サーバのプロセッサによって実行された場合、サーバがその目的機能を行えるようにする命令を記憶するコンピュータ可読記憶媒体(例えば、ハードディスク、ランダムアクセスメモリ、読み出し専用メモリ等)を含むことになる。オペレーティングシステム及びサーバの一般的な機能性に対する好適な実装は既知であるか、または市販されており、当業者によって、特に本明細書における開示に鑑みて、容易に実装される。
一実施形態における環境は、1つ以上のコンピュータネットワークまたは直接接続を使用して、通信リンクを介して相互接続されるいくつかのコンピュータシステム及び構成要素を利用する、分散型コンピューティング環境である。しかしながら、当業者であれば、係るシステムが、図11に示されるよりも少ないかまたは多い数の構成要素を有するシステム内で、等しく良好に動作可能であることを理解されよう。したがって、図11のシステム1100の図示は、本来は例示的なものであり、本開示の範囲を限定するものと解釈されるべきではない。
種々の実施形態は、いくつかの場合、任意の多数のアプリケーションを動作するように使用可能な1つ以上のユーザコンピュータ、コンピューティングデバイスまたは処理デバイスを含み得る、多種多様な動作環境でさらに実施できる。ユーザデバイスまたはクライアントデバイスは、標準オペレーティングシステムを実行するデスクトップまたはラップトップコンピュータなどの任意の多数の汎用パーソナルコンピュータ、ならびにモバイルソフトウェアを実行し、多数のネットワーキングプロトコル及びメッセージングプロトコルをサポートすることが可能な、セルラ式、無線及びハンドヘルドのデバイスのうちのいずれかを含み得る。係るシステムはさらに、開発及びデータベース管理などの目的で多様な市販のオペレーティングシステム及び他の既知のアプリケーションのいずれかを実行する、多数のワークステーションを含み得る。これらのデバイスは、ダミー端末、シンクライアント、ゲームシステム及びネットワークを介して通信可能な他のデバイスなどの、他の電子デバイスを含み得る。
ほとんどの実施形態は、トランスミッションコントロールプロトコル/インターネットプロトコル(「TCP/IP」)、開放型システム間相互接続(「OSI」)、ファイルトランスファプロトコル(「FTP」)、ユニバーサルプラグアンドプレイ(「UpnP」)、ネットワークファイルシステム(「NFS」)、共通インターネットファイルシステム(「CIFS」)及びAppleTalk(登録商標)などの、多様な市販のプロトコルのいずれかを使用する通信をサポートするための、当業者によく知られた少なくとも1つのネットワークを利用する。例えば、ネットワークは、ローカルエリアネットワーク、ワイドエリアネットワーク、仮想プライベートネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話網、赤外線ネットワーク、無線ネットワーク及びそれらの任意の組み合わせとなり得る。
ウェブサーバを利用する実施形態では、ウェブサーバは、ハイパーテキストトランスファプトロコル(「HTTP」)サーバ、FTPサーバ、共通ゲートウェイインターフェース(「CGI」)サーバ、データサーバ、Java(登録商標)サーバ及びビジネスアプリケーションサーバを含む、多様なサーバまたは中間層アプリケーションのいずれかを実行することができる。サーバ(複数可)はさらに、Java(登録商標)、C、C#もしくはC++などの任意のプログラミング言語、またはPerl、PythonもしくはTCLなどの任意のスクリプト言語、ならびにそれらの組み合わせで記述された、1つ以上のスクリプトまたはプログラムとして実装してよい、1つ以上のウェブアプリケーションを実行することなどにより、ユーザデバイスからの要求に応答して、プログラムまたはスクリプトを実行可能であってよい。サーバ(複数可)はさらに、Oracle(登録商標)、Microsoft(登録商標)、Sybase(登録商標)及びIBM(登録商標)から市販されているものを限定なしに含む、データベースサーバを含んでよい。
環境はさらに、前述のように、多様なデータストアならびに他のメモリ及び記憶媒体を含み得る。これらは、1つ以上のコンピュータに対してローカルな(及び/または内部に常駐した)、あるいはネットワークにわたるコンピュータのいずれかまたは全てからリモートの、記憶媒体上などの、多様な位置に常駐可能である。実施形態の特定のセットでは、情報は当業者によく知られたストレージエリアネットワーク(「SAN」)内に常駐してよい。同様に、コンピュータ、サーバまたは他のネットワークデバイスに寄与する機能を行うために必要な任意のファイルは、適宜、ローカル及び/またはリモートに記憶されてよい。システムがコンピュータ化されたデバイスを含む場合、それぞれの係るデバイスは、バスを介して電気的に結合し得るハードウェア要素を含むことが可能であり、要素は、例えば、少なくとも1つの中央処理ユニット(CPU)、少なくとも1つの入力デバイス(例えば、マウス、キーボード、コントローラ、タッチスクリーンまたはキーパッド)、及び少なくとも1つの出力デバイス(例えば、ディスプレイデバイス、プリンタまたはスピーカ)を含み得る。係るシステムはさらに、ディスクドライブ、光学ストレージデバイス及びランダムアクセスメモリ(「RAM」)または読み出し専用メモリ(「ROM」」などのソリッドステートストレージデバイスなどの、1つ以上のストレージデバイス、ならびに取り外し可能な媒体デバイス、メモリカード、フラッシュカード等を含んでよい。
係るデバイスはさらに、上記の通り、コンピュータ可読記憶媒体リーダ、通信デバイス(例えば、モデム、ネットワークカード(無線または有線)、赤外線通信デバイス等)及び作業メモリを含み得る。コンピュータ可読記憶媒体リーダは、リモート、ローカル、固定及び/または取り外し可能ストレージデバイスを表す、コンピュータ可読記憶媒体、ならびにコンピュータ可読情報を一時的及び/またはより永続的に包含する、記憶する、伝達する及び検索するための記憶媒体に、接続されるか、またはそれらを受信するように構成可能である。システム及び種々のデバイスはさらに、通常、クライアントアプリケーションまたはウェブブラウザなどのオペレーティングシステム及びアプリケーションプログラムを含む、少なくとも1つの作業メモリデバイス内に配置された、多数のソフトウェアアプリケーション、モジュール、サービスまたは他の要素を含むことになる。代替的な実施形態は、上記からの多数の変形形態を有してよいことを理解すべきである。例えば、カスタマイズされたハードウェアはさらに、ハードウェア、ソフトウェア(アプレットなどのポータブルソフトウェアを含む)またはその両方で使用される場合があり、及び/または特定の要素をハードウェア、ソフトウェア(アプレットなどのポータブルソフトウェアを含む)またはその両方で実装する場合がある。さらに、ネットワーク入出力デバイスなどの他のコンピューティングデバイスへの接続を用いてよい。
コードまたはコードの一部を包含するための記憶媒体及びコンピュータ可読媒体は、RAM、ROM、電気的に消去可能なプログラム可能読み出し専用メモリ(「EEPROM」)、フラッシュメモリもしくは他のメモリ技術、コンパクトディスク読み出し専用メモリ(「CD−ROM」)、デジタル多用途ディスク(DVD)もしくは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイスを含む、コンピュータ可読命令、データ構造、プログラムモジュールもしくは他のデータなどの情報の記憶及び/または伝達用の任意の方法または技術で実装された、揮発性及び不揮発性の媒体、取り外し可能及び取り外し不可能な媒体などであるがこれらに限定されない記憶媒体及び通信媒体、あるいは所望の情報を記憶するために使用可能な、かつシステムデバイスによるアクセスが可能な、任意の他の媒体を含む、当分野で知られているかまたは使用されている任意の適切な媒体を含み得る。当業者であれば、本明細書で提供された開示及び教示に基づき、種々の実施形態を実装するための他の手段及び/または方法を理解されよう。
したがって、本明細書及び図面は、限定的ではなく例示的な意味であるとみなされる。しかしながら、特許請求の範囲に記載された本開示のより広義な趣旨及び範囲から逸脱することなく、本明細書に対する種々の修正及び変更が行われ得ることは明白であろう。
開示の実施形態は以下の条項を考慮して記載され得る。
1.PCIデバイスのPCIコアにより、PCIコンフィグレーションアクセス要求をPCIルートコンプレックスから受信することと、
前記PCIコアにより、前記PCIコンフィグレーションアクセス要求を、前記PCIデバイスのコンフィグレーション管理モジュールに送信することと、
前記コンフィグレーション管理モジュールにより、前記PCIコンフィグレーションアクセス要求が、前記PCIコアのネイティブコンフィグレーション空間以外のコンフィグレーション空間に対すると判断することと、
前記コンフィグレーション管理ハードウェアにより、前記PCIコンフィグレーションアクセス要求に関連する割り込み要求を、前記PCIデバイスのエミュレーションモジュールに送信することと、
前記割り込み要求に応答して、前記エミュレーションモジュールにより、コンフィグレーション空間エミュレーションソフトウェアを実行して、エミュレートされたコンフィグレーション空間からエミュレートされたコンフィグレーションを検索することと、
前記PCIコンフィグレーションアクセス要求を前記エミュレートされたコンフィグレーションを使用して供給することと
を備える、ペリフェラルコンポーネントインターコネクト(PCI)コンフィグレーション空間をエミュレートするための方法。
2.前記PCIコンフィグレーションアクセス要求を供給することは、前記PCIコンフィグレーションアクセス要求がコンフィグレーション読み出し要求の場合に、前記エミュレートされたコンフィグレーションを、前記PCIルートコンプレックスに送信することを含む、条項1に記載の方法。
3.前記PCIコンフィグレーションアクセス要求を供給することはさらに、前記エミュレートされたコンフィグレーションを変更することを含む、条項2に記載の方法。
4.前記PCIコンフィグレーションアクセス要求を供給することは、前記PCIコンフィグレーションアクセス要求がコンフィグレーション書き込み要求の場合に、前記エミュレートされたコンフィグレーションを更新することを含む、先行条項のいずれかに記載の方法。
5.前記エミュレートされたコンフィグレーション空間は複数のPCIデバイスに対してエミュレートされたコンフィグレーションを含む、先行条項のいずれかに記載の方法。
6.前記エミュレートされたコンフィグレーション空間はDRAMに記憶される、先行条項のいずれかに記載の方法。
7.前記エミュレートされたコンフィグレーション空間は永続メモリに記憶される、条項1〜5のいずれかに記載の方法。
8.前記コンフィグレーション空間エミュレーションソフトウェアが分離された環境で実行される、先行条項のいずれかに記載の方法。
9.エミュレーション構成要素と、
1セットのネイティブコンフィグレーションレジスタを含むバスインターフェースコアと、
前記バスインターフェースコアに連結されるコンフィグレーション管理構成要素であって、
前記バスインターフェースコアからコンフィグレーションアクセス要求を受信し、
前記エミュレーション構成要素に、エミュレートされたコンフィグレーション空間からエミュレートされたコンフィグレーションを検索するよう要求し、
前記コンフィグレーションアクセス要求を前記エミュレートされたコンフィグレーションを使用して供給するように構成される、前記コンフィグレーション管理構成要素
とを備える装置。
10.前記エミュレートされたコンフィグレーション空間は複数の周辺デバイスに対してエミュレートされたコンフィグレーションを含む、条項9に記載の装置。
11.前記エミュレートされたコンフィグレーションは物理機能リソースを表す、条項9または10に記載の装置。
12.前記エミュレートされたコンフィグレーションは仮想機能リソースを表す、条項9〜11のいずれかに記載の装置。
13.前記エミュレートされたコンフィグレーションは、分離された環境で実行するコンフィグレーションエミュレーションソフトウェアの実行を介して検索される、条項9〜12のいずれかに記載の装置。
14.前記コンフィグレーション管理構成要素は、前記コンフィグレーションアクセス要求の前記進捗を追跡するステータスレジスタを含み、前記ステータスレジスタは前記コンフィグレーションアクセス要求を供給することの完了後に更新される、条項9〜13のいずれかに記載の装置。
15.前記エミュレーション構成要素はDRAMに連結され、前記エミュレートされたコンフィグレーション空間は前記DRAMに記憶される、条項9〜14のいずれかに記載の装置。
16.前記エミュレーション構成要素は永続メモリに連結され、前記エミュレートされたコンフィグレーション空間は前記永続メモリに記憶される、条項9〜15のいずれかに記載の装置。
17.前記エミュレートされたコンフィグレーション空間はテキストファイルとして記憶される、条項9〜16のいずれかに記載の装置。
18.前記エミュレーション構成要素の少なくとも1つ、前記バスインターフェースコア及び前記コンフィグレーション管理構成要素は電子回路を備える、条項9〜17のいずれかに記載の装置。
19.前記装置は、システムオンチップ(SoC)、特定用途向け集積回路(ASIC)、プロセッサまたはフィールドプログラマブルゲートアレイ(FPGA)に実装される、条項9〜18のいずれかに記載の装置。
20.周辺デバイスによりコンフィグレーション空間をエミュレートするための方法であり、
前記周辺デバイスにより、コンフィグレーションアクセス要求を受信することと、
前記周辺デバイスにより、前記コンフィグレーションアクセス要求がエミュレートされたコンフィグレーション空間に対すると判断することと、
前記周辺デバイスにより、エミュレートされたコンフィグレーションを前記エミュレートされたコンフィグレーション空間から検索することと、
前記周辺デバイスにより、前記コンフィグレーションアクセス要求を前記エミュレートされたコンフィグレーションを使用して供給すること
とを備える、前記方法。
21.前記エミュレートされたコンフィグレーション空間は複数の周辺デバイス機能に対してエミュレートされたコンフィグレーションを含む、条項20に記載の方法。
22.前記エミュレートされたコンフィグレーションは物理機能リソースを表す、条項20または21に記載の方法。
23.前記エミュレートされたコンフィグレーションは仮想機能リソースを表す、条項20または21に記載の方法。
24.前記コンフィグレーションアクセス要求を供給することは、前記エミュレートされたコンフィグレーションを前記コンフィグレーションアクセス要求のソースに提供することを含む、条項20〜23のいずれかに記載の方法。
25.前記コンフィグレーションアクセス要求を供給することは、前記エミュレートされたコンフィグレーションを更新することを含む、条項20〜24のいずれかに記載の方法。
26.PCIデバイスのPCIコアにより、ホストコンピュータにより発信されたコンフィグレーション読み出し要求を受信することと、
基本PCIケーパビリティ回路を備える前記PCIコアにより、及び管理ハードウェアに対して、前記PCIデバイスコンフィグレーション読み出し要求を送信することと、
前記管理ハードウェアにより、PCIコンフィグレーション読み出し要求が受信されたことをプロセッサに通知することと、
前記プロセッサにより、前記PCIデバイスによりサポートされる前記PCIデバイスの前記拡張PCIケーパビリティを表すエミュレートされたコンフィグレーションヘッダを検索することと、
前記エミュレートされたコンフィグレーションヘッダを前記ホストコンピュータに送信することと、
を備える、拡張ペリフェラルコンポーネントインターコネクト(PCI)ケーパビリティをエミュレートするための方法。
27.前記プロセッサの分離されたソフトウェアコンテンツで実行するファームウェアにより、前記割り込み要求に応答することを備える、条項26に係る方法。
28.前記管理ハードウェアのステータスレジスタを更新することにより、前記エミュレートされたコンフィグレーションヘッダの前記検索の進捗後に追跡することを備える、条項26または27に係る方法。
29.前記エミュレートされたコンフィグレーションヘッダの前記検索は、前記プロセッサにより、コンフィグレーション空間エミュレーションソフトウェアを実行することを備える、条項26〜28のいずれかに係る方法。
30.前記エミュレートされたコンフィグレーションヘッダは仮想機能リソースのステータスを表す、条項26〜29のいずれかに係る方法。
31.前記エミュレートされたコンフィグレーションヘッダは物理機能リソースのステータスを表す、条項26〜29のいずれかに係る方法。
32.前記PCIコアにより、前記エミュレートされたコンフィグレーションヘッダを更新するための、前記ホストコンピュータにより発信されるPCIデバイスコンフィグレーション書き込み要求を受信することと、
前記PCIコアにより、及び前記管理ハードウェアに対して、前記PCIデバイスコンフィグレーション書き込み要求を送信することと、
前記管理ハードウェアにより、前記PCIデバイスコンフィグレーション書き込み要求が受信されたことを、前記プロセッサに通知することと、
前記プロセッサにより、前記エミュレートされたコンフィグレーションヘッダを検索することと、
前記プロセッサにより、前記エミュレートされたコンフィグレーションヘッダを更新することと、
をさらに備える、条項26〜31のいずれかに係る方法。
33.前記更新は仮想機能リソースのステータスを更新することを備える、条項32に係る方法。
34.前記更新は物理機能リソースのステータスを更新することを備える、条項32に係る方法。
35.前記PCIコアにより、新規にエミュレートされたコンフィグレーションヘッダを書き込むための、前記ホストコンピュータにより発信されるPCIデバイスコンフィグレーション書き込み要求を受信することと、
前記PCIコアにより、及び前記管理ハードウェアに対して、前記PCIデバイスコンフィグレーション書き込み要求を送信することと、
前記管理ハードウェアにより、前記PCIデバイスコンフィグレーション書き込み要求が受信されたことを、前記プロセッサに通知することと、
前記プロセッサにより、前記新規にエミュレートされたコンフィグレーションヘッダを前記プロセッサにアクセス可能なメモリに書き込むことと
をさらに備える、条項26〜34のいずれかに係る方法。
36.ホストコンピュータにより発信されるPCIデバイスコンフィグレーション読み出し要求を受信するように構成され、基本PCIケーパビリティ回路を備えるPCIコアと、
前記PCIコアから前記PCIデバイスコンフィグレーション読み出し要求を受信し、前記PCIデバイスコンフィグレーション読み出し要求に応答して、割り込み要求をプロセッサに送信するように構成される、管理ハードウェアと、
前記割り込み要求に応答して、前記PCIデバイスによりサポートされる前記PCIデバイスの前記拡張PCIケーパビリティを表すエミュレートされたコンフィグレーションヘッダを検索するように構成されるプロセッサと
を備える、ペリフェラルコンポーネントインターコネクト(PCI)デバイスであり、
前記PCIデバイスが前記エミュレートされたコンフィグレーションヘッダを前記ホストコンピュータに送信するように構成された、前記PCIデバイス。
37.一度ペリフェラルコンポーネントインターコネクト(PCI)デバイスにより実行されると、前記PCIデバイスに
前記PCIデバイスのPCIコアにより、ホストコンピュータから発信されたPCIデバイスコンフィグレーション読み出し要求を受信するステージと、
基本PCIケーパビリティ回路を備える前記PCIコアにより、及び管理ハードウェアに対して、前記PCIデバイスコンフィグレーション読み出し要求を送信するステージと、
前記管理ハードウェアにより、前記PCIデバイスコンフィグレーション読み出し要求に応答して、割り込み要求をプロセッサに送信するステージと、
前記プロセッサにより、前記割り込み要求に応答して、前記PCIデバイスによりサポートされる前記PCIデバイスの前記拡張PCIケーパビリティを表すエミュレートされたコンフィグレーションヘッダを検索するステージと、
前記エミュレートされたコンフィグレーションヘッダを前記ホストコンピュータに送信するステージと、
を行わせる命令を記憶する、非一時的コンピュータ可読媒体。
他の変形形態は本開示の趣旨の範囲内である。したがって、開示された技法は種々の修正及び代替構成の対象となり得るが、そのうちの特定の例示された実施形態が図面に示されており、上記で詳細に説明された。しかしながら、開示された特定の形態(複数可)に本開示を限定することは意図されておらず、反対に、添付の特許請求の範囲に定義された通り本開示の趣旨及び範囲内にある全ての修正、代替構成及び等価物をカバーするよう意図されていることを理解すべきである。
開示された実施形態を記述する文脈での(特に以下の特許請求の範囲の文脈での)用語「a」及び「an」及び「the」及び同様の指示対象の使用は、本明細書で別段に指示されていない限り、または文脈と明らかに矛盾しない限り、単数形及び複数形の両方をカバーするものと解釈されるものである。用語「comprising(備える)」、「having(有する)」、「including(含む)」及び「containing(包含する)」は、別段に記載されていない限り、非限定(すなわち「含むが限定されない」ことを意味する)用語として解釈されるものである。用語「接続された」は、たとえ何らかの介入が存在していても、部分的または全体的に包含される、連結される、または互いに接合されるとして解釈されるものである。本明細書での値の範囲の列挙は、本明細書で別段に指示されていない限り、範囲内にある各個別の値を個々に指す省略方法として機能することが単に意図されており、各個別の値は、あたかも本明細書に個々に列挙されているかのように本明細書に組み込まれる。本明細書に記載された全ての方法は、本明細書で別段に指示されていない限り、または文脈と明らかに矛盾しない限り、任意の適切な順序で実行可能である。本明細書で提供された任意及び全ての例または例示的な表現(例えば、「などの」)の使用は、本開示の実施形態を単により良く明らかにすることが意図されており、別段に請求されない限り、本開示の範囲に限定を課すものではない。本明細書内のいかなる表現も、本開示の実施に不可欠な任意の請求されない要素を示すものと解釈されるべきではない。
語句「X、YまたはZの少なくとも1つ」などの接続語は、別段の定めのない限り、項目、用語などがX、YまたはZのいずれかまたはそれらの任意の組み合わせ(例えば、X、Y及び/またはZ)であり得ることを提示するために、一般的に使用される文脈で解釈される。したがって、係る接続語は、一般的に、ある実施形態が、X、Y及びZのそれぞれが存在するために、Xの少なくとも1つ、Yの少なくとも1つまたはZの少なくとも1つを必要とすることを示すように意図されるものではなく、そうすべきでもない。
本明細書には、本開示を実施するための発明者に知られた最良の方法を含む、本開示の種々の実施形態が記述されている。前述の説明を読むことで当業者にそれらの実施形態の変形形態が明らかとなってよい。発明者は、当業者が係る変形形態を適切なものとして利用するものと予期し、発明者は、本明細書で具体的に記載された以外の方法で本開示が実施されることを意図する。したがって、本開示は、適用可能な法律によって許可された場合、添付の特許請求の範囲に記載された主題の全ての修正及び等価物を含む。さらに、本明細書で別段に指示されていない限り、または文脈と明らかに矛盾していない限り、全ての可能な変形形態における前述の要素の任意の組み合わせが本開示によって包含される。