[SOS]Multi Threads et Allocation memoire...

Romain LABBE labbe.romain at wanadoo.fr
Ven 18 Nov 10:07:21 CET 2005


Salut,

Parfait !
A la vitesse de la lumiere en plus...
Merci Thomas d'avoir pris le temps de regarder dans le noyau linux ! 
Tres sympa d'aider les djeun's...

A++

Romain

> -----Message d'origine-----
> De : sos-bounces at the-doors.enix.org 
> [mailto:sos-bounces at the-doors.enix.org] De la part de Thomas Petazzoni
> Envoyé : vendredi 18 novembre 2005 10:01
> À : SOS mailing-list
> Objet : Re: RE : [SOS]Multi Threads et Allocation memoire...
> 
> 
> Salut,
> 
> Romain LABBE wrote:
> 
> > Cela repond en partie à ma question, mais du coup il faut donc bien 
> > protéger l'allocateur de memoire virtuelle.
> 
> Oui, si tu préemptes quand un processus est en mode noyau, 
> non dans le cas contraire.
> 
> > Par exemple dans Linux 2.6 pour protéger le kVmm on utilise 
> quoi ? Un 
> > semaphore ? On désative les interruptions lors de 
> l'allocation ? Autre 
> > ?
> 
> J'ai regardé (très) rapidement. Dans Linux 2.6, la fonction
> __cache_alloc() [1] (appelée par kmem_cache_alloc()) fait la 
> chose suivante:
> 
>  - désactive les interruptions sur le processeur courant
> 
>  - regarde dans un tableau local au processeur courant si il 
> y a des slots de mémoire disponible
> 
>  - si oui, il les prend, réactive les interruptions et sort.
> 
>  - sinon, il appelle cache_alloc_refill(), qui lui prend un 
> spinlock spécifique au cache (cachep->spinlock), car il va 
> falloir faire des modifications visibles par tous les CPUs.
> 
> Voilà, donc dans Linux, c'est un peu optimisé pour le 
> multi-processeur: afin d'éviter une contention trop forte sur 
> le spinlock
> cachep->spinlock, ils ont un petit ensemble de slots par processeur
> auquel ils peuvent accéder sans prendre de spinlock global à 
> tous les processeurs.
> 
> Bonne journée,
> 
> Thomas
> 
> [1] http://lxr.linux.no/source/mm/slab.c#L2135
> [2] http://lxr.linux.no/source/mm/slab.c#L1983
> -- 
> Thomas Petazzoni
> thomas.petazzoni at enix.org
> 
> _______________________________________________
> Sos mailing list
> Sos at the-doors.enix.org 
> http://the-doors.enix.org/cgi-> bin/mailman/listinfo/sos
> 




Plus d'informations sur la liste de diffusion Sos