跨内核的Linux时间安排用户空间

时间:2014-03-25 21:42:48

标签: c++ linux time linux-kernel linux-device-driver

我正在为一个特殊的摄像头编写一个内核模块,通过V4L2来处理帧到用户空间代码的传输。然后我在应用程序中做了很多用户空间..

这里的时间非常关键,所以我一直在做大量的性能分析和普通的std::chrono::steady_clock内容来跟踪时序,但我已经达到了我需要从内核收集时序数据的程度事情的一面,以便我可以分析从硬件中断到V4L DQBuf到用户空间的整个路径......

任何人都可以推荐一种获得高分辨率计时数据的好方法,这些数据与应用程序用户空间数据一致,我可以用于此类比较吗?现在我正在以微秒为单位测量活动..

Ubuntu 12.04 LTS

2 个答案:

答案 0 :(得分:1)

如果您使用的是x86 / x86-64处理器,则在最低级别有rdtscrdtscp指令。这应该提供跨内核/用户空间边界的最低开销,最高可能的分辨率。

然而,有些事情你需要担心。您需要确保在同一个核心/ CPU上执行,该过程不进行上下文切换,并且频率不会在调用之间发生变化。如果cpu支持不变的tsc,(constant_tsc中的/proc/cpuinfo),它在cpus /核心和频率上更可靠。

这应该提供大约纳秒的准确度。

答案 1 :(得分:0)

有许多可用的内核级实用程序可以为您获取与时序相关的跟踪。例如ptraceftraceLTTngKprobes。有关更多信息,请查看此链接。 http://elinux.org/Kernel_Trace_Systems