虚拟处理器集表示虚拟处理器的集合,可用作某些虚拟化的输入。
语法
typedef struct
{
UINT64 Format;
UINT64 ValidBanksMask;
UINT64 BankContents[];
} HV_VP_SET;
处理器集具有两种模式,由 "格式" 字段指定。 格式为 "1" 的处理器集表示给定分区的所有虚拟处理器。 格式为 "0" 的处理器集描述一组稀疏的虚拟处理器。
| 格式值 | 设置行为 |
|---|---|
| 0 | VPs 的稀疏子集 |
| 1 | 属于分区的所有 VPs () |
稀疏虚拟处理器集
以下部分介绍如何构造虚拟处理器的稀疏集。
虚拟处理器的总大小分为64块,称为 "bank"。 例如,处理器0-63 位于 bank 0 中,64-127 位于 bank 1,依此类推。
为了描述单个处理器,其 bank 是使用 ValidBanksMask 指定的。 ValidBanksMask 中的每个位代表一个特定的银行。
bank = VPindex / 64
对于使用 ValidBanksMask 设置的每个位,BanksContents 数组中必须有一个元素。 此元素是描述银行本身的掩码。
如果 ValidBankMask 中有一个位为0,则 BanksContents 中没有相应的元素。 此外,对于 ValidBankMask 中的第1位,BanksContents 中对应元素的有效状态可以全为0,这意味着此银行中未指定任何处理器。
处理器集示例
假设分区具有 200 VPs,并希望指定以下集: {0,5130}
首先,格式为0,因为这是一个稀疏集。 接下来,将 (相应的银行,因此 ValidBanksMask) 的设置位为 {0,0,2}。 因此,ValidBanksMask 为0x05。
Bank 0 将位0和5设置为指定该银行内的 VPs。 因此,BankContents 掩码中的相应元素为0x21。
由于未在 ValidBanksMask 中设置位1,因此 BankContents 中没有相应的元素。 Bank 2 代表 VP 索引128-191。 若要描述索引130,请设置相应掩码的第2位。 因此,BankContents 为: {0x21,0x04}。