Pregunta

Firefox 3 vino con un nuevo asignador: jemalloc .

He escuchado en varios lugares que este nuevo asignador es mejor. Sin embargo, los mejores resultados de Google no dieron más información y estoy interesado en cómo funciona exactamente.

¿Fue útil?

Solución

jemalloc apareció por primera vez para FreeBSD, la creación de uno "Jason Evans", de ahí el "je". Lo ridiculizaría por ser egoísta si no hubiera escrito una vez un sistema operativo llamado paxos :-)

Consulte este PDF para obtener todos los detalles. Es un documento técnico que describe en detalle cómo funcionan los algoritmos.

El principal beneficio es la escalabilidad en sistemas multiprocesador y multiproceso 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 un solo subproceso, no hay un beneficio real para múltiples arenas, por lo que se utiliza una sola arena.

Sin embargo, en situaciones de subprocesos múltiples, se crean muchas arenas (cuatro veces más arenas que procesadores), y los hilos se asignan a estas arenas de forma circular.

Esto significa que la contención de bloqueo se puede reducir ya que, si bien varios subprocesos pueden llamar a malloc o free al mismo tiempo, solo competirán si comparten la misma arena. Dos hilos con arenas diferentes no se afectarán entre sí.

Además, jemalloc intenta optimizar la ubicación de la memoria caché, ya que el acto de recuperar datos de la RAM es mucho más lento que el uso de datos que ya están en las memorias caché de la CPU (no es diferente en concepto a la diferencia entre la recuperación rápida de RAM versus recuperación lenta del disco). Con ese fin, primero intenta minimizar el uso de memoria en general, ya que es más probable que se asegure de que todo el conjunto de trabajo de la aplicación esté en caché.

Y, cuando eso no se puede lograr, trata de garantizar que las asignaciones sean contiguas, ya que la memoria asignada juntas tiende a usarse juntas.

Desde el 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.

Otros consejos

Hay una fuente interesante: la fuente C en sí: http://mxr.mozilla.org/mozilla-central/source /memory/mozjemalloc/jemalloc.c

Al principio, un breve resumen describe cómo funciona aproximadamente. Sin embargo, falta un análisis de algoritmo más profundo.

En cuanto a qué beneficios trajo jemalloc a mozilla, según http : //blog.pavlov.net/2008/03/11/firefox-3-memory-usage/ (también primer resultado de Google para mozilla + jemalloc):

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

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 jemalloc de manera efectiva, para Alta escalabilidad .

jemalloc realmente ayudó a Aerospike a aprovechar las modernas arquitecturas informáticas multiproceso, multiprocesador y multinúcleo. También hay algunas capacidades de depuración muy importantes integradas en jemalloc para administrar arenas. La depuración permitió que Psi pudiera decir, por ejemplo, qué era una verdadera pérdida de memoria, en comparación con el resultado de la fragmentación de la memoria. Psi también analiza cómo la caché de subprocesos y la asignación por subproceso proporcionaron una mejora general del rendimiento (velocidad).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top