GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es el concepto de vruntime en CFS?

El vruntime es el tiempo de ejecución virtual de un proceso que ayuda a rastrear cuánto tiempo se ha ejecutado un proceso. vruntime es miembro de la estructura sched_entity definida en include/linux/sched.h

El min_vruntime representa el tiempo de ejecución mínimo de una cola de ejecución de cfs. Representa el mínimo de todo el tiempo de ejecución virtual de los procesos que está programado en esa cola de ejecución de cfs. min_vruntime es un miembro de la estructura cfs_rq definida en include/linux/sched.h

El propósito de min_vruntime es seleccionar el siguiente proceso en la cola de ejecución de cfs para ejecutar. Para ser justos con todos los procesos, el planificador de CFS selecciona el proceso con el tiempo de ejecución mínimo para ejecutarlo primero.

El enlace para incluir/linux/sched.h es:https://elixir.bootlin.com/linux/latest/source/include/linux/sched.h


vruntime es por subproceso; es un miembro anidado dentro de task_struct.

Esencialmente, vruntime es una medida del "tiempo de ejecución" del subproceso:la cantidad de tiempo que ha pasado en el procesador. El objetivo de CFS es ser justo con todos; por lo tanto, el algoritmo se reduce a algo simple:(entre las tareas en una cola de ejecución dada) la tarea con el tiempo de ejecución más bajo es la tarea que más merece ejecutarse, por lo tanto, selecciónela como 'siguiente'. (La implementación real se realiza utilizando un rbtree para mayor eficiencia).

Teniendo en cuenta varios factores, como prioridad, buen valor, cgroups, etc., el cálculo de vruntime no es tan sencillo como un simple incremento. Sugeriría leer la sección correspondiente en "Professional Linux Kernel Architecture", Mauerer, Wrox Press; se explica con gran detalle.

Vea a continuación un intento rápido de resumir algo de esto.

Otro recurso:Documentation/scheduler/sched-design-CFS.txt

Resumen rápido:cálculo de tiempo de ejecución: (basado en el libro)

  • La mayor parte del trabajo se realiza en kernel/sched_fair.c:__update_curr()

  • Llamado en el tictac del temporizador

  • Actualiza el tiempo físico y virtual que 'actual' acaba de pasar en el procesador

  • Para las tareas que se ejecutan con la prioridad predeterminada, es decir, con un valor agradable de 0, el tiempo físico y virtual dedicado es idéntico

  • No así para tareas en otros niveles de prioridad (bueno); por lo tanto, el cálculo de vruntime se ve afectado por la prioridad de la corriente utilizando un factor de peso de carga

    delta_exec =(largo sin firmar)(ahora – curr->exec_start);// ...delta_exec_weighted =calc_delta_fair(delta_exec, curr);curr->vruntime +=delta_exec_weighted;

Dejando de lado algunas comprobaciones de redondeo y desbordamiento, lo que hace calc_delta_fair es calcular el valor dado por la siguiente fórmula:

delta_exec_weighed = delta_exec * (NICE_0_LOAD / curr->load.weight)

La cuestión es que las tareas más importantes (aquellas con un valor agradable más bajo) tendrán pesos más grandes; por lo tanto, según las ecuaciones anteriores, el tiempo de ejecución virtual que se les atribuirá será más pequeño (¡por lo tanto, se pondrán en cola más a la izquierda en el árbol rb!).


Linux
  1. ¿Qué es el truco LD_PRELOAD?

  2. ¿Cuál es el significado de POSIX?

  3. ¿Cuál es la contraseña predeterminada de la pantalla?

  4. ¿Qué es el sistema de archivos NSFS?

  5. ¿Qué es el usuario debian-+?

¿Qué es el comando Watch de Linux + ejemplos?

¿Qué es el Shell en Linux?

NVMe vs M.2:¿Cuál es la diferencia?

iptables vs nftables:¿Cuál es la diferencia?

¿Qué es el comando matar en Linux?

¿Qué es la vulnerabilidad de Logjam?