Hi Valdis,
Thanks for getting back to me!
I should've looked into newer versions. (Was looking at 2.6.34 because the latest book I have on linux kernel, Linux
Kernel Development, 3rd Edition by Robert Love, is based on that version.)
I do have the same question for the latest version.
Here:
https://github.com/torvalds/linux/blob/4df7c5fde316820286dfa6d203a1005d7fbe007d/kernel/sched/core.c#L5632
the scheduler_tick() is calling curr->sched_class->task_tick(rq, curr, 0);
https://github.com/torvalds/linux/blob/4df7c5fde316820286dfa6d203a1005d7fbe007d/kernel/sched/core.c#L5651
This is calling entity_tick(),
https://github.com/torvalds/linux/blob/4df7c5fde316820286dfa6d203a1005d7fbe007d/kernel/sched/fair.c#L5447
and then resched_curr(),
https://github.com/torvalds/linux/blob/4df7c5fde316820286dfa6d203a1005d7fbe007d/kernel/sched/core.c#L1040
As the comment says, resched_curr() is still just setting the need_resched flag on a uniprocessor.
It is not calling the schedule() function.
When/how is the schedule() function actually called?
Thanks for getting back to me!
I should've looked into newer versions. (Was looking at 2.6.34 because the latest book I have on linux kernel, Linux
Kernel Development, 3rd Edition by Robert Love, is based on that version.)
I do have the same question for the latest version.
Here:
https://github.com/torvalds/linux/blob/4df7c5fde316820286dfa6d203a1005d7fbe007d/kernel/sched/core.c#L5632
the scheduler_tick() is calling curr->sched_class->task_tick(rq, curr, 0);
https://github.com/torvalds/linux/blob/4df7c5fde316820286dfa6d203a1005d7fbe007d/kernel/sched/core.c#L5651
This is calling entity_tick(),
https://github.com/torvalds/linux/blob/4df7c5fde316820286dfa6d203a1005d7fbe007d/kernel/sched/fair.c#L5447
and then resched_curr(),
https://github.com/torvalds/linux/blob/4df7c5fde316820286dfa6d203a1005d7fbe007d/kernel/sched/core.c#L1040
As the comment says, resched_curr() is still just setting the need_resched flag on a uniprocessor.
It is not calling the schedule() function.
When/how is the schedule() function actually called?
Appreciate any explanation/guidance on this!
Thanks!
On Sat, Dec 9, 2023 at 1:45 AM Valdis Klētnieks <valdis.kletnieks@xxxxxx> wrote:
On Sat, 09 Dec 2023 00:16:32 +0800, Dawei Li said:
> Greetings!
> (Although I am using the 2.6.34 version, I believe the question is generally
> applicable to any kernel version.)
That is, in general, a bad assumption when you are looking at kernel versions
old enough that they count as digital archaeology....
[/usr/src/linux-next] git show v2.6.34
tag v2.6.34
Tagger: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
Date: Sun May 16 14:17:44 2010 -0700
[/usr/src/linux-next] git diff --shortstat v2.6.34..next-20231205
96965 files changed, 32056985 insertions(+), 7606202 deletions(-)
Given that next-20231205 has just over 33 million lines of code, we're well
into territory where there's a vanishing small percentage of code still
remaining unchanged from 2010.
And yes, that means that even basic functions schedule() and friends have been
reworked in he past decade and a half....
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies