Multisegment de mémoire malloc
Par défaut, le sous-système malloc utilise un segment de mémoire unique ou un pool de mémoire libre.
Cependant, il fournit également une fonction multisegment de mémoire facultative pour permettre l'utilisation de plusieurs segments de mémoire libres, plutôt que d'un seul.
L'objectif de la fonction de segments de mémoire multiples dans le sous-système malloc est d'améliorer les performances des applications à unités d'exécution s'exécutant sur des systèmes multiprocesseurs. Lorsque le sous-système malloc est limité à l'utilisation d'un segment de mémoire unique, les demandes d'allocation de mémoire simultanées reçues des unités d'exécution s'exécutant sur des processeurs distincts sont sérialisées. Le sous-système malloc ne peut donc traiter qu'une seule unité d'exécution à la fois, ce qui a un impact grave sur les performances du système multiprocesseur.
Lorsque la fonction multisegment de mémoire malloc est activée, le sous-système malloc crée un nombre fixe de segments de mémoire pour son utilisation. Il commencera à utiliser plusieurs segments de mémoire après le démarrage de la deuxième unité d'exécution (le processus devient multiprocessus). Chaque demande d'allocation de mémoire sera traitée à l'aide de l'un des segments de mémoire disponibles. Le sous-système malloc peut alors traiter les demandes d'allocation de mémoire en parallèle, à condition que le nombre d'unités d'exécution demandant simultanément le service soit inférieur ou égal au nombre de segments de mémoire.
Si le nombre d'unités d'exécution demandant simultanément le service dépasse le nombre de segments de mémoire, les demandes simultanées supplémentaires seront sérialisées. A moins que cela ne se produise de façon continue, les performances globales du sous-système malloc doivent être considérablement améliorées lorsque plusieurs unités d'exécution effectuent des appels à la sous-routine malloc dans un environnement multiprocesseur.
Activation du multisegment de mémoire malloc
Malloc multiheap n'est pas activé par défaut. Il est activé et configuré en définissant la variable d'environnement MALLOCOPTIONS . Pour activer le multisegment de mémoire malloc avec les paramètres par défaut, définissez MALLOCOPTIONS=multiheap avant le démarrage du processus. La définition de MALLOCOPTIONS de cette manière active le multisegment de mémoire malloc dans sa configuration par défaut, avec 32 segments de mémoire et l'algorithme de sélection de segment de mémoire rapide.
Options multisegment de mémoire malloc
Les options Malloc Multiheap sont les suivantes:
- multisegment de mémoire: n
- considersize
Chacune de ces options est décrite en détail plus loin dans ce document.
Pour définir l'une de ces options, utilisez la syntaxe suivante:
MALLOCOPTIONS=[multiheap:n] | [considersize]Une ou les deux options peuvent être spécifiées dans n'importe quel ordre, à condition que les options soient séparées par des virgules, comme dans l'exemple suivant:
MALLOCOPTIONS=multiheap:3,considersizeDans l'exemple précédent, le multisegment de mémoire malloc serait activé avec trois segments de mémoire et un algorithme de sélection de segment de mémoire un peu plus lent qui tente de réduire la taille du processus.
Chaque option de configuration ne doit être spécifiée qu'une seule fois lors de la définition de MALLOCOPTIONS. Si une option de configuration est spécifiée plusieurs fois par paramètre, seule l'instance finale s'applique.
Les options de multisegment de mémoire Malloc sont décrites comme suit:
- multisegment de mémoire: n
- Par défaut, le nombre maximal de segments de mémoire disponibles pour le multisegment de mémoire malloc est 32. L'option multiheap: n peut être utilisée pour remplacer le nombre maximal de segments de mémoire par une valeur comprise entre 1 et 32, où n correspond au nombre de segments de mémoire. Si n est défini sur une valeur en dehors de la plage donnée, la valeur par défaut 32 est utilisée. Activez uniquement autant de segments de mémoire que nécessaire pour les exigences du processus. Les segments de mémoire inutilement activés peuvent augmenter la quantité de fragmentation et de déchets.
- considersize
- Par défaut, le segment de mémoire multisegment malloc sélectionne le segment de mémoire disponible suivant. Si l'option considersize est spécifiée, malloc multiheap utilisera un autre algorithme de sélection de segment de mémoire qui tente de sélectionner un segment de mémoire disponible ayant suffisamment d'espace disponible pour traiter la demande. Cela peut réduire la taille de la partie active du processus en réduisant le nombre d'appels de sous-routine sbrk . Toutefois, en raison du traitement supplémentaire requis, l'algorithme de sélection de segment de mémoire considersize est un peu plus lent que l'algorithme de sélection de segment de mémoire par défaut.
Si les segments de mémoire ne parviennent pas à allouer de l'espace, la sous-routine malloc renvoie NULL et définit errno sur ENOMEM. S'il n'y a pas de mémoire disponible dans le segment de mémoire en cours, le sous-système malloc recherche l'espace disponible dans les autres segments de mémoire.