测量缓存内存使用情况

时间:2014-10-29 18:54:26

标签: c++ c linux

我想调用一个函数并测量函数使用的数据缓存内存量。在C或C ++或基于Linux的系统中的任何库中是否有任何过程?

测量时间就像

start = timestamp();
proc()
end = timestamp();
proctime = end - start;

1 个答案:

答案 0 :(得分:1)

简短回答:

如果不模拟处理器,可能无法完成。

答案很长:

在用户模式下,在任何现代操作系统中,您都无法获得那种数据。您可以使用oprofileperf来获取缓存命中&遗漏数字 - 遗憾的是,它并不能准确地告诉你你的过程造成了多少以及系统中其他进程有多少(因为处理器计算出处理器具有全局性,并且该工具不知道何时出现进程切换进/出,只有“当计数器达到触发值时,哪个进程正在运行”)。

换句话说,这将提供统计数据,而不是您想要衡量的实际数字。此外,它实际上不会告诉您是否使用1%或100%的缓存,只是缓存中使用了多少数据,而不是缓存中的数据量 - 如果你真的很聪明你可能写一些得到95%缓存未命中的东西,但只使用少量的缓存行[但实际上需要一些工作才能在一个或多个具有N * cache_size距离的内存块中使用正确的地址他们之间]。

然而,这是一个非常可行的模型,用于确定“我的代码是否存在缓存缺失问题”。

我不知道有什么方法可以实际做你想要的,除了极端的方法:

  1. 将代码放在内核模块中。
  2. 禁用所有中断。
  3. 设置perf计数器以计算数据L1,L2等的缓存命中/未命中。
  4. 运行要测试的功能。
  5. 收集结果。
  6. 这变得非常不实用,因为代码将无法执行任何I / O或访问被换出的内存,以及如果中断关闭超过几毫秒,操作系统可能会感到不安。 ..

    链接到Linux内核的“perf”项目: https://perf.wiki.kernel.org/index.php/Main_Page 如果你有一个相当新的内核,这将是衡量一般性能的理想工具。