调度延迟和唤醒延迟之间的区别
a)选择要运行的进程是一个调度程序逻辑,这个延迟是如何重要的
b)当一个进程被选中进行运行但仍未运行时,是唤醒延迟恕我直言
有人可以帮助理解差异吗?
答案 0 :(得分:0)
调度延迟和唤醒延迟之间有什么区别?
这可能是对其他问题的答案所理解的。
a)选择要运行的进程是一个调度程序逻辑,这个延迟是如何重要的
想象一下,你有两个任务,他们都想跑。一个将花费5分钟,另外4分钟的实际运行时间完成。如果你在它们之间运行乒乓球大约八分钟,争用就应该开始了。每个开关可能需要100微秒。如果开关频率很高,那么开销可能是一个很大的百分比。如果'ticks'为1mS,则开关开销为10%(开关时间为100uS),完成四分钟任务的工作需要9分钟,第二项任务还剩一分钟。
有不同类型的调度延迟。一个是上下文切换的时间。这可能涉及保存和恢复CPU,浮点和其他寄存器,更新MMU(内存看到我的用户空间)并决定切换到哪个任务。高速缓存可能还需要根据情况进行刷新,并可能将状态迁移到不同的CPU。这是我上面用作例子的100uS数字或切换时间。
另一个问题是重新安排的频率。这是另一个进程可以抢先几乎同等优先级的人。这两个数字将相互竞争。即100uS可能用于非常慢的CPU,因此将'ticks'设置为10mS将在上面的示例中将开销减少到仅1%。但是,当重新安排频率降低时,重新安排的响应能力会降低。
有些人在调度程序延迟中包含中断延迟。在发生某些重要的硬件事件时,您可能需要重新安排任务。此外,还有许多不同的算法可用于“挑选谁跑”。在所有情况下,“谁跑”可能没有正确的答案,因此有许多不同的版本。 Linux通常使用'completely fair scheduler'或CFS。
请参阅:What is scheduler latency?
EETime article
LWN article
b)当一个进程被选中进行运行但它仍未运行时,是 唤醒延迟。
我认为这就是我上面解释过的“调度延迟”(但有些人可能会包含更多项目)。
同样,术语唤醒可能有点含糊不清。有各种各样的'唤醒'。在现代电池供电系统中,当没有工作要做时,CPU通常会进入低功耗状态。在这些情况下,唤醒时间可能会增加调度延迟。这是将CPU(和内存等)从低功耗状态转换为全速运行的额外时间。
这些术语没有我所知道的明确定义,您需要查看作者可能使用它们的上下文。这些想法在每种情况下都相似,但具体细节可能有所不同。通常取决于目标或用例。仅处理调度程序代码的人可能包括上下文时间和调度算法开销。中断延迟对他们来说是一个单独的问题。但是,对于具有更多实时响应性的固定嵌入式系统,中断延迟对整个系统和人们来说都很重要。
此外,许多人(认为他们)想要实时。这是一些任务至关重要的地方。但是,通常较低优先级的任务可能即将等待I / O.在这些情况下,提供较低优先级的任务可能会增加吞吐量或最小化完成工作案例的时间。通常是桌面或服务器示例的情况。在吞吐量最优化中,最好让任务等待“I / O”,因为这与硬件访问时间平行。