Guia de rastreamento dinâmico Solaris

Criando testes do SDT

Se você for um desenvolvedor de driver de dispositivo, talvez esteja interessado em criar seus próprios testes do SDT em seu driver do Solaris. O efeito de teste desativado do SDT é essencialmente o custo de várias instruções de máquina não operacionais. Portanto, você é encorajado a adicionar testes do SDT aos seus drivers de dispositivo, se necessário. A menos que estes testes afetem negativamente o desempenho, você pode deixá-los em seu código de envio.

Declarando testes

Os testes do SDT são declarados através das macros DTRACE_PROBE , DTRACE_PROBE1, DTRACE_PROBE2, DTRACE_PROBE3 e DTRACE_PROBE4 do <sys/sdt.h>. O nome do módulo e o nome da função de um teste baseado em um SDT correspondem ao módulo do kernel e à função do teste. O nome do teste depende do nome fornecido na macro DTRACE_PROBEn. Se o nome não contiver duas barras inferiores consecutivas (__), o nome do teste será conforme escrito na macro. Se o nome contiver quaisquer duas barras inferiores consecutivas, o nome do teste converterá as barras inferiores consecutivas em um único traço (-). Por exemplo, se uma macro DTRACE_PROBE especificar transaction__start, o teste do SDT será chamado de transaction-start. Esta substituição permite que o código de C forneça nomes de macro que não são identificadores válidos de C sem especificar uma seqüência.

O DTrace inclui o nome do módulo do kernel e o nome da função como parte da tupla que identifica o teste, sendo assim, você não precisa incluir esta informação no nome do teste para evitar colisões de espaço de nome. Você pode usar o comando dtrace -l -P sdt -m módulo em seu módulo do driver para listar os testes que instalou e os nomes completos que serão vistos pelos usuários do DTrace.

Argumentos de teste

Os argumentos de cada teste do SDT são os argumentos especificados na referência de macro DTRACE_PROBEn correspondente. O número de argumentos depende de qual macro foi usada para criar o teste: DTRACE_PROBE1 especifica um argumento, DTRACE_PROBE2 especifica dois argumentos, e assim por diante. Ao declarar seus testes do SDT, você pode minimizar seu efeito de teste desativado, não referenciando os ponteiros e não carregando a partir de variáveis globais nos argumentos do teste. O cancelamento de referência de ponteiro e o carregamento de variável global podem ser feitos com segurança em ações de D que ativam testes, sendo assim, os usuários do DTrace podem solicitar estas ações somente quando necessárias.