0

我的一个在 OS/X 上“计算”的程序显示的时间如下:

real    0m10.883s
user    0m6.924s
sys     0m3.957s

相比之下,在附近的 Linux 系统上,我看到:

real    0m7.480s
user    0m7.172s
sys     0m0.280s

更糟糕的是,这种情况是在重写一个特定算法之后出现的,新旧算法都没有做任何明显的系统调用。

一些使用 dapptrace 和 iprofiler 的人没有发现任何东西。这都是 10.8.2,xcode 4.2。有问题的代码是C++。

这里的代码(还)不够小,无法在此处发布。我可以说发生变化的区域中有 STL 向量和映射。但是,dapptrace 没有透露。

然而,procsystime 揭示了“madvise”是这个邪恶根源的系统调用。

我将投票结束这个并根据我所学到的内容写一个新问题。

4

2 回答 2

1
  1. 如果你看到神秘的系统时间,procsystime是你的朋友。它提供了系统时间使用情况的简明摘要。
  2. 当心free。在 OS/X 上,freemadvice. 这可能是一个错误,也可能是一个特性,但是在 Linux 上运行 lickety-split 的代码可能会因为free调用madvise.
于 2013-08-22T22:33:08.437 回答
1

“sys”时间(“system”的缩写)表示运行内核代码所花费的 cpu 时间。显然,您的程序依赖于一些在 OSX 内核中实现的工具,而在 Linux 内核中没有实现。我的猜测是您正在使用一些在两个各自平台上具有不同实现的库。

另一种可能性可能是 CPU 时间的计算方式不同——毕竟它们是完全独立的操作系统。他们的内部仪器将彼此不同。

如果没有有关您的程序的更多信息,就不可能确定——愿意发布任何源代码吗?

于 2013-08-21T21:04:06.300 回答