Segredos do Windows: Madrugadores e notívagos

Quando você está tentando automatizar o processo de partilha de recursos, cada pequeno detalhe é importante.

Raymond Chen

Horas de trabalho flexível exigem procedimentos e programas flexíveis. Havia um projeto de pesquisa na Microsoft que necessário um cálculo longo e complicado. A equipa de investigação percebi que eles eficientemente poderiam processar o cálculo por aproveitando o poder de computação de CPUs da equipe de produto quando as máquinas foram deixadas sem assistência para a noite.

Eles desenvolveram um programa para instalar em computadores que já estavam interessados em usar. Quando ele chutou dentro, ele pediu o servidor algum trabalho. Dobrado afastado na trituração de número e depois carregados os resultados. Basicamente, a equipe de investigação tinha inventado algo semelhante ao Folding @ Home ou SETI @ Home anos antes dos projectos existiam.

Você tinha que configurar o programa de compartilhamento de recursos, especificando a hora do dia que você queria que ele se torne disponível para cálculos e a hora do dia que você queria que ela pare. Dessa forma, ele não iria interrompê-lo enquanto você estava ainda no trabalho de revisão de um documento de design. Ele não começar a trituração de seus números e utilizar preciosa memória e CPU ciclos enquanto você esperava ansiosamente sua compilação concluir.

Esforço da equipe

As pessoas da equipe de produto obedientemente concordaram em disponibilizar suas máquinas. No entanto, eles encontraram que o recurso "especificar o período de dias durante os quais você deseja que o programa esteja disponível para computação" não estava funcionando. O programa foi constantemente acordando e interrompê-los. Pior ainda, ele estava fazendo seus sistemas executar realmente lento direito no meio do dia de trabalho.

Eventualmente, a equipe de investigação encontrou a fonte do problema. O código que determinado quando executar os cálculos passou como este:

time = GetTimeOfDay(); if (time < StopTime || time >= StartTime) { CrunchTheNumbers(); }

Em outras palavras, ele correu os cálculos se a hora atual foi antes o tempo parar ou após o horário de início.

Os membros da equipa de investigação definir seu tempo de parar para 09:00 ou 09 É nesse momento que todos normalmente chegaram para trabalhar todas as manhãs. Eles também definir sua hora de início a 17:00, 17 É aí que eles deixaram o trabalho para ir para casa.

As pessoas da equipe de produto também definir seu tempo de parar para 09:00 ou 09 No entanto, eles definir sua hora de início a 01:00 ou 01, porque às vezes trabalhou tarde para a noite e não queria que a rotina de trituração de número para interrompê-los.

Como você pode ver o código, se você definir seu StartTime à meia-noite ou mais tarde, o número-triturador acaba sendo executado todos os dias. Aparentemente, as pessoas da equipe de investigação nunca trabalham até tarde.

Ironicamente, ele tomou a equipa de investigação algumas iterações antes que eles encontraram o algoritmo correto para determinar quando executar o triturador de número. Às vezes até mesmo gênios tem problemas para balanceamento de seus cheques.

Lote ruim

Lembrei-me dessa história quando eu corria para uma situação semelhante não muito tempo atrás. Havia um arquivo em lotes que chutou para fora algumas ferramentas para analisar os dados. Houve relatos esporádicos onde o arquivo em lotes, por vezes, iria parar de trabalhar e cuspir a mensagem, "erro interno, por favor, entre em contato com a equipe de suporte XYZ."

Se você enviou um e-mail para a equipe de suporte XYZ para relatar o erro, eles escreveria volta, "nós não pode reproduzir o erro. Nós já ativado diagnósticos no servidor. Por favor, tente novamente e iremos estudar os arquivos de log". A segunda vez que você executou o arquivo em lotes, ele sempre sucedeu.

Eles finalmente identificaram o motivo para o problema: O arquivo em lotes de tentar construir um nome de arquivo de log da data e hora atuais. Fê-lo extraindo subseqüências de % de tempo e variáveis de ambiente % DATE %. Se você executou o programa antes de 10, extraído tempo tinha um espaço à esquerda, e que errei os cálculos.

Porque as pessoas que mantém o arquivo em lotes não estabelecer-se em trabalho antes de 10 ou então, no momento em que eles escreveram voltar para dizer, "Tente novamente agora", ele já era 10:30 O bug já não ocorreu. Apenas por levando um pouco mais tempo do que o habitual para terminar sua morning copo de café, os membros de que equipe conseguido evitar um bug escondidos na sua própria ferramenta de suporte.

Raymond Chen

Raymond Chen Web site, The Old New Thing e título idêntico livro (Addison-Wesley, 2007) lidar com história de Windows, programação Win32 e o jogo imaginário de paredes e escadas.

Conteúdo relacionado