NVMe ssd: Perché la scrittura 4k è più veloce della lettura?


51

Ho un SSD Samsung 960 Pro da 512 GB su NVMe con PCIe Gen.3x4 in esecuzione. Uso il driver Samsung NVMe 2.0.0.1607. L'SSD funziona correttamente. Tuttavia, non capisco perché la scrittura di 4k sia più veloce della lettura di 4k. Sto usando AS Benchmark:

inserisci qui la descrizione dell'immagine

È un fattore 3! C'è qualcosa di sbagliato (con il mio sistema o AS Benchmark) o è normale?


E ancora molto più veloce di un disco rigido rotante!
Zan Lynx,

Risposte:


76

Le letture 4K saranno la cosa più difficile che l'unità può fare. Sono tra le dimensioni di blocco più piccole che l'unità sarà in grado di gestire, e non c'è modo per l'unità di precaricare grandi quantità di dati, in realtà sono probabilmente abbastanza inefficienti se la logica di caricamento del disco dell'unità intende leggere qualcosa più grande di 4kb.

Le letture di unità "normali" hanno una probabilità maggiore di 4kb in quanto vi sono pochissimi file di dimensioni così ridotte e anche il file di paging potrebbe essere letto in blocchi di grandi dimensioni in quanto sarebbe strano che un programma avesse "solo" 4KB di memoria paginata. Ciò significa che qualsiasi precarico che l'unità tenta di fare penalizzerà effettivamente il rendimento dell'unità.

Le letture 4K potrebbero passare attraverso il buffer dell'unità, ma la parte "casuale" del test le rende del tutto imprevedibili. Il controller non saprà quando l'unità potrebbe aver bisogno delle letture "grandi" più comuni.

D'altra parte, le scritture 4K possono essere memorizzate, messe in coda e scritte in sequenza in modo efficiente. Il buffer dell'unità può svolgere gran parte del lavoro catch-and-write per cui è stato progettato e il livellatore di usura potrebbe persino allocare tutte quelle scritture 4K sullo stesso blocco di cancellazione dell'unità, trasformando occasionalmente ciò che è una scrittura 4K "casuale" in qualcosa di più vicino a una scrittura sequenziale.

In effetti sospetto che questo sia ciò che sta accadendo nelle scritture "4K-64Thrd", il "64-Thrd" sta apparentemente usando una grande profondità di coda , segnalando così all'unità che ha una grande quantità di dati da leggere o scrivere . Ciò innesca un sacco di clustering di scritture e quindi si avvicina alla velocità di scrittura sequenziale dell'unità. Esiste ancora un sovraccarico per l'esecuzione di una scrittura 4K, ma ora stai esponendo completamente il potenziale del buffer. Nella versione Read del test, il controller dell'unità, ora riconoscendo che è sotto carico molto costante, interrompe il precaricamento dei dati, probabilmente evita il buffer e passa invece a una modalità di lettura "grezza", avvicinandosi nuovamente alla velocità di lettura sequenziale.

Fondamentalmente il controller di unità può fare qualcosa per rendere più efficiente una scrittura 4K, specialmente se un cluster arriva in un momento simile, mentre non può fare nulla per rendere più efficiente una singola lettura 4K, soprattutto se sta cercando di ottimizzare flusso di dati pre-caricando i dati nella cache.


5
Non fa parte della risposta stessa, ma sospetto che la "lettura 4K" (versione non 64Thrd) stia effettivamente esponendo la dimensione del blocco di lettura predefinita dell'unità come 32K o 64K. Questo sarebbe 2600/50 = 52 (64K con un overhead + la lettura 4K originale) o 1200/50 = 24 (32K con un overhead + la lettura 4K che la riduce).
Mokubai

16
Buona risposta nel complesso, ma non credo che ci siano pochissimi file così piccoli. In effetti sospetto che sulla maggior parte dei sistemi la maggior parte dei file sia 4K o più piccola. Non occupano la maggior parte dello spazio , ma questa è un'altra questione.
Hobbs

3
La risposta più semplice è probabilmente questa: se le esegui una alla volta, non puoi sovrapporre affatto le letture perché non scopri nemmeno a che blocco è la lettura successiva fino a quando non restituisci i dati dalla lettura precedente. Ma puoi sovrapporre completamente le scritture poiché puoi ottenere tutti i dati per la scrittura successiva mentre stai ancora lavorando su quella precedente.
David Schwartz,

2
@hobbs Se prendi ad esempio NTFS la dimensione predefinita del cluster è 4K (o un suo multiplo), il che significa che il filesystem NTFS stesso funziona in blocchi 4K anche se i file e / oi metadati stessi sono più piccoli. Quindi i file più piccoli non fanno alcuna differenza. A tutti gli effetti un sistema Windows legge / scrive in blocchi 4K o multipli di quello.
Tonny,

1
@hobbs: con NTFS, è probabile che tu ottenga la lettura di file così piccoli gratuitamente (!). I file di piccole dimensioni vengono archiviati nella voce della directory stessa, adiacente al nome del file. Devi avere una dimensione del file abbastanza particolare vicino a 4KB per avere un vero file 4KB su disco.
MSalter, il

16

Altre risposte hanno già spiegato perché potrebbe essere che la scrittura è più veloce della lettura; Vorrei aggiungere che per questo disco questo è assolutamente normale, in quanto è confermato da benchmark che puoi trovare nelle recensioni.

Recensione di ArsTecnica

ArsTechnica ha recensito l'unità, sia la tua versione (512 GB) che quella da 2 TB:

ArsTechnica (Questo grafico non è immediatamente visibile nella recensione, è il 5 ° nella prima galleria, devi fare clic su di esso)

Le prestazioni di questi 2 modelli sono molto simili e i loro numeri assomigliano ai tuoi: il disco può leggere a 37 MB / se scrivere a 151 MB / s.

Recensione di AnandTech

AnandTech ha anche rivisto l'unità: hanno utilizzato il modello da 2 TB, calcolando la media dei risultati dei test con una profondità di coda di 1, 2 e 4. Questi sono i grafici:

AnandTech 4K read AnandTech 4K write

L'unità legge 137 MB / se scrive 437 MB / s. Il numero è molto più alto del tuo, ma probabilmente è dovuto alla profondità della coda più alta. Comunque la velocità di scrittura è 3 volte la velocità di lettura, come nel tuo caso.

Recensione di PC World

Un'altra recensione da parte di PC World : hanno testato la versione da 1 TB e i risultati per 4K sono 30 MB / s per la lettura e 155 MB / s per la scrittura: Grafico mondiale PC la velocità di scrittura è in linea con la tua, ma qui l'unità è ancora più lento a leggere. Il risultato è che il rapporto è cinque a uno, non tre a uno.

Conclusione

Le recensioni confermano che per questa unità è normale che la velocità di scrittura per 4K casuale sia molto più veloce della velocità di lettura: a seconda del test, può anche essere 5 volte più veloce.

La tua guida è a posto. Non c'è motivo di credere che sia difettoso o che il tuo sistema abbia un problema.


8

La cache del controller SSD scrive nella NVRAM integrata e la scarica su supporti flash in momenti opportuni. La latenza di scrittura è quindi la latenza di accesso alla cache, in genere 20us. Le letture, al contrario, vengono offerte dai media, con un tempo di accesso di 120-150us al massimo.


1

Espandendo la risposta di Andrey, è necessario esaminare l'overhead coinvolto prima che l'SSD possa segnalare al computer che l'operazione è stata completata.

Per una scrittura, i dati devono essere semplicemente scritti in una cache RAM interna. Successivamente verrà scritto nella memoria flash, insieme ad altri blocchi 4k e metadati necessari per verificare, correggere errori e localizzarli.

Per una lettura, l'SSD deve prima individuare i dati. La posizione che il computer vuole leggere è chiamata indirizzo logico e non ha una relazione diretta con la posizione fisica dei dati nella memoria flash. L'SSD traduce l'indirizzo logico in uno fisico, basato sulla geometria della memoria flash (il modo in cui sono disposte le celle), rimappatura dei blocchi danneggiati, livellamento dell'usura e vari altri fattori. Deve quindi attendere il completamento di qualsiasi altra operazione prima di recuperare i dati da Flash, quindi controllarli e, se necessario, rileggere e applicare la correzione degli errori, possibilmente anche riscrivere l'intero blocco da qualche altra parte.

Mentre il tempo totale impiegato da un'operazione di scrittura può essere più lungo di una tipica operazione di lettura, il tempo impiegato dall'SSD per segnalare che l'operazione è stata completata nella misura in cui è in grado di elaborare ulteriori comandi è inferiore. Con blocchi di grandi dimensioni l'overhead non è il fattore limitante, ma con molti blocchi di piccole dimensioni inizia a limitare la velocità di lettura / scrittura.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.