Why do we need a swapper task in linux?

32,199

Solution 1

The reason is historical and programatic. The idle task is the task running, if no other task is runnable, like you said it. It has the lowest possible priority, so that's why it's running of no other task is runnable.

Programatic reason: This simplifies process scheduling a lot, because you don't have to care about the special case: "What happens if no task is runnable?", because there always is at least one task runnable, the idle task. Also you can count the amount of cpu time used per task. Without the idle task, which task gets the cpu-time accounted no one needs?

Historical reason: Before we had cpus which are able to step-down or go into power saving modes, it HAD to run on full speed at any time. It ran a series of NOP-instructions, if no tasks were runnable. Today the scheduling of the idle task usually steps down the cpu by using HLT-instructions (halt), so power is saved. So there is a functionality somehow in the idle task in our days.

In Windows you can see the idle task in the process list, it's the idle process.

Solution 2

The linux kernel maintains a waitlist of processes which are "blocked" on IO/mutexes etc. If there is no runnable process, the idle process is placed onto the run queue until it is preempted by a task coming out of the wait queue.

The reason it has a task is so that you can measure (approximately) how much time the kernel is wasting due to blocks on IO / locks etc. Additionally it makes the code that much easier for the kernel as the idle task is the same as every task it needs to context switch, instead of a "special case" idle task which could make changing kernel behaviour more difficult.

Solution 3

There is actually one idle task per cpu, but it's not held in the main task list, instead it's in the cpu's "struct rq" runqueue struct, as a struct task_struct * .

This gets activated by the scheduler whenever there is nothing better to do (on that CPU) and executes some architecture-specific code to idle the cpu in a low power state.

Solution 4

You can use ps -ef and it will list the no of process which are running. Then in the first link, it will list the first pid - 0 which is the swapper task.

Share:
32,199
jscoot
Author by

jscoot

Updated on July 18, 2020

Comments

  • jscoot
    jscoot almost 4 years

    The idle task (a.k.a. swapper task) is chosen to run when no more runnable tasks in the run queue at the point of task scheduling. But what is the usage for this so special task? Another question is why i can't find this thread/process in the "ps aux" output (PID=0) from the userland?

  • PypeBros
    PypeBros almost 13 years
    HLT instruction pre-dates the linux scheduler, doesn't it?
  • Samuel Edwin Ward
    Samuel Edwin Ward about 12 years
    @sylvainulg I think it does, but I wouldn't be surprised if the linux scheduling algorithms (or at least some of them) predate the HLT instruction.
  • PypeBros
    PypeBros about 12 years
    @SamuelEdwinWard, that could be. My documentation mentions HLT was already available on 8088 and 8086. 10 years after the earlies Unix variant, then ... but is the algorithm really that old ?
  • Samuel Edwin Ward
    Samuel Edwin Ward about 12 years
    @sylvainulg, it's an interesting question, and I'm not sure where to find the answer. Where did Linux get their scheduling algorithms? Did the PDP-11 have a halt instruction? Did the original UNIX group get their scheduling algorithms from someone even earlier?
  • PypeBros
    PypeBros about 12 years
    @SamuelEdwinWard: apparently, it did: divms.uiowa.edu/~jones/pdp8/man/micro.html#hlt -- on the PDP-11, it looks like WAIT is the instruction one would have used, and HALT is more like "CLI; HLT" in 80x86 lingo.
  • Thayne
    Thayne almost 4 years
    Do all architectures Linux supports have a HLT instruction (or equivalent) though?
  • pericynthion
    pericynthion over 3 years
    Per Wikipedia, "All x86 processors from the 8086 onwards had the HLT instruction, but it ... was not specifically designed to reduce power consumption until the release of the Intel DX4 processor in 1994".