Devo desativar o hyperthreading?

6

Estarei maximizando algumas caixas executando um processamento intenso intenso da CPU.

Cada processo usa apenas 1 thread, então vou executá-los em paralelo. Estou usando máquinas com 4 núcleos, então são 8 com o hyperthreading ativado.

Cada processo também usa 1GB de RAM, então eu precisarei de 8GB de RAM por máquina se o hyper-threading estiver ativado, ou 4GB se ele estiver desativado.

A minha pergunta é: devo ativar ou desativar o hyperthreading?

O custo da RAM não é a preocupação, mas a velocidade com que o processamento pode ser feito. Seria mais eficiente com o hyperthreading ativado ou desativado?

    
por Alasdair 16.12.2011 / 14:23

3 respostas

8

A única maneira de saber com certeza é comparar.

Dito isso, há pouquíssimos cenários em que o HT retarda as coisas em uma CPU moderna, mas mover de 4 a 8 processos pode adicionar E / S suficiente para que outras áreas do sistema se tornem um gargalo (disco, rede e largura de banda RAM). , etc.)

Acho que, não importa o que, o HT deve ser ativado, mas você precisará avaliar seu sistema para ver quantos trabalhos podem ser executados de uma só vez para obter o máximo rendimento.

Se nada mais, o sistema operacional pode usar alguns recursos extras de execução.

    
por 16.12.2011 / 14:33
3

Teste a execução de um processo com o HT desativado.

Se o processo não atinge o máximo do núcleo único quando o HT está desativado, seria mais eficiente executar com o HT ativado, já que você estaria "desperdiçando" menos ciclos de CPU.

Se ele fizer o máximo do núcleo, então, em teoria, qualquer situação deve levar o mesmo tempo para ser executada. Tendo lido a resposta do afrazier e sua resposta, este parece ser o único benchmark válido que você pode precisar realizar.

    
por 16.12.2011 / 16:05
3

Um script curto para desabilitar CPUs com hyperthreaded está abaixo. Isso pode ser útil para o benchmarking. Funciona no Centos 6.2 (kernel 2.6.32).

#!/bin/sh
cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list |
sort -u |
while read sibs
do
    case "$sibs" in
            *,*)
                    oldIFS="$IFS"
                    IFS=",$IFS"
                    set $sibs
                    IFS="$oldIFS"

                    shift
                    while [ "$1" ]
                    do
                            echo Disabling CPU $1 ..
                            echo 0 > /sys/devices/system/cpu/cpu$1/online
                            shift
                    done
                    ;;
            *)
                    ;;
    esac
done
    
por 17.05.2012 / 03:50

Tags