当前位置:网站首页>CGroup CPU group source code analysis

CGroup CPU group source code analysis

2022-07-05 06:38:00 techtitan

cpu group pick_next function

The following code comes from pick_next_task_fair

 6739         /*
 6740          * Because of the set_next_buddy() in dequeue_task_fair() it is rather
 6741          * likely that a next task is from the same cgroup as the current.
 6742          *
 6743          * Therefore attempt to avoid putting and setting the entire cgroup
 6744          * hierarchy, only change the part that actually changes.
 6745          */
 6746
 6747         do {
 6748                 struct sched_entity *curr = cfs_rq->curr;
 6749
 6750                 /*
 6751                  * Since we got here without doing put_prev_entity() we also
 6752                  * have to consider cfs_rq->curr. If it is still a runnable
 6753                  * entity, update_curr() will update its vruntime, otherwise
 6754                  * forget we've ever seen it.
 6755                  */
 6756                 if (curr) {
 6757                         if (curr->on_rq)
 6758                                 update_curr(cfs_rq);
 6759                         else
 6760                                 curr = NULL;
 6761
 6762                         /*
 6763                          * This call to check_cfs_rq_runtime() will do the
 6764                          * throttle and dequeue its entity in the parent(s).
 6765                          * Therefore the nr_running test will indeed
 6766                          * be correct.
 6767                          */
 6768                         if (unlikely(check_cfs_rq_runtime(cfs_rq))) {
 6769                                 cfs_rq = &rq->cfs;
 6770
 6771                                 if (!cfs_rq->nr_running)
 6772                                         goto idle;
 6773
 6774                                 goto simple;
 6775                         }
 6776                 }
 6777
 6778                 **se = pick_next_entity(cfs_rq, curr);**
 6779                 **cfs_rq = group_cfs_rq(se);**
 6780         } while (cfs_rq);
  279 /* runqueue "owned" by this group */
  280 static inline struct cfs_rq *group_cfs_rq(struct sched_entity *grp)
  281 {
  282         return grp->my_q;
  283 }

1) If cpu original rq pick_next_entity Choose right and wrong cgoup node , that 6779 Line return empty , namely my_q It's empty
2) If 6778 Row selected cgroup The root node of sched_entity, Then according to cgroup The hierarchy traverses once , To the last layer node sched_entity Of my_q It's empty , Is the real task entity

group share Calculation

4.19 calc_group_shares

原网站

版权声明
本文为[techtitan]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140601220739.html