Я использую perf, чтобы показать ошибки кэширования, LL C -load-misses LL C -stores LL C -store-misses. Ниже приведены три различных теста, но во всех случаях я не могу получить статистику по событиям в кэше по строке исходного кода, где произошли события в кэше. Исходный код - это язык ассемблера, скомпилированный с символами карликов, поэтому строки исходного кода отображаются, но отображаются только 22 строки, и ни одна из этих строк исходного кода не обращается к памяти. Сервер представляет собой голое железо Xeon Cascade Lake.
Тест № 1: запустить запись perf, за которой следует perf annotate:
sudo perf record ./Test_Program.exe
sudo perf annotate -v -l
Perf annotate показывает только 22 строки исходного кода из списка более 800 строк кода сборки, начиная со строки 392 Я могу циклически перемещаться по экрану, используя «t», а заголовки столбцов - это проценты, период и выборки, но ничего о событиях кэша.
Тест № 2: запустить perf запись с параметрами, после чего следует perf annotate:
sudo perf record ./Test_Program.exe LLC-load-misses LLC-stores LLC-store-misses
sudo perf annotate -v -l
Perf annotate показывает то же самое, что и в Test # 1 - только 22 строки исходного кода, и ни одна из строк не показывает события кэша.
Тест № 3: запустите perf stat:
sudo perf stat -e task-clock,cycles,instructions,cache-references,cache-misses ./Test_Program.exe
Статистика счетчика производительности для './Test_Program.exe:
231.717180 task-clock (msec) # 2.534 CPUs utilized
517992739 cycles # 2.235 GHz
168966080 instructions # 0.33 insn per cycle
2801888 cache-references # 12.092 M/sec
392410 cache-misses # 14.005 % of all cache refs
Итак, мои вопросы:
- Как просмотреть статистику событий кэша (LL C -load-misses LL C -stores LL C -store-misses) с аннотированием?
- Почему я вижу только 22 строки источника?
- Почему я не вижу заголовок события кэша при циклическом просмотре аннотации?