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.
Le fournisseur plockstat propose des sondes pour les types d'événement suivants :
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.
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.
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.
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. |
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. |
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 |