O conjunto de ferramentas perf
recebeu uma atualização significativa com a integração das mudanças para o kernel Linux 6.15. A novidade mais notável deste ciclo para a poderosa ferramenta de análise de desempenho é a introdução do conceito de profiling de latência, aproveitando informações do agendador do kernel. Esses dados de latência serão extremamente valiosos para engenheiros de software Linux que buscam otimizar a latência e o desempenho geral do sistema.
Introdução ao profiling de latência no perf
A nova opção --latency
para o comando perf record
, detalhada no pull request das ferramentas perf
para o Linux 6.15, visa mostrar os impactos no tempo de parede (wall-time) em vez do tempo de CPU. Ao rastrear as trocas de contexto, o perf
agora pode ponderar as amostras e identificar qual parte do código contribuiu mais para a latência de execução. Tudo sobre o que é o kernel Linux de baixa latência.
Como funciona a ponderação de amostras
O valor (período) de cada amostra é ajustado ao ser dividido pelo número de execuções paralelas no instante da coleta. O nível de paralelismo é determinado e registrado no perf report
através dos eventos de sched-switch
. Essa abordagem tem como efeito reduzir a influência das partes do código que são executadas em paralelo e, consequentemente, aumentar a representatividade das execuções seriais no perfil.
Foco no profiling de processos
Inicialmente, o profiling de latência está limitado à análise de processos individuais. O profiling em nível de sistema (system-wide) ainda não é suportado nesta versão. Para ativar essa nova funcionalidade, basta adicionar a opção --latency
ao comando perf record
.
A distinção entre tempo de parede (wall clock time) e tempo de CPU
Dmitry Vyukov, do Google, que trabalhou nessa implementação, explicou a importância do profiling de latência, diferenciando-o do tradicional profiling de CPU. Enquanto o tempo de CPU contabiliza o tempo total de processamento utilizado pelos núcleos, o tempo de parede reflete a experiência real do usuário, o tempo decorrido do início ao fim de uma tarefa. Em sistemas multi-core e com múltiplas threads, essas métricas podem divergir significativamente.
Por que o profiling de latência é crucial
Otimizar a sobrecarga de CPU melhora o throughput (vazão) do sistema, enquanto a otimização da sobrecarga do tempo de parede impacta diretamente a latência (tempo de resposta). Esses perfis são complementares, mas não substituíveis. Vyukov listou exemplos onde o profiling de latência é essencial: otimização da latência de build, requisições de servidor, treinamento e inferência de Machine Learning, e o tempo de execução de programas de linha de comando. Nesses cenários, o perfil de CPU pode ser inútil ou até mesmo enganoso.
Detalhes da implementação
A implementação envolve a coleta de informações sobre trocas de contexto durante a execução do perf record
. Posteriormente, durante a geração do relatório (perf report
), o nível de paralelismo (o número de threads rodando nas CPUs) é calculado. O peso de cada amostra é então dividido por esse nível de paralelismo, modelando a coleta de uma amostra por unidade de tempo de parede.
Utilização opcional e documentação
O profiling de CPU continua sendo o modo padrão do perf
. Cabe aos usuários aprender sobre essa nova modalidade de profiling e utilizá-la quando apropriado. A nova documentação oferece detalhes adicionais sobre os relatórios de sobrecarga de CPU e latência. A comunidade aguarda com expectativa os insights que o perf record --latency
trará para a otimização de sistemas Linux.