我正在尝试测量 X86-64 上的 TLB(Translation Look Aside Buffer)未命中惩罚。特别是二级统一TLB的未命中惩罚,即TLB walk的成本。
我一直在研究英特尔 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 未命中惩罚。
关于我可以使用哪些其他工具进行快速估算的任何提示都会非常有帮助。