простейший инструмент для измерения хита/промаха кэша программы C и времени процессора в linux?
Я пишу небольшую программу на C, и я хочу измерить ее производительность.
Я хочу посмотреть, сколько времени он работает в процессоре и сколько кэш-хит + промахов он сделал. Информация о переключателях контекста и использовании памяти также была бы приятной.
выполнение программы занимает меньше секунды.
Мне Нравится Информация о/proc/[pid] / stat, но я не знаю, как ее увидеть после того, как программа умерла/была убитый.
какие идеи?
EDIT: я думаю, что Valgrind добавляет много накладных расходов. Вот почему я хотел простой инструмент, такой как /proc/[pid]/stat, который всегда есть.
3 ответов
использовать perf:
perf stat ./yourapp
посмотреть ядро wiki perf учебник для сведения. Это использует счетчики производительности оборудования вашего процессора, поэтому накладные расходы очень малы.
пример из Вики:
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
нет необходимости загружать модуль ядра вручную, в современной системе debian (с пакетом linux-base) он должен просто работать. С помощью комбинации "perf record-a" / "perf report" вы также можете выполнить полное профилирование системы. Любой приложение или библиотека с отладочными символами будут отображаться с подробностями в отчете. Для визуализации графики пламени кажется, работает хорошо.
вы также можете использовать
/usr/bin/time -v YourProgram.exe
Он покажет вам всю эту информацию:
/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
вы также можете использовать флаг-f для форматирования вывода в соответствии с вашими потребностями.
пожалуйста, обязательно вызовите эту программу, используя ее полный путь, иначе она вызовет команду "Время", и это не то, что вам нужно...
надеюсь, что это помогает!
лучший инструмент для вас называется отчет. Он способен профилирования памяти, построения call-graph и многое другое.
sudo apt get install valgrind
valgrind ./yourapp
однако, чтобы получить время выполнения вашей программы, вы можете использовать time(8)
утилита linux.
time ./yourapp