Messages in this thread | | | From | "David Schwartz" <> | Subject | RE: SMP Kernel | Date | Fri, 20 Feb 2009 15:52:39 -0800 |
| |
> Hi, > Ok, since the memory is shared between all the cores the Kernel can be > invoked by any core receiving an interrupt and thus executed by that core?
Right.
> If the above is right then how come that two separate CPUs can wake up, > schedule and context-switch completely in parallel? > Are there an independent scheduler per cpu?
There is a scheduler that can run on any CPU that needs to schedule. However, the scheduler is designed to be scalable across large numbers of CPUs.
There is meaningful distinction between "there is one scheduler that can run on any CPU" and "each CPU has its own scheduler". Whether you look at the scheduler running on one CPU as the same scheduler or a different scheduler as the scheduler running on another CPU is purely a question of semantics.
If I run two copies of 'ls', are they the same program or not?
> Directly from the sched-design.txt > > - 'perfect' SMP scalability. With the new scheduler there is no 'big' > runqueue_lock anymore - it's all per-CPU runqueues and locks - two > tasks on two separate CPUs can wake up, schedule and context-switch > completely in parallel, without any interlocking. All > scheduling-relevant data is structured for maximum scalability.
So the scheduler operates on per-CPU data structures, allowing multiple CPUs to run the scheduler code at the same time without slowing each other down.
DS
| |