performance - velocidad - ¿La herramienta más sencilla para medir el éxito/fallo de la caché del programa C y el tiempo de CPU en Linux?
ver caracteristicas de mi pc linux centos (3)
Estoy escribiendo un pequeño programa en C, y quiero medir su rendimiento.
Quiero ver cuánto tiempo se ejecuta en el procesador y cuántos fallos de cache hit + ha generado. También sería bueno tener información sobre los cambios de contexto y el uso de la memoria.
El programa tarda menos de un segundo en ejecutarse.
Me gusta la información de / proc / [pid] / stat, pero no sé cómo verla después de que el programa haya muerto / haya sido asesinado.
¿Algunas ideas?
EDIT: Creo que Valgrind agrega una gran cantidad de gastos generales. Es por eso que quería una herramienta simple, como / proc / [pid] / stat, que siempre está ahí.
La mejor herramienta para ti se llama valgrind . Es capaz de crear perfiles de memoria, crear gráficos de llamadas y mucho más.
sudo apt get install valgrind
valgrind ./yourapp
Sin embargo, para obtener el tiempo de ejecución de su programa, puede usar la utilidad time(8)
linux.
time ./yourapp
También puedes usar
/usr/bin/time -v YourProgram.exe
Te mostrará toda esta información:
/usr/bin/time -v ls
Command being timed: "ls"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 60%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 4080
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 314
Voluntary context switches: 1
Involuntary context switches: 1
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
También puede utilizar el indicador -f para formatear la salida para que se ajuste a sus necesidades.
Por favor, asegúrese de llamar a este programa usando su ruta completa, de otra manera llamará el comando ''tiempo'' y eso no es lo que necesita ...
¡Espero que esto ayude!
Use perf :
perf stat ./yourapp
Vea el tutorial del kernel wiki perf para más detalles. Esto utiliza los contadores de rendimiento de hardware de su CPU, por lo que la sobrecarga es muy pequeña.
Ejemplo de la wiki:
perf stat -B dd if=/dev/zero of=/dev/null count=1000000
Performance counter stats for ''dd if=/dev/zero of=/dev/null count=1000000'':
5,099 cache-misses # 0.005 M/sec (scaled from 66.58%)
235,384 cache-references # 0.246 M/sec (scaled from 66.56%)
9,281,660 branch-misses # 3.858 % (scaled from 33.50%)
240,609,766 branches # 251.559 M/sec (scaled from 33.66%)
1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%)
2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%)
217 page-faults # 0.000 M/sec
3 CPU-migrations # 0.000 M/sec
83 context-switches # 0.000 M/sec
956.474238 task-clock-msecs # 0.999 CPUs
0.957617512 seconds time elapsed
No es necesario que cargue un módulo del kernel manualmente, en un sistema Debian moderno (con el paquete linux-base) simplemente debería funcionar. Con el combo ''perf record -a'' / ''perf report'' también puede hacer un perfil completo del sistema. Cualquier aplicación o biblioteca que tenga símbolos de depuración se mostrará con detalles en el informe. Para la visualización los gráficos de llamas parecen funcionar bien.