问题描述
我有一个程序,根据 time ./program
,它运行了 389 秒,其中 96.64 秒是“系统”时间。
然而,如果我运行 strace -c -f ./program
,我观察到两个现象:
- 仅
poll
系统调用就总共花费了 708 秒(20145us/call),更不用说futex
,它花费了惊人的 5945s(1239us/call)。这远远超过 96.64 秒。 - 除
poll
和futex
外,所有其他系统调用加起来只用了 17 秒。
我对这种现象有 2 种解释,我需要一些帮助才能知道哪个是正确的(或者,如果两者都不正确,什么是正确的)。
-
我正在 72 核机器上运行一个大型多线程程序。
-
strace
报告的系统调用时间可能包括我的线程处于阻塞状态的时间,而time
没有。futex
和poll
都是可能阻塞线程的系统调用。在这种情况下,如果我有 6000 个线程,每个线程阻塞 1s,
strace
将记录 6000s,即使这些 1s 间隔可能重叠。time
可能不包括阻塞时间。但是,在这种情况下,由于所有其他系统调用仅花费了 17 秒,那么
time
报告的 96.64 来自哪里?也许它来自调度程序?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)