Confidencial de Windows: Pájaros madrugadores y lechuzas nocturnas

Cuando se intenta automatizar el proceso de compartir recursos, cada pequeño detalle es importante.

Raymond Chen

Horas de trabajo flexibles requieren procedimientos y programas flexibles. Hubo un proyecto de investigación de Microsoft que requiere un cálculo largo y complicado. El equipo de investigación imaginaba que podían procesar eficientemente el cálculo aprovechando la potencia de la CPU del equipo de producto cuando las máquinas fueron desatendidas por la noche.

Desarrollaron un programa para instalar en los equipos que deseaban utilizar. Cuando lo pateó en, pidió al servidor para algún trabajo. Producen lejos en el número de cómputos y luego subido los resultados. Básicamente, el equipo de investigación había inventado algo parecido a Folding@home o SETI@home años antes de que existieron de esos proyectos.

Había que configurar el programa de uso compartido de recursos mediante la especificación de la hora del día que desea que estén disponibles para los cálculos y la hora del día que desea dejar. De este modo, no interrumpirlo mientras estaba todavía en el trabajo revisar un documento de diseño. No empezar a acababan sus números y usando CPU y la memoria precioso ciclos mientras estaban esperando ansiosamente su generación completar.

Esfuerzo de equipo

La gente en el equipo de producto cumplidamente decidieron hacer sus máquinas disponibles. Sin embargo, encontraron que no funcionaba la función de "especificar el período de días durante el cual desea que el programa esté disponible para el cálculo". El programa fue constantemente despertar y les interrumpir. Peor aún, fue haciendo sus sistemas ejecutar derecho realmente lento en medio de la jornada de trabajo.

Finalmente, el equipo de investigación encontró el origen del problema. El código que determina cuándo se debe ejecutar los cálculos fueron así:

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

En otras palabras, se corrían los cálculos si la hora actual fue antes de la hora de finalización o después de la hora de inicio.

Los miembros del equipo de investigación de establecer su tiempo de parada a las 9:00 o 9 Cuando llegaron todos normalmente por trabajo todas las mañanas. También fijaron su hora de inicio a las 17:00, 17 Es entonces cuando dejaron el trabajo para volver a casa.

La gente en el equipo de producto también establece su tiempo de parada a las 9:00 o 9 Sin embargo, fijaron su hora de inicio a la 1:00 o 1, porque a veces trabajaban hasta altas horas de la noche y no quería que la rutina para interrumpirles acababan de número.

Como se puede ver desde el código, si se establece su StartTime a medianoche o más tarde, el número-Cruncheando termina ejecutando todo el día. Al parecer, la gente en el equipo de investigación nunca trabaja hasta tarde.

Irónicamente, tomó el equipo de investigación unas iteraciones antes de que encontraron el algoritmo correcto para determinar cuándo se debe ejecutar el número-cruncher. A veces incluso genios tienen problemas para equilibrar sus cuentas de tesorería.

Lote malo

Recordé esta historia cuando me encontré con una situación similar no hace mucho tiempo. Hubo un archivo por lotes que arrancó algunas herramientas para analizar los datos. Hubo informes esporádicos donde el archivo por lotes que a veces dejan de funcionar y escupen el mensaje "error interno, póngase en contacto con el equipo de apoyo XYZ."

Si envía un correo electrónico al equipo de soporte XYZ para informar del error, sería escribir, "no podemos reproducir el error. Hemos activado de diagnósticos en el servidor. Vuelva a intentarlo, y se estudiarán los archivos de registro. La segunda vez que ejecutó el archivo por lotes, siempre sucedió.

En última instancia identificaron la razón del problema: El archivo por lotes intentará construir un nombre de archivo de registro de la fecha y hora actuales. Lo hizo mediante la extracción de subcadenas del % de tiempo y variables de entorno % fecha %. Si se ejecutaba el programa antes de 10, el tiempo extraído tuvo un espacio inicial y que desordenado de los cálculos.

Porque la gente que mantiene el archivo por lotes no asentarse en el trabajo antes de 10 o, por el tiempo atrás escribieron al decir, "Probarlo nuevamente ahora", ya era 10:30 Ya no se produjo el error. Sólo tomando un poco más de lo habitual para terminar su Copa mañana de café, los miembros de ese apoyan equipo dirigido a evitar un error ocultar en su propia herramienta.

Raymond Chen

Raymond Chen Sitio Web de The Old New Thing y libro titulado idénticamente (Addison-Wesley, 2007) tratar con la historia de Windows, programación de Win32 y el juego imaginario de paredes y escaleras.

Contenido relacionado