+38/050/370-3627
+38/093/220-0872
+38/044/257-2444
Новини

Miсrosoft відкрила під ліцензією MIT бібліотеку mimalloc з реалізацій системи розподілу пам'яті

Miсrosoft відкрила під ліцензією MIT бібліотеку mimalloc з реалізацій системи розподілу пам'яті

Miсrosoft відкрила під ліцензією MIT бібліотеку mimalloc з реалізацій системи розподілу пам'яті, спочатку створеної для runtime-компонентів мов Koka і Lean. Mimalloc адаптований для використання в типових додатках без зміни їх коду і може бути прозорою заміною функції malloc. Підтримується робота у Windows, macOS, Linux, BSD та інших Unix-подібних системах.

Ключовою особливістю mimalloc є компактність реалізації (менше ніж 3500 рядків коду) і дуже висока продуктивність. У проведених тестах mimalloc обігнав за продуктивністю всі конкуруючі бібліотеки розподілу пам'яті, включаючи jemalloc, tcmalloc, snmalloc, rpmalloc та Hoard.

Для оцінки продуктивності використаний набір вже існуючих типових тестів У деяких тестах mimalloc випереджає інші системи в рази, наприклад, у тесті міграції об'єктів між різними потоками mimalloc виявився швидше tcmalloc і jemalloc більш ніж у 2.5 рази. При цьому у більшості тестів також спостерігається нижче споживання пам'яті, в деяких ситуаціях витрата пам'яті вдається знизити на 25%.

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

Бібліотеку можна підключити на етапі зв'язування або підвантажити для вже зібраної програми ("LD_PRELOAD=/usr/lib/libmimalloc.so myprogram"). У бібліотеці також надається API для інтеграції функціональності в runtime і тонкого управління поведінкою, наприклад, для підключення обробників відкладеного звільнення пам'яті і монотонного збільшення лічильників посилань. Є можливість створення та використання у додатку кількох "куп" (heap) для розподілу по різних областях пам'яті. У тому числі можливе звільнення купи цілком, без перебору та окремого звільнення розміщених у ній об'єктів.

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

З особливостей mimalloc також відзначається не схильність до проблем з роздуттям при великій фрагментації. У найгіршому сценарії споживання пам'яті зростає на 0.2% для метаданих і може досягати 16.7% для пам'яті, що розподіляється. Для унеможливлення конфліктів при доступі до ресурсів в мімольок застосовуються тільки атомарні операції.

Інші новини

Найкраща ціна