Callgrind / kcachegrind 为什么 运行 valgrind 中的程序会增加 sysCall 时间?

Callgrind / kcachegrind why does running a program in valgrind increase sysCall time?

我一直在分析一些可能在系统调用中花费大量执行时间的代码。手动和使用 callgrind 对某些函数进行计时,callgrind 报告的系统调用时间比简单地对函数计时(当然也包括 CPU 时间)长大约 20、30 或 40 倍。

--collect-systime=ON 用于为每个函数收集此 sysCall 时间。

据我所知,callgrind 通过对 CPU 指令进行计数来工作,而对于定时系统调用,只需让 OS 完成工作而不干扰。我不明白为什么在使用 callgrind 进行分析时花在 sysCalls 上的时间会增加,谁能详细说明一下?

callgrind 是否仍然是分析 sysCalls 花费时间的有用工具?

您可以尝试 --collect-systime=usec--collect-systime=nsec 看看它们是否有显着差异? usec 可能会快一点。

指定 --collect-systime 时,Valgrind 将为每个客户端应用程序系统调用调用各种时间系统调用之一。我希望这会增加大量开销,特别是如果您的客户端应用程序调用了很多“快速”系统调用。