Significado do parâmetro “kernel.sched_min_granularity_ns” no RHEL6 / RHEL7

1

Enquanto estudávamos o comportamento do kernel do RHEL6 ao RHEL7, nos deparamos com uma explicação sobre os parâmetros do kernel do RHEL6 :

> kernel.sched_min_granularity_ns

sched_min_granularity_ns is the initial value for the scheduler period. The scheduler period is a period of time during which all runnable tasks should be allowed to run at least once. While CFS has no concept of time slices, you can think of the period as the initial chunk of time which is then divided evenly into timeslices, one for each runnable process. Note that this tunable only specifies the initial value. When too many tasks become runnable the scheduler will increase the period to avoid shortening run times too much.

/usr/share/doc/kernel-doc-2.6.32/Documentation/scheduler/sched-design-CFS.txt

>kernel.sched_latency_ns

It configures targeted preemption latency for CPU bound tasks.

A descrição relativa ao parâmetro kernel.sched_min_granularity_ns nos confundiu. Nossa compreensão do parâmetro é que é a quantidade mínima de tempo que cada tarefa executável seria executada na CPU (ou seja, o intervalo de tempo fornecido para cada tarefa executável). Para kernel.sched_latency_ns , é o período durante o qual todas as tarefas executáveis seriam executadas pelo menos uma vez.

Obtemos nossa compreensão de muitos outros artigos, como este e esse . Alguns links podem se referir a uma versão do kernel diferente, mas a descrição geral do parâmetro não deve ser revertida.

    
por Chota Bheem 16.08.2018 / 08:58

2 respostas

1

Concordado. O documento RHEL6 não é consistente com o documento citado. Ignore isso.

link

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. It defaults to a setting suitable for desktop workloads.

O valor padrão disso na mesma versão foi 1ms, o que faz sentido como mínimo para uma timeslice (correspondente ao CONFIG_HZ = 1000).

link

1 ms é várias vezes pequeno demais para um padrão plausível para "um período de tempo durante o qual todas as tarefas executáveis devem ser executadas pelo menos uma vez".

/*
 * Targeted preemption latency for CPU-bound tasks:
 * (default: 5ms * (1 + ilog(ncpus)), units: nanoseconds)
 *
 * NOTE: this latency value is not the same as the concept of
 * 'timeslice length' - timeslices in CFS are of variable length
 * and have no persistent notion like in traditional, time-slice
 * based scheduling concepts.
 *
 * (to see the precise effective timeslice length of your workload,
 *  run vmstat and monitor the context-switches (cs) field)
 */
unsigned int sysctl_sched_latency = 5000000ULL;

/*
 * Minimal preemption granularity for CPU-bound tasks:
 * (default: 1 msec * (1 + ilog(ncpus)), units: nanoseconds)
 */
unsigned int sysctl_sched_min_granularity = 1000000ULL;
    
por 02.09.2018 / 16:02
0

O documento ao qual você vinculou contém estas definições:

  • kernel.sched_latency_ns
    sched_latency_ns is the initial value for the scheduler period.  The scheduler period is a period of time during which all runnable tasks should be allowed to run at least once.  While CFS has no concept of time slices, you can think of the period as the initial chunk of time which is then divided evenly into timeslices, one for each runnable process.  Note that this tunable only specifies the initial value.  When too many tasks become runnable the scheduler will use kernel.sched_min_granularity_ns instead.
    /usr/share/doc/kernel-doc-2.6.32/Documentation/scheduler/sched-design-CFS.txt

  • kernel.sched_min_granularity_ns
    sched_min_granularity_ns specifies the target minimum scheduler period in which a single task will run.  This tunable is used only when running load is high.  Unlike sched_latency_ns, this tunable specifies the target period allocated for each task to run rather than the time in which all tasks should be run once.

Então a página da web já foi corrigida - diz "Atualizado 2018-08-30T21: 11: 42 + 00: 00"; isto é, cerca de quatro dias atrás; duas semanas depois de postar sua pergunta.

    
por 03.09.2018 / 05:47