我将最大限度地利用一些运行一些繁重的 CPU 密集型处理的盒子。
每个进程仅使用 1 个线程,因此我将并行运行它们。我使用的是 4 核机器,因此启用超线程后就有 8 个。
每个进程还使用 1GB 的 RAM,因此如果启用超线程,每台机器将需要 8GB 的 RAM,如果禁用超线程,则每台机器将需要 4GB 的 RAM。
我的问题是:我应该启用还是禁用超线程?
重点不是 RAM 的成本,而是处理速度。启用或禁用超线程会更高效吗?
答案1
唯一能够确定的方法就是进行基准测试。
也就是说,在现代 CPU 上,超线程 (HT) 很少会减慢速度,但从 4 个进程增加到 8 个进程可能会增加足够的 I/O,从而使系统的其他区域变成瓶颈(磁盘、网络、RAM 带宽等)。
我认为无论如何,都应该保持 HT 启用状态,但您需要对系统进行基准测试以查看可以同时运行多少个作业以实现最大吞吐量。
如果没有其他事情,操作系统可能能够利用一些额外的执行资源。
答案2
下面是一个禁用超线程 CPU 的简短脚本。这对于基准测试很有用。适用于 Centos 6.2(2.6.32 内核)。
#!/bin/sh
cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list |
sort -u |
while read sibs
do
case "$sibs" in
*,*)
oldIFS="$IFS"
IFS=",$IFS"
set $sibs
IFS="$oldIFS"
shift
while [ "$1" ]
do
echo Disabling CPU $1 ..
echo 0 > /sys/devices/system/cpu/cpu$1/online
shift
done
;;
*)
;;
esac
done
答案3
在禁用HT的情况下测试运行一个进程。
如果在禁用 HT 时进程没有最大化单核,则在启用 HT 的情况下运行会更有效率,因为您会“浪费”更少的 CPU 周期。
如果它确实使核心达到最大限度,那么理论上两种情况都应该花费相同的时间来执行。读过 afrazier 的回答和你的回复后,这似乎是你可能需要执行的唯一有效基准。