Назад | Перейти на главную страницу

Linux получает коэффициент попадания в кэш процессора

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 флаг, я должен проверить почему