我正在用C编写一个小程序,我想测量它的性能.
我想知道它在处理器中运行了多少时间以及它有多少缓存命中+未命中.有关上下文切换和内存使用的信息也很好.
该程序执行时间不到一秒.
我喜欢/ proc/[pid]/stat的信息,但我不知道如何在程序死亡/被杀之后看到它.
有任何想法吗?
编辑:我认为Valgrind增加了很多开销.这就是为什么我想要一个简单的工具,比如/ proc/[pid]/stat,它总是在那里.
performance measurement context-switch cpu-cache memcache-stats
我正在开发一个用C++编写的系统,在Linux上的Xeon上运行,需要尽可能快地运行.在RAM中保存的大型数据结构(基本上是结构数组)超过10 GB,并且需要定期访问它的元素.我想修改数据结构以尽可能地使用系统的缓存机制.
目前,访问主要在整个结构中随机进行,每次读取1-4个32位的整数.在同一个地方发生另一次读取需要很长时间,因此缓存没有任何好处.
现在我知道当你从RAM中的随机位置读取一个字节时,不仅仅是那个字节被带入缓存.我的问题是引入了多少字节?是16,32,64,4096吗?这被称为缓存线吗?
我希望重新设计数据结构,以最大限度地减少随机RAM访问,并使用缓存而不是缓存.知道在随机访问中将多少字节拉入缓存将告知我所做的设计选择.
更新(2014年10月): 在我提出上述问题后不久,该项目被搁置.它已经恢复并基于下面答案中的建议,我进行了一些围绕RAM访问的实验,因为似乎TLB捶打可能正在发生.我修改了程序以运行大页面(2MB而不是标准的4KB),观察到一个小的加速,大约2.5%.我找到了关于在这里和这里设置大页面的很好的信息.