3 de abril de 2011

Hibernar o Computador de Trabalho

Lá na Outsystems onde trabalho atribuíram-me um computador pessoal. Tal como eu, muitos dos engenheiros informáticos lá no cantinho da Engenharia usam um monstro da Dell para o seu trabalho diário. Nos cantinhos mais de marketing e vendas e do outro lado do edifício nos serviços (consultoria) a maioria tem computadores portáteis.

Nós trabalhamos com uma data de ferramentas, muitas delas pesadas (o Visual Studio, por exemplo) e de manhã costumava demorar bastante tempo a ligar o computador e ligar os programas todos. Por isso até há pouco tempo atrás o que eu fazia era deixar o computador ligado quando saía para que quando voltasse já tivesse o estaminé todo montado para poder começar a trabalhar sem grande demora. Tal como eu, bastantes dos meus colegas têm o hábito de deixar o computador ligado a noite toda para que quando chegam possam começar imediatamente a trabalhar.

O problema disto é que os computadores estão ligados a semana toda (24*7 = 168 horas) em vez de estarem ligados apenas as horas de trabalho (40 + 5 (almoço) = 45). Em vez de estarem ligados ~30% do tempo (45/168 ~ 0.27), os computadores estão ligados 100% do tempo. Suspeito que isto é sintomático não só na Outsystems mas que também aconteça em muitas outras empresas que trabalhem com computadores.

Para os trabalhadores é uma decisão aparentemente fácil de tomar: deixar os computadores ligados é relativamente simples e não lhes custa nada já que é a empresa quem paga a conta de electricidade. A questão é que custa: o desperdício energético não afecta só a conta de electricidade da empresa, afecta-nos a todos porque a energia é retirada dos recursos finitos do planeta que partilhamos. Quanto menos desperdiçarmos, melhor para todos.

Mas a solução para o dilema é simples. Há muito tempo que existe a possibilidade de hibernar um computador. Se em vez de deixar os computadores ligados quando saímos do emprego os hibernássemos poderíamos ter o melhor dos dois mundos: um espaço de trabalho preparado e igual ao que tínhamos no dia anterior e poupava-se energia.

Mas para isto haviam dois impedimentos. Sinceramente eu sempre tive a ideia de hibernar o meu computador, mas a opção para o fazer não aparecia no menu de desligar o computador. Além disso algumas pessoas deixam o computador ligado para que lhe possam aceder remotamente (através da VPN), caso seja necessário por alguma razão. Nem sempre precisam de aceder remotamente aos computadores, mas não podem sempre prever quando o vão querer fazer, por isso para jogar pelo seguro vão deixando os computadores ligados.

Em conversa com uma amiga minha descobri que afinal até dá para hibernar desktops com Windows (não me aparecia a opção, portanto imaginei que o windows para desktops não viesse com isso ou qualquer coisa parva do género). Seguindo as instruções neste site (principalmente a parte de desactivar o sonho híbrido), lá consegui que a opção aparecesse, configurei o windows para hibernar quando carregasse no botão da energia e assim tenho uma maneira rápida de hibernar o computador antes de ir para casa.

Mas a minha ideia era mais do que apenas eu hibernar o meu computador. A minha ideia era convencer toda a gente lá do cantinho de I&D (Investigação e Desenvolvimento) da Outsystems a fazer o mesmo com os computadores deles. Para isso precisava de oferecer uma solução para a questão do acesso remoto. Relembro que estando o computador desligado não é possível aceder remotamente ao computador e assim trabalhar quando se está em casa. Não é necessariamente uma coisa má, mas há pessoas que (por alguma razão ou por outra) gostam de ter essa hipótese em aberto. Era necessário então arranjar uma solução realista para essa questão antes de tentar convencer as pessoas a desligar o computador delas quando não estão a trabalhar.

Foi então que me lembrei de já ter ouvido falar em WakeOnLAN, um protocolo que permite dizer a computadores específicos para se ligarem através de um pacote especial enviado na rede. Claro que é preciso activar a funcionalidade na BIOS, mas estando disponível e uma vez feito, fica a hipótese de acordar o computador a partir de outro disponível. Para ter uma solução viável, restava então arranjar forma de usar este protocolo para acordar os computadores que precisassem de acesso remoto.

Quando procurei pelo termo não encontrei imediatamente nenhum programa grande que fizesse isso. Mas encontrei dois pedaços de código em Java e C# que produziam o pacote necessário e o mandavam para a rede. A minha ideia original era criar um eSpace (uma aplicação web na terminologia da Agile Platform) e colocá-lo num dos nossos servidores internos para as pessoas terem uma interface sempre acessível e relativamente fácil de usar para acordarem o computador delas. Depois de umas conversas com alguém que gere a nossa infraestrutura e depois de alguns testes, descobrimos que os pacotes que são difundidos neste protocolo não passam pela firewall. As máquinas da infraestrutura estão numa sub-rede, as máquinas do departamento de I&D estão noutra, e o sistema de encaminhamento de pacotes não permite o encaminhamento dos pacotes de difusão entre redes. Como as pessoas que tratam da gestão da rede não estavam muito disponíveis para resolver este empecilho atempadamente, pus-me a engendrar outra solução.

Claro que o ideal era ter uma máquina na infraestrutura (preferencialmente uma máquina virtual) que por acaso estivesse sempre ligada e tivesse uma interface de rede na rede da I&D, daí a solução do eSpace num dos nossos servidores ser tão apelativa, já que não implicaria haver mais energia a ser gasta por causa desta funcionalidade. Mas isso não foi possível e então tive de me resignar a usar uma máquina de desenvolvimento que temos lá no nosso cantinho da manutenção. Essa máquina tem um CentOS e pouca RAM pelo que não é adequada para ter uma instalação da Agile Platform, o que implica que a minha solução final teve de ser de mais baixo nível.

Com o código Java que referenciei anteriormente como base criei uma classe Java com um objecto remoto (usando a tecnologia Remote Method Invocation do Java) que recebe pedidos para acordar um endereço de MAC especifico e que lança o "pacote mágico" para a rede. Como o acesso a este servidorzinho é feito através de ligações TCP/IP normais (e não através de endereços de difusão), passa bem pela firewall para dentro da rede da I&D e assim dá para alguém na VPN acordar o seu computador. Na prática tenho um Cavalo de Tróia na rede a quem qualquer um pode pedir para enviar pacotes que a firewall não deixa passar.

Armado com o conhecimento de como configurar os computadores para hibernar e com uma ferramenta capaz de acordar os computadores hibernados enviei um mail a toda a gente da engenharia da Outsystems divulgando a informação e argumentando que não faz sentido deixar os computadores ligados quando têm outras maneiras de obter o mesmo resultado. A reacção foi boa, parece-me: entre pessoas que não se tinham dado ao trabalho para ver como hibernar o computador e outros que consideraram boa ideia já há menos computadores ligados durante a noite e fim de semana na Outsystems. Com isto no mínimo consegui remover qualquer desculpa que as alguém possa ter para deixar o computador ligado.

Tanta coisa só para ter um departamento de engenharia de uma empresa pequenina a desligar mais meia dúzia de computadores quando as pessoas não estão a trabalhar. Com tantas empresas maiores a fazer coisas piores, porque é que havia de me dar a tanto trabalho para um ganho tão pequeno? É precisamente por ser algo pequeno e relativamente fácil de fazer que vale a pena fazer. Por ser pequeno, pode ser feito noutros sítios, em muitos outros sítios.

Não há muito tempo atrás ouvi falar pela primeira vez na cauda longa da distribuição de lucros da Amazon. A ideia é que na Amazon há alguns produtos (Kindle, por exemplo) que vendem muito. E depois há muitos produtos que vendem pouco. Há um pedaço bastante grande dos lucros da Amazon que vem desta quantidade enorme de produtos que vende pouco.

As contribuições para o melhor estar do ambiente seguem o mesmo raciocínio: o impacto de termos muitas pessoas a fazerem coisinhas aparentemente pequenas é certamente muito maior no panorama geral do que intuitivamente parece. Portanto quando se perguntarem se vale a pena fazer algo mesmo que o ganho energético ou ambiental seja pequeno, pensem também em divulgar o que fizeram e lembrem-se do princípio da cauda longa, porque vale a pena. Especialmente se partilharem para que outros possam fazer o mesmo.

7 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderEliminar
  2. Muito boa atitude :) Conheço uma pessoa cá na empresa que usa métodos mais agressivos aqui do lado dos Serviços: é dos últimos a ir embora e desliga o botão das tomadas. A ideia é matar os "vampiros" dos carregadores e monitores em stand by. Às vezes mata também uns PCs que tinham ficado ligados.

    Quanto ao Hibernar, eu costumo usar o StandBy. É muito mais rápido a ligar/desligar e funciona na perfeição. Experimenta fazê-lo quando vais almoçar, por exemplo. Vai na volta também dá para acordar pela LAN. A "desvantagem" é que fica a consumir um bocadinho muito pequenininho de electricidade só para manter os dados na RAM (penso eu). A hibernação manda tudo para o disco e dps carrega para a RAM. No StandBy, fica tudo em RAM! É mega rápido!

    ResponderEliminar
  3. Olha lá, achas que dava para fazer algo parecido em Linux?

    ResponderEliminar
  4. Pedro,

    No meu caso ter uma atitude tão radical podia ser prejudicial à minha posição da empresa. Não só porque até acho que às vezes se justifica deixar o computador ligado durante a noite (eu próprio já o deixei a correr testes longos durante a noite/fim de semana), mas também porque costumo chegar relativamente cedo e sair relativamente cedo também. Há ainda muitas pessoas a trabalhar activamente quando normalmente me vou embora e eram capaz de não achar muita piada que lhes desligasse a ficha.

    Tomei portanto a atitude de viabilizar que se desliguem os computadores, e deixo à consciência de cada um fazê-lo ou não. Infelizmente a aderência é pouca, felizmente não é nula.

    ResponderEliminar
  5. Deixar o computador em standby não deixa só a RAM ligada. O disco e outros componentes também são deixados num estado a gastar alguma energia.

    Acho que em "sleep"/"stand by" também não dá para aceder remotamente, pelo que é uma solução com as mesmas desvantagens que hibernar e que mesmo assim gasta mais energia, e não sei se neste estado uma solução de WakeOnLAN permitiria reactivar o computador.

    Era melhor, mas acho que quem mete o computador em sleep, não teria razão nenhuma para não o hibernar.

    ResponderEliminar
  6. Luísa,

    O Linux tem suporte para hibernar e acordar o computador pela LAN tem mais a ver com a placa mãe do que com o sistema operativo, portanto não vejo razão nenhuma para isto não ser possível com Linux.

    Num ambiente domiciliar a solução que eu arranjei de ter um computador sempre ligado pode não compensar, mas há routers que fazem wake-on-lan, portanto pode ser que seja uma solução possível.

    ResponderEliminar
  7. Eu sei que o router faz, mas o meu OS não traz o hibernar configurado :(

    Tentei configurar e não deu, fica o ecrã e teclado desligado mas o PC continua on. Forço o reboot e ele não faz resume (esta parte configurei bem no GRUB) porque acho que não chega a gravar de todo :p

    Enfim, é nestas alturas que detesto este tipo de distribuições Linux.

    ResponderEliminar