
Este proyecto es un esfuerzo de I + D de KDAB para crear una GUI independiente para los datos de rendimiento. Como el primer objetivo, queremos proporcionar una interfaz de usuario como Kcachegrind alrededor de Linux Perf. Mirando hacia el futuro, tenemos la intención de admitir otros formatos de datos de rendimiento bajo este paraguas.
Aquí hay algunas capturas de pantalla que muestran las características más importantes del punto de acceso en acción:
La característica principal de HotSpot es la visualización gráfica de un archivo perf.data .


NOTA: Las funciones en línea tienen un borde más oscuro que las no enrolladas.





La línea de tiempo permite filtrar los resultados por tiempo, proceso o hilo. Las vistas de datos se actualizan en consecuencia.



También puede iniciar perf desde HotSpot, para perfilar una aplicación recién iniciada o para adjuntar a los procesos ya en ejecución. Sin embargo, tenga en cuenta las advertencias a continuación.


Nota: El punto de acceso aún no está empaquetado en todas las distribuciones de Linux. En tales casos, o si desea usar la última versión, utilice la Appimage que funcionará en cualquier distribución de Linux reciente bien.
Hotspot está disponible en AUR (https://aur.archlinux.org/packages/hotspot).
Hotspot está disponible en Debian (https://packages.debian.org/hotspot) y Ubuntu (https://packages.ubuntu.com/hotspot).
Hotspot Ebuilds está disponible en nuestra superposición (https://github.com/kdab/kdab-overlay).
Hotspot está disponible en Fedora (https://packages.federaproject.org/pkgs/hotspot/hotspot/).
Puede dirigirse a la versión más actual o la compilación continua. En ambos casos, encontrará la Appimage en "Activos" que puede descargar. Unte el archivo Appimage (en caso de la última versión), luego hágalo ejecutable y luego ejecutarlo.
Utilice la última compilación para obtener la versión más reciente. Si no funciona, informe un error y pruebe la última versión estable.
Nota: Las bibliotecas o preferencias de su sistema no están alteradas. En caso de que desee eliminar HotSpot nuevamente, simplemente elimine el archivo descargado. Obtenga más información sobre la apimaje aquí.
Para averiguar cómo depurar la Apimagen, vea la piratería.
La construcción de puntos de acceso de Source le brinda lo último y lo mejor, pero tendrá que asegurarse de que todas sus dependencias estén disponibles. La mayoría de los usuarios probablemente deberían instalar HotSpot desde el Administrador de paquetes de distribución o como una appimage.
Para todos los que desean contribuir a HotSpot o usar la versión más reciente sin las notas detalladas de Appimage, se encuentran en la piratería.
En primer lugar, registre algunos datos con perf . Para obtener backtraces, deberá habilitar el modo de callgraph enano:
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) ] Ahora, si tiene un punto de acceso disponible en la misma máquina, todo lo que necesita hacer es iniciarlo. Abrirá automáticamente el archivo perf.data en el directorio actual (similar al perf report ).
Alternativamente, puede especificar la ruta al archivo de datos en la consola:
hotspot /path/to/perf.data Dependiendo de sus necesidades, es posible que desee pasar opciones de línea de comandos adicionales a HotSpot. Esto permite establecer opciones de configuración únicas que se encuentran en la GUI en "Configuración" y también permite convertir los archivos de datos de Linux Perfer en el formato de perfdatos más pequeño y portátil (consulte Importar / Exportar para obtener detalles sobre eso). Todas las opciones de línea de comando se muestran con --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.
Hotspot admite una forma muy poderosa de hacer análisis de tiempo de espera o perfiles de CPU. Este análisis se basa en puntas tracepePePePePePeP de Kernel en el planificador de Linux. Al grabar esos datos, podemos encontrar el tiempo delta durante el cual un hilo no se estaba ejecutando en la CPU, sino que estaba fuera de la CPU. Puede haber múltiples razones para eso, todas las cuales se pueden encontrar utilizando esta técnica:
read() o write()mmap() 'EDnanosleep() o yield()futex() etc.Al aprovechar los puntos de rastreo del kernel en el planificador, la sobrecarga es bastante manejable y solo pagamos un precio, cuando el proceso realmente se está cambiando. En particular, no pagamos un precio cuando, por ejemplo, una operación de bloqueo mutex se puede manejar directamente en el espacio del usuario.
Para realizar un análisis OFFC-CPU con HotSpot, debe registrar los datos con un comando muy 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 >Alternativamente, puede usar la casilla de verificación Off-CPU en la página de registro integrado de HotSpot.
Durante el análisis, puede cambiar entre la vista de costos de "ciclos" para los datos de la CPU a la vista de costos de "tiempo fuera de la CPU" para el análisis del tiempo de espera. A menudo, querrá cambiar entre ambos, por ejemplo, encontrar lugares en su código que pueden requerir una mayor paralelización (ver también la ley de Amdahl).
El costo "sched: sched_switch" también se le mostrará. Pero en mi opinión, eso es menos útil, ya que solo indica el número de interruptores de programador. La duración del tiempo intermedia a menudo es mucho más interesante para mí, y eso es lo que se le muestra en la métrica de "tiempo fuera de la CPU".
Si está grabando en un sistema integrado, querrá analizar los datos en su máquina de desarrollo con Hotspot. Para hacerlo, asegúrese de que su sysroot contenga la información de depuración requerida para relajarse (ver más abajo). Luego registre los datos en su sistema integrado:
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 fileEstá bien si su máquina incrustada está utilizando una plataforma diferente a su host. En su host, haga los siguientes pasos y luego para analizar los datos:
host$ scp embedded:perf.data embedded:/tmp/kallsyms .
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms
perf.dataSi implementó manualmente una aplicación desde una ruta fuera de su sysroot, haga esto en su lugar:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
perf.dataSi su aplicación también está utilizando bibliotecas fuera de su sysroot y AppPath, haga esto:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
perf.dataY, en el peor de los casos, si también usa archivos de depuración divididos en ubicaciones no estándar, haga esto:
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 El formato de archivo perf.data no es autónomo. Para analizarlo, necesita acceso a los ejecutables y bibliotecas del proceso perfilado, junto con los símbolos de depuración. Esto hace que sea difícil compartir dichos archivos en todas las máquinas, por ejemplo, obtener la ayuda de un colega para investigar un problema de rendimiento o para fines de informes de errores.
Hotspot le permite exportar los datos analizados, que luego están totalmente autónomos. Se puede acceder a esta función a través de la acción del menú "Archivo> Guardar como". Los datos se guardan en un archivo autónomo *.perfparser . Para importar los datos a Hotspot nuevamente, simplemente abra ese archivo directamente en lugar del archivo perf.data original.
Como alternativa, también puede exportar desde la línea de comandos (sin una GUI, por lo que también se puede usar con compilaciones automatizadas) utilizando la opción --exportTo .
Nota: El formato de archivo aún no es estable. Es decir, los datos exportados por una versión de HotSpot solo pueden volver a leer por la misma versión. Este problema se resolverá en el futuro, según lo permita el tiempo.
Hotspot actualmente solo muestra el nombre de los puntos TracePePoPet en la línea de tiempo.


Hotspot incluye un desmontador, que puede mostrarle el costo por instrucción. El desmontador utiliza colores para indicar qué líneas de ensamblaje corresponden a qué línea de código fuente. Para una navegación más fácil, simplemente puede hacer clic en una línea y la otra vista saltará a ella. Puede seguir las llamadas de funciones con un doble clic. En la vista SourCecode puede presionar CTRL+F o presionar el icono de búsqueda para abrir una ventana de búsqueda.
Si tiene las fuentes en diferentes directorio, puede usar --sourcePaths o la configuración para seleccionar decirle al desascado que busque el código fuente.
Si algo se rompe en lo anterior y la salida es menos utilizable que perf report , informe un problema en GitHub. Dicho esto, hay algunos problemas conocidos sobre los que las personas pueden tropezar:
Descansar la pila para producir una trayectoria es un arte oscuro y puede salir mal de muchas maneras. Hotspot se basa en perfparser (ver más abajo), que a su vez se basa en libdw de los elfutilos para relajarse la pila. Esto funciona bastante bien la mayor parte del tiempo, pero aún puede salir mal. En particular, el relajado fallará cuándo:
perf.data--debugPaths <paths> : Use esto cuando tenga archivos de depuración divididos en ubicaciones no estándar--extraLibPaths <paths> : use esto cuando haya movido las bibliotecas a otra ubicación desde que grabó--appPath <paths> : Esta es una especie de combinación de los dos campos anteriores. La ruta se atraviesa recursivamente, buscando archivos de depuración y bibliotecas.--sysroot <path> : use esto cuando intente inspeccionar un archivo de datos registrado en una plataforma integrada-O2 -g . Tendrás que repetir el paso perf record De forma predeterminada, perf record solo copia una parte de la pila en el archivo de datos. Esto puede conducir a problemas con pilas de llamadas muy profundas, que se cortarán en algún momento. Este problema romperá los árboles de llamada de arriba hacia abajo en el punto de acceso, como se visualiza en la vista de arriba hacia abajo o en el gráfico de la llama. Para solucionar esto, puede intentar aumentar el tamaño del volcado de la pila, es decir:
perf record --call-graph dwarf,32768
Tenga en cuenta que esto puede aumentar dramáticamente el tamaño de los archivos perf.data .: úselo con cuidado. También eche un vistazo al man perf record .
Para algunos escenarios, las llamadas de la función recursiva simplemente no se rinden. Ver también #93
HotSpot admite la descarga de símbolos de depuración a través de DebugInfod. Esto se puede habilitar agregando URL de descarga en la configuración o iniciando el punto de acceso con DEBUGINFOD_URLS definidos en el entorno.
En comparación con perf report , HotSpot pierde muchas características. Se planean que algunos de estos se resuelvan en el futuro. Otros pueden potencialmente nunca ser implementados. Pero tenga en cuenta que las siguientes funciones no están disponibles en el punto de acceso actualmente:
--itrace , --mem-mode , --branch-stack y --branch-history no son compatibles No es una buena idea lanzar Hotspot con sudo o como usuario root . Consulte, por ejemplo, los archivos de edición como root para un artículo sobre ese asunto. El problema #83 también es relevante en este contacto.
Pero sin los derechos del superusor, puede ver mensajes de error como los siguientes cuando se usa la función de registro de 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 solucionar esta limitación, Hotspot puede ejecutar PERF en sí mismo con privilegios elevados.
La exportación de datos actual se limita a un formato que solo puede ser leído por hotspot de la misma versión. Esto hace que la interoperación con otras herramientas de visualización sea casi imposible. Esto se conoce y mejorará en el futuro. Lo más notablemente se planifica el soporte para la exportación a espectadores web como Perfetto o Mozilla Profiler, pero aún no se implementa. Parches bienvenidos!
Este proyecto aprovecha la excelente utilidad perfparser creada por la compañía QT para su IDE QT Creator. Si ya está utilizando QT Creator, considere aprovechar su analizador de uso de CPU integrado.
El punto de acceso tiene licencia bajo el GPL V2+. Consulte License.gpl.txt para obtener más información, o comuníquese con [email protected] si no se le está clara las condiciones de esta licencia.