martes, 20 de septiembre de 2022

Preparing a Linux machine for Golang Profiling Test

Debes setear el CPU para que sufra el mínimo recalientamiento durante las pruebas, esto con el objetivo de evitar falsos resultados en las pruebas causadas por aumentos o disminuciones de las frecuencias del CPU 

Paso 1: Instala una distro sin modo gráfico (ubuntu server por ejemplo)


Paso 2: Configurala para que el CPU se recaliente al mínimo

Vamos a crear un servicio, que cuando levante, deshabilite el turbo boost, el hyperthreading y setee la frecuencia del CPU al mínimo.

1- Primero debes crear el fichero

nano /usr/bin/enable-profiling-mode.sh

 Debes escribir lo siguiente:

# Apaga el turbo

/bin/sh -c "/usr/bin/echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"

# Apaga el turbo (por si el de arriba no funciona)
wrmsr --all 0x1a0 0x4000850089

# Apaga el hyperthreading

echo off > /sys/devices/system/cpu/smt/control

# Setea la frecuencia al mínimo (en mi caso 800MHz)
sudo cpupower frequency-set -g performance

sudo cpupower frequency-set -u 800MHz



y para desactivar este modo:

nano /usr/bin/disable-profiling-mode.sh

 Debes escribir lo siguiente:

/bin/sh -c "/usr/bin/echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"

sudo wrmsr --all 0x1a0 0x850089

echo on > /sys/devices/system/cpu/smt/control

sudo cpupower frequency-set -g powersave



Luego debes crear el siguiente servicio:

nano /etc/systemd/system/cpu-profile-mode-on.service

Y escribir esto dentro:

[Unit]

Description=Prepare the machine for profiling 

[Service]

ExecStart=/bin/sh /usr/bin/enable-profiling-mode.sh

ExecStop=/bin/sh /usr/bin/disable-profiling-mode.sh

RemainAfterExit=yes

[Install]

WantedBy=sysinit.target



Luego debes habilitar el servicio

systemctl enable /etc/systemd/system/cpu-profile-mode-on.service

y luego levantarlo

systemctl start /etc/systemd/system/cpu-profile-mode-on.service

Si ves el status:


Luego si ejecutas i7z deberías ver esto



Luego vamos a estresar la máquina con el siguiente comando:

stress --cpu 8 --io 4 --vm 2 --vm-bytes 5GB --timeout 20s


Observaremos que la frecuencia del CPU se mantiene y su tempreratura aumenta solo un poco