Share via


Windows confidentiels : Lève-tôt versus couche-tard

Lorsque vous essayez d'automatiser le processus de partage des ressources, chaque détail est important.

Raymond Chen

Heures de travail flexibles nécessitent des procédures et des programmes souples. Il y avait un projet de recherche de Microsoft qui nécessitait un calcul long et compliqué. L'équipe de recherche a trouvé qu'ils pouvaient traiter efficacement le calcul en exploitant la puissance de calcul des processeurs de l'équipe produit lorsque les machines ont été laissés sans surveillance pour la soirée.

Ils ont développé un programme à installer sur les ordinateurs qu'ils souhaitaient utiliser. Lorsqu'il a lancé, il a demandé le serveur pour certains travaux. Il coudés loin à la convient-elle et téléchargé puis les résultats. Essentiellement, cette équipe de recherche a inventé quelque chose de similaire à Folding@home ou SETI@home ans avant que ces projets existaient.

Vous deviez configurer le programme de partage des ressources en spécifiant le moment de la journée que vous vouliez qu'elle devienne disponible pour les calculs et l'heure de la journée que vous vouliez s'arrêter. De cette façon, il ne serait pas interrompre vous alors que vous étiez encore au travail examiné un document de conception. Il n'a pas démarrer une puissance de ses effectifs et à l'aide précieuse mémoire et CPU cycles alors que vous l'attendaient avec impatience votre build terminer.

Travail d'équipe

Les gens sur l'équipe produit consciencieusement convient de rendre leurs machines disponibles. Cependant, ils ont trouvé que la fonctionnalité « spécifier la période de la journée au cours de laquelle vous souhaitez que le programme soit disponible pour le calcul du » ne fonctionnait. Le programme a été constamment réveiller et d'interrompre leur. Pire encore, il faisait des leurs systèmes exécuter vraiment lente droit au milieu de la journée de travail.

Finalement, l'équipe de recherche a trouvé la source du problème. Le code qui détermine quand exécuter les calculs ensuite comme ceci :

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

En d'autres termes, il a couru les calculs si l'heure actuelle était avant l'heure de fin ou après l'heure de début.

Les membres de l'équipe de recherche défini leur temps d'arrêt à 09:00 ou 09 C'est quand ils arrivent tout généralement au travail chaque matin. Ils ont également définir leur heure de début de 17:00, 17 C'est quand ils ont quitté le travail à la maison.

Les gens sur l'équipe produit également définir leur temps d'arrêt à 09:00 ou 09 Cependant, ils ont défini leur heure de début à 01:00 ou 01, parce que parfois, ils ont travaillé tard dans la nuit et ne voulaient pas la routine de la convient-elle à interrompre leur.

Comme vous pouvez voir dans le code, si vous définissez votre StartTime à minuit ou plus tard, le nombre de canard finit par toute la journée en cours d'exécution. Apparemment, les gens sur l'équipe de recherche jamais travaillent tard.

Ironie du sort, il a fallu l'équipe de recherche quelques itérations avant ils ont trouvé l'algorithme exact pour déterminer quand exécuter le numéro-canard. Parfois même génies ont du mal à concilier leurs chéquiers.

Mauvais lot

Lorsque j'ai couru dans une situation similaire, il n'y a pas trop longtemps, je me suis souvenu de cette histoire. Il y avait un fichier batch qui a lancé quelques outils pour analyser les données. Il y avait des rapports sporadiques où le fichier batch serait parfois arrêter de travailler et cracher le message, "erreur interne, veuillez communiquer avec l'équipe de soutien XYZ. »

Si vous envoie un courriel à l'équipe de soutien XYZ pour signaler l'erreur, ils seraient write back, "nous ne pouvons pas reproduire l'erreur. Nous avons tourné sur le diagnostic sur le serveur. Veuillez essayer à nouveau, et nous allons étudier les fichiers de log. » La deuxième fois que vous avez exécuté le fichier batch, il a toujours réussi.

Ils identifiés en fin de compte la raison de ce problème : Le fichier batch devrait essayer de construire un nom de fichier journal à partir de la date et l'heure. Il l'a fait en extrayant des sous-chaînes du temps % et variables d'environnement % DATE %. Si vous avez exécuté le programme avant 10, le temps extrait avait un espace, et qui a foiré les calculs.

Parce que les gens qui ont maintenu le fichier batch ne s'installer dans le travail avant 10 ou alors, au moment où qu'ils ont écrit le retour de dire, "Essayez encore maintenant", c'était déjà 10:30 Le bogue disparu. Tout en prenant un peu plus longtemps que d'habitude pour terminer leur coupe du matin de café, les membres de cette équipe de soutien a réussi à éviter un bogue se cachant dans leur propre outil.

Raymond Chen

Raymond Chen Web site, The Old New Thing et livre intitulé identiquement (Addison-Wesley, 2007) traitent de l'histoire Windows, programmation Win32 et le jeu imaginaire des murs et des échelles.

Contenu connexe