【问题标题】:How does getrusage() report time spent hibernating?getrusage() 如何报告休眠时间?
【发布时间】:2015-07-06 13:10:06
【问题描述】:

我目前正在使用getrusage 告诉我我在应用程序的事件循环中花费了多少时间。

我想知道冬眠会如何影响它。是否报告了休眠时间?或者也许作为系统时间?这是在 Posix 中的某个地方指定的还是依赖于这个系统?

编辑为 Windows here 提出同样的问题。

【问题讨论】:

  • AFAIK POSIX 不知道休眠。

标签: c profiling posix getrusage


【解决方案1】:

我认为 POSIX 在任何地方都没有提到休眠,因此它在技术上依赖于平台。

我只能说 Linux,但其他 UNIX 变体——甚至可能是 Windows——可能表现类似,因为这是最有意义的。

在 Linux 中,在内核源代码下的 Documentation/power/swsusp.txt 中描述了在休眠状态下发生的确切细节。简而言之,用户进程被发送一个虚假信号,导致它们切换到TASK_UNINTERRUPTIBLE 状态。处于TASK_UNINTERRUPTIBLE 状态的进程会从运行队列中取出并进入休眠状态,直到它等待的条件成立,因此在TASK_UNINTERRUPTIBLE 中花费的时间既不计入用户时间也不计入系统时间。如果您要使用 time(1) 测量运行时间,您最多会看到它对挂钟时间的贡献。

使用getrusage(2),您不会看到任何报告的 CPU 时间有差异,因为该进程不可运行。

所以,回答你的问题:根本不报告休眠时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 2010-09-24
    • 2011-08-24
    • 2021-05-05
    • 1970-01-01
    相关资源
    最近更新 更多