Lien original :https://www.coolapk.com/…
— Dans divers posts, on voit souvent des commentaires du genre : « Il est normal d’utiliser plus de mémoire ; la mémoire est faite pour être utilisée. Pourquoi avez-vous autant de mémoire pour rationaliser ? » C’est sa remarque. Ces déclarations manquent plus ou moins de rigueur. Ci-dessous, je vais essayer d’utiliser une description plus simple pour vous donner une idée de vous-mêmeTéléphones mobiles的Gestion de la mémoire(Principalement la mémoire virtuelle) J’ai une compréhension de base, et c’est la première fois que j’écris pour un débutantVulgarisation scientifiqueS’il y a des erreurs, merci de les signaler dans la section commentaires
————— ligne de démarcation—————
Note : Toute « mémoire » mentionnée dans cet article désigne ce que l’on appelle couramment la « mémoire en cours », c’est-à-dire la « RAM », et non l’espace de stockage !
————— ligne de démarcation—————
Commençons par connaître quelques concepts et termes techniques
1. Mémoire virtuelle :
La mémoire virtuelle est un type de gestion de la mémoire couramment utilisé dans les systèmes d’exploitation modernesTechnologieActuellement, la méthode couramment utilisée est la gestion de la mémoire virtuelle basée sur les pages, qui repose sur des pages (généralement4KB) Gère l’allocation de mémoire, le recyclage et l’échange à la granularité minimale.
2.SWAP:
SWAP fait partie de la technologie de la mémoire virtuelle, divisant l’espace sur le disque dur pour échanger les pages mémoire — en termes simples, déplacer les données de la mémoire vers le disque dur pour libérer la mémoire physique. Windows dispose également d’une fonctionnalité similaire appelée « Fichier Paginaté ». Mais contrairement à Linux, Windows dépend fortement des fichiers paginés, et le désactiver provoquera celaGros problèmesPour plus de détails, voir le chapitre supplémentaire à la fin de cet article.
3.ZRAM:
ZRAM est une autre implémentation de SWAP. Au lieu d’utiliser l’espace disque dur, elle partitionne directement l’espace mémoire pour échanger les pages mémoire, en utilisant des algorithmes de compression comme LZ4/ZSTD pour compresser les données mémoire afin de libérer de la mémoire physique.
4.ZRAM Writeback
L’écriture ZRAM est une extension de ZRAM. Comme SWAP, elle crée des fichiers d’échange sur l’espace disque dur pour échanger les pages mémoire. La différence est que l’écriture ZRAM échange des données mémoire compressées. La logique de contrôle d’écriture s’exécute au niveau utilisateur plutôt qu’au noyau, et la stratégie spécifique est déterminée par le fournisseur du système, donc cet article ne la discutera pas.
5. Recyclage direct et recyclage asynchrone
Il existe deux types de récupération de mémoire : la collecte asynchrone s’exécute sur le thread en arrière-plan et n’affecte pas le processus en cours, ce qui a peu d’impact sur les performances et la fluidité, mais la vitesse de collecte est lente ; La récupération directe est rapide mais bloque le processus en cours, ce qui provoque un gel de l’interface logicielle pendant une courte période (généralement très courte), ce qui affecte considérablement les performances et la fluidité.
————— ligne de démarcation—————
D’abord, répondons à la question du titre : « Plus vous utilisez de mémoire, mieux c’est ? » Cette affirmation est-elle correcte ? Oui, mais pas entièrement.
La mémoire est effectivement utilisée, mais il est important de savoir que la mémoire n’est pas seulement utilisée par le système d’exploitation et les logiciels utilisateurs ; un autre facteur majeur est la mise en cache des fichiers. Presque tous les systèmes d’exploitation disposent de mécanismes de mise en cache de fichiers. Les fichiers lus depuis des disques durs ou du stockage flash sont mis en cache en mémoire, donc la prochaine fois, vous appelez directement le cache des fichiers sans lire depuis le disque dur ou la mémoire flash pour accélérer le processus. Lorsque la mémoire est insuffisante, les caches de fichiers peuvent être rapidement libérés pour l’allocation, de sorte que la mémoire récupérée rapidement et la mémoire libre sont traitées par le noyau comme de la « mémoire disponible ». Mais ce que vous voyez dans l’interface du backend système et divers logiciels (comme DEV Check) n’est pas de la « mémoire libre », mais plutôt de la « mémoire disponible » calculée par le noyau ou les algorithmes du logiciel.
Comme montré sur l’image, le noyau est dans le moimiDans les NFO, la « mémoire disponible » ≠ la « mémoire libre » : la « mémoire libre » désigne la mémoire non allouée qui n’est réellement occupée par aucun processus ou fichier, tandis que la « mémoire disponible » désigne la mémoire pouvant être allouée (sa taille est une estimation, principalement déterminée par la portion de cache de fichiers et de mémoire libre au-dessus du filigrane faible et d’autres éléments de mémoire pouvant être rapidement récupérés)

Source des données : /proc/meminfo
Donc, même si vous voyez beaucoup de mémoire laissée en arrière-plan système ou dans différentes applications, cela ne signifie pas que la mémoire est pleinement utilisée. Au lieu de cela, ils ont simplifié la situationOptimisationPour ces personnes, comme moi, je cherche à réduire la consommation de mémoire du système lui-même, afin que plus de mémoire puisse être libérée pour les utilisateursApplicationCela ne contredit pas l’idée selon laquelle « utiliser plus de mémoire est normal ; la mémoire est destinée à être utilisée ».
————— ligne de démarcation—————
AdvanceTutoriel— Contrôle des initiatives de recyclage de la mémoire et de ZRAM :
PossessionROOTVous pouvez modifier les paramètres du noyau ci-dessous pour contrôler la récupération de mémoire et l’activité ZRAM.
1. vm.watermark_scale_factor:
Contrôlez l’intervalle entre les lignes de niveau d’eau de la mémoire, avec une plage d’ajustement de 1~1000 (correspondant à 0,01 % à 10 % de la taille totale de la mémoire). Si la valeur est trop basse, cela déclenchera fréquemment un recyclage directLatenceSi la valeur est trop grande, elle gaspillera de la mémoire. Il est recommandé de la régler à 100 (1 % de la mémoire totale).
Le noyau définit trois lignes de filigrane : min/low/high. Lorsque la mémoire libre (note : « mémoire libre » plutôt que « mémoire disponible ») descend en dessous du seuil le minimum, le noyau se réveille kswapd pour récupérer la mémoire de façon asynchrone (échangeant les données vers ZRAM/SWAP et récupérant les caches de fichiers) jusqu’à ce que la mémoire libre dépasse le seuil de référence ; Lorsque la mémoire au repos descend en dessous du niveau minimum d’eau, une récupération directe est déclenchée. La valeur de la ligne de niveau d’eau minimale est calculée par le noyau en fonction de la taille totale de la mémoire et du calcul vm.min_free_kbytes. Il n’est pas recommandé de modifier ce paramètre et de conserver la valeur par défaut.
2. vm.extra_free_kbytes:
La mémoire réservée supplémentaire aura une valeur fixe entre les filigranes minimum et bas. Si la valeur est trop basse, elle déclenchera fréquemment une récupération directe et provoquera du lag ; si elle est trop grande, elle gaspillera de la mémoire. Il est recommandé de la définir à 1~2 % de la taille totale de la mémoire, mesurée en KB.
3. vm.swappiness:
Lorsque la mémoire du noyau est insuffisante (en dessous du seuil bas), le biais entre la page d’échange et ZRAM/SWAP et le cache de fichiers récupéré varie de 0~200, et de 0~100 pour les noyaux plus anciens. Plus la valeur est faible, plus il est probable qu’elle collecte des caches de fichiers ; plus la valeur est grande, plus il est probable d’utiliser ZRAM/SWAP.
Les paramètres du noyau ci-dessus sont disponiblesSceneVous pouvez également utiliser les privilèges root pour exécuter les commandes suivantes afin de le modifier :
echo 100 >/proc/sys/vm/watermark_scale_factor
echo 131072 >/proc/sys/vm/extra_free_kbytes
echo 100 >/proc/sys/vm/swappiness

– Si vous souhaitez conserver plus de backend, vous pouvez réduire la valeur de extra_free_kbytes et watermark_scale_factor et augmenter modérément la valeur de la swappiness.
– Si vous voulez une plus grande fluidité, vous pouvez augmenter les valeurs de extra_free_kbytes et watermark_scale_factor, tout en ajustant l’échange à une valeur plus équilibrée.
– Si tu veux les deux, alors prends un téléphone avec une mémoire plus grande
————— ligne de démarcation—————
Un message privé et tuerie en coulisses :
À partir d’Android 9, Google a commencé à abandonner le noyau LMK intégré au profit de LMKD, qui fonctionne comme un démon pour le système. Par conséquent, la suppression des applications en arrière-plan et le noyau lui-même ont peu à voir avec l’approche de chaque fabricantConfigurationLMKD/Introduit d’autres mécanismes de suppression de fond. À ce sujetMIUIEn plus de configurer LMKD, il y a du code de blocage en arrière-plan dans « Battery and Performance » et « Framework System Framework ». Si vous ne souhaitez pas utiliser le mécanisme supplémentaire de kill en arrière-plan introduit par le fabricant et que vous souhaitez configurer le LMKD vous-même, alors c’est une bonne optionLSPosedLe module « AppRetention » bloque le mécanisme d’élimination des fins en arrière-plan du fournisseur.

Ensuite, configurez LMKD selon la documentation de Google :Voir le lien

————— ligne de démarcation—————
Section supplémentaire — Connaissances supplémentaires sur la Pagefile.sys de pages de fichiers Windows et l’allocation d’adresses de mémoire virtuelle :
Windows utilise une allocation mémoire en deux étapes (réservé + confirmé), et pendant la phase de commit, il est essentiel de s’assurer de la correspondance des adresses physiques (mémoire physique ou fichiers de pagination). Les fichiers de pagination font partie des limites de soumission du système et déterminent directement la quantité totale de mémoire virtuelle que le système peut supporter (sur la page de la carte mémoire du Gestionnaire des tâches Windows, il y a un élément de données appelé « Engagé » ; le côté gauche de la barre oblique est la somme de toutes les tailles de mémoire demandées par le programme, et le côté droit est la taille totale de la mémoire virtuelle, avec des valeurs = taille de la mémoire physique + taille du fichier de pagination, où le fichier de pagination est dynamiquement partitionné par le système).

Informations mémoire pour le Gestionnaire des tâches Windows
On peut simplement penser que lorsqu’un programme permet une certaine quantité de mémoire sous Windows, le système attribue la taille d’adresse physique correspondante au programme. Après allocation, les autres programmes ne peuvent pas utiliser cet espace mémoire, et la mémoire allouée par le programme est généralement supérieure à ce dont il a réellement besoin. Ainsi, lors de la fermeture de fichiers de pagination, il peut y avoir des cas où il reste beaucoup de mémoire physique, mais ouvrir un nouveau programme indique toujours que la mémoire est insuffisante. Linux, cependant, ne rencontre pas ce problème. Linux utilise une stratégie d’allocation différée, n’allouant des adresses mémoire physiques que lorsque les processus accèdent effectivement à la mémoire. Quant à la mémoire demandée par le programme, Linux a attribué des adresses virtuelles « réelles », et les limites des adresses mémoire virtuelles sont déterminées par les paramètres du noyau « vm.overcommit_memory ». Sur les téléphones Android que nous utilisons, la limite d’allocation de mémoire virtuelle est « overcommit_memory » La valeur par défaut est 1, qui ignore les limites de la mémoire virtuelle et permet d’allouer toute la mémoire physique.
Sur la page de gestion SWAP de Scene, vous pouvez voir que tous les processus sur mon téléphone ont demandé jusqu’à 208 Go de mémoire ! Mais la mémoire physique n’était pas utilisée, donc je pouvais quand même ouvrir un nouveau logiciel.

Quant à pourquoi Windows ne change pas vers le même mécanisme ou un mécanisme similaire à Linux, je ne sais pas ; je ne peux que penser que c’est parce que Windows porte trop de fardeau historique (correspondant à la compatibilité légendaire de WIN).
![[Lecture open source] Novembre 950+ a soigneusement relié le livre, la compilation et la mise à jour - Baiyun Blog](https://www.bybk.cc/wp-content/uploads/2023/02/Screenshot_20230222-1001582.png)



![[Résumé texte et image] Résumé des terminaux actuellement supportant l’agrégation 5G-A --- inclut comment vérifier l’agrégation des opérateurs activée sur iOS - Baiyun Blog](https://www.bybk.cc/wp-content/uploads/2024/04/20240407140712630-e26ee861710dd3b075a1302dd00392d5e1db60a1.jpeg)

![[Lecture open source] Janvier 2024 ≈ 400 livres soigneusement édités, compilation et mise à jour - Baiyun Blog](https://www.bybk.cc/wp-content/uploads/img/af867764c3780f0b7da88376fca7bf92.png)
![[Lecture open source] Novembre 950+ a soigneusement relié le livre, la compilation et la mise à jour - Baiyun Blog](https://www.bybk.cc/wp-content/uploads/2023/02/Screenshot_20230222-1001582-1024x593.png)

![[Lecture open source] Mise à jour du livre 1300 octobre 1300 - Baiyun Blog](https://www.bybk.cc/wp-content/uploads/img/1eeb6ae31cde88ab39faa2f19651638d.jpeg)
![[VMOS PRO 2.9.6 Édition Membre] - Baiyun Blog](https://www.bybk.cc/wp-content/uploads/img/c303a7a50d3ebfa235cc380190db2980.png)

Pas encore de commentaires