我注意到我的代码运行的 10% 是系统空间。但是我不知道哪个系统调用。不过,我怀疑它要么必须做文件,要么必须做时间戳。
有没有工具可以找出哪些系统调用是罪魁祸首?另外,我想知道调用(和被调用者)的频率(和位置)。
我在 AS3
谢谢
我注意到我的代码运行的 10% 是系统空间。但是我不知道哪个系统调用。不过,我怀疑它要么必须做文件,要么必须做时间戳。
有没有工具可以找出哪些系统调用是罪魁祸首?另外,我想知道调用(和被调用者)的频率(和位置)。
我在 AS3
谢谢
两者都strace
将truss
帮助您查看哪些系统调用需要时间。两个有用的选项strace
是:
-T
显示每个系统调用所花费的时间,-c
将系统调用计数、调用、错误计数汇总为一个表。虽然这两个选项是相互排斥的。
您可能需要一个完整的系统分析工具,以允许您更详细地分析内核。 如果您的平台上有DTrace ,它可能是最好的。
按平台,这里有一些选项:
DTrace 甚至可以帮助您使用 pid 提供程序分析您的 C/C++ 代码,例如,请参见此处。
如果您在 Linux 上,请查看 strace。
如果您在其他 Unix 上,请查看 truss 是否可用。
如果你的系统有它,那么truss命令应该做你想做的事。
如果是 10%,则尝试此方法30 个样本。您将看到大约 3 个样本的准确调用,可能是 2 个,也可能是 4 个。
再次在 Linux 上,您可以尝试使用oprofile分析器。确保您有可用于 libc 和内核的调试符号(许多发行版在单独的包中都有这些符号)。它描述了整个系统,而不是(仅)单个进程。我从中得到了宝贵的信息。
在 Solaris 上,您可以使用 dtrace。