Linux kernel 何时调用schedule()?

Linux kernel 何时调用schedule()?,linux-kernel,Linux Kernel,我正在为没有DMA的设备编写驱动程序 驱动程序启动设备操作,然后通过定期从设备中拉出忙标志来等待操作完成 该操作需要4.5或9微秒才能完成。在任何情况下,设备都不会提前完成操作。超过指定时间(9微秒)读取设备状态不会产生错误 忙碌等待 在互联网上找到的所有核心文章都告诉busywait这个小时间间隔。他们认为任何睡眠操作都会比忙碌等待浪费更多的资源。就我个人而言,我不喜欢把周期浪费在琐碎的等待上 计划/睡眠 我发现,在目标硬件上,如果进程使用整个CPUschedule()调用导致其他线程(在空处

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

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

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

忙碌等待

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

计划/睡眠

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

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

根据,
usleep_range
是最新内核所需要的


[更新:哇!我应该更仔细地阅读。对于<10us,它说要使用
udelay
。所以我想这取决于你愿意睡多久。]

好的,我应该更仔细地阅读:-)。我会更新我的答案。