# Next Generation Memory

Per Next Generation Memory si intendono tutte le nuove tecnologie per la memorizzazione, che sono state introdotte o verranno introdotte nel mondo informatico. La memoria, allo stato attuale, è uno dei componenti informatici più importanti nel panorama tecnologico odierno. Vediamo in questa pagina quali sono le nuove tecnologie e cosa significa introdurre nei dispositivi memorie di nuova concezione.
Le memorie utilizzate nei dispositivi attuali sfruttano le tecnologie emerse nei primi anni '70; stiamo parlando delle memorie a transistor (SRAM, DRAM e Flash) e delle memorie magnetiche (Hard Disk e memorie a nastro). Queste memorie, che sono in gran parte utilizzate ancora oggi, hanno avuto una vita lunghissima, e coerentemente con la legge di Moore, ogni 18 mesi raddoppiava il numero di transistor e si dimezzavano i costi. La memoria è il componente fondamentale in molti ambiti: nei piccoli dispositivi, come smartphone e tablet, la memoria (se di buona qualità) è uno dei componenti più costosi, al pari del display e con un costo ben più alto di quello della CPU. Inoltre se pensiamo a grossi server, la memoria deve essere di ottima qualità e veloce, quindi di nuovo ricopre un ruolo fondamentale.
Nel panorama informatico attuale, con la necessità crescente di immagazzinare quantità di dati sempre maggiori e il continuo e costante aumento delle richieste da parte di un numero sempre maggiore di utenti, rende le memorie sempre più importanti e sempre più un collo di bottiglia, il che stimola le aziende produttrici di memorie a migliorare questo tipo di periferica. Un esempio tra tutti è il recente successo ottenuto dai dischi SSD, memoria di massa non più magnetica, ma a transistor che incrementa di molto le prestazioni (per approfondimenti si veda la relativa voce Unità a stato solido).

## Motivi della necessità di introdurre nuove tecnologie di memoria

Sfortunatamente, la curva che rappresenta l'aumento delle prestazioni delle memorie attualmente in circolazione si sta appiattendo, ovvero si stanno raggiungendo i limiti fisici dati dal materiale. Fortunatamente, l'abilità nel modificare i materiali a livello atomico è sempre maggiore, e l'emergere di nuovi tipi di memoria permetterà di proseguire l'andamento positivo della curva relativa all'aumento di prestazioni.

## Tipologie di memorie

Vediamo un elenco dei principali tipi di memorie, divise per categorie, sia nuove che consolidate:
Memorie meccaniche (Memorie magnetiche):
* Disco rigido
* Nastro magnetico
Memorie a transistor:
* DRAM
* SRAM
* SSD
Memorie con nuove tecnologie:
* Ferroelettrica (simile alle DRAM ma con uno strato aggiuntivo per ottenere la non-volatilità)
* PCM (Phase change memory)

## Ragioni della lentezza dell'evoluzione

Le nuove tecnologie utilizzate per le memorie, come per esempio l'SSD, non funzionano come le odierne tecnologie (a transistor e magnetiche), e hanno diversi valori di performance, consumi, costi. Questa è la ragione per cui negli ultimi 40 anni, finché l'aumento delle prestazioni delle attuali tecnologie non si è fermato, non sono state inserite nuove tecnologie: è un'operazione molto complessa, sia per quanto riguarda lo spiegare come funziona la nuova tecnologia, sia per testarne l'effettiva miglioria, sia per la produzione in massa dei nuovi dispositivi.
Quindi le aziende produttrici di memorie devono affrontare due sfide: la prima è ovviamente inventare nuove tecnologie per memorizzare che siano migliori e continuino a scalare come le attuali hanno fatto fino ad adesso; la seconda sfida, la più ardua, prevede l'inserimento di questa innovazione nel mercato. Il problema in questo caso è che ognuna delle tecnologie esistenti ha guadagnato il suo spazio nella gerarchia delle memorie: gli Hard Disk magnetici e meccanici (ultimamente sostituiti dagli SSD) per salvataggi veloci e piccoli, SRAM per la cache, DRAM per la memoria principale e i nastri per salvataggi enormi e lenti.
Oltre al fattore "hardware", esiste anche un problema "software", il quale è stato progettato negli anni per calzare alla perfezione con l'hardware attuale: l'esempio più significativo riguarda la RAM (DRAM), memoria molto veloce presente nella maggior parte dei dispositivi, comunemente usata per memorizzare temporaneamente variabili e codice del programma eseguito; questa memoria ha la caratteristica di essere volatile, quindi ogni dato viene rimosso nel momento in cui non è più alimentata. Per mantenere il dato in memoria quindi sono necessari continui refresh, i quali consumano energia, tempo e risorse. Il motivo del successo di questa memoria è stato il poterla produrre con costi contenuti. Questo esempio si può applicare a ogni altra tecnologia utilizzata in tutti gli ambiti: nessuna di queste è la tecnologia ideale, si è solamente adattato il sistema in modo che funzionasse con le tecnologie diffuse.
Quindi, l'introduzione di nuove tecnologie avrà un grosso impatto sulla progettazione del software, a oggi basato sulle attuali tecnologie. Al momento, la più vicina alla commercializzazione di massa tra le nuove tecnologie viste precedentemente è la PCM, commercializzata da Micron Technology e Samsung.

### Caso particolare: le Persistent Memory

Fino ad oggi le memorie centrali sono state caratterizzate da:
* volatilità
* velocità
* possibilità di lavorare byte a byte
Le memorie di massa invece sono caratterizzate da:
* lentezza
* non volatilità
* possibilità di lavorare su blocchi
Le Persistent Memory segneranno un punto di svolta importantissimo, in quanto sono memorie non volatili che permettono di lavorare byte a byte e hanno la stessa velocità delle DRAM. Queste memorie potrebbero andare a sostituire quindi le DRAM, le flash e la memoria di massa. Chiaramente queste memorie possiedono caratteristiche del tutto differenti dalle memorie utilizzate oggi, e per poter essere utilizzate necessitano un'evoluzione nella gestione della memoria virtuale. Il problema software di cui si è parlato in precedenza si ricrea anche con queste memorie: il sistema operativo andrebbe reingegnerizzato in certe sue parti, e nonostante la memoria sia già in fase di test, il lavoro dei programmatori sarebbe dovuto avvenire in anticipo.

#### Analisi dei miglioramenti dati dalle Persistent Memory

Le tecnologie di memorizzazione attuali sfruttano la Cache (DRAM), e per mantenere la consistenza dei dati è necessario programmare il file system per eseguire periodicamente scritture sul disco fisso (molto lento, aumentano i tempi di latenza); ad ogni livello logico di un qualunque sistema, si ha una tipologia diversa di memoria. Introducendo la "Persistent Memory", che unisce le caratteristiche vincenti di DRAM e Hard Disk magnetico, si potrebbe sostituire tutti i vari livelli esistenti, eliminando i tempi di interazione tra memorie (poiché sia logicamente che fisicamente se ne avrebbe una). I maggiori miglioramenti possono essere apprezzati nelle seguenti tecnologie:
* il File system (che si occupa della persistenza dei dati delle applicazioni) ha sempre fatto affidamento su Hard Disk magnetici; sfruttando l'indirizzamento a bytes invece che a blocchi delle Persistent Memory, sarebbe possibile modificare byte a byte - invece che un intero blocco - solo i dati necessari, risparmiando delle scritture e velocizzando di molto le operazioni.
* i database che sfruttano le Persistent Memory, sfruttando la possibilità di indirizzamento a byte, potrebbero potenzialmente permettere l'esecuzione contemporanea di più query, incrementando le performance.
Oltre alle caratteristiche sopra elencate, le Persistent Memory offrono altri vantaggi:
* Aumento della memoria fisica: al momento le memorie DRAM hanno il limite fisico di 32GB per la memoria installabile in una singola macchina, limite che non si avrebbe con le Persistent Memory;
* Persistenza dell'indirizzamento a byte: con le Persistent Memory, il flusso di dati può essere scritto direttamente senza le scritture a catena tipiche delle memorie standard (eseguite fino alle memorie non volatili per assicurare la persistenza dei dati;
* Durabilità con bassa latenza: con scritture e letture istantanee o molto veloci, si potrebbe velocizzare di molto il lavoro individuale; inoltre, potendo avere RAM non volatili, l'accensione e lo spegnimento di sistemi potrebbe essere istantanea (poiché il tempo di attesa corrisponde a lettura dei dati dall'Hard Disk e scrittura su DRAM).