全部產品
Search
文件中心

Elastic High Performance Computing:關閉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選項。

  • ECS Bare Metal Instance不支援直接關閉超執行緒,但可以從軟體層面關閉超執行緒。

  • Super Computing ClusterSCC預設已關閉超執行緒。

企業級x86計算規格執行個體關閉超執行緒

建立叢集後,如果需要擴容計算節點,可以配置擴容的計算節點是否開啟超執行緒。

重要

對於企業級x86計算規格的ECS執行個體,建立後不支援關閉超執行緒。

手動擴容

手動擴容時,在建立節點頁簽下,可以配置執行個體是否開啟HT。具體操作,請參見手動擴容叢集。

在叢集擴容對話方塊的建立節點頁簽下,選擇節點規格(如 ecs.c7.large),並在底部的關閉 HT下拉選項中配置是否關閉超執行緒。其他配置項包括交換器 ID、付費類型、鏡像、隊列、主機名稱首碼、系統硬碟等,配置完成後單擊立即購買。

自動調整

配置自動調整時,在全域配置地區,可以配置執行個體是否開啟HT。具體操作,請參見配置自動調整。

ECS Bare Metal Instance關閉超執行緒

ECS Bare Metal Instance可以在執行個體建立後在軟體層面(GuestOS內部)關閉超執行緒,包括設定nr_cpus和改變vCPU狀態兩種方式。GuestOS內部要關閉HT,實際上是要類比一個物理核上對應一個邏輯核,所以將每個物理核上的對應一個邏輯核關閉,保留一個物理核對應一個邏輯核就能達到關閉超執行緒的效果,可以理解為offline一半的vCPU,且這些vCPU均一一分布在對應的物理核上。

說明

對於裸金屬伺服器,實際需要在主板BIOS上關閉超執行緒,這涉及到硬體重啟,鏈路較長且相對較慢,無法保證SLA。因此提供設定兩種軟體層面的方式,可以實作類別似關閉超執行緒的效果。

方式

優點

缺點

設定nr_cpu

lscpu和cpuid等命令返回看到的內部實際使用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且無需重啟執行個體。

  • lscpu和cpuid等命令返回的資訊中可以看到對應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. 遠端連線ECS Bare Metal Instance。具體操作,請參見使用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. 遠端連線ECS Bare Metal Instance。具體操作,請參見使用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     -         -