Electronică digitală Frank DeCaire Uncategorized Tweak Kernel’s Scheduler pentru a îmbunătăți performanța pe Android [Partea 2]

Tweak Kernel’s Scheduler pentru a îmbunătăți performanța pe Android [Partea 2]

Bine ați venit înapoi la un alt ghid de modificare a programului de sarcini Kernel pentru Android. În articolul precedent, am acoperit câteva opțiuni fundamentale de configurare a programului de sarcini, care pot fi reglate manual pentru a stimula performanța pe orice tip de dispozitiv Android. În situația în care nu ați verificat deja acest articol, vă sugerăm cu tărie să faceți acest lucru înainte de a continua, deoarece include câteva informații benefice pentru o înțelegere mult mai bună exact a modului în care funcționează cu adevărat programul de sarcini, precum și exact cum să modificați programul de sarcini al Kernel.

Reduceți programul de sarcini al kernelului

În afară de parametrii fundamentali discutați în articolul precedent, Linux Task Scheduler implementează câteva caracteristici speciale care încearcă să îmbunătățească distribuția corectă a puterii de procesare. Aceste caracteristici nu creează aceleași rezultate exacte pe toate sistemele, precum și pe cazuri de utilizare, astfel încât acestea pot fi activate sau dezactivate în timpul rulării. Acestea sunt oferite cu debugf -urile de kernel. Cu toate acestea, nu toate Kernels împachetează suport pentru funcțiile de debugfs de reglare a programatorului. Puteți descoperi dacă kernel -ul dvs. acceptă modificarea acestor caracteristici prin introducerea comenzii respectă cu comanda din interiorul unei aplicații terminale (ca Superuser):

Cat/Sys/Kernel/Debug/Sched_Features
Dacă primiți o ieșire precum următoarele, atunci kernelul dvs. acceptă modificarea funcțiilor de depanare la Runtime:

Dacă primiți o ieșire de eroare „astfel de date sau director”, puteți încerca să instalați debugfs kernel, în situația în care este oferit, însă nu este montat la boot:

Mount -t Debugfs None/Sys/Kernel/Debug
Dacă această comandă nu creează o eroare, puteți încerca să treceți din nou prima comandă.

Comutarea unei caracteristici de depanare a planificatorului

Pentru a permite o caracteristică de depanare a planificatorului, trebuie doar să -i compuneți numele în fișierul Sched_Features. De exemplu:

Echo Gentle_Fair_sleepers>/sys/kernel/debug/sched_features
Pentru a dezactiva o caracteristică, trebuie să -și compuneți numele în același fișier exact, cu toate acestea, cu un „nr.” În față. De exemplu:

echo no_gentle_fair_sleepers>/sys/kernel/debug/sched_features

Nu ratați
Idei de administrare Android Ram, precum și trucuri

Cele mai tipice caracteristici de depanare a planificatorului

Nu este garantat faptul că un anumit nucleu va suporta toate funcțiile de programare a sarcinilor discutate mai jos. Asistența pentru caracteristici variază între versiunile kernel, precum și între implementările gadget. Toate caracteristicile acceptate sunt cele conținute în ieșirea comenzii „Cat/Sys/Kernel/Debug/Sched_Features”. Caracteristicile care încep cu un „nr.” sunt cele acceptate, cu toate acestea, în prezent dezactivate.

Gentle_fair_sleepers

Această funcție încearcă să minimizeze timpul de rulare al traverselor (procese care tind să doarmă mult timp). Drept urmare, mai mult timp de rulare este distribuit în sarcini active. Unii indivizi raportează că dezactivarea acestei funcții poate spori receptivitatea pe dispozitivele low-end.

Afine_wakeups

Puneți o sarcină care se trezește pe același procesor ca și sarcina care a trezit -o. Aceasta presupune că noua sarcină va funcționa exact la aceleași date din memorie ca cea anterioară. Aranjarea acesteia pe același procesor va îmbunătăți localitatea cache (citiți mai jos pentru mai multe informații despre localitatea cache).

Rt_runtime_share

Necesităm o înțelegere mai profundă a sarcinilor pentru a înțelege această caracteristică: pe Linux, există diferite priorități de aranjare a sarcinilor. Preocuparea de aranjare a unei sarcini definește exact cât de importantă este această sarcină, precum și exact cât de multe resurse vor obține de la planificator. O mulțime de sarcini rulează utilizarea Prioritiei Sched. Alte priorități sunt Sched_Batch, Sched_RR, Sched_FiFo, precum și Sched_Deadline. Ultimele trei dintre aceste priorități sunt priorități în timp real, create pentru sarcini care necesită să funcționeze cât mai repede posibil, cât mai curând posibil.

Task Scheduler atribuie fiecărui procesor doi parametri speciali: rt_runtime, precum și rt_period. Rt_period este perioada de aranjare care este echivalentă cu 100% lățime de bandă a procesorului. Rt_runtime este momentul în care fiecare procesor rulează doar sarcini în timp real. Toate celelalte sarcini rulează pentru timp [rt_period – rt_runtime]. De obicei, programul de sarcini kernel oferă 95% din timpul procesorului pentru sarcini în timp real, precum și 5% pentru toate celelalte.

Rt_runtime_share permite unui procesor să ruleze o sarcină în timp real până la 100% din timp, împrumutând RT_Runtime de la alte procesoare. CPU-uri care împrumută rt_runtime poate rula apoi sarcini non-realtime pentru mai mult timp. Unii designeri de kernel personalizați dezactivează această funcție în mod implicit, deoarece poate face un procesor care nu poate deservi sarcini non-reacționate în timp ce se aranjează strict pe acesta, precum și să scadă performanța.

Next_buddy

În general, pe Linux, atunci când o sarcină se trezește, aceasta preveni (= ia locația) sarcina care a funcționat înainte pe procesor (preemptionarea de trezire). Next_buddy se ocupă de situația în care sarcina care se trezește nu provoacă preeminarea. Când Next_Buddy este activat, sarcina care tocmai s -a trezit va rula la următorul eveniment de aranjare. De asemenea, această funcție îmbunătățește localitatea cache.

Trebuie citit
HackBench – Descoperiți Kernel cel mai performant pentru Android

Last_buddy

Wnull

Leave a Reply

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