gpt4 book ai didi

用户空间中的 linux 高分辨率计时器

转载 作者:太空狗 更新时间:2023-10-29 11:33:37 27 4
gpt4 key购买 nike

我的进程中需要一个线程每 5 毫秒(精确)唤醒一次并做一些工作。
我使用过 posix 定时器,它们似乎准确 90%,当 cpu 负载时准确度进一步降低。
我相信这是因为 posix 计时器必须在每次到期时 fork 新线程。
有没有其他可靠的方法可以在 Linux 中实现高分辨率计时器,增加线程的优先级会有帮助吗?
我在 CentOS 5.6 上。

最佳答案

POSIX 计时器(使用 timer_create() 创建)已经是高分辨率了。您的问题出在交付方法上 - 如果您想要非常精确的时间,那么 SIGEV_THREAD 不是一个好主意。

您可以改为使用 SIGEV_SIGNAL,以便通过信号通知计时器到期,然后使用 sigwaitinfo() 等待它到期。或者,您可以使用 timerfd 而不是 POSIX 计时器(使用 timerfd_create() 创建)。

此外,如果您希望您的线程在计时器到期时抢占其他正在运行的线程,您需要为其提供实时调度策略(SCHED_FIFOSCHED_RR) 与 sched_setscheduler()

您还需要确保您的内核是使用 CONFIG_PREEMPT 选项编译的,这允许大多数内核代码是可抢占的。仍然会有一定程度的抖动,这是由不可抢占的内核工作(如硬件中断和软中断)引起的。为了进一步减少这种情况,您可以尝试使用 CONFIG_PREEMPT_RT kernel patchset .

关于用户空间中的 linux 高分辨率计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369087/

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