Esse tópico será um tutorial de como desativar o hyper-threading em CPU's da Intel.
O hyper-threading é uma tecnologia presente em CPU’s da Intel que permite dobrar o número de núcleos lógicos da máquina. O problema com ele? Bem, ele faz com que o desempenho piore ao invés de melhorar (raros casos), mas o principal problema com ele é a questão da segurança.
Em 2017 vimos “a loucura” que foram as falhas spectre e meltdown nos CPU’s da Intel, e o principal culpado? Isso mesmo, o hyper-threading!
Como desativar então?
Requesitos mínimos: usar grub e um kernel acima da versão 4.
1º forma: Desativar pela BIOS.
Problema? Nem todas as BIOS dão a opção para desativar o HT.
2º forma: Desativar pelo kernel Linux.
Passo 1: Abra o terminal.
Passo 2: Entre como super-usuário (root)
Passo 3: Digite: nano /etc/default/grub (você pode substituir o nano com o editor de texto de sua preferência).
Passo 4: Vá até a linha GRUB_CMDLINE_LINUX="" e escreva nosmt=force entre as aspas ("").
Passo 5: Salve e saia (no nano é control+x --> y --> enter)
Passo 6: Faça o update do GRUB (no Debian é update-grub)
Passo 7: Reinicie e seja feliz.
Considerações finais: CPU’s testados: Intel Core I5 7200u (Acer Aspire 5) e Intel Core I3 4005u (Dell Inspiron). Distros testadas: Devuan ASCII e Beowulf. Isso afeta o desempenho? SIM.
As falhas são preocupantes, mas a chance de ter algum problema por conta delas, ainda mais no GNU/Linux e com o kernel atualizado, é mínima. Não vale a perda de desempenho, que pode ser colossal para diversos processadores (como esses ULVs de notebook que são apenas dual core) em quase qualquer cenário de maior exigência.
rod@gentooe6410 ~ $ systemd-analyze
Startup finished in 3.168s (kernel) + 6.041s (initrd) + 14.383s (userspace) = 23.593s
graphical.target reached after 14.361s in userspace
Tempo para carregar o Plasma: 17 segundos (cronometro)
Ou seja, ficou intermediário. O carregamento do kernel e initrd ficaram igual ao hyperthreading ativado (esperado pois está descompactando os conteúdos com os 4 threads) mas depois que carrega o kernel melhor pro userspace e fica bom no carregamento da interface.
Mas infelizmente é um balanço… Desativando o hyperthreading o sistema ficou menos fluido e tive travamentos bem pronunciados durante videos em 60 fps… Também testei desativado com um kernel realtime, e ficou bem melhor com relação a fluidez, mas mesmo assim menos fluido do que um kernel desktop com smt ativado.
Acho que se eu tivesse preocupado com relação à segurança, usaria o smt desativado com kernel real time. Mas como é um computador de uso recreativo vou deixar ativado.
É o kernel compilado com preempção, ou seja, altamente disposto a mudar de atividade. O contrário é o modelo “server” que prefere atividade ser executada até o fim para iniciar outra. O modelo “desktop” é um meio termo.
Geralmente as distribuições tem opção de kernel compilado com preempção e chamam de RT ou realtime, pois é bastante positivo em atividades de baixa latência como edição de áudio e vídeo. Também o kernel padrão do ubuntu studio, distribuição voltada para esse público multimidia. No debian vc instala pelo pacote linux-image-rt
Dependendo da sua aplicação, ela pode ficar mais rápida desativando HT (monotasking).
Mas depende, pode compensar em alguns casos específicos e talz, tem que testar e ver se precisa.
Concordo que para quem quer proteção ao máximo, tipo servidor, o HT deveria ser desabilitado mesmo.
Aí você escolhe: segurança ou velocidade.
Eu tenho umas funções para desabilitar. Os comandos de ativar/desativar devem ser executados como raiz e talvez tenha problemas em executá-los dentro de uma sessão do TMUX (depende da config do seu TMUX):
#cpu stats
model()
{
cat /proc/cpuinfo
}
cores()
{
grep -H . /sys/devices/system/cpu/cpu*/topology/thread_siblings_list
}
#check if intel hyperthread is enabled
#prints 'ht' if enabled
ht()
{
grep -o ht /proc/cpuinfo | uniq
}
#disable one of each sibling ht
dht()
{
local i
for i in 2 3
do
echo "Disabling logical HT core $i"
echo 0 > /sys/devices/system/cpu/cpu${i}/online
done
}
#enable hyperthreading
eht()
{
local i
for i in 2 3
do
echo "Enabling logical HT core $i"
echo 1 > /sys/devices/system/cpu/cpu${i}/online;
done
}
Em softwares como jogos antigos, que dependem quase que exclusivamente do desempenho single ou dual core, o HT (ou SMT) pode realmente até atrapalhar em alguns casos. Pelo que sei, em programas mal otimizados, a divisão de tarefas entre os núcleos pode ser mal feita e atividades podem ser direcionadas às threads extras enquanto os núcleos físicos ficam ociosos.
Bloco de Citação
When SMT is activated, 4 processors are available. The 2 physical processors are the CPU 0, 1 and the two logical processors are CPU 2, 3. If an application which for example manages 2 threads shares them wrongly, on say CPU 0 and 3, performance will drop because only 1 of the 2 physical cores are used. As a result, when software shows a drop in performance, there are two possible solutions: disactivate SMT completely, or manually set up the affinity of the software in the task manager.
Contudo, ao usar mais de um programa aberto ao mesmo tempo ou realizar qualquer atividade um pouco mais pesada, facilmente se usa mais que isso. Para quem só vai navegar na Internet, editar documentos e fazer coisas do tipo, pode nem fazer diferença. Mas para qualquer tarefa um pouquinho mais exigente, desativar esse recurso é abrir mão de muito desempenho e, possivelmente, conviver com travamentos. Por sinal, até algum tempo atrás (gerações anteriores), esse recurso era justamente a principal diferença e praticamente a única justificativa para comprar um Core i7 no lugar de um Core i5, por exemplo.
Na minha BIOS tem a opçãp de nucléos, eu tenho opções como:
usar 1 , 2 ou todos os nucléos que no meu caso são 4 , esse tutorial se refere a esse meu caso ???
ela tem a Tecnologia Hyper-Threading Intel® oferece dois segmentos de processamento por núcleo físico,
ai tem a opção de 1 , 2 ou all , no meu caso eu deixo ativo apenas 2 né isso ???