Подтвердить что ты не робот

Что означают события персидского кеша?

Я пытаюсь понять, почему модифицированная программа на C работает быстрее, чем ее не модифицированная часть счетчика (я добавляю очень немного строк кода для выполнения дополнительной работы). В этом контексте я подозреваю, что "кеш-эффекты" являются основным объяснением (кешем команд). Таким образом, я получаю инструмент perf (https://perf.wiki.kernel.org/index.php/Main_Page), но, к сожалению, я не могу понять значение его результатов в отношении промахов в кэше.

Предусмотрено несколько событий о кеше:

  cache-references                                   [Hardware event]
  cache-misses                                       [Hardware event]
  L1-dcache-loads                                    [Hardware cache event]
  L1-dcache-load-misses                              [Hardware cache event]
  L1-dcache-stores                                   [Hardware cache event]
  L1-dcache-store-misses                             [Hardware cache event]
  L1-dcache-prefetches                               [Hardware cache event]
  L1-dcache-prefetch-misses                          [Hardware cache event]
  L1-icache-loads                                    [Hardware cache event]
  L1-icache-load-misses                              [Hardware cache event]
  L1-icache-prefetches                               [Hardware cache event]
  L1-icache-prefetch-misses                          [Hardware cache event]
  LLC-loads                                          [Hardware cache event]
  LLC-load-misses                                    [Hardware cache event]
  LLC-stores                                         [Hardware cache event]
  LLC-store-misses                                   [Hardware cache event]
  LLC-prefetches                                     [Hardware cache event]
  LLC-prefetch-misses                                [Hardware cache event]
  dTLB-loads                                         [Hardware cache event]
  dTLB-load-misses                                   [Hardware cache event]
  dTLB-stores                                        [Hardware cache event]
  dTLB-store-misses                                  [Hardware cache event]
  dTLB-prefetches                                    [Hardware cache event]
  dTLB-prefetch-misses                               [Hardware cache event]
  iTLB-loads                                         [Hardware cache event]
  iTLB-load-misses                                   [Hardware cache event]
  branch-loads                                       [Hardware cache event]
  branch-load-misses                                 [Hardware cache event]
  node-loads                                         [Hardware cache event]
  node-load-misses                                   [Hardware cache event]
  node-stores                                        [Hardware cache event]
  node-store-misses                                  [Hardware cache event]
  node-prefetches                                    [Hardware cache event]
  node-prefetch-misses                               [Hardware cache event]

Где я могу найти объяснение об этих полях? Событие с кэшированием всегда меньше, чем другие события. Что измеряет это событие?

Как интерпретировать пропуски L7-icache-нагрузок 26760 для ls против 5708 промахов в следующем примере?

perf stat -e L1-icache-load-misses ls
caches  caches~  out

 Performance counter stats for 'ls':

            26,760 L1-icache-load-misses                                       

       0.002816690 seconds time elapsed



perf stat -e cache-misses ls
caches  caches~  out

 Performance counter stats for 'ls':

             5,708 cache-misses                                                

       0.002822122 seconds time elapsed
4b9b3361

Ответ 1

Кажется, что событие cache-misses представляет собой сумму всех других промахов в кэше (L1-dcache-load-misses и т.д.). На самом деле это не так.

Событие cache-misses представляет собой номер доступа к памяти, который не может обслуживаться каким-либо кешем.

Я признаю, что перфекционная документация не самая лучшая.

Однако, вы можете много узнать об этом, читая (предполагая, что вы уже хорошо знаете, как работает процессор и блок мониторинга производительности, это явно не курс компьютерной архитектуры), документ perf_event_open ( ):

http://web.eece.maine.edu/~vweaver/projects/perf_events/perf_event_open.html

Например, прочитав его, вы увидите, что событие cache-misses, показанное первичным списком, соответствует PERF_COUNT_HW_CACHE_MISSES

Ответ 2

Некоторые ответы:

  • L1 - это кеш уровня 1, самый маленький и самый быстрый. LLC, с другой стороны, относится к последнему уровню иерархии кэша , тем самым обозначая самый большой, но самый медленный кэш.
  • i vs. d выделяет кеш команд из кэша данных. Только L1 разделяется таким образом, другие кеши разделяются между данными и инструкциями.
  • TLB относится к трансляции lookaside buffer, кэш, используемый при сопоставлении виртуальных адресов с физическими.
  • Различные счетчики TLB в зависимости от того, относится ли указанный адрес к инструкции или к некоторым данным.
  • Для доступа к данным разные счетчики хранятся в зависимости от того, было ли прочитано, записано или предварительно выбрано заданное место памяти (то есть получено для чтения через некоторое время).
  • Количество промахов указывает, как часто доступный элемент данных был доступен, но не присутствовал в кеше.

Ответ 3

Из-за ограничения репутации комментария я не могу ответить в комментарии Mvg. Согласно справочнику, аппаратное событие относится к тем событиям, которые могут быть отображены непосредственно в evnet PMU. Но события аппаратного кэша относятся к некоторым именам аппаратных событий, предоставляемым perf, которые могут быть сопоставлены с фактическими событиями, предоставляемыми процессором.