Newsgroup: it.comp.os.linux.sys
Titolo: Stranezza Nvme

Buongiorno Mondo,
Non riesco a spiegarmi il comportamento di dd su un SSD Nvme.
Se lancio il comando verso una partizione ext4 (tra l'altro criptata):
 
dd if=/dev/nvme0n1p4 of=/dev/null bs=16M iflag=direct status=progress
 
ottengo un flusso a 1.5 GB/s.
Se invece lancio il comando verso una partizione Ntfs:
 
dd if=/dev/nvme0n1p2 of=/dev/null bs=16M iflag=direct status=progress
 
Ottengo solo 400 MB/s.
La domanda è:
Ma dd non è indipendente dal filesystem sottostante?
 
Ultima prova, se punto al device anziché alle partizioni, 
if=/dev/nvme0n1 ottengo velocità diverse in base alla posizione 
virtuale: 400 MB/s per i primi giga, dove sta Ntfs, per poi salire in 
concomitanza dell'inizio della partizione ext4.
 
Il 'disco' - rettangolare :) - è un economico Crucial P2 Ct500p2ssd8 da 
500GB provato su diverse macchine con piastre diverse, da Asus a MSI a 
Asrock ecc. con identici risultati.
Il kernel è 5.10.0-0.bpo.5-amd64 #1 SMP Debian 5.10.24-1~bpo10+1 
(2021-03-29) x86_64 GNU/Linux e già che ci siamo le cpu sono tutte Ryzen 
5 3600.
 
Cosa ignoro? Grazie.

 Ma dd non è indipendente dal filesystem sottostante?
 
Ma il supporto NTFS non dimora nell' 'userland'?
Non è, per questo, meno performante?


 Non è, per questo, meno performante?
 
Certo ma dd legge brutalmente i blocchi dal disco, senza nemmeno sapere 
cosa c'è dentro; difatti si può tranquillamente clonare con dd un disco 
criptato senza averne la chiave...
 
Che il disco sia in NTFS o EXT4 o ZFS a dd interessa poco.
Per questo non capisco che succede.
 
 
 

 Per questo non capisco che succede.
 
Dovresti provare, se possibile, a
rimescolare le partizioni.
 
Cioe` formattare tutto, per esempio,
ext4 e ri-testare con "dd".
 
Non dovrebbe cambiare assolutamente
niente, dato che, come hai giustamente
fatto notare, "dd" lavora a livello di
block device e non di FS.
 
Ma tant'e`...
 
bye,
 
-- 
 
piergiorgio

 Per questo non capisco che succede.
 
Provato a diminuire bs?
Pare che +bs non corrisponda necessariamente a +throughput

Asrock ecc. con identici risultati.
 
Mi viene in mente una cosa, ma è abbastanza campata in aria.
 
Le SSD non sono un monoblocco, sono ottenute mettendo in serie vari banchi di
memorie statiche. Poi quando leggi dal "disco SATA" gli indirizzi LBA vengono
tradotti in offset lineari e questi vengono ulteriormente tradotti in rank ed
offset all'interno dei vari banchi; l'hostadapter invia l'appropriato comando
di selezione bank, e viene fatta la lettura.
 
Supponiamo che per qualche motivo uno o più dei bank siano più lenti vuoi per
leggerli, vuoi per selezionarli, vuoi per allinearli.
 
Per scoprirlo suppongo si debba fare così:
 
 - usare dd per leggere sempre dallo stesso device di base (/dev/nvme0n1) 
 - con offset diversi
 
Caso "bank più lenti a selezionare": dopo un certo offset vedo una variazione
di velocità marcata e, intorno al punto critico, dipendente da bs.
 
Caso "bank più lenti a leggere": come sopra, ma indipendente da bs.
 
Nei casi sopra, è chiaro che se una partizione è al di qua e una al di là del
punto di transizione, leggere e scrivere su due partizioni diverse otterrà un
risultato diverso. E non ci sono soluzioni :-(
 
Caso "allineamento memoria a cura del mostro del botro": non vedo variazioni,
o veramente molto poche, con offset multipli di un paio di megabyte. Ma se l'
offset è pari a un multiplo di un paio di megabyte PIU' MEZZO KILOBYTE (o una
quantità analogamente piccolina), patapùnfete. In questo caso potrei lasciare
stare tutto com'è, perché l'unico ad accòrgisene sarà dd; però, per sicurezza
e visto che, tanto, è gratis, potrei riformattare le partizioni assicurandomi
che inizino tutte a un offset esattamente multiplo di un paio di MB.
 
In realtà questo allineamento loffio si vede pure su alcuni HDD, solo che non
è a un paio di MB ma più prosaicamente a 2-4-8 Kb, e _NORMALMENTE_ (e dipende
dal file system) non fa grossa differenza. Certo se uno ha il FS che lavora a
blocchi di 8K, e ha il disco disallineato con offset di 4K, la differenza c'è
caso che la senta assai, rispetto alla partizione shiftata di 4K più in là.
 
Leonardo
-- 
 
"You all presumably know why" :-) :-(

 Mi viene in mente una cosa, ma è abbastanza campata in aria.
 
 
Ho la sensazione che c'entri il controller del disco.
Testando un disco vergine (ovvero rasando al suolo un disco con 'nvme 
format') dd fornisce un risultato di 2.5 GB/s anzichè 1.5 GB/s.
 
Installandogli quindi una distribuzione qualsiasi e rifacendo il test, 
si ottiene appunto 1.5 GB/s.
 
Ipotizzo che il controller di un disco vergine non acceda nemmeno alle 
celle di memoria ma restituisca immediatamente zero.
 
Per il resto non ho ipotesi degne di questo nome. Brutta cosa l'ignoranza...