仮想プロセッサ セットは仮想プロセッサのコレクションを表し、一部のハイパーカルの入力として使用できます。
構文
typedef struct
{
UINT64 Format;
UINT64 ValidBanksMask;
UINT64 BankContents[];
} HV_VP_SET;
プロセッサ セットには、書式フィールドで指定される 2 つのモードがあります。 "1" 形式のプロセッサ セットは、指定されたパーティションのすべての仮想プロセッサを表します。 "0" 形式のプロセッサ セットは、仮想プロセッサのスパース セットを表します。
| 書式の値 | 動作の設定 |
|---|---|
| 0 | VM のスパース サブセット |
| 1 | すべての VM (パーティションに属) |
スパース仮想プロセッサ セット
次のセクションでは、仮想プロセッサのスパース セットを構築する方法について説明します。
仮想プロセッサの合計セットは、"銀行" と呼ばれる 64 のチャンクに分割されます。 たとえば、プロセッサ 0 から 63 は銀行 0、64 から 127 は銀行 1 などです。
個々のプロセッサを記述するために、その銀行は ValidBanksMask で指定されます。 ValidBanksMask の各ビットは、特定の銀行を表します。
bank = VPindex / 64
ValidBanksMask で設定されるビットごとに、BankContents 配列に 要素が必要です。 この要素は、銀行自体を記述するマスクです。
ValidBankMask のビットが 0 の場合、BanksContents には対応する要素はありません。 さらに、ValidBankMask のビット 1 の場合、BankContents の対応する要素の有効な状態は 0 すべてになります。つまり、この銀行ではプロセッサが指定されていません。
プロセッサ セットの例
パーティションに 200 の VM がある場合、{ 0,5,130 } のセットを指定するとします。
1 つ目の形式は 0 です。これはスパース セットです。 次に、対応する銀行 (したがって ValidBanksMask のセット ビット) は { 0,0,2 } です。 したがって、ValidBanksMask は0x05。
Bank 0 は、その銀行内の VPs を指定するためにビット 0 と 5 を設定します。 そのため、BankContents マスク内の対応する要素は0x21。
ValidBanksMask ではビット 1 が設定されていないので、BankContents には対応する要素はありません。 Bank 2 は VP インデックス 128 から 191 を表します。 インデックス 130 を記述するために、対応するマスクのビット 2 が設定されます。 したがって、BankContents は { 0x21,0x04 } です。