【问题标题】:User CPU time deviation. What is it caused by?用户 CPU 时间偏差。它是由什么引起的?
【发布时间】:2017-07-31 22:07:06
【问题描述】:

我想知道为什么 Unix 中的 time 命令总是输出不同的用户 CPU 时间。据说是 CPU 用来执行所需进程的用户代码的时间,所以它排除了由内核管理的任务:

  • 任何 I/O 或其他硬件等待和中断,还有缓存管理
  • 其他进程的干预(取消控制)
  • 用户代码不知道的所有事情

但是对于一个对 1​​000000 个元素进行冒泡排序的简单 C 程序,它总是显示用户 CPU 时间在 0.3 到 1.0 秒之间。

我在有关内核和操作系统的经典书籍中几乎没有找到这方面的信息。有人请赐教。

【问题讨论】:

    标签: performance time process cpu


    【解决方案1】:

    'All things that user code doesn't know about

    不正确。用户时间是指用户模式使用的 CPU 周期。 有 2 种执行模式,用户模式(权限有限)和内核模式(几乎所有权限)。在用户模式下,通常执行不涉及更高级别权限的操作。每当进行内核调用/系统调用时,用户模式就会切换到内核模式。

    有关 CPU 模式的更多信息可在此处获得,

    1. http://www.linfo.org/kernel_mode.html
    2. http://minnie.tuhs.org/CompArch/Lectures/week05.html

    因此,即使对于简单的冒泡排序程序,您也将使用相当多的 CPU 周期。以每个程序的实际秒数来衡量用户时间既困难又不太有用,因为获得准确的数字没有多大意义。这将取决于底层硬件、内核版本、共享资源的其他进程等,并且变化很大。即使在连续运行中也会发生变化——在这种情况下可以考虑范围。

    在一般情况下,用户 CPU 时间会高于系统 CPU 时间,但也可以相反。

    【讨论】:

    • 谢谢,我知道内核和用户模式以及切换。我的问题更多是关于巨大偏差的原因,因为我认为除了用户代码之外的所有内容都是内核模式,并且可以通过系统调用(如使用 C 前端函数的读/写)进行访问。顺便说一句,用 CPU 周期数衡量代码性能是否更有用?
    • 是的。这将是一个很好的衡量标准,但又取决于硬件和软件版本。但适合基准测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2014-12-18
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多