GNU/Linux >> Tutoriels Linux >  >> Linux

Quel est le concept de vruntime dans CFS

Le vruntime est le runtime virtuel d'un processus qui aide à suivre la durée d'exécution d'un processus. Le vruntime est membre de la structure sched_entity définie dans include/linux/sched.h

Le min_vruntime représente le vruntime minimum d'une file d'attente cfs. Il représente le minimum de tous les vruntime des processus planifiés sur cette file d'attente cfs. Le min_vruntime est un membre de la structure cfs_rq définie dans include/linux/sched.h

Le but de min_vruntime est de sélectionner le processus suivant dans la file d'attente cfs à exécuter. Afin d'être équitable pour tous les processus, le planificateur CFS sélectionne le processus avec le minimum de vruntime à exécuter en premier.

Le lien vers include/linux/sched.h est :https://elixir.bootlin.com/linux/latest/source/include/linux/sched.h


vruntime est par thread ; c'est un membre imbriqué dans task_struct.

Essentiellement, vruntime est une mesure de la "durée d'exécution" du thread - le temps qu'il a passé sur le processeur. L'intérêt du CSA est d'être juste envers tous; par conséquent, le type d'algo se résume à une chose simple :(parmi les tâches d'une file d'attente donnée), la tâche avec le temps de vrun le plus bas est la tâche qui mérite le plus d'être exécutée, donc sélectionnez-la comme "suivante". (La mise en œuvre réelle est effectuée à l'aide d'un rbtree pour plus d'efficacité).

En tenant compte de divers facteurs - comme la priorité, la valeur agréable, les groupes de contrôle, etc. - le calcul de vruntime n'est pas aussi simple qu'un simple incrément. Je suggérerais de lire la section correspondante dans "Professional Linux Kernel Architecture", Mauerer, Wrox Press - elle est expliquée en détail.

Veuillez voir ci-dessous une tentative rapide de résumer une partie de cela.

Autre ressource :Documentation/scheduler/sched-design-CFS.txt

Résumé rapide – Calcul du vruntime : (basé sur le livre)

  • La plupart du travail est effectué dans kernel/sched_fair.c:__update_curr()

  • Appelé sur timer tick

  • Met à jour le temps physique et virtuel que 'current' vient de passer sur le processeur

  • Pour les tâches qui s'exécutent avec la priorité par défaut, c'est-à-dire la valeur nice 0, les temps physiques et virtuels passés sont identiques

  • Ce n'est pas le cas pour les tâches à d'autres niveaux de priorité (nice); ainsi, le calcul de vruntime est affecté par la priorité du courant à l'aide d'un facteur de poids de charge

    delta_exec =(unsigned long)(now – curr->exec_start);// ...delta_exec_weighted =calc_delta_fair(delta_exec, curr);curr->vruntime +=delta_exec_weighted;

En négligeant certains arrondis et contrôles de débordement, ce que fait calc_delta_fair est de calculer la valeur donnée par la formule suivante :

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

Le fait est que les tâches plus importantes (celles avec une valeur de nice inférieure) auront des poids plus importants ; ainsi, par les équations ci-dessus, le vruntime qui leur est attribué sera plus petit (les mettant ainsi en file d'attente plus à gauche sur le rbtree !).


Linux
  1. Ce qui fait de Linux le système d'exploitation durable

  2. Qu'est-ce que l'astuce LD_PRELOAD ?

  3. Quelle est la signification de *nix ?

  4. Qu'est-ce que le linker d'or ?

  5. Qu'est-ce que l'utilisateur debian-+ ?

Qu'est-ce que la commande Linux Watch + Exemples

Qu'est-ce que le Shell sous Linux ?

NVMe vs M.2 :Quelle est la différence ?

iptables vs nftables :quelle est la différence ?

Qu'est-ce que la commande kill sous Linux ?

Qu'est-ce que la vulnérabilité Logjam ?