Guia de rastreamento dinâmico Solaris

Cálculos e relatórios de estabilidade

O compilador de D realiza cálculos de estabilidade para cada uma das descrições de teste e instruções de ação nos programas em D. Você pode usar a opção -v do dtrace para exibir um relatório da estabilidade do programa. O exemplo a seguir usa um programa escrito na linha de comando:


# dtrace -v -n dtrace:::BEGIN'{exit(0);}'
dtrace: description 'dtrace:::BEGIN' matched 1 probe
Stability data for description dtrace:::BEGIN:
        Minimum probe description attributes
                Identifier Names: Evolving
                Data Semantics:   Evolving
                Dependency Class: Common
        Minimum probe statement attributes
                Identifier Names: Stable
                Data Semantics:   Stable
                Dependency Class: Common
CPU     ID                    FUNCTION:NAME
  0      1                           :BEGIN

Você também pode desejar combinar a opção - v do dtrace com a opção -e, que informa ao dtrace para compilar mas não executar o programa em D, para que você possa determinar a estabilidade do programa sem ter que ativar testes e executar o programa. Veja a seguir outro exemplo de relatório de estabilidade:


# dtrace -ev -n dtrace:::BEGIN'{trace(curthread->t_procp);}'
Stability data for description dtrace:::BEGIN:
        Minimum probe description attributes
                Identifier Names: Evolving
                Data Semantics:   Evolving
                Dependency Class: Common
        Minimum probe statement attributes
                Identifier Names: Stable
                Data Semantics:   Private
                Dependency Class: Common
#

Observe que no novo programa, foi feita referência à variável de D curthread, que possui um nome estável, mas uma semântica de dados privada (ou seja, se olhar para ela, estará acessando detalhes de implementação privada do kernel), e seu status agora é refletido no relatório de estabilidade do programa. Os atributos de estabilidade no relatório do programa são calculados selecionando-se o nível de estabilidade mínimo e a classe dos valores correspondentes para cada trio de atributos de interface.

Os atributos de estabilidade são calculados para uma descrição de teste pegando-se os atributos de estabilidade mínimos de todos os campos de descrição de teste especificados de acordo com os atributos publicados pelo provedor. Os atributos dos provedores disponíveis do DTrace são mostrados no capítulo correspondente a cada provedor. Os provedores do DTrace exportam um trio de atributos de estabilidade para cada um dos quatro campos de descrição de todos os testes publicados para esse provedor. Portanto, o nome de um provedor deve ter uma maior estabilidade que os testes individuais que ele exporta. Por exemplo, a descrição do teste:

fbt:::

indicando que o DTrace deve rastrear a entrada e o retorno de todas as funções do kernel, possui uma estabilidade maior que a descrição do teste:

fbt:foo:bar:entry

que nomeia uma função interna específica bar() no módulo do kernel foo. Para simplificar, a maioria dos provedores usa um único conjunto de atributos para todos os valores individuais de módulo:função :nome que eles publicam. Os provedores também especificam atributos para a matriz args[], pois a estabilidade de quaisquer argumentos de teste varia de acordo com o provedor.

Se o campo do provedor não for especificado em uma descrição de teste, então os atributos de estabilidade Instável/Instável/ Comum são atribuídos à descrição porque ela pode terminar correspondendo a testes de provedores que ainda não existem quando usada em uma versão futura do Solaris. A própria Sun não é capaz de fornecer garantias sobre a estabilidade futura e o comportamento deste programa. Você deve sempre especificar explicitamente o provedor ao escrever suas cláusulas do programa em D. Além disso, quaisquer campos de descrição de teste que contenham caracteres de correspondência de padrão (consulte o Capítulo 4Estrutura de programa em D) ou variáveis de macro como $1 (consulte o Capítulo 15Script) são tratados como se não fossem especificados porque esses padrões de descrição podem se expandir para corresponder a provedores ou testes lançados pela Sun em versões futuras do DTrace e do SO Solaris.

Os atributos de estabilidade são calculados para a maioria das instruções da linguagem D utilizando a estabilidade mínima e a classe das entidades na instrução. Por exemplo, as seguintes entidades da linguagem D possuem os seguintes atributos:

Entidade 

Atributos 

Variável incorporada de D curthread

Estável/Privada/Comum 

Variável definida pelo usuário de D x

Estável/Estável/Comum 

Se você escrever a seguinte instrução do programa em D:

x += curthread->t_pri;

os atributos resultantes da instrução serão Estável/Privada/Comum, os atributos mínimos associados aos operandos curthread e x. A estabilidade de uma expressão é calculada pegando-se os atributos de estabilidade mínima de cada um dos operandos.

Quaisquer variáveis de D que você defina no programa recebem automaticamente os atributos Estável/Estável/Comum. Além disso, a gramática da linguagem D e os operadores de D recebem, implicitamente, os atributos Estável/Estável/Comum. As referências aos símbolos do kernel usando o operador aspa invertida (`) recebem sempre os atributos Privada/Privada/Desconhecida porque refletem artefatos de implementação. Os tipos definidos no código-fonte do programa em D, especificamente os que são associados ao espaço de nome do tipo C e D, recebem os atributos Estável/Estável/Comum. Os tipos que são definidos na implementação do sistema operacional e fornecidos por outros tipos de espaço de nome recebem os atributos Privada/Privada/Desconhecida. O operador de difusão do tipo D produz uma expressão cujos atributos de estabilidade são o mínimo dos atributos da expressão de entrada e dos atributos do tipo de resultado de difusão.

Se você usar o pré-processador de C para incluir arquivos de cabeçalho do sistema C, esses tipos serão associados ao espaço de nome do tipo C e receberão os atributos Estável/Estável/Comum, pois o compilador de D não tem outra opção senão supor que você está assumindo a responsabilidade por essas declarações. Portanto, é possível que você se engane sobre a estabilidade do programa caso use o pré-processador de C para incluir um arquivo de cabeçalho contendo artefatos de implementação. Você deve sempre consultar a documentação correspondente aos arquivos de cabeçalho que está incluindo para determinar os níveis corretos de estabilidade.