DTrace
DTrace é uma estrutura completa e dinâmica de rastreamento e monitoramento Desenvolvido para diagnosticar problemas de kernel e aplicativos em sistemas de produção em tempo real. Criado inicialmente para Solaris, o DTrace foi portado para outros sistemas operacionais do tipo Unix.
DTrace foi desenvolvido para apoiar administradores de sistema na solução de problemas de rastreamento dinâmico no kernel e em aplicativos finais no sistema operacional Solaris e é compatível com kernels Linux padrão que suportam BPF. Para funcionar, ele requer a biblioteca libctf compatível com o formato de depuração CTF incluída no pacote binutils ou a biblioteca libdtrace-ctf, portada do Solaris.
Esta ferramenta permite que administradores de sistema e desenvolvedores:
- Monitoramento do sistema: O DTrace fornece ao usuário informações detalhadas sobre a utilização dos recursos do computador, como CPU, memória e armazenamento, permitindo identificar gargalos e melhorar a eficiência do sistema.
- Problemas de desempenho de depuração: Ele permite identificar e diagnosticar problemas de desempenho em tempo real, facilitando a solução de problemas e a otimização do sistema.
- Otimize o desempenho: Ao fornecer informações detalhadas sobre o comportamento do aplicativo, o DTrace permite que os desenvolvedores otimizem o desempenho de seus programas e melhorem a eficiência geral do sistema.
Até alguns anos atrás Oracle forneceu suporte DTrace para Linux e a ferramenta é oferecida como uma implementação de um processo de espaço de usuário que utiliza o subsistema eBPF e mecanismos de rastreamento padrão fornecidos pelo kernel Linux. Em termos de funcionalidade, esta implementação do DTrace baseada em eBPF se assemelha à primeira versão do DTrace para Linux, que foi implementada como um módulo do kernel.
Sobre o DTrace 2.0.0-1.14
Atualmente, O DTrace está na versão 2.0.0-1.14 e é distribuído na forma de dois patches opcionais para o kernel 6.7 que permitem utilizar funções avançadas para obter dados adicionais sobre os módulos e o kernel, além do provedor pid, usado para rastrear processos no espaço do usuário, agora possui suporte para rastrear a execução de instruções de acordo com seu deslocamento no espaço do usuário.
Possui suporte para usar as funções stack() e ustack() para agregar dados coletados, capacidade de remover elementos de qualquer tipo de matrizes associativas atribuindo literal 0, facilitando o gerenciamento de dados em matrizes.
O DTrace 2.0.0-1.14 oferece diversas opções para diferentes aspectos do sistema, incluindo contadores de desempenho de CPU, limites de recursos, bloqueios, ciclo de vida do processo e foi incluída uma nova ação de impressão para gerar dados estruturados com anotações de tipo, melhorando a apresentação dos resultados do monitoramento.
Além disso permite agregar dados de plotagem e executar ações com base nos resultados com novas funções cleanpath(), d_path() e link_ntop() foram integrados e a capacidade de salvar dados de rastreamento de processo (USDT) entre reinicializações do dtprobed foi fornecida, garantindo a continuidade do rastreamento mesmo após as reinicializações.
Além disso, também Ressalta-se que foi adicionado o parâmetro "-xcpu", que permite que a verificação seja vinculada a CPUs específicas, A opção "-xlockmem" foi introduzida para limitar o tamanho da memória utilizada, otimizando o desempenho do sistema.
Foi adicionado suporte para o mecanismo BTF, que fornece informações de verificação de tipo em pseudocódigo BPF e agora é possível usar o script de configuração para construir, simplificando o processo de configuração e customização do kit de ferramentas de depuração.
finalmente se você está interessado em saber mais sobre isso, você pode verificar o detalhes no link a seguir.
Obtenha o DTrace
Para os interessados na ferramenta, você deve saber que a Oracle oferece pacotes de espaço de usuário DTrace x86_64 e aarch64 pré-construídos para Oracle Linux 9 (kernel UEK7), Oracle Linux 8 (kernel UEK7 ou UEK6) e Oracle Linux 7 (kernel UEK6).
Já para outras distribuições você deve ter uma série de dependências, que você pode consultar neste link e que são necessárias antes de compilar o código-fonte por conta própria.