- Messaggi
- 11,778
- Reazioni
- 5,928
- Punteggio
- 208
Abstract IEEE Access 14/10/2019
Host Memory Buffer (HMB) è una caratteristica del protocollo Non-Volatile Memory Express (NVMe), che è l'interfaccia di archiviazione per un tipo di unità a stato solido (SSD).
l'HMB è stato introdotto per la prima volta nella specifica NVMe 1.2.
L'HMB consente allo storage sottostante di utilizzare una porzione della memoria host (RAM) per memorizzare nella cache le informazioni sulla mappatura degli indirizzi e/o i dati dell'utente, in modo da poter superare la capacità limitata della memoria all'interno dello storage.
Questa tecnologia offre l'opportunità di ottimizzare le prestazioni di I/O in modo conveniente condividendo l'ampia memoria RAM dell'host con il dispositivo con risorse limitate.
La traduzione degli indirizzi degli SSD diventerà più veloce poiché la tabella di mappatura ha il rapporto di perdita della cache ridotto con una maggiore capacità di memoria.
Sfruttando efficacemente la memoria host come buffer di archiviazione, gli SSD senza DRAM possono fornire prestazioni paragonabili a quelle dei prodotti contenenti DRAM, pur essendo superiori in termini di costi. Inoltre, quando la funzione HMB è supportata, è possibile accedere direttamente alla memoria host sia dall'host (Sistema Operativo) che dal dispositivo, ottenendo così ulteriori vantaggi se utilizzata in modo efficace. Ad esempio, poiché le richieste di I/O dall'host possono essere passate direttamente al controller SSD tramite la memoria condivisa, possono essere elaborate rapidamente, senza il sovraccarico di passare attraverso lo stack di I/O convenzionale.
[Ho sottolineato questa parte perchè potrebbe essere un po la chiave dell'efficienza del HMB. Dice l'autore infatti che le richieste fatte dal sistema operativo (I/O) passano direttamente al controller dalla RAM senza passare dallo slot fisico dell'SSD NVMe. Questo - aggiungo personalmente - mi lascia anche il sospetto che l'host possa prendere per fatte tutte le operazioni di scrittura caricate in RAM, anche quando su ssd nvme ancora non sono state fissate]
Per realizzare la funzionalità HMB, è necessaria una modifica a più livelli dell'intero processo di archiviazione, che va dal livello di I/O a blocchi nel kernel al livello del controller di archiviazione sottostante; cosa non è banale da implementare.
Come funziona HMB?
attivatore HMB
L'host (il Sistema Operativo) invia un comando di identificazione al controller, che risponde con un messaggio di risposta che include attributi come Host Memory Buffer Preferred Size (HMPRE) e Host Memory Buffer Minimum Size (HMMIN).
Il controller SSD informa l'host se supporta l'HMB utilizzando questi attributi. In particolare, se il valore di HMPRE non è zero, significa che l'SSD supporta l'HMB. Infine, l'HMB viene attivato quando l'host invia un comando "Set Features" dopo aver allocato uno spazio HMB con una dimensione di HMPRE al controller:
L'architettura complessiva dell'HMB-SSD è costituita da tre componenti chiave:
L' allocatore HMB è responsabile della gestione dello spazio di memoria HMB.
Inizia impostando un determinato spazio di memoria sulla RAM di sistema.
Lo spazio HMB comprende un gruppo di blocchi di memoria fisicamente continui chiamati segmenti, come mostrato in Figura sotto. Ad esempio, se lo spazio allocato per l'HMB è 64 MB, il driver del dispositivo host lo divide in 16 segmenti, in cui ogni segmento è un'area continua di 4 MB. Su richiesta, l'allocatore HMB alloca o rilascia lo spazio di memoria alla granularità del blocco di memoria (cioè 4 KB) all'interno di un segmento.
Gli indirizzi e le dimensioni di tutti i segmenti vengono acquisiti al momento dell'inizializzazione della memoria tramite l'attivatore HMB che comunica con un sistema host. Una volta ottenute tutte le informazioni necessarie, l'allocatore HMB inizializza lo spazio HMB impostando correttamente le strutture di dati associate. Ad esempio, il blocco di controllo HMB, situato nel primo segmento, mantiene i metadati associati all'intero spazio HMB, come la posizione della tabella dei blocchi di memoria e della tabella del buffer di scrittura veloce (Tabella FTL).
Il gestore Fast Write Buffer (FWB) consente al dispositivo di archiviazione sottostante di sfruttare la memoria lato host come buffer di scrittura. Questo controllo flessibile dell'accesso alla memoria tra diversi livelli astratti va oltre la semplice limitazione delle penalità prestazionali introdotte da una capacità di memoria limitata della memoria e fornisce un breve canale di comunicazione tra due estremità.
Quando si verifica una richiesta di lettura, il gestore FWB esamina prima il buffer di scrittura HMB per verificare se i dati richiesti risiedono in esso. Se la richiesta arriva nel buffer, viene servita dai dati nel buffer; in caso contrario, i dati vengono letti dall'archiviazione sottostante tramite l'interfaccia di archiviazione convenzionale. Al contrario, le richieste di scrittura vengono gestite dal buffer di scrittura HMB senza raggiungere la memoria in tutti i casi. Se la versione precedente dei dati richiesti esiste nel buffer di scrittura HMB, il gestore FWB la sovrascrive; in caso contrario, il gestore FWB alloca uno spazio libero e scrive i dati forniti nello spazio appena allocato nel buffer di scrittura HMB.
La latenza media di I/O e il tempo di esecuzione dei carichi di lavoro sono migliorati in modo significativo. Poiché nello schema FWB vengono bypassati più livelli di stack di I/O, la latenza di I/O diminuisce di conseguenza. Inoltre, poiché il buffer di scrittura HMB riduce intrinsecamente il traffico di I/O di archiviazione servendo molte richieste all'interno di un lato host, le prestazioni dell'SSD possono essere migliorate con un minor numero di richieste.
Host Memory Buffer (HMB) è una caratteristica del protocollo Non-Volatile Memory Express (NVMe), che è l'interfaccia di archiviazione per un tipo di unità a stato solido (SSD).
l'HMB è stato introdotto per la prima volta nella specifica NVMe 1.2.
L'HMB consente allo storage sottostante di utilizzare una porzione della memoria host (RAM) per memorizzare nella cache le informazioni sulla mappatura degli indirizzi e/o i dati dell'utente, in modo da poter superare la capacità limitata della memoria all'interno dello storage.
Questa tecnologia offre l'opportunità di ottimizzare le prestazioni di I/O in modo conveniente condividendo l'ampia memoria RAM dell'host con il dispositivo con risorse limitate.
La traduzione degli indirizzi degli SSD diventerà più veloce poiché la tabella di mappatura ha il rapporto di perdita della cache ridotto con una maggiore capacità di memoria.
Sfruttando efficacemente la memoria host come buffer di archiviazione, gli SSD senza DRAM possono fornire prestazioni paragonabili a quelle dei prodotti contenenti DRAM, pur essendo superiori in termini di costi. Inoltre, quando la funzione HMB è supportata, è possibile accedere direttamente alla memoria host sia dall'host (Sistema Operativo) che dal dispositivo, ottenendo così ulteriori vantaggi se utilizzata in modo efficace. Ad esempio, poiché le richieste di I/O dall'host possono essere passate direttamente al controller SSD tramite la memoria condivisa, possono essere elaborate rapidamente, senza il sovraccarico di passare attraverso lo stack di I/O convenzionale.
[Ho sottolineato questa parte perchè potrebbe essere un po la chiave dell'efficienza del HMB. Dice l'autore infatti che le richieste fatte dal sistema operativo (I/O) passano direttamente al controller dalla RAM senza passare dallo slot fisico dell'SSD NVMe. Questo - aggiungo personalmente - mi lascia anche il sospetto che l'host possa prendere per fatte tutte le operazioni di scrittura caricate in RAM, anche quando su ssd nvme ancora non sono state fissate]
Per realizzare la funzionalità HMB, è necessaria una modifica a più livelli dell'intero processo di archiviazione, che va dal livello di I/O a blocchi nel kernel al livello del controller di archiviazione sottostante; cosa non è banale da implementare.
Come funziona HMB?
attivatore HMB
L'host (il Sistema Operativo) invia un comando di identificazione al controller, che risponde con un messaggio di risposta che include attributi come Host Memory Buffer Preferred Size (HMPRE) e Host Memory Buffer Minimum Size (HMMIN).
Il controller SSD informa l'host se supporta l'HMB utilizzando questi attributi. In particolare, se il valore di HMPRE non è zero, significa che l'SSD supporta l'HMB. Infine, l'HMB viene attivato quando l'host invia un comando "Set Features" dopo aver allocato uno spazio HMB con una dimensione di HMPRE al controller:
L'architettura complessiva dell'HMB-SSD è costituita da tre componenti chiave:
- l'attivatore HMB (che abbiamo visto sopra)
- l'allocatore HMB
- il gestore Fast Write Buffer (FWB)
L' allocatore HMB è responsabile della gestione dello spazio di memoria HMB.
Inizia impostando un determinato spazio di memoria sulla RAM di sistema.
Lo spazio HMB comprende un gruppo di blocchi di memoria fisicamente continui chiamati segmenti, come mostrato in Figura sotto. Ad esempio, se lo spazio allocato per l'HMB è 64 MB, il driver del dispositivo host lo divide in 16 segmenti, in cui ogni segmento è un'area continua di 4 MB. Su richiesta, l'allocatore HMB alloca o rilascia lo spazio di memoria alla granularità del blocco di memoria (cioè 4 KB) all'interno di un segmento.
Gli indirizzi e le dimensioni di tutti i segmenti vengono acquisiti al momento dell'inizializzazione della memoria tramite l'attivatore HMB che comunica con un sistema host. Una volta ottenute tutte le informazioni necessarie, l'allocatore HMB inizializza lo spazio HMB impostando correttamente le strutture di dati associate. Ad esempio, il blocco di controllo HMB, situato nel primo segmento, mantiene i metadati associati all'intero spazio HMB, come la posizione della tabella dei blocchi di memoria e della tabella del buffer di scrittura veloce (Tabella FTL).
Il gestore Fast Write Buffer (FWB) consente al dispositivo di archiviazione sottostante di sfruttare la memoria lato host come buffer di scrittura. Questo controllo flessibile dell'accesso alla memoria tra diversi livelli astratti va oltre la semplice limitazione delle penalità prestazionali introdotte da una capacità di memoria limitata della memoria e fornisce un breve canale di comunicazione tra due estremità.
Quando si verifica una richiesta di lettura, il gestore FWB esamina prima il buffer di scrittura HMB per verificare se i dati richiesti risiedono in esso. Se la richiesta arriva nel buffer, viene servita dai dati nel buffer; in caso contrario, i dati vengono letti dall'archiviazione sottostante tramite l'interfaccia di archiviazione convenzionale. Al contrario, le richieste di scrittura vengono gestite dal buffer di scrittura HMB senza raggiungere la memoria in tutti i casi. Se la versione precedente dei dati richiesti esiste nel buffer di scrittura HMB, il gestore FWB la sovrascrive; in caso contrario, il gestore FWB alloca uno spazio libero e scrive i dati forniti nello spazio appena allocato nel buffer di scrittura HMB.
La latenza media di I/O e il tempo di esecuzione dei carichi di lavoro sono migliorati in modo significativo. Poiché nello schema FWB vengono bypassati più livelli di stack di I/O, la latenza di I/O diminuisce di conseguenza. Inoltre, poiché il buffer di scrittura HMB riduce intrinsecamente il traffico di I/O di archiviazione servendo molte richieste all'interno di un lato host, le prestazioni dell'SSD possono essere migliorate con un minor numero di richieste.