[RESOLVIDO] Problema para desabilitar o Hyperthread do Intel

1. [RESOLVIDO] Problema para desabilitar o Hyperthread do Intel

augusto
marimbondo

(usa Outra)

Enviado em 26/11/2019 - 23:40h

Olá boa noite.

Eu estou tentando desabilitar o Hyper Thread do meu processador Intel i7 Skylake da 6a geração.

Quando desabilito na BIOS e tento entrar no servidor do X para rodar o XFCE, tenho um erro: xf86EnableIOPorts failed to set IOPL for I/O.

Eu tenho instalado o acpi e o acpid.

Bom, eu reativei o Hyper Thread, mas tem uma outra opção na BIOS que desabilita núcleos múltiplos (o meu tem 2 núcleos reais).

Enfim, se desabilito ele, também tenho o mesmo erro.

Esses dias, estava lendo que alguns computadores mais novos nem tem mais a opção de desabilitar o Hyper Thread, e o povo do BSD este ano, tem oferecido uma maneira para poder oferecer uma maneira de desabilitar o Hyper Thread nessas situações, não sei se já está tudo implementado no kernel deles. Também não sei se tem uma opção no Linux para isso.

Será que o Hyper Thread agora está tão bugado que nem essa coisa conseguimos mais desabilitar?
Alguém sabe uma maneira de contornar esse bug??

OBSERVAÇÃO: Consegui resolver o problema, veja minha mensagem seguinte, seção RESPOSTA.




  


2. Re: Problema para desabilitar o Hyperthread do Intel

augusto
marimbondo

(usa Outra)

Enviado em 28/11/2019 - 17:09h

Vou responder a minha pergunta, para ficar de referência.

Parece que os bugs do Meltdown e Spectre foram primeiramente observados bem no meu processador, um Skylake.
Deve ser um Spectre extremamente violento no Skylake, para ele ser o primeiro processador que acharam essa classe de bugs...
Isso me estimula a não persseguir mais o porquê de _não_ conseguir desabilitar o hyperthreading na BIOS sem que isso me traga problemas com o servidor de X...
Intel's Skylake and Kaby Lake CPUs have nasty hyper-threading bug
https://www.theregister.co.uk/2017/06/25/intel_skylake_kaby_lake_hyperthreading/

Uma maneira de desabilitar o hyperthreading sem usar um comando de boot do kernel é com alguns "echos".
Eu testei aqui, e só consigo desabilitar o hyperthread com o método descrito abaixo na referência.
Se colocar o comando de "nosmt" pra fazer o boot do Linux, também me causa problemas..
(por exemplo, echo 0 > /sys/devices/system/cpu/cpu3/online
How to disable or enable hyper threading on my Linux server
https://www.golinuxhub.com/2018/01/how-to-disable-or-enable-hyper.html

Existe um comando de kernel para lançar para o Linux desativar o hyperthread. Antigamente, era o 'noht', mas ele foi descontinuado faz tempo.
[noht] is obsolete since at least Linux 2.6.18. The noht kernel option was removed. This is unfortunate, because Linux enables a workaround for some Haswell perf-counter errata (BJ122, BV98, HSD29) only if HT is on, and this happens before initramfs is even loaded

https://serverfault.com/questions/235825/disable-hyperthreading-from-within-linux-no-access-to-bios

Atualmente, o que se usa é o 'nosmt'.
SMT significa 'Simultaneous Multithreading' e o Hyper Threading da Intel é um tipo de SMT.

Para quem não precisa se preocupar com esses espectros e não liga para segurança nenhuma, tem um comando de kernel para desabilitar (quase) todas as mitigações que é o 'mitigations=off'.
Parametros do kernel 5.3
https://www.kernel.org/doc/html/v5.3/admin-guide/kernel-parameters.html
Para desabilitar as mitigações para kerneis abaixo de 5.1.3, veja:
https://linuxreviews.org/HOWTO_make_Linux_run_blazing_fast_(again)_on_Intel_CPUs

Desde junho de 2018 quando descobriram os Spectres, somente o povo do BSD (kernel BSD) tem se preocupado com isso.
Inclusive, no BSD, o hyperthreading foi desabilitado por padrão. Agora estão bolando uma forma fácil para reabilitar o hyperthreading quem quiser.
OpenBSD Disables Intel CPU Hyper-Threading Due to Security Concerns
https://www.bleepingcomputer.com/news/security/openbsd-disables-intel-cpu-hyper-threading-due-to-sec...

O povo do BSD foi massacrado por causa disso. Porém, somente agora recentemente o povo do Linux se deu conta que desabilitar o hyperthread é necessário.
Running on Intel? If you want security, disable hyper-threading, says Linux kernel maintainer
https://www.theregister.co.uk/2019/10/29/intel_disable_hyper_threading_linux_kernel_maintainer/

Quanto se perde com o desligamento do hyperthreading?
Teoricamente, 50% de velocidade. Porém, não é verdade que o desempenho caia.

Uma observação muito importante feita pelo mantenedor do BSD Mark Kettenis:
Note that SMT doesn't necessarily have a posive effect on performance; it highly depends on the workload. In all likelyhood it will actually slow down most workloads if you have a CPU with more than two cores.

https://www.mail-archive.com/[email protected]/msg99141.html

Eu prefiro um carro muito seguro do que um carro sem nenhuma segurança.
Fora isso, nada te impede de pegar um carro que parece um foguete e acelerar a mil por hora na estrada cheia de buracos da web...


RESPOSTA:

Consegui desarmar o HT da Intel e entrar no X server!

O problema era na escolha do driver gráfico para o X Server. Vai depender muito das suas configurações de processador, se tem um cartão integrado, e se tem um cartão da NVIDIA, etc.

Depois de instalados os drivers da nvidia e do bumblebee (pois tenho um cartão gráfico da NVIDIA e o integrado da Intel), e desinstalar quaisquer outros divers que não precisavam (eu havia instalado vários drivers do xorg xorg-drivers sem saber se eram necessários), consegui fazendo o seguinte:

Primeiro, não havia o arquivo /etc/X11/xorg.conf. Nos fóruns do Arch, eles falam que não precisa se preocupar em configurar o xorg.conf, "geralmente".

Há duas maneiras de se gerar um xorg.conf. A primeira é entrando como root e rodando "# Xorg :0 -configure" no TTY1.
Porém, esse arquivo gerado não funcionou no meu caso.

O que realmente resolveu foi primeiro apagar o arquivo xorg.conf gerado e depois rodar "# nvidia-xconfig" como root no TTY1. É importante desconectar os monitores externos... Depois, mudei a linha do /etc/X11/xorg.conf gerado:

Driver "nvidia"
VendorName "NVIDIA Corporation"

para:

Driver "intel"
VendorName "Intel driver"


(Re)instalei também, por via das dúvidas: xf86-video-intel, xf86-video-nouveau, xf86-input-libinput, libva-intel-driver e xf86-video-fbdev, mas não tive tempo de testar um por um para ver quais eram realmente necessários.