我有一个光纤链路,带有专有设备驱动程序。
链接进入 PCIe 卡。在 RHEL 5.2 (2.6.18-128~) 上运行
我已经mmap
'ed 卡上的接口(interface)用于设置和 FIFO 访问等,这些读/写需要几微秒才能完成,所以一切都很好。
但是当然不能将其用于中断,所以我必须使用提供的内核模块及其用户空间库接口(interface)。
WaitForInterrupt(); // API lib interface to kernel module
// Interrupt occurs and am returned to my code in user space
time = CurrentTime() - LatchedTime(); // time to get to here
从 WaitForInterrupt() 返回大约需要 70µs。 (引发中断的时间被锁定在固件中,我读到这个正如我上面所说的需要 ~2µs,并将其与固件中的当前时间进行比较)
从中断发生到用户空间 API 中断调用等待方法返回之间的预期访问时间是多少?
网络/其他高速接口(interface)占用?
最佳答案
500 毫秒比用户空间/内核之间的简单切换所花费的时间大 许多 个数量级,但正如有人在评论中提到的,linux 不是实时操作系统,因此不能保证 500 毫秒“hickups” "不会偶尔出现。
很难说出罪魁祸首是什么,设备驱动程序可能只是试图捆绑数据以提高效率。
也就是说,我们在使用一些自定义卡以及与 APIC 和 ACPI 交互时遇到了无穷无尽的麻烦,需要在 bios 设置、什么卡插入哪个 PCI 插槽以及特定视频卡是否搞砸了一切之间进行微妙的平衡——可能一个可疑的驱动程序与或多或少有问题的 bios/视频卡交互的原因..
关于linux - 低延迟中断处理(从内核返回到用户空间的预期平均时间是?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3743170/