Я запускаю Linux на 32-нм процессоре Intel Westmere. У меня есть проблема с кажущимися противоречивыми данными о количестве пропущенных номеров DTLB из счетчиков производительности. Я провел два эксперимента с тестовым доступом случайной памяти программы (однопоточный) следующим образом:Номер отклонения номера DTLB, считающий несоответствие
Эксперимента (1): Я подсчитывал с помощью DTLB пропускает следующий счетчиком производительности
DTLB_MISSES.WALK_COMPLETED ((49H событие, UMASK 02H)
Experimt (2) Я подсчитывал DTLB пропускает путем суммирования следующих два значения счетчика
MEM_LOAD_RETIRED.DTLB_MISS (Событие CBH, Umask 80H)
и
MEM_STORE_RETIRED.DTLB_MISS (Событие 0CH, Umask 01H)
Я ожидал, что выход из этих экспериментов, чтобы быть похожими. Однако я обнаружил, что цифры, указанные в эксперименте (1), почти в два раза больше, чем в эксперименте (2). Я не понимаю, почему это так.
Может ли кто-нибудь помочь пролить свет на это кажущееся несоответствие?
Благодаря
Arka
Спасибо за ваши комментарии, но я прошу отличаться. Первое событие учитывает только переходы по страницам после промахов во всех TLB (прохождение страницы не запускается, если промахи L1-TLB в L2 TLB). С другой стороны, похоже, что второе событие может включать как пропуски L1, так и L2 TLB. Я также убедился, что предварительные выборки s/w не используются, и вся память предварительно сработала. Единственное, что, вероятно, осталось, - это пропуски DTLB из-за пропусков. Тем не менее, я думал, так как считал, что только «завершенные» проходы страницы не ходят по страницам, которые также заботятся. Я что-то упустил? – Arka
Ну, «завершено» здесь эффективно означает «любой, кто пропустил все уровни TLB», и разница в вашем случае может быть объяснена пропуском, предварительной выборкой HW и, возможно, некоторой неточностью (хотя я не могу это доказать) в первом случае (как это не точное событие, а два других точны). – user2638717