Giriş
Bu ilginç bir soru. Muhtemelen aylar içinde şahsen benim için en ilginç olanlardan biri. OP gibi eski BIOS'umda Hyper Threading'i devre dışı bırakma seçeneği yok (2012, güncellenmiş 2016 ya da benzeri icat edildi).
Intel Skylake ve Kaby Lake'teki Hiper iş parçacıkları hataları:
Intel Skylake veya Kaby Lake işlemcilerini kullanan herkes , birkaç ay önce ortaya çıkan Hyper Threading hakkındaki hata raporlarını okumalıdır. Bu UK Register öyküsü, Debian Developers'ın Hyper Threading'in makineyi nasıl çöktüğünü ve makineyi nasıl bozabileceğini nasıl tespit ettiğini anlatıyor.
Ask Ubuntu'da geçen yıl bildirilen Skylake ile ilgili çok sayıda sorun var ve biri Hyper Threading hatalarının neden olduğu sorunların nasıl ayırt edileceğini merak ediyor.
Bu cevap üç bölüme ayrılmıştır:
- Hyper-Threading açık / kapalı olduğunda CPU'ların görüntülenmesi
- Hiper iş parçacığı açma / kapama işlemini otomatikleştirmek için Bash komut dosyası
- Hiper Diş Açma başlamadan önce kapatılırsa Conky Çöküyor
Hyper-Threading açık / kapalı olduğunda CPU'ların görüntülenmesi
Aşağıda hiper iş parçacığı kapalı ve bir CPU stres testi yapıldığında CPU kullanımını görebilirsiniz. Yaklaşık 10 saniye sonra aynı kod hiper iş parçacığı açıkken tekrarlanır. Son olarak 10 saniye sonra komut dosyası hiper iş parçacığı tekrar kapatılarak çalıştırılır:
Ekran iki bölüme ayrılmıştır:
- Komut dosyasını
set-hyper-threading
0 (kapalı) ve sonra 1 (açık) parametresiyle çağıran terminal penceresinin sol yarısında .
- Sağ tarafta
conky
CPUS 1 ila 8'in CPU yüzdesi kullanımı görüntülenir.
İlk komut dosyasını çalıştıran Hyper Threading kapalı
Betik ilk çalıştırıldığında CPU Numaraları 2, 4, 6 ve 8 (Conky'ye göre)% 3,% 2,% 2 ve% 2'de dondurulur. CPU Testi 1, 3, 5 ve 7, stres testi yapılırken% 100'e yükselir.
CPU topolojisi hiper iş parçacığı kapalı olarak görüntülenir ve yalnızca dört çekirdek bildirilir:
/sys/devices/system/cpu/cpu0/topology/core_id:0
/sys/devices/system/cpu/cpu2/topology/core_id:1
/sys/devices/system/cpu/cpu4/topology/core_id:2
/sys/devices/system/cpu/cpu6/topology/core_id:3
İkinci komut dosyası çalıştırıldığında Hyper Threading açık
Komut dosyası ikinci kez çalıştırıldığında Hyper-Threading açık ve stres testi yürütülürken tüm CPU Numaraları 1-8% 100'e çıkıyor.
CPU topolojisi hiper iş parçacığı açıkken görüntülenir ve yalnızca dört çekirdek artı ve dört sanal çekirdek bildirilir:
/sys/devices/system/cpu/cpu0/topology/core_id:0
/sys/devices/system/cpu/cpu1/topology/core_id:0
/sys/devices/system/cpu/cpu2/topology/core_id:1
/sys/devices/system/cpu/cpu3/topology/core_id:1
/sys/devices/system/cpu/cpu4/topology/core_id:2
/sys/devices/system/cpu/cpu5/topology/core_id:2
/sys/devices/system/cpu/cpu6/topology/core_id:3
/sys/devices/system/cpu/cpu7/topology/core_id:3
Üçüncü komut dosyası çalıştırma Hyper Threading kapalı
İkinci komut dosyası bittikten sonra CPU 2, 4, 6 ve 8'in nasıl% 4,% 2,% 3,% 4'te boşta çalıştığına dikkat edin. Bu önemlidir, çünkü üçüncü testte Hyper-Threading devre dışı bırakıldığında ilk testten% 4,% 2,% 2 ve% 2 yerine% 4,% 2,% 3,% 4 oranında dondurulmuş CPU yüzdeleri gösterilir.
Bu nedenle hiper iş parçacığının kapatılması, sanal CPU'ları mevcut durumda donduruyor gibi görünüyor.
Ayrıca Hyper-Threading'i açıp kapatırsanız da komut dosyasının hala "Hyper Threading Supported" mesajını görüntülediğini unutmayın.
Hiper iş parçacığı açma / kapama işlemini otomatikleştirmek için Bash komut dosyası
Aşağıdaki komut dosyasını görüntülerken, Conky'nin CPU'ları 1'den 8'e kadar saydığını, Linux'un CPU'ları 0'dan 7'ye kadar saydığını unutmayın.
#!/bin/bash
# NAME: set-hyper-threading
# PATH: /usr/local/bin
# DESC: Turn Hyper threading off or on.
# DATE: Aug. 5, 2017.
# NOTE: Written Part of testing for Ubuntu answer:
# /ubuntu/942728/disable-hyper-threading-in-ubuntu/942843#942843
# PARM: 1="0" turn off hyper threading, "1" turn it on.
if [[ $# -ne 1 ]]; then
echo 'One argument required. 0 to turn off hyper-threading or'
echo '1 to turn hyper-threading back on'
exit 1
fi
echo $1 > /sys/devices/system/cpu/cpu1/online
echo $1 > /sys/devices/system/cpu/cpu3/online
echo $1 > /sys/devices/system/cpu/cpu5/online
echo $1 > /sys/devices/system/cpu/cpu7/online
grep "" /sys/devices/system/cpu/cpu*/topology/core_id
grep -q '^flags.*[[:space:]]ht[[:space:]]' /proc/cpuinfo && \
echo "Hyper-threading is supported"
grep -E 'model|stepping' /proc/cpuinfo | sort -u
stress --cpu 8 --io 1 --vm 1 --vm-bytes 128M --timeout 10s
NOT: Program stress
, Ubuntu'nun bir türevi olan tüm Debian sistemlerinde yerleşiktir. Bu nedenle, bu komut dosyasını Ubuntu'da çalıştırmak için herhangi bir paket indirip yüklemenize gerek yoktur.
Çift çekirdekli bir CPU'nuz varsa #
, 5 ve 7 numaralı CPU'ları kontrol eden hatları kaldırmanız (veya yorum yapmanız) gerekir .
CPU topolojisini gösteren bash hattı için Hi-Angel'a teşekkür ederiz grep "" /sys/devices/system/cpu/cpu*/topology/core_id
.
Hiper Diş Açma başlamadan önce kapatılırsa Conky Çöküyor
CPU'ları 2, 4, 6, 8 en düşük kullanım oranına getirmek için önyükleme sırasında Hyper-Threading'i kapatmayı denedim. Bunu yapmak için bu komut dosyasını kullandım:
# NAME: /etc/cron.d/turn-off-hyper-threading
# DATE: Auguust 5, 1017
# DESC: This turns off CPU 1, 3, 5 & 7
# NOTE: Part of testing for Ubuntu answer:
# /ubuntu/942728/disable-hyper-threading-in-ubuntu/942843#942843
# BUGS: Conky crashes with Segmentation Fault when CPU 2,4,6 & 8 (as conky calls them)
# are off-line.
#
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#
# @reboot root echo 0 > /sys/devices/system/cpu/cpu1/online
# @reboot root echo 0 > /sys/devices/system/cpu/cpu3/online
# @reboot root echo 0 > /sys/devices/system/cpu/cpu5/online
# @reboot root echo 0 > /sys/devices/system/cpu/cpu7/online
Ancak conky
, hiper iş parçacığı başlatıldığında kapatılırsa bir segmentasyon hatası ile çöker. Bu yüzden @reboot
senaryodaki dört satırı yorumlamak zorunda kaldım .
CPU yüzde kullanımını ve yük faktörünü görüntülemek için Conky Code
Conky'de benzer bir ekran ayarlamak istiyorsanız, ilgili kod snippet'i:
${color orange}${voffset 2}${hr 1}
${color2}${voffset 5}Intel® i-7 3630QM 3.4 GHz: ${color1}@ ${color green}${freq} MHz
${color}${goto 13}CPU 1 ${goto 81}${color green}${cpu cpu1}% ${goto 131}${color3}${cpubar cpu1 18}
${color}${goto 13}CPU 2 ${goto 81}${color green}${cpu cpu2}% ${goto 131}${color3}${cpubar cpu2 18}
${color}${goto 13}CPU 3 ${goto 81}${color green}${cpu cpu3}% ${goto 131}${color3}${cpubar cpu3 18}
${color}${goto 13}CPU 4 ${goto 81}${color green}${cpu cpu4}% ${goto 131}${color3}${cpubar cpu4 18}
${color}${goto 13}CPU 5 ${goto 81}${color green}${cpu cpu5}% ${goto 131}${color3}${cpubar cpu5 18}
${color}${goto 13}CPU 6 ${goto 81}${color green}${cpu cpu6}% ${goto 131}${color3}${cpubar cpu6 18}
${color}${goto 13}CPU 7 ${goto 81}${color green}${cpu cpu7}% ${goto 131}${color3}${cpubar cpu7 18}
${color}${goto 13}CPU 8 ${goto 81}${color green}${cpu cpu8}% ${goto 131}${color3}${cpubar cpu8 18}
${color1}All CPU ${color green}${cpu}% ${goto 131}${color1}Temp: ${color green}${hwmon 2 temp 1}°C ${goto 250}${color1}Up: ${color green}$uptime
${color green}$running_processes ${color1}running of ${color green}$processes ${color1}loaded processes.
Load Avg. 1-5-15 minutes: ${alignr}${color green}${execpi .001 (awk '{printf "%s/", $1}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4} ${execpi .001 (awk '{printf "%s/", $2}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4} ${execpi .001 (awk '{printf "%s/", $3}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4}
${color1}NVIDIA ${color}-GPU ${color green}${nvidia gpufreq} Mhz ${color}-Memory ${color green}${nvidia memfreq} Mhz
${color1}GT650M ${color}-Temp ${color green}${nvidia temp}°C ${color}-Threshold ${color green}${nvidia threshold}°C
${color orange}${voffset 2}${hr 1}
NOT: Nvidia GPU henüz Ubuntu altında çalışmadığından yukarıdaki Nvidia kodu hiç test edilmedi. Herhangi bir yıl yakında :)