Перший стабільний реліз компонувальника Mold, що розвивається розробником LLVM lld

Rui Ueyama, автор компонувальника LLVM lld та компілятора chibicc, представив перший стабільний реліз нового високопродуктивного компонувальника Mold, що помітно випереджає за швидкістю зв'язування об'єктних файлів компонувальники GNU gold і LLVM lld. Проект визнаний готовим для робочих впроваджень і може застосовуватися як швидша прозора заміна GNU linker на Linux-системах. З планів наступного значного випуску відзначається доведення до готовності підтримки платформи macOS, після чого почнеться робота з адаптації Mold для Windows.

Mold написаний мовою С++ (C++20) і розповсюджується під ліцензією AGPLv3, яка сумісна з GPLv3, але не сумісна з GPLv2, оскільки вимагає відкриття змін розробки мережевих сервісів. Подібний вибір пояснюється бажанням отримати фінансування розробки — автор готовий продати права на код для переліцензування під дозвільною ліцензією, як-от MIT, або надати окрему комерційну ліцензію для тих, кого не влаштовує AGPL.

Mold підтримує всі можливості GNU linker і відрізняється дуже високою продуктивністю - компонування виконується зі швидкістю, всього вдвічі повільніше простого копіювання файлів утилітою cp. Наприклад, при складанні Chrome 96 (розміром коду 1.89 ГБ) на компонування виконуваних файлів c debuginfo на 8-ядерному комп'ютері при використанні GNU gold витрачається 53 секунди, LLVM lld - 11.7 секунд, а Mold всього 2.2 секунди (у 26 разів швидше за GNU . При компонуванні Clang 13 (3.18 ГБ) у GNU gold потрібно 64 секунди, у LLVM lld - 5.8 секунд, а в Mold - 2.9 секунди. При компонуванні Firefox 89 (1.64 ГБ) у GNU gold необхідно 32.9 секунд, у LLVM lld - 6.8 секунд, а в Mold - 1.4 секунди.

Перший стабільний реліз компонувальника Mold, що розвивається розробником LLVM lld

Скорочення часу на компонування дозволяє значно підвищити зручність розробки великих проектів за рахунок скорочення очікування в процесі формування файлів, що виконуються при налагодженні і тестування змін. Мотивом до створення Mold стало роздратування від необхідності чекати завершення компонування після кожного внесення зміни до коду, а також низька ефективність роботи існуючих компонувальників на багатоядерних системах та бажання випробувати принципово іншу архітектуру компонування, не вдаючись при цьому до надмірно ускладнених моделей, таких як інкрементальна компонування.

Висока продуктивність компонування виконуваного файлу з великої кількості підготовлених компілятором об'єктних файлів Mold досягається використанням більш швидких алгоритмів, активним розпаралелювання операцій між доступними ядрам CPU і застосуванням більш ефективних структур даних. Наприклад, в Mold реалізована техніка виконання інтенсивних обчислень одночасно з копіюванням файлів, запобігає завантаження об'єктних файлів у пам'ять, використання швидких хеш-таблиць при роздільній здатності символів, сканування таблиць переміщень в окремому потоці і дедуплікація секцій, що повторюються в різних файлах.

Джерело: opennet.ru

Додати коментар або відгук