Guía de seguimiento dinámico de Solaris

Capítulo 31 Proveedor plockstat

El proveedor plockstat pone a su disposición sondeos que pueden utilizarse para observar el comportamiento de primitivas de sincronización a nivel de usuario, incluyendo tiempos de contención y retención de bloqueos. El comando plockstat(1M) es un consumidor de DTrace que utiliza el proveedor plockstat para recopilar datos en eventos de bloqueo a nivel de usuario.

Visión general

El proveedor plockstat pone a su disposición sondeos para los siguientes tipos de eventos:

Eventos de contención

Estos sondeos corresponden a la contención en una primitiva de sincronización a nivel de usuario, y se activa cuando se fuerza a un subproceso a que espere a que un recurso esté disponible. Normalmente Solaris está optimizado para el caso de no contención, por lo que no se espera una contención prolongada. Estos sondeos deben utilizarse para comprender los casos en los que se produce la contención. Dado que la contención está diseñada para que sea (relativamente) extraña, la habilitación de sondeos de eventos de contención no suele tener un efecto de sondeo importante. Pueden habilitarse sin preocuparse de que afecte al rendimiento de forma severa.

Eventos de retención

Estos sondeos corresponden a la adquisición, liberación o cualquier otro tipo de manipulación de una primitiva de sincronización a nivel de usuario. Como tal, estos sondeos pueden utilizarse para responder a preguntas arbitrarias relacionadas con la forma en la que se manipulan las primitivas de sincronización a nivel de usuario. Dado que las aplicaciones suelen adquirir y liberar primitivas de sincronización con frecuencia, la activación de sondeos de eventos de retención pueden inducir un efecto de sondeo mayor que la activación de sondeos de eventos de retención. Mientras que el efecto de sondeo que se induce al habilitarlos puede ser sustancial, no es patológico; podrá habilitarlos sin miedo en aplicaciones de producción.

Eventos de error

Estos sondeos corresponden a cualquier tipo de conducta anómala detectada durante la adquisición de una primitiva de sincronización a nivel de usuario. Estos eventos pueden utilizarse para detectar errores percibidos durante el bloqueo de un subproceso en una primitiva de sincronización a nivel de usuario. Los eventos de error deberían ser casos excepcionales, por lo que su activación no inducirá un efecto de sondeo importante.

Sondeos mutex

Los mutex fuerzan la exclusión mutua en secciones críticas. Cuando un sondeo intenta adquirir un mutex que se encuentra en otro subproceso mediante mutex_lock(3C) o pthread_mutex_lock(3C), determinará si el subproceso que lo posee se encuentra en ejecución en una CPU distinta. Si ese fuera el caso, el subproceso que realiza la adquisición gira durante un breve espacio de tiempo esperando a que el mutex esté disponible. Si el propietario no se encuentra en ejecución en otra CPU, el subproceso que realiza la adquisición se bloqueará.

Los cuatro sondeos plockstat relacionados con los mutex se enumeran en la Tabla 31–1. Para cada sondeo, arg0 contiene un puntero a la estructura mutex_t o pthread_mutex_t (estos dos tipos son idénticos) que representan al mutex.

Tabla 31–1 Sondeos mutex

mutex-acquire

Sonde de evento de retención que se activa inmediatamente después de la adquisición de un mutex. arg1 contiene un valor booleano que indica si la adquisición se realizó de forma recursiva en un mutex recursivo. arg2 indica el número de iteraciones que pasó el subproceso que realiza la adquisición girando en este mutex. arg2 será un valor distinto de cero sólo si se activó el sondeo mutex-spin en esta adquisición mutex.

mutex-block

Sondeo de evento de contención que se activa antes de que un subproceso se bloquee en un mutex retenido. Tanto mutex-block como mutex-spin podrían activarse para una única adquisición de bloqueo.

mutex-spin

Sondeo de evento de contención que se activa antes de que un subproceso empiece a girar en un mutex retenido. Tanto mutex-block como mutex-spin podrían activarse para una única adquisición de bloqueo.

mutex-release

Evento de retención que se activa inmediatamente después de la liberación de un mutex. arg1 contiene un valor booleano que indica si el evento corresponde a una liberación recursiva en un mutex recursivo.

mutex-error

Sondeo de evento de error que se activa cuando se detecta un error en una operación mutex. arg1 es el valor errno del error detectado.

Sondeos de bloqueo lector/escritor

Los bloqueos lector/escritor permiten varios lectores o un único escritor, pero no ambos, en una sección crítica simultáneamente. Estos bloqueos suelen utilizarse con estructuras que se buscan con más frecuencia que con la que se modifican, o cuando los subprocesos emplean gran cantidad de tiempo en una sección crítica. Los usuarios interactúan con los bloqueos lector/escritor mediante las interfaces Solaris rwlock(3C) o POSIX pthread_rwlock_init(3C).

Los sondeos relacionados con los bloqueos de lector/escritor se incluyen en la Tabla 31–2. Para cada sondeo, arg0 contiene un puntero a la estructura rwlock_t o pthread_rwlock_t(estos dos tipos son idénticos) que representa el bloqueo adaptativo. arg1 contiene un valor booleano que indica si la operación se realizó como escritor.

Tabla 31–2 Sondeos de bloqueo lectores/escritor

rw-acquire

Sondeo de evento de retención que se activa inmediatamente después de adquirir un bloqueo lectores/escritor. 

rw-block

Sondeo de evento de contención que se activa antes de que un subproceso se bloquee mientras está intentando adquirir un bloqueo. Si está habilitado, el sondeo rw-acquire o el sondeo rw-error se activará después de rw-block.

rw-release

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

rw-error

Sondeo de evento de errores que se activa cuando se detecta un error durante una operación de bloqueo lector/escritor. arg1 es el valor errno del error detectado.

Estabilidad

El proveedor plockstat utiliza el mecanismo de estabilidad de DTrace para describir sus estabilidades, tal y como se muestra en la tabla siguiente. Para obtener más información sobre el mecanismo de estabilidad, consulte el Capítulo 39Estabilidad.

Elemento 

Estabilidad del nombre 

Estabilidad de los datos 

Clase de dependencia 

Proveedor 

Evolutivo 

Evolutivo 

ISA

Módulo 

Privado 

Privado 

Desconocido 

Función 

Privado 

Privado 

Desconocido 

Nombre 

Evolutivo 

Evolutivo 

ISA

Argumentos 

Evolutivo 

Evolutivo 

ISA