Linux read()系统调用采样率、任务调度和RT_PREEMPT

Linux read()系统调用采样率、任务调度和RT_PREEMPT

我正在使用MeasurementComputing PCIe-DAS1602/16 DAQ:

https://www.mccdaq.com/pci-data-acquisition/PCIe-DAS1602-16.aspx

使用 Warren Jasper 编写的 Linux 设备驱动程序:

https://github.com/wjasper/Linux_Drivers/tree/master/PCI/pci-das1602-16

我正在读一些用于求解一些微分方程的信息,然后将这些信息写回。运行时序统计,我发现96%的时间都用在了read()上,准确的说是48微秒。该板有 10 微秒的延迟,但额外的 38 微秒对我来说似乎有点多。我想加快速度,发现 (1) 优先级调度和 (2) 使用 RT PREEMPT Linux 内核都对 read() 时间没有任何影响。我现在认为“错误”在于设备驱动程序本身。我想知道是否有比 read() 更快的替代方案或任何可用于提高其性能的选项。

答案1

I/O 是出了名的慢,因为它是基于事件的。这里的瓶颈似乎更有可能是实际设备,而不是内核。

相关内容