Vylepšení plánovače úloh společnosti Tweak Kernel pro zlepšení výkonu na Android [část 2]

Vítejte zpět na další průvodce vylepšením plánovače jádra pro Android. V předchozím článku jsme zahrnuli některé možnosti konfigurace plánovače úloh, které lze ručně vyladit, aby se zvýšila výkon na libovolném typu zařízení Android. V situaci jste tento článek již nezkontrolovali, důrazně navrhujeme, aby to předtím, protože obsahuje některé prospěšné informace pro mnohem lepší pochopení toho, jak přesně funguje, jak plánovač úkolů skutečně funguje, a přesně jak upravit plánovač úkolů jádra.

Vytvořit plánovač úloh vylepšení jádra

Kromě základních parametrů diskutovaných v předchozím článku implementuje plánovač úloh Linux některé speciální funkce, které se snaží zvýšit jeho spravedlivé rozdělení výkonu zpracování. Tyto funkce nevytvářejí přesně stejné výsledky ve všech systémech i případech použití, takže mohou být povoleny nebo deaktivovány za běhu. Jsou nabízeny s jádrem debugfů. Ne všechny jádra balí podporu pro funkce vylepšení plánovače debugfs. Můžete zjistit, zda vaše jádro podporuje změnu těchto funkcí zadáním dodržování příkazu uvnitř aplikace terminálu (jako superuživatel):

kočka/sys/jádro/ladění/plán.
Pokud získáte výstup jako následující, pak vaše jádro podporuje změnu funkcí ladění za běhu:

Pokud získáte chybový výstup „žádný takový data nebo adresář“, můžete se pokusit nainstalovat debugfy jádra, v situaci je však nabízen, avšak není namontován při spuštění:

Mount -T Debugfs None/SYS/KERNEL/LUGUG
Pokud tento příkaz nevytvoří chybu, můžete zkusit znovu předat první příkaz.

Přepínání funkce ladění plánovače

Chcete -li povolit funkci ladění plánovače, pouze vyžadujete, aby jeho název vytvořil do souboru Sched_Features. Například:

Echo gentle_fair_Sleepers>/sys/jádro/debug/plán.
Chcete -li zakázat funkci, musíte také skládat jeho název uvnitř přesně stejného souboru, ale s „NO_“ vpředu. Například:

Echo no_gentle_fair_sleepers>/sys/jádro/debug/plán.

Nenechte si ujít
Nápady správy Android Ram a triky

Nejtypičtější funkce ladění plánovače

Není zaručeno, že určité jádro bude podporovat všechny funkce plánovače úloh diskutované níže. Podpora funkcí se liší mezi verzemi jádra a mezi implementacemi gadgetu. Všechny podporované funkce jsou ty obsažené na výstupu příkazu „CAT/SYS/KERNEL/LUDUG/SMERN_FEATURES“. Funkce, které začínají „NO_“, jsou ty, které jsou podporovány, avšak v současné době deaktivované.

Gentle_fair_Sleepers

Tato funkce se snaží minimalizovat dobu běhu pražců (procesy, které mají tendenci spát po dlouhou dobu). Výsledkem je, že více runtime je distribuováno do aktivních úkolů. Někteří jednotlivci uvádějí, že deaktivace této funkce může zvýšit citlivost na zařízení s nízkým koncem.

Afine_wakeups

Vložte úkol, který se probudí na přesně stejném procesoru jako úkol, který jej probudil. To předpokládá, že nový úkol bude fungovat na přesně stejných datech v paměti jako předchozí. Uspořádání na stejném CPU zlepší lokalitu mezipaměti (najdete v níže uvedené informace o lokalitě mezipaměti).

Rt_runtime_share

Požadujeme nějaké hlubší uspořádání úkolů, které porozumění této funkci: v Linuxu existují různé priority uspořádání úkolů. Zájem o uspořádání úkolu definuje přesně, jak důležitý je tento úkol a přesně, kolik zdrojů získá od plánovače. Mnoho úkolů běží s využitím priority Sched_Other (SMERT_NORMAL na novějších jádrech). Dalšími priority jsou Sched_batch, Sched_rr, Sched_fifo a také naplánovací_deadline. Poslední tři z těchto priorit jsou priority v reálném čase, které jsou vytvořeny pro úkoly, které vyžadují běh co nejrychleji a jakmile jsou vytvořeny.

Plánovač úloh přiřadí každý CPU dva speciální parametry: rt_runtime i rt_period. RT_PERIOD je doba uspořádání, která odpovídá 100% šířce pásma CPU. RT_Runtime je čas, kdy každý CPU provozuje pouze úkoly v reálném čase. Všechny ostatní úkoly běží na čas [rt_period – rt_runtime]. Plánovač úloh jádra obvykle poskytuje 95% času CPU do úkolů v reálném čase a 5% všem ostatním.

RT_Runtime_Share umožňuje CPU spustit úkol v reálném čase až 100% času tím, že si půjčí RT_Runtime z jiných CPU. CPU, které půjčují RT_Runtime, pak mohou spustit nerealtime úkoly na více času. Někteří designéři jádra ve výchozím nastavení deaktivují tuto funkci ve výchozím nastavení, protože může způsobit, že CPU není schopen obsluhovat nereálné úkoly přísně uspořádané a snížit výkon.

Next_buddy

Obecně na Linuxu, když se úkol probudí, předchůdce (= vezme umístění) úkolu, který byl spuštěn dříve na CPU (Preemption Wakeup). Next_Buddy zvládne situaci, kdy úkol, který se probudí, nezpůsobuje preempci. Když bude povolen Next_Buddy, spustí se na další události uspořádání úlohy, která se právě probudí. Tato funkce také zvyšuje lokalitu mezipaměti.

Musíš číst
HackBench – Objevte nejlepší předváděcí jádro pro Android

Last_buddy

Wnull

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post