[英]Linux Timing across Kernel & User Space
我正在为一个特殊的摄像头编写内核模块,通过V4L2来处理帧到用户空间代码的传输。然后我在应用程序中做了很多用户空间。
时间在这里非常关键,所以我一直在做很多性能分析和普通的旧std::chrono::steady_clock
来跟踪时序,但是我已经达到了我需要从内核端收集时序数据的程度事情,以便我可以分析从硬件中断到V4L DQBuf到用户空间的整个路径......
任何人都可以推荐一种获得高分辨率计时数据的好方法,这些数据与应用程序用户空间数据一致,我可以用于这种比较吗? 现在我正在以微秒为单位测量活动..
Ubuntu 12.04 LTS
在最低级别,如果您使用的是x86 / x86-64处理器,则有rdtsc
和rdtscp
指令。 这应该提供跨内核/用户空间边界的最低开销,最高可能的分辨率。
但是 ,有些事情你需要担心。 您需要确保在相同的核心/ CPU上执行,该过程不是上下文切换,并且频率不会在调用之间发生变化。 如果cpu支持一个不变的tsc,( /proc/cpuinfo
constant_tsc
),它在cpus / cores和frequency之间更加可靠。
这应该提供大约纳秒的准确度。
有许多可用的内核级实用程序可以为您获取与时序相关的跟踪。 例如ptrace
, ftrace
, LTTng
, Kprobes
。 有关更多信息,请查看此链接。 http://elinux.org/Kernel_Trace_Systems
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.