如何解决如何解释strace报告的系统调用时间?
我有一个程序,根据 time ./program
,它运行了 389 秒,其中 96.64 秒是“系统”时间。
然而,如果我运行 strace -c -f ./program
,我观察到两个现象:
- 仅
poll
系统调用就总共花费了 708 秒(20145us/call),更不用说futex
,它花费了惊人的 5945s(1239us/call)。这远远超过 96.64 秒。 - 除
poll
和futex
外,所有其他系统调用加起来只用了 17 秒。
我对这种现象有 2 种解释,我需要一些帮助才能知道哪个是正确的(或者,如果两者都不正确,什么是正确的)。
-
我正在 72 核机器上运行一个大型多线程程序。
在这种情况下,5945 秒可能是每个内核上系统调用时间的总和。
time
出于某种原因,似乎并不关心内核。 -
strace
报告的系统调用时间可能包括我的线程处于阻塞状态的时间,而time
没有。futex
和poll
都是可能阻塞线程的系统调用。在这种情况下,如果我有 6000 个线程,每个线程阻塞 1s,
strace
将记录 6000s,即使这些 1s 间隔可能重叠。time
可能不包括阻塞时间。但是,在这种情况下,由于所有其他系统调用仅花费了 17 秒,那么
time
报告的 96.64 来自哪里?也许它来自调度程序?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。