The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Miсrosoft открыл код системы распределения памяти mimalloc"
Отправлено opennews, 23-Июн-19 10:07 
Компания Miсrosoft открыла под лицензией MIT библиотеку mimalloc (https://github.com/microsoft/mimalloc) с реализаций системы распределения памяти, изначально созданной для runtime-компонентов языков Koka (https://github.com/koka-lang/koka) и Lean (https://github.com/leanprover/lean). Mimalloc адаптирован для использования в типовых приложениях без изменения их кода и может выступать в качестве прозрачной замены функции malloc. Поддерживается работа в Windows,  macOS, Linux, BSD и других Unix-подобных системах.


Ключевой особенностью mimalloc является компактность реализации (менее, чем 3500 строк кода) и очень высокая производительность. В проведённых тестах (https://github.com/microsoft/mimalloc#performance) mimalloc обогнал по производительности все конкурирующие библиотеки распределения памяти, включая jemalloc (https://github.com/jemalloc/jemalloc), tcmalloc (https://github.com/gperftools/gperftools), snmalloc (https://github.com/microsoft/snmalloc), rpmalloc (https://github.com/rampantpixels/rpmalloc) и Hoard (https://github.com/emeryberger/Hoard).


Для оценки производительности использован набор уже существующих  типовых тестов (https://github.com/daanx/mimalloc-bench) В некоторых тестах mimalloc опережает другие системы в разы, например, в тесте миграции объектов между разными потоками  mimalloc оказался быстрее tcmalloc и jemalloc более чем в 2.5 раза. При этом в большинстве тестов также наблюдается более низкое потребления памяти, в некоторых ситуациях расход памяти удаётся снизить на 25%.


Высокая производительность достигается в основном за счёт применения сегментирования списка свободных блоков (free list sharding). Вместо одного большого списка в  mimalloc применяется разделение на серию более мелких списков,  каждый из которых привязывается к странице памяти. Подобный подход снижает фрагментацию и повышает локализацию данных в памяти. Под страницей памяти понимается сгруппированный набор близких по размеру блоков. На 64-разрядных системах размер страницы обычно составляет 64 КБ. В случае, если в странице не остаётся занятых блоков, она полностью освобождается с возвращением памяти операционной системе, что позволяет снизить затраты памяти и фрагментацию  в длительно работающих программах.


Библиотеку можно подключить на этапе связывания или подгрузить для уже собранной программы ("LD_PRELOAD=/usr/bin/libmimalloc.so  myprogram"). В библиотеке также предоставляется API (https://microsoft.github.io/mimalloc/group__extended.html) для интеграции функциональности в runtime и тонкого управления поведением, например, для подключения обработчиков  отложенного освобождения памяти и монотонного увеличения счётчиков ссылок. Имеется возможность создания и использования в приложении нескольких "куч" (heap) для распределения по разным областям памяти. В том числе возможно освобождение кучи целиком, без перебора и отдельного освобождения размещённых в ней объектов.

Предусмотрена возможность сборки библиотеки в безопасном режиме, в котором на границе блоков осуществляется подстановка специальных проверочных страниц памяти (guard-page), а также используется рандомизация распределения блоков и шифрование списков освобождаемых блоков. Подобные меры позволяют блокировать большинство типовых техник эксплуатации переполнений буферов в куче. При включение безопасного режима производительность снижается примерно на 3%.

Из особенностей mimalloc также отмечается не подверженность проблемам с раздутием  при большой фрагментации. В наихудшем сценарии потребление памяти возрастает на 0.2% для метаданных и может достигать 16.7% для распределяемой памяти. Для исключения конфликтов при доступе к ресурсам в mimalloc применяются только атомарные операции.

URL: https://news.ycombinator.com/item?id=20249743
Новость: https://www.opennet.ru/opennews/art.shtml?num=50939

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру