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 |
|
|
改變vCPU狀態 | 通過命令改變vCPU狀態時無需重啟執行個體。配置後可以使用 |
|
由於實際生產業務多樣,阿里雲無法真實類比上述兩種方式是否會對業務產生影響。在實際生產環境中使用兩種軟體層面的方式關閉超執行緒時,請您務必做好測試,確認是否對您的業務有所影響。
設定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的操作步驟如下:
遠端連線ECS Bare Metal Instance。具體操作,請參見使用Workbench登入Linux執行個體。
執行
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修改grub檔案。
vim /boot/grub2/grub.cfg按
i進入編輯模式,添加nr_cpus=執行個體規格vCPU/2,此處樣本為nr_cpus=32。然後按Esc鍵退出編輯模式,輸入:wq儲存配置。
重啟ECS執行個體。
查看效果。
執行
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執行
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狀態的操作步驟如下:
遠端連線ECS Bare Metal Instance。具體操作,請參見使用Workbench登入Linux執行個體。
執行
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建立並執行指令碼,改變vCPU狀態。
建立指令碼。
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執行指令碼。
sh test.sh
查看效果。
執行
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執行
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 - -