SDB:Prestazioni unità SSD


Provato su openSUSE Articoli consigliati Articoli correlati
Icon-checked.png

Icon-manual.png Icon-help.png

Questo articolo spiega come ottimizzare openSUSE per un'unità SSD.

Situazione iniziale

Il tuo computer nuovo di zecca ha un'unità SSD installata. Non vorresti usurarlo troppo in fretta e vorresti ottenere tutto ciò che è possibile dalle sue prestazioni. Si pone dunque dapprima il problema di quale file system usare, e poi se si possa fare dell'altro per ottenere lo scopo voluto. Lo scoprirai qui.


Massimizzare prestazioni e durata

Questo articolo descrive varie azioni che si dovranno scegliere:

Intel SSD

Nelle vecchie versioni del firmware delle unità SSD di Intel è presente un bug che causerà blocchi al sistema quando è in esecuzione il demone smartd, che è abilitato per default. Per risolvere il problema aggiornare il firmware dell'unità dal sito [1].

Filesystem

I file system che meglio funzionano con le unità SSD sono BTRFS ed EXT4. Tuttavia BTRFS è ancora in fase sperimentale, per cui Ext4 è la scelta più sicura.

In ogni caso se intendi usare Tumbleweed, i kernel più recenti di quello predefinito in openSUSE 11.4 con ogni probabilità inizieranno ad offrire prestazioni migliori su BTRFS che su Ext4, man mano che quel file system matura.

In questo articolo si assume che /dev/sda sia la tua unità SSD.

Crea i filesystem TMPFS

Si raccomanda vivamente di mettere le parti più volatili dei tuoi dati su un TMPFS - questo include, in particolare, la directory /tmp. Questa directory contiene soltanto file temporanei che vengono eliminati subito dopo il riavvio del sistema. Tenere questi dati in memoria è un ottimo modo per risparmiare un po' di carico di lavoro all'unità SSD. Bisogna notare che se si tiene il proprio sistema in esecuzione continuativamente, per un lungo periodo, la dimensione di questa directory (e da qui il suo utilizzo di memoria) può crescere considerevolmente. Si raccomanda di fare il logout dal proprio DE, rimuovere il contenuto della directory, e fare nuovamente il login se ti stai imbattendo in problemi di scarsezza di memoria.

Monta /tmp in a filesystem tmpfs:

# mkdir -p /etc/systemd/system/local-fs.target.wants
# ln -s /usr/lib/systemd/system/tmp.mount /etc/systemd/system/local-fs.target.wants/tmp.mount

Questo farà si che la cartella /tmp venga creata in memoria dal prossimo riavvio del sistema.

Con openSUSE 12.2 la procedura dovrebbe essere un po' diversa:

Inizia creando la (le) directory per la configurazione personalizzata, ovvero con:

# mkdir -p /etc/systemd/system/local-fs.target.wants

come sopra.
Crea il file unit per systemd (usando vi o il tuo editor preferito):

# vi /etc/systemd/system/tmp.mount

e copia e incolla il testo qui sotto al suo interno (per incollare in vi: i seguito da Shift-Ins), poi salvalo (in vi: :wq)

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Temporary Directory
Documentation=man:hier(7)
Before=local-fs.target

[Mount]
What=tmpfs
Where=/tmp
Type=tmpfs
Options=mode=1777,strictatime

Infine crea il collegamento simbolico, in modo simile a quanto scritto sopra:

# ln -s /etc/systemd/system/tmp.mount /etc/systemd/system/local-fs.target.wants/

Una seconda modifica che dovresti applicare al file fstab è assicurati che per l'unità SSD sia impostata l'opzione noatime:

/dev/sda1    /  ext4   noatime,defaults  0       1

noatime potrebbe danneggiare il funzionamento di alcuni strumenti di backup; usando l'opzione

relatime

dovresti risolvere il problema.

Altre modifiche

Qualche altra modifica che si può mettere in atto:

Mettere a punto il kernel

Si raccomanda di modificare lo scheduler (pianificatore I/O) predefinito da cfq a deadline (o in alternativa con noop) , ma solo per dischi non-rotating (ovvero che non siano di tipo a piatti rotanti):

# vi /etc/udev/rules.d/60-sched.rules
#set noop scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"

# set cfq scheduler for rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"

readahead

Dovresti disabilitare readahead, dato che è del tutto inutile sulle unità SSD, con le loro ridottissime latenze.

# systemctl disable systemd-readahead-collect.service
# systemctl disable systemd-readahead-replay.service

È tutto per questa sezione.

Misure aggiuntive

La memoria Flash è gestita in blocchi, più grandi delle unità di 512 byte con cui sono misurate le partizioni. Con gli strumenti predefiniti di linux, probabilmente il filesystem verrà allineato in modo tale che genererà dell'inutile IO (ma non dovrebbe più essere un probleme se si usano openSUSE sufficientemente recenti, indicativamente da 12.2 in su) poichè, ogni volta che verranno scritti dei dati, si andranno ad interessare duo blocchi invece di uno solo. Puoi risolvere questo problema allineando le partizioni, e i filesystem su di esse, a blocchi più grandi di 512 byte ed assicurandoti che inizino da 0.

Tuttavia è un procedimento non da poco e lo applicherai solo ad una unità SSD nuova. Puoi trovare le informazioni su come fare il tutto nei collegamenti qui sotto (in inglese):

Vedi anche

Articoli correlati

Collegamenti esterni