Guia de rastreamento dinâmico Solaris

Capítulo 31 Provedor plockstat

O provedor plockstat disponibiliza os testes que podem ser usados para observar o comportamento dos primitivos de sincronização no nível do usuário e manter as horas. O comando plockstat(1M) é um consumidor do DTrace que usa o provedor plockstat para colher dados nos eventos de bloqueio no nível do usuário.

Visão geral

O provedor plockstat disponibiliza testes para os seguintes tipos de evento:

Eventos de contenção

Esses testes correspondem à contenção em um primitivo de sincronização no nível do usuário, e são acionados quando um segmento é forçado a aguardar que um recurso se torne disponível. O Solaris é geralmente otimizado para o caso de não-contenção, sendo assim, a contenção prolongada não é esperada; esses testes devem ser usados para o entendimento desses casos onde acontece a contenção. Como a contenção é criada para ser (relativamente) rara, a ativação dos testes de evento de contenção geralmente não possui um efeito de teste sério; os testes podem ser ativados sem preocupação de afetar substancialmente o desempenho.

Eventos de manutenção

Esses testes correspondem a adquirir, liberar ou manipular um primitivo de sincronização no nível do usuário. Como tal, esses testes podem ser usados para responder a questões arbitrárias sobre a forma em que os primitivos de sincronização no nível do usuário são manipulados. Como os aplicativos geralmente adquirem e liberam os primitivos de sincronização muito freqüentemente, a ativação dos testes de evento de manutenção pode ter um maior efeito de teste do que os testes de evento de contenção. Enquanto o efeito de teste induzido pela ativação deles pode ser substancial, ele não é patológico; eles ainda podem ser ativados com confiança em aplicativos de produção.

Eventos de erro

Esses testes correspondem a qualquer tipo de comportamento anômalo encontrado ao adquirir ou liberar um primitivo de sincronização no nível do usuário. Estes eventos podem ser usados para detectar erros encontrados enquanto um segmento está bloqueando um primitivo de sincronização no nível do usuário. Os eventos de erro devem ser extremamente incomuns, sendo assim, ativá-los não deve induzir um efeito de teste sério.

Testes de mutex

Mutexes reforçam a exclusão mútua em seções críticas. Quando um segmento tentar adquirir um mutex mantido por outro segmento usando o mutex_lock(3C) ou pthread_mutex_lock(3C), ele determinará se o segmento proprietário está sendo executado em uma CPU diferente. Se for o caso, o segmento de aquisição irá girar por um curto período esperando que o mutex se torne disponível. Se o proprietário não estiver sendo executado em outra CPU, o segmento de aquisição será bloqueado.

Os quatro testes plockstat pertencentes aos mutexes estão listados na Tabela 31–1. Para cada teste, arg0 contém um ponteiro para a estrutura mutex_t ou pthread_mutex_t (estes são tipos idênticos) que representa o mutex.

Tabela 31–1 Testes de mutex

mutex-acquire

Teste de evento de manutenção que é acionado imediatamente depois que um mutex é adquirido. arg1 contém um valor booleano que indica se a aquisição foi recursiva em um mutex recursivo. arg2 indica o número de iterações que o segmento de aquisição gastou girando neste mutex. arg2 será diferente de zero somente se o teste mutex-spin foi acionado nesta aquisição do mutex.

mutex-block

Teste de evento de contenção que é acionado antes de um segmento ser bloqueado em um mutex mantido. mutex-block e mutex-spin devem ser acionados por uma aquisição de bloqueio simples.

mutex-spin

Teste de evento de contenção que é acionado antes de um segmento começar a girar em um mutex mantido. mutex-block e mutex-spin devem ser acionados por uma aquisição de bloqueio simples.

mutex-release

Teste de evento de manutenção que é acionado imediatamente depois que um mutex é liberado. arg1 contém um valor booleano que indica se o evento corresponde a uma liberação recursiva em um mutex recursivo.

mutex-error

Teste de evento de erro que é acionado quando um erro é encontrado em uma operação de mutex. arg1 é o valor errno do erro encontrado.

Testes de bloqueio de leitor/gravador

Os bloqueios de leitor/gravador permitem que vários leitores ou um único gravador, mas não ambos, existam em uma seção crítica de cada vez. Esses bloqueios são geralmente usados para estruturas que são pesquisadas mais freqüentemente do que modificadas, ou quando os segmentos gastam tempo substancial em uma seção crítica. Os usuários interagem com bloqueios de leitor/gravador usando as interfaces rwlock(3C) ou POSIX pthread_rwlock_init(3C) do Solaris .

Os testes que pertencem aos bloqueios de leitores/gravador estão na Tabela 31–2. Para cada teste, arg0 contém um ponteiro para a estrutura rwlock_t ou pthread_rwlock_t(estes são tipos idênticos) que representa o bloqueio adaptativo. arg1 contém um valor booleano que indica se a operação foi um gravador.

Tabela 31–2 Testes de bloqueio de leitores/gravador

rw-acquire

Teste de evento de manutenção que é acionado imediatamente depois que um bloqueio de leitores/gravador é adquirido. 

rw-block

Teste de evento de contenção que é acionado antes que um segmento seja bloqueado ao tentar adquirir um bloqueio. Se ativado, o teste rw-acquire ou o teste rw-error será acionado depois de rw-block.

rw-release

Teste de evento de manutenção que é acionado imediatamente depois que um bloqueio de leitor/gravador é liberado 

rw-error

Teste de evento de erro que é acionado quando um erro é encontrado durante uma operação de bloqueio de leitor/gravador. arg1 é o valor errno do erro encontrado.

Estabilidade

O provedor plockstat usa o mecanismo de estabilidade do DTrace para descrever suas estabilidades, conforme mostrado na tabela seguinte. Para obter mais informações sobre o mecanismo de estabilidade, consulte o Capítulo 39Estabilidade.

Elemento 

Estabilidade de nome 

Estabilidade de dados 

Classe de dependência 

Provedor 

Desenvolvendo 

Desenvolvendo 

ISA

Módulo 

Privada 

Privada 

Desconhecida 

Função 

Privada 

Privada 

Desconhecida 

Nome 

Desenvolvendo 

Desenvolvendo 

ISA

Argumentos 

Desenvolvendo 

Desenvolvendo 

ISA