我需要一个非常精确的时间部分的我的程序。我可以使用的常规高分辨率钟,但这将返回wallclock时间,这不是我需要的:我needthe花费的时间运行的只有我的过程。

我清楚地记得看到一个Linux内核贴,允许我时间我进程纳秒的精确度,除非我忘了签吧,我忘记了名字贴,以及:(.

我记得它的工作原理是:

在每一个方面交换,它会读取出来的价值的高分辨率钟,并添加的三角洲的最后两个价值观的过程时间的运行过程。这产生了一种高分辨率的准确地图的过程'实际的处理时间。

经常程序时保持使用规则时钟,这是我相信,毫秒的精确(1000赫兹),这太大了我的目的。

任何人都不会知道什么是仁补丁我在说什么?我还记得就像是一个单词的一封信之前或之后--喜欢的东西'rtimer'或什么,但我不记得确切。

(其他建议也欢迎)


完全公平的调度程序提出建议的马可不是我一直在寻找什么,但是它看起来很有希望。我的问题是,电话我就可以用得到处理时间仍然没有返回值颗粒够的。

  • 次()返回值21,22,在毫秒。
  • 时钟()返回值21000,22000,同样的粒度。
  • getrusage()返回等价值观210002,22001(和somesuch),他们看到有一个好一点的准确性,但对值看,显然相同。

因此,现在的问题,我可能具有的是,核有我需要的信息,我只是不知道系统的呼吁,将会返回。

有帮助吗?

解决方案

如果你是在找这个水平的决定时,你可能是在试图做一些微型最优化。如果这样的话,你应该看看 老爹.它不仅提供两个壁钟以及虚拟(仅处理)时的信息,它还提供了访问CPU事件柜台,可能是不可缺少的,当你正试图改善性能。

http://icl.cs.utk.edu/papi/

其他提示

看看 这个问题 对于一些更多的信息。

我已经用于这样的事情是gettimeofday().它提供了一个结构与秒和微秒。叫它的代码之前,并再次之后。然后就减去两个结构的使用timersub,你可以把时间花了几秒钟内从tv_usec领域。

如果你需要非常小时间单位(I assume)测试的软件,我建议刚刚运行的零件你想要的时间在一个循环中的数以百万计的时间,花时间之前和之后的循环和计算的平均水平。一个很好的副作用,这样做的(除了不需要找出如何使用毫微秒)的是,你将获得更多的结果一致,因为随机引起的开销操作系统sceduler的平均值。

当然,除非你的程序并不需要,以便能够运行的数以百万计的时间在一个第二,它可能是足够快的,如果你不能衡量一毫秒的运行时间。

我相信氟氯化碳(完全公平的调度程序)是你在找什么。

你可以使用的高精度的活动计时器(HPET)如果你有一个相当新的2.6核心。检查了 Documentation/hpet.txt 在如何使用它。这种解决方案的平台依赖虽然我相信它仅适用于新的x86系统。HPET至少有一个10mhz计时器,所以它应该适合你的要求很容易。

我相信几个支持实现从飞思卡尔支持一个周期的确切指示反。我使用这一数年前的配置文件的高度优化码但我不记得什么它被称为。我相信飞思卡尔设有一个内核贴,你必须适用于为了访问,它从用户的空间。

http://allmybrain.com/2008/06/10/timing-cc-code-on-linux/

可能对你有帮助(直接的,如果你正在这样做C/C++,但我希望它会给你指针,甚至如果你不出)...它要求提供微秒的精确度,这只有通过你的标准。:)

我想我找到的核心补我一直在寻找。发布这里所以我不会忘记的链接:

http://user.it.uu.se/~mikpe/linux/perfctr/ http://sourceforge.net/projects/perfctr/

编辑:它的工作对我而言,虽然不是很方便用户。

尝试CPU 时间戳计数?维基百科似乎建议使用clock_gettime().

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top