1.请简述进程优先级、nice值和权重之间的关系。
答:
- 进程优先级:内核使用0~139的数值表示进程的优先级,数值越低,优先级越高。优先级0~99给实时进程使用,100~139给普通进程使用。
- nice:是一个用户空间的传统变量,它映射到普通进程的优先级,即100~139。nice值的范围是-20~19,进程默认的nice值为0。可以理解成有40个等级,nice值越高,优先级越低,反之亦然。
- 权重:内核使用load_weight数据结构来记录调度实体的权重信息。
具体关系如下:nice值的改变会影响进程的权重,而权重决定了进程在CFS中的调度优先级。如果一个CPU密集型的应用程序的nice值从0增加到1,那么它相对于其他nice值为0的应用程序将减少10%的CPU时间。因此进程每降低一个nice级别,优先级则提高一个级别相应的进程多获得10%的CPU时间,反之少获得10%的CPU时间。较高权重的进程更容易获得CPU时间,从而提高其执行优先级。
2.请简述CFS是如何工作的。
答:
CFS(Completely Fair Scheduler,完全公平调度器)是Linux操作系统中的一种进程调度器。它的主要目标是在多个进程之间公平地分配CPU时间,以提高系统的整体性能和公平性。
CFS的工作原理如下:
-
CFS将系统中所有的活动进程组织成一个虚拟的红黑树。每个进程都有一个称为"虚拟运行时间"(virtual runtime)的属性,用于衡量进程已经执行的时间量。
-
当进程需要执行时,CFS选择该红黑树中虚拟运行时间最小的进程来运行。这保证进程能够按照它们公平的份额获得CPU时间。
-
当一个进程开始执行时,CFS会根据进程的优先级动态调整进程的虚拟运行时间。优先级较高的进程会在单位时间内获得更多的虚拟运行时间,从而有更高的执行优先级。
-
当一个进程执行完毕或者阻塞时,它会释放CPU并从红黑树中移除。同时,CFS会调整其他进程的虚拟运行时间,以保持公平性。
3.CFS中vruntime是如何计算的?
答: 在CFS中有一个计算虚拟时间的核心函数calc_delta_fair(),它的计算公式vruntime=(delta_exec*nice_0_weight)/weight。其中,vruntime表示进程虚拟的运行时间,delta_exec为实际运行时间,nice_0_weight为nice为0的权重值,weight表示该进程的权重值。
|