微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Callgrind / kcachegrind 为什么在 valgrind 中运行程序会增加 sysCall 时间?

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

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

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

callgrind 仍然是一个有用的工具来分析在 sysCalls 中花费的时间吗?

解决方法

您能试试 --collect-systime=usec--collect-systime=nsec 看看它们是否有显着不同吗? usec 可能会快一点。

当指定 --collect-systime 时,Valgrind 将为每个客户端应用程序系统调用调用不同的时间系统调用之一。我预计这会增加大量开销,特别是如果您的客户端应用程序正在调用非常多的“快速”系统调用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。