AFAIK у многих современных процессоров есть счетчики промахов / попаданий в кеш-память.
Есть ли API / программа, которая может запросить это? Есть ли способ сбросить счетчики?
Меня интересует любая общая программа или программа для конкретного процессора.
Примечание. Мне известно о cachegrind, но это моделирование, а не фактический счетчик ЦП.
Хорошо, я украл еще несколько ресурсов и, похоже, для счетчиков попаданий / промахов в кэше ЦП мы должны перейти к трассировке отдельного процесса или pid или tid. Другими словами, perf и oprofile.
Например, perf stat дает это.
Performance counter stats for 'ls':
3.905621 task-clock # 0.831 CPUs utilized
1 context-switches # 0.000 M/sec
0 CPU-migrations # 0.000 M/sec
267 page-faults # 0.068 M/sec
379,003 cycles # 0.097 GHz [24.55%]
1,332,419 stalled-cycles-frontend # 351.56% frontend cycles idle [36.65%]
<not counted> stalled-cycles-backend
833,177 instructions # 2.20 insns per cycle
# 1.60 stalled cycles per insn
580,745 branches # 148.695 M/sec [95.65%]
37,799 branch-misses # 6.51% of all branches [71.09%]
0.004697863 seconds time elapsed
Oprofile дает аналогичный результат, но производительность довольно хороша, imo.
Другое дело, что для банков памяти numastat дает вам другой уровень детализации.
$ numastat
node0
numa_hit 74263001
numa_miss 0
numa_foreign 0
interleave_hit 15459
local_node 74263001
other_node 0
Да, это система с 1 узлом.
В этом вопрос ответ они говорят об инструментах Linux для профилирования кеш-промахов:
perf:
$ perf stat ./yourapp
$ perf stat -B dd if=/dev/zero of=/dev/null count=1000000
valgrind:
$ valgrind ./yourapp
но также time
который теоретически считает ошибки страниц:
$ time -v YourProgram.exe
в моей системе он не принимает -v
флаг, я должен проверить почему