Почему Linux perf использует событие l1d.replacement для "L1 dcache misses" на x86? - PullRequest
0 голосов
/ 04 сентября 2018

В Intel x86, Linux использует событие l1d.replacements для реализации своего L1-dcache-load-misses события.

Это событие определяется следующим образом:

Считает замены строк данных L1D, включая оппортунистические. замены и замены, требующие замены или блок-для замены.

Возможно, наивно, я бы ожидал, что perf будет использовать что-то вроде mem_load_retired.l1_miss, которое поддерживает PEBS и определяется как:

Считает инструкции по загрузке на пенсию как минимум с одним пропущенным мопом кэш L1. (Поддерживает PEBS)

Значения событий обычно не очень близки, а иногда они сильно различаются. Например:

$ocperf stat -e mem_inst_retired.all_loads,l1d.replacement,mem_load_retired.l1_hit,mem_load_retired.l1_miss,mem_load_retired_fb_hit head -c100M /dev/urandom > /dev/null 

 Performance counter stats for 'head -c100M /dev/urandom':

       445,662,315      mem_inst_retired_all_loads                                   
            92,968      l1d_replacement                                             
       443,864,439      mem_load_retired_l1_hit                                     
         1,694,671      mem_load_retired_l1_miss                                    
            28,080      mem_load_retired_fb_hit                                     

Существует более чем 17 раз больше "пропусков L1", измеренных mem_load_retired.l1_miss по сравнению с l1d.replacement. И наоборот, вы также можете найти примеры, когда l1d.replacement намного выше, чем mem_load_retired счетчики.

Что именно l1d.replacement измеряет, почему он был выбран в ядре, и является ли он лучшим прокси для пропусков d-кэша L1, чем mem_load_retired.l1_miss?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...