Tweak Kernel Scheduler pentru a stimula performanța pe Android [Partea 1]

Se înțelege în mod obișnuit că Android este un sistem de operare cu mult spațiu pentru configurația personalizată. Acest lucru se datorează în parte utilizării nucleului Linux în centrul său. Astăzi, vom discuta despre configurația uneia dintre cele mai scăzute părți din kernel-ul Android: programatorul său de sarcini. Cu configurația potrivită a planificatorului de sarcini, puteți stimula performanța pe Android. Continuați să citiți pentru a descoperi exact cum vă puteți modifica gadgetul pentru cea mai mare performanță.

Dar care este exact programul de sarcini al unui nucleu?

Programatorul de sarcini al unui sistem este responsabil pentru distribuirea procesoarelor între un număr mare de sarcini de rulare. Face asta oferind fiecărei sarcini un timp de rulare pe procesor, precum și schimbarea acesteia cu încă unul pe intervale de timp specifice. În general, există două tipuri de programare a sarcinilor: aranjarea preventivă, precum și programarea cooperativă.

În programarea preventivă, nucleul decide când să prevaleze (= swap) o sarcină de rulare. Poate face asta la aproape orice tip de timp, pe baza algoritmilor de aranjare complexă. În schimb, în ​​planificarea cooperativă, fiecare sarcină este responsabilă pentru notificarea nucleului atunci când nu mai necesită CPU, precum și, prin urmare, poate fi schimbată. În acest caz, nucleul este responsabil doar pentru a determina cel mai bun candidat pentru aranjare, precum și pentru a -l pune pe CPU.

Vedeți și: Mituri Android, precum și fapte: Biting 10 Legends Metropolitan

Aranjarea sarcinilor pe Android

Android rulează deasupra Linux, care este un kernel preventiv. Programatorul de sarcini este declanșat la un interval constant codat, constant, intervalul de aranjare. Aceasta este de obicei la fiecare 10 milisecunde pe dispozitivele Android. Când programatorul rulează, acesta decide dacă sarcina de rulare ar trebui să fie împiedicată sau nu, precum și ce sarcină de la cei care așteaptă să ruleze ar trebui să -și ia locația pe procesor. De la versiunea 2.6.23, Linux Kernel utilizează un planificator de sarcini extrem de avansat, Scheduler Total Fair (CFS). CFS încearcă să ofere fiecărei sarcini o cantitate corectă de timp de rulare pe procesor pe baza unui număr de factori, inclusiv greutatea sarcinii, precum și prioritatea. Algoritmul acestui program este destul de complex de înțeles. De aceea, există un număr destul de mic de designeri de kernel care contribuie la dezvoltarea sa.

Modificând programatorul CFS

Premise

Acces rădăcină

O aplicație de emulator terminal

În ciuda complexității sale, CFS Scheduler oferă câteva opțiuni de configurare. Reglarea acestor alegeri ar putea avea un impact extrem de impact asupra performanței sistemului. În mod tradițional, instrumentul de linie de comandă SYSCTL este utilizat pentru examinare, precum și modificarea parametrilor kernel la runtime, inclusiv parametrii de planificator. Vom folosi acest instrument în ghidul nostru, deoarece este preinstalat pe majoritatea Androids-urilor de acolo. Oricum, în primul rând, trebuie să facem o mică introducere:

Cum se utilizează sysctl

Listarea parametrilor, precum și a valorilor lor actuale
La listarea tuturor parametrilor de kernel oferiți cu valorile atribuite, furnizați comanda respectivă din interiorul unei aplicații terminale:

sysctl -a
Pentru a obține doar parametrii legați de programatorul de sarcini, am putea furniza comanda respectată cu:

sysctl -a | „Program” grep
Aceasta oferă respectarea ieșirii pe dispozitivul nostru de exemplu:

Listarea parametrilor este destul de mare. Vom discuta mai jos doar câțiva dintre acești parametri, care sunt cei mai importanți.

Schimbarea unui parametru
Putem modifica un parametru care utilizează o comandă în tipul sysctl -w [parametru] = valoarea în care parametrul este numele parametrului kernel, precum și valoarea este noua valoare. De exemplu:

sysctl -w kernel.sched_scaling_enable = 1

Citiți mai jos pentru mai multe exemple de utilizare a SYSCTL. Rețineți că modificările nu o fac printr -o repornire. Puteți utiliza un script init.d pentru a aplica orice tip de modificări necesare la ora de pornire. În cele din urmă, asigurați -vă că rulați comenzi SYSCTL cu privilegii root. Puteți obține privilegii rădăcină într -o aplicație terminală, oferind comanda respectată:

SU
Parametri de bază pentru planificarea sarcinilor de bază

Nu ratați: trecut, precum și viitorul nucleului Linux pe dispozitive mobile

kernel.sched_min_granularity_ns
Sarcinile legate de procesor sunt garantate să funcționeze pentru acest timp minim înainte de a fi prevenite. O sarcină este considerată legată de procesor atunci când timpul necesar total depinde doar de viteza procesorului. De exemplu, o sarcină care așteaptă un pachet pentru a apărea cu Web-ul nu este o sarcină legată de procesor. În general, creșterea acestei valori va stimula debitul unui sistem. Pe de altă parte, valorile la fel de mari pot reduce receptivitatea gadgetului. Acest parametru ia valori în nanosecunde. De exemplu, pentru a -l seta la 4000000 nanosecunde (4 milisecunde), putem oferi comanda respectă cu comanda:

sysctl -w kernel.sched_min_granularity_ns = 4000000
Conform documentației oficiale a kernel -ului Linux, aceasta este reglatorul central CFS Scheduler.

kernel.sched_latency_ns
Toate sarcinile de pe coada de rulare a CFS sunt garantate să fie aranjate cel puțin în această perioadă.null

Leave a Reply

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