CONFIG_MTK_SCHED_MONITOR这个宏控开关有什么作用,请详细说明
时间: 2023-08-18 15:08:08 浏览: 131
`CONFIG_MTK_SCHED_MONITOR`是一个内核配置选项,用于控制是否启用调度器监控功能。该功能可以用于监视系统中各个进程的CPU使用情况,以及调度器在进程之间进行切换的行为。
具体来说,当该宏被定义为`y`时,调度器监控功能将被编译进内核,并在系统启动时自动启用。该功能会定期打印出当前系统中所有进程的CPU使用情况和调度器的行为,包括每个进程的PID、CPU占用时间、等待时间、开始时间、结束时间等信息,以及调度器在进程之间进行切换的次数、时间等信息。这些信息可以帮助开发人员分析系统性能问题,优化系统调度策略和进程优先级等参数。
当该宏被定义为`n`时,调度器监控功能将不会被编译进内核,也不会启用。这可以减小内核的体积和启动时间,但也会丧失调试和性能优化的能力。
需要注意的是,启用调度器监控功能会带来一定的系统开销,包括额外的CPU时间和内存占用。因此,只有在需要调试或优化系统性能时才应该开启该功能。
相关问题
/* Real-Time classes' related field in a runqueue: */ struct rt_rq { struct rt_prio_array active; unsigned int rt_nr_running; unsigned int rr_nr_running; #if defined CONFIG_SMP || defined CONFIG_RT_GROUP_SCHED struct { int curr; /* highest queued rt task prio */ #ifdef CONFIG_SMP int next; /* next highest */ #endif } highest_prio; #endif #ifdef CONFIG_SMP unsigned int rt_nr_migratory; unsigned int rt_nr_total; int overloaded; struct plist_head pushable_tasks; #endif /* CONFIG_SMP */ int rt_queued; int rt_throttled; u64 rt_time; u64 rt_runtime; /* Nests inside the rq lock: */ raw_spinlock_t rt_runtime_lock; #ifdef CONFIG_RT_GROUP_SCHED unsigned int rt_nr_boosted; struct rq *rq; struct task_group *tg; #endif };
这是 Linux 内核中的一个结构体,用于实现实时任务的调度。以下是每个字段的解释:
1. "active" 是一个 rt_prio_array 结构体,用于存储当前正在运行的实时任务。
2. "rt_nr_running" 是一个整数,表示当前正在运行的实时任务的数量。
3. "rr_nr_running" 是一个整数,表示当前正在运行的普通任务(非实时任务)的数量。
4. "highest_prio" 是一个结构体,用于记录当前正在运行的最高优先级的实时任务。
5. "rt_nr_migratory" 是一个整数,表示正在迁移的实时任务的数量。
6. "rt_nr_total" 是一个整数,表示实时任务的总数量。
7. "overloaded" 是一个整数,表示实时任务是否过载。
8. "pushable_tasks" 是一个 plist_head 结构体,用于存储可以被推进运行队列的实时任务。
9. "rt_queued" 是一个整数,表示当前在运行队列中等待运行的实时任务的数量。
10. "rt_throttled" 是一个整数,表示当前被限制运行的实时任务的数量。
11. "rt_time" 是一个 64 位无符号整数,表示实时任务已经运行的总时间。
12. "rt_runtime" 是一个 64 位无符号整数,表示实时任务的最大允许运行时间。
13. "rt_runtime_lock" 是一个 raw_spinlock_t 结构体,用于保护实时任务的运行时间。
14. "rt_nr_boosted" 是一个整数,表示当前被提高优先级的实时任务的数量。
15. "rq" 是一个指针,指向当前运行队列所属的 CPU。
16. "tg" 是一个指针,指向当前运行队列所属的任务组。
struct sched_entity { /* For load-balancing: */ struct load_weight load; struct rb_node run_node; struct list_head group_node; unsigned int on_rq; u64 exec_start; u64 sum_exec_runtime; u64 vruntime; u64 prev_sum_exec_runtime; u64 nr_migrations; struct sched_statistics statistics; #ifdef CONFIG_FAIR_GROUP_SCHED int depth; struct sched_entity *parent; /* rq on which this entity is (to be) queued: */ struct cfs_rq *cfs_rq; /* rq "owned" by this entity/group: */ struct cfs_rq *my_q; /* cached value of my_q->h_nr_running */ unsigned long runnable_weight; #endif #ifdef CONFIG_SMP /* * Per entity load average tracking. * * Put into separate cache line so it does not * collide with read-mostly values above. */ struct sched_avg avg; #endif };
这是Linux内核中的sched_entity结构体定义,用于描述进程或线程在CFS调度策略下的状态和属性。下面是该结构体中各个成员的含义:
1. load:表示进程的权重,用于在CFS调度器中实现公平调度。
2. run_node:表示调度实体在进程调度队列中的位置,用于在进程调度队列中进行快速的查找和插入操作。
3. group_node:表示调度实体在调度组中的位置,用于在调度组中进行快速的查找和插入操作。
4. on_rq:表示调度实体是否在进程调度队列中。
5. exec_start:表示调度实体上一次开始执行的时间。
6. sum_exec_runtime:表示调度实体在CPU上的累计执行时间。
7. vruntime:表示调度实体在虚拟运行时间上的位置,用于在CFS调度器中实现公平调度。
8. prev_sum_exec_runtime:表示调度实体上一次进入睡眠状态前的累计执行时间。
9. nr_migrations:表示调度实体在不同CPU之间迁移的次数。
10. statistics:用于统计调度实体的运行情况,包括调度次数、睡眠次数等。
11. depth:表示调度实体所在的调度组的层数。
12. parent:表示调度实体所在的调度组的父调度实体。
13. cfs_rq:表示调度实体所在的进程调度队列。
14. my_q:表示调度实体所拥有的调度队列。
15. runnable_weight:表示调度实体在CFS调度器中所占的“运行权重”。
16. avg:用于记录调度实体的负载均衡信息,包括最近一段时间内的平均负载等。
这些成员共同描述了调度实体在CFS调度策略下的状态和属性,包括调度实体的位置、运行时间、权重等,是进程在调度器中进行调度决策的重要依据。
阅读全文