是否可以在 Linux 主机上以微秒精度执行任务?即,我想在特定的时刻执行一项任务。我知道,Linux 不是实时系统,但我正在寻找 Linux 上的最佳解决方案。
到目前为止,我已经创建了一个内核模块,设置了 hrtimer 并测量了输入回调函数时的抖动(我不太关心实际延迟,重要的是抖动)——大约 20-50us。这并不比在用户空间中使用 timerfd 好很多(也尝试过为进程使用实时优先级,但这并没有真正改变任何东西)。
我正在运行 Linux 3.5.0(只是一个示例,尝试了从 2.6.35 到 3.7 的不同内核),/proc/timer_list 显示 hrtimer_interrupt,我没有在禁用 hrtimer 功能的故障安全模式下运行。在不同的 CPU(Intel Atom 到 Core i7)上进行了尝试。
到目前为止,我最好的想法是将 hrtimer 与 ndelay/udelay 结合使用。这真的是最好的方法吗?我不敢相信不可能以微秒精度触发任务。在内核空间中将代码作为模块运行是可以接受的,但如果代码没有被其他任务中断,那就太好了。我不太关心系统的其余部分,该任务每秒只会执行几次,因此每次执行任务时使用 mdelay/ndelay 将 CPU 烧掉几微秒并不重要。尽管如此,我更喜欢更优雅的解决方案。
我希望这个问题很清楚,找到了很多关于计时器精度的话题,但没有真正解决这个问题。