许多 Azure 虚拟机(VM)规格在出厂时即启用 超线程(也称为同步多线程,即 SMT),使每个物理核心呈现两个逻辑 vCPU。 对于某些 Azure Batch 工作负载,你可能需要关闭超线程,这样每个计算节点只暴露其物理核心。 常见原因包括:
- 高性能计算(HPC)工作负载对内存带宽或缓存争用敏感,且每个物理核使用一个线程时表现更好。
- 按核心软件许可,按物理核心数量计费,避免计算逻辑核心数。
- 对于紧耦合或基准敏感的应用,实现可预测、确定性的性能。
你通过在批处理池中添加保留 标签 来禁用超线程。 Batch 会将该标记传播到为池提供支持的虚拟机规模集,计算平台在预配节点时会关闭超线程(每个物理核心一个线程)。
Note
批处理服务不再要求在订阅上注册 Microsoft.Compute/PlatformSettingsOverride 功能(Azure 功能公开控制标记)即可使用此功能。 现在只需添加池标签即可。 如果您之前收到 Platform settings override is not supported in this subscription 错误,请在最新的批处理服务推出后重新尝试。
虚拟机大小支持
禁用超线程只适用于启用超线程的虚拟机大小,即每个物理核心有两个线程的大小。 对于这些规格,禁用超线程后,每个核心只提供一个线程,这会使每个节点呈现的 vCPU 数量减半(例如,16 vCPU 规格对应 8 个核心)。
已为每个核心只提供一个线程的虚拟机规格(例如,许多 GPU 规格和专用 HPC 规格)不支持此设置,并且该标记对这些规格不起作用。
要判断虚拟机大小是否支持禁用超线程,请查看其 vCPU每核的 比例:
- 请查看你计划使用的系列的 虚拟机规模文档 。
vCPUs:Core的比率为2:1表示已启用超线程,并且可将其禁用。 - 或者查询资源SKUs-列表API,检查该功能。
vCPUsPerCore值为2表示可以禁用超线程;值为1表示不能禁用超线程。
禁用超线程会如何影响你的资源池
- vCPU 数量减半。 由于每个节点只暴露物理核心,每个节点的 vCPU 数量减半。 相应地规划你的泳池规模和 核心配额 。
- 任务调度时段。 如果你采用默认设置,即每个 vCPU 分配一个任务槽,或者你设置了
taskSlotsPerNode,请检查这些值,以确保在减少后的核心数配置下,任务能够按预期进行调度。 - 账单未变。 你仍然按选择的虚拟机大小计费;禁用超线程不会改变虚拟机的价格。
加上泳池标签
在池资源上设置一个带有以下键和值的标签:
| 标记键 | 标签值 |
|---|---|
platformsettings.host_environment.disablehyperthreading |
true |
因为你在资源上设置了标签Microsoft.Batch/batchAccounts/pools,所以可以通过 Azure 资源管理器 创建或更新资源池。 例如,可以使用ARM模板、Bicep文件或批处理REST API。
platformsettings. 前缀保留用于平台设置,因此请严格按所示键名使用。
Bicep
以下 Bicep 示例创建了一个禁用超线程的池。 只需属性 tags 即可支持该行为。
resource pool 'Microsoft.Batch/batchAccounts/pools@2024-07-01' = {
name: 'hpcpool'
parent: batchAccount
tags: {
'platformsettings.host_environment.disablehyperthreading': 'true'
}
properties: {
vmSize: 'Standard_D16s_v5'
deploymentConfiguration: {
virtualMachineConfiguration: {
imageReference: {
publisher: 'canonical'
offer: '0001-com-ubuntu-server-jammy'
sku: '22_04-lts'
version: 'latest'
}
nodeAgentSkuId: 'batch.node.ubuntu 22.04'
}
}
scaleSettings: {
fixedScale: {
targetDedicatedNodes: 2
resizeTimeout: 'PT15M'
}
}
}
}
ARM 模板
{
"type": "Microsoft.Batch/batchAccounts/pools",
"apiVersion": "2024-07-01",
"name": "[format('{0}/{1}', parameters('batchAccountName'), 'hpcpool')]",
"tags": {
"platformsettings.host_environment.disablehyperthreading": "true"
},
"properties": {
"vmSize": "Standard_D16s_v5",
"deploymentConfiguration": {
"virtualMachineConfiguration": {
"imageReference": {
"publisher": "canonical",
"offer": "0001-com-ubuntu-server-jammy",
"sku": "22_04-lts",
"version": "latest"
},
"nodeAgentSkuId": "batch.node.ubuntu 22.04"
}
},
"scaleSettings": {
"fixedScale": {
"targetDedicatedNodes": 2,
"resizeTimeout": "PT15M"
}
}
}
}
批处理管理 REST API
PUT https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Batch/batchAccounts/{accountName}/pools/{poolName}?api-version=2024-07-01
{
"tags": {
"platformsettings.host_environment.disablehyperthreading": "true"
},
"properties": {
"vmSize": "Standard_D16s_v5",
"deploymentConfiguration": {
"virtualMachineConfiguration": {
"imageReference": {
"publisher": "canonical",
"offer": "0001-com-ubuntu-server-jammy",
"sku": "22_04-lts",
"version": "latest"
},
"nodeAgentSkuId": "batch.node.ubuntu 22.04"
}
},
"scaleSettings": {
"fixedScale": {
"targetDedicatedNodes": 2,
"resizeTimeout": "PT15M"
}
}
}
}
Important
要禁用超线程,将标签值 true设置为 。 设置其他值或移除标签会重新启用超线程。 当你在现有池上更改该标签时,必须重新映像或重建节点(例如将池缩小到零再回来),变更才会生效。
确认超线程是否被禁用
节点配置完成后,登录计算节点(例如通过 Azure 门户或配置远程访问)并确认线程数量。
Linux:运行
lscpu并确认Thread(s) per core: 1。lscpu | grep -i "Thread(s) per core"Windows:比较逻辑处理器数量与物理核心数量。 当超线程被禁用时,这两个值相等。
Get-CimInstance Win32_Processor | Select-Object NumberOfCores, NumberOfLogicalProcessors
后续步骤
- 了解Batch 池和计算节点生命周期。
- 查看 批处理池的虚拟机大小。
- 了解 批处理服务的配额和限制,包括核心配额。
- 配置 跨节点的任务调度。