martes, 21 de diciembre de 2010

News: ¡ReactOS alcanza las 50000 revisiones!La Sorpresa y el Caos.

images

No todos los días un proyecto llega a los 50000 commits. Por ello decidimos guardarnos una sorpresa especial para esta revisión.
Sin embargo la sorpresa especial se convirtió en Caos y generó una serie de problemas que por fortuna han sido rápidamente resueltos.
En la revisión 50000 hemos activado el NT Heap Manager, del que ya os hemos hablado en entradas anteriores, y aunque los resultados positivos no se han hecho esperar, hemos tenido que enfrentarnos con un par de bugs que han salido a la luz.



A continuación se describen las grandes mejoras que aporta el nuevo Heap Manager comparándolo con el Heap Manager de Wine.


Las 50000 revisiones


Aleksey Bragin ha esperado hasta la revisión 50000 para activar el NT Heap Manager (el cual hasta ahora era compilado pero no era usado por defecto). Esta activación tiene lugar tras meses de testeo para comprobar que el nuevo Heap Manager funciona correctamente ya que es una pieza crítica del Sistema Operativo. Sin embargo,una larga fase de testeo no asegura que se “atrapen” todos los bugs, y únicamente activando el Heap Manager en el trunk hace posible terminar de pulir esta pieza y aquellas en las que se asienta.



El Commit.


En el Commit 50000  Aleksey Bragin ha explicado los cambios y mejoras que el nuevo Heap Manager va a proporcionar a ReactOS, a continuación os dejo una traducción:

“Ha llegado el momento de deshacernos de nuestra ligeramente modificada implementación del Heap de Wine, el cual es un hack basado en la implementación del Heap de Windows95, el cual a su vez es un hack del administrador de memoria de DOS. Nuestro anterior Heap Manager daba soporte a 3 NT Heap Flags de las 18 posibles, no era compatible con rutinas “a medida” de reserva/liberación de memoria y era entre 50 y 80 veces más lenta,con una fragmentación 500 veces superior, si la comparamos con el LFH de NT. ( WINE es afortunada, ya que las características avanzadas del Heap NT son utilizadas normalmente en el modo Kernel, no en el modo usuario, y ellos cruzan sus dedos para que esto sea así )

Nota de "El Blog de ReactOS": Wine no implementa las características avanzadas del Heap NT en el modo usuario, por lo que si una aplicación usara dichas rutinas no funcionaría sobre Wine. En este sentido ReactOS es ahora mucho más compatible, rápido y menos fragmentado que WINE.¿Quién no ha escuchado sobre la “lentitud” de WINE?Aquí teneís algunas de las posibles causas ;)

Varias aplicaciones que hacen un uso intensivo de Base de datos /SQL  se beneficiarían de estas características “a medida” proporcionadas por NT. Sin mencionar que eliminamos el soporte cutre de rutinas de envío, el soporte cutre de las Flags definadas por el Usuario y el soporte cutre de los valores definados por el Usuario.

Así pues, el momento glorioso del nuevo Heap Manager, el cual (recordemos) es totalmente nuevo, que se parece al heap manager REAL de NT, y que se basa en estructuras de datos similares a las estructuras “heap” de Windows 2003 y Vista, capaz de dar soporte a Flags avanzadas del Heap(útiles para hacer debugging, por ejemplo), el cual tiene una mucha menor tasa de fragmentación ( y por tanto mayor velocidad y fiabilidad), que además soporta flags y valores definidos por el usuario, con soporte nativo para rutinas de envío propias(importante para el subsistema Win32) ha llegado. También reserva, envía, recibe y libera memoria al vuelo, al contrario que el anterior heap manager que prefiere reservar y enviar tanto como sea posible y que no decomisiona cuando ya no es necesario. Por no hablar del soporte de heaps por proceso, con su propio lock, así como soporte para un debugger especial del heap ( aún por crear en heapdbg.c) que será util para encontrar corrupciones del Heap.

Sí, me aburro mucho..  :D “



Los problemas

Tras el commit nuestro Testman se volvió loco. De pronto dejó de testear algunas suites y otras que antes se ejecutaban sin problemas ahora daban error ( CRASHED). Aquí podéis ver una comparativa entre la 49999 y la 50000.
Sin embargo era lo esperado: ReactOS demostraba que no se sentía cómodo con nuestro nuevo heap manager.

Como ya comentamos esto es algo que suele ocurrir, y que ya nos pasó en la reescritura del Memory Manager, al dejar a la vista varios bugs críticos de otras partes del sistema operativo.
Aún quedan por resolver algunos de estos bugs críticos,que han salido a la luz gracias al nuevo Heap Manager, pero hemos podido comprobar como varias suites de tests han mejorado sensiblemente sus números y además son mucho más estables.

La estabilidad se mide en los números de tests pasados revisión tras revisión y es que con el antiguo heap manager, y sin motivo aparente, dos revisiones consecutivas podían diferir en MILES de test fallados. Aquí podéis ver un ejemplo de la “regular” fiabilidad del antiguo Heap Manager, mientras que aquí podeís ver la fiabilidad actual)

Tras la reescritura del Memory Manager y la del Heap Manager, ahora ReactOS entra en una fase de máxima estabilidad. Pero eso solo lo veremos en la 0.3.13...

4 comentarios:

  1. Muy buenos cambios estamos bien ultimamente en reactos. A ver si sigue asi la cosa :D

    No se porqué pensé que el numero de fallos iba a bajar, y se ha mantenido, aunque ahora sea estable ¿no?

    De todas maneras nos estais poniendo los dientes largos para la siguiente version, y dentro poco empezaremos a preguntar que cuando sale!!! ;)

    ResponderEliminar
  2. Es hermoso escuchar tantas buenas noticias en tan poco tiempo!
    Solo falta esperar que Wine implemente también ciertas partes de ReactOS para que ambos proyectos avancen aún con más fuerza!!

    ResponderEliminar
  3. @mcklaw
    El gran paso adelante con el nuevo NT Heap Manager es en el rendimiento, aunque también parece resolver problemas de corrupción de memoria al ejecutar los Winetests. Esto es un "extra" que no esperábamos y demuestra la calidad del mismo.

    Realmente el número de tests realizados ha disminuido debido a que varios tests están "Crasheando" tras el cambio de Heap Manager. En cuanto éstos comiencen a funcionar (tal y como lo venían haciendo), veréis como el numero de tests pasados aumentan mientras que los fallidos se mantienen.

    ResponderEliminar
  4. @jpxsat
    Esperemos que las relaciones entre Wine y ReactOS continúen mejorando poco a poco y que ambos proyectos puedan ayudarse mutuamente.
    Es cuestión de tiempo descubrir que todos vamos en el mismo barco.
    Veremos :)

    ResponderEliminar