我有一个用户空间应用程序(无法访问源代码),该应用程序使用socketcan API发送CAN总线数据。
在发送64字节的数据时,应用程序在任意帧(8字节)之间将面临2秒的延迟
奇怪的是,如果我使用 strace 命令运行应用程序,则没有延迟,数据传输将在200毫秒内完成。
这是内核中的代码流,
sock_write_iter()
-> sock_sendmsg()
-> raw_sendmsg()
-> can_send()
-> __dev_queue_xmit()
-> dev_hard_start_xmit()
-> flexcan_start_xmit()
使用getnstimeofday()
,我可以将延迟追溯到sock_write_iter()
,这是socket()
系统调用的写处理程序的内核功能。
有什么办法可以减少延迟。我不是怀疑Linux系统调用,而是用户空间应用程序。我也尝试增加不错的值,但会发生延迟。