lunes, 17 de octubre de 2011

Proporcionando tiempos de arranque cortos en Windows 8 [vídeo]

Bien, les habíamos dicho que habían varios trabajos terminados para esta semana así que aquí les traemos el primero de ellos. Ya estuvimos revisando algunos detalles sobre las modificaciones / mejoras de la nueva versión del sistema operativo de Redmond  Windows 8. Iniciamos con una revision general de lo que podíamos esperar del sistema, vimos las mejoras que lo pueden hacer entrar al mercado de las tablets, las características de Hyper-V traídas a los sistemas de escritorio, y las posibilidades de trabajo con imágenes ISO  entre otros. Hoy les traemos un análisis sobre las mejoras en el proceso de inicio del sistema que promete tiempos de arranque muy reducidos (el vídeo casi al final). El original del este artículo también viene del blog "Building Windows 8" y la traducción es de Jorge. En un post anterior también les indicamos desde donde pueden descargarse las previews para desarrolladores, por si quieren darle una probada y sepan de primera mano que pueden esperar. Eso, hay aun bastante material sobre W8 que iremos trayendo de a poco (pero vendrán, no se preocupen). Mientras, ahí les va, les saludamos y provecho! 

Cuando se trata acerca de hablar cosas esenciales queremos empezar con el tiempo de arranque (boot time), no hay una característica que se mida y se hable más que  esta. Diseñamos Windows 8 para que no tengan que iniciar con tanta frecuencia (y siempre vamos a trabajar en la reducción del número de reinicios necesarios debido al parcheo de código en ejecución). Pero cuando arranques, queremos que sea lo más rápido posible. Este es un tema muy profundo y tenemos un montón de  personas centrada en él. Con Windows 8 hemos dado un salto más grande en esta área  de lo que lo hemos hecho en mucho tiempo, debido en gran parte a la cooperación a través de todo el ecosistema. Gabe Aul, un director de gestión de programas en Windows, autor de este mensaje (el primero de una serie de posts sobre fundamentos). --Steven

Pocas operaciones en Windows son examinadas, medidas, y tratadas tan diferenciadamente como el arranque. Esto es comprensible, el tiempo de arranque representa un mediador eficaz para garantizar el rendimiento del sistema en general  y todos sabemos que el arranque del sistema es una cosa increíblemente importante para nosotros hacer que se ajuste a la necesidad de los clientes. Los datos muestran que el 57% de los usuarios de PC de escritorio y el 45% de los usuarios de portátiles apagan sus máquinas en lugar de ponerlas a dormir. En general, la mitad de todos los usuarios apagan sus computadoras en lugar de ponerlas a dormir.  

Cualitativamente, las personas plantean que prefieren apagarlas debido a que quieren  tener su PC completamente apagadas para que no consuman energía; ya sea para  preservar la vida de la batería o para reducir su consumo. La hibernación es una buena opción para esto, ya que igualmente no consume energía, y a mucha gente  realmente le gusta. Sin embargo, claramente no lo es para todos, ya que una de las otras cosas que hemos escuchado es que mucha gente quiere encender su PC y dejarle que inicie desde 0 para que realice una carga más fresca en lugar de ejecutar todas las cosas de su sesión anterior. Suspender/reanudar es la mejor opción para transiciones  encendido/apagado rápidas en los ordenadores de hoy en día, pero sigue consumiendo algo de energía a fin de preservar el contenido de la RAM, lo que significa descarga de la batería; incluso si es sólo un poco en un sistema bien optimizado. Todo esto está sucediendo con el telón de fondo de la forma en que todos usamos los teléfonos móviles hoy en día, que casi nunca se reinician, y  siempre utilizan un estado  cercano a la suspensión.
Nuestro desafío, entonces, fue diseñar una manera de cumplir todos estos deseos en los ordenadores de hoy en día sin necesidad de un nuevo hardware especial. Estos  fueron nuestros objetivos:
  • Cero vatios efectivos drenados cuando el equipo está apagado.
  • Una nueva sesión tras el arranque
  • Tiempos muy cortos entre la pulsación del botón de encendido y la disponibilidad del sistema.
En Windows 7 hemos hecho muchas mejoras en la ruta de inicio, incluyendo la inicialización en paralelo de los controladores de dispositivos y servicios iniciados en el arranque, pero estaba claro que tendríamos que conseguir aún algo más creativo (y menos incremental) si esperábamos obtener un rendimiento de arranque aunque fuera cerca de la rapidez suficiente para satisfacer todas estas necesidades.
Nuestra solución es un nuevo modo de inicio rápido, que es un híbrido entre arranque en frío tradicional y la reanudación luego de la hibernación.
Antes de entrar a ver exactamente cómo funciona, probablemente  sea útil un poco de historia sobre cómo funcionan el apagado y el  arranque hoy en Windows 7.

El apagado implica:
  1. El usuario inicia el apagado mediante la opción "Apagar" en el menú Inicio, o pulsando el botón de encendido, o una aplicación inicia el  apagado llamando a una API como ExitWindowsEx() o InitiateShutdown().
  2. Windows transmite mensajes a las aplicaciones en ejecución, dándoles la oportunidad de guardar los datos y configuraciones. Las aplicaciones también pueden solicitar un poco de tiempo extra para terminar lo que están haciendo. 
  3. Windows cierra las sesiones de usuario para cada usuario conectado.
  4. Windows envía mensajes a los servicios notificándoles que el cierre se ha iniciado, y posteriormente los apaga. Cierra los servicios de forma ordenada que tienen dependencias en serie, y el resto en paralelo. Si un servicio no responde, se cierra a la fuerza.
  5. Windows transmite mensajes a los dispositivos, indicándoles que se apaguen.
  6. Windows cierra la sesión del sistema (también conocida como "sesión 0").
  7. Windows limpia cualquier dato pendiente de la unidad del sistema para asegurarse que  se salve por completo.
  8. Windows envía una señal a través de la interfaz ACPI en el sistema para apagar la PC.
Y el arranque implica:
  1. Después de pulsar el botón de encendido, el firmware de la PC inicia un Power-On  Self Test (POST) y carga la configuración del firmware. Este proceso de pre-arranque  termina cuando es detectado un disco de sistema válido.
  2. El firmware lee el Master boot Record (MBR), y luego inicia el Bootmgr.exe.  Bootmgr.exe encuentra e inicia el cargador de Windows (Winload.exe) en la partición de arranque de Windows.
  3. Los controladores necesarios para iniciar el kernel de Windows se cargan y el kernel  comienza a funcionar, cargando en la memoria la sección del Registro del sistema y los drivers adicionales que están marcados como BOOT_START.
  4. El kernel transfiere el control al proceso de administración de sesiones (Smss.exe) que inicializa la sesión del sistema, y carga e inicia los dispositivos y controladores que no están marcados BOOT_START.
  5. Winlogon.exe inicia, la pantalla de inicio de sesión de usuario aparece, el administrador de control de servicios inicia los servicios, y se ejecutan las secuencias de comandos de directiva de grupo. Cuando el usuario se conecta, Windows crea una sesión para ese usuario.
  6. Explorer.exe se inicia, el sistema crea el proceso gestor de ventanas de escritorio (DWM), que inicia el escritorio y lo muestra.
Hay bastantes detalles mucho más específicos aquí, si alguien quiere profundizar más: http://msdn.microsoft.com/en-us/windows/hardware/gg463386

La clave a recordar es que en una parada tradicional se cierran todas las sesiones de usuario, y en la sesión del kernel se cierran los servicios y dispositivos para prepararse para un cierre completo.
Ahora aquí está la diferencia de Windows 8: al igual que en Windows 7, cerramos las sesiones de usuario, pero en lugar de cerrar la sesión del kernel, lo hibernamos. En comparación con una hibernación total, que incluye un montón de páginas de memoria  en uso por las aplicaciones, los datos de la hibernación son mucho menores, por tanto toma mucho menos tiempo escribirlos en el disco. Si usted no está familiarizado con la hibernación, estamos salvando  efectivamente el estado del sistema y el contenido de la memoria en un archivo en el disco (hiberfil.sys) y luego leyéndolo de vuelta en el inicio y restaurando el contenido de nuevo a la memoria. Usando esta técnica con el arranque nos da una ventaja significativa en los tiempos de arranque, ya que la lectura del archivo de hibernación y la reinicialización de los drivers  sucede más rápido en la mayoría de los sistemas (30-70% más rápido en la mayoría de los sistemas que hemos probado).



Es más rápido debido a que reanudar la sesión de un sistema hibernado es comparativamente menos trabajoso que hacer una inicialización del sistema completo, pero también es más rápido porque hemos agregado la capacidad de reanudar en varias fases, lo que es capaz de utilizar todos los núcleos  paralelamente en un sistema de múltiples núcleos, para dividir el trabajo de leer el archivo de hibernación y descomprimir su contenido. Para aquellos que prefieren la hibernación, esto también se traduce en una reanudación tras la hibernación más  rápida.



Probablemente vale la pena mencionar rápidamente cómo tratamos el archivo de hibernación, si lees esto y vas inmediatamente a hacer un  dir /s /ah hiberfile.sys descubrirás que es un archivo muy grande en el disco. El archivo de hibernación es de tamaño por defecto el 75% de memoria RAM física. El archivo es esencialmente una reserva para los datos de la hibernación que se escriben en la medida que el sistema está entrando en hibernación. Por lo general se utiliza realmente mucho menos espacio, y en el caso de nuestro arranque rápido, es normalmente ~ 10-15% de memoria RAM física, pero varía en función de los controladores, los servicios y otros factores. El sistema también sirve para tratar el archivo de hibernación de forma ligeramente diferente de otros archivos en el disco, por ejemplo, el servicio de instantáneas de volumen no tiene en cuenta (una pequeña mejora del rendimiento.) Se puede deshabilitar la hibernación y recuperar este espacio mediante la  ejecución de powercfg /hibernate off desde un símbolo del sistema con privilegios elevados. Pero tenga en cuenta que si usted hace esto, se deshabilitará la hibernación por completo, incluyendo algunas funciones interesantes como el inicio rápido, así como la suspensión híbrida, que permite a los sistemas de escritorio hacer las dos cosas, la suspensión y la hibernación al mismo tiempo; por lo que si se produce una pérdida de energía aún puede volver del estado de hibernación. También puede ejecutar powercfg  /hibernate  /size y especificar un valor entre 0 y 100 para el porcentaje de memoria RAM física de reserva para el archivo de hibernación; ¡pero tenga cuidado! Hay que especificar también que si un tamaño es muy pequeño puede provocar que la hibernacion falle. En general, recomiendo dejarlo activado con el valor predeterminado a menos que esté trabajando en un sistema con espacio muy limitado.
Otra cosa importante a observar sobre el modo de inicio rápido de Windows 8 es que, mientras no hagamos una enumeración de todos los dispositivos  "Plug & Play", la enumeración de todos los controladores, todavía inicializa los controladores en este modo. Aquellos de ustedes que les gusta el arranque en frío con el fin de "refrescar" los controladores de dispositivos y se alegrarán de saber que sigue siendo eficaz en este nuevo modo, aunque no sea un proceso idéntico al de un arranque en frío.
Este nuevo modo de arranque rápido será beneficioso en casi todos los sistemas, tanto si tienen un disco duro de platos giratorios (HDD) o una unidad de estado sólido (SSD), pero para sistemas nuevos con los SSD rápidos es francamente increíble. Mira el video de abajo para verlo por ti mismo: 





Una cosa que usted notará en el video es qué tan rápido ocurre el paso desde el POST hasta Windows.
Los sistemas que se construyen utilizando Unified Extensible Firmware Interface (UEFI) tienen más probabilidades de alcanzar un tiempo de pre-arranque más rápido en comparación a aquellos con BIOS tradicional. Esto no es porque porque UEFI es inherentemente más rápido, sino porque los desarrolladores de UEFI iniciaron a partir de cero, y son más capaces de optimizar su aplicación en lugar de construir sobre una implementación del BIOS que puede tener muchos años. La buena noticia es que la mayoría de sistemas y fabricantes de placas madre han comenzado a adoptar UEFI, por lo que este tipo de tiempos de inicio rápidos será más frecuente para los nuevos sistemas.
Por supuesto, hay veces en que es posible que desee llevar a cabo un cierre total, por ejemplo, si usted abre el sistema para agregar o cambiar algún hardware. Tenemos una opción en la interfaz de usuario para regresar al comportamiento de apagado/arranque en frio de windows 7, o ya que es probable que una cosa bastante poco frecuente, se puede utilizar el nuevo modificador /full con el comando  shutdown.exe. Desde la ventana del command (cmd), ejecutar shutdown /s /full /t 0 para invocar un cierre total inmediato. Además, la elección de reinicio de la interfaz de usuario va a hacer un cierre total, seguido de un arranque en frío.

El trabajo de arranque es en su mayoría propiedad de nuestro Kernel Plataform Group (Grupo de Plataformas del Núcleo), pero un número de equipos se reunieron en Windows 8 para hacer cambios en el Sistema Operativo y agregar soporte a esta nueva modalidad, además de otros cambios de arranque emocionante que vamos a hablar muy pronto. Estamos disfrutando mucho el rendimiento de arranque de Windows 8 en nuestro uso interno, y esperamos que seas capaz de probar por ti mismo y así nos hagas saber lo que piensas. 
Gabe Aul.