Android
Optimisation du noyau Android
Recherche…
Configuration de RAM faible
Android prend désormais en charge les appareils avec 512 Mo de RAM. Cette documentation est destinée à aider les équipementiers à optimiser et à configurer Android 4.4 pour les périphériques à faible mémoire. Plusieurs de ces optimisations sont suffisamment génériques pour pouvoir être appliquées aux versions précédentes.
Activer le drapeau du périphérique à faible RAM
Nous introduisons une nouvelle API appelée ActivityManager.isLowRamDevice () pour les applications afin de déterminer si elles doivent désactiver des fonctionnalités spécifiques gourmandes en mémoire qui fonctionnent mal sur les périphériques à faible mémoire.
Pour les périphériques de 512 Mo, cette API doit renvoyer: "true" Elle peut être activée par la propriété système suivante dans le fichier Make du périphérique.
PRODUCT_PROPERTY_OVERRIDES += ro.config.low_ram=true
Désactiver JIT
L'utilisation de la mémoire JIT à l'échelle du système dépend du nombre d'applications en cours d'exécution et de l'empreinte de code de ces applications. Le JIT établit la taille maximale du cache de code traduit et touche les pages qu'il contient. JIT coûte entre 3 et 6 millions de dollars sur un système courant.
Les grandes applications ont tendance à maximiser le cache de code assez rapidement (ce qui est par défaut 1M). En moyenne, l'utilisation du cache JIT se situe entre 100 Ko et 200 Ko par application. La réduction de la taille maximale du cache peut aider quelque peu avec l'utilisation de la mémoire, mais si elle est trop faible, le JIT passera en mode thrashing. Pour les périphériques à très faible mémoire, nous recommandons que le JIT soit entièrement désactivé.
Cela peut être réalisé en ajoutant la ligne suivante au makefile du produit:
PRODUCT_PROPERTY_OVERRIDES += dalvik.vm.jit.codecachesize=0
Comment ajouter un gouverneur de processeur
Le gouverneur du processeur lui-même n'est constitué que d'un fichier C, qui se trouve dans kernel_source / drivers / cpufreq /, par exemple: cpufreq_smartass2.c. Vous êtes responsable de trouver le gouverneur (regardez dans un dépôt de noyau existant pour votre appareil). Mais pour pouvoir appeler et compiler ce fichier avec succès dans votre noyau, vous devrez apporter les modifications suivantes:
- Copiez votre fichier gouverneur (cpufreq_govname.c) et naviguez jusqu'à kernel_source / drivers / cpufreq, collez-le maintenant.
- et ouvrez Kconfig (c'est l'interface de la disposition du menu de configuration) lorsque vous ajoutez un noyau, vous voulez qu'il apparaisse dans votre configuration. Vous pouvez le faire en ajoutant le choix du gouverneur.
config CPU_FREQ_GOV_GOVNAMEHERE
tristate "'gov_name_lowercase' cpufreq governor"
depends on CPU_FREQ
help
governor' - a custom governor!
par exemple, pour smartassV2.
config CPU_FREQ_GOV_SMARTASS2
tristate "'smartassV2' cpufreq governor"
depends on CPU_FREQ
help
'smartassV2' - a "smart" optimized governor!
Outre l'ajout du choix, vous devez également déclarer la possibilité que le gouverneur soit choisi comme gouverneur par défaut.
config CPU_FREQ_DEFAULT_GOV_GOVNAMEHERE
bool "gov_name_lowercase"
select CPU_FREQ_GOV_GOVNAMEHERE
help
Use the CPUFreq governor 'govname' as default.
par exemple, pour smartassV2.
config CPU_FREQ_DEFAULT_GOV_SMARTASS2
bool "smartass2"
select CPU_FREQ_GOV_SMARTASS2
help
Use the CPUFreq governor 'smartassV2' as default.
- Vous ne trouvez pas le bon endroit pour le mettre? Recherchez simplement “CPU_FREQ_GOV_CONSERVATIVE”
et placez le code ci-dessous, la même chose compte pour “CPU_FREQ_DEFAULT_GOV_CONSERVATIVE”
Maintenant que Kconfig est terminé, vous pouvez enregistrer et fermer le fichier.
- Toujours dans le dossier
/drivers/cpufreq
, ouvrez Makefile. Dans Makefile, ajoutez la ligne correspondant au gouverneur de votre CPU. par exemple:
obj-$(CONFIG_CPU_FREQ_GOV_SMARTASS2) += cpufreq_smartass2.o
Notez que vous n'appelez pas le fichier C natif, mais le fichier O! qui est le fichier C compilé. Enregistrez le fichier.
- Déplacer vers:
kernel_source/includes/linux
. Maintenant, ouvrezcpufreq.h
Faites défiler jusqu'à ce que vous voyiez quelque chose comme:
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND)
extern struct cpufreq_governor cpufreq_gov_ondemand;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_ondemand)
(d'autres gouverneurs de processeurs y sont également répertoriés)
Ajoutez maintenant votre entrée avec le gouverneur de CPU sélectionné, exemple:
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_SMARTASS2)
extern struct cpufreq_governor cpufreq_gov_smartass2;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_smartass2)
Enregistrez le fichier et fermez-le.
La configuration initiale du gouverneur CPU est maintenant terminée. Lorsque vous avez terminé toutes les étapes avec succès, vous devriez pouvoir choisir votre gouverneur dans le menu ( menuconfig
, xconfig
, gconfig
, nconfig
). Une fois coché dans le menu, il sera inclus dans le noyau.
Commit qui est presque identique aux instructions ci-dessus: Ajouter la validation smartassV2 et lulzactive gouverneur
I / O Schedulers
Vous pouvez améliorer votre noyau en ajoutant de nouveaux ordonnanceurs d'E / S si nécessaire. Globalement, les gouverneurs et les ordonnanceurs sont les mêmes; ils fournissent tous deux un moyen de faire fonctionner le système. Cependant, pour les ordonnanceurs, il s'agit uniquement du flux de données d'entrée / sortie, à l'exception des paramètres du processeur. Les ordonnanceurs d'E / S décident de la planification d'une activité d'E / S à venir. Les ordonnanceurs standard tels que noop ou cfq fonctionnent très raisonnablement.
Les ordonnanceurs d'E / S peuvent être trouvés dans kernel_source / block .
Copiez le fichier du planificateur d'E / S (par exemple, sio-iosched.c ) et accédez à kernel_source / block . Collez le fichier du planificateur ici.
Maintenant, ouvrez Kconfig.iosched et ajoutez votre choix à Kconfig , par exemple pour 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).
Ensuite, définissez l'option de choix par défaut comme suit:
default "sio" if DEFAULT_SIO
Enregistrez le fichier.
Ouvrez le Makefile dans kernel_source / block / et ajoutez simplement la ligne suivante pour SIO :
obj-$(CONFIG_IOSCHED_SIO) += sio-iosched.o
Enregistrez le fichier et vous avez terminé! Les ordonnanceurs d'E / S doivent maintenant apparaître dans la configuration du menu.
Commit similaire sur GitHub: ajout du programmateur Simple I / O.