Rozdíl mezi příjemnými prioritami v Linuxu a RT prioritami

V systému Linux řídí plánovač, který tok se provádí a jak dlouho. Je třeba řešit dva protichůdné požadavky: vstup / výstup a výpočetní vodivost.

Pořadí provedení je založeno na politice a plánování priority každého vlákna. V systému Linux verze 2.2 je implementována tabulka. Linux poskytuje 6 zásad: SCHED_FIFO, SCHED_RR, SCHED_DEADLINE, SCHED_DEADLINE, SCHED_OTHER, SCHED_BATCH a SCHED_IDLE. Tyto zásady jsou rozděleny do 2 skupin, s výjimkou SCHED_DEADLINE; SCHED_OTHER, SCHED_IDLE a SCHED_BATCH patří k normální politice a SCHED_FIFO, SCHED_RR je v reálném čase. SCHED_DEADLINE témata jsou speciální a prioritní témata.

Každé vlákno má hodnotu „sched_priority“ a témata s vyšší hodnotou „sched_priority“ než ostatní. sched_priority se někdy nazývá priorita v reálném čase, protože se používá hlavně k výběru pořadí provádění podprocesů pomocí politiky v reálném čase. Normální hodnoty runtime tabulky_priority zásad jsou 0, zatímco vlákna v reálném čase jsou obvykle 1 až 99. systém. Hodnota Sched_priority může být nastavena funkcí sched_setscheduler spolu s politikou a může být ověřena funkcí sched_getscheduler.

Pokud hodnota Sched_priority odpovídá tokům v reálném čase, výchozí vlákno pro ostatní vlákna se nazývá dobrá hodnota. Oblíbený rozsah je -20 (vysoká priorita) až +19 (nízká priorita). Hodnotu potěšení lze nastavit pomocí pěkné funkce nebo funkce setpriority a zkontrolovat pomocí funkce getpriority.

Jak Linux provádí vlákna v reálném čase a v souladu s vašimi oblíbenými prioritami? V reálném čase neexistují žádná omezení doby běhu a Linux v podstatě provádí podproces s hodnotou nejvyšší priority v reálném čase, a to buď před dokončením samočinného provedení podprocesu, nebo před použitím podprocesu s vyšší prioritou. To však často způsobuje problémy, protože pokud nechtěné toky v reálném čase začnou fungovat a nikdy neskončí, jediným způsobem, jak je zastavit, je jít na jiné priority. Od verze 2.6.25 tedy existují další funkce, které zastavují nechtěné streamování v reálném čase, například předběžné omezení doby přehrávání pomocí RLMIT_RTTIME. Pečlivé použití reálného času se však nedoporučuje, protože Linux má inteligentní plánovací systém nazvaný "Full Fair Planner" (CFS) pro jednoduché toky zavedený ve verzi 2.6.23 jádra Linuxu. CFS určuje, které vlákno provést a jak dlouho.

CFS používá pro spravedlivé plánování datový systém červeno-černý strom, jeden z binárních stromů. CFS má časový rozvrh pro každou úlohu a CFS staví za běhu červeno-černý strom úkolů. Strom byl vybrán k provedení úkolu s minimálním časem provedení. Po implementaci CFS přidá čas provedení úlohy a vrátí ji do červeno-černého stromu podle času provedení. To vám umožní provádět dlouhé spací úkoly, jakmile je potřebujete. Pokaždé, když CFS dokončí úlohu, musí vrátit úlohu do stromu a vyhledat další úlohu s minimální dobou provedení. To vyžaduje vytvoření dlouhodobých datových struktur, a to i v nejhorším případě. To je jeden z důvodů, proč je přijat červený strom. V červeném černém stromu je každý uzel červený nebo černý a děti červeného uzlu jsou vždy černé. Ještě důležitější je, že každá cesta z daného uzlu do další generace obsahuje stejný počet černých uzlů. To má za následek kritický rys červeno-černého stromu, kde cesta od kořene k nejdelšímu listu je dvakrát tak dlouhá, než cesta od kořene k nejbližšímu listu není dvojnásobná než cesta hledání, zaručuje nejhorší čas na vstup. a O (log n) jsou vymazány a použity k aktualizaci jejich plánu pro CFS.

Nyní, když víme, jak CFS definuje jeho příkaz k provedení, přejdeme k tomu, jak CFS definuje každý čas provádění. Každá doba provádění se vypočítá výpočtem rovnováhy 4 faktorů: cílová čekací doba, minimální granularita, očekávaný počet úkolů a příjemné hodnoty úkolů. Cílový časový limit je čas, ve kterém musí být každý úkol dokončen alespoň jednou. Minimální hloubka je nejkratší doba provedení, kratší než doba provedení, což má za následek vysoké náklady na kontext přepínání. V zásadě je cílový časový limit rozdělen do každé úlohy podle požadovaných hodnot, takže každá úloha je menší než minimum. Vysoká cílová latence vede k delším dobám běhu, zejména u úkolů s vysokou prioritou, a maximální granularita vede ke stejné době provádění bez ohledu na příznivé hodnoty.

Stručně řečeno, rozdíl mezi příjemnou prioritou a prioritou v reálném čase je následující. Za prvé, dobrá priorita pro normální úkoly, real-time priorita je pro real-time úkoly v jasném pohledu. Za druhé, příjemnou prioritou je doba, kterou je třeba provést, a příkaz k provedení, který má nastavit CFS. Na druhé straně, priorita v reálném čase je hodnota pro určování pořadí provedení a načasování úkolů v reálném čase není omezeno, dokud nejsou splněny jinými úkoly, které mají prioritu. Ačkoli se oba nazývají prioritou, dobrá priorita je pro časové a reálné řazení priorit.