全部产品
Search
文档中心

弹性高性能计算E-HPC:关闭CPU超线程以提升集群性能

更新时间:Aug 21, 2026

E-HPC集群的每个计算节点都是一台ECS实例,默认情况下,ECS实例均已开启CPU超线程。在部分HPC场景下,需要关闭CPU超线程以获得更好的性能表现。本文介绍如何关闭计算节点的CPU超线程。

背景信息

CPU是中央处理器,一个CPU可以包含若干个物理核,通过超线程HT(Hyper-Threading)技术可以将一个物理核变成两个逻辑处理核。ECS的超线程基于HT技术,允许在一个物理核上并发地运行两个线程(Thread),一个线程可以视为一个vCPU,vCPU是ECS实例的虚拟处理核。在部分HPC场景下,需要关闭计算节点的CPU超线程,使得计算节点获得更好的性能表现。

注意事项

各类型实例规格是否支持关闭超线程如下:

  • 仅部分企业级x86计算规格的ECS实例支持关闭超线程,具体请参见更改CPU选项

  • 弹性裸金属服务器不支持直接关闭超线程,但可以从软件层面关闭超线程。

  • 超级计算集群SCC默认已关闭超线程。

企业级x86计算规格实例关闭超线程

创建集群后,如果需要扩容计算节点,可以配置扩容的计算节点是否开启超线程。

重要

对于企业级x86计算规格的ECS实例,创建后不支持关闭超线程。

手动扩容

手动扩容时,在新建节点页签下,可以配置实例是否开启HT。具体操作,请参见手动扩容集群

集群扩容对话框的新建节点页签下,选择节点规格(如 ecs.c7.large),并在底部的关闭 HT下拉选项中配置是否关闭超线程。其他配置项包括交换机 ID、付费类型、镜像、队列、主机名前缀、系统盘等,配置完成后单击立即购买

自动伸缩

配置自动伸缩时,在全局配置区域,可以配置实例是否开启HT。具体操作,请参见配置自动伸缩

弹性裸金属服务器关闭超线程

弹性裸金属服务器可以在实例创建后在软件层面(GuestOS内部)关闭超线程,包括设置nr_cpus和改变vCPU状态两种方式。GuestOS内部要关闭HT,实际上是要模拟一个物理核上对应一个逻辑核,所以将每个物理核上的对应一个逻辑核关闭,保留一个物理核对应一个逻辑核就能达到关闭超线程的效果,可以理解为offline一半的vCPU,且这些vCPU均一一分布在对应的物理核上。

说明

对于裸金属服务器,实际需要在主板BIOS上关闭超线程,这涉及到硬件重启,链路较长且相对较慢,无法保证SLA。因此提供设置两种软件层面的方式,可以实现类似关闭超线程的效果。

方式

优点

缺点

设置nr_cpu

lscpucpuid等命令返回看到的内部实际使用CPU数就是物理CPU数,不会看到offline的vCPU,基本达到关闭超线程的效果和CPU核数显示。

  • 一旦设置了nr_cpus=实例规格vCPU/2,offline的一半vCPU在实例运行的情况下无法再使用,必须要删除nr_cpus参数,然后重启实例才能恢复所有vCPU。

  • 如果设置了nr_cpus=实例规格vCPU/2,建议您在创建自定义镜像前删除该参数,否则如果使用自定义镜像创建不同规格的实例,会碰到只能识别部分物理核的情况,此时必须要重新设置nr_cpus。

改变vCPU状态

通过命令改变vCPU状态时无需重启实例。配置后可以使用echo 1 > /sys/devices/system/cpu/cpu$cpunum/online恢复offline的vCPU且无需重启实例。

  • lscpucpuid等命令返回的信息中可以看到对应offline的vCPU。

  • 有些License检测到的还是全量CPU。

  • 实例重启后,需要重新设置一次。

重要

由于实际生产业务多样,阿里云无法真实模拟上述两种方式是否会对业务产生影响。在实际生产环境中使用两种软件层面的方式关闭超线程时,请您务必做好测试,确认是否对您的业务有所影响。

设置nr_cpus

nr_cpus是一个内核参数,作用是限定内核最大支持的CPU数量,取值范围为2~255。如果要实现关闭超线程的效果,可以设置nr_cpus=实例规格vCPU/2,这样内核支持的最大CPU数量就只有实际规格的一半,实际只使用一半的vCPU,达到offline一半vCPU的要求,并且nr_cpus offline的一半vCPU均是lscpu命令可以看到的后一半vCPU,实际对应offline的就是每个物理核上的一个逻辑核。

以ecs.ebmc6me.16xlarge规格为例,该规格有64个vCPU,操作系统是CentOS 7,设置nr_cpus的操作步骤如下:

  1. 远程连接弹性裸金属服务器。具体操作,请参见使用Workbench登录Linux实例

  2. 执行lscpu命令查看vCPU情况,确认实例是否已开启超线程。

    预期返回如下,如果CPU(s)的值和实例规格的vCPU数一致,且Thread(s) per core为2,则表明该实例开启了超线程。

    ~]# lscpu
    Architecture:          x86_64
    CPU op-mode(s):        32-bit, 64-bit
    Byte Order:            Little Endian
    CPU(s):                64
    On-line CPU(s) list:   0-63
    Thread(s) per core:    2
    Core(s) per socket:    16
    Socket(s):             2
    NUMA node(s):          2
    Vendor ID:             GenuineIntel
    CPU family:            6
    Model:                 85
    Model name:            Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz
    Stepping:              7
    CPU MHz:               2799.896
    CPU max MHz:           3900.0000
    CPU min MHz:           1000.0000
    BogoMIPS:              4600.00
    Virtualization:        VT-x
    L1d cache:             32K
    L1i cache:             32K
    L2 cache:              1024K
    L3 cache:              22528K
    NUMA node0 CPU(s):     0-15,32-47
    NUMA node1 CPU(s):     16-31,48-63
    Flags:                 fpu vme de pse tsc msr pae mce cx8 apic se
    
  3. 修改grub文件。

    vim /boot/grub2/grub.cfg

    i进入编辑模式,添加nr_cpus=实例规格vCPU/2,此处示例为nr_cpus=32。然后按Esc键退出编辑模式,输入:wq保存配置。

    裸金属CPU111..png

  4. 重启ECS实例。

  5. 查看效果。

    1. 执行lscpu命令查看vCPU情况。

      预期返回如下,可以看到CPU(s)为32,且Thread(s) per core为1,表明实例已关闭超线程。

      [root@iZu            ~]# lscpu
      Architecture:          x86_64
      CPU op-mode(s):        32-bit, 64-bit
      Byte Order:            Little Endian
      CPU(s):                32
      On-line CPU(s) list:   0-31
      Thread(s) per core:    1
      Core(s) per socket:    16
      Socket(s):             2
      NUMA node(s):          2
      Vendor ID:             GenuineIntel
      CPU family:            6
      Model:                 85
      Model name:            Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz
      Stepping:              7
      CPU MHz:               2301.000
      CPU max MHz:           2301.0000
      CPU min MHz:           1000.0000
      BogoMIPS:              4600.00
      Virtualization:        VT-x
      L1d cache:             32K
      L1i cache:             32K
      L2 cache:              1024K
      L3 cache:              22528K
      NUMA node0 CPU(s):     0-15
      NUMA node1 CPU(s):     16-31
      Flags:                 fpu vme de pse tsc msr pae mce cx8 apic se
      nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds
      
    2. 执行lscpu --extend命令,确认vCPU分布情况。

      预期返回如下,可以看到32个vCPU分布在32个物理核上,实现了关闭超线程的效果。

      ~]# lscpu --extend
      CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ    MINMHZ
      0   0    0      0    0:0:0:0       yes    2301.0000 1000.0000
      1   0    0      1    1:1:1:0       yes    2301.0000 1000.0000
      2   0    0      2    2:2:2:0       yes    2301.0000 1000.0000
      3   0    0      3    3:3:3:0       yes    2301.0000 1000.0000
      4   0    0      4    4:4:4:0       yes    2301.0000 1000.0000
      5   0    0      5    5:5:5:0       yes    2301.0000 1000.0000
      6   0    0      6    6:6:6:0       yes    2301.0000 1000.0000
      7   0    0      7    7:7:7:0       yes    2301.0000 1000.0000
      8   0    0      8    8:8:8:0       yes    2301.0000 1000.0000
      9   0    0      9    9:9:9:0       yes    2301.0000 1000.0000
      10  0    0      10   10:10:10:0    yes    2301.0000 1000.0000
      11  0    0      11   11:11:11:0    yes    2301.0000 1000.0000
      12  0    0      12   12:12:12:0    yes    2301.0000 1000.0000
      13  0    0      13   13:13:13:0    yes    2301.0000 1000.0000
      14  0    0      14   14:14:14:0    yes    2301.0000 1000.0000
      15  0    0      15   15:15:15:0    yes    2301.0000 1000.0000
      16  1    1      16   16:16:16:1    yes    2301.0000 1000.0000
      17  1    1      17   17:17:17:1    yes    2301.0000 1000.0000
      18  1    1      18   18:18:18:1    yes    2301.0000 1000.0000
      19  1    1      19   19:19:19:1    yes    2301.0000 1000.0000
      20  1    1      20   20:20:20:1    yes    2301.0000 1000.0000
      21  1    1      21   21:21:21:1    yes    2301.0000 1000.0000
      22  1    1      22   22:22:22:1    yes    2301.0000 1000.0000
      23  1    1      23   23:23:23:1    yes    2301.0000 1000.0000
      24  1    1      24   24:24:24:1    yes    2301.0000 1000.0000
      25  1    1      25   25:25:25:1    yes    2301.0000 1000.0000
      26  1    1      26   26:26:26:1    yes    2301.0000 1000.0000
      27  1    1      27   27:27:27:1    yes    2301.0000 1000.0000
      28  1    1      28   28:28:28:1    yes    2301.0000 1000.0000
      29  1    1      29   29:29:29:1    yes    2301.0000 1000.0000
      30  1    1      30   30:30:30:1    yes    2301.0000 1000.0000
      31  1    1      31   31:31:31:1    yes    2301.0000 1000.0000
      

改变vCPU状态

您可以通过命令改变vCPU的状态,实现offline一半vCPU,即offline每个物理核的一个逻辑核。

以ecs.ebmc6me.16xlarge规格为例,该规格有64个vCPU,操作系统是CentOS 7,改变vCPU状态的操作步骤如下:

  1. 远程连接弹性裸金属服务器。具体操作,请参见使用Workbench登录Linux实例

  2. 执行lscpu命令查看vCPU情况,确认实例是否已开启超线程。

    预期返回如下,如果CPU(s)的值和实例规格的vCPU数一致,且Thread(s) per core为2,则表明该实例开启了超线程。

    ~]# lscpu
    Architecture:          x86_64
    CPU op-mode(s):        32-bit, 64-bit
    Byte Order:            Little Endian
    CPU(s):                64
    On-line CPU(s) list:   0-63
    Thread(s) per core:    2
    Core(s) per socket:    16
    Socket(s):             2
    NUMA node(s):          2
    Vendor ID:             GenuineIntel
    CPU family:            6
    Model:                 85
    Model name:            Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz
    Stepping:              7
    CPU MHz:               2799.896
    CPU max MHz:           3900.0000
    CPU min MHz:           1000.0000
    BogoMIPS:              4600.00
    Virtualization:        VT-x
    L1d cache:             32K
    L1i cache:             32K
    L2 cache:              1024K
    L3 cache:              22528K
    NUMA node0 CPU(s):     0-15,32-47
    NUMA node1 CPU(s):     16-31,48-63
    Flags:                 fpu vme de pse tsc msr pae mce cx8 apic se
    
  3. 创建并执行脚本,改变vCPU状态。

    1. 创建脚本。

      vim test.sh

      脚本内容如下:

      #!/bin/bash
      for cpunum in $(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | cut -s -d, -f2- | tr ',' '\n' | sort -un)
      do
          echo 0 > /sys/devices/system/cpu/cpu$cpunum/online
      done
    2. 执行脚本。

      sh test.sh
  4. 查看效果。

    1. 执行lscpu命令查看vCPU情况。

      预期返回如下,可以看到后32个vCPU已经offline,且Thread(s) per core为1,表明实例已关闭超线程。

      # lscpu
      Architecture:        x86_64
      CPU op-mode(s):      32-bit, 64-bit
      Byte Order:          Little Endian
      CPU(s):              64
      On-line CPU(s) list: 0-31
      Off-line CPU(s) list: 32-63
      Thread(s) per core:  1
      Core(s) per socket:  16
      Socket(s):           2
      NUMA node(s):        2
      Vendor ID:           GenuineIntel
      CPU family:          6
      Model:               85
      Model name:          Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz
      Stepping:            7
      CPU MHz:             2800.036
      CPU max MHz:         3900.0000
      CPU min MHz:         1000.0000
      BogoMIPS:            4600.00
      Virtualization:      VT-x
      L1d cache:           32K
      L1i cache:           32K
      L2 cache:            1024K
      L3 cache:            22528K
      NUMA node0 CPU(s):   0-15
      NUMA node1 CPU(s):   16-31
      Flags:               fpu vme de pse tsc msr pae mce cx8 apic s
      pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg f
      
    2. 执行lscpu --extend命令,确认vCPU分布情况。

      预期返回如下,可以看到后32个vCPU已经offline,且均为每个物理核上的一个逻辑核。

      [root@iZuf6d2vgqoyhr~]# lscpu --extend
      CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ    MINMHZ
      0   0    0      0    0:0:0:0        yes    3900.0000 1000.0000
      1   0    0      1    1:1:1:0        yes    3900.0000 1000.0000
      2   0    0      2    2:2:2:0        yes    3900.0000 1000.0000
      3   0    0      3    3:3:3:0        yes    3900.0000 1000.0000
      4   0    0      4    4:4:4:0        yes    3900.0000 1000.0000
      5   0    0      5    5:5:5:0        yes    3900.0000 1000.0000
      6   0    0      6    6:6:6:0        yes    3900.0000 1000.0000
      7   0    0      7    7:7:7:0        yes    3900.0000 1000.0000
      8   0    0      8    8:8:8:0        yes    3900.0000 1000.0000
      9   0    0      9    9:9:9:0        yes    3900.0000 1000.0000
      10  0    0      10   10:10:10:0     yes    3900.0000 1000.0000
      11  0    0      11   11:11:11:0     yes    3900.0000 1000.0000
      12  0    0      12   12:12:12:0     yes    3900.0000 1000.0000
      13  0    0      13   13:13:13:0     yes    3900.0000 1000.0000
      14  0    0      14   14:14:14:0     yes    3900.0000 1000.0000
      15  0    0      15   15:15:15:0     yes    3900.0000 1000.0000
      16  1    1      16   16:16:16:1     yes    3900.0000 1000.0000
      17  1    1      17   17:17:17:1     yes    3900.0000 1000.0000
      18  1    1      18   18:18:18:1     yes    3900.0000 1000.0000
      19  1    1      19   19:19:19:1     yes    3900.0000 1000.0000
      20  1    1      20   20:20:20:1     yes    3900.0000 1000.0000
      21  1    1      21   21:21:21:1     yes    3900.0000 1000.0000
      22  1    1      22   22:22:22:1     yes    3900.0000 1000.0000
      23  1    1      23   23:23:23:1     yes    3900.0000 1000.0000
      24  1    1      24   24:24:24:1     yes    3900.0000 1000.0000
      25  1    1      25   25:25:25:1     yes    3900.0000 1000.0000
      26  1    1      26   26:26:26:1     yes    3900.0000 1000.0000
      27  1    1      27   27:27:27:1     yes    3900.0000 1000.0000
      28  1    1      28   28:28:28:1     yes    3900.0000 1000.0000
      29  1    1      29   29:29:29:1     yes    3900.0000 1000.0000
      30  1    1      30   30:30:30:1     yes    3900.0000 1000.0000
      31  1    1      31   31:31:31:1     yes    3900.0000 1000.0000
      32  -    -      -    :::            no     -         -
      33  -    -      -    :::            no     -         -
      34  -    -      -    :::            no     -         -
      35  -    -      -    :::            no     -         -
      36  -    -      -    :::            no     -         -
      37  -    -      -    :::            no     -         -
      38  -    -      -    :::            no     -         -
      39  -    -      -    :::            no     -         -
      40  -    -      -    :::            no     -         -
      41  -    -      -    :::            no     -         -
      42  -    -      -    :::            no     -         -
      43  -    -      -    :::            no     -         -
      44  -    -      -    :::            no     -         -
      45  -    -      -    :::            no     -         -
      46  -    -      -    :::            no     -         -
      47  -    -      -    :::            no     -         -
      48  -    -      -    :::            no     -         -
      49  -    -      -    :::            no     -         -
      50  -    -      -    :::            no     -         -
      51  -    -      -    :::            no     -         -
      52  -    -      -    :::            no     -         -
      53  -    -      -    :::            no     -         -
      54  -    -      -    :::            no     -         -
      55  -    -      -    :::            no     -         -
      56  -    -      -    :::            no     -         -
      57  -    -      -    :::            no     -         -
      58  -    -      -    :::            no     -         -
      59  -    -      -    :::            no     -         -
      60  -    -      -    :::            no     -         -
      61  -    -      -    :::            no     -         -
      62  -    -      -    :::            no     -         -
      63  -    -      -    :::            no     -         -