View Single Post
Old 17-05-2025, 13:48   #23126
@Liupen
Senior Member
 
L'Avatar di @Liupen
 
Iscritto dal: Jan 2018
Città: Torino
Messaggi: 462
Quote:
Originariamente inviato da Black (Wooden Law) Guarda i messaggi
Ok, capisco. Quindi alla fine Windows crea e "organizza" i thread comunicando all'SSD quando sono pronti, e una volta pronti glieli dà da eseguire, giusto?
Giustissimo.
Diciamo che la parte che interessa l'ssd è quella finale di un processo complesso.
Con un po di logica è possibile però cercare di capire il meccanismo che porta a concetti come I/0, latenza, ECC.

Se vogliamo dare una sequenza:
  1. Comando Host (io che chiedo a Windows di aprire il file di testo PIPPO)
  2. CPU di sistema elabora cosa fare in sequenza per ottenere il risultato
  3. Istruzioni passate a DMA
  4. DMA ha verificato a monte che protocollo usare --> sata/ahci passano "solo" 32 comandi alla volta invece nvme ne può gestire a migliaia.
  5. DMA (in forma di pacchetti richieste I/0 LBA) stabilisce le priorità di queste richieste o comandi I/0 [come vedi tutto internamente all'host]
  6. DMA comunica con il controller dell'ssd e gli invia la lista delle priorità QD da mettere in RAM oppure da scrivere su NAND (lettura e/o scrittura)
  7. Il Controller gestisce i thread (se ce ne più d'uno) a seconda della propria capacità e della larghezza di banda (il famoso collo di bottiglia sata vs nvme) quindi un controller di un ssd nvme può svolgere 2 o più thread assieme ma seguendo il QD creato dal DMA.
  8. Finito ogni thread (sequenza richieste I/0 lettura del blocco all'indirizzo dell'LBA cercato nel nostro esempio e trascritto in RAM di sistema) il controller comunica "eseguito" al DMA che può proseguire con le richieste successive.

Normalmente con un utilizzatore si vedono solo richieste I/0 in fila perchè una è propedeutica ad un altra.
Più richieste host creano gruppi di comandi diversi (thread) ed è li che nvme ha il maggiore vantaggio grazie all'elaborazione di più richieste I/0 di trhead eseguite in parallelo.

Quote:
Originariamente inviato da Black (Wooden Law) Guarda i messaggi
Perché non capisco cosa voglia dire TechTarget con "coda di comando" visto che gli NVMe ne possono supportare migliaia di migliaia mentre i dispositivi SATA e SAS solo una.


Ok, così mi è più chiaro il tuo "L’unità minima di comunicazione fra host (DMA) e controller è il comando I/O". Molto interessante anche questa parte sul perché la QD è più "importante" dei thread.
AHCI: una sola queue, profondità massima 32 comandi pendenti.

L’host può avere al massimo fino a 32 comandi pendenti nella sua unica coda.
Se prova a inviarne il 33esimo prima che uno dei primi 32 sia completato, deve aspettare.

E' la differenza tra sata e pcie: sata gestisce un unica coda alla volta (scrivo oppure leggo) e quella coda può avere "solo" 32 richieste I/0
NVMe è un 5G ha la banda larga... può scrivere e leggere in un solo tempo e ognuna di queste migliaia può essere costituita da migliaia di richieste I/0 accodate (il controller di suo non arriverà mai a fornirgliene così tante, ne avrebbe senso perchè le die nand sono un numero esiguo).
__________________
“La verità sola, fu figliola del tempo”
LEONARDO DA VINCI

Ultima modifica di @Liupen : 17-05-2025 alle 14:59.
@Liupen è offline   Rispondi citando il messaggio o parte di esso