Microsoft mimalloc жад бөлу жүйесінің кодын ашты

Microsoft MIT лицензиясы бойынша кітапхана ашты mmalloc бастапқыда тілдердің орындалу уақыты құрамдастары үшін жасалған жадты бөлу жүйесін іске асырудан Кока и Сүйену. Mimalloc стандартты қолданбаларда олардың кодын өзгертпестен пайдалануға бейімделген және malloc функциясын мөлдір ауыстыру ретінде әрекет ете алады. Windows, macOS, Linux, BSD және басқа Unix тәрізді жүйелерде жұмысты қолдайды.

Mimalloc-тың негізгі ерекшелігі - оның ықшам орындалуы (3500 код жолынан аз) және өте жоғары өнімділік. IN жүргізілген сынақтар mimalloc барлық бәсекелес жад бөлу кітапханаларынан асып түсті, соның ішінде jemalloc, tcmalloc, snmalloc, rpmalloc и Хард.

Өнімділікті бағалау үшін бар жиынтығы стандартты сынақтар Кейбір сынақтарда mimalloc басқа жүйелерге қарағанда бірнеше есе жылдамырақ; мысалы, әртүрлі ағындар арасындағы нысанды тасымалдау сынағы кезінде mimalloc tcmalloc және jemalloc-қа қарағанда 2.5 есе жылдамырақ болды. Сонымен қатар, көптеген сынақтарда жадты аз тұтыну да байқалады, кейбір жағдайларда жадты тұтынуды 25% азайтуға болады.

Microsoft mimalloc жад бөлу жүйесінің кодын ашты

Жоғары өнімділікке негізінен тегін тізімді бөлуді пайдалану арқылы қол жеткізіледі. Бір үлкен тізімнің орнына mimalloc әрқайсысы жад бетіне байланыстырылған кішірек тізімдер қатарын пайдаланады. Бұл тәсіл фрагментацияны азайтады және жадтағы деректердің орналасуын арттырады. Жад беті - өлшемдері ұқсас блоктардың топтастырылған жиыны. 64 биттік жүйелерде бет өлшемі әдетте 64 КБ болады. Егер бетте бос тұрған блоктар қалмаса, ол толығымен босатылады және жад операциялық жүйеге қайтарылады, бұл жад шығындарын және ұзақ жұмыс істейтін бағдарламаларда фрагментацияны азайтады.

Кітапхананы байланыстыру сатысында қосуға немесе әлдеқашан жиналған бағдарламаға («LD_PRELOAD=/usr/bin/libmimalloc.so myprogram») жүктеуге болады. Кітапхана да қамтамасыз етеді API функционалдылықты орындау уақытына және нақты әрекетті басқаруға біріктіру үшін, мысалы, жалқау жад шығару өңдегіштерін және монотонды түрде өсетін анықтамалық есептегіштерді қосу үшін. Әртүрлі жад аумақтары бойынша тарату үшін қолданбада бірнеше «үймелерді» жасауға және пайдалануға болады. Сондай-ақ, үйіндіні толығымен босатуға болады, оған орналастырылған нысандарды өткізбей және бөлек босатуға болады.

Кітапхананы қауіпсіз режимде құруға болады, онда блок шекараларында жадты тексерудің арнайы беттері (қорғау беттері) ауыстырылады, блоктарды бөлудің рандомизациясы және босатылған блоктардың тізімдерін шифрлау қолданылады. Мұндай шаралар үймеге негізделген буфердің толып кетуін пайдаланудың ең көп таралған әдістерін блоктауға мүмкіндік береді. Қауіпсіз режимді қосқанда өнімділік шамамен 3%-ға төмендейді.

Мималлоктың ерекшеліктерінің арасында үлкен фрагментацияға байланысты ісіну проблемаларына сезімтал еместігі де атап өтіледі. Ең нашар жағдайда жадты тұтыну метадеректер үшін 0.2%-ға артады және бөлінген жад үшін 16.7%-ға жетуі мүмкін. Ресурстарға қатынасу кезінде қақтығыстарды болдырмау үшін mimalloc тек атомдық операцияларды пайдаланады.

Ақпарат көзі: opennet.ru

пікір қалдыру