基于源代码分析goodness()函数
时间: 2023-12-24 10:05:27 浏览: 144
算法分析源代码
3星 · 编辑精心推荐
好的,让我来解释一下goodness()函数的源代码。
在Linux操作系统中,goodness()函数的实现在sched_fair.c文件中。该函数的定义如下:
```
static inline int
goodness(struct cfs_rq *cfs_rq, struct sched_entity *se)
{
const u64 delta_exec = (u64)(se->sum_exec_runtime - se->prev_sum_exec_runtime);
if (se->vruntime == cfs_rq->min_vruntime)
delta_exec = 1;
return (int)(delta_exec * __sched_vslice(cfs_rq, se) / sched_prio(se));
}
```
下面是对该函数中主要变量和计算的解释:
1. cfs_rq:表示当前进程所在的CFS(Completely Fair Scheduler)队列。
2. se:表示当前进程的调度实体,包含了进程的各种调度信息,如优先级、运行时间等。
3. delta_exec:表示进程从上一次抢占以来的运行时间。
4. vruntime:表示进程已经使用的虚拟运行时间。
5. min_vruntime:表示当前CFS队列中最小的虚拟运行时间。
6. __sched_vslice(cfs_rq, se):表示计算出当前进程的虚拟时间片。
7. sched_prio(se):表示计算出当前进程的优先级。
在计算goodness值时,首先通过delta_exec * __sched_vslice(cfs_rq, se) / sched_prio(se)的公式计算出进程的goodness值。其中,delta_exec表示进程从上次抢占以来的运行时间,__sched_vslice(cfs_rq, se)表示计算出当前进程的虚拟时间片,sched_prio(se)表示计算出当前进程的优先级。
在计算完goodness值之后,如果当前进程的vruntime等于CFS队列中的最小vruntime,则将delta_exec值设置为1。这是为了避免进程在CFS队列中一直处于等待状态。
总的来说,goodness()函数的作用是计算每个就绪进程的优先级,以便选择优先级最高的进程进行调度。
阅读全文