Linux上的低延迟串行通信

JustMaximumPower:

我正在Linux的串行端口上实现协议。该协议基于请求应答方案,因此吞吐量受到将数据包发送到设备并获得应答所花费的时间的限制。这些设备主要基于Arm,并且运行Linux> = 3.0。我无法将往返时间缩短到10ms以下(115200波特,8个数据位,无奇偶校验,每条消息7个字节)。

哪些IO接口将为我带来最低的延迟:选择,轮询,epoll或使用ioctl手动轮询?阻塞或非阻塞IO是否会影响延迟?

我尝试用setserial设置low_latency标志。但这似乎没有效果。

我还有其他方法可以尝试减少延迟吗?由于我控制所有设备,因此甚至可以修补内核,但最好不要修补。

----编辑----

串行控制器使用的是16550A。

JustMaximumPower:

与更多的工程师讨论了该主题后,我得出的结论是,该问题无法在用户空间中解决。由于我们需要跨网桥进入内核领域,因此我们计划实现一个内核模块,该模块讨论我们的协议并为我们提供小于1ms的延迟。

-编辑-

原来我完全错了。所需要做的只是增加内核滴答率。默认的100个滴答声增加了10ms的延迟。1000Hz和串行过程的负整数值给了我想要达到的时间特性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章