Comandos perf comumente usados
O evento perf faz parte do kernel, em tools/perf.
cmd:
perf record -e [probe] -ag
-a trace所有cpu
-g 追踪stack调用栈
data--write-->arquivo perf.data
ctrl-c parar rastreamento
relatório de análise de exibição de relatório de perf
Classificação de custos:
small | stats/count conta o número de eventos
| Amostragem
large|trace coleta detalhes do evento
V
O uso específico pode ser encontrado em man
Listar instruções de desempenho por categoria
lista:
perf list lista todos os eventos
perf list 'sched:*' lista um certo tipo de tracepoint
contador:
perf stat mais vários parâmetros
comando perf stat (para um comando específico ou PID)
-d mostra detalhes detalhes
-p PID
-a registra tudo'
dormir 5 gravar por 5 segundos
criação de perfil/amostragem
registro perf também adiciona cmd ou -p PID para monitorar conteúdo específico
-F unidade de frequência de amostragem Hz
-g captura pilha de chamadas
--call-graph dwarf usa símbolos anões para registrar a pilha
Em relação a "--", parece ser adicionado antes do comando com parâmetros.
sonda dinâmica
comando de teste perf
No uso do teste perf, as informações de depuração são necessárias em muitos lugares. Isso significa que gcc -g é necessário?
[--add] tcp_sendmsg adiciona tracepoint na entrada da função do kernel
-d/--del delete tp
-V mostra variáveis disponíveis
O probe perf parece adicionar um tracepoint em 'probe:*'. Ele pode ser ativado e registrado por meio do registro perf.
mostrar relatório
relatório de perf saída de formato de relatório
script perf lista todos os registros de eventos (entradas de detalhes da tabela de registros)
ftrace e perf
ftrace é um conjunto de front-end baseado em debugfs
A fonte de dados subjacente também é o tracepoint kprobe uprobe
Rotinas comuns:
perf-->análise de amostragem
|
v
Função de ponto de acesso --> análise quantitativa ftrace --> processo de chamada
Ferramentas de front-end:
debugfs
trace-cmd----------> Encapsulamento da operação de debugfs
perf-tools
Sub-rotinas de função de processo de rastreamento disponíveis
+++++++++++++++++++++++++++
amostragem de perf não pode ser percorrida por função
crianças |
auto |
Calcule a proporção de pontuação entre você e a subfunção |
Conte apenas as porcentagens que estão fora das subfunções dentro de si |
perf instalar
Você pode ser solicitado a instalar usando perf, basta seguir as instruções para instalar ou você pode compilar e instalar a partir do código-fonte do kernel
Os símbolos necessários podem precisar instalar alguns pacotes ou ativar as opções de configuração do kernel para suportar
sobre símbolos
O símbolo -> nos ajuda a mapear de um endereço para uma função ou nome de variável para que as pessoas possam entender
-> Usar perf pode solicitar que você instale um pacote de depuração contendo símbolos, geralmente terminando com '--dbgsym'
-> Você pode verificar a configuração do sistema de compilação para preservar as informações do símbolo
-> Para símbolos de nível de kernel, você pode instalar o pacote debuginfo do kernel ou habilitar CONFIG_KALLSYMS
Rastreamentos de Pilha
Não omita ponteiros de quadro ao compilar!!!
Parâmetros de compilação disponíveis para GCC:
-fno-omit-frame-pointer
Para o kernel é:
CONFIG_FRAME_POINTER=y
Os backtraces de código não podem ser gravados sem FP. Você pode usar anão ou LBR para cobri-lo, mas pode não ser fácil de usar.
habilitar ponto de rastreamento
perf record -e 'sched:sched_process_*' -a sleep 5
Tracepoint não é capturado usando amostragem/criação de perfil? Não é afetado pela frequência?
Amostragem da CPU por frequência para obter a pilha de chamadas
perf record -F Hz
O princípio é criar um evento de interrupção periódica para permitir que o perf capture e grave o ponteiro ao mesmo tempo
fonte do evento
evento de software
fornecido por perf menos número
Softevent tem um período padrão. Ao amostrar, uma certa quantidade é coletada e relatada uma vez (caso contrário, se houver muitos relatórios, basta ver um na pilha). Você pode ver os detalhes por meio do registro perf -vv .
PMC
Contadores de desempenho de hardware e relacionados ao processador
Na verdade, os registradores são geralmente multiplexados para registrar o número de vezes que diferentes eventos ocorrem. atingir diferentes funções. Para configurar.
Cenários de aplicativos: ciclos de CPU; falta de cache e similares
Ponto de Rastreamento do Kernel
O código enterrado no kernel pode ser usado para o desenvolvimento de sua própria ferramenta de rastreamento, que é mais estável.
Após cuidadosa consideração pelos designers, é muito comumente usado.
USDT
Ponto enterrado estático do código no nível do usuário
É necessário instalar primeiro a biblioteca USDT no ambiente, representada pelo dtrace. [API também é relativamente estável]
Por exemplo: apt install systemtap-sdt-dev
instalar dtrace
Em seguida, compile o código da API USDT enterrada junto com a biblioteca
Por exemplo: ./configure --with-dtrace
fazer -j64
Dtrace é o representante do USDT, LTTng também tem USDT
Rastreamento Dinâmico
Instável porque está entre pegar o código
Adicionar tracepoint entre sonda perf --add
Ele pode ser aumentado dinamicamente quando o kernel e o programa estão em execução, e algumas instruções recém-adicionadas podem ser executadas no probe.
Não há sobrecarga antes do uso e não há sobrecarga depois que o probe é excluído.
estatísticas estatísticas (PMC)
perf stat CMD para analisar PMCs
O indicador comumente usado "insns por ciclos" é o chamado IPC. Instruções por ciclo.
IPC Alto ---> Rendimento de CPU Alto ---> Muito Bom
IPC baixo ---> mais barracas
É necessário prestar atenção se há um bloqueio de rotação da CPU em marcha lenta e não funcionando.
Você pode ver mais detalhes através de perf stat -d
Um indicador mais útil é: "ciclos parados por insns"
Representa os acessos ao barramento de recursos e memória representam a latência. Quanto mais baixo melhor.
analisar
Perfil cronometrado
Ponteiro de instrução de amostragem e rastreamento de pilha de acordo com um determinado intervalo de tempo
Exemplo: perf record -F 99 -a -g --sleep 30
[Amostragem de 99 Hz em vez de 100 Hz é para evitar conflitos com certas tarefas periódicas e causar compensações]
Criação de perfil de evento
Use o tempo de hardware como gatilho de amostra em vez de relógio
Muitos eventos de hardware podem ocorrer em um curto período de tempo, e registrar todas as vezes pode causar muita sobrecarga.
Portanto, geralmente use -C count para definir o limite do acionador.
A pilha é registrada apenas uma vez depois de capturar tantos eventos.
Por exemplo: perf record -e Lrdxaxhe-load-misses -c 10000 -ag -- sleep 5
Perceber:
Muitas CPUs introduzem deliberadamente um pequeno atraso após acionar uma amostra para evitar o bloqueio
Isso tem pouco efeito no perfil de tempo, mas causará amostragem imprecisa para amostragem de evento.
A solução: a chamada "amostragem precisa"
Nem todos os PMCs suportam amostragem precisa, você pode verificar o valor de "precise_ip" por meio de "perf record -vv" para confirmar.
Adicione ":p" após o evento PMC para habilitar o método
Por exemplo: "-e instruções:p"
rastreamento de kernel estático
Tracepoint e outros eventos estáticos também podem ser contados usando contador
Por exemplo: perf stat -e "syscalls:sys_enter_*"
Comparando perf e strace
A camada inferior do strace é usar o ptrace. O princípio é semelhante ao GDB. A execução do código do ponto de interrupção será executada no local de destino, a sobrecarga de execução do strace é enorme
rastreamento dinâmico
Opções de kernel:
CONFIG_KPROBES=y
CONFIG_KPROBE_EVENTS=y
CONFIG_FRAME_POINTER=y
CONFIG_UPROBES=y
CONFIG_UPROBE_EVENTS=y
Se debuginfo estiver ativado
CONFIG_DEBUG_INFO=y
Variáveis de kernel em funções podem ser gravadas
Exibe o tamanho da variável atual em cada registro
Por exemplo:
perf probe -V tcp_sendmsg lista todas as variáveis disponíveis
sonda perf --add 'tcp_sendmsg size' adiciona sonda e tamanho de registro ao mesmo tempo
perf record -e probe:tcp_sendmsg -a ativar e iniciar a gravação
No caso de debuginfo, o ponto de rastreamento também pode ser adicionado de acordo com o número da linha da função do kernel
exemplo:
perf probe -L tcp_sendmsg lista as sondas de linha disponíveis
perf probe -V tcp_send:81 lista variáveis visíveis na linha 81
perf probe --add 'tcp_sendmsg:81 sail' 加 probe
perf record -e probe:tcp_sendmsg -a iniciar a gravação