* Investigación + aplicación
* Software Libre
-.. r2b-note::
-
- 1 min de presentación
-
- 1.5 min / 2.5 min
-
Recolección de Basura
~~~~~~~~~~~~~~~~~~~~~
¿Qué?
* 50+ años de desarrollo
* 3000+ *papers*
-.. r2b-note::
-
- 5 min / 7.5 min
-
Recolector Actual de D
~~~~~~~~~~~~~~~~~~~~~~
* Marcado y barrido
* Muy propenso a extender el tiempo de *stop-the-world* en la práctica
-.. r2b-note::
-
- 3 min / 33 min
-
Recolector Actual - Lo Bueno
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Anda :)
(bueno != perfecto)
-.. r2b-note::
-
- 5 min / 38 min
-
Recolector Actual - Lo Malo y lo Feo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lo malo
→ Difícil de mantener, modificar y mejorar
-.. r2b-note::
-
- 3.5 min / 41.5 min
-
Modificaciones Propuestas
* Se comunican resultados vía memoria compartida
* Sincronización mínima (``fork(2)`` + ``waitpid(2)``)
-.. r2b-note::
-
- 2.5 min / 44 min
-
Concurrencia - Problemas
~~~~~~~~~~~~~~~~~~~~~~~~
* Hilo que disparó la recolección bloqueado hasta fin de recolección completa
→ Tiempo de pausa en la práctica ~= tiempo total de recolección
-.. r2b-note::
-
- 2.5 min / 46.5 min
-
Concurrencia - Eager Allocation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Pide más memoria al OS antes de lanzar el marcado concurrente
↓ Tiempo de pausa real
-.. r2b-note::
-
- 6.5 min / 53 min
-
Concurrencia - Early Collection
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Dispara una recolección *preventiva* antes de que se agote la memoria
↓ Tiempo de pausa real (no garantizado)
-.. r2b-note::
-
- 3.5 min / 56.5 min
-
- Si hago una recolección cuando queda 20% de memoria libre y nadie pide más
- memoria mientras se recolecta, es como si tuviera 20% menos de memoria
- disponible para el programa => más recolecciones => más consumo de CPU (y
- potencialmente run-time)
-
Otras Mejoras
~~~~~~~~~~~~~
* Marcado semi-preciso del *heap*
* Registro de pedidos de memoria y recolecciones realizadas
* Configurabilidad (en *tiempo de inicialización*)
-.. r2b-note::
-
- 2 min / 58.5 min
-
Resultados
.. image:: img/norm-hist-stw.pdf
:width: 12.5cm
-.. r2b-note::
-
- 5.5 min / 67.5 min
-
- Explicar brevemente división de pruebas (cual es trivial, pequeña, real)
-
Tiempo Máximo de Pausa Real
~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. image:: img/norm-hist-pause.pdf
:width: 12.5cm
-.. r2b-note::
-
- 2 min / 69.5 min
-
- Explicar que donde hay grandes diferencias, es por tiempo de barrido
-
Cantidad Máxima de Memoria Utilizada
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. image:: img/norm-hist-mem.pdf
:width: 12.5cm
-.. r2b-note::
-
- 3.5 min / 73 min
-
- Enganchar lo anterior con la relación con el consumo de memoria
-
Tiempo Total de Ejecución
~~~~~~~~~~~~~~~~~~~~~~~~~
.. image:: img/norm-hist-time.pdf
:width: 12.5cm
-.. r2b-note::
-
- 7 min / 80 min
-
- * mcore y split bajan mucho por caché de tamaño
- * rnddata baja mucho por marcado preciso
- * bigarr y sbtree suben porque no hacen más que alocar
-
Conclusión
Casi **3 veces menor** (55s → 20s)
-.. r2b-note::
-
- 4 min / 84 min
-
Problemas, Limitaciones y Puntos Pendientes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Explosión de uso de memoria con *eager allocation*
* Mejorar predicción de *early collection*
* Experimentar con ``clone(2)``
-.. r2b-note::
-
- 3 min / 87 min
-
Trabajos Relacionados
~~~~~~~~~~~~~~~~~~~~~
* *Memory Management in the D Programming Language*
Gustavo Rodriguez-Rivera y Vince Russo. Software Practiceand Experience
Volumen 27, Número 8. Agosto 1997.
-.. r2b-note::
-
- 1.5 min / 88.5 min
-
Trabajos Futuros
~~~~~~~~~~~~~~~~
* Organización de memoria
* Concurrencia → *Lock* **global**
* Movimiento
-.. r2b-note::
-
- 1.5 min / 92 min
-
Preguntas
~~~~~~~~~
¿?