And*_*Dev 1 scheduling linux-kernel
我正在为我的OS类做一些Linux CFS分析,并且有一个我无法解释的观察.
对于两个相同的进程,当它们使用SCHED_OTHER策略执行时,我发现自愿上下文切换比使用SCHED_FIFO或SCHED_RR策略执行它们多50%.
这对于非自愿切换不会让我感到意外,因为SCHED_OTHER的优先级要低得多,所以它必须放弃CPU.但为什么自愿开关会出现这种情况.为什么SCHED_OTHER会比实时流程更频繁地自愿放弃CPU?这是一个完全相同的过程,因此只有志愿者在切换到I/O时放弃CPU,对吗?我不认为政策的选择会影响I/O尝试的频率.
任何Linux人都有自己的想法?谢谢!
小智 6
首先要了解调度策略只不过是内核中实现的调度算法.因此SCHED_FIFO,SCHED_RR,SCHED_OTHER是内核中的不同算法.SCHED_FIFO和SCHED_RR属于实时调度算法"类".SCHED_OTHER只是系统中正常进程的调度算法,通常称为CFS(完全公平调度程序)算法.
SCHED_OTHER的优先级要低得多
确切地说,它没有"很多"较低的优先级,但具有比实时调度类"低"的优先级.Linux Scheduler中有三个调度类 - 实时调度类,正常进程调度类和空闲任务调度类.优先级如下:
系统上的任务属于这些类之一.(请注意,在任何时间点,任务只能属于一个调度类,尽管其类可以更改).Linux中的调度程序首先检查实时类中是否有任务.如果有,则调用SCHED_FIFO或SCHED_RR算法,具体取决于系统上配置的内容.如果没有实时任务,则调度程序检查正常任务并根据是否有任何正常任务准备运行来调用CFS算法.也
回到主要问题,为什么在两个不同的调度类中运行相同的进程时会看到更多的上下文切换.有两种情况:
希望答案是完整的:)
| 归档时间: |
|
| 查看次数: |
1104 次 |
| 最近记录: |