martedì 7 settembre 2010

Ottimizzazioni Per Dischi SSD

Salve a tutti oggi voglio farvi vedere come ho ottimizzato Gnu/linux sul netbook.
Ho un EeePc 901 con due dischi SSD. Il sistema è Archlinux, ma queste ottimizzazioni servono per qualunque SO Gnu/linux, i file system sono in Ext4.

Con questa guida vedremo come limitare le scritture sul disco, come risparmiare energia e come velocizzare ulteriormente il boot.

Tanto per chiarire, se fate queste modifiche è sottintesso che voi sapiate cosa state facendo, quindi usate questa guida a vostro rischio e pericolo.


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

Ottimizzazione dentro il file fstab:

sudo gedit /etc/fstab
incollare le seguenti righe alla fine del file:
tmpfs /tmp tmpfs nosuid,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0
tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0
none /var/run tmpfs mode=0755,size=2m,noatime,nosuid 0 0
none /var/lock tmpfs mode=1777,size=2m,noatime,nosuid,nodev,noexec 0 0
NOTA: Se in precedenza avete seguito la guida di Doc, chiamata Montare la Cache sulla Ram, tenete presente che le prime 3 righe le avrete già aggiunto in quell'occasione. Quindi dovrete aggiungere solo le ultime due.

Facendo questo accorgimento anche i log del sistema finiranno sulla Ram. Se volete registrarli da un'altra parte seguite sempre la guida di Doc, in cui viene spiegato come fare.

Continuiamo, aggiungete la voce noatime dentro le opzioni delle partizioni al posto della voce relatime, Esempio:
UUID=[serie-di-numeri] / ext4 relatime,errors=remount-ro 0 1
UUID=[serie-di-numeri] /home ext4 relatime 0 2
Diventerà:
UUID=[serie-di-numeri] / ext4 noatime,commit=100,nouser_xattr 0 1
UUID=[serie-di-numeri] /home ext4 noatime,commit=100,nouser_xattr 0 2
Personalmente suggerisco, come si vede dall'esempio, alcune opzioni - che verrano spiegate più avanti - oltre a noatime. È importante che le opzioni siano attaccate e non abbiano spazi: noatime,commit=100,nouser_xattr,ecc,ecc

Se usate un file system con journaling vi consiglio di aggiungere queste opzioni: barrier=0,data=writeback,nobh (se avete Ext4 senza journaling non fatelo perché non c'è bisogno), se le aggiungete dovrebbe rimanere così:
UUID=[serie-di-n°] / ext4 noatime,barrier=0,nobh,commit=100,nouser_xattr 0 1
UUID=[serie-di-n°] /home ext4 noatime,barrier=0,data=writeback,nobh,commit=100,nouser_xattr 0 2

Se non avete scelto "data=writeback" e "commit=100" saltate questi passi:

Per aggiungere l'opzione data=writeback dentro alla partizione / bisogna entrare da live o da recovery e dare il comando:
tune2fs -o journal_data_writeback /dev/sdXN
dove sdXN è la partizione in questione (non montata), esempio: sda1
dopo di che possiamo aggiungere la opzione data=writeback alla partizione / nel fstab

Sempre per quanto riguarda la partizione root (/) per l'opzione commit=100 bisogna editare il file menu del grub con questo comando:
sudo gedit /boot/grub/menu.lst
cercare un passaggio simile a questo, dove ci sia l'ultima riga "#defoptions= ecc ecc" :
## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=quiet splash vga=773
E aggiungere l'opzione rootflags=commit=100:
## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=quiet splash vga=773 rootflags=commit=100
Dopo di che salvate, chiudete e date questo comando:
sudo update-grub
Se avete grub2 il file da modificare è /etc/default/grub
e dovrete aggiungere l'opzione alla riga:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash [aggiungere qui]"

Per fare chiarezza ecco qualche delucidazione:

writeback:

Una modalità di journaling per Ext4 che scrive di meno nel disco con rispetto alla modalità di default data=ordered, per questo a mio giudizio converrebbe sia attivata per i dischi SSD.

nobh:

Aiuta l'opzione data=writeback ad essere più efficente.

barrier:

Disattivare questa opzione, cioe mettere barrier=0 aiuta ad avere più performace, tuttavia se non hai un portatile è melgio questa opzione rimanga attiva.

noatime :

Grazie a questa opzione il sistema ad ogni accesso ad un file non scrive la data di accesso, limitando le scritture sul disco. Cosa che conviene avendo un SSD. Inoltre si limita a scrivere la data di accesso solo quando l file viene effettivamente modificato e non solo letto, aumentando quindi anche la velocità di accesso ai file.

relatime :

Relatime scrive la data di accesso anche se il file è solamente letto. Pratica più sicura ma che comporta ovviamente più riscritture sul filesystem. Nel caso di un disco SSD conviene sia sostituita dall'opzione noatime.

commit :

Aumenta l'intervalo per cui il sistema fa una operazione di sincronizzazione tra i dati e i metadati, da default questo intervallo è di 5 secondi, noi lo aumentiamo a 100 secondi, in questo modo ci sono meno scritture. Potete scegliere anche 90 o 80, a voi la scelta.

nouser_xattr :

Disabilita Extended User Attributes se non ne hai bisogno. se stai usando una distro versione desktop a casa o in una officina piccola, insomma se sei un singolo utente che fa le solite cose e non ha un server ma solo un pc questa opzione si può disabilitare.

errors=remount-ro :

possiamo toglierlo tranquillamente.

Ottimizzare il kernel:

sudo gedit /etc/rc.local
aggiungiamo certi parametri al foglio appena aperto, in fondo al file prima di exit 0:
echo 1500 > /proc/sys/vm/dirty_writeback_centisecs
echo 20 > /proc/sys/vm/dirty_ratio
echo 10 > /proc/sys/vm/dirty_background_ratio

echo 1 > /sys/devices/system/cpu/sched_smt_power_savings
echo 10 > /sys/module/snd_hda_intel/parameters/power_save
echo 5 > /proc/sys/vm/laptop_mode
in questo modo avremmo un consumo di risorse un po' ridotto, aumentando la durata della batteria

Velocizzare il boot ulteriormente:

Aprite il grub:
sudo gedit /boot/grub/menu.lst
Aggiungere “elevator=noop” alla linea del kernel.
Per esempio:
title  Alphawinux 3.0
root (hd0,0)
kernel /boot/vmlinuz-2.6.24-19-generic root=UUID=090cbd4d-5696-4e8c-9aa5-f6e13d93f0bc ro quiet splash elevator=noop
initrd /boot/initrd.img-2.6.24-19-generic
quiet

Se invece usate grub2:

sudo gedit /etc/default/grub
cerchiamo la riga
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
e aggiungiamo il parametro, in modo che rimanga cosi.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"
infine:
sudo update-grub2

Questo è tutto per adesso, se volete approfondire queste ottimizzazioni vi rimando alle fonti dove imparete tantissimo:
Forum di Arch
Tunning ext4
Ext4 on SSD fedora forum
Zdnet

Se, infine, volete chiedere aiuto o confrontare le diverse performance nei dischi ssd potete commentare qui sotto. :)

Alla prossima!

15 commenti:

  1. questo fine settimana proverò questi parametri sul mio acer aspire one, era un pò che volevo metterci mano.

    RispondiElimina
  2. hola
    ho fatto le modifiche al file rc.local qui consigliate ma se provo a controllare con cat noto che i valori sono sempre standard e diversi da quelli con echo idee??

    RispondiElimina
  3. @Phoenix Fire
    Hola Phoenix! mi puoi postare il commando che hai usato con cat? A me succedeva lo stesso con il commit, però ho risolto aggiungendolo alla righa del kernel nel grub.
    Magari prova a dirmi come fai cosi vediamo di risolvere, e provo anch'io se cat mi da gli stessi valori.
    Grazie di già ;)

    RispondiElimina
  4. ho semplicemente provato per ogni riga
    cat /percorso/su/cui/fai/echo
    per esempio
    cat /proc/sys/vm/dirty_writeback_centisecs

    e quello che restituisce è diverso da quello che gli passo con echo

    RispondiElimina
  5. Ciao Phoenix, ho controllato e a me CAT da i valori giusti, sei sicuro di aver messo quelle righe prima del "exit 0" ?

    Io non ho aggiunto tutte però, sto pensando che il data writeback non c'è bisogno di metterlo lì perché c'è già il commando con tune2fs e la voce nel grub. Inoltre, avendo tolto il journaling il data writeback non dovrebbe essere rilevante.

    RispondiElimina
  6. @ Sant
    Dammi qualche info sul parametro elevator=noop. È consigliato con tutti i file system (ext3 ed ext4)? Va bene anche per gli HD?
    In generale, a che serve?

    RispondiElimina
  7. In parole povere riguarda la modalità di gestire la scrittura e/o lettura nel disco. È un algoritmo di gestione. Diciamo che inizia a fare le procedure a random. Non lo consiglio per gli HD, infatti lo farei solo per gli SSD, perché non si parla di dischi fisici. Sul link di Zdnet se ne parla.

    questo è completo, è il primo link che esce da google ;)
    http://lonesysadmin.net/2008/02/21/elevatornoop/

    RispondiElimina
  8. ciao a tutti sto provando ad usare fedora, messi i vari parametri dopo / nel fstab e il net decide di smettere di avviarsi. Avete idee del perchè? Grazie

    RispondiElimina
  9. @Phoenix Fire
    Come hai partizionato il disco? Fedora usa di default gli LVM, l'unica partizione fisica è /boot.

    RispondiElimina
  10. partizionato automatico fatto da lui con gli LVM e boot (senza swap); quindi?? semplicemente non si fa con gli LVM o sbaglio qualcosa io?

    RispondiElimina
  11. @Phoenix Fire
    No, non hai sbagliato nulla. :D Semplicemente fstab non vede gli LVM come partizioni fisiche, quindi i parametri non si possono passare in questo modo.
    Ci ho guardato un po' anch'io in passato, ma non ho trovato nulla in proposito in rete. L'unica è installare Fedora utilizzando un normale partizionamento e poi inserire i parametri in Fstab.

    RispondiElimina
  12. capito dici che è meglio reinstallare in maniera "classica" o conservare tutto così?

    RispondiElimina
  13. @Phoenix Fire
    Dipende da te... :D Se hai solo voglia di provarla ti consiglio di gustartela anche così, se ti convince sei sempre a tempo per un reinstall. Per quanto mi riguarda, sulla SSD ho partizionato con BTRFS. :D

    RispondiElimina
  14. allora formatto tanto ho appena iniziato e oggi ho tempo libero :D, approfitto a chiedertelo qui senza fare troppi post. Che vantaggi da btrfs (su un SSD intendo)? ma hai usato sempre LVM o hai fatto alla maniera classica? ultima domanda per rimuovere completamente programmi inutilizzati ma preinstallati fedora con gnome (tipo trasmission) che comando conviene usare??

    RispondiElimina
  15. @Phoenix Fire
    Dunque, i vantaggi prestazionali con gli ultimi kernel sono aumentati, ma rimangono risibili. Poi c'è la possibilità di montare la partizione con l'opzione apposita per gli SSD tramite Fstab che disabilita la write cache. (Anche qui però non con gli LVM)

    Per rimuovere un pacchetto in Fedora basta:
    su -c 'yum remove NOMEPACCHETTO'
    :D

    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.