getrusage() 如何报告休眠时间?
How does getrusage() report time spent hibernating?
我目前正在使用 getrusage
来告诉我我在应用程序的事件循环中花费了多少时间。
我想知道休眠会如何影响它。是否报告了休眠时间?或者作为系统时间?这是在 Posix 某处指定的还是依赖于此系统?
编辑 为 Windows 问同样的问题 here。
我认为 POSIX 没有在任何地方提到休眠,所以它在技术上取决于平台。
我只能代表 Linux,但其他 UNIX 变体 - 甚至可能 Windows - 可能表现相似,因为这是最有意义的。
在 Linux 中,在内核源代码下的 Documentation/power/swsusp.txt 中描述了休眠幕后发生的具体细节。简而言之,用户进程会收到一个假信号,导致它们切换到 TASK_UNINTERRUPTIBLE
状态。处于 TASK_UNINTERRUPTIBLE
状态的进程从 运行 队列中取出并进入睡眠状态,直到它等待的条件成立,因此在 TASK_UNINTERRUPTIBLE
中花费的时间既不计入用户时间也不作为系统时间。如果您要用 time(1)
测量 运行 次,您最多会看到它对挂钟时间有贡献。
使用 getrusage(2)
,您将不会在报告的 CPU 次中看到任何差异,因为该过程不 运行nable。
所以,回答你的问题:根本没有报告休眠时间。
我目前正在使用 getrusage
来告诉我我在应用程序的事件循环中花费了多少时间。
我想知道休眠会如何影响它。是否报告了休眠时间?或者作为系统时间?这是在 Posix 某处指定的还是依赖于此系统?
编辑 为 Windows 问同样的问题 here。
我认为 POSIX 没有在任何地方提到休眠,所以它在技术上取决于平台。
我只能代表 Linux,但其他 UNIX 变体 - 甚至可能 Windows - 可能表现相似,因为这是最有意义的。
在 Linux 中,在内核源代码下的 Documentation/power/swsusp.txt 中描述了休眠幕后发生的具体细节。简而言之,用户进程会收到一个假信号,导致它们切换到 TASK_UNINTERRUPTIBLE
状态。处于 TASK_UNINTERRUPTIBLE
状态的进程从 运行 队列中取出并进入睡眠状态,直到它等待的条件成立,因此在 TASK_UNINTERRUPTIBLE
中花费的时间既不计入用户时间也不作为系统时间。如果您要用 time(1)
测量 运行 次,您最多会看到它对挂钟时间有贡献。
使用 getrusage(2)
,您将不会在报告的 CPU 次中看到任何差异,因为该过程不 运行nable。
所以,回答你的问题:根本没有报告休眠时间。