Guia de rastreamento dinâmico Solaris

Compilação e instrumentação

Quando você escreve programas tradicionais no Solaris, usa um compilador para converter o seu programa do código-fonte em código de objeto que possa ser executado. Quando você usa o comando dtrace, está chamando o compilador da linguagem D usada anteriormente para escrever o programa hello.d. Depois que o programa é compilado, ele é enviado para o kernel do sistema operacional para execução pelo DTrace. Lá, os testes que forem nomeados no seu programa são ativados e o provedor correspondente realiza toda a instrumentação necessária para ativá-los.

Toda a instrumentação no DTrace é completamente dinâmica: os testes são ativados separadamente somente quando estiverem sendo utilizados. Testes inativos não possuem código instrumentado, sendo assim, o seu sistema não sofre qualquer tipo de redução de desempenho quando você não está usando o DTrace. Quando o seu experimento estiver completo e o comando dtrace for encerrado, todos os testes que você usou serão automaticamente desativados e a instrumentação será removida, retornando o sistema ao seu estado original exato. Não há uma diferença efetiva entre um sistema no qual o DTrace não está ativo e um no qual o software DTrace não está instalado.

A instrumentação de cada teste é realizada dinamicamente no sistema operacional em execução dinâmico ou nos processos do usuário selecionados. O sistema não é desativado ou pausado, e o código de instrumentação é adicionado somente para os testes ativados. Como resultado, o efeito do teste do uso de DTrace é limitado a exatamente o que você pede que o DTrace faça: nenhum dado desnecessário é rastreado, nenhuma grande “opção de rastreio” é ativada no sistema e toda a instrumentação de DTrace é projetada para ser o mais eficiente possível. Esses recursos permitem que você use o DTrace em produção para solucionar problemas reais em tempo real.

A estrutura do DTrace também fornece suporte a um número arbitrário de clientes virtuais. Você pode executar simultaneamente quantos experimentos e comandos do DTrace desejar, limitado somente pela capacidade de memória do seu sistema. E todos os comandos operam independentemente usando a mesma instrumentação base. Essa mesma capacidade também permite que qualquer número de usuários distintos no sistema aproveitem o DTrace simultaneamente: desenvolvedores, administradores e pessoal de serviço podem trabalhar todos juntos ou em problemas distintos no mesmo sistema usando o DTrace sem que um interfira no trabalho do outro.

Ao contrário de programas escritos em C e C++ e similar aos programas escritos na linguagem de programação JavaTM, os programas em D do DTrace são compilados em uma forma intermediária segura que é usada para execução quando os testes são acionados. Essa forma intermediária é validada por segurança quando o seu programa é examinado pela primeira vez pelo software do kernel do DTrace. O ambiente de execução do DTrace também lida com os erros em tempo de execução que podem ocorrer durante a execução do programa em D, incluindo dividir por zero, apontar para memória inválida e assim por diante, e os informa para você. Como resultado, você não consegue construir um programa inseguro que possa fazer com que o DTrace danifique inadvertidamente o kernel do Solaris ou um dos processos em execução no sistema. Esses recursos de segurança permitem que você use o DTrace em um ambiente de produção sem se preocupar com a queda do sistema ou que ele seja corrompido. Se você cometer um erro de programação, o DTrace informará o seu erro, desabilitará a instrumentação e você poderá corrigir o erro e tentar novamente. Os recursos de relatório e depuração de erros do DTrace são descritos posteriormente neste livro.

O diagrama a seguir mostra os diferentes componentes da arquitetura do DTrace, incluindo provedores, testes, o software do kernel do DTrace e o comando dtrace.

Figura 1–1 Visão geral da arquitetura e dos componentes do DTrace

Arquitetura do DTrace: o recurso do kernel e os provedores, uma interface de driver do kernel para uma biblioteca e a biblioteca que fornece suporte a um conjunto de comandos.

Agora que você já sabe como o DTrace funciona, vamos retornar ao tour da linguagem de programação D e começar a escrever alguns programas mais interessantes.