In the Linux scheduler, each CPU has one struct rq, which contains sub-runqueues for each sched_class (CFS, RT, DL, idle).
For CFS, the runqueue stores a task’s sched_entity (p->se) instead of the whole task_struct.
What is the purpose of sched_entity in CFS, and why does CFS operate on these entities rather than task_struct directly?