以非RT Linux内核(4.14,Angstrom发行版,在iMX6上运行)为例,我有一个程序可以以非常稳定的数据速率接收UDP数据包(<1400字节)。基本上,
程序的本质是:
while (true)
{ recv( sockFd, ... );
update_loop_interval_histogram(); // O(1)
}
为了最大程度地减少最大延迟时间(循环间隔),我从以下步骤开始了我的过程:
chrt --fifo 99 ./programName
将调度程序设置为具有最高优先级的“实时”模式 SCHED_FIFO 。
我的进程的CPU亲和力固定在第二个内核上。
这样,我得到的最大循环间隔约为10毫秒(而不是没有SCHED_FIFO的约为25毫秒)。这种情况很少发生。在例如在一个小时的运行时间中,所有<400µs的间隔的计数总和除以400µs至10000µs的所有其他间隔时间发生的所有计数的总和超过150万。 但尽管如此,它仍然很糟糕。
是最好的一个可以可靠地使用非RealTime Linux内核吗?还是需要进一步调整以使最大间隔时间达到5ms?