通过


你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

VM vCore 自定义功能:禁用同步多线程(SMT/HT)和可配置约束核心(预览版)

VM vCore 自定义是一项新的 Azure VM 功能,可更好地控制虚拟机的 CPU 资源。 它由两个相关功能组成:

禁用同时多线程处理(每个核心线程 = 1):允许运行每个物理 CPU 核心只有一个线程的 VM,从而有效地关闭同时多线程处理(SMT)。 禁用可让 VM 充分利用每个物理核心,这可以提高某些工作负荷(例如某些 HPC 或延迟敏感型应用程序)的性能,这些工作负载受益于独占核心访问。

可配置约束核心(自定义 vCPU):允许为新 VM 选择自定义数量的 vCPU ,低于该 VM 大小的默认计数。 它允许你仅分配所需的 CPU 核心,例如,对于按核心许可的软件(如数据库或分析服务器),这样可以降低许可成本,同时仍然能够获得较大 VM 的完整内存和 I/O 功能。

优点:借助这些功能,可以针对性能和成本优化 VM:

性能: 禁用超线程可以通过消除同一核心上的线程之间的争用,提供更一致且有时更高的单线程性能。

成本优化: 降低 VM 的 vCPU 数量可以降低按 CPU 收费的软件成本。 可以在活动较少的 vCPU 的 VM 上运行内存密集型 SQL Server,减少 SQL 许可费用,而无需支付未使用的 CPU 容量。

使用这些 CPU 配置选项 无需额外付费 。 基本 VM 价格与使用默认设置部署完整大小的 VM 一样。 但是,对于按每个 vCPU 计费的软件,客户可享受更低的许可成本。

虚拟机自定义配置设置

可以使用 Azure 门户、Azure 资源管理器模板(ARM)或命令行工具配置“每个核心的线程数”和“vCPU 可用”设置。

Azure 门户

在 Azure 门户中,VM 创建工作流具有这些选项的 UI。

开始像往常一样创建 VM(例如,单击“ 创建资源 > 虚拟机 ”并填写“基本信息”选项卡)。

  1. 在“基本信息”选项卡的“大小”部分中,选择要使用的 VM 大小。 在大小选择下,单击“自定义核心”按钮。 这将为 VM 自定义打开更多字段。

  2. 若要禁用 SMT,请将每个核心的线程数设置为 1。 (如果要保持超线程启用,请将其保留为 2。

  3. 关于 vCPU 计数,请将可用 vCPU 数设置为所需数量的 vCPU。 门户为所选 VM 大小提供有效值。

  4. 继续创建 VM 的其余部分(设置磁盘、网络等),并创建 VM。

部署 VM 后,它具有指定的 vCPU 数。 如果将每个核心的线程数设置为 1,则 VM 的 OS 将看到通常处理器数的一半(因为超线程关闭)。 如果 vCPU 数量减少,则会看到计数降低。

Azure CLI

在实例启动期间禁用 SMT 并配置核心:

若要禁用 SMT/HT,请使用 Azure CLI 命令,并为 vCPUPerCore 指定值 1 作为 --cpu-options 参数。 若要配置核心,请指定 vCPUUsAvailable 的 CPU 核心数。 在此示例中,若要指定Standard_D8s_v6实例的默认 CPU 核心计数,请指定值 8。

Az vm create --resource-group ccctest-rg-01 --name ccctestvm01 --image Ubuntu2204 --size Standard_D8s_v6 --location eastus2euap --admin-username azureuser --generate-ssh-keys --public-ip-address '""' --v-cpus-available 4 --v-cpus-per-core 1

PowerShell

在实例启动期间禁用 SMT 并配置核心

使用 PowerShell 并指定基础配置对象上的属性。 若要禁用 SMT/HT,请为 --cpu-options 参数指定 vCPUsPerCore 的值 1。 若要配置核心,请指定 vCPUUsAvailable 的 CPU 核心数。

$vmConfig = New-AzVMConfig -VMName "MyVM" -VMSize "Standard_D8s_v6"

$vmConfig.HardwareProfile.VmSizeProperties = New-Object Microsoft.Azure.Management.Compute.Models.VMSizeProperties

$vmConfig.HardwareProfile.VmSizeProperties.VCPUsAvailable = 4

$vmConfig.HardwareProfile.VmSizeProperties.VCPUsPerCore = 1

然后继续设置 OS、网络等,并使用 New-AzVM 创建 VM。 此方法直接使用 Azure PowerShell SDK 对象来注入值。

ARM 模板 (Azure 资源管理器)

对于需要通过基础结构即代码部署的自动化或方案,可以使用 Azure 资源管理器模板来指定这些 CPU 选项。 这可用于禁用 SMT 并通过 CLI 或 PowerShell 部署自定义 VM(通过部署模板)。

在虚拟机的 ARM 模板资源定义中,CPU 选项是在 VM 的 hardwareProfile 属性下指定的。 具体而言,在 hardwareProfile 中使用 vmSizeProperties 设置值:

vCPUUsPerCore - 将此设置为 1 以禁用超线程(例如,每个核心 1 个线程)。 省略此属性或设置为 null/2 以使用默认超线程(每个核心 2 个线程)。

vCPUAvailable - 将此设置为想要处于活动状态的 vCPU 数。 如果未设置此属性,VM 将默认数量的 vCPU 用于该大小。

下面是适用于不同方案的 ARM 模板代码片段的简要示例:

禁用 SMT(SMT/HT 关闭)

此代码片段显示了在 VM 上关闭 SMT 的设置(VM 每个核心使用 1 个线程)

"properties": {

"hardwareProfile": {

"vmSize": " Standard_D8s_v6",

"vmSizeProperties": {

"vCPUsPerCore": 1

}

},

...

}

在这种情况下,如果Standard_D8s_v6通常有 8 个 vCPU(4 个核心 * 2 个线程),则设置 vCPUPerCore:1 表示 VM 有 4 个 vCPU(每个核心一个)。

限制 vCPU 数量 (定制核心)

此代码片段显示配置为使用特定数量的 vCPU 的 VM(小于默认值)

"properties": {

"hardwareProfile": {

"vmSize": " Standard_D8s_v6",

"vmSizeProperties": {

"vCPUsAvailable": 2

}

},

...

}

在这里,我们请求了两个核心。 在Standard_D8s_v6(默认为超线程),会分配 2 个 物理 核心,由于 SMT 默认仍处于打开状态(每个核心有 2 个线程),因此 VM 有 4 个逻辑 vCPU。

禁用 SMT 并自定义 vCPU

可以组合这两个设置,如下所示:

"properties": {

"hardwareProfile": {

"vmSize": " Standard_D8s_v6",

"vmSizeProperties": {

"vCPUsPerCore": 1,

"vCPUsAvailable": 2

}

},

...

}

在此示例中,vCPUsPerCore: 1 禁用了 SMT,然后 vCPUsAvailable: 2 请求 2 个 vCPU。 在 SMT 关闭时,这两者与 2 个物理核心呈一一对应关系(无线程处理)。 VM 在 OS 中具有两个逻辑处理器。

请确保对模板中的 Microsoft.Compute/virtualMachines 资源使用 API 版本 2021-07-01 或更高版本 ,就像引入这些属性时一样。

确定配置支持的 vCore 数

若要确定特定区域中可约束哪些 vCPU,可以使用 Azure CLI 或 Azure 门户。

使用 Azure CLI

运行以下命令,以检索您的订阅和区域中的计算 SKU 列表:

az vm list-skus --location {location} --resource-type virtualMachines --query "[name=='VM_NAME_HERE']" 
  • 此命令显示支持的 vCPU 配置。 “vCPUsConstraintsAllowed”字段列出了支持的 vCore 数。

使用 Azure 门户

如果请求不支持的 vCPU 配置,门户将显示一条错误消息,并为该 VM 大小提供受支持的 vCPU 选项列表。

注意事项

大多数 Azure VM 系列都支持这些功能,但使用该功能时需要了解一些重要的规则和注意事项:

  • 只能在默认使用超线程的 VM 大小上禁用超线程(例如,每个核心有 2 个线程的 VM)。

  • 只能 减少 vCPU 的数量,而不是将其增大到 VM 的默认值之外。 指定的 vCPUUsAvailable 值必须小于或等于所选 VM 大小的默认 vCPU 计数。

  • 在超线程(默认 2 个线程/核心)的 VM 大小上,任何自定义 vCPU 计数都必须是偶数。

  • 可以在同一 VM 上同时禁用超线程和约束 vCPU。 在这种情况下,上述两个规则都适用。

  • 只能在 VM 创建时或在调整大小作期间指定 CPU 选项。 不能在分配的 VM 上动态调整核心计数或 SMT 设置,此更新要求解除分配 VM。

  • 如果您切换到支持该功能的同系列新 VM 大小,默认情况下设置会被自动保留。

  • 如果将 VM 大小调整为不支持该设置的规格,则该操作将被阻止或出现错误。

  • 每次调整 VM 的尺寸(无论是在同一系列内还是不同系列之间),VM 会重新启动。 在重设大小操作期间,为故障时间做好规划。

  • 在预览版中,仅支持第一方 Azure 市场映像(Windows Server、Ubuntu、Red Hat、SUSE 等)和自定义映像。 不支持专用市场产品/服务,例如虚拟机上的 SQL Server。