SevenTnewS

Gestión de Memoria

mimalloc, el pequeño caballo de batalla de Microsoft que impulsa la IA a escala sin hacer ruido

El asignador de memoria mimalloc de Microsoft Research, diseñado para alta concurrencia y grandes escalas de memoria, impulsa silenciosamente servicios de IA y cloud a gran escala. Su diseño con listas libres por hilo minimiza la contención y ofrece tanto velocidad como eficiencia de memoria.

Emmanuel Fabrice Omgbwa Yasse

2026-07-03 · 4 min de lectura

mimalloc, el pequeño caballo de batalla de Microsoft que impulsa la IA a escala sin hacer ruido

En el competitivo mundo de los asignadores de memoria, un proyecto nacido dentro de un laboratorio de Microsoft Research se ha convertido silenciosamente en un caballo de batalla, no solo para pequeños entornos de ejecución de lenguajes de programación, sino para servicios en la nube masivos. El asignador mimalloc (Microsoft malloc), un reemplazo de código abierto para malloc y free, está demostrando ser especialmente efectivo para las cargas de trabajo altamente concurrentes y hambrientas de memoria que definen la informática moderna, incluidos los grandes modelos de lenguaje (LLMs). open-by-design-ai2-brings-fully-open-ai-infrastructure-online-with-nsf-omai

Desarrollado por el grupo RiSE de Microsoft Research (MSR), mimalloc apareció por primera vez en 2020 como un asignador rápido para el teorema de demostración Lean y el lenguaje de programación Koka, ambos utilizan recuento de referencias guiado por compilador novedoso. Pero su diseño escalable, escribieron los investigadores en una publicación reciente de blog, ha funcionado extremadamente bien para grandes servicios en Microsoft, lo que ha llevado a grandes mejoras en los tiempos de respuesta para servicios como Bing, gracias a la estrecha colaboración con los equipos de producto. microsoft-research-introduces-generative-causal-testing-to-turn-black-box-ai-brain-models-into-readable-theories

Hoy en día, mimalloc se usa ampliamente tanto dentro como fuera de la empresa. Impulsa NoGIL CPython 3.13+, está integrado en Unreal Engine y juegos como Death Stranding, y reside en GitHub con más de 12.000 estrellas. Solo su envoltorio en Rust supera las 100.000 descargas por día. llms-corrupt-your-documents-when-you-delegate-a-close-look-at-the-delegate-52-benchmark

Base de Código Compacta, Invariantes Sólidas

A pesar de su amplio rango, desde pequeños compiladores hasta servicios con huellas de memoria que superan los 500 GiB y cientos de hilos, la base de código de mimalloc se mantiene compacta, alrededor de 12.000 líneas de C. El proyecto enfatiza estructuras de datos internas claras con invariantes sólidas, lo que facilita su comprensión y razonamiento en comparación con muchos asignadores de la industria. Esa claridad ha ayudado a portarlo a Windows, macOS, Linux, FreeBSD, NetBSD, DragonFly y múltiples consolas de juegos.

“Como Fred Brooks ya señaló en su famoso libro The Mythical Man-Month: ‘Muéstrame tu diagrama de flujo y oculta tus tablas, y seguiré desconcertado. Muéstrame tus tablas, y no necesitaré tu diagrama de flujo; será obvio’,” escribieron los investigadores, explicando su filosofía de diseño.

Las estructuras de datos transparentes también permitieron a Sam Gross y otros adoptar mimalloc como el asignador concurrente para NoGIL CPython, haciendo sencillo implementar la recolección de basura cíclica sobre el asignador. how-local-llms-like-gemma-and-qwen-are-taming-open-source-repository-triage-at-scale

Ruta Rápida con Sincronización Mínima

En su núcleo, mimalloc utiliza montones locales por hilo (theaps), de manera similar a otros asignadores escalables como tcmalloc y jemalloc. Cada hilo obtiene su propio montón, que posee un conjunto de páginas mimalloc (generalmente 64 KiB). Cada página contiene bloques de un tamaño fijo, ordenados en clases de tamaño para reducir la fragmentación interna. Al dar a cada hilo su propio montón y páginas, la asignación y desasignación típicamente no necesitan sincronización.

Las operaciones atómicas solo entran en juego cuando un hilo libera un bloque asignado por otro hilo. En la práctica, la mayoría de las asignaciones son diminutas, a menudo por debajo de 1 KiB, y para esas, mimalloc proporciona una ruta increíblemente rápida. La función principal de asignación se reduce a solo unas pocas instrucciones x64 con solo dos ramificaciones poco comunes.

De manera similar, mimalloc tiene una ruta rápida para liberar bloques. La mayoría de los bloques son liberados por el hilo que los asignó, y el asignador verifica si el ID del hilo actual coincide con el ID almacenado en la página correspondiente. Si es así, empuja el bloque hacia la lista libre de la página sin bloqueos ni operaciones atómicas. aleph-alpha-builds-theoretical-inference-model-for-deepseek-deriving-performance-from-hardware-primitives

Tres Listas Libres e Inspiración Aleatoria

Una idea clave en el diseño de mimalloc son sus tres listas libres por página de 64 KiB: una para asignaciones, una para bloques liberados y una para liberaciones entre hilos. Esto significa que un programa puede tener fácilmente miles de listas libres, esenciales para la escalabilidad y la localidad de caché.

Los investigadores se inspiraron en algoritmos aleatorios. “Muchos asignadores multihilados se basan en estructuras de datos concurrentes sofisticadas para sincronizar el acceso a listas libres compartidas. En contraste, mimalloc usa una lista libre por hilo por página, donde cualquier hilo puede empujar un bloque usando un simple compare-and-swap atómico,” escribieron. “Debido a que hay miles de tales listas, la probabilidad de que múltiples hilos liberen bloques concurrentemente a la misma página es baja. Como resultado, la mayoría de las operaciones de empuje son actualizaciones atómicas sin contención.”

Equilibrando Escalabilidad y Eficiencia de Memoria

El diseño aborda una tensión fundamental: dar a cada hilo propiedad exclusiva minimiza la sincronización pero puede desperdiciar memoria. En el otro extremo, compartir todas las páginas globalmente con un solo bloqueo optimiza el uso de memoria pero mata la escalabilidad.

Los resultados de los puntos de referencia ilustran el compromiso. El asignador estándar del sistema mostró una excelente eficiencia de memoria (1.1x memoria comprometida versus datos vivos) pero asignó solo 56 GiB durante el período de referencia. Otro asignador altamente concurrente asignó 262 GiB pero comprometió cuatro veces más memoria que los datos vivos, una relación que se vuelve inaceptable para huellas grandes.

“El gráfico final muestra el asignador mimalloc más reciente. Como el segundo asignador, asigna 262 GiB durante la duración de la referencia, mientras reduce la memoria comprometida a 1.3x los datos vivos, lo que logra escalabilidad y uso eficiente de memoria entre hilos,” señalaron los investigadores.

Esa mejora provino de una técnica de “robo de página” que permite a los hilos tomar posesión de páginas sin costosa sincronización entre hilos, desarrollada en estrecha colaboración con el equipo de Azure Cosmos DB en Microsoft. El equipo dice que publicará un informe técnico sobre estas mejoras pronto. microsoft-open-sources-data-formulator-07-for-enterprise-ai-analytics