Направете планиращия задача на Kernel за подобряване на производителността на Android [Част 2]

Добре дошли обратно към още един ръководство за планиране на задачи за ядро ​​за Android. В предишната статия разгледахме някои основни опции за конфигуриране на планиращите задачи, които могат да бъдат настроени ръчно, за да повишат производителността на всеки тип Android устройство. В ситуация вече не сте проверили тази статия, силно предлагаме да го направите, преди да продължите, тъй като тя включва някаква полезна информация за много по -добре да разбере как точно работи планиращият на задачите, както и точно как да промените планиращия задачи на Kernel.

Нагласете планиращия задачи на Kernel

Освен основните параметри, обсъдени в предишната статия, Linux Task Scheduler реализира някои специални характеристики, които се опитват да подобрят неговото справедливо разпределение на мощността на обработката. Тези функции не създават точно същите резултати на всички системи, както и в случаите на използване, така че те могат да бъдат активирани или деактивирани по време на изпълнение. Те се предлагат с грешките на ядрото. Не всички поддръжка на ядрата пакетират за настройка на функциите на Debugfs на Scheduler. Можете да откриете дали вашето ядро ​​поддържа промяна на тези функции, като въведете спазването на командата вътре в терминална приложение (като суперпотребител):

CAT/SYS/KENEL/DEBUG/SCHED_FEATURES
Ако получите изход като следното, тогава вашето ядро ​​поддържа промяна на функциите за отстраняване на грешки по време на изпълнение:

Ако получите изход на грешка „Без такива данни или директория“, можете да опитате да инсталирате Debugfs на ядрото, в ситуация се предлага, но не е монтирано на Boot:

mount -t debugfs none/sys/kernel/debug
Ако тази команда не създаде грешка, можете да опитате отново да предадете първата команда.

Превключване на функция за отстраняване на грешки

За да разрешите функция за отстраняване на грешки, вие просто изисквате да съставите името му във файла sched_features. Например:

echo gentle_fair_sleepers>/sys/kernel/debug/sched_features
За да деактивирате функция, също трябва да композирате името му в точно същия файл, но с „no_“ отпред. Например:

echo no_gentle_fair_sleepers>/sys/kernel/debug/sched_features

Не пропускайте
Идеи за администрация на Android RAM, както и трикове

Най -типичните функции за отстраняване на грешки в планировката

Не е гарантирано, че определено ядро ​​ще поддържа всички функции на планиращите задачи, обсъдени по -долу. Поддръжката за функции варира между версиите на ядрото, както и между реализациите на джаджи. Всички поддържани функции са тези, съдържащи се в изхода на командата „cat/sys/kernel/debug/sched_features“. Характеристиките, които започват с „No_“, са поддържаните, но в момента са деактивирани.

Gentle_fair_sleepers

Тази функция се опитва да сведе до минимум времето на изпълнение на траверси (процеси, които са склонни да спят дълго време). В резултат на това се разпределя повече време за изпълнение на активни задачи. Някои хора съобщават, че деактивирането на тази функция може да подобри отзивчивостта на устройства от нисък клас.

Affine_wakeups

Поставете задача, която се събужда на точно същия процесор като задачата, която го събуди. Това предполага, че новата задача ще работи върху същите данни в паметта като предишната. Подреждането му на точно същия процесор ще подобри местността на кеша (прочетете по -долу за повече информация за местността на кеша).

Rt_runtime_share

Изискваме някои по -задълбочени задачи за разбиране, за да разберем тази функция: В Linux има различни приоритети за подреждане на задачи. Загрижеността за подреждането на задачата определя точно колко важна е тази задача, както и точно колко ресурси ще получат от планиращия. Много задачи се изпълняват с помощта на график (sched_normal за по -новите ядра) приоритет. Други приоритети са sched_batch, sched_rr, sched_fifo, както и sched_deadline. Последните три от тези приоритети са приоритети в реално време, създадени за задачи, които изискват да работят възможно най-бързо, както и веднага след създаването им.

Планировчик на задачи присвоява всеки процесор два специални параметъра: RT_RUNTIME, както и RT_PERIOD. RT_PERIOD е периодът на подреждане, който е еквивалентен на 100% честотна лента на процесора. RT_RUNTIME е времето, в което всеки процесор изпълнява само задачи в реално време. Всички останали задачи се изпълняват за [RT_PERIOD – RT_RUNTIME] време. Обикновено планировчикът на задачите на ядрото осигурява 95% от времето на процесора за задачи в реално време, както и 5% за всички останали.

RT_RUNTIME_SHARE дава възможност на процесора да изпълнява задача в реално време до 100% от времето, като заема RT_RUNTIME от други процесори. CPU, които заемат RT_RUNTIME, след това могат да изпълняват задачи за не-реално време за повече време. Някои персонализирани дизайнери на ядрото деактивират тази функция по подразбиране, тъй като това може да направи процесора, който не може да обслужва задачи без реално време, строго подредени върху него, както и да намали производителността.

Next_buddy

Като цяло в Linux, когато задача се събуди, тя предвижда (= заема местоположението на) задачата, която се изпълняваше преди на процесора (Wakeup Preemption). Next_Buddy се справя със ситуацията, когато задачата, която се събужда, не причинява превенция. Когато Next_Buddy е активиран, задачата, която току -що се събуди, ще работи на следващото събитие за подреждане. Тази функция също подобрява местността на кеша.

Трябва да се прочете
Hackbench – Открийте най -доброто изпълнение на ядрото за Android

Last_buddy

Wnull

Leave a Reply

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