Introdução
Esta é uma questão interessante. Provavelmente um dos mais interessantes em meses para mim pessoalmente. Como o OP, não há opção para desabilitar o Hyper Threading no meu BIOS antigo (inventado em 2012, atualizado em 2016).
Erros Hyper-Threading no Intel Skylake e no Kaby Lake:
Qualquer pessoa que utilize processadores Intel Skylake ou Kaby Lake deve ler os relatórios de bugs sobre Hyper Threading que surgiram alguns meses atrás. Esta história UK Register explica como os desenvolvedores Debian avistou como o Hyper Threading pode travar e corromper a máquina.
Existem inúmeros problemas com o Skylake relatados no Ask Ubuntu no ano passado e perguntamo-nos como discernir quais problemas podem ter sido causados por erros do Hyper Threading.
Esta resposta está dividida em três partes:
- Exibição de CPUs quando o Hyper-Threading está desativado / ativado
- Script Bash para automatizar a ativação / desativação do hyper-threading
- Conky falha se o Hyper Threading estiver desativado antes de iniciar
Exibição de CPUs quando o Hyper-Threading está desativado / ativado
Abaixo você pode ver a utilização da CPU quando o hyper-threading está desativado e um teste de estresse da CPU é realizado. Cerca de 10 segundos depois, o mesmo script é repetido com o hyper-threading ativado. Finalmente, 10 segundos depois, o script é executado com hyper-threading desativado novamente:
A exibição é dividida em duas seções:
- Na metade esquerda, a janela do terminal invocando o script
set-hyper-threading
com o parâmetro 0 (desativado) e, em seguida, 1 (ativado). - Na metade direita
conky
exibe a porcentagem de utilização da CPU do CPUS 1 a 8.
O primeiro script executa o Hyper Threading off
A primeira vez que o script é executado, os números da CPU 2, 4, 6 & amp; 8 (de acordo com Conky) são congelados a 3%, 2%, 2% e 2%. Os números da CPU 1, 3, 5 e 7 aumentam para 100% enquanto o teste de estresse é executado.
A topologia da CPU é exibida com o hyper-threading desativado e somente os quatro núcleos relatados:
/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
Segundo script, execute o Hyper Threading em
Na segunda vez em que o script é executado, o Hyper-Threading é ativado e todos os números de CPU 1-8 chegam a 100% enquanto o teste de estresse é executado.
A topologia da CPU é exibida com o hyper-threading ativado e apenas os quatro núcleos mais e quatro núcleos virtuais são relatados:
/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
Terceiro script executa Hyper Threading desativado
Observe como, após o término do segundo script, as CPUs 2, 4, 6 e 8 estão inativas em 4%, 2%, 3% e 4%. Isso é importante porque, no terceiro teste, a inversão do Hyper-Threading mostra as porcentagens de CPU congeladas em 4%, 2%, 3%, 4% em vez de 3%, 2%, 2% e 2% do primeiro teste. p>
Portanto, desligar o hyper-threading parece congelar as CPUs virtuais no estado atual.
Observe também que, independentemente de você ativar ou desativar o Hyper-Threading, o script ainda exibe "Hyper Threading Suportado".
Script bash para automatizar a ativação / desativação do hyper-threading
Ao visualizar o script abaixo, lembre-se de que Conky numera as CPUs de 1 a 8, mas o Linux computa as CPUs de 0 a 7.
#!/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:
# https://sobrelinux.info/questions/48269/disable-hyper-threading-in-ubuntu"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 > /sys/devices/system/cpu/cpu1/online
echo > /sys/devices/system/cpu/cpu3/online
echo > /sys/devices/system/cpu/cpu5/online
echo > /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
NOTA: O programa stress
está embutido em todos os sistemas Debian dos quais o Ubuntu é derivado. Portanto, você não precisa baixar e instalar nenhum pacote para executar este script no Ubuntu.
Se você tem uma CPU dual core, é necessário remover (ou comentar com #
) as linhas que controlam os números de CPU 5 e 7.
Crédito para Hi-Angel para a linha bash grep "" /sys/devices/system/cpu/cpu*/topology/core_id
que exibe a topologia da CPU.
Conky falha se o Hyper Threading estiver desativado antes de iniciar
Para obter CPUs 2, 4, 6, 8 para a menor porcentagem de utilização possível, tentei desligar o Hyper-Threading durante a inicialização. Eu usei esse script para fazer isso:
# 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:
# https://sobrelinux.info/questions/48269/disable-hyper-threading-in-ubuntu"%s/", }' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4} ${execpi .001 (awk '{printf "%s/", }' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4} ${execpi .001 (awk '{printf "%s/", }' /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}
NOTA: O código Nvidia acima nunca foi testado porque ainda não tenho a GPU da Nvidia funcionando no Ubuntu. Qualquer ano em breve agora:)