Dopo aver comprato un SSD Samsung, la prima cosa che ho fatto è installare da zero un nuovo sistema Ubuntu.
Non contento di questo sono passato ad ottimizzare il tutto aggiungendo il comando TRIM ed altre piccole operazioni per diminuire le scritture sul disco.
Il comando TRIM permette ad un sistema operativo di indicare quali blocchi non sono più in uso in un’unità a stato solido (come ad esempio i blocchi liberati dopo l’eliminazione di uno o più file).
L’ operazione di cancellazione eseguita da un Sistema Operativo, comporta che i blocchi dati vengano contrassegnati come non in uso; il TRIM permette al sistema operativo di passare questa informazione al controller dell’ SSD, il quale altrimenti non sarebbe in grado di sapere quali blocchi eliminare.
Lo scopo fondamentale di questa istruzione è quella di mantenere costante la velocità dell’ SSD per tutto il suo ciclo di vita, evitando il rallentamento che i primi modelli di SSD messi in produzione avevano una volta che tutte le celle erano state scritte, una alla volta.
Anche se gli strumenti erano già disponibili per resettare alcuni dispositivi ad uno stato aggiornato, essi eliminavano tutti i dati sul dispositivo i quali non consentivano il loro uso come un’ottimizzazione.
La causa principale del problema è che gli SSD non conoscono quali blocchi sono realmente in uso e quali sono liberi.
Mentre il file system su un SSD continuerà a mantenere una lista dei blocchi in uso, gli SSD non capiscono i file system e quindi non possono accedere a quella lista.
Ciò causa dei problemi in 2 punti:
- Gli SSD possono scrivere blocchi di 4 KiB alla volta, ma, dato le limitazione dell’hardware, essi devono eliminare blocchi più grandi (es. 128 KiB – 512 KiB).
Dal momento che il dispositivo non conosce quali blocchi sono ancora in uso, se sono stati scritti in precedenza, ogni scrittura richiederà un grande numero di ciclo di lettura/eliminazione/modifica/scrittura, assumendo che non ci siano altri blocchi disponibili sull’SSD (dopo tutto i blocchi sono almeno parzialmente pieni), il termine per questo fenomeno è Write Amplification.
- Wear levelling: consente a un dispositivo di riorganizzare i suoi dati così che le scritture non vengano confinate a uno degli angoli del chip flash.
Le celle flash tollerano solo un limitato numero di scritture prima che si rompano, così alcune SSD spostano i dati intorno all’SSD in modo tale che le celle vengano utilizzate in modo equo.
Dato che il dispositivo non conosce quali blocchi sono realmente in uso, ogni blocco di dati scritti sul dispositivo richiederanno un scrittura aggiuntiva a causa del blocco spostato.
Dopo questa breve introduzione sul funzionamento del comando TRIM e prima di fare qualsiasi intervento sul vostro disco, bisogna verificare se il vostro disco supporta il TRIM.
Per assicurarsi che il TRIM sia supportato, aprite un terminale e digitate il seguente comando:
sudo hdparm -I /dev/sda | grep "TRIM supported"
se viene supportato dovreste ottenere una risposta simile a questa:
* Data Set Management TRIM supported (limit 8 blocks)
A questo punto potete provare ad eseguire il comando TRIM su una partizione con il seguente comando:
sudo fstrim -v /
ed avrete un risultato simile a questo:
/: 198147174400 bytes were trimmed
Adesso che avete verificato che potete abilitare il TRIM sul vostro SSD andiamo a modificare il file fstab, aggiungendo delle opzioni a tutte le partizione EXT4 che avete.
Le opzioni che andremo ad aggiungere sono:
- noatime: non aggiorna l’inode con i tempi di accesso al file system, grazie a noatime come opzione di mount, si ottiene un sistema più veloce, poiché i tempi di accesso non sono registrati
- nodiratime: non aggiorna l’inode delle directory sui tempi di accesso al file system
- discard: abilità il TRIM.
Procediamo in questo modo, prima di tutto diventiamo utenti root con il comando:
sudo su
e facciamo una copia di backup del file fstab per sicurezza:
cp /etc/fstab /etc/fstab.bak
apriamo il file fstab:
gedit /etc/fstab
ed andiamo ad aggiungere le 3 opzioni come nell’esempio seguente:
# / was on /dev/sda1 during installation UUID=xxxxxxx-xxxxxx-xxxxx-xxxxx-xxxxxxxx / ext4 noatime,nodiratime,discard,errors=remount-ro 0 1 # swap was on /dev/sda2 during installation UUID=xxxxxxx-xxxxxx-xxxxx-xxxxx-xxxxxxxx none swap sw 0 0
Fate molta attenzione ad aggiungerle separandole dalle altre opzioni con la virgola e senza spazi.
Per chi vuole si può anche disattivare lo swap mettendo un # davanti alla riga UUID relativa allo swap, ma io ve lo sconsiglio.
Salvate e chiudete il file, al prossimo riavvio del sistema il comando TRIM sarà attivo sul vostro SSD.
Vi consiglio inoltre di applicare anche delle altre ottimizzazioni al vostro sistema in modo da utilizzare il meno possibile le scritture sul disco, per fare questo apriamo il file:
sudo gedit /etc/sysctl.conf
ed aggiungiamo alla fine del file queste due righe di codice:
vm.swappiness=1 vm.vfs_cache_pressure=50
Il primo comando vm.swappiness che di default è 60 indica la cache da mettere in swap oppure nella RAM, in questo modo portandolo ad 1 abbassiamo la probabilità di utilizzare lo Swap, invece il comando vm.vfs_cache_pressure indica ogni quanto tempo il kernel dovrà liberare la RAM.
Gli accorgimenti adottati miglioreranno il livello delle prestazioni e le manteranno più costanti nel passare dei mesi.