2009-10-26 10 views

Respuesta

71

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.

+0

Parece que realmente he supervisado el primer resultado. : P Pero muchas gracias por la pista. – Albert

4

En cuanto a lo que beneficia jemalloc traído a Mozilla, por http://blog.pavlov.net/2008/03/11/firefox-3-memory-usage/ (también el primer resultado de Google para Mozilla + jemalloc):

[...] llegó a la conclusión de que jemalloc nos dio la menor cantidad de fragmentación después de correr un largo período de tiempo. [...] Nuestras pruebas automáticas en Windows Vista mostraron una caída del 22% en el uso de memoria cuando activamos jemalloc.

1

Aerospike implementó jemalloc en una sucursal privada en 2013. En 2014, se incorporó a Aerospike 3.3.Psi Mankoski acaba de escribir sobre la implementación de Aerospike, más cuándo y cómo usar efectivamente jemalloc, para High Scalability.

jemalloc realmente ayudó a Aerospike a aprovechar las modernas arquitecturas de computadora multiproceso, multi-CPU y multi-core. También hay algunas capacidades de depuración muy importantes integradas en jemalloc para administrar arenas. La depuración le permitió a Psi poder decir, por ejemplo, qué era una verdadera pérdida de memoria, frente a lo que fue el resultado de la fragmentación de la memoria. Psi también analiza cómo la caché de subprocesos y la asignación por subprocesos proporcionan una mejora general en el rendimiento (velocidad).

Cuestiones relacionadas