Notas de uso de desempenho

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:

  1. debugfs

  1. trace-cmd----------> Encapsulamento da operação de debugfs

  1. 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

Acho que você gosta

Origin blog.csdn.net/kuno_y/article/details/128940426
Recomendado
Clasificación