繁体   English   中英

使用time命令了解实时时间和cpu时间-精度如何?

[英]Using time command to know the real time and cpu time - how accurate?

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

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

得到的时间很明显,因为当您刚开始执行代码时,它不会开始执行。 为此,您现在必须知道response time是多少, starvation time是多少,这两个因素都决定着另一个因素,即turn around time ,而在unix / linux环境中, time命令为您提供turn around time ,如果有的话小于5毫秒,则显示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加载时间

因此,实际上不可能精确计算时间。 现在,如果您在x86模拟器中查看asm文件的执行情况,您会发现指令没有立即从RAM提供给处理器。 此外,指令集Architecture(ISA)对其影响很大。 time实用工具只是一个包装器实现,因此无法准确获取执行时间,但是我认为即使在实际示例中,您也不需要这种准确性(我在这里猜测)

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM