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

veh*_*zzz 2 c c++ unix performance system-calls

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

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

我在AS3上

谢谢

Emi*_*Sit 6

双方stracetruss会帮助您了解哪些系统调用正在服用的时间.两个有用的选项strace是:

  1. -T 显示每次系统调用所花费的时间,
  2. -c 将syscall计数,调用,错误计数汇总为表.

这两个选项是相互排斥的.

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

通过平台,这里有一些选项:

DTrace甚至可以帮助您使用pid提供程序分析您的C/C++代码,例如,请参见此处.