How is CFS efficient?
This lesson highlights the usage of red-black trees in CFS. Additionally, it also briefs about other CFS features and how CFS deals with I/O and sleeping processes.
We'll cover the following
Using red-black trees
One major focus of CFS is efficiency. For a scheduler, there are many facets of efficiency, but one of them is as simple as this: when the scheduler has to find the next job to run, it should do so as quickly as possible. Simple data structures like lists don’t scale: modern systems sometimes are composed of 1000s of processes, and thus searching through a long-list every so many milliseconds is wasteful.
CFS does not keep all processes in this structure; rather, only running (or runnable) processes are kept therein. If a process goes to sleep (say, waiting on an I/O to complete, or for a network packet to arrive), it is removed from the tree and kept track of elsewhere.
Example
Let’s look at an example to make this more clear. Assume there are ten jobs, and that they have the following values of vruntime
: 1, 5, 9, 10, 14, 18, 17, 21, 22, and 24. If we kept these jobs in an ordered list, finding the next job to run would be simple: just remove the first element. However, when placing that job back into the list (in order), we would have to scan the list, looking for the right spot to insert it, an operation. Any search is also quite inefficient, also taking linear time on average.
Keeping the same values in a red-black tree makes most operations more efficient, as depicted in the figure below:
Get hands-on with 1400+ tech skills courses.