Manuel de suivi dynamique Solaris

Chapitre 31 Fournisseur plockstat

Le fournisseur plockstat propose des sondes pouvant être utilisées pour observer le comportement de primitives de synchronisation au niveau utilisateur incluant des heures de contention et de maintien du verrou. La commande plockstat(1M) est un client DTrace utilisant le fournisseur plockstat pour collecter des données sur des événements de verrouillage au niveau utilisateur.

Présentation

Le fournisseur plockstat propose des sondes pour les types d'événement suivants :

Événements de contention

Ces sondes correspondent à la contention sur une primitive de synchronisation au niveau utilisateur, et se déclenchent lorsqu'un thread est forcé pour attendre qu'une ressource soit disponible. Solaris est généralement optimisé pour un cas de non-contention, une contention prolongée n'est donc pas prévue. Ces sondes doivent être utilisées pour comprendre les cas dans lesquels une contention se produit. La contention étant conçue pour être (relativement) rare, l'activation de sondes d'événement de contention n'entraîne généralement pas d'effet de sonde critique. Elles peuvent être activées sans se soucier de l'impact sur la performance.

Événements de maintien

Ces sondes correspondent à l'acquisition, la libération ou une autre manipulation d'une primitive de synchronisation au niveau utilisateur. En tant que telles, ces sondes peuvent être utilisées pour répondre à des questions arbitraires sur la manipulation des primitives de synchronisation au niveau utilisateur. Les applications acquérant et libérant généralement très souvent des primitives de synchronisation, l'activation de sondes d'événement de maintien peut entraîner un effet de sonde plus important que l'activation de sondes d'événement de contention. Alors que l'effet de sonde entraîné par leur activation peut être important, il n'est néanmoins pas pathologique. Elles peuvent toujours être activées en toute confiance sur des applications de production.

Événements d'erreur

Ces sondes correspondent à n'importe quel type de comportement anormal rencontré lors de l'acquisition ou de la libération d'une primitive de synchronisation au niveau utilisateur. Ces événements peuvent être utilisés pour détecter des erreurs rencontrées lorsqu'un thread bloque sur une primitive de synchronisation au niveau utilisateur. Les événements d'erreur doivent être extrêmement rares, leur activation ne doit ainsi pas entraîner d'effet de sonde critique.

Sondes Mutex

Les sondes Mutex impliquent une exclusion mutuelle de sections critiques. Lorsqu'un thread tente d'acquérir une sonde mutex détenue par un autre thread à l'aide de mutex_lock(3C) ou de pthread_mutex_lock(3C), il détermine si le thread maître est exécuté sur une autre CPU. Si c'est le cas, le thread demandeur effectuera une brève rotation en attendant que la sonde mutex soit disponible. Si le propriétaire n'est pas exécuté sur une autre CPU, le thread demandeur se bloquera.

Les quatre sondes plockstat appartenant aux mutex sont répertoriées dans le Tableau 31–1. Pour chaque sonde, arg0 contient un pointeur vers la structure mutex_t ou pthread_mutex_t (il s'agit de types identiques) représentant la mutex.

Tableau 31–1 Sondes Mutex

mutex-acquire

Sonde d'événement de maintien se déclenchant immédiatement après l'acquisition d'une mutex. arg1 contient une valeur booléenne indiquant si l'acquisition a été récursive sur une mutex récursive. arg2 indique le nombre d'itérations engagées par le thread demandeur pour la rotation sur cette mutex. arg2 ne sera pas de zéro uniquement si la sonde mutex-spin s'est déclenchée à l'acquisition de cette mutex.

mutex-block

Sonde d'événement de contention se déclenchant avant qu'un thread ne bloque sur une mutex maintenue. mutex-block et mutex-spin peuvent se déclencher pour une seule acquisition de verrouillage.

mutex-spin

Sonde d'événement de contention se déclenchant avant qu'un thread ne commence sa rotation sur une mutex maintenue. mutex-block et mutex-spin peuvent se déclencher pour une seule acquisition de verrouillage.

mutex-release

Sonde d'événement de maintien se déclenchant immédiatement après la libération d'une mutex. arg1 contient une valeur booléenne indiquant si l'événement correspond à une libération récursive sur une mutex récursive.

mutex-error

Sonde d'événement d'erreur se déclenchant lorsqu'une erreur est rencontrée sur une opération de mutex. arg1 est la valeur errno de l'erreur rencontrée.

Sondes de verrouillage en lecture/écriture

Les verrouillages en lecture/écriture autorisent plusieurs lecteurs ou un seul rédacteur, mais pas les deux, dans une section critique en même temps. Ces verrous sont généralement utilisés pour les structures plus fréquemment recherchées que modifiées, ou lorsque des threads prennent du temps dans une section critique. Les utilisateurs interagissent avec des verrous en lecture/écriture à l'aide des interfaces Solaris rwlock(3C) ou POSIX pthread_rwlock_init(3C).

Les sondes appartenant à des verrouillages en lecture/écriture sont répertoriées dans le Tableau 31–2 Pour chaque sonde, arg0 contient un pointeur vers la structure rwlock_t ou pthread_rwlock_t (il s'agit de types identiques) représentant le verrou adaptatif. arg1 contient une valeur booléenne indiquant si l'opération concerne un rédacteur.

Tableau 31–2 Sondes de verrouillage en lecture/écriture

rw-acquire

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

rw-block

Sonde d'événement de contention se déclenchant avant qu'un thread ne bloque pendant une tentative d'acquisition de verrou. Si activée, la sonde rw-acquire ou la sonde rw-error est déclenchée après rw-block.

rw-release

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

rw-error

Sonde d'événement d'erreur se déclenchant lorsqu'une erreur est rencontrée lors d'une opération de verrouillage en lecture/écriture. arg1 est la valeur errno de l'erreur rencontrée.

Stabilité

Le fournisseur plockstat utilise un mécanisme de stabilité DTrace pour décrire ses stabilités, tel qu'illustré dans le tableau suivant. Pour plus d'informations sur le mécanisme de stabilité, reportez-vous au Chapitre39Stabilité.

Élément 

Stabilité des noms 

Stabilité des données 

Classe de dépendance 

Fournisseur 

En cours d'évolution 

En cours d'évolution 

ISA

Module 

Privé 

Privé 

Inconnu 

Fonction 

Privé 

Privé 

Inconnu 

Nom 

En cours d'évolution 

En cours d'évolution 

ISA

Arguments 

En cours d'évolution 

En cours d'évolution 

ISA