如何确定代码在内核空间中花费大量时间的位置(系统调用)

时间:2009-10-19 14:23:56

标签: c++ c performance unix system-calls

我注意到我运行的代码的10%是系统空间。但是,我不知道哪个系统调用。但我怀疑,要么是要做文件,要么是时间戳。

是否有工具可以确定哪些系统调用是罪魁祸首?另外,我想知道调用(和被调用者)的频率(和位置)。

我在AS3

THX

6 个答案:

答案 0 :(得分:6)

stracetruss都可以帮助您查看哪些系统调用需要时间。 strace的两个有用选项是:

  1. -T显示每次系统调用所花费的时间,
  2. -c将系统调用计数,调用,错误计数汇总为表格。
  3. 但这两个选项是相互排斥的。

    您可能需要一个完整的系统分析工具,以便更详细地分析内核。如果您在平台上拥有它,那么DTrace可能是最好的。

    通过平台,以下是一些选项:

    DTrace甚至可以帮助您使用pid提供程序分析您的C / C ++代码,例如:见here

答案 1 :(得分:3)

如果你在Linux上看看strace。

如果您使用的是其他Unix,请查看truss是否可用。

答案 2 :(得分:1)

如果你的系统有它,那么 truss 命令应该做你想要的。

答案 3 :(得分:1)

如果为10%,则为{30}个样本try this method。您将看到~3个样本的准确调用,可能是2个,也许是4个。

答案 4 :(得分:0)

再次在Linux上,您可以尝试 oprofile 分析器。确保您有可用于libc和内核的调试符号(许多发行版在不同的包上都有这些符号)。它描述整个系统,而不是(仅)单个过程。我从中获得了有价值的信息。

答案 5 :(得分:0)

在Solaris上,您可以使用dtrace。