Ricerca…


Configurazione RAM insufficiente

Android ora supporta dispositivi con 512 MB di RAM. Questa documentazione ha lo scopo di aiutare gli OEM a ottimizzare e configurare Android 4.4 per dispositivi con poca memoria. Molte di queste ottimizzazioni sono abbastanza generiche da poter essere applicate anche alle versioni precedenti.

Abilita il flag Dispositivo basso Ram

Stiamo introducendo una nuova API chiamata ActivityManager.isLowRamDevice () per le applicazioni per determinare se devono disattivare funzionalità specifiche che richiedono molta memoria e che funzionano male su dispositivi a bassa memoria.

Per i dispositivi da 512 MB, questa API dovrebbe restituire: "true" Può essere abilitata dalla seguente proprietà di sistema nel makefile del dispositivo.

PRODUCT_PROPERTY_OVERRIDES += ro.config.low_ram=true

Disabilita JIT

L'utilizzo della memoria JIT a livello di sistema dipende dal numero di applicazioni in esecuzione e dall'impronta del codice di tali applicazioni. Il JIT stabilisce una dimensione massima della cache del codice tradotto e tocca le pagine al suo interno secondo necessità. JIT costa tra 3M e 6M su un tipico sistema in esecuzione.

Le app di grandi dimensioni tendono a massimizzare la cache del codice abbastanza rapidamente (che per impostazione predefinita è stata 1M). In media, l'utilizzo della cache JIT funziona da qualche parte tra 100K e 200K byte per app. Ridurre la dimensione massima della cache può aiutare un po 'con l'utilizzo della memoria, ma se impostato troppo basso invierà il JIT in modalità thrashing. Per i dispositivi veramente a bassa memoria, si consiglia di disabilitare completamente JIT.

Questo può essere ottenuto aggiungendo la seguente riga al makefile del prodotto:

PRODUCT_PROPERTY_OVERRIDES += dalvik.vm.jit.codecachesize=0

Come aggiungere un CPU Governor

Il governor CPU stesso è solo un file C, che si trova in kernel_source / drivers / cpufreq /, ad esempio: cpufreq_smartass2.c. Sei responsabile di te stesso per trovare il governatore (guarda in un repository del kernel esistente per il tuo dispositivo) Ma per chiamare e compilare con successo questo file nel tuo kernel dovrai apportare le seguenti modifiche:

  1. Copia il tuo file governor (cpufreq_govname.c) e vai a kernel_source / drivers / cpufreq, ora incollalo.
  2. e apri Kconfig (questa è l'interfaccia del layout del menu di configurazione) quando aggiungi un kernel, vuoi che venga visualizzato nella tua configurazione. Puoi farlo aggiungendo la scelta del governatore.
config CPU_FREQ_GOV_GOVNAMEHERE
tristate "'gov_name_lowercase' cpufreq governor"
depends on CPU_FREQ
help
governor' - a custom governor!

ad esempio, per smartassV2.

config CPU_FREQ_GOV_SMARTASS2
 tristate "'smartassV2' cpufreq governor"
 depends on CPU_FREQ
 help
 'smartassV2' - a "smart" optimized governor! 

accanto all'aggiunta della scelta, devi anche dichiarare la possibilità che il governatore venga scelto come governatore predefinito.

 config CPU_FREQ_DEFAULT_GOV_GOVNAMEHERE
 bool "gov_name_lowercase"
 select CPU_FREQ_GOV_GOVNAMEHERE
 help
 Use the CPUFreq governor 'govname' as default.

ad esempio, per smartassV2.

config CPU_FREQ_DEFAULT_GOV_SMARTASS2
 bool "smartass2"
 select CPU_FREQ_GOV_SMARTASS2
 help
 Use the CPUFreq governor 'smartassV2' as default.

- Non riesci a trovare il posto giusto per metterlo? Cerca “CPU_FREQ_GOV_CONSERVATIVE” e inserisci il codice sotto, la stessa cosa conta per “CPU_FREQ_DEFAULT_GOV_CONSERVATIVE”

Ora che Kconfig è finito puoi salvare e chiudere il file.

  1. Mentre /drivers/cpufreq ancora nella cartella /drivers/cpufreq , apri Makefile. In Makefile, aggiungi la riga corrispondente al tuo CPU Governor. per esempio:
obj-$(CONFIG_CPU_FREQ_GOV_SMARTASS2)    += cpufreq_smartass2.o

Be ware che non chiami il file C nativo, ma il file O! che è il file C compilato. Salva il file.

  1. Sposta in: kernel_source/includes/linux . Ora apri cpufreq.h Scorri verso il basso finché non vedi qualcosa del tipo:
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND)
 extern struct cpufreq_governor cpufreq_gov_ondemand;
 #define CPUFREQ_DEFAULT_GOVERNOR    (&cpufreq_gov_ondemand)

(sono elencati anche altri governatori della CPU)

Ora aggiungi la tua voce con la CPU Governor selezionata, ad esempio:

#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_SMARTASS2)
 extern struct cpufreq_governor cpufreq_gov_smartass2;
 #define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_smartass2)

Salva il file e chiudilo.

La configurazione iniziale di CPU Governor è ora completa. quando hai eseguito tutti i passaggi correttamente, dovresti essere in grado di scegliere il tuo governatore dal menu ( menuconfig , xconfig , gconfig , nconfig ). Una volta selezionato nel menu, verrà incluso nel kernel.

Commit che è quasi uguale alle istruzioni di cui sopra: Aggiungi smartassV2 e commit del governatore lulzactive

Schedulatori I / O

È possibile migliorare il kernel aggiungendo nuovi scheduler I / O, se necessario. Globalmente, governatori e scheduler sono uguali; entrambi forniscono un modo in cui il sistema dovrebbe funzionare. Tuttavia, per gli scheduler si tratta esclusivamente del flusso di dati di input / output, ad eccezione delle impostazioni della CPU. Gli scheduler I / O decidono come verrà programmata un'attività imminente di I / O. Gli scheduler standard come noop o cfq si comportano in modo molto ragionevole.

Gli schedulatori I / O possono essere trovati in kernel_source / block .

  1. Copia il tuo schedulatore di I / O (per esempio, sio-iosched.c ) e vai a kernel_source / block . Incolla il file dello schedulatore qui.

  2. Ora apri Kconfig.iosched e aggiungi la tua scelta a Kconfig , ad esempio per 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).
    
  3. Quindi imposta l'opzione di scelta predefinita come segue:

    default "sio" if DEFAULT_SIO
    

    Salva il file.

  4. Apri il Makefile in kernel_source / block / e aggiungi semplicemente la seguente riga per SIO :

    obj-$(CONFIG_IOSCHED_SIO)    += sio-iosched.o
    

    Salva il file e il gioco è fatto! Gli scheduler I / O dovrebbero ora apparire nella finestra di configurazione del menu.

Commit simile su GitHub: aggiunto lo scheduler I / O semplice .



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow