Windows Confidential: Frühaufsteher und Nachtschwärmer

Wenn Sie versuchen, den Prozess der Freigabe von Ressourcen automatisieren, ist jedes kleine Detail wichtig.

Raymond Chen

Flexible Arbeitszeiten erfordern flexible Programme und Verfahren. Es war ein Forschungsprojekt bei Microsoft, die eine lange und komplizierte Berechnung erforderlich. Das Forschungsteam dachte, sie könnten die Berechnung effizient verarbeiten, durch die Nutzung der Rechenleistung das Produktteam CPUs, wenn die Maschinen für den Abend unbeaufsichtigt.

Sie entwickelt ein Programm, um auf den Computern installieren, die sie verwenden wollten. Wenn es in trat, fordert den Server für die Arbeit. Es entfernt an der Number-crunching gekröpft und die Ergebnisse dann hochgeladen. Im Grunde hatte, dass Forschungsteam erfunden etwas ähnliches wie Folding@home oder SETI@home Jahre vor dieser Projekte bestanden.

Sie mussten konfigurieren das Programm gemeinsame Nutzung von Ressourcen durch Angabe der Tageszeit Sie wollte es zu für Berechnungen und die Zeit des Tages, die Sie wollte, es zu stoppen. Auf diese Weise würde nicht es Sie unterbrechen, während Sie noch am Arbeitsplatz überprüfen ein Entwurfsdokument waren. Es starten nicht Knirschen der Zahlen und mit wertvollen Arbeitsspeicher und CPU Zyklen während Sie ängstlich für Ihren Build warteten abgeschlossen.

Teamarbeit

Die Menschen auf das Produktteam vereinbart pflichtgemäß ihre Maschinen zur Verfügung stellen. Jedoch fanden sie, dass das Feature "geben Sie den Zeitraum des Tages, während der das Programm für Berechnung verfügbar sein soll" nicht funktioniert. Das Programm wurde immer wieder aufwachen und unterbrechen sie. Schlimmer noch, machte es ihre Systeme wirklich langsam direkt in der Mitte des Arbeitstages ausführen.

Schließlich fand das Forschungsteam die Ursache des Problems. Der Code, der bestimmt, wann die Berechnungen ausgeführt ging wie folgt:

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

Mit anderen Worten, lief es die Berechnungen, wenn die aktuelle Zeit vor die Stop-Zeit oder nach der Startzeit wurde.

Die Mitglieder des Research-Teams stellen ihre Stop-Zeit auf 09:00 oder 09 Das ist, wenn sie kamen alle in der Regel für Arbeit jeden Morgen. Sie legen auch die Startzeit auf 17:00, 17 Das ist, wenn sie verließ Arbeit nach Hause zu gehen.

Die Menschen auf das Produktteam legen Sie ihre Stop-Zeit auch auf 09:00 und 09 Jedoch legen sie ihre Startzeit auf 01:00 oder 01, weil sie manchmal bis spät in die Nacht gearbeitet und die Number-crunching Routine sie unterbrechen wollte.

Wie Sie aus dem Code sehen können, wenn Sie Ihre StartTime bis Mitternacht oder höher festlegen, wird der Zahl-Cruncher endet laufen den ganzen Tag. Offenbar, arbeiten die Menschen auf das Forschungsteam nie spät.

Ironischerweise, dauerte es dem Forschungsteam ein paar Iterationen, bevor sie den korrekten Algorithmus um zu bestimmen gefunden, wann der Zahl-Cruncher ausgeführt. Manchmal sogar Genies haben Mühe, ihre Scheckhefte Netzwerklastenausgleich.

Schlechte Batch

Ich war von dieser Geschichte erinnert, als ich lief in einer ähnlichen Situation nicht allzu lange her. Es gab eine Batchdatei, die begann einige Werkzeuge, um Daten zu analysieren. Gab es sporadische Berichte wo die Batch-Datei manchmal aufhören zu arbeiten und spucken raus die Meldung "Interner Fehler, bitte kontaktieren Sie das Support-Team von XYZ."

Wenn Sie eine E-mail an das XYZ-Support-Team um den Fehler zu melden senden, würden sie wieder, schreiben "wir den Fehler reproduzieren können. Wir haben Diagnose auf dem Server aktiviert. Bitte versuchen Sie es erneut, und wir studieren die Log-Dateien. Das zweite Mal, dass, das Sie die Batch-Datei ausgeführt haben, gelang es immer.

Sie identifiziert letztlich den Grund für das Problem: Die Batch-Datei würde versuchen, aus das aktuelle Datum und die Uhrzeit der Name einer Protokolldatei erstellen. Es tat dies, indem extrahiert Teilzeichenfolgen aus dem % Zeit und Datum % Umgebungsvariablen. Wenn Sie das Programm vor 10 lief, die extrahierte Zeit hatte ein führendes Leerzeichen, und, die die Berechnungen Durcheinander.

Weil die Menschen, die die Batch-Datei gepflegt in Arbeit vor 10 Regeln nicht oder so von der Zeit, die sie zurück zu sagen "es jetzt wieder versuchen", schrieb, war es bereits 10:30 Der Fehler ist nicht mehr aufgetreten. Nur durch die ein wenig länger als üblich, ihre morgendliche Tasse Kaffee zu beenden, unterstützen die Mitglieder dieses Team verwaltet, einen Fehler in ihrem eigenen Werkzeug ausblenden zu vermeiden.

Raymond Chen

Raymond Chen Website, The Old New Thing und gleichnamigen Buch (Addison-Wesley, 2007) befassen sich mit der Geschichte von Windows, Win32-Programmierung und das imaginäre Spiel der Wände und Leitern.

Verwandte Inhalte