|
|
|
![]() |
|
Strumenti |
![]() |
#23121 | |||
Senior Member
Iscritto dal: Jan 2018
Città: Torino
Messaggi: 413
|
Quote:
Ti parlo di concetti filtrati e semplificati, perchè non sono un informatico. 4 richieste I/O in coda per ogni thread = Q4T4 è ok Però però...lascia stare le definizioni che leggi, cerca di capire la logica prima (scusa se mi permetto). La definizione di Thread per il benchmark dell'ssd o comunque per gli I/0 all'ssd non è la definizione generale di Thread di CPU. Ovviamente si parla di significati uguali nel modo dell'informatica, nella sostanza, ma diversi nei modi. L'esempio classico che si può fare, per il thread dell'ssd, a cui sono legato da sempre, è la biblioteca. C'è un indice centrale su una scrivania e tanti scaffali attorno. Gli scaffali sono organizzati a zone: astronomia, narrativa, fantasy, geologia, ecc ecc Altra cosa da immaginare e che tutti gli scaffali a raggiera sono raggiungibile dalle mie braccia. Una richiesta di input/output (I/O in generale, senza distinguere tra sequenziale e casuale) è "vado a prendere il libro nello scaffale XY" oppure "vado a posare il libro sullo scaffale XY". Quando (Q4T4) ho Q4 cioè 4 richieste contemporanee di consultare o mettere a posto un libro, ed io son da solo, io mi organizzo una coda di attività. Più mi muovo veloce con le braccia, più velocemente consulto i libri o li rimetto a posto sul relativo scaffale XY. Passiamo ora dalla definizione di "richieste I/O" a quella di Thread. Devo ad esempio fare una ricerca su come si è evolvuta la Terra nelle ere. Mi serve contemporaneamente per la mia ricerca, un libro da scaffale astronomia e uno da scaffale geologia. Gli scaffali in questo caso sono XY e ZW. Essendo due scaffali diversi, posso usare un braccio per XY e l'altro per ZW ottenendo quello che mi serve (o se "scrivo" rimettendo a posto i due libri). Le richieste I/0 sono gli elementi grezzi del lavoro (poso libri/prendo libri). Il Thread è il lavoro che si richiede (la ricerca/la conservazione della ricerca). Il primo elemento e la coda che ne deriva, non c'è mai da sola, deve essere sempre finalizzata in almeno un Thread.. un lavoro, un obbiettivo. Ora, capito il senso logico, pensiamo a chi gestisce le richieste e le istruzioni. Quì scomodi le definizioni più tecniche. Ogni Thread dell'ssd o che coinvolge la memoria non volatile, non passa dalla CPU di sistema ma viene elaborata mediante Direct Memory Access (DMA). In generale, senza guardare le differenze di protocollo (AHCI/NVMe), l'host presenta il comando (lettura o scrittura) in Thread che vengono organizzati in varie richieste I/0 mediante DMA. DMA mette in comunicazione l'host con il controller dell'ssd. Il numero di comandi I/O pendenti che l’host può mettere in coda verso il controller sono massimo 32 par AHCI e di miglioia per nvme che inoltra supporta anche comandi di lettura e scrittura contemporanei. Il controller SSD, senza disturbare la CPU di sistema, legge quella coda (sempre tramite DMA), esegue il trasferimento dati NAND da e per la RAM (DMA dei dati), poi scrive l’esito. NB. durante questa operazione il controller gestisce come sappiamo anche il GC, il WL ecc oltre ad aggiornare la mappatura su SRAM o RAM di sistema. Rifacendola semplice, il "lavoro" dell'utente, quindi l'host, gestisce il/i Thread mediante l'interfaccia [AHCI stà per SATA ma è più corretto dire AHCI] AHCI VS NVMe; le singole istruzioni che realizzano il/i Thread sono gestiti solo internamente all'host che ne assegna priorità, ne organizza le QD e tante altre cose molto tecniche che ora si può trascurare. Il controller dell'ssd non gestisce le code ma può gestire più comandi in parallelo (Thread), in modo più o meno intelligente a seconda del numero di chip nand e dalle caratteristiche computazionali proprie. Il controller poi ovviamente ha il compito di dare il comando "eseguito" all'host. Quote:
Almeno, così mi era parso di capire. Quote:
Riguardo le cache di boost di Samsung colpa mia ho confuso il turbowrite con la rapidmode; ma quando ho letto ibride, mi è venuto in mente la forma software di accelerazione.
__________________
“La verità sola, fu figliola del tempo”
LEONARDO DA VINCI |
|||
![]() |
![]() |
![]() |
#23122 | ||||
Senior Member
Iscritto dal: Nov 2021
Città: Milano
Messaggi: 1085
|
Eccomi Liupen. Perdonami, ero fuori casa in questi due giorni.
Quote:
![]() Comunque, per il numero massimo di QD per thread, TechTarget dice: Quote:
1) TechTarget ha le idee abbastanza confuse; 2) TechTarget ha fatto confusione con i termini per gli SSD NVMe; 3) TechTarget con “coda di comando” non intende i thread ma altro di cui non so. Secondo me sbaglia e la verità è che (penso) ci sia un numero “illimitato”¹ di thread ma non ovviamente di richieste I/O, quindi NVMe può creare massimo 65.536 di richieste I/O per thread, SAS 256 richieste I/O per thread, ecc. ————————————————- ¹: ovviamente non sono illimitati, penso che dipenda dall’applicazione, dalle capacità del controller dell’SSD, dal SO, ecc. Quote:
Quote:
Ultima modifica di Black (Wooden Law) : 17-05-2025 alle 09:35. |
||||
![]() |
![]() |
![]() |
#23123 | ||||
Senior Member
Iscritto dal: Jan 2018
Città: Torino
Messaggi: 413
|
Quote:
![]() L'host tramite DMA, lancia una serie di letture o scritture.. "lavori" come li ho definiti su -> che sono spacchettabili in richieste I/0 da mettere in fila (richieste I/O formano una coda “profonda”) -> per essere poi composte sulla RAM se ho delle letture oppure poi trasmesse al controller se ho delle scritture. Mmm...vediamo una riflessione. Considera che l'host, il sistema operativo, non sa che hardware c'è sotto di lui. Quindi opera sempre in astratto con la sua mappatura di LBA. Quindi per fare un esempio molto concreto, se io gli dico di aprirmi un file di testo in Windows e ho un ssd, Windows cerca nella mappatura: le istruzioni per aprire i software, il file di testo, attinge al driver per visualizzarlo e infine me lo propone. Ognuna di queste operazioni sono Thread...molti thread che windows trasmette all'ssd mediante il pipe DMA. Attento ora: 1) I thread sono richieste a livello logico (mappatura LBA) non fisica. 2) Il Thread è un entità astratta fatto da una o più richieste (o comandi) I/0 Quando scrivi: l’SSD sempre tramite DMA prende i thread -> l’SSD “risolve” i thread per i fatti suoi è concettualmente falso L'host sempre tramite DMA prende i thread -> l'host “risolve” i thread per i fatti suoi perchè l'elaborazione dell'applicazione ovvero nell'esempio l'apertura del file di testo, è un lavoro tutto a livello logico non fisico (sull'ssd). DMA su host vede tutte le operazioni da fare (istruzioni per aprire i software, il file di testo, attinge al driver per visualizzarlo) quindi tutti i Thread sotto forma di richieste I/0 (LBA) le organizza per priorità, le accoda e le richiede al Controller dell'ssd, che, poverino, esegue solo (partendo dalla traduzione della mappatura LBA-> blocco fisico). Ecco il perchè del possibile limite della coda dei comandi (sata 32 vs nvme migliaia). L’unità minima di comunicazione fra host (DMA) e controller è il comando I/O, non il thread che lo origina. Ecco perché si “limita” il numero di comandi pendenti, non i thread. Un protocollo ha più banda passante dell'altro. Questo invece: "(o in caso di SSD DRAM-less con HMB risolve i thread con un po’ di RAM)" riguarda l'aggiornamento della mappatura o FTL più in generale. Altro discorso. [quote=Black (Wooden Law);48789878] Comunque, per il numero massimo di QD per thread, TechTarget dice: Quote:
E' giusto, perchè idee confuse? Quote:
![]() Si tratta del principale motivo per cui appena è stato possibile si è passati da sata (ahci) a nvme Come dice il testo, i I/0 limitati fanno da collo di bottiglia. "Solid-state drives (SSDs), based on NVMe technology, with its larger queue depth, have faster response times". Questo non è vero, infatti purtroppo la reattività di un ssd sata e di uno nvme è quasi la stessa. Il PRO è che con nvme "passa" più roba e può essere elaborata parallelamente. Quote:
nCache 2.0 la conosco bene è statica. Ma vabbeh! Ormai roba vecchia. nCache 3.0 e 4.0 non ho approfondito. Tanto tutti i produttori danno nomi diversi allo stesso tipo di cache: anche ora Samsung Turbo Write originale è diventata Turbo Write 2.0 ![]()
__________________
“La verità sola, fu figliola del tempo”
LEONARDO DA VINCI Ultima modifica di @Liupen : 17-05-2025 alle 01:06. |
||||
![]() |
![]() |
![]() |
#23124 |
Senior Member
Iscritto dal: Jan 2018
Città: Torino
Messaggi: 413
|
Vorrei spiegare il collo di bottiglia, ma alla fine scrivo tanto, troppo e mi sembra poi che il concetto non si capisca:
Esempio di prima, i Thread sono le istruzioni per farmi vedere su schermo un file di testo; Windows/host lancia tutte le istruzioni, DMA le ordina per priorità (esempio dice: prima di andare a cercare il file devo lanciare Microsoft Word). Questo a livello ..."alto"? Davvero infatti il DMA ordina una serie di richieste I/0 (dei vari Thread) in modo che: quando sono finiti tutti gli I/O (LBA sempre eh!) che compongono il "lancio Microsoft Word" posso iniziare a processare le richieste I/0 di "cerco e apro il file richiesto". Detto questo per dire che per l'host/DMA i thread alla fine sono aria fritta e che il tutto è solo un ordine martellante di richieste (ordinate) I/0, il DMA "sente" se è collegato a SATA o NVME. SATA/AHCI ha dei limiti nel tenere delle code dei comandi quindi il DMA frena. Se il limite di queue depth è raggiunto, le ulteriori richieste restano in sospeso finché il controller non libera risorse. NVMe ha semplicemente più “linee” di comunicazione e le risorse hardware che il controller può effettivamente gestire in parallelo.
__________________
“La verità sola, fu figliola del tempo”
LEONARDO DA VINCI |
![]() |
![]() |
![]() |
#23125 | |||
Senior Member
Iscritto dal: Nov 2021
Città: Milano
Messaggi: 1085
|
Quote:
Quote:
Quote:
Ultima modifica di Black (Wooden Law) : 17-05-2025 alle 17:23. |
|||
![]() |
![]() |
![]() |
#23126 | ||
Senior Member
Iscritto dal: Jan 2018
Città: Torino
Messaggi: 413
|
Quote:
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:
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:
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 ![]()
__________________
“La verità sola, fu figliola del tempo”
LEONARDO DA VINCI Ultima modifica di @Liupen : 17-05-2025 alle 14:59. |
||
![]() |
![]() |
![]() |
#23127 |
Senior Member
Iscritto dal: Jan 2018
Città: Torino
Messaggi: 413
|
Può sorgere la domanda: come mai non è il controller dell'ssd a gestirsi le QD?
Perchè la mente, "l'architetto" è il sistema operativo; la CPU di sistema organizza e muove i dati per realizzare quello che l'host vuole. C'è un tempo in cui le risorse devono essere organizzate e la sequenza la sà solo l'host che non deve e non può essere in balia di una memoria non volatile che ha caratteristiche varie (hdd PATA, hdd SATA, ssd SATA, ssd NVMe, USB... ecc). Solo l’host conosce il contesto d’uso complessivo (quali processi, quali file, quali priorità), mentre il controller vede solo singole operazioni di flash. Il "disco" in generale è solo quindi una rotella dell'ingranaggio, un esecutore che deve essere gestito a monte. Altro motivo sono i limiti, appunto, delle interfacce varie. Alcune, come ad esempio quella USB, neanche ai giorni nostri, hanno accesso completo e sono compatibili a tutti i tipi di comandi host (hanno profondità di coda più limitate a causa del protocollo e dell’overhead aggiuntivo).
__________________
“La verità sola, fu figliola del tempo”
LEONARDO DA VINCI Ultima modifica di @Liupen : 17-05-2025 alle 15:05. |
![]() |
![]() |
![]() |
#23128 | ||
Senior Member
Iscritto dal: Nov 2021
Città: Milano
Messaggi: 1085
|
Quote:
Quote:
|
||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:12.