[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