Più memoria si usa, meglio è? —— Una breve panoramica della memoria virtuale di Android (Linux)

Link originale:https://www.coolapk.com/…

— In vari post, spesso vediamo commenti come: "È normale usare più memoria; la memoria è fatta per essere usata. Perché ti è rimasta così tanta memoria per semplificare?" Questa è la sua osservazione. Queste affermazioni mancano più o meno di rigore. Di seguito, cercherò di usare una descrizione più semplice per darti un'idea di te stessoTelefoni cellulariGestione della memoria(Principalmente memoria virtuale) Ho una comprensione di base, ed è la prima volta che scrivo per un principianteDivulgazione scientificaSe ci sono errori, per favore segnalateli nella sezione commenti

————— linea di demarcazione—————

Nota: Tutta la "memoria" menzionata in questo articolo si riferisce a ciò che comunemente si chiama "memoria in esecuzione", cioè "RAM", non spazio di archiviazione!

————— linea di demarcazione—————

Per prima cosa, conosciamo alcuni concetti e termini tecnici

1. Memoria virtuale:

La memoria virtuale è un tipo di gestione della memoria comunemente utilizzato nei sistemi operativi moderniTecnologiaAttualmente, il metodo comunemente usato è la gestione della memoria virtuale basata su pagine, che si basa su pagine (di solito4KB) Gestisce l'allocazione, il riciclo e lo scambio di memoria con la granularità minima.

2.SWAP:

SWAP fa parte della tecnologia della memoria virtuale, dividendo lo spazio sull'hard disk per scambiare le pagine di memoria—in parole semplici, spostando i dati dalla memoria all'hard disk per liberare la memoria fisica. Windows ha anche una funzione simile chiamata "File Paginato". Ma a differenza di Linux, Windows dipende molto dai file paginati, e disattivarlo lo causeràGrossi problemiPer i dettagli, vedi il capitolo extra alla fine di questo articolo.

3.ZRAM:

ZRAM è un'altra implementazione di SWAP. Invece di utilizzare lo spazio su disco rigido, partiziona direttamente lo spazio di memoria per scambiare le pagine di memoria, utilizzando algoritmi di compressione come LZ4/ZSTD per comprimere i dati di memoria e liberare memoria fisica.

4.ZRAM Writeback

ZRAM Writeback è un'estensione di ZRAM. Come SWAP, crea file di swap nello spazio del disco rigido per scambiare le pagine di memoria. La differenza è che ZRAM Writeback scambia dati di memoria compressi. La logica di controllo della scrittura gira a livello utente invece che al kernel, e la strategia specifica è determinata dal fornitore del sistema, quindi questo articolo non ne parlerà.

5. Riciclo diretto e riciclo asincrono

Esistono due tipi di recupero della memoria: la raccolta asincrona si segue sul thread in background e non influisce sul processo corrente, il che ha poco impatto sulle prestazioni e sulla fluidità, ma la velocità di raccolta è lenta; La recuperazione diretta è rapida ma blocca il processo corrente, causando il blocco dell'interfaccia software per un breve periodo (di solito molto breve), il che influisce significativamente sulle prestazioni e sulla fluidità.

————— linea di demarcazione—————

Prima di tutto, rispondiamo alla domanda nel titolo: "Più memoria usi, meglio è?" Questa affermazione è corretta? Sì, ma non del tutto.

La memoria viene effettivamente utilizzata, ma è importante sapere che la memoria non è usata solo dal sistema operativo e dal software utente; un altro fattore importante è la cache dei file. Quasi tutti i sistemi operativi hanno meccanismi di cache dei file. I file letti da hard disk o memoria flash sono memorizzati nella memoria, quindi la prossima volta chiami direttamente la cache dei file senza leggere dall'hard disk o dalla memoria flash per velocizzare il processo. Quando la memoria è insufficiente, le cache dei file possono essere rapidamente liberate per l'allocazione, così sia la memoria recuperata rapidamente che quella libera vengono trattate dal kernel come "memoria disponibile". Ma ciò che si vede nell'interfaccia backend di sistema e in vari software (come DEV Check) non è "memoria libera", bensì "memoria disponibile" calcolata dal kernel o dagli algoritmi del software stesso.

Come mostrato nell'immagine, il kernel è nel memiNegli NFO, "memoria disponibile" ≠ "memoria libera": "memoria libera" si riferisce alla memoria non allocata che non è effettivamente occupata da processi o file, mentre "memoria disponibile" si riferisce alla memoria che può essere allocata (la sua dimensione è una stima, determinata principalmente dalla porzione di cache dei file e memoria libera sopra il filigrana basso e altri elementi di memoria che possono essere rapidamente recuperati)

6688c8671d820c441abb2b04fb7b9daf0124e934

Fonte dati: /proc/meminfo

Quindi, anche se vedi molta memoria lasciata in background di sistema o in varie app, non significa che la memoria venga sfruttata appieno. Invece, lo hanno semplificatoOttimizzazionePer queste persone, come me, sto cercando di ridurre l'uso di memoria del sistema, così da liberare più memoria per gli utentiApplicazioneQuesto non contraddice l'idea che "usare più memoria sia normale; la memoria è fatta per essere usata."

————— linea di demarcazione—————

AvanzamentoTutorial— Controllo delle iniziative di riciclo della memoria e ZRAM:

PossessoROOTPuoi modificare i parametri del kernel qui sotto per controllare la rivendicazione della memoria e l'attività ZRAM.

1. vm.watermark_scale_factor:

Controlla l'intervallo tra le linee del livello dell'acqua della memoria, con un intervallo di regolazione di 1~1000 (corrispondente allo 0,01% al 10% della dimensione totale della memoria). Se il valore è troppo basso, spesso si attiva il riciclo direttoLagSe il valore è troppo alto, si spreca memoria. Si consiglia di impostarlo a 100 (1% della memoria totale).

Il kernel definisce tre linee di filigrana: min/low/high. Quando la memoria libera (nota: "memoria libera" invece di "memoria disponibile") scende sotto la marca d'acqua bassa, il kernel si attiva kswapd per recuperare asincronamente la memoria (scambiando dati su ZRAM/SWAP e recuperando cache file) finché la memoria libera non supera la marca d'acqua più alta; Quando la memoria inattiva scende sotto il livello minimo dell'acqua, si attiva il recupero diretto. Il valore della linea del livello minimo dell'acqua viene calcolato dal kernel in base alla dimensione totale della memoria e al calcolo vm.min_free_kbytes. Non è consigliato modificare questo parametro e mantenere il valore predefinito.

2. vm.extra_free_kbytes:

La memoria riservata aggiuntiva avrà un valore fisso tra il minimo e il livello basso. Se il valore è troppo basso, spesso si attiva la recuperazione diretta e si causa ritardi; se troppo grande, si spreca memoria. Si raccomanda di impostarla all'1~2% della dimensione totale della memoria, misurata in KB.

3. vm.swappiness:

Quando la memoria del kernel è insufficiente (sotto la soglia bassa), il bias tra la pagina di swap e ZRAM/SWAP e la cache dei file recuperati varia da 0~200 e da 0~100 per kernel più vecchi. Più piccolo è il valore, più è probabile che si accumulino cache di file; più alto è il valore, più è probabile che si usi ZRAM/SWAP.

I parametri del kernel sopra sono disponibiliScenePuoi anche usare i privilegi root per eseguire i seguenti comandi per modificarlo:

echo 100 >/proc/sys/vm/watermark_scale_factor

echo 131072 >/proc/sys/vm/extra_free_kbytes

echo 100 >/proc/sys/vm/swappiness

033b71c32ad792c6d350fc9a9eba667ccdba5b14

– Se vuoi mantenere più backend, puoi ridurre il valore di extra_free_kbytes e watermark_scale_factor e aumentare moderatamente il valore della swappiness.

– Se vuoi maggiore fluidità, puoi aumentare i valori di extra_free_kbytes e watermark_scale_factor, regolando lo swappiness a un valore più bilanciato.

– Se vuoi entrambi, allora prendi un telefono con memoria più grande

————— linea di demarcazione—————

Messaggio di comunicazione e uccisioni dietro le quinte:

A partire da Android 9, Google ha iniziato ad abbandonare il kernel LMK integrato a favore di LMKD, che funziona come un daemon per il sistema. Pertanto, l'eliminazione delle app in background e il kernel stesso hanno poco a che fare con l'approccio di ciascun produttoreConfigurazioneLMKD/Introdotti altri meccanismi di rimozione dello sfondo. A propositoMIUIOltre a configurare LMKD, c'è codice che blocca in background sia in "Battery and Performance" che in "Framework System Framework." Se non vuoi usare il meccanismo aggiuntivo di kill in background introdotto dal produttore e vuoi configurare LMKD da solo, allora questa è una buona opzioneLSPosedIl modulo "AppRetention" blocca il meccanismo di eliminazione finale in background del fornitore.

9d81077744f85a683960c178d78a3f3519e465b8

Poi, configura LMKD secondo la documentazione di Google:Visualizza il link

0051b630293a33fa77802e7e31a72ca679f1a637

————— linea di demarcazione—————

Sezione Extra — Conoscenze aggiuntive sul Pagefile.sys file di paging di Windows e sull'allocazione degli indirizzi di memoria virtuale:

Windows utilizza un'allocazione di memoria a due stadi (riservato + commit) e, durante la fase di commit, è essenziale garantire la mappatura degli indirizzi fisici (memoria fisica o file di paginazione). I file di paging fanno parte dei limiti di invio del sistema e determinano direttamente la quantità totale di memoria virtuale che il sistema può supportare (nella pagina della scheda di memoria del Task Manager di Windows c'è un elemento di dati chiamato "Committed"; il lato sinistro della barra è la somma di tutte le dimensioni di memoria richieste dal programma, e il lato destro è la dimensione totale della memoria virtuale, con valori = dimensione della memoria fisica + dimensione del file di paginazione, dove il file di paging è partizionato dinamicamente dal sistema).

55fbb2ccf8dcaa9b5eacde40d4500ea06489ae2e

Informazioni di memoria per il Task Manager di Windows

Si può semplicemente pensare che quando un programma consente una certa quantità di memoria su Windows, il sistema assegni la dimensione fisica corrispondente all'indirizzo. Dopo l'allocazione, altri programmi non possono utilizzare questo spazio di memoria, e la memoria allocata dal programma è generalmente superiore a quella effettivamente necessaria. Pertanto, quando si chiudono i file di paging, possono esserci casi in cui rimane molta memoria fisica, ma aprire un nuovo programma segnala comunque che la memoria è insufficiente. Linux, tuttavia, non ha questo problema. Linux utilizza una strategia di allocazione ritardata, allocando indirizzi di memoria fisici solo quando i processi accedono effettivamente alla memoria. Per quanto riguarda la memoria richiesta dal programma, Linux ha allocato indirizzi virtuali "reali" e i limiti degli indirizzi di memoria virtuali sono determinati dai parametri "vm.overcommit_memory" del kernel. Sui telefoni Android che utilizziamo, il limite di allocazione della memoria virtuale è "overcommit_memory" Il valore predefinito è 1, che ignora i limiti della memoria virtuale e permette di allocare tutta la memoria fisica.

Nella pagina di gestione SWAP di Scene, puoi vedere che tutte le processi sul mio telefono richiedono fino a 208GB di memoria! Ma la memoria fisica non era stata esaurita, quindi potevo comunque aprire nuovi software.

54adfd909d6eaf857d40dca9428b9f075a4a65ed

Per quanto riguarda il motivo per cui Windows non adotti lo stesso o simile meccanismo di Linux, non lo so; posso solo pensare che sia perché Windows porta troppo peso storico (corrispondente alla leggendaria compatibilità di WIN).

#HyperOS##HyperOS2##玩机技巧 #

© Avviso di Copyright
THE END
Se ti piace, per favore mostra il tuo sostegno
Pollice in su1 Condividi
Commento Lottare per il divano

Per favore, accedi e lascia un commento

    Nessun commento ancora