Nel wear leveling statico vengono utilizzati tutti i blocchi per fare in modo che l’usura si distribuisca uniformemente su tutta la memoria, offrendo di fatto un netto aumento della vita del dispositivo rispetto a quanto previsto dalla tecnica del wear leveling dinamico.
Il principio di funzionamento è semplice: ogni blocco è dotato di un contatore che tiene traccia dei suoi erase count, quindi per ogni operazione di I/O viene scelto di volta in volta quello con il valore più basso.
Abbiamo visto che il wear leveling dinamico non offre un trattamento equo tra i blocchi contenenti dati statici e quelli contenenti dati dinamici; con il wear leveling statico viene introdotta invece una raffinatezza tecnica che consente di rimettere in gioco anche i blocchi che sembrerebbero destinati a una situazione di stasi.
Viene quindi fissata una soglia sull’erase count di utilizzo di ciascun blocco, soglia al di sotto della quale un blocco viene dichiarato come riutilizzabile anche se contiene dati statici che non necessiterebbero quindi di essere modificati. Il trattamento di tali dati prevede semplicemente lo spostamento in un’altra locazione con erase count più elevato.
Questa tecnica è evidentemente più complessa e raffinata rispetto al wear leveling dinamico ma bisogna considerare un fattore che in alcuni dispositivi può rivelarsi più o meno vistoso: il calo di performance dovuto allo spostamento di dati che altrimenti non sarebbero coinvolti nelle normali operazioni di I/O.
Tale svantaggio può però essere ben visto nell’ottica di un consistente aumento della vita media del dispositivo, anche se è doveroso ricordare che lo sviluppo e l’affinamento dei dispositivi NAND Flash sta progressivamente azzerando questo handicap tipico delle operazioni di scrittura.