viernes, abril 13, 2007

Sobre el nuevo motor de copias de archivos y carpetas de Windows Vista

Recientemente he recibido esta consulta de un usuario:

¿Es posible hacer que Windows Vista no calcule el tiempo restante estimado cada vez que hace una copia de archivos? Esto hace que las copias sean más lentas.

Para poder responder esta cuestión, es necesario observar cómo funciona internamente el sistema de copias de archivos y carpetas de Windows Vista:

Cuando el usuario copia, mueve o elimina archivos desde Explorador de Windows, se sigue un largo proceso que tiene su origen en la función SHFileOperation. Esta función enlaza con el nuevo motor de operaciones de archivos y carpetas de Windows Vista. Es importante hacer notar que este motor es totalmente nuevo. Esto es debido a que ahora es necesario tener en cuenta elevaciones de privilegios mediante UAC, así como añadir la implementación de una nueva interfaz para controlar mejor las colisiones de archivos y carpetas (si dos elementos tienen el mismo nombre, ofrecer las opciones de conservar ambos, sobrescribirlos, etc.).

El motor de copias de Windows Vista consta principalmente de la siguientes entidades:

  • El motor de copias propiamente dicho, que se encarga de "preparar" y "realizar" nodos y árboles de elementos (ficheros o carpetas) aplicando, para ciertas operaciones, la recursión.

  • La barra de progreso que informa al usuario de la fase en la que se encuentra la operación.

  • Un reloj (timer) que se encarga entre otras cosas de sincronizar el estado de la operación para así calcular el tiempo restante, la velocidad, etc.

El primer proceso que tiene lugar es lo que se denomina "preflight". En esta fase se enumeran los elementos que intervendrán en la operación y se muestra la barra de progreso con el texto "Descubriendo x elementos (y MB)". Esta operación suele durar poco tiempo, por lo que incluso es posible que en ocasiones ni la vea aparecer. Además, se hace uso de Superfetch para establecer una prioridad de memoria de 2 si la copia está dentro de un umbral determinado. Windows Vista introduce prioridades para las páginas de memoria, para más información consulte este artículo.

Los nodos se preparan y enumeran de manera recursiva para ciertas operaciones (por ejemplo, una copia) y, una vez preparados, se produce un cambio en la barra de progreso: El texto central se cambia por "Calculando tiempo restante". Lo que la mayoría de gente piensa es que aún no ha comenzado la operación en sí, y eso no es cierto. Mientras se está mostrando ese mensaje, ya se están "haciendo" los primeros nodos. Hacer un nodo básicamente consiste en mover, copiar o borrar el elemento físicamente, utilizando para ello una serie de funciones intermedias internas y no documentadas (podrá verlas si conecta un depurador que tenga los símbolos apropiados). Lo que ocurre realmente es que la barra de progreso muestra la frase "calculando tiempo restante" hasta que disponga de información "buena". El reloj es el encargado de darle esa información (nótese que, mientras tanto, la operación sigue su curso). A partir del cuarto segundo (con menos de 4 segundos la estimación de tiempo restante suele ser incorrecta), se le pregunta al reloj ¿cuál es el tiempo restante? Cuando éste puede dar una buena respuesta con la información disponible, actualizará el cuadro para decir, por ejemplo: "quedan 2 minutos". Este cuadro se irá actualizando progresivamente hasta que se finalice la operación.

Por último, otra de las cosas que debe tener en cuenta es que tanto la información sobre el tiempo restante como la velocidad de la operación no son demasiado fiables. La arquitectura del sistema de copias de Windows Vista y la forma en la que se obtiene el tiempo restante suelen dar lugar a inestables mediciones del tiempo restante, por lo que es normal que observe que la operación tarda realmente más de lo que se informa en el cuadro de diálogo. Asimismo, la velocidad de transferencia no es más que la velocidad global de la copia hasta el momento, es decir, no se incluye ningún matiz de velocidad local, así que puede ser algo inexacta también.

Como conclusión, yo considero posible que en ciertos escenarios y configuraciones de hardware las copias de archivos puedan realizarse lentamente, dada la manera de trabajar del nuevo motor, y de que se trata de algo totalmente nuevo en Windows Vista, con errores que se irán subsanando en versiones posteriores. De hecho, Microsoft ya ha hecho pública una corrección cuando las copias desde la red local se realizan muy lentamente, puede acceder a este artículo de la KB para obtener más información. Pero en ningún momento debería echar la culpa a la frase "calculando tiempo restante", porque Vista paralelamente ya está moviendo ficheros y carpetas mientras sigue apareciendo ese mensaje. Tampoco debería creer ciegamente en la información sobre el tiempo restante ni sobre la velocidad de transferencia, puesto que son dos aspectos que Microsoft espera calcular de un modo más exacto en versiones posteriores de Windows.

5 comentarios:

Enrique Villafañe dijo...

Hola Daniel tengo Windows Vista Home Premium y quisiera que hablaras sobre como compartir discos y como dar los permisos, pues creo hay bastantes problemas con ella, ya que al hacerlo y trato de ingresar de otra maquina me dice que no hay permisos de red

Daniel Martín dijo...

Buena sugerencia, yo también creo que el tema de redes en Windows Vista puede resultar algo confuso. Quizá prepare algo sobre esto, ¡gracias!

Anónimo dijo...

...Y todo ésto demuestra que windows vista es, de serie, un sistema operativo lento que consume una cantidad horrorosa de recursos para realizar la más mínima operación, eso sí, como mola la interfaz, no?

Anónimo dijo...

Además de lento, inexacto.

Anónimo dijo...

Totalmente de acuerdo. Windows Vista es hoy por hoy un sistema operativo lento, inestable, lento, consumidor de recursos, lento y creo más complicado para el usuario de a pie y al algo lento (no se si ya lo he dicho!!!).
Totalmente....... desaconsejado.