Windows Confidential: Mattinieri e nottambuli

Quando si sta cercando di automatizzare il processo di condivisione delle risorse, ogni minimo dettaglio è importante.

Raymond Chen

Ore di lavoro flessibile richiedono procedure e programmi flessibili. C'era un progetto di ricerca di Microsoft che ha richiesto un lungo e complicato calcolo. Il team di ricerca ha pensato che poteva elaborare in modo efficiente il calcolo sfruttando la potenza di calcolo della CPU del team di prodotto quando le macchine sono state lasciate incustodite per la sera.

Hanno sviluppato un programma di installazione sui computer che volevano utilizzare. Quando preso a calci in, ha chiesto il server per alcuni lavori. E a gomito via presso l'elaborazione di calcoli numerici e quindi caricati i risultati. Fondamentalmente, quel gruppo di ricerca aveva inventato qualcosa di simile a Folding @ Home o SETI @ Home anni prima che esistevano quei progetti.

Era necessario configurare il programma di condivisione delle risorse, specificando l'ora del giorno che si ha voluto che diventano disponibili per i calcoli e l'ora del giorno che volevi di fermarsi. In questo modo, esso non sarebbe interrompere voi mentre eri ancora al lavoro di revisione di un documento di progettazione. Essa non ha inizio scricchiolio i suoi numeri e utilizzando preziosa memoria e CPU cicli mentre stavate aspettando con ansia la compilazione completare.

Lavoro di squadra

Le persone del team di prodotto doverosamente accettato di rendere loro macchine disponibili. Tuttavia, hanno trovato che la caratteristica "specificare il periodo del giorno durante il quale si desidera che il programma sarà disponibile per la computazione" non funzionava. Il programma è stato costantemente svegliarsi e interrompere la loro. Peggio ancora, stava facendo loro sistemi eseguire destra davvero lento nel mezzo della giornata di lavoro.

Alla fine, il team di ricerca ha trovato la fonte del problema. Il codice che ha determinato quando eseguire i calcoli è andato come questo:

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

In altre parole, girava i calcoli, se l'ora corrente è stato prima il tempo di stop o dopo l'orario di inizio.

I membri del team di ricerca impostato il loro tempo di stop su 09:00 o 9 Questo è quando sono arrivati tutti in genere per lavoro ogni mattina. Essi inoltre impostare il loro tempo di inizio alle 17:00, 17 Questo è quando hanno lasciato il lavoro di tornare a casa.

Le persone del team di prodotto inoltre impostare il loro tempo stop 09:00, o 9 Tuttavia, essi impostare il loro tempo di inizio su 01:00 o 1, perché a volte lavoravano a tarda notte e non voleva che la routine di elaborazione di calcoli numerici per interrompere la loro.

Come potete vedere dal codice, se si imposta il tuo StartTime a mezzanotte o versioni successive, la trita finisce in esecuzione tutto il giorno. A quanto pare, le persone del team di ricerca non funzionano mai tardi.

Ironia della sorte, ha preso il team di ricerca poche iterazioni prima hanno trovato l'algoritmo corretto per stabilire quando eseguire la trita. A volte anche geni hanno problemi di bilanciamento del loro libretti degli assegni.

Cattivo Batch

Mi sono ricordato di questa storia, quando mi sono imbattuto in una situazione simile, non troppo tempo fa. C'era un file batch che ha dato il via alcuni strumenti per analizzare i dati. Ci sono stati rapporti sporadici dove il file batch a volte sarebbe smettere di lavorare e sputare fuori il messaggio "errore interno, si prega di contattare il team di supporto XYZ."

Se hai inviato una e-mail al team di supporto XYZ per segnalare l'errore, che avrebbe scrivono indietro, "non possiamo riprodurre l'errore. Abbiamo acceso diagnostica sul server. Riprovare, e studeremo i file di registro". La seconda volta che è stato eseguito il file batch, è sempre riuscito.

Identificarono in definitiva il motivo per il problema: Il file batch avrebbe cercato di costruire un nome di file di log dalla data corrente e l'ora. Lo ha fatto da estrarre sottostringhe da tempo % e variabili di ambiente % DATE %. Se è stato eseguito il programma prima di 10, il tempo Estratto aveva un spazio iniziale e che incasinato i calcoli.

Perché la gente che ha mantenuto il file batch non sistemo in opera prima di 10 o così, con il tempo che hanno scritto torna a dire, "Prova ancora adesso", è stato già 10:30 Il bug non più si è verificato. Solo prendendo un po ' più del solito per finire la loro tazza di caffè di mattina, i membri di quella sostengono la squadra riuscita ad evitare un bug nascondendosi nel loro proprio strumento.

Raymond Chen

Raymond Chen Sito Web, The Old New Thing e identicamente intitolato libro (Addison-Wesley, 2007) trattare con la storia di Windows, la programmazione Win32 e il gioco immaginario di pareti e scale.

Contenuti correlati