O Linux 3.10 CFS tem “timeslices”?

0

O Linux 3.10 CFS tem "timeslices"?

Estou confuso, porque sched-design-CFS.txt claramente afirma:

CFS uses nanosecond granularity accounting and does not rely on any jiffies or other HZ detail. Thus the CFS scheduler has no notion of "timeslices" in the way the previous scheduler had, and has no heuristics whatsoever. There is only one central tunable (you have to switch on CONFIG_SCHED_DEBUG):

/proc/sys/kernel/sched_min_granularity_ns

which can be used to tune the scheduler from "desktop" (i.e., low latencies) to "server" (i.e., good batching) workloads.

Mas, em seguida, vários guias de ajuste do agendador de tarefas sugerem duas fórmulas diferentes de cálculo de um "timeslice". (Dependendo do número de tarefas executáveis.) Por exemplo, este Guia do OpenSUSE .

Estou executando apenas threads SCHED_FIFO em CPUs isoladas.

    
por Väinö Ertanen 27.06.2018 / 10:39

1 resposta

2

CFS não possui timeslices "na forma como o agendador anterior tinha".

Em CFS a timeslice é basicamente a duração entre comutadores consecutivos para conceder tempo de execução de CPU ao mesmo encadeamento. Isso lhe dá duas opções:

  • Todos os seus threads têm tempo suficiente para executar pelo menos min_granularity_ns dentro de um latency_ns . Então, seu timeslice = scheduling period * (task's weight/total weight of tasks in the run queue)

  • Há muitos encadeamentos para caber no latency_ns , para que seus timeslices aumentem para acomodar mais encadeamentos que desejam executar de acordo com timeslice = number_of_running_tasks * sched_min_granularity_ns

É por isso que CFS representa um Completamente Fair Scheduler, pois não exclui os segmentos com prioridades mais baixas, mas estende indiscriminadamente os timeslices para todos.

    
por 27.06.2018 / 14:19