Perché il mio HDD è così lento nei test di velocità "4K"?


46

Cosa c'è di sbagliato nella mia velocità a 4K? Perché è così lento? O dovrebbe essere così?

Schermata del benchmark

Va bene quella velocità? Perché ho una velocità così bassa a 4K?


13
È normale e previsto. "4K" in questo contesto significa lettura / scrittura casuale (in blocchi di 4 kilobyte, quindi "4K"), su cui gli HDD meccanici eseguono terribilmente. Ecco dove vorresti un SSD. Vedi qui per una spiegazione più approfondita.
Bob,

4Kb viene utilizzato perché ha le dimensioni tipiche di un cluster di dischi e, su molti HDD moderni, del settore attuale (la struttura di basso livello sul disco stesso). Cioè, la più piccola quantità di dati che può essere trasferita alla volta in qualsiasi lettura o scrittura, anche se i dati richiesti sono più piccoli. Interessante il fatto che NESSUNA risposta in questa pagina fino ad ora menzioni anche gruppi o settori.
thomasrutter,

2
@thomasrutter Perché non è rilevante per la risposta. La parte importante è che questo test prevede la ricerca casuale. Non è rilevante (in una certa misura) quanti dati vengono trasferiti e se si tratta o meno di un multiplo della dimensione del settore del disco; la parte importante è che il test trasferisce una quantità minima di dati per misurare le prestazioni di ricerca.
Micheal Johnson,

Questo test è su una partizione o sull'intero disco? I test a livello di partizione possono essere molto peggiori per gli accessi 4K se si dispone di un disco con settori fisici 4K ma settori logici 1K e disallineare il confine della partizione rispetto ai settori a cavallo.
Toby Speight,

I moderni strumenti di partizionamento tendono a garantire che le partizioni inizino e finiscano su un confine di settore; anche la granularità di 1 MB è ormai comune. Sono finiti i tempi dei vecchi "63 settori a 512 byte" che avrebbero causato problemi ai settori nativi 4Kb.
thomasrutter,

Risposte:


85

Quello che stai incontrando è tipico degli HDD meccanici e uno dei maggiori vantaggi degli SSD: gli HDD hanno prestazioni terribili di accesso casuale.

In CrystalDiskMark, "Seq" significa accesso sequenziale mentre "4K" significa accesso casuale (in blocchi di 4kB alla volta, perché i singoli byte sarebbero troppo lenti e non realistici 1 ).


definizioni

Esistono, in generale, due modi diversi per accedere a un file.

Accesso sequenziale

Accesso sequenziale significa che leggi o scrivi il file più o meno un byte dopo l'altro. Ad esempio, se stai guardando un video, dovresti caricarlo dall'inizio alla fine. Se stai scaricando un file, questo viene scaricato e scritto sul disco dall'inizio alla fine.

Dal punto di vista del disco, vengono visualizzati comandi come "leggi blocco 1, leggi blocco 2, leggi blocco 3, leggi blocco byte 4" 1 .

Accesso casuale

L' accesso casuale significa che non esiste un modello evidente per le letture o le scritture. Questo non deve significare veramente casuale; significa davvero "non sequenziale". Ad esempio, se stai avviando molti programmi contemporaneamente, dovranno leggere molti file sparsi sul tuo disco.

Dal punto di vista del drive, sta vedendo comandi come "leggi il blocco # 56, leggi il blocco # 5463, leggi il blocco # 14, leggi il blocco # 5"

blocchi

Ho citato i blocchi un paio di volte. Poiché i computer gestiscono dimensioni così grandi (1 MB ~ = 1000000 B), anche l'accesso sequenziale è inefficiente se si deve richiedere l'unità per ogni singolo byte - ci sono troppe chiacchiere. In pratica, il sistema operativo richiede blocchi di dati alla volta dal disco.

Un blocco è solo un intervallo di byte; ad esempio, il blocco n. 1 potrebbe essere byte # 1- # 512, il blocco n. 2 potrebbe essere byte # 513- # 1024, ecc. Questi blocchi hanno una dimensione di 512 byte o 4096 byte, a seconda dell'unità. Ma anche dopo aver gestito i blocchi anziché i singoli byte, l'accesso ai blocchi sequenziali è più rapido dell'accesso ai blocchi casuali.


Prestazione

Sequenziale

L'accesso sequenziale è generalmente più veloce dell'accesso casuale. Questo perché l'accesso sequenziale consente al sistema operativo e all'unità di prevedere ciò che sarà necessario in seguito e di caricare in anticipo un grosso blocco. Se hai richiesto i blocchi "1, 2, 3, 4", il sistema operativo può indovinare che vorrai "5, 6, 7, 8", quindi dice all'unità di leggere "1, 2, 3, 4 , 5, 6, 7, 8 "in una volta sola. Allo stesso modo, l'unità può leggere l'archiviazione fisica in una sola volta, piuttosto che "cercare 1, leggere 1,2,3,4, cercare 5, leggere 5,6,7,8".

Oh, ho detto che cercavo qualcosa. Gli HDD meccanici hanno tempi di ricerca molto lenti a causa del modo in cui sono disposti fisicamente: sono costituiti da un numero di dischi metallizzati pesanti che ruotano attorno, con le braccia fisiche che si muovono avanti e indietro per leggere il disco. Ecco un video di un HDD aperto in cui puoi vedere i dischi rotanti e le braccia in movimento.

Diagramma degli interni HDD
Immagine da http://www.realtechs.net/data%20recovery/process2.html

Ciò significa che in qualsiasi momento è possibile leggere solo il bit di dati sotto la testa alla fine del braccio. L'unità deve attendere due cose: deve attendere che il braccio si sposti sull'anello destro ("traccia") del disco e deve anche attendere che il disco ruoti in modo che i dati necessari siano sotto la lettura testa. Questo è noto come ricerca 2 . Sia le braccia rotanti che quelle mobili impiegano del tempo fisico per muoversi e non possono essere accelerate di molto senza rischiare di danneggiare.

Questo in genere richiede molto tempo, molto più lungo della lettura effettiva. Stiamo parlando di> 5ms solo per arrivare a dove vive il byte richiesto, mentre la lettura effettiva del byte è in media di circa 0,00000625 ms per lettura sequenziale di byte (o 0,003125 ms per blocco da 512 B).

Casuale

L'accesso casuale, d'altra parte, non ha quel vantaggio di prevedibilità. Quindi, se vuoi leggere 8 byte casuali, forse dai blocchi "8,34,76,996,112,644,888,341", l'unità deve andare "cerca in 8, leggi 8, cerca in34, leggi 34, cerca in76, leggi 76, ..." . Notate come deve cercare di nuovo per ogni singolo blocco? Invece di una media di 0,003125 ms per blocco sequenziale da 512 B, ora è una media di (ricerca di 5 ms + lettura 0,003125 ms) = 5,003125 ms per blocco. Questo è molte, molte volte più lento. Migliaia di volte più lente, in effetti.

SSD

Fortunatamente, ora abbiamo una soluzione: SSD.

Un SSD, un'unità a stato solido , è, come suggerisce il nome, stato solido . Ciò significa che non ha parti in movimento . Inoltre, il modo in cui un SSD è disposto significa che non è (effettivamente 3 ) necessario cercare la posizione di un byte; lo sa già . Ecco perché un SSD ha un divario di prestazioni molto inferiore tra accesso sequenziale e casuale.

C'è ancora un divario, ma ciò può essere in gran parte attribuito al fatto di non essere in grado di prevedere ciò che verrà dopo e di precaricare i dati prima che vengano richiesti.


1 Più precisamente, con le unità LBA vengono indirizzate in blocchi di 512 byte (512n / 512e) o 4kB (4Kn) per motivi di efficienza. Inoltre, i programmi reali non hanno quasi mai bisogno di un solo byte alla volta.

2 Tecnicamente, cercare si riferisce solo alla corsa del braccio. L'attesa per la rotazione dei dati sotto la testa è la latenza di rotazione al di sopra del tempo di ricerca.

3 Tecnicamente, hanno tabelle di ricerca e rimappa per altri motivi, ad esempio il livellamento dell'usura, ma questi sono completamente trascurabili rispetto a un HDD ...


@KamilMaciorowski In realtà sto ripensando a questa semplificazione ora, perché butta via il mio calcolo del tempo di ricerca + lettura. Oh bene. Non è troppo importante per i concetti.
Bob,

Dovresti correggere la parte casuale Notice how it needs to look for every single byte?:: sostituisci bytecon block(e cambia l'esempio di conseguenza). L'unità cerca la parte 4k (che potrebbe essere ulteriormente dispersa in blocchi di 512 byte, ma non inferiore a questo. Non cerca tra tutti i byte! Cerca tra tutti i blocchi se il blocco successivo non è proprio dietro (cosa che accade molto su dischi frammentati). E cercare (spostare la testa attorno al piatto e aspettare che il blocco passi sotto di esso) è ciò che richiede molto tempo (alcuni millisecondi)
Olivier Dulac,

2
Un piccolo dienote a 4 kiB / 512B. 4kiB ha anche la dimensione della pagina, beh, quasi tutto, quindi è probabile che OS $ legga un blocco completo di 4 kiB anche se i driver LBA leggono blocchi di 512 B. Inoltre, non penso che il problema sia che l'HDD deve "trovare" qualsiasi byte più dell'SDD di quello che deve ruotare fisicamente nella posizione corretta. Se si accede nuovamente al blocco, è necessario cercarlo nuovamente poiché l'HDD gira continuamente. Qualsiasi rimappatura del blocco è probabilmente un effetto secondario (e il blocco rimappato è solitamente subito dopo quello danneggiato, comunque credo di minimizzare la ricerca).
Maciej Piechotka,

(Forse una nota a margine completa - Non sono sicuro di NAND / NOR ma almeno l'indirizzamento DDR non è completamente casuale come indica il nome ma funziona in "raffica" di indirizzi. Nella maggior parte dei casi questo è 64 B a causa del fatto che una dimensione di $ line della maggior parte delle CPU, ma può essere molto più grande per altre applicazioni.)
Maciej Piechotka,

1
@OlivierDulac Penso ancora che l'introduzione di blocchi sia potenzialmente confusa, ma ho provato a spiegarlo. Risposta aggiornata
Bob,

3

Come già sottolineato da altre risposte, "4K" quasi certamente si riferisce all'accesso casuale in blocchi di dimensione 4 KiB.

Ogni volta che viene richiesto a un disco rigido (non un SSD) di leggere o scrivere dati, si verificano due ritardi significativi:

  • Cerca la latenza, in modo che la testina di lettura / scrittura "cerchi" la traccia circolare corretta (o "cilindro") sul piatto, incluso qualsiasi tempo necessario affinché la testina si stabilizzi sulla traccia e si sincronizzi con i dati memorizzati sul piatto
  • Latenza di rotazione, affinché il piatto rotante sotto la testina di lettura / scrittura ruoti in modo tale che la porzione desiderata della traccia (il "settore") passi sotto la testina

Entrambi hanno un tempo relativamente costante per ogni unità. La latenza di ricerca è una funzione della velocità con cui la testa può essere spostata e di quanto deve essere spostata, e la latenza di rotazione è una funzione della velocità con cui il piatto gira. Inoltre, non sono cambiati molto negli ultimi decenni. I produttori effettivamente utilizzavano tempi di ricerca medi, ad es. Nelle pubblicità; hanno praticamente smesso di farlo quando c'è stato poco o nessun sviluppo nell'area. Nessun produttore, specialmente in un ambiente ad alta concorrenza, desidera che i suoi prodotti non abbiano un aspetto migliore di quelli della concorrenza.

Un tipico disco rigido desktop gira a 7200 rpm, mentre una tipica unità laptop potrebbe ruotare a circa 5000 rpm. Ciò significa che ogni secondo, passa attraverso un totale di 120 giri (unità desktop) o circa 83 giri (unità laptop). Poiché in media il disco dovrà ruotare di mezzo giro prima che il settore desiderato passi sotto la testa, ciò significa che possiamo aspettarci che il disco sia in grado di soddisfare circa il doppio di molte richieste I / O al secondo, supponendo che

  • o la ricerca viene eseguita mentre il disco ruota (questa è probabilmente una scommessa sicura per i dischi rigidi oggi in cui l'I / O comporta la ricerca) e la latenza della ricerca non è più lunga della latenza di rotazione per il particolare I / O
  • oppure la testa si trova già sopra il cilindro corretto, causando la non necessità di cercare l'unità (che è un caso speciale di quanto sopra, con una latenza di ricerca pari a zero)

Quindi dovremmo aspettarci di essere in grado di funzionare nell'ordine di 200 I / O al secondo se i dati a cui viene chiesto di accedere (per la lettura o la scrittura) sono fisicamente relativamente localizzati, con conseguente latenza rotazionale come fattore limitante. Nel caso generale, ci aspetteremmo che l'unità sia in grado di funzionare nell'ordine di 100 I / O al secondo se i dati vengono distribuiti sul piatto o sui piatti, richiedendo una ricerca considerevole e causando la latenza della ricerca come fattore limitante . In termini di archiviazione, questo è " IOPSprestazioni "del disco rigido; questa, non le prestazioni I / O sequenziali, è in genere il fattore limitante nei sistemi di archiviazione del mondo reale. (Questo è un grande motivo per cui gli SSD sono molto più veloci da usare: eliminano la latenza di rotazione e ridurre notevolmente la latenza di ricerca, poiché il movimento fisico della testina di lettura / scrittura diventa una ricerca di tabella nelle tabelle dei livelli di mappatura flash, che vengono archiviate elettronicamente.)

Le scritture sono generalmente più lente quando è coinvolto un flush della cache. Normalmente i sistemi operativi e i dischi rigidi cercano di riordinare le scritture casuali per trasformare I / O casuali in I / O sequenziali, ove possibile, per migliorare le prestazioni. Se esiste un esplicito svuotamento della cache o una barriera di scrittura , questa ottimizzazione viene eliminata allo scopo di garantire che lo stato dei dati nella memoria persistente sia coerente con ciò che il software si aspetta. Fondamentalmente lo stesso ragionamento si applica durante la lettura quando non è coinvolta la cache del disco, o perché non ne esiste nessuna (oggi non comune sui sistemi di tipo desktop) o perché il software la ignora deliberatamente (cosa che spesso viene fatta quando si misurano le prestazioni I / O). Entrambi riducono le massime prestazioni IOPS potenziali a quelle del caso più pessimistico o 120 IOPS per un drive a 7200 rpm.

  • A 100 IOPS a 4 KiB per I / O, otteniamo prestazioni di circa 400 KB / s.
  • A 200 IOPS a 4 KiB per I / O, otteniamo prestazioni di circa 800 KB / s.

Che succede così per abbinare i tuoi numeri quasi esattamente. L'I / O casuale con blocchi di piccole dimensioni è un killer di prestazioni assolute per i dischi rigidi rotazionali, motivo per cui è una metrica rilevante.

Per quanto riguarda l'I / O puramente sequenziale, il throughput nell'intervallo di 150 MB / s non è affatto irragionevole per i moderni dischi rigidi rotazionali. Ma pochissimo I / O del mondo reale è strettamente sequenziale, quindi nella maggior parte delle situazioni, le prestazioni di I / O puramente sequenziali diventano più un esercizio accademico che un'indicazione delle prestazioni del mondo reale.


Questa è un'ottima risposta e legge molto meglio della mia :) Solo una piccola nota, almeno Seagate specifica ancora la latenza di ricerca media nei loro fogli di dati . WD non sembra.
Bob,

@Bob Grazie. In realtà intendevo in pubblicità e simili; Ho modificato la risposta per chiarirlo. Penso che sia sicuro affermare che pochissime persone leggono i fogli dati, anche se farlo probabilmente sarebbe un'esperienza che fa riflettere per molti ...
un CVn del

2

4K si riferisce a I / O casuali . Ciò significa che al disco viene chiesto di accedere a piccoli blocchi (4 KB di dimensione) in punti casuali all'interno del file di test. Questa è una debolezza dei dischi rigidi; la capacità di accedere ai dati attraverso diverse regioni del disco è limitata dalla velocità con cui il disco ruota e dalla velocità con cui le testine di lettura / scrittura possono muoversi. Gli I / O sequenziali , in cui si accede a blocchi consecutivi, sono molto più semplici perché l'unità può semplicemente leggere o scrivere i blocchi mentre il disco gira.

Un disco a stato solido (SSD) non presenta problemi di I / O casuali in quanto tutto ciò che deve fare è cercare dove sono archiviati i dati nella memoria sottostante (in genere NAND Flash, può essere 3D XPoint o persino DRAM) e leggere o scrivere i dati nella posizione appropriata. Gli SSD sono interamente elettronici e non hanno bisogno di attendere su un disco rotante o su una testina di lettura / scrittura in movimento per accedere ai dati, il che li rende molto più veloci dei dischi rigidi in questo senso. È per questo motivo che l'aggiornamento a un SSD aumenta notevolmente le prestazioni del sistema.

Nota a margine: le prestazioni I / O sequenziali su un SSD sono spesso molto più elevate rispetto a quelle su un disco rigido. Un tipico SSD ha diversi chip NAND collegati in parallelo al controller di memoria flash e può accedervi contemporaneamente. Diffondendo i dati su questi chip, si ottiene un layout simile a RAID 0, che aumenta notevolmente le prestazioni. (Notare che molte unità più recenti, specialmente quelle più economiche, usano un tipo di NAND chiamato TLC NAND che tende ad essere lento quando si scrivono dati. Le unità con TLC NAND spesso usano un piccolo buffer di NAND più veloce per fornire prestazioni più elevate per operazioni di scrittura più piccole ma possono rallentare drasticamente una volta che il buffer è pieno.)


IIRC, alcuni SSD NVMe usano persino una cache DRAM.
timuzhti,

1
Molti lo fanno. Gli SSD Dramless sono un po 'di fascia bassa.
Journeyman Geek
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.