Makine başlangıcında hyperthreading özelliğini devre dışı bırakmak için bir komut dosyası ...
Hyperthreading'i devre dışı bırakmak için, /etc/rc.local makinesinde bir komut dosyası içerir. Tamamen temiz değildir, ancak cpu mimarisinden bağımsız olarak kurulumu kolaydır ve herhangi bir modern linux dağıtımı üzerinde çalışmalıdır.
nano /etc/rc.local
# place this near the end before the "exit 0"
for CPU in /sys/devices/system/cpu/cpu[0-9]*; do
CPUID=$(basename $CPU)
echo "CPU: $CPUID";
if test -e $CPU/online; then
echo "1" > $CPU/online;
fi;
COREID="$(cat $CPU/topology/core_id)";
eval "COREENABLE=\"\${core${COREID}enable}\"";
if ${COREENABLE:-true}; then
echo "${CPU} core=${CORE} -> enable"
eval "core${COREID}enable='false'";
else
echo "$CPU core=${CORE} -> disable";
echo "0" > "$CPU/online";
fi;
done;
Bu nasıl çalışıyor?
Linux çekirdeği bilgisi ve kontrollerine modern linux dağıtımlarında / sys dizinindeki dosyalar olarak erişilebilir. Örneğin:
/ sys / devices / system / cpu / cpu3
, çekirdek bilgilerini ve mantıksal CPU 3 için kontrolleri içerir.
cat / sys / devices / system / cpu / cpu3 / topoloji / core_id
bu mantıksal CPU'nun ait olduğu temel sayıyı gösterecektir.
echo "0"> / sys / devices / system / cpu / cpu3 / online
mantıksal cpu 3'ü kapatmanıza izin verir.
Neden çalışıyor?
Tam olarak nedenini bilmiyorum ... ancak sistem aşırı tarama ile daha duyarlı hale geliyor (i5 dizüstü bilgisayarımda ve 60+ çekirdekli büyük Xeon sunucularında). CPU başına önbellek, işlemci başına bellek ayırma, işlemci zamanlayıcı ayırma ve işlem öncelikleri karmaşık yinelemelerle ilgili olduğunu düşünüyorum. Bence hiper-okumanın faydaları, nasıl kullanılacağını bilen cpu zamanlayıcıları yapmanın karmaşıklığı ile ağır basıyor.
Benim için, hiper-uç ile ilgili sorun şudur: Mantıksal çekirdeğe sahip olduğum kadar cpu-yoğun iş parçacığı başlatırsam, cpu yoğun görevler için hızlı bağlam anahtarlarına sahip olacağım; CPU yoğun görevler. Öte yandan, çok fazla cpu-yoğun iş parçacığı kadar fiziksel çekirdeğim varsa başlarsam, bu görevler için bağlam anahtarı ve arka plan görevleri için hızlı bağlam anahtarları olmaz. İyi görünüyor, ancak arka plan görevleri ücretsiz mantıksal işlemciler bulacak ve neredeyse engelsiz bir şekilde çalışacak. Gerçek zamanlı gösteri oldukları gibi (güzel -20).
İlk senaryoda, hiper iş parçacığı kullanışsızdır, arka plan görevleri pahalı bağlam anahtarları kullanacaktır çünkü normal işlemeyle hiper iş parçacığı maksimuma çıkardım. İkincisi kabul edilemez çünkü cpu gücümün% 50'sine kadar arkaplan işlerine öncelik veriliyor.
Bahsettiğim "işlemci yoğun" görevler yapay zeka veri madenciliği ve yetkilendirme sunucularıdır (işim). Ucuz bilgisayarlarda ve kümelerde blender oluşturma (gelecekteki evimi tasvir etmek için).
Ayrıca, bu tahmin işidir.
Daha iyi bir izlenim var, ama olmayabilir.
sysbench --num-threads=1 --test=cpu run
, farklı num-thread'lerle ve HT açılıp kapatıldığında, HT'nin devre dışı bırakılmasının, birçok iş parçacığı olduğunda perfüzyonu azalttığını ve sadece bir iş parçacığı olsa bile, HT'yi kapatmanın bir faydası olmadığını söylüyor. Bu yüzden onu olduğu gibi bırakmanızı öneririm: en uygunudur.