* 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 de Basura de D
-~~~~~~~~~~~~~~~~~~~~~~~~~
+Recolector Actual de D
+~~~~~~~~~~~~~~~~~~~~~~
* Marcado y barrido
* Marcado iterativo
* Muy propenso a extender el tiempo de *stop-the-world* en la práctica
-.. r2b-note::
-
- 3 min / 33 min
-
-Lo Bueno
-~~~~~~~~
+Recolector Actual - Lo Bueno
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Anda :)
* Organización del *heap* (< fragmentación)
* Marcado iterativo (!\ *overflow*)
(bueno != perfecto)
-.. r2b-note::
-
- 5 min / 38 min
-
-Lo Malo y lo Feo
-~~~~~~~~~~~~~~~~
+Recolector Actual - Lo Malo y lo Feo
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lo malo
* ↓ Configurabilidad (*no silver bullet*)
→ Difícil de mantener, modificar y mejorar
-.. r2b-note::
-
- 3.5 min / 41.5 min
-
Modificaciones Propuestas
* Algoritmo basado en el trabajo de Gustavo Rodriguez-Rivera y Vince Russo
(*Non-intrusive Cloning Garbage Collector with Stock Operating System
Support*)
-* Minimiza tiempo de pausa realizando fase de marcado **concurrente** vía
+* Minimiza tiempo de pausa realizando fase de **marcado concurrente** vía
``fork(2)``
* Proceso padre sigue corriendo el programa
* Proceso hijo realiza fase de marcado
* Se comunican resultados vía memoria compartida
* Sincronización mínima (``fork(2)`` + ``waitpid(2)``)
-.. r2b-note::
-
- 2.5 min / 44 min
-
-Problemas
-~~~~~~~~~
+Concurrencia - Problemas
+~~~~~~~~~~~~~~~~~~~~~~~~
* Hilo que disparó la recolección bloqueado hasta fin de recolección completa
(marcado concurrente inclusive)
* Otros hilos potencialmente bloqueados durante toda la recolección también
→ Tiempo de pausa en la práctica ~= tiempo total de recolección
-.. r2b-note::
-
- 2.5 min / 46.5 min
-
-Eager Allocation
-~~~~~~~~~~~~~~~~
-* Crea un nuevo *pool* de memoria antes de lanzar el marcado concurrente
-* Devuelve memoria del nuevo *pool* al programa mientras termina el marcado
+Concurrencia - Eager Allocation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* Pide más memoria al OS antes de lanzar el marcado concurrente
+* Devuelve memoria nueva al programa mientras termina el marcado
concurrente
* Permite al programa (**todos** sus hilos) seguir trabajando mientras se
realiza el marcado concurrente
↓ Tiempo de pausa real
-.. r2b-note::
-
- 6.5 min / 53 min
-
-Early Collection
-~~~~~~~~~~~~~~~~
+Concurrencia - Early Collection
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Dispara una recolección *preventiva* antes de que se agote la memoria
* Permite al programa (**todos** sus hilos) seguir trabajando mientras la
recolección *preventiva* está en progreso
↓ 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
Resultados
--------------------------------------------------
+Banco de Pruebas
+~~~~~~~~~~~~~~~~
+* Programas
+
+ * 7 *Micro-benchmarks*
+ * 5 *Olden Benchmark* (400-1000 *SLOC*)
+ * Dil (32K+ *SLOC*, 86 módulos, 300+ *clases*)
+
+* Métricas
+
+ * Tiempo total de ejecución
+ * Tiempo máximo de *stop-the-world*
+ * Tiempo máximo de pausa real
+ * Cantidad máxima de memoria utilizada
+
Tiempo Máximo de Stop-The-World
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. 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
Utilización de memoria de Dil:
- **50% mayor** (mucho *overhead* por marcado preciso)
+ **50% mayor** (213MiB → 307MiB)
+
+ (mucho *overhead* por marcado preciso)
* Yapa
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
~~~~~~~~~
¿?