IBM Cloud Docs
Desativando a Tecnologia Intel HT

Desativando a Tecnologia Intel HT

Se sua configuração de infraestrutura e configuração do aplicativo exigir, será possível desativar a Tecnologia Intel Hyper-Threading (Tecnologia Intel HT) na sua máquina virtual guest.

As instruções neste tópico para desativar a Tecnologia Intel HT em VMs guests aplicam-se apenas a servidores virtuais que são provisionados em hosts que utilizam processadores baseados em Intel.

Entendendo as razões para desativar a Tecnologia Intel HT

A Tecnologia Intel HT é um termo que descreve o multiencadeamento simultâneo (SMT). A Tecnologia HT divide cada núcleo físico em dois processadores virtuais. A Tecnologia HT é como pegar uma estrada ampla com uma única pista e transformá-la em duas pistas relativamente mais estreitas. A rodovia de duas pistas oferece melhor serviço sobre a estrada de pista única se houver tráfego com movimento lento e rápido. A Tecnologia HT proporciona melhor desempenho de aplicativo quando há E/S de arquivo, E/S de rede e outras operações mais lentas misturadas com operações com intenso uso de CPU. A vantagem de desempenho da Tecnologia HT varia tipicamente de 0 a 30% sobre um modo de encadeamento único. Alguns aplicativos também podem ver uma queda no desempenho.

A Tecnologia HT nem sempre é desejável. Neste caso, você pode preferir desativá-la e executar os núcleos em modo de encadeamento único. Há três razões principais para considerar a desativação da Tecnologia HT. A primeira razão está relacionada ao licenciamento de software. Muitos fornecedores de software legado, como os provedores de ferramentas de automação de design eletrônico (EDA), requerem uma licença para cada CPU, independentemente de utilizarem o modo Tecnologia HT ou encadeamento único. Quando o núcleo está no modo de Tecnologia HT, é necessário o dobro de licenças do modo de encadeamento único, mesmo que o aplicativo não esteja obtendo o dobro de desempenho sobre o modo de encadeamento único. Como resultado, EDA e outros profissionais desativam a Tecnologia HT e preferem executar seus softwares em modo de encadeamento único.

O segundo motivo para desativar a Tecnologia HT é evitar problemas de balanceamento de carga e sobrecarga do sistema operacional que acompanham a Tecnologia HT. Os aplicativos de cálculo de alto desempenho (HPC) geralmente criam tantas tarefas de interface de passagem de mensagens (MPI) quanto o número de núcleos físicos e deixam o sistema operacional gerenciar cada tarefa de MPI em um núcleo físico distinto. Quando a Tecnologia HT é ativada, o sistema operacional vê o dobro de CPUs. Enquanto o sistema operacional geralmente faz um ótimo trabalho no mapeamento das tarefas do MPI para um dos dois encadeamentos de um núcleo, o S.O. ocasionalmente pode colocar as duas tarefas em um núcleo físico e deixar outros núcleos livres. Ter ambas as tarefas em um núcleo físico com outros núcleos livres resulta em utilização do sistema abaixo do ideal e desempenho de aplicativo variável. Além disso, o kernel do S.O. aloca estruturas de dados para cada uma das CPUs ativas e as atualiza continuamente para que mais espaço do kernel seja alocado no modo de Tecnologia HT e a sobrecarga de gerenciamento seja aliviada. Aliviar a sobrecarga do sistema operacional desativando a Tecnologia HT ajuda muitos aplicativos HPC a obter um desempenho ideal.

A terceira razão para desativar a Tecnologia HT é a segurança. Alguns usuários preferem desativar a Tecnologia HT para evitar possibilidades de ataque de canal lateral que estejam associadas à execução da Tecnologia HT. O IBM Cloud não compartilha um núcleo físico entre duas máquinas virtuais do cliente, portanto, esse tipo de ataque não é possível.

Se você determinar que a desativação da Tecnologia HT está certa para sua configuração, poderá usar um dos seguintes métodos para desativá-la em suas máquinas virtuais (VMs) guest em IBM Cloud.

Verificando o status de Tecnologia HT e mudando-o em minha VM guest: Configurações básicas

Quando uma máquina virtual está em funcionamento, é possível verificar o status da Tecnologia HT usando o comando lscpu em sistemas operacionais Linux. É exibida uma saída semelhante a esta:

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              8
On-line CPU(s) list: 0-7
Thread(s) per core:  2
Core(s) per socket:  4
...

Neste exemplo, observe que os encadeamentos por núcleo exibem 2, indicando que a Tecnologia HT está ativada. A VM tem 4 núcleos físicos e 8 CPUs virtuais. As versões modernas do kernel do Linux permitem que os usuários desativem a Tecnologia HT em uma base por núcleo. É possível executar alguns núcleos com a Tecnologia HT ativada e outros núcleos com a Tecnologia HT desativada. Para ver isso em uma base por núcleo, é possível usar o comando lscpu --extended. É exibida uma saída semelhante a esta:

CPU     NODE          SOCKET      CORE             L1d:L1i:L2:L3 ONLINE
0       0             0           0                0:0:0:0       yes
1       0             0           0                1:1:0:0       yes
2       0             0           1                2:2:1:0       yes
3       0             0           1                3:3:1:0       yes
4       0             0           2                4:4:2:0       yes
5       0             0           2                5:5:2:0       yes
6       0             0           3                6:6:3:0       yes
7       0             0           3                7:7:3:0       yes

A saída de exemplo precedente mostra que cada núcleo possui 2 CPUs e ambas as CPUs estão on-line. O núcleo 0 possui irmãos: CPU 0 e CPU 1. Para obter a lista de irmãos, é possível localizar os dados em thread_sibling_list no sistema de arquivos de dispositivos como mostrado no exemplo a seguir:

cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list
0-1
0-1
2-3
2-3
4-5
4-5
6-7
6-7

Alguns kernels e arquiteturas de CPU usam uma vírgula ( , ) em vez de um hífen (-) na lista de irmãos de encadeamento.

Você pode desativar a tecnologia Hyper-Threading para um único núcleo escrevendo um zero (0) no campo on-line no sistema de arquivos do dispositivo para a CPU correspondente. Por exemplo, para desativar a Tecnologia HT no núcleo 2 (CPU 5 no exemplo anterior), execute o comando a seguir:

echo 0 > /sys/devices/system/cpu/cpu5/online

Este comando inverte a CPU 5 para off-line, desativando a Tecnologia HT no núcleo 2, mas mantém os outros núcleos no modo de Tecnologia HT como mostrado no exemplo a seguir quando vo comando lscpu --extended é executado:

CPU     NODE          SOCKET      CORE             L1d:L1i:L2:L3 ONLINE
0       0             0           0                0:0:0:0       yes
1       0             0           0                1:1:0:0       yes
2       0             0           1                2:2:1:0       yes
3       0             0           1                3:3:1:0       yes
4       0             0           2                4:4:2:0       yes
5       -             -           -                :::           no
6       0             0           3                6:6:3:0       yes
7       0             0           3                7:7:3:0       yes

É possível repetir o processo anterior para cada núcleo para desativar a Tecnologia HT para a VM. Quando a VM tem muitas CPUs, isso pode ser difícil. O script a seguir é um script de bash muito simples para desativar a Tecnologia HT em cada núcleo:

#!/bin/bash
     for vcpu in `cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | cut -s -d- -f2 | cut -d- -f2 | uniq`; do
          echo 0 > /sys/devices/system/cpu/cpu$vcpu/online
     done

Ativando a Tecnologia HT para um núcleo específico e CPU associada

Se você quiser ativar a Tecnologia HT novamente, é possível fazê-lo escrevendo um 1 no campo on-line para cada uma das CPUs.

echo 1 > /sys/devices/system/cpu/cpu5/online

Ativando a Tecnologia HT para todos os núcleos na VM

Alternativamente, é possível usar o script de bash simples as seguir para ativar a Tecnologia HTpara a VM.

#!/bin/bash
     for vcpu in `lscpu --extended | grep "no" | awk '{print $1}'`; do
          echo 1 > /sys/devices/system/cpu/cpu$vcpu/online
     done

Ativando e desativando a Tecnologia HT em minha VM guest: script

Você também pode experimentar este script, criado por Wyatt Gorman, para ativar e desativar a tecnologia Hyper-Threading. Ao fazer download e executar o script, você recebe essas opções:

OPTIONS
-d | --disable             Disable Hyper-Threaded vCPUs
-e | --enable              Enable Hyper-Threaded vCPUs
-s | --show                Show Hyper-Threading status
-h | --help                Display this usage output

É possível obter o status da Tecnologia HT, desativar a Tecnologia HT e ativar a Tecnologia HT para todos os núcleos da VM. No entanto, se você precisar desativar a Tecnologia HT em um subconjunto dos núcleos, siga as etapas na seção de configurações básicas.

Ativando e desativando a Tecnologia HT em minha VM guest no tempo de inicialização: dados do usuário

O IBM Cloud fornece uma maneira de especificar dados opcionais ao criar uma instância de servidor virtual para configurar instâncias ou executar scripts quando a instância é provisionada; isto é chamado de Dados do usuário.

Durante o processo de criação da instância do servidor virtual, é possível especificar o código de amostra a seguir na seção Dados do Usuário do console do IBM Cloud:

#cloud-config
bootcmd:
 - for cpunum in $(cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | cut -s -d- -f2- | tr ',' '\n' | sort -un); do echo 0 > /sys/devices/system/cpu/cpu$cpunum/online; done

O script que você fornece no campo Dados do usuário desativa a Tecnologia HT durante o processo de inicialização da instância. Você vê mensagens indicando que as CPUs estão desativadas:

dmesg |grep offline
[    9.488364] smpboot: CPU 1 is now offline
[    9.544370] smpboot: CPU 3 is now offline
[    9.572823] smpboot: CPU 5 is now offline
[    9.600633] smpboot: CPU 7 is now offline

É possível usar uma abordagem similar para injetar esse processo no Terraform.