是否存在可供内核模块使用的单调时钟源,该内核模块可以附加到线程,只有在关联的线程运行时才会增加?
我正在寻找能够像perf API一样工作的东西,除了测量到目前为止所消耗的CPU时间总量(以纳秒为单位)而不是测量周期或指令.
在用户空间中,您具有librt中的clock_gettime函数,您可以在其中指定CLOCK_PROCESS_CPUTIME_ID作为获取上述行为的时钟类型.查看source code of clock_gettime
,此函数从pthread库中调用另一个名为__pthread_clock_gettime的函数.
我正在寻找类似的东西,可以从内核模块在Linux内核中设置并附加到任务,给定指向与任务相关联的task_struct的指针.
解决方法
Performance API使您可以访问各种硬件事件和计数器.它有一个低级和高级API. PAPI_epc函数应该符合您的需求:
http://icl.cs.utk.edu/papi/docs/db/d93/group__high__api.html#ga2f8766ae458b43d41e57e78b930a4f61