GNU/Linux >> Znalost Linux >  >> Linux

Jaký je koncept vruntime v CFS

Vruntime je virtuální runtime procesu, který pomáhá sledovat, jak dlouho proces běží. Vruntime je členem struktury sched_entity definované v include/linux/sched.h

Min_vruntime představuje minimální dobu běhu cfs runqueue. Představuje minimum ze všech vruntime procesů, které jsou naplánovány v dané runqueue cfs. Min_vruntime je členem struktury cfs_rq definované v include/linux/sched.h

Účelem min_vruntime je vybrat další proces v runqueue cfs ke spuštění. Aby byl ke všem procesům spravedlivý, plánovač CFS vybere proces s minimálním časem běhu, který se má spustit jako první.

Odkaz na include/linux/sched.h je:https://elixir.bootlin.com/linux/latest/source/include/linux/sched.h


vruntime je na vlákno; je to člen vnořený do task_struct.

Vruntime je v podstatě měřítkem "runtime" vlákna - množství času, které strávilo na procesoru. Smyslem CFS je být spravedlivý ke všem; proto se algo scvrkává na jednoduchou věc:(mezi úlohami v dané runqueue) úloha s nejnižším vruntime je úloha, která si nejvíce zaslouží spuštění, proto ji vyberte jako „další“. (Skutečná implementace se pro efektivitu provádí pomocí rbstromu).

Vezmeme-li v úvahu různé faktory – jako je priorita, nice value, cgroups atd. – výpočet vruntime není tak přímočarý jako jednoduchý přírůstek. Doporučuji přečíst si příslušnou sekci v "Professional Linux Kernel Architecture", Mauerer, Wrox Press - je to velmi podrobně vysvětleno.

Podívejte se níže na rychlý pokus o shrnutí některých z toho.

Jiný zdroj:Dokumentace/plánovač/sched-design-CFS.txt

Rychlé shrnutí – výpočet vruntime: (na základě knihy)

  • Většina práce se provádí v kernel/sched_fair.c:__update_curr()

  • Volání na časovači

  • Aktualizuje fyzický a virtuální čas, který „aktuální“ právě strávil na procesoru

  • U úloh, které běží s výchozí prioritou, tj. s nice hodnotou 0, je strávený fyzický a virtuální čas identický

  • Ne tak pro úkoly na jiných prioritních (pěkných) úrovních; takže výpočet doby běhu je ovlivněn prioritou proudu pomocí faktoru zátěže

    delta_exec =(dlouhé bez znaménka)(nyní – curr->exec_start);// ...delta_exec_weighted =calc_delta_fair(delta_exec, curr);curr->vruntime +=delta_exec_weighted;

Když zanedbáváme některé kontroly zaokrouhlení a přetečení, calc_delta_fair vypočítá hodnotu danou následujícím vzorcem:

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

Jde o to, že důležitější úkoly (ty s nižší hodnotou nice) budou mít větší váhu; takže podle výše uvedených rovnic bude jim zaúčtovaný vruntime menší (takže budou zařazeny více doleva na rbtree!).


Linux
  1. Jaký je trik LD_PRELOAD?

  2. Co znamená *nix?

  3. Jaké je použití $# v Bash

  1. Jaké je výchozí heslo obrazovky?

  2. Jaký je koncept vytvoření souboru s nula bajty v Linuxu?

  3. Co je to souborový systém NSFS?

  1. Čím je linuxová komunita výjimečná?

  2. Co je zlatý linker?

  3. Jaký je uživatel debian-+?