相关疑难解决方法(0)

Linux中的微秒准确(或更好)处理时序

我需要一种非常准确的方法来计算我的程序的一部分.我可以使用常规的高分辨率时钟,但这将返回挂钟时间,这不是我需要的:我需要花时间只运行我的进程.

我清楚地记得看到一个Linux内核补丁,它允许我将我的进程计时到纳秒精度,除了我忘了给它添加书签,我也忘记了补丁的名称:(.

我记得它是如何工作的:

在每个上下文切换时,它将读出高分辨率时钟的值,并将最后两个值的增量添加到正在运行的进程的处理时间.这样可以生成过程实际处理时间的高分辨率精确视图.

使用常规时钟保持常规处理时间,我相信毫秒精确(1000Hz),这对我来说太大了.

有谁知道我在说什么内核补丁?我还记得它就像一个带有字母的字母在它之前或之后 - 像'rtimer'之类的东西,但我记不清楚了.

(也欢迎其他建议)


Marko建议的完全公平调度程序不是我想要的,但看起来很有希望.我遇到的问题是,我可以用来获取处理时间的调用仍然没有返回足够精细的值.

  • times()返回值21,22,以毫秒为单位.
  • clock()返回值21000,22000,粒度相同.
  • getrusage()返回的值如210002,22001(以及其中一些),它们看起来有更好的准确性,但值看起来显着相同.

所以现在我可能遇到的问题是内核有我需要的信息,我只是不知道将返回它的系统调用.

linux real-time process timing high-resolution

13
推荐指数
2
解决办法
2万
查看次数

System.currentTimeMillis()方法真的返回当前时间吗?

基于链接中提出的想法,我实现了几种不同的"睡眠方法".其中一种方法是"二进制睡眠",它看起来像这样:

while (System.currentTimeMillis() < nextTimeStamp)
{
sleepTime -= (sleepTime / 2);
sleep(sleepTime);
}
Run Code Online (Sandbox Code Playgroud)

因为检查是否已经到达下一个时间步骤发生在开头I,所以预计该方法运行时间太长.但模拟误差的累积分布(预期时间 - 实时)如下所示:alt text http://img267.imageshack.us/img267/4224/errorvscummulativearran.jpg

有人知道我为什么会得到这个结果吗?也许方法System.currentTimeMillis()没有真正返回当前时间?

BR,

马库斯

@irreputable

当我进行评估时,我还使用德国统计程序创建了钟形曲线.因为无法更改标题,所以这里是所有相关项目的英文翻译:

Häufigkeit=频率

费勒=错误

Mittelwert =平均值

Std-Abw =标准偏差

alt text http://img694.imageshack.us/img694/2254/bellcurve.jpg

java time sleep

6
推荐指数
1
解决办法
5217
查看次数

标签 统计

high-resolution ×1

java ×1

linux ×1

process ×1

real-time ×1

sleep ×1

time ×1

timing ×1