使用time命令知道实时和cpu时间 - 准确度如何?

时间:2015-07-10 02:45:59

标签: c linux time real-time cpu-time

我只是想通过在Linux控制台上使用time命令运行代码来获取cpu时间和实时时间。但是,每次运行此命令时,我都会得到不同的值。因此,结果的可重复性不存在。 cpu时间估计在12-31毫秒的范围内变化。然后,我认为哪个结果是最准确的结果,或者我只运行10次并取平均值?

3 个答案:

答案 0 :(得分:0)

您必须获得自上次重置以来的时钟周期数的处理器时间戳记录。如何获得它取决于处理器和处理器指令集的rdtsc。首先检查您的处理器名称,然后转到供应商网站并搜索处理器的指令集。

答案 1 :(得分:0)

你得到的时间是显而易见的,因为当你刚刚开始执行代码时,它就不会开始执行。为此,您现在必须知道response timestarvation time是什么,这个因素控制另一个因素,即turn around time和unix /中的time命令linux环境为您提供turn around time&而且如果它小于5ms则显示0。

看看时间的手册页

DESCRIPTION
 The time utility executes and times utility.
 After the utility finishes, time writes the total time elapsed, 
 the time consumed by system overhead, and the
 time used to execute utility to the standard error stream.  
 Times are reported in seconds.
它清楚地提到了总的经过时间,这反过来意味着总的周转时间,这进一步取决于几个因素&那些是

  1. 操作系统的调度策略
  2. 流程管理器如何管理流程
  3. 处理器的时钟频率
  4. 数据总线时间延迟
  5. PCB加载时间
  6. 和其他一些人......几乎不可能完全计算时间。现在,如果您在x86仿真器中查看 asm 文件执行,您将立即看到指令不会从RAM提供给处理器。此外,指令集架构(ISA)对它有很大的影响。 时间实用程序只是一个包装器实现&因此它无法准确地获得执行时间,但我认为即使在现实生活中也不需要那么准确(我在这里猜测)

答案 2 :(得分:0)

我认为真正重要的是确保您在同一环境中进行测量。 确保您的机器安静无恙。机器,即您进行测量时没有其他进程在运行。如果其他进程正在运行,则由于CPU周期在其他地方消耗,您的时间测量值会有所不同。

了解代码在运行时实际执行的操作也很重要。 它是否涉及大量的IO操作?在这种情况下,您可以考虑使用Ramdisk for IO来减少计时的差异。 Ramdisk for IO

您的代码是否在多个线程中运行?还是单线程?您可以尝试“绑定”#39;使用taskset实用程序将您的应用程序应用于Linux上的某个处理器核心。我已经看到使用任务集的一致数字。

由于内存和缓存,如果多次运行,您将在缓存中拥有部分代码,这会影响您的计时。 为了消除这种影响,您可以在开始测量时间之前多次运行代码10分钟。 或者,您可以在每次运行之前重新启动计算机,使计算机处于相同的内存和缓存状态。