Sri*_*esh 5 benchmarking amazon-ec2 hyperthreading
我正在做一些基准测试,并希望禁用 EC2 中的超线程以查看它对我的测试应用程序性能的影响。
我的应用程序的单个实例在执行期间仅使用 1 个线程。
据我了解,我无法访问 EC2 计算机的 BIOS 来禁用超线程,因为它们都是虚拟化的。但我使用该chcpu命令禁用了一半可用的 vCPU(线程),以便我可以模拟禁用超线程的环境。
对于此基准测试,我使用带有 4 个 vCPU 的 C4.xlarge,逻辑编号为 0 到 3。
我运行此命令sudo chcpu -d 1,3禁用 vCPU 1 和 3。
在此过程中,我假设 vCPU 0 和 1 来自单个底层裸机核心,vCPU 2 和 3 来自另一个核心。
我知道我的假设是错误的,因为 vCPU 0 和 4 可能来自同一个裸机核心,也可能全部来自不同的裸机核心。
有没有人有更好的方法来禁用 EC2 实例中的超线程?
当亚马逊检测到一半的 vCPU 被禁用时,是否会重新排列 vCPU,使它们来自不同的内核?
我在寻找解决方案时发现了这个问题。
AWS在此提供了相关说明
跑步lscpu --extended
您将获得虚拟 CPU 的列表,以及它们映射到的核心:
[root@ip-172-31-1-32 ~]# lscpu --extended
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
0 0 0 0 0:0:0:0 yes
1 0 0 1 1:1:1:0 yes
2 0 0 2 2:2:2:0 yes
3 0 0 3 3:3:3:0 yes
4 0 0 0 0:0:0:0 yes
5 0 0 1 1:1:1:0 yes
6 0 0 2 2:2:2:0 yes
7 0 0 3 3:3:3:0 yes
Run Code Online (Sandbox Code Playgroud)
(我们想要禁用 4-7),执行以下操作:
echo 0 > /sys/devices/system/cpu/cpuN/online
其中N是要禁用的虚拟 cpu 编号。
所以...
echo 0 > /sys/devices/system/cpu/cpu4/online
echo 0 > /sys/devices/system/cpu/cpu5/online
echo 0 > /sys/devices/system/cpu/cpu6/online
echo 0 > /sys/devices/system/cpu/cpu7/online
Run Code Online (Sandbox Code Playgroud)
禁用超线程并为每个物理核心保留 1 个 vCPU。
或者使用这个脚本:
#!/usr/bin/env 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5707 次 |
| 最近记录: |