[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