【问题标题】:When to call schedule()?何时调用 schedule()?
【发布时间】:2011-08-31 14:16:51
【问题描述】:

我正在为没有 DMA 的设备编写驱动程序。

驱动程序启动设备操作,然后通过定期从设备中拉出 busy 标志等待操作完成。

该操作需要 4.5 或 9 微秒才能完成。在任何情况下,设备都不会提前完成操作。晚于指定时间(9 微秒)读取设备状态不会出现错误。

忙等待

在 Internet 上找到的所有内核文章都告诉忙等待这么短的时间间隔。他们认为任何休眠操作都会比busywait浪费更多的资源。就个人而言,我不喜欢在琐碎的等待上浪费周期。

安排/睡眠

我发现在目标硬件上,一个进程使用整个 CPU schedule() 调用导致其他线程(在空处理器上没有其他线程)在设备操作完成之前最多可以调用 4 次。当我添加更多虚拟进程来加载 CPU 时,我看到驱动程序中的调度调用为并发运行的进程提供了更公平的 CPU 分配。

我应该在等待设备时调用schedule() 甚至usleep_range(),还是应该依靠内核抢占来处理busywaits?

【问题讨论】:

    标签: linux-kernel


    【解决方案1】:

    根据Documentation/timers/timers-howto.txtusleep_range 是您想要的最新内核。

    [更新:哎呀!我应该更仔细地阅读。对于 udelay。所以我想这取决于你愿意睡多久。]

    【讨论】:

    • 好的,我应该更仔细地阅读它:-)。我会更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2014-09-02
    • 2022-01-23
    • 2021-06-07
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多