【问题标题】:Should I use "real" or "user+sys" on the time function?我应该在时间功能上使用“真实”还是“用户+系统”?
【发布时间】:2012-05-25 00:16:34
【问题描述】:

当您在 Linux 上使用 time 命令时,我了解“真实”、“用户”和“系统”之间的区别,正如其他线程中所述:What do 'real', 'user' and 'sys' mean in the output of time(1)?

现在我正在对 Python、Java 和 C 的性能进行小幅比较,我想知道应该使用哪个报告。

"User+sys" 似乎是更现实的一个,但是在将 C 与 Java 进行比较时,这不会导致问题,例如,因为 JVM 知道如何优化多处理器/线程的代码,而 GCC 不知道不是吗?

另外,如果我确保没有其他繁重的进程在后台运行,“真实”是否足够现实?

【问题讨论】:

  • 你似乎想测量周期而不是时间,也许你应该使用其他工具,不知道是哪一个。
  • 我知道循环会更好,但时间不够准确,无法很好地了解每种语言的性能吗?
  • 不要忘记页面错误。用户和系统都不会考虑它们。时钟在缓存未命中时一直滴答作响,但在页面错误期间,记帐本质上为您的进程停止。并且页面错误昂贵的。

标签: linux time


【解决方案1】:

答案取决于您所说的“(Python|Java|C) 的性能”是什么意思。在许多情况下,用户真正关心的是经过的挂墙时间,对应于real。假设您以多种语言以合理的方式编写了一段代码,并且其中一种语言可以自动并行化它以使用您的 4 个内核。如果这使用户等待回复的时间更少,那么我说这是一个公平的比较。当然它对那台特定的机器有效,单核机器上的结果可能会有所不同。如果一个应用程序导致页面错误,那么它会让用户等待。对于用户来说,如果您说应用程序需要等待更长的时间,那么他们会花费更少的周期。

无论您采用何种测量方式,请务必多次重复测试,因为每次运行之间可能存在很大差异。由于 JIT 编译,像 Java 这样的语言还需要一个程序在达到最高速度之前运行一段时间(但同样:如果您的程序根据定义非常短并且不允许 Java 虚拟机翘曲,那么它就是对 Java 来说太糟糕了)。测试性能非常棘手,即使是经验丰富的开发人员也容易误解结果或测量的结果不是他们真正想要的。

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 2020-03-20
    • 2010-11-16
    • 2015-05-21
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多