lunes, 22 de septiembre de 2008

Tras los laberintos y el código oculto en busca de la verdad. El paradigma de la velocidad. (Parte 1)

Mr. I/O [blackhat4all@gmail.com]

En calidad de introducción

Como dijera Sun Tzu todo en la vida es una zona de guerra, y como tal puede ser tratado. Aquello que nos da problemas es nuestro enemigo hasta que podemos controlarlo o acomodarnos fuera de su alcance.


Eso son las instalaciones de Windows para mi: zonas de guerra, donde un sistema operativo supuestamente inteligente se empeña en tratar de actuar intuitivamente – a conveniencia de los consorcios – y se empecina en aplicar sobre mi su política de automatizaciones, dejando a los “héroes” de Microsoft como a los superdotados, mientras nos obliga a sumirnos en las tinieblas de la ignorancia, a la cual nos relegan pues – ellos decidieron que – no nos interesa como funcionan las cosas, solo que funcionen “bien”.

Conociendo al enemigo [1]

Me levanto de la cama con pocas ganas, estiro la mano y tomo una antigua ‘zine cualquiera de la pila del desorden, y le hecho un ojo – sin apuro – a la PC world. Donde leo algo que me hace pensar en estos momentos en los cuales se cubren de hipergastos los hiperdesconocedores usuarios, en busca de la llamada velocidad – en realidad es solo frecuencia de oscilación de relojes medida en hertzios – que los hace perseguir como idiotas el mercado de dual cores, quadcores, xcores y la instalación de vistas/lindos – malos para el bolsillo – para la simple tarea de ver películas, oír música, quemar discos, estudiar y cuando más editar fotos y videos. Cosas que se pueden hacer con oxidadas p3.

Leo las palabras que Microsoft ha cacareado por siempre – como las vulgares aves de corral – : “las investigaciones realizadas a los clientes han arrojado que una de las cuestiones que estos desean para sus PCs es un rápido arranque (startup), ya sea desde un arranque – vale la redundancia – en frío, o cuando se reanuda (resume) desde una hibernación. – mientras que en otra parte alegaba que – en el conocido como “Equipo de Desarrollo de Microsoft” han tomado valientes pasos – siempre preocupados por dejarnos el código oculto a los usuarios, of course – en hacer una realidad disponible: las pcs rápidas

Por ello viendo como alternativas económicas a estos problemas conocer con que contamos, propongo que miremos que se esconde tras las posibilidades que nos brinda Windows XP y su rápido boot /resume (inicio/rápida reanudación), para entender como poder explotar a fondo este SO, y que variantes podemos aplicarle a su instalación, y obtener beneficios.

Siendo el objeto de este artículo proveer de una guía rápida a los artesanos[2] de la instalación de sistemas del patio – aquellos que se atreven a practicar mejoras sin tener miedo al fracaso, nunca a los usuarios del Windows Unatended Edition (desatentranca) – acerca de cómo implementar una máquina de rápido boot/resume de bajo costo.

Recogiendo un pequeño compendio de ideas y cambios – algunos severos en la filosofía y en el sistema – posibles a realizar para lograr un sistema tan rápido como sea posible con los más escasos recursos con que contemos.

Según los expertos de Microsoft – y esto puede ser constatado en los papeles de http://www.microsoft.com – las metas promedio ideales[3] para una pc de buró, con la versión Windows xp Home, de un usuario típico son las que siguen:

• Resume desde Standby (espera, un protector de pantalla o algo similar) es <= 5 segundos
• Resume desde una hibernación <= 20 segundos
• Boot hasta un estado de utilización <= 30 segundos.

Caracoles!!! Entonces ¿qué le pasa a mi p4 que parece una tortuga? Es la pregunta que muchos se hacen en estos momentos, pero se las harán con mayor fuerza si les aseguro que he logrado similares resultados con maquinitas de mucho menor rango, únicas alternativas para los sectores con menos ingresos en esta guerra de precios[4].

Debo agregar para aclarar las ideas que los tiempos de boot/resume se miden desde que el botón de power es oprimido, se hizo doble clic en el icono del escritorio, o se movió el ratón.

Nota:
alguna profundización – o background general – de estos términos y materias es posible encontrarla en los temas relacionados con OnNow Technologies, los cuales están muy bien descritos en[5] http://www.microsoft.com/hwdev/onnow, a su vez, la terminología relativa a las definiciones del sistema del estado energizado (encendido y apagado) según las especificaciones de la ACPI (Configuraciones avanzadas y la interfaz de alimentación – siglas en inglés) están a su vez disponibles en http://www.acpi.info/index.html
Tras todas estas aclaraciones ya estamos listos para comenzar con este tour que terminará en la explicación de cómo instalar – de manera personalizada, pero por el usuario – de este sistema operativo tan común en nuestro patio.

Arquitectura del boot del sistema operativo[6]

El despertar de una máquina consiste en los siguientes 4 desafíos básicos
1. mover el sistema operativo desde la torre de disco duro a la memoria.
2. inicializar los controladores de los dispositivos.
3. inicializar el Winlogon, los servicios y el shell
4. arrancar los programas del inicio y sus valores añadidos.

Veámoslo ahora discutido desde el punto de vista de tiempo

Llamemos entonces:
1. Disk time[7]: al tiempo en que se enumeran y chequean todos los dispositivos (devises), entre los que se comprende desde la CPU, hasta la torre de arranque; tras lo cual es comprensible que múltiples dispositivos IDE – como lectores, quemadores o discos duros acoplados – y más si son de variantes lentas, pueden afectar este tiempo. El tiempo que los expertos llaman típico para XP es de 2 segundos.

2. Driver time: es el tiempo de inicializar los dispositivos.

3. Prefetching[8] time: es el tiempo gastado “leyendo páginas” desde el disco utilizado para inicializar los dispositivos, en el proceso de winlogon, o sea en el proceso en que Windows realiza la lectura de los registros – records – de inicio del sistema, el inicio de los servicios, del shell[9] del sistema, y las restantes aplicaciones que arrancan al inicio entre las que podemos mencionar el antivirus para que se entienda un poco mejor.

4. Registry and page file time: es el tiempo gastado en leer el registro[10] e inicializar la page file[11]

5. Video: es el tiempo utilizado en asignar el modo de video a la resolución final y el ritmo de actualización del mismo (refresh rate). Los drivers de video y la parte del BIOS de video afectan este tiempo.

6. Logon + services + shell times: son tiempos gastados para el winlogon, los servicios, el shell entre otros. Este tiempo es principalmente el del sistema operativo, de igual manera todo lo que se le adiciones como antivirus y programas de auto inicio afectan este tiempo.

Windows XP hace una aceleración de todos estos tiempos de carga utilizando el fichero NT loader –alguien llamado ntldr que usualmente se pierde ante variaciones de voltaje y manipulaciones incorrectas del sistema operativo que conllevan a reinstalaciones o reparaciones.

Este incluye dentro los siguientes elementos:
• Páginas prefetching del disco, que previenen perdidas durante el arranque, de igual manera a como los drivers son cargados en memoria, los servicios inicializados, entre otras cosas, estas páginas son necesarias en nuestro disco duro, pues teniendo estas páginas con anterioridad cargadas se adelanta, ya que cuando las fuera a buscar el sistema ya estarían en memoria y se eliminan así las demoras por lecturas y escrituras (I/O delays)

• La inicialización de los dispositivos esta solapada (coincide en tiempo) donde es posible. XP también solapa la inicialización de dispositivos como los puertos de serie y la red, acortando siempre el tiempo de inicialización de los dispositivos. Por ello es especialmente crucial que los discos duros no giren al 100 % en la lectura/escritura de los registros por parte de la CPU, pues podría lentificar el proceso, cuando la idea viene siendo una especie de tiempo compartido en dicha actividad.

• la desvinculación entre elementos del proceso de boot, la eliminación de procesos, la tranquilidad de los servicios, la reducción del footprint del sistema.

        • XP ha sido preparado para remover – de manera automática, pre definida (las copias desatendidas) o manual – cualquier elemento del camino del boot el cual no sea necesario, en otros casos consisten hasta en archivos opcionales no completamente innecesarios, y otra variante es decirle a los servicios que comiencen a ejecutarse un rato después del boot.

        • Un ejemplo de la desvinculación es que winlogon no tiene que esperar por la inicialización total de la red para iniciarse.

        • Muchos servicios ahora están combinados bajo procesos comunes (Svchost[12]) para llevar a un mínimo el número de procesos. Reduciéndose el costo de memoria – según los expertos – en 1.5 MB por proceso eliminado.

El arranque y la BIOS

Windows XP soporta algo llamado las especificaciones de la bandera de boot simple (SBF). La implementación de esta especificación resulta en una reducción considerable del tiempo gastado en el propio test de la BIOS, si el arranque previo del sistema operativo había sido exitoso. Esta mejora solo realiza una optimización del “camino del arranque exitoso[13]” en la Bios.

Un buen tiempo para la BIOS en el llamado camino del arranque exitoso podría tomar aproximadamente de 7 a 10 segundos, una pc con una torre con multiples plataformas – donde este instalado por ejemplo Linux además – podría tomar como máximo 14 – 15 segundos por el trabajo adicional de rotación del disco duro. Esto incluye la decisión de la BIOS y el tiempo tomado para poner a punto el disco duro.

Literatura acerca de la Simple Boot Flags puede ser encontrada en: http://www.microsoft.com/hwdev/resources/specs/simp_bios.asp

El cargador (Loader) del boot de XP

Un punto clave para incrementar la manera en que funciona el cargado del boot es a través de la optimización de la lectura de los discos realizada para XP. El plan de Microsoft consiste en que el boot loader de XP (ntldr) almacene los ficheros y directorios de la metadata de alguna manera – incierta y secreta claro está – clasificada en sus tiempos como la más novedosa y moderna. La cual reducía – y reduce – el tiempo de espera en la búsqueda de datos en el disco duro (disk seeks)

Cada sistema de ficheros es leído por ese método con una simple operación de entrada salida (I/O), resultando una mejora 4 o 5 veces superior a versiones anteriores.

Estas mejoras también son adicionadas al tiempo de regreso de la hibernación tras una reanudación. La primera razón nos habla del funcionamiento más eficiente de los caminos de I/O usados por el ntldr al leer la imagen de hibernación.

Este fichero de hibernación es un fichero que es comprimido cuando es escrito, para hacer eficiente este proceso la compañía resolvió hacerlo de manera solapada en conjunto con el fichero de I/O. Por ello no sorprende que al final cuando se realiza el regreso del modo de hibernación, ntldr utilice la BIOS para realizar la lectura/escritura en el disco.

• Un Tip (consejo) para usuarios avanzados es echar una mirada en la interrupción 13 de la BIOS – la gente vieja sabe de que hablo (algunos nuevos también of course) – si el tiempo de regreso de la hibernación fuera más lento que el de carga desde boot en frío.

Un análisis al boot del SO

Una vez concluida con la lectura de los ficheros necesarios por el cargador del boot, el kernel – núcleo del sistema, la célula madre – comienza a correr. Aquí es donde verdaderamente comienza a andar el sistema operativo. Para lograr un óptimo despertar – carga del sistema en memoria – Microsoft solapa la carga con la inicialización de los dispositivos de entrada/salida y del disco requerido, pero nosotros podemos remover, o determinar que ocurra después el cargado de otros procesos y servicios del área de boot, ya que no son necesarios en ese momento.

• A tono con un buen sistema para boot rápido sería importante velar también por la eficiencia en la inicialización de los dispositivos de entrada/salida y del disco.

La inicialización de los dispositivos en el arranque.

Microsoft solventa la inicialización de los dispositivos con un trabajo en paralelo, para ganar tanto tiempo en el boot como le sea posible. En vez de levantar cada dispositivo en un orden – como si trabajara con una cola o pila –levanta algunos (?) de manera colectiva, en procesos paralelos.

La velocidad de los dispositivos causan grandes efectos en el tiempo de boot. Lo que significa en lenguaje común que dispositivos más rápidos – generalmente de reciente arquitectura – tendrán cierta ventaja – esto no necesariamente es así – con respecto a dispositivos de cierta edad

• Se comparte por parte del autor la opinión de que las torres de discos son el único dispositivo requerido y a inicializar durante el boot, y todo lo demás puede ser dejado para realizar en eventos post boot. La idea a alcanzar es que todo dispositivo utilizado solo después del boot, entorpece el boot.

• Las torres nunca deben girar al 100% de sus revoluciones, pues esto vuelve más lenta la lectura y escritura de los distintos registros alargando el boot.

• Si no realizas un boot por red el autor recomienda desconectar el cable de la red para prevenir demoras externas ocasionadas por la network, este consejo – a juicio del autor – puede ser saludable también para servers startup, ya que si estuvieran algunas Workstation conectadas al Server una vez que este arranque y cargue los protocolos de red (TCP/IP) – culpables de gran parte de la demora en el boot con el cable puesto de una workstation – comenzará a tratar de controlar todos los dispositivos plug and play conectados en todas las Workstation que estén trabajando y demorará aun más el arranque.

• Un teclado y un ratón USB brindarían mejora también al ser más fácil la detección de estos dispositivos, que los conectados a los puertos ps/2.

El concepto Prefetching

En las versiones anteriores a XP, mientras los drivers, los servicios, y el propio shell cargaban, las requeridas páginas de memoria todavía no estaban allí, pues estas eran leídas bajo el principio de carga a demanda.

Esto podía ser fatal muchas veces hasta ocasionar crash del sistema – no se acuerdan los veteranos de las continuas reiniciadas de 95 y 98 – o alargarse indefinidamente el tiempo de boot, o de ejecución, pues las páginas erróneas en momento de ejecución pueden demorar las operaciones de I/O en los discos.

Esta fue otra llave maestra en las mejoras que sufrió el SO Windows, pues en XP estas se cargan en memoria antes de que sean requeridas, previniendo así las demoras por páginas faltantes o erróneas y su concebida lectura en momento de ejecución.

Obteniéndose una aceleración no solo en el boot, sino que también es evidente en el momento de ejecución de una aplicación. Esto se logra mediante el monitoreo de las páginas necesarias durante el arranque, y las necesarias para que un ejecutable pueda comenzar.

La ruta a la zona de guerra donde “operan estas páginas” es la que sigue %directorio donde instalaste Windows%\prefetch. Una mirada en el interior de la misma y nos sorprenderemos, pues allí hay una total referencia – usable para una auditoria[14] - a todos los programas que has estado utilizando en tu máquina.

En la próxima ejecución o arranque este escenario es re – referenciado.
Periódicamente, estos ficheros son validados creándose una representación interna de ellos – que podrá ser usada subsecuentemente – en una lista creada en %directorio donde instalaste Windows%\prefetch\layout.ini que la aplicación defrag – imitación barata de un defragmentador – utiliza para saber que páginas deben ser dejadas continuamente en el disco.

Privilegiadamente las páginas que son prefetched durante las entradas/salidas de disco serán más eficientes después de que sean organizadas.

Buscando eficiencia en los discos

La meta que Microsoft se trazó fue la de minimizar búsquedas aleatorias que pueden consumir – cada vez – dos o tres segundos, o más. Pero ¿Cuánto demora el tiempo de prefetching? Su duración depende de la manera en que funciona nuestro disco, la memoria posible a utilizar y cualquier otra cosa que pueda causar demoras en el funcionamiento. Debemos recordar que la eficiencia en el prefetching es vital, las demoras en la entrada/salida de los discos pueden causar mal funcionamiento en el arranque de sistemas operativos.

Es por ello que el autor recomienda que los discos de arranque no tengan clusteres malos, de tenerlos que estos sean marcados como malos – nunca reparados[15] - y que jamás se ponga como disco de arranque un disco duro con problemas en el sector 0, sector utilizado para realizar el arranque de la máquina.

Hay a quien les gusta investigar y las mediciones de tiempo son las armas con que nos valemos los instaladores para nuestras pruebas de ensayo, bueno pues les invito probar que pasa con los tiempos de boot de sus máquinas. Pudiendo desconectar la carga del prefetch en el próximo reinicio restringiéndolo a través del registro, alterando la siguiente llave:
HKEY_LOCAL-MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefectchParameters
El valor EnablePrefetcher lo pondremos a 0[16]
Es importante conocer que las páginas accedidas durante lanzamiento de aplicaciones son guardadas bajo el nombre “nombre_de_la_aplicación-XXXXXXX”.pf donde la extención nos indica prefetching, y los números (en este caso Xs) el documento que se abrió con esta – entre otras cosas –. Se utiliza por el sistema para conocer cuales páginas prefetch cuando esta aplicación sea cargada[17].

El sistema de hibernación de Windows XP

Durante la hibernación todos los dispositivos son desconectados y la memoria física del sistema es escrita en el disco en un archivo llamado: fichero de hibernación \hiberfil.sys.
Antes de que Windows escriba este fichero, todas las páginas de memoria en 0, libre, y de espera son liberadas.

Estas páginas no necesitan ser escritas en el disco, el resto de las páginas de memoria son comprimidas y escritas en el disco.

Para hacer este movimiento optimo Microsoft se dio a la tarea de implementar algunas mejoras entre las que vale destacar que:

• Los algoritmos de compresión/descompresión de ficheros fueron optimizados para trabajar con bloques de 64 Kb de data.

• A la vez que un bloque de datos es escrito en el disco, el siguiente bloque de datos es comprimido. Al solapar la compresión con la escritura se convierte este tiempo de compresión en un tiempo virtualmente libre.

Una mirada a los interiores de a rápida reanudación

Durante el proceso de reanudación desde la espera, el sistema operativo envía SO IRPs (I/O Request Packet[18]) a los dispositivos para indicar cambios en el estatus del sistema de energizado. Acto seguido son informados – mediante DO IRPs los drivers de los dispositivos de los cambios efectuados en el energizado de cada dispositivo.

Del conocimiento de estas funciones podemos inferir que el sistema operativo es el responsable de notificar a cada dispositivo, y que debe hacerlo en un orden estricto.
Este orden está regido por un par de reglas básicas que son evidentes – ya que no sería lógico que se hiciera de otra manera – y necesarias para evitar colgaduras del sistema.

• Un dispositivo no puede ser energizado si su padre – dispositivo del cual hereda atributos o funciones – no ha sido energizado aun.

• Los dispositivos no paginados[19] serán energizados solo cuando todos los dispositivos paginados estén funcionando. Y su orden se hará según lo establecido en la primera regla.

A manera de conclusiones primarias

Así concluye esta overview acerca de cómo funciona – de manera somera – internamente el proceso de boot y resume en W$XP, pero no concluye aquí el sistema de artículos que el autor se ha propuesto.
Esto solo ha sido el basamento teórico – los pilares – para que se pueda entender – y no actuar mecánicamente – como realizar una instalación – tema a debatir en próximas entregas – consciente y óptima de una Workstation. O sea una instalación controlada del SO W$XP.



Artículos relacionados


No hay comentarios: