Я пытаюсь измерить штраф за промах TLB (перевод в сторону буфера) на X86-64. В частности, штраф за пропущенный унифицированный TLB второго уровня, который является стоимостью обхода TLB.
Я изучал инструмент Intel PCM, но не смог понять, как его использовать для этой цели. Ниже приведен код, который я использую для получения счетчиков производительности по библиотекам PCM:
#include "cpucounters.h" // Intell PCM monitoring tool
int main() {
PCM * m = PCM::getInstance();
PCM::ErrorCode returnResult = m->program();
if (returnResult != PCM::Success){
std::cerr << "Intel's PCM couldn't start" << std::endl;
std::cerr << "Error code: " << returnResult << std::endl;
exit(1);
}
SystemCounterState before_sstate = getSystemCounterState();
// CODE TO MEASURE TLB MISS PENALTY
SystemCounterState after_sstate = getSystemCounterState();
std::cout << "Instructions per clock:" << getIPC(before_sstate,after_sstate) << std::endl;
std::cout << "Bytes read:" << getBytesReadFromMC(before_sstate,after_sstate) ;
}
С этим я могу получить IPC. Но я не знаю, как будет выглядеть тестовая программа, чтобы измерить штраф за промах TLB с высокой точностью.
Любые советы о том, какие другие инструменты я могу использовать для быстрой оценки, были бы очень полезны.