Guía de seguimiento dinámico de Solaris

Sondeos de bloqueo de giro

Los subprocesos no pueden bloquearse en determinados contextos en el núcleo, como por ejemplo un contexto de interrupción de alto nivel y cualquier contexto que manipule el estado distribuidor. En estos contextos, esta restricción evita el uso de bloqueos adaptativos. En su lugar se utilizan bloqueos de giro para realizar la exclusión mutua a secciones críticas. Tal y como indica su nombre, la conducta de estos bloqueos en la presencia de contención es girar hasta que el subproceso propietario libera el bloqueo. Los tres sondeos relacionados con los bloqueos de giro se encuentran en la Tabla 18–2.

Tabla 18–2 Sondeos de bloqueo de giro

spin-acquire

Sondeo de evento de retención que se ejecuta inmediatamente después de adquirir un bloqueo de giro. 

spin-spin

Sondeo de evento de contención que se activa después de que un subproceso que ha girado en un bloqueo de giro retenido haya adquirido correctamente el bloqueo de giro. Si se encuentran habilitados ambos sondeos, spin-spin se activará antes que spin-acquire. arg1 para spin-spin contiene el tiempo de giros: número de nanosegundos que se han dedicado al estado de giro antes de adquirir el bloqueo. El significado del número de giros por sí mismo es reducido, pero puede utilizarse para comparar los tiempos de giro.

spin-release

Sondeo de evento de retención que se activa inmediatamente después de liberar un bloqueo de giro. 

Los bloqueos adaptativos son mucho más comunes que los bloqueos de giro. La siguiente secuencia de comandos muestra los totales de ambos tipos de bloqueo, para proporcionar datos que sirvan como soporte a esta observación.

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

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

Ejecute esta secuencia de comandos en una ventana, y el comando date(1) en otra. Cuando finalice la secuencia de comandos DTrace verá un resultado similar al siguiente ejemplo:


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

Tal y como indica este resultado, más del 99 por ciento de los bloqueos adquiridos durante la ejecución del comando date son bloqueos adaptativos. Puede resultar sorprendente que se adquieran tantos bloqueos al hacer algo tan simple como un date. El gran número de bloqueos es un artefacto natural del bloqueo de alta granularidad requerido en un sistema extremadamente escalable, como el núcleo de Solaris.