繁体   English   中英

跨内核和用户空间的Linux时序

[英]Linux Timing across Kernel & User Space

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

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

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

Ubuntu 12.04 LTS

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM