Description
PyconAR 2016 - Bahía Blanca
Compartiendo memoria eficientemente con proxies por Claudio Freire
Audience level: Avanzada
Descripción
¿Cuántas tuviste que escalar, con multiprocessing, o tu framework favorito? ¿Notaste que los requisitos de memoria se te iban a las nubes? Presentaré una lib recién salida de la panadería, sharedbuffers, y las técnicas y conceptos detrás de la misma. Cómo crear segmentos de memoria compartida, cómo usarlos para compartir objetos y estructuras complejas, e incluso que no entran en memoria.
Resumen
La charla intenta exponer dos cosas:
Por un lado, técnicas interesantes para compartir memoria de forma eficiente en Python, algo que suele ser complejo con las herramientas normalmente a disposición de los desarrolladores.
Por otro lado, expone una librería que hice a tal efecto, sharedbuffers, con el objetivo de hacer la tarea más sencilla para el próximo que intente.
Se van a cubrir conceptos de alto nivel, aptos para usuarios intermedios, como es el uso de la librería, pero para poder sacar el provecho máximo a la charla, en particular la segunda parte en que se exponen los detalles de la implementación, es necesario tener conocimientos más avanzados. Así que la estoy marcando como una charla avanzada.
Y sí, no tengo ni idea si se dice librería o biblioteca. Pero se instala en /usr/lib así que yo le digo librería :-p
El flujo de la charla está planeado a grandes rasgos como sigue:
- Motivación 4'
- El cache que no entra en memoria 7 veces
- Cuando el costo de serialización se vuelve prohibitivo
- Transición de un cache a un bundle compartido
- Ejemplo rápido 3'
- Base de user agents de 30GB
- La técnica por arriba 12'
Compartiendo un buffer de bytes mediante archivos mapeados 2'
- Embebiendo objetos simples en el buffer 5'
- Definición de schemas 2'
- Manipulación sin deserialización con proxies 3'
- Complejizando los objetos 5'
- Colecciones 1'
- Estructuras jerárquicas 2'
- Estructuras cíclicas 2'
- La técnica a bajo nivel 16'
- Estructura en memoria de un objeto 4'
- Atributos con tipos estáticos
- Wrappers con RTTI para atributos con tipo dinámico
Secuencias lineales 4'
- Mapeos 8'
- El hash table compacto 5'
- Características de performance 3'
- Logrando que vaya rápido 6'
- Cython magic 3'
- Reuso de proxies, transmutación de tipos 3'
- El futuro 4'
- Compatibilidad/chequeo de schemas 1'
- Proxies transparentes transmutando mixins 1'
- Estructuras mutables y lockless 2'
Preguntas
Slides:
- Slides de la charla, en formato pdf
- Slides de la charla, en formato libreoffice