1

我正在尝试测量 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 未命中惩罚。

关于我可以使用哪些其他工具进行快速估算的任何提示都会非常有帮助。

4

1 回答 1

1

我在intel-pcm官网上看到一篇帖子,说PCM由于其实现机制,不能添加TLB miss之类的指标:

PCM 使用自由运行的计数器,即在启动时使用一组固定的事件对计数器进行一次编程。PCM 已经使用了所有可用的核心计数器,我们不能添加任何额外的指标(如 TLB 未命中)而不放弃其他一些指标(如缓存未命中)。

于 2020-03-21T02:20:20.820 回答