
Este projeto é um esforço de P&D da KDAB para criar uma GUI independente para dados de desempenho. Como o primeiro objetivo, queremos fornecer uma interface do usuário como o KcacheGrind em torno do Linux Perf. Olhando para o futuro, pretendemos apoiar vários outros formatos de dados de desempenho sob este guarda -chuva.
Aqui estão algumas capturas de tela mostrando os recursos mais importantes do ponto de acesso em ação:
O principal recurso do ponto de acesso é a visualização gráfica de um arquivo perf.data .


NOTA: As funções inlinadas têm uma borda mais escura do que as não-linadas.





A linha do tempo permite filtrar os resultados por tempo, processo ou encadeamento. As visualizações de dados são atualizadas de acordo.



Você também pode iniciar perf do Hotspot, para o perfil de um aplicativo recém -iniciado ou anexar ao (s) processo (s) de execução. Leve as advertências abaixo em consideração.


Nota: O hotspot ainda não está embalado em todas as distribuições Linux. Nesses casos, ou se você quiser usar a versão mais recente, use o Appimage que funcionará em qualquer distro recente do Linux.
O hotspot está disponível em AUR (https://aur.archlinex.org/packages/hotspot).
O hotspot está disponível em Debian (https://packages.debian.org/hotspot) e ubuntu (https://packages.ubuntu.com/hotspot).
O Hotspot EBUILDS está disponível em nossa sobreposição (https://github.com/kdab/kdab-overlay).
O hotspot está disponível no Fedora (https://packages.fedoraproject.org/pkgs/hotspot/hotspot/).
Você pode ir para a liberação mais atual ou a construção contínua. Nos dois casos, você encontrará o Appimage em "ativos" que pode baixar. U até o arquivo Appimage (em caso de versão mais recente), faça -o executável e executá -lo.
Por favor, use a versão mais recente para obter a versão mais recente. Se não funcionar, relate um bug e teste a versão estável mais recente.
Nota: As bibliotecas ou preferências do seu sistema não são alteradas. Caso você deseje remover o hotspot novamente, basta excluir o arquivo baixado. Saiba mais sobre o Appimage aqui.
Para descobrir como depurar o Appimage, consulte Hacking.
A construção de hotspot da fonte oferece os melhores e mais recentes, mas você terá que garantir que todas as suas dependências estejam disponíveis. A maioria dos usuários provavelmente deve instalar o hotspot no gerenciador de pacotes Distro ou como um appimage.
Para todos que desejam contribuir para o ponto de acesso ou usar a versão mais recente sem as notas detalhadas do Appimage, são encontradas no hacking.
Primeiro de tudo, registre alguns dados com perf . Para recuperar as backtraces, você precisará ativar o modo de callgraph anão:
perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ] Agora, se você tiver hotspot disponível na mesma máquina, tudo o que você precisa fazer é iniciá -lo. Ele abrirá automaticamente o arquivo perf.data no diretório atual (semelhante ao perf report ).
Como alternativa, você pode especificar o caminho para o arquivo de dados no console:
hotspot /path/to/perf.data Dependendo das suas necessidades, você pode passar opções adicionais de linha de comando para o ponto de acesso. Isso permite as opções de configuração definidas únicas encontradas na GUI em "Configurações" e também permite converter arquivos de dados do Linux Perf no formato Perfdata menor e portátil (consulte Importar / exportar detalhes sobre isso). Todas as opções da linha de comando são mostradas com --help :
Usage: hotspot [options] [files...]
Linux perf GUI for performance analysis.
Options:
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
-v, --version Displays version information.
--sysroot <path> Path to sysroot which is used to find libraries.
--kallsyms <path> Path to kallsyms file which is used to resolve
kernel symbols.
--debugPaths <paths> Colon separated list of paths that contain debug
information. These paths are relative to the
executable and not to the current working directory.
--extraLibPaths <paths> Colon separated list of extra paths to find
libraries.
--appPath <path> Path to folder containing the application executable
and libraries.
--sourcePaths <paths> Colon separated list of search paths for the source
code.
--arch <path> Architecture to use for unwinding.
--exportTo <path> Path to .perfparser output file to which the input
data should be exported. A single input file has to
be given too.
--perf-binary <path> Path to the perf binary.
--objdump-binary <path> Path to the objdump binary.
Arguments:
files Optional input files to open on startup, i.e.
perf.data files.
O hotspot suporta uma maneira muito poderosa de fazer análises de tempo de espera ou perfil fora da CPU. Esta análise é baseada nos pontos de rastreamento do kernel no Scheduler Linux. Ao gravar esses dados, podemos encontrar o tempo que o Delta durante o qual um thread não estava sendo executado na CPU, mas estava fora da CPU. Pode haver várias razões para isso, todas as quais podem ser encontradas usando esta técnica:
read() ou write()mmap() 'ednanosleep() ou yield()futex() etc.Ao alavancar pontos de rastreamento do kernel no agendador, a sobrecarga é bastante gerenciável e pagamos apenas um preço, quando o processo está realmente sendo alterado. Mais notavelmente, não pagamos um preço quando, por exemplo, uma operação de bloqueio mutex pode ser tratada diretamente no espaço do usuário.
Para fazer a análise fora da CPU com o Hotspot, você precisa gravar os dados com um comando muito específico:
perf record
-e cycles # on-CPU profiling
-e sched:sched_switch --switch-events # off-CPU profiling
--sample-cpu # track on which core code is executed
-m 8M # reduce chance of event loss
--aio -z # reduce disk-I/O overhead and data size
--call-graph dwarf # we definitely want backtraces
< your application >Como alternativa, você pode usar a caixa de seleção Off CPU na página de registro integrada do Hotspot.
Durante a análise, você pode alternar entre a visualização de custos "ciclos" para obter dados na CPU para a visualização de custo "fora da CPU" para análise de tempo de espera. Freqüentemente, você deseja mudar entre ambos, por exemplo, para encontrar lugares em seu código, que podem exigir uma paralelização adicional (consulte também a lei de Amdahl).
O custo "agendado: sched_switch" também será mostrado para você. Mas, na minha opinião, isso é menos útil, pois indica apenas o número de interruptores do agendador. A duração do tempo intermediário geralmente é muito mais interessante para mim - e é isso que você é mostrado na métrica "fora da CPU".
Se você estiver gravando em um sistema incorporado, analisará os dados em sua máquina de desenvolvimento com o ponto de acesso. Para isso, verifique se a sua sysroot contém as informações de depuração necessárias para desenrolar (veja abaixo). Em seguida, registre os dados em seu sistema incorporado:
embedded$ perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ]
embedded$ cp /proc/kallsyms /tmp/kallsyms # make pseudo-file a real fileTudo bem se sua máquina incorporada estiver usando uma plataforma diferente do seu host. Em seu host, faça as etapas a seguir para analisar os dados:
host$ scp embedded:perf.data embedded:/tmp/kallsyms .
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms
perf.dataSe você implantou manualmente um aplicativo de um caminho fora da sua sysroot, faça isso: em vez disso:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
perf.dataSe o seu aplicativo também estiver usando bibliotecas fora do seu sysroot e do AppPath, faça isso:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
perf.dataE, no pior caso, se você também usar arquivos de depuração dividida em locais fora do padrão, faça isso:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
--debugPaths /path/to/debug1:/path/to/debug2:...
perf.data O formato do arquivo perf.data não é independente. Para analisá -lo, você precisa acessar os executáveis e as bibliotecas do processo perfilado, juntamente com os símbolos de depuração. Isso torna difícil compartilhar esses arquivos em máquinas, por exemplo, obter a ajuda de um colega para investigar um problema de desempenho ou para fins de relatório de bugs.
O hotspot permite que você exporte os dados analisados, que são totalmente independentes. Esse recurso é acessível através da ação do menu "Arquivo> Salvar como". Os dados são salvos em um arquivo *.perfparser independente. Para importar os dados para o ponto de acesso novamente, basta abrir esse arquivo diretamente no lugar do arquivo perf.data original.
Como alternativa, você também pode fazer a exportação da linha de comando (sem uma GUI, de modo que isso também é utilizável com construções automatizadas) usando a opção --exportTo .
Nota: O formato do arquivo ainda não está estável. Os dados de significado exportados por uma versão do hotspot só podem ser lidos de volta pela mesma versão. Esse problema será resolvido no futuro, conforme o tempo permitir.
Atualmente, o hotspot mostra apenas o nome dos pontos de rastreio na linha do tempo.


O hotspot inclui um desmontador, que pode mostrar o custo por instrução. O desmontador usa cores para indicar quais linhas de montagem correspondem a qual linha de código -fonte. Para uma navegação mais fácil, você pode simplesmente clicar em uma linha e a outra visualização pulará para ela. Você pode seguir as chamadas de função com um clique duplo. Na exibição SourCecode, você pode pressionar Ctrl+F ou pressionar o ícone de pesquisa para abrir uma janela de pesquisa.
Se você possui fontes em diretório diferente, poderá usar --sourcePaths ou as configurações para selecionar dizer ao desmontador para pesquisar lá o código -fonte.
Se alguma coisa quebrar no acima e a saída for menos utilizável que perf report , relate um problema no Github. Dito isto, existem alguns problemas conhecidos que as pessoas podem tropeçar:
Reparar a pilha para produzir um backtrace é uma arte escura e pode dar errado de várias maneiras. O hotspot depende do perfparser (veja abaixo), que por sua vez depende do libdw da Elfutils para relaxar a pilha. Isso funciona muito bem na maioria das vezes, mas ainda pode dar errado. Mais notavelmente, o desenrolar falhará quando:
perf.data está faltando--debugPaths <paths> : Use isso quando tiver arquivos de depuração divididos em locais fora do padrão--extraLibPaths <paths> : use isso quando mover bibliotecas para algum outro local desde a gravação--appPath <paths> : Esta é uma espécie de combinação dos dois campos acima. O caminho é atravessado recursivamente, procurando arquivos e bibliotecas de depuração.--sysroot <path> : use isso quando tentar inspecionar um arquivo de dados gravado em uma plataforma incorporada-O2 -g . Você terá que repetir a etapa perf record Por padrão, perf record apenas copia uma parte da pilha para o arquivo de dados. Isso pode levar a problemas com pilhas de chamadas muito profundas, que serão cortadas em algum momento. Este problema quebrará as árvores de chamada de cima para baixo no ponto de acesso, conforme visualizado na exibição de cima para baixo ou no gráfico de chama. Para consertar isso, você pode tentar aumentar o tamanho do despejo de pilha, ou seja:
perf record --call-graph dwarf,32768
Observe que isso pode aumentar drasticamente o tamanho dos arquivos perf.data - use -o com cuidado. Também dê uma olhada no man perf record .
Para alguns cenários, as chamadas de função recursiva simplesmente não ficam desalinhadas. Veja também #93
O hotspot suporta baixar símbolos de depuração via debuginfod. Isso pode ser ativado adicionando URLs de download nas configurações ou iniciando o hotspot com DEBUGINFOD_URLS definido no ambiente.
Comparado ao perf report , o hotspot perde muitos recursos. Alguns deles estão planejados para serem resolvidos no futuro. Outros podem potencialmente nunca ser implementados. Mas esteja ciente de que os seguintes recursos não estão disponíveis no ponto de acesso atualmente:
--itrace , --mem-mode , --branch-stack e --branch-history , não são suportados Não é uma boa ideia iniciar o hotspot com sudo ou como usuário root . Consulte, por exemplo, os arquivos de edição como root para um artigo sobre esse assunto. A edição nº 83 também é relevante neste contato.
Mas sem direitos do superusuário, você pode ver mensagens de erro como as seguintes ao usar o recurso de registro do hotspot:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
-1 - Not paranoid at all
0 - Disallow raw tracepoint access for unpriv
1 - Disallow cpu events for unpriv
2 - Disallow kernel profiling for unpriv
Para alternar essa limitação, o ponto de acesso pode executar o próprio Perf com privilégios elevados.
A exportação de dados atual é limitada a um formato que só pode ser lido pelo hotspot da mesma versão. Isso torna impossível a interop com outras ferramentas de visualização. Isso é conhecido e melhorará no futuro. Mais notavelmente, suporte para exportação para espectadores da Web, como Perfectto ou Mozilla Profiler, está planejado, mas ainda não é implementado. Patches são bem -vindos!
Este projeto aproveita o excelente utilitário perfparser criado pela empresa QT para o seu QT Creator IDE. Se você já está usando o QT Creator, considere aproveitar seu analisador de uso integrado de CPU.
O hotspot é licenciado sob o GPL V2+. Consulte Licença.gpl.txt para obter mais informações ou entre em contato com [email protected] se alguma condição deste licenciamento não for clara para você.