RE : RE : RE : [SOS] phénomène étrange dans mon scheduler tous simple...
Romain LABBE
labbe.romain at wanadoo.fr
Mar 22 Nov 14:04:17 CET 2005
Salut Daniel,
Parfaite cette explication, tres simple tres clair.
Je vois un peu mieux ou situer ces caches dans la pyramide.
Est-ce que tu aurais un ordre de grandeur du nombre de threads (si
simple) qu'il est possible de faire tourner sur un OS standard ou sur
SOS ?
Merci pour ces explications.
Romain
> -----Message d'origine-----
> De : sos-bounces at the-doors.enix.org
> [mailto:sos-bounces at the-doors.enix.org] De la part de Daniel Lezcano
> Envoyé : mardi 22 novembre 2005 11:34
> À : SOS mailing-list
> Objet : Re: RE : RE : [SOS] phénomène étrange dans mon
> scheduler tous simple...
>
>
> Romain LABBE wrote:
>
> >Salutc Daniel,
> >
> >1000 Merci our ta reponce...
> >
> >Je ne sais pas vraiement ce que c'est ce probléme de cache,
> Apparament
> >ce serait ce que David m'expliquait juste avant... Ca ca à pas l'air
> >facile à debbuger....arf...
> >
> >
> Le processeur accede aux informations de la memoire en essayant
> successivement de trouver l'information dans differents
> "etages" de memoires. Tu trouves 2 etages avant la memoire, appeles
> "cache" de premier et de second niveau.
> Le cache de premier niveau est integre au processeur, c'est ce qu'on
> appelle le "L1 cache". En general, la taille varie selon les
> processeur de 128Ko a 512Ko, c'est notamment l'une des
> differences entre
> les P4 et les Celerons.
> Le cache de second niveau est integre a la carte mere, c'est ce qu'on
> appelle le "L2 cache". La taille varie de 2Mo a 8 Mo voire
> 16 Mo.
>
> Lorsqu'une donnee est accedee a la memoire, elle est
> sauvegardee dans le
> cache L2 puis dans le cache L1, quand le processeur accede
> a nouveau a cette donnee, il va regarder si elle est dans le
> cache L1,
> si elle n'est pas trouvee, il regarde dans le cache L2 puis
> dans la memoire. Dans un programme, si tu as une boucle qui
> accede a des donnees en
> memoire, elles finissent dans le cache.
>
> Le cache L1 est tres rapide mais tres cher donc il y en a pas
> beaucoup,
> le cache L2 est un peu moins rapide mais beaucoup plus rapide
> que la memoire mais reste aussi chere, etc... Le resultat,
> c'est que en general le calcul de la taille du cache permet
> d'avoir 98 % de chance d'avoir les donnees accedees en
> memoire dans le
> cache.
> Derriere tout ca, il y a une puce qui calcul les statistiques sur les
> acces en memoire et qui garde les donnees les plus souvent
> accedees dans
> le cache.
>
> Sans cache, les perfs des processeurs seraient 10 a 50 fois
> inferieurs a
> ce qui tu peux avoir avec.
>
> Pour en revenir a ton probleme, il y a des applications qui ont une
> maniere d'acceder a la memoire qui fait que les donnees sont toujours
> degagees du
> cache. Par exemple tu as un thread avec une boucle qui lit 2 Mo en
> memoire. Tout va bien, ca speede, c'est genial.
> Sur ce, tu decides de creer un autre thread qui fait la meme
> chose mais
> qui lit 2 Mo mais ailleurs que le precedent thread. A chaque
> scheduling,
> ton
> thread va recharger le cache avec ses donnees en expulsant celles du
> thread precedent.
>
> Y'a qu'un moyen de verifier cela, c'est d'instrumenter ton
> appli et de
> recuperer les statistiques de la puce. Il y a une valeur qui
> s'appelle
> "cache miss",
> si elle augmente lorsque tu augmentes le nombre de threads
> alors c'est
> un probleme de cache.
>
> Cependant, je ne pense pas que ce soit le probleme de ton appli...
>
> ps : aujourd'hui il existe un cache double: un pour les donnees et un
> pour les instructions.
>
> - Daniel
>
>
> _______________________________________________
> 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