当strace命令显示的时间明显减少时,为什么进程的sys时间显示得更高?

时间:2016-10-23 08:46:02

标签: c multithreading

我用C编写了一个程序,它有两个线程。 最初它是,

for(int i=0;i<n;i++){
    long_operation(arr[i]);
}

然后我将循环划分为两个线程,两个并发执行。

一个线程将执行arr [0]到arr [n / 2]的操作,另一个线程将用于arr [n / 2]到arr [n-1]。

long_operation函数是线程安全的。

最初我使用的是连接,但futex系统调用需要更长的系统时间,我使用strace命令观察到。

所以我删除了strace命令并在两个线程中使用两个volatile变量来跟踪线程是否完成以及线程spawing函数中的busy循环两个停止执行后面的代码。我让线程可拆卸并删除了连接。

它稍微改善了性能。但是当我使用时间命令时,系统部分正在进行,

real    0m31.368s
user    0m53.738s
sys     0m15.203s

但是当我使用strace命令检查输出时,

% time   seconds      usecs/call   calls  errors  syscall

55.79    0.000602           9        66           clone
44.21    0.000477           3       177           write
------ ----------- ----------- --------- --------- ---------------
100.00    0.001079                   243           total

因此,time命令显示CPU在内核中花费大约15秒的时间。但显示几乎0秒的strace命令用于系统调用。

那为什么内核浪费了15秒呢? 我有一个双核超线程Intel CPU。

0 个答案:

没有答案