Este es el comando perf-report que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.
PROGRAMA:
NOMBRE
perf-report: lee los datos de rendimiento (creados por el registro de rendimiento) y muestra el perfil
SINOPSIS
Perf (reporte) [-I | --input = archivo]
DESCRIPCIÓN
Este comando muestra la información del perfil del contador de rendimiento registrada a través de perf
registro.
OPCIONES
-i, --input =
Ingrese el nombre del archivo. (predeterminado: perf.data a menos que stdin sea un quince)
-v, --detallado
Sea más detallado. (muestre la dirección del símbolo, etc.)
-n, --show-nr-muestras
Muestre el número de muestras para cada símbolo.
--show-cpu-utilización
Muestra el porcentaje de muestra para diferentes modos de CPU.
-T, - hilos
Mostrar contadores de eventos por hilo. El archivo de datos de entrada debe registrarse con la opción -s.
-c, --comms =
Solo considere los símbolos en estas comunicaciones. CSV que entiende file: // nombre de archivo entradas.
Esta opción afectará el porcentaje de la columna de gastos generales. Ver --porcentaje para
más información.
--pid =
Mostrar solo eventos para el ID de proceso dado (lista separada por comas).
--tid =
Mostrar solo eventos para el ID de hilo dado (lista separada por comas).
-d, --dsos =
Solo considere los símbolos en estos dsos. CSV que entiende file: // nombre de archivo entradas.
Esta opción afectará el porcentaje de la columna de gastos generales. Ver --porcentaje para
más información.
-S, --symbols =
Solo considere estos símbolos. CSV que entiende file: // nombre de archivo entradas. Esta opción
afectará el porcentaje de la columna de gastos generales. Consulte --porcentaje para obtener más información.
--symbol-filter =
Mostrar solo los símbolos que coincidan (parcialmente) con este filtro.
-U, --hide-sin resolver
Mostrar solo las entradas resueltas con un símbolo.
-s, --sort =
Ordene las entradas del histograma por claves determinadas: se pueden especificar varias claves en formato CSV.
Están disponibles las siguientes claves de clasificación: pid, comm, dso, symbol, parent, cpu, socket,
srcline, peso, peso_local.
Cada clave tiene el siguiente significado:
· Comm: comando (nombre) de la tarea que se puede leer a través de / proc // comm
· Pid: comando y tid de la tarea
· Dso: nombre de la biblioteca o módulo ejecutado en el momento de la muestra
· Símbolo: nombre de la función ejecutada en el momento de la muestra
Padre: nombre de la función que coincide con el filtro de expresiones regulares del padre. Las entradas incomparables son
mostrado como "[otro]".
· Cpu: número de cpu que se ejecutó la tarea en el momento de la muestra
· Socket: número de socket del procesador que se ejecutó la tarea en el momento de la muestra
· Srcline: nombre de archivo y número de línea ejecutados en el momento de la muestra. El enano
Se debe proporcionar información de depuración.
· Srcfile: nombre de archivo del archivo fuente del mismo. Requiere información enana.
· Peso: peso específico del evento, por ejemplo, latencia de memoria o costo de cancelación de transacción. Esta
es el peso global.
· Local_weight: Versión de peso local del peso anterior.
· Transacción: banderas de aborto de transacción.
· Gastos generales: porcentaje de gastos generales de la muestra
· Overhead_sys: porcentaje de sobrecarga de la muestra que se ejecuta en modo de sistema
· Overhead_us: porcentaje de sobrecarga de la muestra que se ejecuta en modo de usuario
· Overhead_guest_sys: porcentaje de sobrecarga de la muestra que se ejecuta en modo sistema en invitado
máquina
· Overhead_guest_us: porcentaje de sobrecarga de la muestra que se ejecuta en modo de usuario en invitado
máquina
· Muestra: Número de muestra
· Período: número bruto de recuento de eventos de la muestra
De forma predeterminada, se utilizan las teclas comm, dso y símbolo.
(es decir, ordenar comm, dso, símbolo)
Si se usa la opción --branch-stack, las siguientes claves de clasificación también son
tamaños:
dso_from, dso_to, symbol_from, symbol_to, predicción errónea.
· Dso_from: nombre de la biblioteca o módulo derivado de
· Dso_to: nombre de la biblioteca o módulo ramificado a
· Symbol_from: nombre de la función ramificada desde
· Symbol_to: nombre de la función ramificada a
· Predicción errónea: "N" para la rama predicha, "Y" para la rama predicha erróneamente
· In_tx: sucursal en transacción TSX
· Abortar: abortar la transacción TSX.
· Ciclos: Ciclos en bloque básico
Y las claves de clasificación predeterminadas se cambian a comm, dso_from, symbol_from, dso_to
y symbol_to, consulte '--branch-stack'.
-F, - campos =
Especificar campo de salida: se pueden especificar varias claves en formato CSV. Campos siguientes
están disponibles: overhead, overhead_sys, overhead_us, overhead_children, muestra y
período. También puede contener cualquier clave de clasificación.
De forma predeterminada, se agregarán todas las claves de clasificación no especificadas en -F
automáticamente.
Si se utiliza la opción --mem-mode, también están disponibles las siguientes claves de clasificación
(incompatible con --branch-stack):
symbol_daddr, dso_daddr, bloqueado, tlb, mem, snoop, dcacheline.
· Symbol_daddr: nombre del símbolo de datos que se está ejecutando en el momento de la muestra
· Dso_daddr: nombre de la biblioteca o módulo que contiene los datos que se ejecutan en el
tiempo de muestra
· Bloqueado: si el autobús estaba bloqueado en el momento de la muestra
· Tlb: tipo de acceso tlb para los datos en el momento de la muestra
· Mem: tipo de acceso a la memoria para los datos en el momento de la muestra
· Fisgonear: tipo de fisgoneo (si lo hay) de los datos en el momento de la muestra
· Dcacheline: la línea de caché en la que se encuentra la dirección de datos en el momento de la muestra
Y las claves de clasificación predeterminadas se cambian a local_weight, mem, sym, dso,
symbol_daddr, dso_daddr, snoop, tlb, bloqueado, consulte '--mem-mode'.
-p, --parent =
Un filtro de expresiones regulares para identificar a los padres. El padre es un llamador de esta función y
buscado a través de la cadena de llamadas, por lo que requiere que se registre la información de la cadena de llamadas. los
patrón está en el formato de expresión regular extendido y el valor predeterminado es "^ sys_ | ^ do_page_fault", consulte
--clasificar con el futuro bebé.
-x, --excluir-otro
Mostrar solo las entradas con parentesco.
-w, --column-widths =
Forzar cada ancho de columna a la lista proporcionada, para una mayor legibilidad del terminal. 0 significa
sin límite (comportamiento predeterminado).
-t, --field-separator =
Use un carácter separador especial y no rellene con espacios, reemplazando todas las ocurrencias
de este separador en nombres de símbolo (y otra salida) con un . carácter, que así
es el único separador no válido.
-D, --dump-rastreo sin procesar
Volcar el rastro sin procesar en ASCII.
-g, --call-graph =
Mostrar cadenas de llamadas usando tipo, umbral de porcentaje mínimo, límite de impresión, orden de llamada, clasificación
clave y rama. Tenga en cuenta que el orden de los parámetros no es fijo, por lo que se puede
dado en una orden de arbitraje. Una excepción es el print_limit que debe ir precedido
por umbral.
print_type puede ser:
- plano: columna única, exposición lineal de cadenas de llamadas.
- gráfico: utilice un árbol de gráficos que muestre las tasas de gastos generales absolutos. (defecto)
- fractal: como gráfico, pero muestra tasas relativas. Cada rama de
el árbol se considera un nuevo objeto perfilado.
- ninguno: deshabilita la visualización de la cadena de llamadas.
El umbral es un valor porcentual que especifica un porcentaje mínimo a ser
incluido en el gráfico de llamadas de salida. El valor predeterminado es 0.5 (%).
print_limit solo se aplica cuando se usa la interfaz stdio. Es para limitar
número de entradas del gráfico de llamadas en una sola entrada del historial. Tenga en cuenta que necesita
debe darse después del umbral (pero no necesariamente consecutivo).
El valor predeterminado es 0 (ilimitado).
el pedido puede ser:
- callee: gráfico de llamadas basado en callee.
- llamador: gráfico de llamadas basado en llamador invertido.
El valor predeterminado es 'llamador' cuando se usa --children, de lo contrario 'llamador'.
sort_key puede ser:
- función: comparar funciones (por defecto)
- dirección: comparar en direcciones de códigos individuales
rama puede ser:
- sucursal: incluya la información de la última sucursal en el gráfico de llamadas cuando esté disponible.
Por lo general, es más conveniente usar --branch-history para esto.
--niños
Acumule la cadena de llamadas de los hijos a la entrada de los padres para que luego puedan aparecer en el
producción. La salida tendrá una nueva columna "Niños" y se ordenará según los datos.
Requiere que se registren cadenas de llamadas. Consulte la sección 'cálculo de gastos generales' para obtener más
Detalles.
--max-pila
Establezca el límite de profundidad de la pila al analizar la cadena de llamadas, cualquier cosa más allá del especificado
la profundidad será ignorada. Se trata de una compensación entre la pérdida de información y una
procesamiento especialmente para cargas de trabajo que pueden tener una pila de cadena de llamadas muy larga. Nota
que al usar la opción --itrace, el tamaño de la cadena de llamadas sintetizada anulará esto
valor si el tamaño de la cadena de llamadas sintetizada es mayor.
Predeterminado: 127
-G, - invertido
alias para el gráfico de llamadas basado en llamadas invertidas.
--ignore-callees =
Ignore los destinatarios de las funciones que coinciden con la expresión regular dada. Esto tiene el efecto de
reuniendo a los llamadores de cada una de estas funciones en un lugar en el árbol del gráfico de llamadas.
--pretty =
Bonito estilo de impresión. clave: normal, crudo
--stdio
Utilice la interfaz stdio.
--tui
Utilice la interfaz TUI, que está integrada con anotaciones y permite hacer zoom en los DSO
o hilos, entre otras características. El uso de --tui requiere un tty, si no hay uno presente,
como cuando se conecta a otros comandos, se utiliza la interfaz stdio.
--gtk
Utilice la interfaz GTK2.
-k, --vmlinux =
nombre de ruta vmlinux
--kallsyms =
nombre de ruta de kallsyms
-m, --módulos
Cargar símbolos de módulo. ADVERTENCIA: Esto solo debe usarse con -k y un kernel LIVE.
-f, --fuerza
No te quejes, hazlo.
--symfs =
Busque archivos con símbolos relacionados con este directorio.
-C, --cpu
Solo informe muestras para la lista de CPU proporcionada. Se pueden proporcionar varias CPU como
lista separada por comas sin espacios: 0,1. Los rangos de CPU se especifican con -: 0-2.
El valor predeterminado es informar muestras en todas las CPU.
-M, --disassembler-style =
Establezca el estilo del desensamblador para objdump.
--fuente
Intercalar el código fuente con el código ensamblador. Habilitado de forma predeterminada, deshabilitar con
--sin fuentes.
--asm-crudo
Muestre la codificación de instrucciones sin procesar de las instrucciones de ensamblaje.
--mostrar-período total
Muestre una columna con la suma de períodos.
-Yo, --mostrar-info
Muestra información ampliada sobre el archivo perf.data. Esto agrega información que puede
ser muy grande y, por lo tanto, puede saturar la pantalla. Actualmente incluye: cpu y numa
topología del sistema anfitrión.
-b, --pila-rama
Utilice las direcciones de las ramas tomadas muestreadas en lugar de la dirección de instrucción para
construir los histogramas. Para generar una salida significativa, el archivo perf.data debe haber sido
obtenido usando perf record -b o perf record --branch-filter xxx donde xxx es una rama
opción de filtro. perf report es capaz de detectar automáticamente si un archivo perf.data contiene
pilas de ramas y cambiará automáticamente al modo de vista de rama, a menos que
--no-branch-stack se utiliza.
- historia de la rama
Agregue las direcciones de las ramas tomadas muestreadas a la pila de llamadas. Esto permite examinar
la ruta que siguió el programa a cada muestra. La recopilación de datos debe haber utilizado -b (o
-j) y -g.
--objdump =
Ruta al binario objdump.
--grupo
Muestren juntos la información del grupo de eventos.
--desmenuzar
Demangle los nombres de los símbolos a una forma legible por humanos. Está habilitado de forma predeterminada, deshabilite con
--no-exigir.
--demangle-kernel
Demangle los nombres de los símbolos del kernel a un formato legible por humanos (para kernels C ++).
--mem-modo
Utilice las direcciones de datos de las muestras además de las direcciones de instrucción para construir el
histogramas. Para generar una salida significativa, se debe haber obtenido el archivo perf.data
usando perf record -d -W y usando un evento especial -e cpu / mem-cargas / o -e
cpu / mem-stores /. Ver Perf Miembro para un acceso más sencillo.
- límite de porcentaje
No muestre las entradas que tengan una sobrecarga por debajo de ese porcentaje. (Predeterminado: 0).
--porcentaje
Determine cómo mostrar el porcentaje de gastos generales de las entradas filtradas. Los filtros pueden ser
aplicado por --comms, --dsos y / o --symbols opciones y operaciones de Zoom en la TUI
(hilo, dso, etc).
"relativo" significa que es relativo a las entradas filtradas solo para que el
La suma de las entradas mostradas será siempre del 100%. "absoluto" significa que retiene
el valor original antes y después de aplicar el filtro.
--encabezamiento
Muestra la información del encabezado en el archivo perf.data. Esto incluye diversa información como
nombre de host, sistema operativo y versión perf, cpu / mem info, línea de comando perf, lista de eventos, etc.
Actualmente, solo la salida --stdio admite esta función.
--sólo encabezado
Mostrar solo el encabezado perf.data (fuerza --stdio).
--itraza
Opciones para decodificar datos de rastreo de instrucciones. Las opciones son:
sintetizo eventos de instrucciones
b sintetizar eventos de ramas
c sintetizar eventos de ramas (solo llamadas)
r sintetizar eventos de ramas (solo devoluciones)
x sintetizar eventos de transacciones
e sintetizar eventos de error
d crear un registro de depuración
g sintetizar una cadena de llamadas (usar con iox)
l sintetizar las últimas entradas de la rama (usar con iox)
El valor predeterminado es todos los eventos, es decir, lo mismo que --itrace = ibxe
Además, el período (predeterminado 100000) para eventos de instrucciones
se puede especificar en unidades de:
yo instrucciones
garrapatas
ms milisegundos
nosotros microsegundos
ns nanosegundos (predeterminado)
También el tamaño de la cadena de llamadas (predeterminado 16, máx. 1024) para obtener instrucciones o
Se pueden especificar eventos de transacciones.
También el número de entradas de la última rama (por defecto 64, máx. 1024) para
Se pueden especificar instrucciones o eventos de transacciones.
Para deshabilitar la decodificación por completo, use --no-itrace.
--ruta-de-origen-completa
Muestra la ruta completa de los archivos de origen para la salida de srcline.
--show-ref-llamada-grafo
Cuando se muestrean varios eventos, es posible que no sea necesario recopilar gráficos de llamadas para todos
de ellos. Los sitios de muestreo suelen estar cerca y es suficiente para recolectar la
callgraphs en un evento de referencia. Por lo tanto, el usuario puede usar el modificador de evento "call-graph = no" para
deshabilite el gráfico de llamadas para otros eventos para reducir la sobrecarga. Sin embargo, el informe de rendimiento no puede
mostrar gráficos de llamadas para el evento que deshabilita el gráfico de llamadas. Esta opción extiende la
informe de rendimiento para mostrar gráficos de llamadas de referencia, que se recopilaron por evento de referencia, en ningún
evento callgraph.
- filtro de enchufe
Informe únicamente las muestras en el zócalo del procesador que coincidan con este filtro
GASTOS GENERALES CÁLCULO
La sobrecarga se puede mostrar en dos columnas como Niños y Propia cuando perf recolecta
cadenas de llamadas. los yo Los gastos generales se calculan simplemente sumando todos los valores de período de la
entrada - generalmente una función (símbolo). Este es el valor que perf muestra tradicionalmente y
suma de todos los yo los valores generales deben ser del 100%.
La niños la sobrecarga se calcula sumando todos los valores de período de las funciones secundarias, de modo que
que puede mostrar la sobrecarga total de las funciones de nivel superior incluso si no
ejecutar mucho directamente. Niños aquí significa funciones que son llamadas desde otro (padre)
función.
Puede resultar confuso que la suma de todos los niños los valores generales superan el 100% desde
cada uno de ellos ya es una acumulación de yo sobrecarga de sus funciones secundarias. Pero con
esta habilitado, los usuarios pueden encontrar qué función tiene la mayor sobrecarga incluso si las muestras son
repartidos entre los niños.
Considere el siguiente ejemplo; hay tres funciones como las siguientes.
.pies C
void foo (vacío) {
/* hacer algo */
}
barra vacía (vacío) {
/* hacer algo */
foo ();
}
int main (void) {
bar()
0 regresar;
}
.pie
En este caso foo es hijo de de caramelos y de caramelos es un hijo inmediato de principal so foo también es un
niño de principal. En otras palabras, principal es padre de foo y de caramelos y de caramelos es padre de
foo.
Suponga que todas las muestras se registran en foo y de caramelos solamente. Cuando se graba con cadenas de llamada
la salida mostrará algo como a continuación en la salida habitual (solo autoadministración) de perf
informe:
.pies C
Símbolo de arriba
........ .................................
60.00% foo
|
--- foo
de caramelos
principal
__libc_start_main
Barra 40.00%
|
--- bar
principal
__libc_start_main
.pie
Cuando la opción --children está habilitada, la yo valores generales de funciones secundarias (es decir,
foo y de caramelos) se agregan a los padres para calcular el niños gastos generales. En este caso el
el informe podría mostrarse como:
.pies C
Niños, uno mismo, símbolo
........ ........ ....................
100.00% 0.00% __libc_start_main
|
--- __libc_start_main
100.00% 0.00% principal
|
--- principal
__libc_start_main
Barra de 100.00% 40.00%
|
--- bar
principal
__libc_start_main
60.00% 60.00% foo
|
--- foo
de caramelos
principal
__libc_start_main
.pie
En la salida anterior, el yo sobrecarga de foo (60%) se agregó al niños sobrecarga de
de caramelos, principal y __libc_start_main. Asimismo, el yo sobrecarga de de caramelos (40%) se añadió al
niños sobrecarga de principal y \ _ \ _ libc_start_main.
So \ _ \ _ libc_start_main y principal se muestran primero ya que tienen el mismo (100%) niños
sobrecarga (a pesar de que tienen cero yo arriba) y son los padres de foo y
de caramelos.
Desde v3.16 el niños la sobrecarga se muestra de forma predeterminada y la salida se ordena por su
valores. los niños la sobrecarga se deshabilita especificando la opción --no-children en el
línea de comando o agregando informe.niños = false or top.niños = false en el perf
archivo de configuración.
Use perf-report en línea usando los servicios de onworks.net