Android
Optymalizacja jądra Androida
Szukaj…
Konfiguracja niskiej pamięci RAM
Android obsługuje teraz urządzenia z 512 MB pamięci RAM. Ta dokumentacja ma na celu pomóc producentom OEM w optymalizacji i konfiguracji Androida 4.4 dla urządzeń z małą ilością pamięci. Niektóre z tych optymalizacji są na tyle ogólne, że można je zastosować również w poprzednich wersjach.
Włącz flagę urządzenia Low Ram
Wprowadzamy nowy interfejs API o nazwie ActivityManager.isLowRamDevice () dla aplikacji, aby określić, czy powinny one wyłączyć określone funkcje wymagające dużej ilości pamięci, które źle działają na urządzeniach o małej pamięci.
W przypadku urządzeń 512 MB ten interfejs API powinien zwrócić: „true”. Można go włączyć za pomocą następującej właściwości systemowej w pliku makefile urządzenia.
PRODUCT_PROPERTY_OVERRIDES += ro.config.low_ram=true
Wyłącz JIT
Zużycie pamięci w całym systemie JIT zależy od liczby uruchomionych aplikacji i śladu kodu tych aplikacji. JIT ustala maksymalny rozmiar pamięci podręcznej przetłumaczonego kodu i w razie potrzeby dotyka znajdujących się na nim stron. JIT kosztuje około 3–6 mln w typowym systemie operacyjnym.
Duże aplikacje zwykle dość szybko maksymalizują pamięć podręczną kodu (domyślnie jest to 1 MB). Średnio użycie pamięci podręcznej JIT działa w przedziale od 100 KB do 200 KB na aplikację. Zmniejszenie maksymalnego rozmiaru pamięci podręcznej może nieco pomóc w zużyciu pamięci, ale jeśli zostanie ustawione zbyt nisko, JIT przełączy się w tryb thrashingu. W przypadku urządzeń o bardzo małej pamięci zalecamy całkowite wyłączenie JIT.
Można to osiągnąć, dodając następujący wiersz do pliku makefile produktu:
PRODUCT_PROPERTY_OVERRIDES += dalvik.vm.jit.codecachesize=0
Jak dodać gubernatora procesora
Sam gubernator procesora to tylko 1 plik C, który znajduje się w kernel_source / drivers / cpufreq /, na przykład: cpufreq_smartass2.c. Jesteś odpowiedzialny za znalezienie gubernatora (zajrzyj do istniejącego repozytorium jądra dla swojego urządzenia). Aby jednak wywołać ten plik i skompilować go w jądrze, musisz wprowadzić następujące zmiany:
- Skopiuj plik gubernatora (cpufreq_govname.c) i przejdź do kernel_source / drivers / cpufreq, teraz wklej go.
- i otwórz Kconfig (jest to interfejs układu menu konfiguracji) podczas dodawania jądra, chcesz, aby pojawił się w twojej konfiguracji. Możesz to zrobić, dodając wybór gubernatora.
config CPU_FREQ_GOV_GOVNAMEHERE
tristate "'gov_name_lowercase' cpufreq governor"
depends on CPU_FREQ
help
governor' - a custom governor!
na przykład dla smartassV2.
config CPU_FREQ_GOV_SMARTASS2
tristate "'smartassV2' cpufreq governor"
depends on CPU_FREQ
help
'smartassV2' - a "smart" optimized governor!
obok dodania wyboru należy również zadeklarować możliwość wyboru gubernatora jako gubernatora domyślnego.
config CPU_FREQ_DEFAULT_GOV_GOVNAMEHERE
bool "gov_name_lowercase"
select CPU_FREQ_GOV_GOVNAMEHERE
help
Use the CPUFreq governor 'govname' as default.
na przykład dla smartassV2.
config CPU_FREQ_DEFAULT_GOV_SMARTASS2
bool "smartass2"
select CPU_FREQ_GOV_SMARTASS2
help
Use the CPUFreq governor 'smartassV2' as default.
- nie możesz znaleźć odpowiedniego miejsca, żeby to umieścić? Po prostu wyszukaj “CPU_FREQ_GOV_CONSERVATIVE”
i umieść kod poniżej, to samo dotyczy “CPU_FREQ_DEFAULT_GOV_CONSERVATIVE”
Teraz, gdy Kconfig jest gotowy, możesz zapisać i zamknąć plik.
- Będąc nadal w folderze
/drivers/cpufreq
, otwórz Makefile. W Makefile dodaj wiersz odpowiadający procesorowi CPU. na przykład:
obj-$(CONFIG_CPU_FREQ_GOV_SMARTASS2) += cpufreq_smartass2.o
Pamiętaj, że nie wywołujesz macierzystego pliku C, ale plik O! który jest skompilowanym plikiem C. Zapisz plik.
- Przejdź do:
kernel_source/includes/linux
. Teraz otwórzcpufreq.h
Przewiń w dół, aż zobaczysz coś takiego:
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND)
extern struct cpufreq_governor cpufreq_gov_ondemand;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_ondemand)
(tam też są wymienione inne gubernatory procesorów)
Teraz dodaj swój wpis do wybranego CPU Governor, przykład:
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_SMARTASS2)
extern struct cpufreq_governor cpufreq_gov_smartass2;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_smartass2)
Zapisz plik i zamknij go.
Wstępna konfiguracja gubernatora procesora jest teraz zakończona. po pomyślnym wykonaniu wszystkich kroków powinieneś być w stanie wybrać swojego gubernatora z menu ( menuconfig
, xconfig
, gconfig
, nconfig
). Po zaznaczeniu w menu zostanie dołączony do jądra.
Zatwierdź, który jest prawie taki sam jak powyższe instrukcje: Dodaj smartassV2 i zatwierdzenie luźnego gubernatora
Harmonogramy we / wy
Możesz ulepszyć jądro, dodając w razie potrzeby nowe harmonogramy we / wy. Na całym świecie gubernatorzy i osoby planujące są takie same; oba zapewniają sposób działania systemu. Jednak w przypadku harmonogramów chodzi przede wszystkim o strumień danych wejściowych / wyjściowych, z wyjątkiem ustawień procesora. Harmonogramy we / wy decydują o sposobie zaplanowania nadchodzącego działania we / wy. Standardowe programy planujące, takie jak noop lub cfq, działają bardzo rozsądnie.
Programy planujące we / wy można znaleźć w kernel_source / block .
Skopiuj plik harmonogramu we / wy (na przykład sio-iosched.c ) i przejdź do kernel_source / block . Wklej tam plik harmonogramu.
Teraz otwórz Kconfig.iosched i dodaj swój wybór do Kconfig , na przykład dla 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).
Następnie ustaw domyślną opcję wyboru w następujący sposób:
default "sio" if DEFAULT_SIO
Zapisz plik.
Otwórz plik Makefile w kernel_source / block / i po prostu dodaj następujący wiersz dla SIO :
obj-$(CONFIG_IOSCHED_SIO) += sio-iosched.o
Zapisz plik i gotowe! Programy planujące we / wy powinny teraz pojawiać się w menu konfiguracji.
Podobne zatwierdzanie w GitHub: dodano prosty harmonogram we / wy .