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

标签 linux kernel low-latency pci-e irq

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

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

我测得此往返延迟约为 1500 微秒,标准偏差约为 40 微秒。我试图了解这种延迟的来源。具体来说,我想了解从硬 IRQ 触发到信号数据已准备好读取的时间与字节可供用户空间进程使用的时间之间的差异。

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

最佳答案

这是什么驱动程序?我假设它是内核空间中的驱动程序而不是 UIO。 独立于您的问题,您可以开始查看从硬件中断到内核驱动程序以及从那里到用户空间需要多长时间。

这里 [1] 是一些古老的测试用例,可以稍微修改一下,因此您可以将中断延迟与“标准”Linux、抢占式 rt 修补的 Linux 以及 Xenomai 之类的东西进行比较(尽管 Xenomai 解决方案需要你重写你的驱动程序)。

您可能想看看 [2]、cyclictest 和 friend ,并尝试使用 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/

关于linux - 如何测量硬件中断和相关系统调用之间的延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44320214/

相关文章:

arrays - 在 Debian 8.4 中创建数组变量时出错

linux - 为什么在 golang、linux 中使用 archive/zip 时文件名会变得困惑?

linux - 操作系统如何抢占进程并重新获得控制权?

tcp - 高频交易 - TCP > UDP?

c++ - 如何最小化 USB 2 的延迟

linux - Linux 上的闪存编程

python - 如何在 50 秒后杀死子进程?

linux - linux 中的内核映射是什么?

linux - 从进程上下文中跟踪内核中的单步?

python - 如何快速比较列表和集合?