如何衡量硬件中断和相关系统调用之间的延迟?

时间:2017-06-02 03:15:08

标签: linux kernel low-latency pci-e irq

我有一台带有两个PCIe RS-485卡(XR17V354和XR17V352)的Linux机器。我在其中一张卡上有一个端口硬连线到另一张卡上的一个端口。这些卡由通用串行驱动程序(serial8250)驱动。

我正在进行测试并测量延迟。我有一个Linux进程从端口发送两个字节,然后侦听两个传入的字节。另一个进程接收两个字节,并立即返回两个字节。

我测量的往返延迟大约为1500微秒,标准偏差约为40微秒。我试图了解这种延迟的来源。具体来说,我想了解硬IRQ触发信号数据的时间差异,以及字节可供用户空间进程使用的时间。

我知道ftrace功能,但我不确定如何最好地利用它,或者是否有其他更合适的工具。感谢。

1 个答案:

答案 0 :(得分:0)

这是什么类型的驱动程序?我认为它是内核空间的驱动程序而不是UIO。 独立于您的问题,您可以开始考虑从硬件中断到内核驱动程序以及从那里到用户空间所需的时间。

这里[1]是一些古老的测试案例,可以被黑客攻击,因此您可以将中断延迟与"标准" Linux,preempt-rt修补Linux,也许像Xenomai(尽管Xenomai解决方案需要你重写你的驱动程序)。

您可能需要查看[2],循环测试和朋友,并尝试使用perf钻入您的系统以查看系统范围内的更多详细信息。

最后但并非最不重要的是看一下LTTng [3],它可以让您检测代码并且它已经有很多检测点。

[1] http://www.denx.de/wiki/DULG/AN2008_03_Xenomai_gpioirqbench

[2] http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-rt/rt-tests/

[3] http://lttng.org/