Manuel de suivi dynamique Solaris

Sondes de verrou de rotation

Les threads ne peuvent pas bloquer dans certaines situations dans le noyau, comme en cas d'interruption à niveau élevé et tout autre cas de manipulation d'état de dispatcheur. Dans ces cas, cette restriction empêche l'utilisation de verrous adaptatifs. Les verrous de rotation sont plutôt utilisés, dans ces situations, pour effectuer une exclusion mutuelle dans des sections critiques. Comme leur nom l'indique, le comportement de ces verrous en cas de contention consiste à effectuer une rotation jusqu'à ce que le verrou soit libéré par le thread propriétaire. Les trois sondes appartenant aux verrouillages de rotation sont répertoriées dans le Tableau 18–2.

Tableau 18–2 Sondes de verrou de rotation

spin-acquire

Sonde d'événement de maintien se déclenchant immédiatement après l'acquisition d'un verrou de rotation. 

spin-spin

Sonde d'événement de contention se déclenchant après qu'un thread qui a effectué une rotation sur un verrou de rotation maintenu a acquis le verrou de rotation. Si les deux sondes sont activées, spin-spin se déclenche avant spin-acquire. arg1 pour spin-spin contient la durée de rotation : le nombre de nanosecondes effectuées en état de rotation avant l'acquisition du verrouillage. Le nombre de rotations n'est pas significatif en lui-même, mais il permet de comparer les durées de rotation.

spin-release

Sonde d'événement de maintien se déclenchant immédiatement après la libération d'un verrou de rotation. 

Les verrous adaptatifs sont bien plus fréquents que les verrous de rotation. Le script suivant affiche les totaux des deux types de verrou, proposant ainsi des données d'observation.

lockstat:::adaptive-acquire
/execname == "date"/
{
	@locks["adaptive"] = count();
}

lockstat:::spin-acquire
/execname == "date"/
{
	@locks["spin"] = count();
}

Exécutez ce script dans une fenêtre et une commande date(1) dans une autre. Une fois le script DTrace terminé, une sortie similaire à l'exemple suivant s'affiche :


# dtrace -s ./whatlock.d
dtrace: script './whatlock.d' matched 5 probes 
^C
spin                                                             26
adaptive                                                       2981

Comme illustré ici, plus de 99 % des verrous acquis lors de l'exécution de la commande date sont des verrous adaptatifs. Il peut être surprenant qu'un si grand nombre de verrous soit acquis avec une commande aussi simple que date. Le grand nombre de verrous est un artefact classique du verrouillage de précision nécessaire sur un système hautement évolutif comme le noyau Solaris.