Microsoft ha abierto el código para el sistema de asignación de memoria mimalloc

Microsoft ha abierto una biblioteca bajo licencia MIT mmalloc de implementaciones de un sistema de asignación de memoria creado originalmente para componentes de tiempo de ejecución de lenguajes coca и "Lean". Mimalloc está adaptado para su uso en aplicaciones estándar sin cambiar su código y puede actuar como un reemplazo transparente de la función malloc. Admite trabajo en Windows, macOS, Linux, BSD y otros sistemas similares a Unix.

La característica clave de mimalloc es su implementación compacta (menos de 3500 líneas de código) y su rendimiento muy alto. EN pruebas realizadas mimalloc superó a todas las bibliotecas de asignación de memoria de la competencia, incluidas Jemalloc, tcmalloc, pequeñoloc, rpmalloc и acumulación.

Para evaluar el desempeño, se utiliza un conjunto de pruebas estandar En algunas pruebas, mimalloc es muchas veces más rápido que otros sistemas; por ejemplo, en la prueba de migración de objetos entre diferentes subprocesos, mimalloc resultó ser más de 2.5 veces más rápido que tcmalloc y jemalloc. Al mismo tiempo, en la mayoría de las pruebas también se observa un menor consumo de memoria; en algunas situaciones, el consumo de memoria se puede reducir en un 25%.

Microsoft ha abierto el código para el sistema de asignación de memoria mimalloc

El alto rendimiento se logra principalmente mediante el uso de fragmentación de listas gratuita. En lugar de una lista grande, mimalloc utiliza una serie de listas más pequeñas, cada una de las cuales está vinculada a una página de memoria. Este enfoque reduce la fragmentación y aumenta la localidad de los datos en la memoria. Una página de memoria es un conjunto agrupado de bloques de tamaño similar. En sistemas de 64 bits, el tamaño de la página suele ser de 64 KB. Si no quedan bloques ocupados en la página, ésta se libera completamente y la memoria se devuelve al sistema operativo, lo que reduce los costos de memoria y la fragmentación en programas de larga duración.

La biblioteca puede incluirse en la etapa de vinculación o cargarse para un programa ya ensamblado (“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”). La biblioteca también ofrece API para integrar funcionalidad en tiempo de ejecución y control de comportamiento detallado, por ejemplo, para conectar controladores de liberación de memoria diferida y contadores de referencia que aumentan monótonamente. Es posible crear y utilizar varios "montones" en una aplicación para distribuirlos en diferentes áreas de memoria. También es posible liberar el montón por completo, sin atravesar y liberando por separado los objetos colocados en él.

Es posible construir la biblioteca en modo seguro, en el que se sustituyen páginas especiales de verificación de memoria (páginas de protección) en los límites de los bloques y se utiliza la aleatorización de la distribución de los bloques y el cifrado de las listas de bloques liberados. Estas medidas permiten bloquear las técnicas más comunes para explotar los desbordamientos de búfer basados ​​en el montón. Cuando habilita el Modo seguro, el rendimiento disminuye aproximadamente un 3%.

Entre las características de mimalloc, también se destaca que no es susceptible a problemas de hinchazón debido a una gran fragmentación. En el peor de los casos, el consumo de memoria aumenta un 0.2% para los metadatos y puede alcanzar el 16.7% para la memoria distribuida. Para evitar conflictos al acceder a los recursos, mimalloc utiliza solo operaciones atómicas.

Fuente: opennet.ru

Añadir un comentario