# honour make -s flag
override V := $(if $(findstring s,$(MAKEFLAGS)),,$V)
+.PHONY: all
+all: presentacion.pdf notas.pdf
+
presentacion.pdf: $O/presentacion.tex $(imgs)
$(if $V,@echo "$(PDFLATEX) $< > $@")
$V cd $O && $(PDFLATEX) $(PDFLATEXFLAGS) $(<F) > $@.log
$V cd $O && $(PDFLATEX) $(PDFLATEXFLAGS) $(<F) >> $@.log
$V mv $O/$@ $@
+notas.pdf: $O/notas.tex
+ $(if $V,@echo "$(PDFLATEX) $< > $@")
+ $V cd $O && $(PDFLATEX) $(PDFLATEXFLAGS) $(<F) > $@.log
+ $V cd $O && $(PDFLATEX) $(PDFLATEXFLAGS) $(<F) >> $@.log
+ $V mv $O/$@ $@
+
$O/presentacion.tex: presentacion.rst $(R2B)
$(if $V,@echo "$(R2B) $< > $@")
$V $(R2B) $(R2BFLAGS) $< | $(R2BFILTER) > $@
+$O/notas.tex: presentacion.rst $(R2B)
+ $(if $V,@echo "$(R2B) $< > $@")
+ $V $(R2B) $(R2BFLAGS) --shownotes=only $< | $(R2BFILTER) > $@
+
$O/img/%.pdf: img/%.dot
$(DOT) $(DOTFLAGS) -Tpdf -o $@ $<
* Lenguaje de programación D
* Utilidad → Software Libre → Contribución
+.. r2b-note::
+
+ 1 min de presentación
+
+ 1.5 min / 2.5 min
+
Recolección de Basura
--------------------------------------------------
¿Cómo?
+.. r2b-note::
+
+ 5 min / 7.5 min
+
Algoritmos Clásicos
~~~~~~~~~~~~~~~~~~~
* Conteo de referencias
.. dummy: para que ande bien el raw de arriba
+.. r2b-note::
+
+ 5 min / 12.5 min
+
Estado del Arte
~~~~~~~~~~~~~~~
* Medio siglo de investigación y desarrollo (3000+ publicaciones)
* **Precisión**
* Análisis estático
+.. r2b-note::
+
+ 6 min / 18.5 min
+
+ Empieza con John McCarthy en 1959
+
El Lenguaje de Programación D
--------------------------------------------------
* Sistema de tipos estático
* Multi-paradigma
+.. r2b-note::
+
+ 1 min / 19.5 min
+
Paradigmas
~~~~~~~~~~
* Programación de bajo nivel (*system-programming*) ← C/C++
→ Finalización
+.. r2b-note::
+
+ 4.5 min / 24 min
+
Recolector de Basura de D
.. image:: img/heap.pdf
:height: 6.7cm
+.. r2b-note::
+
+ 2.5 min / 26.5 min
+
Bloques
~~~~~~~
* Tamaño fijo (por página)
* *free*
* *finals*
+.. r2b-note::
+
+ 3.5 min / 30 min
+
Algoritmo
~~~~~~~~~
* Marcado y barrido
* Muy propenso a extender el tiempo de *stop-the-world* en la práctica
+.. r2b-note::
+
+ 3 min / 33 min
+
Lo Bueno, lo Malo y lo Feo
--------------------------------------------------
(bueno != perfecto)
+.. r2b-note::
+
+ 5 min / 38 min
+
Lo Malo y lo Feo
~~~~~~~~~~~~~~~~
Lo malo
* El código (complejo, intrincado, duplicado, poco documentado) → Difícil de
mantener, modificar y mejorar
+.. r2b-note::
+
+ 3.5 min / 41.5 min
+
Modificaciones Propuestas
* Comienza con un solo hilo (el que llamó a ``fork(2)``)
* Muy eficiente
+.. r2b-note::
+
+ 3.5 min / 44 min
+
Algoritmo Principal
~~~~~~~~~~~~~~~~~~~
* Basado en el trabajo de Gustavo Rodriguez-Rivera y Vince Russo (*Non-intrusive
* Se comunican resultados vía memoria compartida
* Sincronización mínima (``fork(2)`` + ``waitpid(2)``)
+.. r2b-note::
+
+ 2.5 min / 44 min
+
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
+
Eager Allocation
~~~~~~~~~~~~~~~~
* Crea un nuevo *pool* de memoria antes de lanzar el marcado concurrente
↓ Tiempo de pausa real
+.. r2b-note::
+
+ 6.5 min / 53 min
+
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
--------------------------------------------------
* Utiliza la información para escanear solo palabras que son punteros (con
seguridad o potencialmente)
+.. r2b-note::
+
+ 2 min / 58.5 min
+
Optimizaciones y Otras Mejoras Menores
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Mejora del factor de ocupación del *heap*
* Optimizaciones algorítmicas sobre búsquedas frecuentes
* Registro de pedidos de memoria y recolecciones realizadas
+.. r2b-note::
+
+ 2 min / 60.5 min
+
Configurabilidad
~~~~~~~~~~~~~~~~
* Configurable en *tiempo de arranque*
* ``eager_alloc``
* ``early_collect``
+.. r2b-note::
+
+ 1.5 min / 62 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
~~~~~~~~~
¿?