我必须测量用户空间程序与其交互的驱动程序之间的延迟。我基本上通过这个应用程序发送数据包。 latecny在用户空间中的write
与内核中相应的write
函数之间
我在用户空间使用了clock_gettime
和CLOCK_MONOTONIC
内核(驱动程序)中的getrawmonotonic
,当我看到差异时,它是巨大的(大约4毫秒)。所以我肯定使用了错误的方法。
那么,最好的方法是什么?
答案 0 :(得分:0)
要仅测量从用户到内核空间的单个上下文切换,请尝试使用TSC(时间戳计数器)。它适用于x86和ARM,用户和内核空间。
有关维基百科上的TSC的更多信息:https://en.wikipedia.org/wiki/Time_Stamp_Counter
x86 could be found here的BSD许可实施 和for 64-bit ARM here.
另外,正如评论所建议的那样,考虑使用任何可用的标准工具来衡量往返延迟,即使用内核和返回。
答案 1 :(得分:0)
如果我这样做,我会使用ftrace,它是linux内核提供的性能工具。
它可以跟踪内核中的几乎所有函数。
它首先将信息记录到内存中的环形缓冲区中,因此它很少滑行。
Linux内核源代码中有一个非常好的文档" Documentation / trace / ftrace.txt",你也可以找到它here。
1.prepare the environment, configure ftrace.
2.run the application.
3.0.In the application, bind cpu, and give the application priority。
3.1.In the application, write something to the trace_marker,
3.2.In the application, call the function which you want to test.
4.get the log from the ring buffer.
5.calculate the latency.