我正在为一个特殊的摄像头编写一个内核模块,通过V4L2来处理帧到用户空间代码的传输。然后我在应用程序中做了很多用户空间..
这里的时间非常关键,所以我一直在做大量的性能分析和普通的std::chrono::steady_clock
内容来跟踪时序,但我已经达到了我需要从内核收集时序数据的程度事情的一面,以便我可以分析从硬件中断到V4L DQBuf到用户空间的整个路径......
任何人都可以推荐一种获得高分辨率计时数据的好方法,这些数据与应用程序用户空间数据一致,我可以用于此类比较吗?现在我正在以微秒为单位测量活动..
Ubuntu 12.04 LTS
答案 0 :(得分:1)
如果您使用的是x86 / x86-64处理器,则在最低级别有rdtsc
和rdtscp
指令。这应该提供跨内核/用户空间边界的最低开销,最高可能的分辨率。
然而,有些事情你需要担心。您需要确保在同一个核心/ CPU上执行,该过程不进行上下文切换,并且频率不会在调用之间发生变化。如果cpu支持不变的tsc,(constant_tsc
中的/proc/cpuinfo
),它在cpus /核心和频率上更可靠。
这应该提供大约纳秒的准确度。
答案 1 :(得分:0)
有许多可用的内核级实用程序可以为您获取与时序相关的跟踪。例如ptrace
,ftrace
,LTTng
,Kprobes
。有关更多信息,请查看此链接。
http://elinux.org/Kernel_Trace_Systems