Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Microsoft publie Mimalloc, un allocateur de mémoire moderne, qui offrirait d'excellentes performances
Par rapport à ses concurrents

Le , par Bill Fassinou

222PARTAGES

7  0 
La semaine passée, Microsoft a présenté un nouvel allocateur de mémoire qu’il a appelé Mimalloc. D’après Microsoft, Mimalloc combine plusieurs innovations pour atteindre un résultat bien défini. D'abord, ça utilise trois listes libérées fragmentées en pages locales pour augmenter la localité, éviter les conflits et prendre en charge un raccourci hautement optimisé, alloué et libéré. Mimalloc est un allocateur à usage général doté d'excellentes caractéristiques et performance. Il est initialement développé pour les systèmes d’exécution des langages Koka et Lean et actuellement disponible sous licence MIT.

D’après Microsoft, les allocateurs de mémoire modernes doivent concilier de nombreuses demandes simultanées, notamment des performances, la sécurité, la présence de la simultanéité et des demandes spécifiques à une application, en fonction du contexte d'utilisation. Un cas d'utilisation croissant pour les allocateurs est l'implémentation finale de langages, tels que Swift et Python, qui utilisent le comptage de références pour désallouer automatiquement des objets. Selon la firme, Mimalloc est un allocateur qui répond à ces caractéristiques.

L’entreprise a expliqué que Mimalloc est un allocateur de mémoire qui équilibre efficacement ces demandes, présente des avantages de performances significatifs par rapport aux allocateurs existants et est conçu pour prendre en charge les langages qui utilisent l’allocateur de mémoire comme base pour le comptage des références. Mimalloc combine plusieurs innovations pour atteindre ce résultat. Il utilise trois listes libérées fragmentées en pages locales pour augmenter la localité, éviter les conflits et prendre en charge un raccourci hautement optimisé, alloué et libéré.

Mimalloc est conçu pour être utilisé dans des applications types sans modifier leur code et peut remplacer de manière transparente la fonction malloc. Les supports fonctionnent sous Windows, Mac OS, Linux, BSD et autres systèmes de type Unix. Une caractéristique essentielle de Mimalloc est la compacité de son implémentation (moins de 3 500 lignes de code) et ses performances très élevées. Dans les tests effectués, Mimalloc semble avoir surperformé toutes les bibliothèques d'allocation de mémoire concurrentes, y compris jemalloc, tcmalloc, snmalloc, rpmalloc et Hoard.


Pour évaluer les performances, un ensemble de tests de type déjà existants a été utilisé. Dans certains tests, Mimalloc a devancé plusieurs fois les systèmes, par exemple dans le test de migration d'objet entre différents flux, Mimalloc était plus rapide que tcmalloc et jemalloc de plus de 2,5 fois. En même temps, dans la majorité des tests, une consommation de mémoire inférieure est également observée. Dans certaines situations, il est possible de réduire la consommation de mémoire de 25 %.

Dans le pire des cas, la consommation de mémoire augmente de 0,2 % pour les métadonnées et peut atteindre 16,7 % pour la mémoire allouée. Parmi les nombreuses caractéristiques citées à Mimalloc, celles-ci sont mises en avant :

  • petite et cohérente : la bibliothèque a moins de 3 500 lignes de code, utilisant des structures de données simples et cohérentes. Cela le rend très approprié pour intégrer et s’adapter à d’autres projets. Pour les systèmes d'exécution, il fournit des points d'ancrage pour une pulsation monotone et une libération différée (pour les temps limites liés avec le comptage de références) ;
  • partage de liste libre : la grande idée, au lieu d'une grande liste libre (par classe de taille), Mimalloc utilise beaucoup de listes plus petites par mémoire “page”, ce qui réduit la fragmentation et augmente la localité. Une “page” mémoire dans Mimalloc contient des blocs d'une classe de taille et correspond généralement à 64 Ko sur un système 64 bits ;
  • page précédente : lorsqu’une “page” devient vide (avec des chances accrues en raison du partage de liste libre), la mémoire est marquée sur le système d’exploitation comme inutilisée (“réinitialisée” ou “purgée”), réduisant ainsi la pression (réelle) de la mémoire et la fragmentation, en particulier dans programmes de longue durée ;
  • sécurisé : Mimalloc peut être construit en mode sécurisé, en ajoutant des pages de garde, des allocations aléatoires, des listes libres chiffrées, etc. pour se protéger contre diverses vulnérabilités de tas. La pénalité de performance n’est que d’environ 3 % en moyenne par rapport aux repères ;
  • des tas de première classe : créez et utilisez efficacement plusieurs tas à allouer dans différentes régions. Un tas peut être détruit en une fois au lieu de libérer chaque objet séparément ;
  • borné : il ne souffre pas de gonflement. Il borne les durées d'allocation dans le cas le plus défavorable (wcat), la surcharge d'espace délimité (environ 0,2 % de métadonnées, avec au plus 16,7 % de perte dans les tailles d'allocation) et n'a pas de points internes de conflit utilisant uniquement des opérations atomiques ;
  • rapide : dans les tests, Mimalloc surpasse toujours tous les autres principaux allocateurs (jemalloc, tcmalloc, Hoard, etc.) et utilise généralement moins de mémoire (jusqu'à 25 % de plus dans le pire des cas). Une belle propriété est qu’elle réussit toujours bien sur un large éventail de points de repère.

Sources : Mimalloc, Microsoft

Et vous ?

Qu'en pensez-vous ?

Voir aussi

Avec .NET 5, Microsoft voudrait produire un environnement d'exécution .NET unique et une infrastructure utilisable partout

L'équipe de Rust dévoile la version 1.32.0 du langage de programmation, l'allocateur de mémoire est supprimé par défaut

Microsoft fait l'acquisition de Citus Data l'extension qui transforme PostgreSQL en une base de données distribuée

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de conscofd
Nouveau membre du Club https://www.developpez.com
Le 24/06/2019 à 12:17
..., je vais vous prescrire du Mimalloc. 3 gélules / jour à prendre pendant 4 jours et à distance des repas...
3  0