【问题标题】:Callgrind / kcachegrind why does running a program in valgrind increase sysCall time?Callgrind / kcachegrind 为什么在 valgrind 中运行程序会增加 sysCall 时间?
【发布时间】:2021-09-13 06:07:39
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: profiling valgrind callgrind kcachegrind


    【解决方案1】:

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

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

    【讨论】:

    • 这解释了为什么存在差异,这是非常有价值的。值 usec 和 nsec 在我的 valgrind 上不起作用,它只接受是或否,可能是版本控制问题。但是,我现在希望此开销与“sysCount”成正比,这非常有帮助。谢谢!
    • 还要注意,除了由于时间系统调用而由 callgrind 使用的开销之外,valgrind 核心本身会为所有系统调用增加大量开销,例如它必须在“真正的”应用程序系统调用之前和/或之后执行一些 sigprocmask 系统调用。
    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 2017-06-18
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多