首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ubuntu中分析TLB命中和TLB未命中

如何在ubuntu中分析TLB命中和TLB未命中
EN

Stack Overflow用户
提问于 2012-02-16 02:14:33
回答 2查看 1.3K关注 0票数 2

我已经编写了一个简单的C++程序,使用for-loop打印从1到100的数字。我想要找出运行时特定程序的TLB命中和未命中的数量。有没有可能得到这些数据?

我正在使用Ubuntu。我用过perf工具。但它在不同的时代产生了不同的结果。我非常困惑我的代码的哪一部分导致了如此大量的TLB命中、TLB未命中和缓存未命中。

当然,可能还有其他进程同时运行,比如Ubuntu GUI。但是,这个结果也包括这些过程吗?我使用的命令: perf stat hellocc dTLB-为‘./ -e’加载-e dTPerformance计数器统计信息:

结果:第一次

代码语言:javascript
复制
       909,822 dTLB-loads                                                  
         2,023 dTLB-misses               #    0.22% of all dTLB cache hits 
         4,512 cache-misses                                                

   0.006821182 seconds time elapsed

LB-未命中。/hellocc

结果:第二次--‘./hellocc’的性能计数器统计信息:

代码语言:javascript
复制
       907,810 dTLB-loads                                                  
         2,045 dTLB-misses               #    0.23% of all dTLB cache hits 
         4,533 cache-misses                                                

   0.006780635 seconds time elapsed

我的简单代码:

代码语言:javascript
复制
#include <iostream>    
using namespace std;    
int main
{    
    cout << "hello" << "\n";    
    for(int i=1; i <= 100; i = i + 1)    
        cout<< i << "\t" ;    
    return 0;    
}
EN

回答 2

Stack Overflow用户

发布于 2012-02-16 02:23:06

您可以使用cachegrind来模拟这一过程,它是valgrind的一部分。

Cachegrind模拟您的程序如何与机器的缓存层次结构和(可选)分支预测器交互。它模拟具有独立的一级指令和数据缓存(I1和D1)的机器,并由统一的二级缓存(L2)提供支持。这与许多现代机器的配置完全匹配。

虽然它不是你的硬件,我认为你不能拿到,但它是一个很好的替身。

票数 4
EN

Stack Overflow用户

发布于 2012-02-16 02:21:37

你的程序的缓存行为取决于当时你的系统上还发生了什么。

在Linux系统上,有许多进程正在运行,例如X服务器和窗口管理器、终端、编辑器、各种守护进程,以及您正在运行的任何其他进程(例如web浏览器)。

根据调度器的反复无常,以及这些其他程序对系统的要求,您的程序数据可能留在缓存中,也可能不留在缓存中(调度器甚至可能将您的进程完全分页到交换文件),因此缓存未命中的数量将根据正在运行的其他应用程序而有所不同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9298910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档