martedì 21 settembre 2010

Ottimizzazioni SSD: Togliere il Journaling

Questa guida è indirizzata a coloro che possiedono un netbook o pc con dischi SSD e abbiano installato una qualunque distro decente con il file system EXT4. È anche valida per chi ha installato la distro su una SDHC.

Levare il journaling non è una cosa che consiglio fare se si possiedono dischi normali. Il journaling serve per la sicurezza dei dati, tuttavia i dischi SSD hanno scritture limitate rispetto a quelli normali, per ciò è consigliabile rimuovere il journal non solo per limitare le scritture sul disco ma anche per velocizzare il sistema e renderlo più scattante. In effetti dopo questa procedura anche il boot viene ulteriormente velocizzato.

Nota: Questa guida è stata pubblicata precedentemente su uielinux. Data la natura di questo blog è opportuno pubblicarla anche qui, aggiornandola un po' e allo stesso tempo rendendola una guida più multidistro.

Premessa:

- Perché non tenerci Ext2 che non ha il journaling?

Semplice. Perché purtroppo ho il vizio di cercare di riparare ciò che non è rotto. Malattia rara ma sopportabile.
Inoltre, questo file system (Ext2) non ha né la caratteristica directory index, cioé il supporto per l'htree, né gli extents, e oltretutto usa poco la modalità degli indirect blocks.

- Altri motivi?

Sì, uno dei padri di Ext4, Theodore Ts'o, fece alcuni test per i dischi SSD, e arrivò alla conclusione che è meglio usare ext4 senza journal, non solo per allungare la vita del disco ma anche perché forse è più performante.
Contattai lui personalmente sul suo blog, domandandogli cos'era meglio, e questo è quel che mi rispose:

<< So yeah, for netbooks with SSD’s that are running Linux, I would recommend the use of ext4 without the journal. This will give you the advantages of ext4’s delayed allocation, and the reduced metadata advantage of using extents versus indirect blocks will definitely help. >>

Traduzione:
<< Quindi sì, per i netbook con dischi SSD che hanno linux, i consiglierei di usare Ext4 senza il journal. Questo ti darà i vantaggi del salvataggio posticipato del Ext4, inoltre la convenienza dei metadati che usano la modalità degli extents contro quella degli indirect blocks sarà sicuramente d'aiuto. >>

Non solo, addirittura sconsiglia Ext3:

<< Ext3 is especially problematic because the journal means that metadata gets written twice to disk, and in a write pattern that might exacerbate wear-levelling. Worse yet, because of data=ordered mode, ext3 does a lot of synchronous writes, which will be painful because these SSD have slow write speeds to begin with, and then you combine that with the slow small random write performance, and life gets really bad. >>

Traduzione:
<< Ext3 è specialmente problematico perché il journal fa in modo che i metadati vengano scritti 2 volte nel disco, e con una modalità di scrittura ricorsiva che potrebbe peggiorare la durata di vita di esso. Peggio ancora, a causa dell'opzione data=ordered [N.D.T: opzione da default], il file system Ext3 fa tantissime scritture sincronizzate, le quali sono terribili perche quegli SSD [dei netbook] hanno lenti tempi di scrittura per iniziarle, e se infine aggiungiamo tutto ciò alla lenta e minima prestazione della scrittura aleatoria, allora le cose si complicano un bel po'. >>

Procedura:

È molto semplice, basta entrare da live e assicurarsi che le partizioni non siano montate, dopo di ché aprite il terminale e date il seguente comando:
sudo tune2fs -O ^has_journal /dev/sdXN
dove X è il numero del disco e N il numero della partizione. Se non sapete quale o qualli sono le vostre partizioni usate il comando:
sudo fdisk -l
Ora la seguente cosa sarà modificare leggermente il grub.

Se avete Grub 1

dovete entrare nella configurazione del grub (/boot/grub/menu.lst) con l'editor a piacimento e aggiungere il parametro rootfstype=ext4 alla righa del kernel. Esempio:
kernel /boot/vmlinuz-netbook root=/dev/sda1 ro quiet rootfstype=ext4 elevator=noop
Dopodiché salvare il file.

Se avete Grub 2

editate il file /etc/default/grub e aggiungete lo stesso parametro rootfstype=ext4 alla seguente riga:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop rootfstype=ext4"
una volta fatto salvata e aggiornate il grub con questo comando:
sudo update-grub2

Per i più scrupolosi:

Se volete controllare se c'è o no journal bisogna dare questo comando:
sudo dumpe2fs -h /dev/sdXN
se nella voce Features non compare "has_journal" e se alla fine del file non c'è una voce chiamata journaling size allora il file system non ha il journaling.
se mai volete tornare ad avere il journaling:
sudo tune2fs -O has_journal /dev/sdXN

E ora, come dico al solito, cari fratelli, salvate e andate in pace.

5 commenti:

  1. Io sono l'unico pazzo che tira avanti con ext3?

    RispondiElimina
  2. bellobello
    ho testato il tutto su un gagliardo eeepc900 a manovella, che aveva il sistema ext4 sostanzialmente perché costretto dalla curiosa procedura di installazione della live di fedora.

    ora però non so dirvi se la performance è migliorata oggettivamente o solo nella mia testa per l'effetto wow-ho-fatto-qualcosa-di-ganzo

    RispondiElimina
  3. @Milozzy
    Non saprei... Io per sfizio sul 901 uso BTRFS :D :D

    RispondiElimina
  4. @Milozzy
    Differenze avvertibili a livello di prestazioni non ce ne sono... Una volta stabilizzato, la possibilità di fare degli snapshots del FS è notevole, su un server. L'ho provato un paio di volte ed il plugin di yum funziona bene...
    Io cmq non ho mai avuto un problema.

    RispondiElimina

Chiunque può commentare. Anzi, siete altamente incoraggiati a commentare

Se avete una miglioria o qualche consiglio che pensiate migliori la guida sarete i benvenuti. Vi sarà riconosciuto onore e verrete citati in modo doveroso. Non esitate a comunicarci dubbi e/o critiche. Le migliori guide sono quelle che si fanno insieme, ed è questo lo spirito che vogliamo mantenere.

NOTA BENE: Se avete critiche riguardo alla gestione di questo blog potete inviarle al nostro indirizzo: netbookteam [at] gmail [dot] com. Chiediamo quindi di farle in modo privato, per non generare confusione nelle discussioni tecniche che si trovano qui nei commenti. Grazie.