【问题标题】:How to give delay value that is less than jiffies in delayed workqueue如何在延迟工作队列中给出小于 jiffies 的延迟值
【发布时间】:2018-04-06 06:45:01
【问题描述】:

queue_delayed_work(struct workqueue_struct *wq,struct delayed_work *dwork,unsigned long delay)

在上面的函数中,是否可以给出小于一瞬间的延迟?

【问题讨论】:

    标签: linux linux-kernel kernel linux-device-driver device-driver


    【解决方案1】:

    您可以延迟零个或多个 jiffies。为了获得延迟,内核在内部使用了一个计时器。最早可以到期的计时器是在最近的下一个刻度上。因此可能的最小延迟为 1 jiffies。在零 jiffies 的情况下,延迟的工作(dwork)将立即开始,没有任何延迟。

    queue_delayed_work 内部调用__queue_delayed_work,在其中完成了配置定时器的实现。最短过期时间是 jiffies + delay。参考链接了解更多信息。

    要安排您的工作少于 jiffiy 计时器,您可以使用hrtimers(高分辨率计时器)。

    有关实现 hrtimer 的更多信息,请阅读以下链接:

    hrtimer repeating task in the Linux kernel

    https://www.ibm.com/developerworks/library/l-timers-list/

    【讨论】:

      【解决方案2】:

      queue_delayed_work 的情况下,唯一小于 1 jiffy 的延迟是 0 jiffies。

      delay 的类型为 unsigned long,它被指定为“排队前等待的 jiffies 数”。

      【讨论】:

      • 目前我的 jiffy 计时器是 10 毫秒我想安排我的工作少于 jiffy 计时器,有没有其他方法可以做到这一点(不想更改 jiffy 计时器)
      • 是的,有一种方法可以将您的工作安排在少于 jiffy 计时器的时间......它是使用 HRTimers(高分辨率计时器)。它们以纳秒为单位给出分辨率。
      • 浏览实现 hrtimer 的链接。
      【解决方案3】:

      当我们调用 wait_event_interruptible ( wq, 条件)使用wait_event_interruptible时是否必须调用wake_up函数?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-30
        • 1970-01-01
        • 2011-08-26
        • 2012-01-27
        • 2013-09-04
        相关资源
        最近更新 更多