Viernes 17:00–18:00

Compartiendo memoria eficientemente con proxies

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

Video