Salta al contenuto principale


@Informatica (Italy e non Italy 😁)
Ai dischi serve davvero la cache?

È una curiosità che mi è venuta recentemente quando stavo facendo spesa,
Vedo che la maggior parte dei "dischi" (sia HDD che SSD) che vedo presentano una certa quantità di "cache DRAM",
Da quel che so serve a migliorare le prestazioni, mantenendo blocchi utilizzati di frequente in una memoria più veloce, e, per gli SSD, a ridurre i cicli di scrittura sulla memoria flash.

Ma qualcosa di simile se non mi sbaglio lo fanno anche sistemi operativi come linux e windows, mantenendo in memoria file letti e scritti di recente, quindi mi chiedo, fa davvero molta differenza avere o no una cache anche sul "disco" al di fuori di benchmark, come crystaldiskmark, che disabilitano esplicitamente la cache del sistema operativo?

in reply to Giovanni Petri

Ci provo - sarà un po' lungo 😀

Siccome le celle di memoria degli SSD si possono sovrascrivere solo un certo numero di volte, quando modifichi un blocco di dati (un file o un pezzo di file se è grande) l'SSD invece di sovrascrive il vecchio blocco ne scrive uno nuovo da qualche altra parte. Qquesta cosa si chiama "wear leveling" ed è anche il motivo per cui è difficile assicurarsi di aver cancellato qualcosa da un SSD.

La cosa succede senza che il sistema operativo ne sappia nulla: per quanto lo riguarda, l'indirizzo del file è sempre lo stesso, e quindi è responsabilità dell'SSD sapere quale blocco "fisico" corrisponda a quale blocco "logico" (inoltre deve anche sapere quante volte ha sovrascritto le varie parti del disco).

L'SSD ha quindi bisogno di mantenere delle tabelle con questi dati e deve leggere queste tabelle prima di ogni altra operazione.

La RAM dell'SSD viene usata per velocizzare la consultazione di queste tabelle, ma ci sono anche SSD che usano la RAM del computer per la stessa cosa (IIUC sono comunque più lenti di quelli con RAM dedicata) e pure dischi che non hanno la cache e leggono ogni volta le tabelle dai chip su cui vengono scritte.

Insomma: la cache dell'SSD non replica la funzionalità replica di quella del sistema operativo... non è che non sarebbe possibile fare un SSD con cache per i dati (per quanto ne so magari esistono), ma il sistema operativo ha molte più informazioni per decidere quali dati tenere in cache (eg. sa se il processo che ha letto i dati sta ancora girando o se è morto) ed è quindi più sensato che se ne occupi lui.

in reply to gmg

@gmg
OK, così ha molto più senso.

Grazie della spiegazione!

@gmg
in reply to Giovanni Petri

tl;dr Sì, fa davvero molta differenza.

Anzitutto, in generale aggiungere altri livelli di cache, su un bus/dispositivo lento, aiuta sempre.

La cache interna e del sistema hanno ruoli diversi, non sono una in alternativa all'altra.

La cache del sistema operativo è a conoscenza della struttura dei file. Quindi sceglierà il momento migliore per "inviare" le scritture "cached" al disco, e quando "invalidare" la cache costringendoti a rileggere, sapendo quando apri o chiudi un file, e se lo apri in lettura o scrittura, etc.

Viceversa, il disco non sa come sono fatti i file, ma sa come è strutturato fisicamente il disco. Sugli SSD non è detto che dall'indice del blocco può indovinare su quale punto di quale chip si trova, perché questa corrispondenza cambierà nel tempo per rendere il disco più longevo. Quindi con queste informazioni aggiuntive, può sfruttare alcune euristiche basate sulla struttura fisica per migliorare le prestazioni.
Per gli hard disk invece ti serve semplicemente perché sono dannatamente lenti e ogni aiuto fa differenza.

Inoltre, si parla di DRAM, quindi volatile. Quindi più che i blocchi usati spesso sono quelli usati di recente che si trovano nella cache del disco, perché non sopravviverebbe al riavvio.
Alcuni hard disk hanno un piccolo SSD dentro che invece tiene i dati usati più spesso, e sono molto più veloci di un hdd normale. Ma su un ssd questo non ha senso perché se potessi fare una memoria non volatile più veloce faresti direttamente un ssd più veloce.