Android
Android Kernel Optimization
Sök…
Konfiguration med låg RAM
Android stöder nu enheter med 512 MB RAM. Denna dokumentation är avsedd att hjälpa OEM-tillverkare att optimera och konfigurera Android 4.4 för enheter med lågt minne. Flera av dessa optimeringar är generiska nog att de också kan tillämpas på tidigare utgåvor.
Aktivera flagga för låg ramenhet
Vi introducerar ett nytt API som heter ActivityManager.isLowRamDevice () för applikationer för att avgöra om de ska stänga av specifika minnesintensiva funktioner som fungerar dåligt på enheter med låg minne.
För 512MB-enheter förväntas detta API att returnera: "sant" Det kan aktiveras av följande systemegenskap i enhetens makefil.
PRODUCT_PROPERTY_OVERRIDES += ro.config.low_ram=true
Inaktivera JIT
Systemövergripande JIT-minnesanvändning beror på antalet applikationer som körs och kodens fotavtryck för dessa applikationer. JIT upprättar en maximalt översatt kodcache-storlek och vidrör sidorna i den efter behov. JIT kostar någonstans mellan 3M och 6M över ett typiskt körsystem.
De stora apparna tenderar att maximera kodcachen snabbt (som standard har varit 1M). I genomsnitt går JIT-cache-användning någonstans mellan 100 000 och 200 000 byte per app. Att minska den maximala storleken på cachen kan hjälpa något med minnesanvändning, men om den ställs in för lågt skickar JIT till ett spännande läge. För de riktigt låga minnesenheterna rekommenderar vi att JIT är helt inaktiverat.
Detta kan uppnås genom att lägga till följande rad i produktfilen:
PRODUCT_PROPERTY_OVERRIDES += dalvik.vm.jit.codecachesize=0
Hur man lägger till en CPU-guvernör
CPU-guvernören är bara 1 C-fil, som finns i kernel_source / drivers / cpufreq /, till exempel: cpufreq_smartass2.c. Du ansvarar själv för att hitta guvernören (titta i en befintlig kärnrepo för din enhet) Men för att framgångsrikt ringa och sammanställa den här filen till din kärna måste du göra följande ändringar:
- Kopiera din guvernörfil (cpufreq_govname.c) och bläddra till kernel_source / drivers / cpufreq, klistra in den nu.
- och öppna Kconfig (detta är gränssnittet i konfigurationsmenylayouten) när du lägger till en kärna, du vill att den ska dyka upp i din config. Du kan göra det genom att lägga till valet av guvernör.
config CPU_FREQ_GOV_GOVNAMEHERE
tristate "'gov_name_lowercase' cpufreq governor"
depends on CPU_FREQ
help
governor' - a custom governor!
till exempel för smartassV2.
config CPU_FREQ_GOV_SMARTASS2
tristate "'smartassV2' cpufreq governor"
depends on CPU_FREQ
help
'smartassV2' - a "smart" optimized governor!
bredvid att lägga till valet måste du också förklara möjligheten att guvernören blir vald som standardguvernör.
config CPU_FREQ_DEFAULT_GOV_GOVNAMEHERE
bool "gov_name_lowercase"
select CPU_FREQ_GOV_GOVNAMEHERE
help
Use the CPUFreq governor 'govname' as default.
till exempel för smartassV2.
config CPU_FREQ_DEFAULT_GOV_SMARTASS2
bool "smartass2"
select CPU_FREQ_GOV_SMARTASS2
help
Use the CPUFreq governor 'smartassV2' as default.
- kan du inte hitta rätt plats att uttrycka det? Sök bara efter “CPU_FREQ_GOV_CONSERVATIVE”
och placera koden under, samma sak räknas för “CPU_FREQ_DEFAULT_GOV_CONSERVATIVE”
Nu när Kconfig är klar kan du spara och stänga filen.
-
/drivers/cpufreq
Makefile när du fortfarande är i mappen/drivers/cpufreq
. Lägg till den linje som motsvarar din CPU-guvernör i Makefile. till exempel:
obj-$(CONFIG_CPU_FREQ_GOV_SMARTASS2) += cpufreq_smartass2.o
Var försiktig så att du inte kallar den ursprungliga C-filen, utan O-filen! vilket är den sammanställda C-filen. Spara filen.
- Flytta till:
kernel_source/includes/linux
.cpufreq.h
nucpufreq.h
ner tills du ser något som:
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND)
extern struct cpufreq_governor cpufreq_gov_ondemand;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_ondemand)
(andra cpu-guvernörer listas också där)
Lägg nu till posten med den valda CPU-guvernören, exempel:
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_SMARTASS2)
extern struct cpufreq_governor cpufreq_gov_smartass2;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_smartass2)
Spara filen och stäng den.
Den inledande installationen av CPU Governor är nu klar. När du har gjort alla steg framgångsrikt bör du kunna välja din guvernör på menyn ( menuconfig
, xconfig
, gconfig
, nconfig
). När det har markerats i menyn kommer det att inkluderas i kärnan.
Åtagande som är nästan samma som ovanstående instruktioner: Lägg till smartassV2 och lulzactive governor commit
I / O Schedulers
Du kan förbättra din kärna genom att lägga till nya I / O-schemaläggare om det behövs. Globalt sett är guvernörer och schemaläggare samma; båda ger ett sätt hur systemet ska fungera. För schemaläggarna handlar det emellertid om dataströmmen för ingång / utgång förutom CPU-inställningarna. I / O-schemaläggare bestämmer hur en kommande I / O-aktivitet ska planeras. Standard schemaläggare som noop eller cfq presterar mycket rimligt.
I / O-schemaläggare finns i kernel_source / block .
Kopiera din I / O-schemaläggningsfil (till exempel sio-iosched.c ) och bläddra till kernel_source / block . Klistra in schemaläggningsfilen där.
Öppna nu Kconfig.iosched och lägg till ditt val i Kconfig , till exempel för SIO :
config IOSCHED_SIO tristate "Simple I/O scheduler" default y ---help--- The Simple I/O scheduler is an extremely simple scheduler, based on noop and deadline, that relies on deadlines to ensure fairness. The algorithm does not do any sorting but basic merging, trying to keep a minimum overhead. It is aimed mainly for aleatory access devices (eg: flash devices).
Ställ sedan in standardvalet enligt följande:
default "sio" if DEFAULT_SIO
Spara filen.
Öppna Makefile i kernel_source / block / och lägg bara till följande rad för SIO :
obj-$(CONFIG_IOSCHED_SIO) += sio-iosched.o
Spara filen så är du klar! I / O-schemaläggarna bör nu dyka upp i menykonfigurationen.
Liknande åtaganden på GitHub: lagt till enkel I / O-schemaläggare .