Som travando, superaquecimento, kernel panics… Meu MacBook tinha um problema1: ele estava mais instável que um computador poderia ser. A prova disso é que o Mac OS X estava me presenteando com mais kernel panics do que eu gostaria (exemplo exibido na figura abaixo). Verdade que eles são os kernel panics mais bonitos que já vi, mas incomodam.

Kernel panic do Mac OS X: 'You need to restart your computer. Hold down the Power button for several seconds or press the Restart button'

AVISO: Só siga os passos aqui descritos se você souber o que está fazendo. Não me responsabilizo por nada que você fizer. Além disso, parece que o post imediatamente posterior a este apresenta uma solução mais eficiente que a aqui descrita.

(Se você não quiser ler a historinha, pode ir direto para a solução)

Fiquei invocado com a instabilidade e já pensei no pior: “Meu hardware só pode ter ido pro espaço. Vou fazer um teste de memória2!” Rodei o memtest e o teste deu positivo: um dos pentes tinha ido pro espaço. Já pensando no pior, pesquisei preços, mas antes de proceder para a troca dos pentes, limpei as memórias e rodei o memtest novamente. Dessa vez, as memórias passaram no teste! \o/

Voltei a usar o computador e ele até pareceu mais estável… Um pouco antes de outro kernel panic me visitar! :-$ Rodei o memtest novamente, estava tudo nos conformes e comecei a desconfiar que havia algum problema crítico no hardware do meu MacBook3. No entanto, no Linux, nunca tive kernel panics gratuitos. Os que aconteceram sempre foram por minha causa. Logo, não parecia que o hardware estava tão ferrado assim.

Como o problema se manifestava mais frequentemente quando eu assistia vídeos no YouTube, resolvi culpar o driver da placa de vídeo e/ou o Adobe Flash. Cheguei a manipular o driver da placa de vídeo, o que me obrigou a reinstalar o Mac OS X. A parte boa foi que pude comprovar que, mesmo numa instalação nova, o problema persistia (e essa é a parte ruim).

Enfim, coloquei a cabeça para funcionar e percebi que, sempre que os problemas apareciam, a temperatura do processador estava próxima de oitenta e poucos graus e um dos sintomas de que havia possibilidade de kernel panic é que o coreaudiod ficava malucão e o som começava a falhar. Logo, não podia descartar a possibilidade de superaquecimento.

Qualquer Sistema Operacional que dê controle ao usuário permite que ele mude a frequência do processador com alguns poucos cliques (ou comandos). O Mac OS X, não. Pelo menos, não de maneira fácil. Então, resolvi atacar a velocidade do cooler e deixá-lo girando o máximo possível. Instalei o smcFanControl e o FanControl.prefpane sem sucesso. Os problemas continuavam. Até que eu resolvi apelar.

Depois de muito navegar, descobri que um pessoal havia implementado um driver para controle do SpeedStep e que esse driver permitia definir a frequência de operação do processador. No entanto, as instruções do site não são suficientes para colocá-lo para funcionar. Antes de mais nada, baixei o driver4 para minha pasta de Downloads e os comandos abaixo a usarão como referência:

cd ~/Downloads
unzip IntelEnhancedSpeedStep_1.4.9.zip
sudo chown -R root:wheel ~/Downloads/IntelEnhancedSpeedStep.kext
sudo chmod -R 755 ~/Downloads/IntelEnhancedSpeedStep.kext

Agora, é importante saber se esse negócio vai funcionar no computador, então, ao invés de já copiá-lo para o diretório de drivers e correr o risco de ficar com um sistema que não funciona, é melhor carregar o driver e testá-lo manualmente. Se o sistema travar, pode esquecer…

`sudo kextload ~/Downloads/IntelEnhancedSpeedStep.kext`

Ainda funciona? Ótimo! Então podemos deixar o sistema carregá-lo automaticamente na inicialização com os comandos

mv ~/Downloads/IntelEnhancedSpeedStep.kext /System/Library/Extensions
touch /System/Library/Extensions</code></pre>

Perfeito, aqui terminariam as instruções padrão. Só que o Mac OS X possui seu próprio seletor de frequência do processador e, ao menos em meu MacBook, ele interfere com o funcionamento do Intel Enhanced SpeedStep. A solução que encontrei foi desabilitar o AppleIntelCPUPowerManagement, driver padrão do Mac OS X para gerência de energia do processador. Para desabilitá-lo, basta tirá-lo do diretório /System/Library/Extensions e deixá-lo em algum lugar seguro, para backup. ;)

Perfeito. Após um reboot, o driver deve estar carregado e pode ser controlado (sugiro a leitura da página com instruções de como testar o driver) pelo sysctl.

O Intel Enhanced SpeedStep, por padrão, vai funcionar de forma parecida com a do driver da Apple, mas o que eu quero é que o computador fique o menos quente possível. Por isso, meu objetivo é fixar a frequência do processador na menor possível. Há várias formas de fazer isso, escolhi duas: A suave e a agressiva. A suave define que a frequência só deve ser aumentada quando a carga no processador superar 95% (o argumento passado para o kern.cputhrottle_targetload é a porcentagem mínima para variação. 95% é o máximo suportado). Isso já ajuda a deixar o computador relativamente fresco:

`sudo sysctl -w  kern.cputhrottle_targetload=95`

A agressiva desabilita totalmente a mudança automática da frequência e, portanto, a única forma de mudá-la é manual. Essa foi a alternativa que escolhi:

sudo sysctl -w kern.cputhrottle_auto=0 # desabilita a mudanca automatica de frequencia
sudo sysctl -w kern.cputhrottle_curfreq=1000 # velocidade minima do meu Core2Duo

Infelizmente, o IntelEnhancedSpeedStep parece não salvar as opções entre reboots e, por isso, criei uma entrada para o launchd, com o Lingon, que roda esses comandos na hora do boot (exemplo na figura abaixo).

Configuração do Lingon para criação da entrada do SpeedStep

Depois desse trabalho todo, coloquei o macports para compilar alguns pacotes e fui assistir vídeos no YouTube e não tive nenhum problema. Para verificação, foi só aumentar a frequência do processador que voltei a ter problemas, confirmando minha suspeita de superaquecimento.

Pronto. Problema parcialmente resolvido. Ainda preciso criar coragem para abrir o MacBook para limpar seu interior e, com sorte, melhorar a dissipação do calor. Mas, ao menos, já me livrei dos kernel panics.


  1. Na verdade, o problema dele é me ter como dono. Quem me conhece sabe que meus equipamentos são usados até o limite. 

  2. Quando resolvi testar o hardware, aprendi que Macs com senha no firmware não suportam boot no software de diagnóstico de jeito nenhum. :-( 

  3. Não que eu estivesse errado. Havia, mas não é tão preocupante quanto antes. 

  4. É possível baixar o código-fonte, caso você queira compilá-lo. Veja na <a página dos desenvolvedores

Related content