CCoW: ottimizzazione del copy-on-Write considerando la località spaziale nei carichi di lavoro, parte 3

Apr 02, 2024

3. Progettazione CCoW

In questa sezione, introduciamo innanzitutto le nostre motivazioni alla base del miglioramento del copy-on-write e spieghiamo il concetto di base del copy-on-write basato sulla copertura (CCoW). Quindi spiegheremo il modo in cui CCoW cattura la località in diversi scenari e l'ottimizzazione per catturare la località con un sovraccarico basso.

La memoria è la capacità delle persone di acquisire, archiviare e recuperare informazioni. Anche i ricordi delle persone differiranno in diversi scenari. In questo articolo esploreremo la relazione tra la memoria in diversi scenari.

Il primo è lo scenario di apprendimento. L’apprendimento è un mezzo importante per l’acquisizione di conoscenze e abilità da parte degli esseri umani. Nel processo di apprendimento, la memoria gioca un ruolo fondamentale. Se hai una memoria forte, puoi padroneggiare nuove conoscenze più velocemente e conservare più facilmente quelle apprese. Pertanto, negli scenari di apprendimento, dobbiamo mantenere il nostro pensiero chiaro e concentrato, per migliorare meglio la memoria.

Il secondo è il panorama del turismo. Viaggiare ci permette di conoscere culture e ambienti diversi, arricchendo notevolmente i nostri orizzonti. Durante il viaggio, possiamo acquisire una ricca conoscenza culturale ricordando luoghi geografici, persone, costumi e altre informazioni. Pertanto, nella scena del viaggio, occorre osservarlo con attenzione e sperimentarlo attivamente, per migliorare al meglio la nostra memoria.

Ancora una volta, è una scena di lavoro. Al lavoro, dobbiamo gestire una grande quantità di informazioni, come dati, contatti, attività, piani, ecc. Se la nostra memoria non è abbastanza forte, ciò influenzerà l'efficienza del nostro lavoro e i nostri risultati. Pertanto, negli scenari lavorativi, occorre fare un buon lavoro di registrazione e organizzazione e cercare di restringere il più possibile l'arco di “connessione informativa”. In questo modo possiamo migliorare meglio la nostra memoria.

Infine ci sono scene di vita. Gli esseri umani hanno bisogno di ricordare molte cose quotidiane, come indirizzi, numeri di telefono, attività della giornata e così via. Se la nostra memoria non è abbastanza buona, sorgeranno molti problemi nella vita. Pertanto, nelle scene della vita, dobbiamo esercitare la nostra capacità di memoria. Possiamo migliorare la nostra memoria costruendo il pensiero associativo e ripetendo in silenzio.

Per riassumere, la memoria in diversi scenari è strettamente correlata. Possiamo migliorare la nostra memoria e ottenere prestazioni migliori in vari scenari attraverso la pratica e la concentrazione deliberate. Cerchiamo di perseguire una vita e una carriera migliori con un atteggiamento ottimista. Si può vedere che abbiamo bisogno di migliorare la memoria, e la Cistanche deserticola può migliorare significativamente la memoria, perché la Cistanche deserticola può anche regolare l'equilibrio dei neurotrasmettitori, come ad esempio aumentare i livelli di acetilcolina e i fattori di crescita. Queste sostanze sono molto importanti per la memoria e l'apprendimento. Inoltre, Cistanche deserticola può anche migliorare il flusso sanguigno e promuovere l’apporto di ossigeno, il che può garantire che il cervello riceva nutrienti ed energia sufficienti, migliorando così la vitalità e la resistenza del cervello.

improve working memory

Fare clic su Scopri gli integratori per migliorare la memoria

3.1. Motivazione

Come discusso in precedenza, il meccanismo copy-on-write gioca un ruolo chiave nell'implementazione delle funzionalità di memoria virtuale nei moderni sistemi operativi. Tuttavia, i suoi vantaggi in termini di spazio stanno diminuendo nei moderni ambienti informatici e nei carichi di lavoro ad alta intensità di scrittura, comuni nei data center [21,22].

Le tecnologie di memoria emergenti come la memoria di archiviazione (SCM) e la memoria persistente consentono una maggiore densità di dati per i moduli di memoria riducendo al contempo il costo per unità di dati.

Al giorno d'oggi costruire un nodo con un'enorme quantità di memoria nell'ordine dei terabyte è diventato più economico che mai. Inoltre, i fornitori di servizi cloud hanno riferito che i nodi nei data center soffrono di un basso utilizzo della memoria, lasciando il 40-50% della memoria inutilizzata [23-26]. In questa situazione, diventa fattibile scambiare spazio di memoria con prestazioni in sistemi critici per le prestazioni [27]. Anche i vantaggi in termini di prestazioni stanno diminuendo.

Il vantaggio prestazionale del copy-on-write può essere caratterizzato dalla frequenza e dalle prestazioni di gestione degli errori di pagina. Durante la generazione di un processo figlio, i permessi di scrittura su tutte le pagine vengono eliminati. Dal punto di vista della correttezza, questo è inevitabile; tuttavia, ciò porta a frequenti errori di pagina dopo il fork, nel servire ciascuna richiesta di scrittura. Questa tempesta di pagefault di scrittura non accade solo ai processi figli ma anche al processo genitore.

A peggiorare le cose, il tempo di gestione degli errori di pagina non è migliorato di recente ma tende ad essere prolungato per motivi di sicurezza. In passato, l'intero spazio degli indirizzi del kernel veniva mappato in modo persistente su una parte dello spazio degli indirizzi del processo utente.

Tuttavia, questo layout dello spazio degli indirizzi consente ai processi utente dannosi di leggere indirettamente i dati critici nello spazio degli indirizzi del kernel sfruttando l'esecuzione speculativa nei processori [28,29].

Per mitigare tale vulnerabilità critica alla sicurezza, i sistemi operativi moderni utilizzano l’isolamento della tabella delle pagine del kernel (KPTI). In generale, solo una porzione limitata dello spazio degli indirizzi del kernel viene mappata allo spazio degli indirizzi del processo, e il resto dello spazio degli indirizzi del kernel viene mappato e non mappato dinamicamente durante la gestione degli interrupt e delle chiamate di sistema. Ciò deve essere accompagnato dal lavaggio TLB, che può ridurre significativamente le prestazioni del sistema.

In questo lavoro miriamo a ridurre il sovraccarico del copy-on-write sfruttando la localizzazione spaziale dei riferimenti di memoria. Attualmente, la copia su scrittura avviene per pagina e ogni volta che si verifica un errore di pagina, il sistema operativo dovrebbe essere coinvolto. La nostra idea chiave è ridurre la frequenza del coinvolgimento del sistema operativo sfruttando la località spaziale degli accessi alla memoria. Se si accede a una pagina in scrittura, è probabile che a breve si accederà in scrittura anche alle pagine vicine.

Pertanto, se eseguiamo la copia su scrittura non solo per la pagina difettosa ma anche per le pagine vicine insieme (ovvero, pre-copiamo le pagine vicine), possiamo ammortizzare il sovraccarico per la copia su scrittura durante la gestione degli errori di pagina. Dovremmo però stare attenti a non copiare sempre alla cieca tutte le pagine vicine.

Se le pagine copiate vengono scritte in un secondo momento, le spese generali sostenute per la pre-copia vengono ripagate. Tuttavia, se le pagine copiate non vengono scritte successivamente, la pre-copia comporta solo un sovraccarico aggiuntivo in termini di tempo e spazio.

ways to improve your memory

Pertanto, è fondamentale identificare le pagine target corrette da copiare. Approcci simili sono stati impiegati per ridurre al minimo il sovraccarico di gestione degli errori di pagina. Linux utilizza la cosiddetta funzionalità 'fault around'. Durante la gestione di un errore di pagina, Linux avvia la gestione dell'errore di pagina per le pagine che si trovano attorno alla pagina difettosa [2]. Questa funzionalità, tuttavia, viene applicata solo agli errori di pagina di lettura per le regioni di memoria supportate da file.

Dato che l'idea proposta si concentra sulla scrittura di page fault per pagine anonime, possiamo sostenere che il nostro approccio è diverso dalla funzionalità di fault-around. Sono stati proposti molti progetti all'avanguardia [12–17] per ottimizzare l'uso di hugepages nel sistema operativo.

Questi sistemi, in comune, presentano uno schema per identificare le migliori pagine candidate da convertire in pagine enormi e da promuovere in modo efficiente (ad esempio, convertire le pagine di base in una pagina enorme) o retrocedere da (ad esempio, convertire una pagina enorme in pagine di base). pagine enormi.

Tuttavia, indipendentemente dagli schemi proposti, la copia su scrittura viene eseguita solo nella granularità della pagina di base, dopo aver suddiviso la pagina enorme in pagine di base, se necessario. Pertanto, le caratteristiche prestazionali di copy-on-write sono le stesse del sistema Linux predefinito con il meccanismo THP (Transparent Hung Page). Al contrario, il nostro schema proposto è unico in quanto esegue la copia su scrittura con una granularità diversa a seconda del grado di località negli accessi alla memoria.

3.2. Identificazione della località spaziale

Per realizzare lo schema proposto, dovremmo considerare due questioni impegnative. In primo luogo, le pagine di destinazione dovrebbero essere identificate in modo preciso e tempestivo, in modo che il vantaggio della precopia sia massimizzato mentre il sovraccarico per la precopia sia ridotto al minimo.

Una volta che una pagina viene copiata da uno scrittore, la pagina non attiverà ulteriori errori di pagina. Ciò significa effettivamente che il sistema ha perso l'opportunità di ottimizzare l'accesso in scrittura. Pertanto, il sistema dovrebbe essere in grado di prevedere l'utilizzo futuro della pagina per determinare quali pagine dovrebbero essere copiate e quali no. In secondo luogo, l'identificazione delle pagine di destinazione dovrebbe comportare un basso sovraccarico poiché i sistemi operativi non possono permettersi un'elaborazione dispendiosa in termini di tempo nel sottosistema di gestione della memoria critico per le prestazioni.

Come discusso nella Sezione 2, molte funzionalità della memoria virtuale nei sistemi operativi moderni si basano sul meccanismo copy-on-write. Pertanto, il sovraccarico può facilmente superare il vantaggio del copy-on-write ottimizzato se l'implementazione complessiva non è sufficientemente efficiente.

Per prevedere il futuro di una pagina, raccogliamo prima la cronologia dei fork per i processi utente. Nello specifico, il sistema operativo monitora il numero di fork invocati da ciascun processo. Un conteggio basso per un processo implica che ci sono poche opportunità di sfruttare il processo e che il sistema operativo non ha bisogno di tenere traccia completamente degli errori di scrittura della pagina per questo processo.

Al contrario, quando un processo invoca la chiamata di sistema fork più di una soglia, il sistema può aspettarsi l'opportunità di ottimizzazione. Ciò accade con Redis, che invoca periodicamente fork per acquisire istantanee in memoria, o con lo script di shell che esegue il fork di più comandi da riga di comando. In risposta, il sistema inizia a tenere traccia degli errori di pagina per il processo.

improve brain

Successivamente, proponiamo un metodo per prevedere l'opportunità di ottimizzazione dalla cronologia, assumendo che il comportamento complessivo delle applicazioni non cambi in modo significativo. A tal fine, dividiamo lo spazio degli indirizzi del processo in regioni di dimensione fissa. Ogni regione mantiene una bitmap, dove ogni bit corrisponde a una pagina nella regione. Un processo viene generato con tutte le bitmap cancellate, come per le aree di memoria virtuale (VMA) appena popolate. Quando una parte o l'intero VMA viene annullato, vengono rilasciate anche le bitmap nell'intervallo di indirizzi corrispondente.

La bitmap viene allocata solo per le parti di VMA che sono popolate e le informazioni sulla pagina da 4 KB vengono riepilogate in un bit. Pertanto, lo spazio in eccesso per la bitmap è pari a circa lo 0,003% dello spazio degli indirizzi popolato. Inizialmente, le scritture vengono elaborate tramite la funzione copy-on-write così com'è.

Un accesso in scrittura viene bloccato nel gestore degli errori di pagina, per cui viene impostata la voce bitmap corrispondente. Nel tempo, la bitmap cattura effettivamente gli accessi alla regione e possiamo quantificare il grado di copertura. La copertura di una regione viene calcolata come percentuale di pagine copiate su tutte le pagine della regione, come segue:

improve cognitive function

Supponiamo che un sistema utilizzi pagine da 4 KB e che lo spazio degli indirizzi sia diviso in regioni da 2 MB.

Quindi ciascuna regione ha 512 4 pagine KB. Se vengono copiate 300 pagine in scrittura, la copertura della regione è 300/512 × 100=58,6%. Maggiore è la copertura di una regione, maggiore sarà la regione che potrà beneficiare dell'opportunità di ottimizzazione della precopia. Queste informazioni sulla copertura vengono trasferite nel fork e utilizzate come metrica per determinare il vantaggio di copiare le pagine vicine.

Nello specifico, se l'area della memoria ha una copertura elevata, è probabile che le pagine nell'area vengano eventualmente copiate. Pertanto, sarebbe utile precopiare altre pagine nella regione durante l'elaborazione di un errore di scrittura per una pagina. Al contrario, le opportunità di ottimizzazione nella precopiatura delle pagine sono poche se la copertura è bassa. Pertanto, solo la pagina difettosa viene copiata dal gestore pagefault.

D'ora in poi, nel resto del documento faremo riferimento a questo schema come copy-on-write basato sulla copertura o CCoW. La Figura 1 illustra il concetto di CCoW. Esistono due regioni, le regioni 0 e 1, ciascuna composta da sei pagine. 

Le pagine con ombreggiatura verde vengono popolate con copy-on-write. Quando il processo invoca la chiamata di sistema del fork, il permesso di scrittura per tutte le pagine, comprese quelle verdi, viene eliminato durante il fork. Supponiamo che la soglia per determinare la regione ad alta località sia del 60%. Nella regione 0, quattro pagine (pagine 1, 2, 3 e 4) sono state copiate e scritte prima del fork, fornendo una copertura del 4/6=66%.

Pertanto, si ritiene che questa regione abbia un'elevata località spaziale e tutte le pagine vengono copiate per gestire l'errore di pagina per la pagina 3, come ombreggiato in rosso. La regione inferiore, invece, fornisce una copertura del 33% poiché due pagine su sei sono state scritte prima del fork.

Pertanto, questa regione ha una copertura inferiore alla soglia, il che implica la bassa localizzazione spaziale della regione. Pertanto, quando si accede alla pagina 9 in scrittura, solo la pagina errata viene copiata in scrittura nel gestore degli errori di pagina, proprio come la normale procedura di copia su scrittura.

improve memory


For more information:1950477648nn@gmail.com

Potrebbe piacerti anche