MiniCódigos


Scripts y pequeños programas

cpu_speed
Es un script que controla manualmente el control de energía (governor) del procesador, si bien ya existen algunas soluciones en Linux, esta en particular no requiere de ningún daemon corriendo en segundo plano.

==========================================================================
#!/bin/bash 
# Script para control de escalado (governor) del CPU 
# 2012(C) Abel Sendón <abelnicolas1976@gmail.com>
#
# Este script puede ser distribuido libremente pero sin
# ningún tipo de garantía
#

if [ $UID != 0 ] 
then
echo "Debe ser root para ejecutar este script"
exit 2
fi

# Determina la cantidad de cores del procesador 
#
C=$(cat /proc/cpuinfo | grep MHz | wc -l)
CORES=$(expr $C - 1)

case $1 in 
p)
new_gov="performance"

for i in $(seq 0 $CORES)
do
  echo "Cambiando CPU$i: $(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor) -> $new_gov"
done
echo 

echo "Antes:"
cat /proc/cpuinfo | grep MHz
echo

for i in $(seq 0 $CORES)
do
  echo $new_gov > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
done 

sleep 1
echo "Ahora:"
cat /proc/cpuinfo | grep MHz
echo 
;;

o)
new_gov="ondemand"

for i in $(seq 0 $CORES)
do
  echo "Cambiando CPU$i: $(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor) -> $new_gov"
done
echo

echo "Antes:"
cat /proc/cpuinfo | grep MHz
echo 

for i in $(seq 0 $CORES)
do
  echo $new_gov > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
done

sleep 1
echo "Ahora:"
cat /proc/cpuinfo | grep MHz
echo 
;;

c)
new_gov="conservative"

for i in $(seq 0 $CORES)
do
  echo "Cambiando CPU$i: $(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor) -> $new_gov"
done
echo 

echo "Antes:"
cat /proc/cpuinfo | grep MHz
echo 

for i in $(seq 0 $CORES)
do
  echo $new_gov > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor
done

sleep 1
echo "Ahora:"
cat /proc/cpuinfo | grep MHz
echo 
;;

q)
echo "Frecuencia actual:"
cat /proc/cpuinfo | grep MHz
echo 
echo "Governor actual:"

for i in $(seq 0 $CORES)
do
  echo "CPU$i : $(cat /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor)"
done
;;

*)
echo "Uso $0 <governor | q>"
echo "Donde governor es:"
echo "p performance"
echo "o ondemand"
echo "c conservative"
echo "q consulta el governor y frecuencia actual"
exit 1
;; 
esac
exit 0
==========================================================================

Este script debe ejecutarse con permisos de root, para agilizar su uso se recomienda modificar (o crear) el archivo "/etc/sudoers.d/tu_usuario"  para otorgarle dichos permisos:

Defaults  !root_sudo
User_Alias    USERS = tu_usuario
Cmnd_Alias    ADM = /usr/sbin/cpu_speed
USERS         ALL = NOPASSWD: ADM

Luego se puede ejecutar directamente sudo cpu_speed q (por ej) sin pedir contraseña.



autooverclock
Si se cuenta con el script anterior y se tiene configurado para ejecutarlo sin pedir contraseña, este otro script puede resultar un complemento interesante.

Cuando se ejecuta un proceso que requiere mucho uso del procesador y este está con el modo de energía normal (ondemand) sube su frecuencia para tener más perfomance, pero cuando se tiene un procesador con varios threads y el proceso ocupa sólo uno o dos, el sistema operativo los va "rotando" entre los distintos cores, el asunto es que los cores que estaban libres tenían la frecuencia baja (governor conservative) esto se hace para no tener la frecuencia máxima si no se está usando nada, pero se pierde algo de tiempo hasta que sube el modo de energía.

La solución es usar un script que suba la frecuencia del procesador (sin overclockearlo) al ejecutarse determinados programas y volver al modo ondemand cuando este se cierre, y acá es donde aparece autooverclock.

==========================================================================
#!/bin/bash 
#------------------------------------------------------------------------------
#           FILE: autooverclock.sh 
#
#          USAGE: autooverclock.sh  
#
#    DESCRIPTION: Script que cambia el governor del cpu segun que 
#                 programa se este ejecutando.
#
#           DATE: 2018-12-16
#   REQUERIMENTS: bash
#           BUGS: Ninguno conocido.
#          NOTES: ---
#         AUTHOR: Abel Sendon  -  <abelnicolas1976@gmail.com> 
#        COMPANY: ---
#        VERSION: 1.0
#        CREATED: 2018.12.15 - 18:10:28
#       REVISION: 2018.12.16 - 15:32:58
#        LICENSE: GPL
#------------------------------------------------------------------------------


###############################################################################
# Lista de procesos que disparan la performance del procesador.
#
PROCLIST=(rpcs3 PCSX2 dolphin cinebench pCARS64)
###############################################################################



ISOC="0"
PROCFOUND=""

function oc {
    if [[ $1 == "1" ]]
    then 
        if [[ $ISOC == "0" ]]
        then 
            ISOC="1"
            echo "estableciendo governor performance..."
            nvidia-settings -a [gpu:0]/GPUPowerMizerMode=1
            sudo cpu_speed p
            return
        else
            echo "Governor performance ya esta establecido.";
            return 
        fi 
    fi

    if [[ $1 == "0" ]]
    then 
        if [[ $ISOC == "0" ]]
        then
            echo "governor ondemand ya esta establecido."
            return 
        else 
            echo "normalizando governor..."
            nvidia-settings -a [gpu:0]/GPUPowerMizerMode=0
            sudo cpu_speed o
            ISOC="0"
            return 
        fi
    fi
}

function check {
    PROCFOUND=0
    count=-1

    while [[ $count < $(( ${#PROCLIST[*]}-1 )) ]]
    do
        i=${PROCLIST[$count]}
        PROC=`ps -e | grep -i $i | wc -l`

        if [ $PROC -ne 0 ] 
        then
            echo "ejecutandose " $i
            PROCFOUND=$PROC
        fi
        
        count=$(($count + 1))
        sleep 0.2
    done

    if [[ $PROCFOUND != 0 ]]
    then
        oc "1"
        return
    else
        oc "0"
    fi 
}


function init {
    while true
    do 
        sleep 5s
        check
    done 
}

init 
==========================================================================

Este script se puede poner en inicio automático (recomendado) o ejecutar manualmente, nótese que también cambiar el modo de energía de la placa de video, pero si no se tiene una placa Nvidia, habrá que comentar o borrar las líneas que empiezan con "nvidia-settings".




Translate