gpt4 book ai didi

Linux 的 hrtimer - 微秒精度?

转载 作者:IT王子 更新时间:2023-10-29 00:39:06 26 4
gpt4 key购买 nike

是否可以在 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 燃烧几微秒并不重要。不过,我更喜欢更优雅的解决方案。

我希望问题很清楚,发现了很多关于计时器精度的话题,但没有真正解决这个问题。

最佳答案

你可以在用户空间做你想做的事

  1. 使用clock_gettime()使用 CLOCK_REALTIMEnano 秒分辨率获取时间
  2. 使用nanosleep()让出 CPU,直到接近执行任务所需的时间(至少是 milli 秒分辨率)。
  3. 使用带有 clock_gettime() 的自旋循环,直到达到所需时间
  4. 执行你的任务

clock_gettime() 函数实现为 VDSO在最近的内核和现代 x86 处理器中 - 它需要 20-30 nano 秒来获取具有 nano 秒分辨率的时间 - 你应该能够调用 clock_gettime()micro 秒超过 30 次。使用此方法,您的任务应在预定时间的 micro 秒的 1/30 内分派(dispatch)。

关于Linux 的 hrtimer - 微秒精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14944204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com