[Kos-dev] Semaphores sous Linux

David Decotigny david.decotigny at free.fr
Thu Jun 24 12:02:22 CEST 2004


Thomas Petazzoni wrote:
> Quel est l'intérêt de procéder comme ça ? C'est pour limiterla surcharge

J'en avais pas la moindre idee jusqu'a ce que tu ecrives :

> Éviter un branchement pour ne pas
> vider le pipeline ?

Ca parait etre un argument sympathique, mais je pense pas que ce soit ça.

Parce que sans section additionnelle, ça donnerait "naïvement" :

   jnz 2f
   1:
     /* pas de contention */
     jmp 3f
   2:
     down_write_failed
   3:
     ...

Donc dans le cas "pas de contention", par rapport a la version linux et 
ses sections, y'a effectivement un saut "jmp 3f". MAIS ce saut n'a 
aucune raison de vider le pipeline, puisque ce n'est PAS un saut 
conditionnel.

Et puis quand bien meme on aurait voulu eviter cette simple instruction 
(qui n'implique pas le vidage du pipeline, donc), on aurait pu le faire 
sans en passer par des sections a l'autre bout du code :

   jz 1f
     down_write_failed
   1:
     ...

En fait, je verrais une autre explication : le cache d'instructions. Car 
dans le cas ou il n'y a pas de contention, avec la solution linux, on 
passe a l'instruction suivante qui est juste apres le "jnz" en termes 
d'adresses, c'est-a-dire que le cache n'est pas polue avec les 
instructions du cas "avec contenition" qui ne sont pas executees en 
l'absence de contention.

Bonne journée,

-- 
David Decotigny -- http://david.decotigny.free.fr


More information about the Kos-dev mailing list