#!/bin/sh set -ef # Para echo em caso de erro e() { printf >&2 '%s\n' "$@"; } # Teste de root. if ! test "$(id -u)" -eq 0; then e 'Você está rodando como um usuário normal.' 'Execute novamente como root/sudo.' exit 127 fi # Testar Intel CPUIntel='' while IFS=' : ' read -r k v; do if [ "$k" = vendor_id ] && [ "$v" = GenuineIntel ]; then CPUIntel=1 fi done < /proc/cpuinfo : "${CPUIntel:?Sua CPU não é da Intel.}" # Alerta para macs if grep Mac /sys/devices/virtual/dmi/id/product_name >> /dev/null 2>&1 && ! test -x "$(command -v macfanctld)"; then e 'Recomenda-se a instalação do gerenciador de ventoinha para Macs (macfanctld).' fi # Linux tools if grep -i 'buntu\|mint\|zorin' /etc/*release* >> /dev/null 2>&1 || grep -R ubuntu /etc/apt/ >> /dev/null 2>&1; then e 'Recomenda-se a instalação das ferramentas de kernel nos sistemas de base Ubuntu. Para isso, rode' '' \ '$ sudo apt install linux-tools-$(uname -r) linux-tools-common' '' \ 'Ignore o aviso acima caso elas já estejam instaladas.' fi e 'Carregando o módulo de kernel do MSR...' if ! modprobe msr; then e 'Não foi possível inserir o módulo do MSR no kernel.' exit 126 fi e 'Lendo o registro PROCHOT do processador...' if ! regist=$(rdmsr -ad -- 0x1FC); then e 'Não foi possível obter os conteúdos do registro BD_PROCHOT.' 'O pacote msr-tools está instalado?' exit 125 fi # remover prefixos regist=$(printf '%s\n' $regist | grep -E '[0-9]+$') # Saber em quais núcleos o BD_PROCHOT está ativado bd_on=0 bd_off=0 nproc=0 for r in $regist; do : $(( bd_on += (r & 1) )) $(( bd_off += (~r & 1) )) $((nproc += 1)) done ec=0 i=-1 if [ "$bd_off" -eq "$nproc" ]; then # Reativar se estiver desativado e 'Todos os processadores estão com o BD_PROCHOT desativado' 'Ativando novamente.' for r in $regist; do if ! wrmsr 0x1FC -p $((i+=1)) $((r|1)); then e "Não possível reativar do BD_PROCHOT no processador ${i}." : $((ec+=1)) fi done else # Desativar por padrão if [ "$bd_on" -ne "$nproc" ]; then e 'Alerta: apenas alguns dos núcleos estão com o BD_PROCHOT ativado.' fi e 'Desativando o BD_PROCHOT em todos os núcleos.' for r in $regist; do if ! wrmsr 0x1FC -p $((i+=1)) $((r&~1)); then e "Não possível reativar do BD_PROCHOT no processador ${i}." : $((ec+=1)) fi done fi exit "$ec"