Windows Vista e acessos constantes ao disco
Autor: Rafael | Publicado: 2009-04-03T20:42:00-03:00

Irei fazer um post sobre Windows porque é o meu sistema operacional oficial. Como eu trabalho muito com o ArchC e outros softwares de linux, isto pode parecer um pouco contraditório, mas o que acontece é que o meu linux de trabalho é virtualizado pelo VMWare, e isto me facilita enormemente as coisas, pois posso gravar pontos "snapshots" do meu linux com todo meu ambiente de trabalho aberto e configurado (geralmente consistindo de algumas telas de terminal nos caminhos corretos e alguns emacs abertos). Já vi gente que prefere rodar linux como base e Windows virtualizado, mas como estou em um TabletPC, o software que possui maior integração com as suas funcionalidades é o OneNote para Windows, então não abro mão dessa configuração.Este é um computador HP, e desde que o comprei, algo vem me incomodando: o HD. Muitas vezes dava para escutar o HD se desligando e religando (barulho de click para ligar, barulho das cabeças se recolhendo quando desligava), devido ao APM (advanced power management), ao ponto em que eu tive que pesquisar um software para Windows para desligar o APM do disco e mantê-lo rodando em sua rotação máxima 100% do tempo (para linux este software seria o hdparm). Pois bem, após 4 meses usando o computador tendo que desligar o APM sempre que logava (sim, o Windows religa o APM sempre que volta de um sleep, liga o computador, etc.), resolvi investigar mais a fundo a causa do problema: a constante atividade no disco (que faz com que o APM seja inútil e não consiga economizar nem um watt).A situação em que me encontrava era a seguinte: ligava o computador e após esperar o computador ficar inerte (sem nenhuma atividade), a  luz do HD continuava piscando periodicamente, de 1 em 1 segundo. Ora, seja lá quem foi que teve a idéia de fazer o APM dos discos, pensou: "eu espero um tempo para determinar que não há mais atividade no disco e depois reduzo a rotação do disco. Quando alguém solicitar acessos ao disco, eu retorno à rotação máxima." De fato parece coerente, porque enquanto estou digitando este texto, estou usando apenas a memória e o disco poderia estar desligado, economizando energia e evitando gerar calor (acima de 50graus já é muito para um HD). Mas uma combinação de softwares mal-feitos e idéias ridículas no Windows Vista fazem com que o APM do disco seja ou inutilizado (porque o disco nunca está desocupado) ou um empecilho (no meu caso, o disco as vezes ficava inutilizado pelo tempo suficiente para que o APM abaixasse o rotação do disco e recolhesse as cabeças. 0,5s depois um acesso ao disco fazia com que o disco tivesse que se reestabelecer logo em seguida, fazendo um barulho de click irritante. Isto acontecia umas 4 vezes por minuto.Determinar os culpados pelos contantes acessos ao HD no Windows Vista foi uma tarefa de muita pesquisa em fórums e uso de programas de monitoração de acesso ao disco. Atualmente, meu acesso a disco é nulo quando nenhum programa realmente está rodando. Para isso, fiz o seguinte:- Desliguei o serviço de Telefonia. O Windows se recusará a parar o serviço (incrível não?), então desativei (impedindo que ele fosse iniciado no próximo boot) e reiniciei o sistema. Como não uso modem, este serviço era razoavelmente inútil e não me fez diferença.- Renomeei C:\Windows\SMIINT\Blservice.exe para outro nome (não executável) para impedir de que este entrasse em execução no próximo boot. Este programa, ao que me pareceu pelas pesquisas que fiz, foi feito pela HP para corrigir um comportamento do BitLocker (recurso do Vista) e é ridiculamente implementado, a ponto de ficar fazendo polling do disco rígido e de pendrives. Ou seja, periodicamente, um acesso ao HD é feito. Se você contava com longos tempos sem acesso ao HD para economizar energia, diga adeus a essa idéia se BLservice.exe está em execução no seu sistema. A implementação do que seria um workaround para um problema do BitLocker (já soa porco não?) é tão boa que eventualmente quando um pendrive é conectado, o programa pode entrar em colapso com a mensagem "BLService.exe parou de funcionar, clique aqui para blablabla..". Isto é fácil de ver em computadores HP. Como não uso o BitLocker e não sou fã de coisa porca, parei este processo e tirei do próximo boot.- Desabilitei o driver do meu DVD (reabilito quando preciso de usar o DVD). Este foi um dos problemas menos triviais que encontrei enquanto pesquisava e pude constatar que de fato ocorre aqui. Alguns hardwares piscam a luz do HD a cada vez que o Windows pesquisa para saber se há um CD/DVD no drive para lançar o autoplay. E o Windows elegantemente roda um lindo loop a cada 2s para ver se tem CD no seu drive para disparar o autoplay. O sujeito sábio que explicou isso em um fórum obscuro disse que nos primeiros Windows (95, 98), quando se desabilitava o autoplay, o Windows parava com isso. Mas nos Windows recentes, isto não acontece. Como me irrita em demasia ver a luz do HD piscando a cada 2s, desabilitei o driver do DVD e assim não há código de autoplay para poluir meu bus de 2 em 2s perguntando se há CD na unidade.- SuperFetch, ReadyBoost, Indexing Service e System Restore (serviços) todos desabilitados. Isto era o que mais revoltava algumas pessoas nos fórums. Bastava o pobre sujeito, enlouquecido com a luzinha do HD, dizer que desabilitou todos estes serviços (principalmente SuperFetch), para que viesse um defensor ortodoxo do Vista para vir com os olhos cheios de lágrimas de raiva dizendo "De que adianta tirar esses serviços, agora você acabou com tudo que é bom no Windows. Seu desempenho será miserável a partir... (e começava a rogar pragas)". Vi isso inúmeras vezes. Vamos segmentar os usuários então. Para alguns usuários, SuperFetch (em suma um algoritmo de inteligência artificial para determinar os dados do HD mais usados e carregá-los na memória antes de serem usados) é muito bom. Já eu gosto de ter controle absoluto do que está acontecendo no meu computador, no hardware que eu paguei. Eu decido o que o software maldito que roda no meu hardware vai fazer, não quem fez o software. Controle, é só isso. Se o meu HD vai explodir no próximo acesso, gostaria que ele explodisse quando eu chamasse o Windows Explorer para ler algum arquivo, e não com o Windows parado quando o SuperFetch achasse que seria bacana carregar na memória "BigBang Theory Episode 20.avi" porque ontem eu acessei esse arquivo, e eu posso disparar o Media Player abrindo este arquivo a qualquer momento. Eu sou o tipo de usuário que não se importa em esperar mais, porque gosta de entender que naquele momento o hardware está fazendo o que você pediu, e nada mais. Feito este discurso, devo acrescentar que obviamente todos esses serviços fazem um uso intensivo do HD (muitas vezes desnecessariamente), elevando a temperatura do HD (estou tocando muito neste ponto porque meu HD ficava frequentemente a mais de 53 graus e, como disse, é muito alto. Chegou ao ponto de quando clicar para ver as informações SMART do disco, eu receber a "reclamação" de que a temperatura está acima do recomendado). No caso extremo, o SuperFetch e o Indexing Service, de mãos dadas, são capazes de reduzir a vida útil do computador de uma dona de casa que apenas trabalha no notepad e não precisaria estressar tanto seu hardware. Para quem não gosta desse discurso, pense num notebook que precisa economizar energia.* Registro "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Reliability" chave "TimeStampInterval" estava com valor 1, mudei para 0. Isto desabilita um recurso interessante do Windows apelidado de heartbeat. A cada poucos segundos o Windows escrevia em dois arquivos, "lastalive0.dat" e "lastalive1.dat", gerando tráfico para o disco. Pensando um pouco, essa é a própria definição de *anular* completamente os esforços do APM, porque o disco nunca estará desocupado tempo suficiente para dormir e economizar energia. Contudo quem implementou esse algoritmo tinha um propósito: registrar qual foi o último momento em que o Windows estava ligado e rodando estável, a fim de gerar interessantes relatórios para quando o Windows entra em colapso ou é desligado de modo não seguro. Assim você pode dizer "olha, as 17horas estava tudo ok, depois tudo parou de funcionar". Bom, ao menos isso é o que parece ser, pelo que pesquisei. Nem preciso dizer que não hesitei muito em mudar a chave para 0 e desligar a batida de coração do Windows.* A última modificação é certamente a mais radical, pois já tinha mudado bastante coisa e alguns acessos ao HD permaneciam. Eram acessos de log e no meu caso específico, tive a triste constatação de código estúpido rodando no pacote de softwares que compõem o driver da minha placa de vídeo ATI. O que estava sendo ansiosamente registrado em meu EventLog do Windows era o evento "Exception (Killing CCC0 Process): Não há nenhum processo executando com este ID." a cada 1 minuto, exatamente. A cada 1 minuto o disco ligava para logar isso. Sim, é triste. Periodicamente o elegante código implementado neste driver tenta, sem sucesso, matar outro processo. Isto cheira a workaround dos mais porcos possíveis. Como minha paciência já estava se esgotanto, desliguei (a mesma maneira do serviço de telefonia, desabilitando e reiniciando) todo o EventService (para não ter mais que me deparar com log que eu não pedi) e por conseguinte o SchedulingService que depende do log de eventos. O EventService eu não uso mesmo e, se me interessar debugar algo que está acontecendo, basta ligar o serviço de novo. O Scheduling tem muita coisa agendada para acontecer periodicamente, sem que você saiba. O meu tipo de usuário, como já expliquei, adora serviços escondidos que começam a executar sem que você tenha pedido. Depois de desabilitar tudo isso, fiquei tão triste que pensei em soltar fogos já que não apareciam mais processos intrometidos como updater do google procurando atualização, updater de java, defrag agendado, etc e tal e por aí vai 1000 serviços que "facilitam" a vida do usuário. Para concluir, gostaria de dizer que de maneira nenhuma um sistema operacional deve vir configurado da mesma forma para todos os tipos de usuários. É um absurdo colocar o mesmo sitema operacional em um desktop de alto desempenho e em um notebook com necessidades de economia de energia. Mas isto acontece com o Windows, que é praticamente o mesmo em qualquer lugar que você instale. Com isso, podemos ver os conflitos que procurei ilustrar aqui, como é o caso de um recurso para economia de energia de disco rígido sendo completamente inutilizado por inúmeras políticas de execução contrárias ao conceito, sem considerar softwares mal construídos, com mal comportamento. Lendo alguns fórums, cheguei a encontrar um caso absurdo de que o disco rígido de um sujeito estava sendo constantemente acessado por frequentes gravações no registro do Windows. Investigando um pouco mais, a pessoa descobriu que o programa possuía chaves no registro de nome "In" e "Out", fazendo escrita periódica nestas chaves e, ao que tudo indica, usando o registro do Windows para efetivamente fazer comunicação interprocessos. Astonishing! Programadores de Windows, sejam criativos, mas não porcos.