Banner2

hacking

Wmaker acordando demais o processador: Bug e Patch

Tema Sleep para Window Maker

Um problema no Window Maker foi identificado por Carlos Mafra, que o relatou em um comentário aqui no blog. Antes de mais nada, não precisamos entrar em pânico, pois não é um bug de segurança, mas de performance. Aqui vai parte do comentário onde o Carlos descreveu o problema:

Usando o programa powertop da Intel eu descobri que o wmaker acorda o meu processador 4 vezes por segundo, mesmo sem eu estar fazendo nada. Um cara da lista do powertop me disse (em email particular) que isso provavelmente é um bug (o Gnome não gera wakeups quando está idle, por exemplo). Eu estava tentando ler o código-fonte pra descobrir o culpado, e acabei encontrando algumas referências a wusleep(), mas nenhuma delas me pareceu ser o motivo dos wakeups. Eu já tentei mandar um email para a lista wm-dev, mas ela está fora do ar. Já tentei mandar email para o Kojima e Dan Pascu, mas até agora nada (se bem que mandei há menos de um dia). Por isso gostaria de iniciar uma discussão sobre isso.

Ontem à noite (e só li hoje) o Carlos me enviou um e-mail relatando sobre a correção para o problema e disponibilizando um patch. Segue o e-mail que me enviou:

O patch para o Window Maker está na minha "página": ttp://www.ift.unesp.br/users/crmafra/patch_wmaker-0.92.0-m2

Ele faz duas coisas:

  1. Retira os timers que estavam causando problema (veja as linhas apagadas que contém WMAddTimerHandler);
  2. Introduz uma nova funcionalidade, agora quando você muda alguma configuração modificando algum arquivo dentro de GNUstep/Defaults, o wmaker é notificado que houve mudança e as carrega automaticamente.

O meu laptop está funcionando há bastante tempo com o wmaker aberto e não tive qualquer problema. Gostaria que mais pessoas testassem o patch, e é
realmente uma pena que a lista de discussão oficial do wmaker está fora do ar e
nenhum desenvolvedor parece estar mais vivo.

A modificação 2 é relativamente tranquila. Ela utiliza o mecanismo dnotify do kernel para "avisar" sobre mudanças em arquivos. Eu copiei e adaptei o
código-exemplo que está no linux kernel em Documentation/dnotify.txt.

Antes o wmaker adicionava um "timer", que era executado a cada 3 segundos para ver se alguma coisa tinha mudado. Esse é um comportamento ruim, porque acorda a cpu para não fazer nada a maior parte do tempo. Essa era uma das causas do powertop indicar que o wmaker acordava a cpu mesmo estando sem fazer nada. Apesar de no código estar que era executado a cada 3000 milisegundos, nos testes que eu fiz ele era responsável por 0.6 wakeups/segundo. É possível ver isso também sem o patch, usando a opção --no-polling.

A mudança 1 é um pouco difícil. Eu ainda não entendo direito porque nada de ruim acontece ao se retirar o timer que executava "delayedAction" a cada 500 milisegundos. Esse era o maior responsável pelos wakeups apontados pelo powertop. Me parece que essa parte do código não fazia nada importante, ela era executada enquanto não acontecia nada no X (nenhuma tecla apertada, nenhum movimento do mouse, etc). Mas não tenho certeza disso e o melhor seria falar com um desenvolvedor do wmaker. No entanto, posso garantir que no meu computador tudo está funcionando direito!

Todavia, esse patch deve ser tomado "cum grano salis", porque não sou programador e há 5 dias ainda nunca tinha lido o código-fonte do Window Maker.

Carlos R. Mafra

Agradeço ao Carlos Mafra por ter me comunicado isso tudo. Tomei a liberdade de publicar aqui mesmo uma cópia do patch, que continua também disponível na página do Carlos.

Não apliquei o patch, mesmo porque utilizo o Window Maker fornecido diretamente pelo Debian Lenny e nunca tentei compilá-lo eu mesmo. Talvez um outro dia eu faça isso. Segundo o Carlos, com a correção o Window Maker passa a ser responsável por 0 wakeups. Bom, quem quiser testar por favor comente aqui as impressões.

P.S.: A imagem que ilustra este post é do tema para Window Maker Sleep.

Window Maker com menus transparentes?

Menus transparentes no wmaker

Data do início de 2004 um artigo ensinando como adicionar suporte a menus transparentes no Window Maker. O artigo foi escrito por Ricardo Iramar dos Santos, que descreve o procedimento para a versão 0.80.2 do Window Maker.

Não cheguei a testar o recurso e não sei se há de funcionar na versão corrente (0.92.0), mas fica a dica. Quem já testou, quiser testar ou tiver mais informações, fique à vontade!

Syndicate content