Почему Linux perf использует событие l1d.replacement для "L1 dcache misses" на x86?

На 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?

0 ответов

Другие вопросы по тегам