Как я могу использовать Linux Perf и интерпретировать его вывод, чтобы понять, что процессорный кеш пропускает? - PullRequest
1 голос
/ 09 марта 2019

Я пытаюсь измерить, сколько раз ссылки на память пропускают какой-либо кэш процессора и нуждаются в получении строки кеша из памяти. У меня есть очень простая программа, которая загружает 100 миллионов 4-байтовых целых чисел в массив, а затем сканирует или исследует случайным образом. Я измеряю время, а затем использую perf для сообщения о различных событиях, связанных с кэшем: LLC-load, LLC-load-misses, LLC-store, LLC-store-misses. Я использую Pop OS 18.10 (вариант Ubuntu 18.10).

Я запускаю программу тремя способами:

1) Просто загрузите массив (целых 100 м).

2) Загрузить массив и сканировать в физическом порядке.

3) Загрузите массив и прочитайте 100 м случайных мест расположения массива.

# 3 в 40 раз медленнее, чем # 2, что неудивительно.

У меня возникли некоторые проблемы, когда я узнал, какие перф события нужно исследовать, и как интерпретировать результаты:

  • Я обнаружил события LLC- *, прибегая к помощи Google, но они не упоминаются "списком перфектов".

  • Я вычитаю количество событий прогона только для загрузки (# 1) из прогонов загрузки и сканирования (# 2, # 3). Числа, как правило, ниже от физического сканирования (# 2) по сравнению с произвольным доступом (# 3). Но, прочитав документацию и посмотрев на цифры, я не совсем понимаю, что представляют собой различные события.

  • Считает ли перф события или отбирает их? Если это истинный счет, то я действительно не могу понять числа, которые я вижу. (Например, количество событий LLC-load-misses не совпадает с количеством передач строки кэша, которые должны быть необходимы.)

...