【问题标题】:Linux Timing across Kernel & User Space跨内核和用户空间的 Linux 时序
【发布时间】:2014-05-04 00:36:06
【问题描述】:

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

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

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

Ubuntu 12.04 LTS

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • @Yeraze:您可以通过设置设备驱动程序和应用程序的 CPU 关联性来消除 Jason 提到的一些问题。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多