jemalloc
apareció por primera vez para FreeBSD, la creación de un "Jason Evans", de ahí el "je". Me gustaría ridiculizarlo por ser egoísta si no hubiera escrito un sistema operativo llamado paxos
:-)
Ver this PDF para más detalles. Es un libro blanco que describe en detalle cómo funcionan los algoritmos.
El principal beneficio es la escalabilidad en sistemas multiprocesador y multihilo logrados, en parte, mediante el uso de múltiples arenas (los fragmentos de memoria sin procesar a partir de los cuales se realizan las asignaciones).
En situaciones de subproceso único, no hay un beneficio real para múltiples arenas, por lo que se usa un solo escenario.
Sin embargo, en situaciones de subprocesos múltiples, se crean muchas arenas (cuatro veces más escenarios que procesadores) y los subprocesos se asignan a estas arenas de forma circular.
Esto significa que la contención de bloqueo se puede reducir ya que, aunque múltiples hilos pueden llamar a malloc
o free
al mismo tiempo, solo contendrán si comparten el mismo escenario. Dos hilos con diferentes arenas no se afectarán entre sí. jemalloc
intenta optimizar para la localidad de caché ya que el acto de recuperar datos de la RAM es mucho más lento que usar datos ya en las memorias caché de la CPU (no diferente en concepto a la búsqueda rápida de RAM frente a la lenta disco). Para ello, primero intenta minimizar el uso de la memoria en general, ya que es más probable que garantice que el conjunto de trabajo completo de la aplicación esté en caché.
Y, cuando eso no se puede lograr, intenta asegurarse de que las asignaciones son contiguas, ya que la memoria asignada en conjunto tiende a usarse en conjunto.
A partir del documento técnico, estas estrategias parecen ofrecer un rendimiento similar a los mejores algoritmos actuales para uso de un solo subproceso, al tiempo que ofrecen mejoras para el uso de subprocesos múltiples.
Parece que realmente he supervisado el primer resultado. : P Pero muchas gracias por la pista. – Albert