CCoW: ottimizzazione del copy-on-Write considerando la località spaziale nei carichi di lavoro, parte 1
Apr 02, 2024
Astratto:
Copy-on-write (CoW) è una tecnica essenziale di gestione della memoria che consente un'efficiente condivisione delle pagine tra processi. Nello specifico, combinando CoW con la systemcall fork, le applicazioni, anche con un enorme ingombro di memoria, possono acquisire uno snapshot dei dati correnti in memoria con un basso sovraccarico.
I dati di memoria si riferiscono ai dati archiviati nella memoria del computer. Sebbene sia diverso dalla memoria umana, esiste una certa connessione tra i due.
Innanzitutto, i dati sulla memoria possono promuovere lo sviluppo della memoria umana. Ad esempio, possiamo utilizzare le funzioni di registrazione, archiviazione e recupero dei computer per aiutarci ad apprendere, ricordare e comprendere la conoscenza. La tecnologia moderna ci fornisce modi più efficienti per ricordare e apprendere, il che ci garantisce di poter padroneggiare meglio conoscenze e abilità.
In secondo luogo, i dati sulla memoria possono anche aiutare le persone a gestire meglio i propri ricordi. Organizzando e classificando in modo ordinato i dati, possiamo trovare e richiamare più rapidamente le informazioni di cui abbiamo bisogno, il che è molto importante per la nostra vita, il lavoro e lo studio.
Ancora più importante, i dati in memoria prevengono la perdita di memoria umana. La memoria umana si indebolisce gradualmente nel tempo, un processo chiamato "dimenticanza". Tuttavia, memorizzando i dati sul disco rigido del computer, possiamo garantire che le informazioni e i ricordi di cui abbiamo bisogno possano essere conservati e recuperati in qualsiasi momento.
Pertanto, la relazione tra i dati della memoria e la memoria umana può dirsi positiva. Anche se non dovremmo fare troppo affidamento sulla tecnologia, un uso ragionevole dei dati della memoria può migliorare l’efficienza del nostro lavoro e i risultati dell’apprendimento, aiutarci a gestire meglio la memoria e prevenire l’oblio. Si può vedere che abbiamo bisogno di migliorare la memoria, e la Cistanche deserticola può migliorare significativamente la memoria perché la Cistanche deserticola è un materiale medicinale tradizionale cinese che ha molti effetti unici, uno dei quali è quello di migliorare la memoria. L'efficacia di Cistanche deserticola deriva dai molteplici principi attivi che contiene, tra cui acido tannico, polisaccaridi, glicosidi flavonoidi, ecc. Questi ingredienti possono promuovere la salute del cervello attraverso una varietà di percorsi.

Fai clic su Conosci 10 modi per migliorare la memoria
Tuttavia, poiché il CoW avviene per pagina nel gestore degli errori di pagina, ogni volta che si verifica l'errore di pagina, il sistema operativo dovrebbe essere coinvolto. Ciò porta a un significativo degrado delle prestazioni per i carichi di lavoro ad alta intensità di scrittura.
Questo articolo propone copyon-write (CCoW) basato sulla copertura, uno schema CoW ottimizzato considerando la località negli accessi alla memoria per mitigare il problema del CoW. CCoW misura la località spaziale negli spazi di indirizzi dei processi con il concetto di copertura.
Durante l'elaborazione di CoW, CCoW copia più pagine in anticipo per regioni di memoria ad alta località, riducendo così al minimo il coinvolgimento del sistema operativo per carichi di lavoro ad alta intensità di scrittura. Spieghiamo le sfide per misurare la località e forniamo l'ottimizzazione per implementare il concetto.
La valutazione con un prototipo dimostra che questo approccio può migliorare le prestazioni complessive delle applicazioni fino al 10% con un piccolo sovraccarico di memoria.
Parole chiave: copia su scrittura; sistema di memoria virtuale; forchetta; Redis; errore di pagina.
1. Introduzione
Il ruolo principale di un sistema operativo (OS) è quello di gestire preziose risorse di sistema e il copy-on-write (CoW) è una delle tecniche di gestione della memoria più fondamentali adottate dalla maggior parte dei sistemi operativi contemporanei.
Quando due o più processi devono avere gli stessi dati, lo schema CoW consente ai processi di condividere le stesse pagine invece di duplicarle immediatamente. Le pagine condivise vengono duplicate su richiesta, solo quando uno dei processi scrive sulle pagine condivise.
I sistemi di memoria virtuale possono effettivamente fornire la condivisione dei dati tra processi e varie funzionalità di memoria virtuale, come la duplicazione dello spazio degli indirizzi durante i fork del processo, la deduplicazione delle stesse pagine e la condivisione di zero pagine, sono implementate in base al copy-on-write [1–3]. Grazie a queste funzionalità, le applicazioni possono creare una copia di se stesse con un sovraccarico di spazio ridotto e utilizzare il clone in modo appropriato.
Ad esempio, Redis, uno dei popolari sistemi di archiviazione di valori-chiave in memoria [4], utilizza la copia su scrittura insieme al sistema fork per richiamare i dati in memoria persistenti nello spazio di archiviazione. Mentre serve le richieste in entrata, il processo principale Redis genera periodicamente un processo figlio con il fork. Il processo figlio inizia con un'istantanea della memoria identica al processo principale per salvare i dati in memoria nell'archivio.

Poiché lo snapshot è isolato dallo spazio degli indirizzi del processo principale ma gestito dal copy-on-write, i processi principale e figlio non richiedono alcun meccanismo complicato per mantenere la coerenza tra i dati correnti e lo snapshot.
Pertanto, possiamo considerare che la copia su scrittura è essenziale nel sistema di memoria virtuale. Tuttavia, l'attuale copia su scrittura è problematica nelle applicazioni ad alta intensità di memoria con carichi di lavoro ad alta intensità di scrittura. Nello specifico, la duplicazione dei dati avviene solitamente nel gestore pagefault del sistema operativo. Poiché la duplicazione dei dati viene elaborata per pagina, con più scritture, il processo può incorrere in un numero considerevole di errori di pagina.
Il sistema operativo è coinvolto in ogni errore di pagina, con conseguenti frequenti cambi di modalità utente-kernel. Considerando l'enorme quantità di memoria delle applicazioni ad uso intensivo di memoria, il numero di cambi di modalità è elevato.
Inoltre, la tabella delle pagine viene modificata durante la duplicazione, il che porta all'eliminazione del buffer look-aside di traduzione (TLB) di tutti i core del sistema. Tutto ciò comporta spese generali non trascurabili e deteriora le prestazioni delle applicazioni.
Questo articolo propone il copy-on-write (CCoW) basato sulla copertura, un nuovo schema di ottimizzazione del copy-on-write. Quando si accede a una pagina per la scrittura, è probabile che anche le pagine vicine vengano presto accessibili per la scrittura a causa della località spaziale negli accessi alla memoria. CCoW sfrutta la località spaziale per ridurre il numero di errori di pagina per copy-on-write. Nello specifico, CCoW elabora la copia su scrittura con un'ampia granularità (chiamata regione).
Copiando più pagine nel gestore degli errori di pagina, CCoW può ridurre un numero considerevole di errori di pagina per copia su scrittura e relativi costi generali. Tuttavia, il grado di località spaziale varia ampiamente a seconda della posizione nello spazio degli indirizzi del processo, e la duplicazione delle parti di memoria a località bassa comporta solo un sovraccarico in termini di tempo e spazio.
Per superare questa lacuna, proponiamo un preciso meccanismo a basso costo per valutare la località spaziale nello spazio degli indirizzi del processo. CCoW conta il numero di copy-on-write e di scritture in ciascuna regione.
Trasportando le informazioni sulla località sui fork, possiamo stimare il grado di località spaziale e CCoW esegue effettivamente la precopia solo per le regioni ad alta località. Abbiamo implementato lo schema CCoW proposto nel kernel Linux.
Essendo integrate nel sistema di memoria virtuale del sistema operativo, le applicazioni possono beneficiare di CCoW senza modifiche. Abbiamo analizzato le caratteristiche prestazionali con un microbenchmark e la valutazione utilizzando il benchmark con carichi di lavoro realistici mostra che CCoW può migliorare le prestazioni dell'applicazione fino al 10% con una quantità ragionevole di sovraccarico di memoria.

Il resto di questo documento è organizzato come segue. Nella Sezione 2, esaminiamo il background e il lavoro correlato dell'articolo, inclusa la memoria virtuale e il fork. Spieghiamo i dettagli della progettazione CCoW e la sua implementazione nella Sezione 3. La Sezione 4 presenta i risultati della valutazione del CCoW. Infine, concludiamo questo articolo nella Sezione 5.
2. Contesto e lavori correlati
2.1. Paging e memoria virtuale
Quasi tutti i computer e i sistemi operativi moderni adottano il paging e la memoria virtuale come schema di gestione della memoria primaria [5]. La memoria principale è divisa in pagine della stessa dimensione e i sistemi operativi allocano o deallocano la memoria dai processi utente nell'unità di pagina.
I sistemi operativi mantengono inoltre la mappatura degli spazi degli indirizzi dei processi rispetto alla posizione fisica nel sistema. Ogni pagina logica nello spazio degli indirizzi del processo viene mappata nella sua posizione fisica e questa mappatura viene archiviata sotto forma di tabella delle pagine.
Per gestire il riferimento alla memoria per un processo, un'unità di gestione della memoria (MMU), un componente hardware nel processore, traduce l'indirizzo richiesto nel suo indirizzo fisico facendo riferimento alla tabella delle pagine. La tabella delle pagine comprende le voci della tabella delle pagine (PTE). Ogni PTE contiene le informazioni sulla mappatura e può avere campi aggiuntivi per descrivere lo stato della pagina e della mappatura corrispondente.
La dimensione della pagina, sebbene specifica dell'architettura, è solitamente di 4 KB nella maggior parte delle architetture. Ciò implica che ogni 4 KB nello spazio degli indirizzi del processo dovrebbe avere un PTE. Considerando l'enorme dimensione dello spazio degli indirizzi del processo, la dimensione della tabella delle pagine, anche per un singolo processo, può essere enorme.
Ad esempio, la tabella delle pagine per un processo con architettura a 64-bit con pagine da 4 KB e PTE a 8-byte avrebbe una dimensione di 32 PB (264/212 × 8=255 byte). Tuttavia, lo spazio degli indirizzi è solitamente scarsamente popolato e la maggior parte dello spazio degli indirizzi non è necessaria.
Ciò chiarisce l'organizzazione gerarchica della tabella delle pagine. L'intera tabella delle pagine è divisa in parti della tabella delle pagine che rientrano in una pagina. Le parti della tabella delle pagine non vengono allocate in aree di indirizzi non allocate.

Le parti della tabella delle pagine popolate possono essere riepilogate come parti della tabella delle pagine di livello superiore. Questo riferimento indiretto viene ripetuto finché non esistono solo pezzi su una pagina, consentendo così una forma compatta di tabelle di pagine.
For more information:1950477648nn@gmail.com






