Aivizor
Aivizor
СкиныКреативыСообщество
Назад
  1. Сообщество
  2. /
  3. Microsoft

mimalloc ускоряет и масштабирует выделение памяти для многопоточных сервисов и крупных моделей

Новость
М
Марина Ковалева
Редактор общего направления

5/14/2026, 1:14:46 AM

mimalloc ускоряет и масштабирует выделение памяти для многопоточных сервисов и крупных моделей

mimalloc — открытый высокопроизводительный аллокатор памяти, совместимый как drop‑in с malloc/free. Код компактный (~12K строк на C), проект на GitHub набрал более 12K звёзд.

mimalloc — открытый высокопроизводительный аллокатор памяти, предназначенный для ускорения и масштабирования выделения памяти в многопоточных службах и при работе с крупными моделями. Главные преимущества: ограниченные худшие времена выделения (bounded worst‑case allocation times — вплоть до примитивов ОС), низкая накладная по использованию памяти и минимальные задержки из‑за конкуренции, что критично для систем с сотнями параллельных потоков и большими рабочими наборами данных.

Проект размещён на GitHub и собрал более 12K звёзд; кодовая база относительно компактна — порядка 12K строк на C. mimalloc совместим как drop‑in с привычными malloc/free, что облегчает интеграцию в существующие проекты. Аллокатор портирован на Windows, macOS, Linux, FreeBSD, NetBSD, DragonFly и игровые приставки; его Rust‑обёртка скачивается свыше 100K раз в день, что отражает широкое практическое применение и быструю интеграцию. Архитектура опирается на локальные кучи потоков — theap: каждая theap владеет страницами обычно по 64 KiB, страницы разбиты на блоки фиксированного размера и организованы в size‑классы. Такой подход, близкий по идеям к tcmalloc и jemalloc, позволяет в большинстве случаев выполнять выделения и освобождения без глобальной синхронизации между потоками, снижая конкуренцию и задержки.

Для уменьшения конфликтов mimalloc делает акцент на атомарных операциях и жёстких инвариантах внутренних структур, что упрощает анализ и встраивание. Код явно структурирован, что помогает сохранять предсказуемость поведения под нагрузкой и ограничивать внутреннюю фрагментацию при крупных отпечатках памяти. Для частых малых аллокаций (обычно < 1 KiB) реализован «быстрый путь»: основной вызов mi_malloc получает thread‑local theap, проверяет порог MI_MAX_SMALL_SIZE, выбирает подходящую страницу и связанный список свободных блоков; только при больших запросах или исчерпании локального пула переключается медленный универсальный путь. Это снижает расходы на частые мелкие выделения и повышает производительность в реальных нагрузках.

mimalloc уже применялся в разных проектах и продуктах: он используется в сборке NoGIL CPython 3.13+ как аллокатор, встроен в Unreal Engine, применялся в игровых проектах вроде Death Stranding и помогал снижать времена отклика в крупных службах, включая Bing. В практических испытаниях аллокатор показал эффективность при отпечатках памяти свыше 500 GiB и при сотнях одновременно работающих потоков.

Источники

  1. Microsoft Research Blog · 5/13/2026
2
0
0

Ответы (0)

Пока нет ответов в этой теме.

9:41