Setra persistent blockdev setra leggi avanti


14

Ho alcuni SSD montati su /dev/sda1e /dev/sdb1su un server SLES 11 SP2 e sono stato in grado di modificare l'impostazione di lettura in anticipo con blockdev --setra:

sudo blockdev --setra 4096 /dev/sda
sudo blockdev --setra 4096 /dev/sdb
sudo blockdev --getra /dev/sda
4096
sudo blockdev --getra /dev/sdb
4096

Come posso mantenere questa impostazione all'avvio? In particolare, esiste un'impostazione corrispondente sysctl.confo dovrò accontentarmi di uno script rc per farlo accadere?


2
Non so se esiste una soluzione "adeguata" a questo, ma le regole di udev sarebbero sicuramente più appropriate di uno script RC.
— Patrick,

3
Perché vorresti aumentare il read-ahead su un SSD BTW? Non riesco a capire il punto dato che gli SSD hanno tempi di ricerca ridotti.
— Stéphane Chazelas,

Risposte:


16

Suggerirei di usare udev per impostare i parametri per i dischi SSD. In questo modo è possibile configurare uno scheduler di coda specifico più appropriato per SSD, ecc. È inoltre possibile applicare parametri solo ad alcuni dispositivi, in base a molti parametri.

Puoi ottenere gli attributi specifici necessari per abbinare i tuoi dispositivi (es. Il modello del disco e il produttore) eseguendo:

udevadm info -a -p /sys/block/sda

e controllando tutte le coppie ATTR per il dispositivo a blocchi.

Un altro vantaggio è la possibilità di impostare i parametri per i dischi collegabili (ad es. In alloggiamenti o alloggiamenti per hotswap) e l'impostazione verrà applicata a tutti i nuovi dispositivi, a condizione che i parametri del dispositivo corrispondano.

Ecco un esempio per applicare uno scheduler specifico per SSD Intel, il valore di lettura desiderato (4096 blocchi = 2048 kb) e anche uno scheduler diverso per tutti gli altri SSD:

cat /etc/udev/rules.d/99-ssd.rules
# http://unix.stackexchange.com/a/71409/36574
# Setting specific kernel parameters for a subset of block devices (Intel SSDs)
SUBSYSTEM=="block", ATTRS{model}=="Intel SSDSC*", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="2048", ATTR{queue/scheduler}="deadline"
# for all other non-rotational block devices set a scheduler to 'noop' and readahead to 1024KB
SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="1024", ATTR{queue/scheduler}="noop"

Dopo aver salvato il file, puoi verificare se la tua regola corrisponderà al dispositivo e cosa farà udev usando udevadm:

udevadm test --action=add /sys/block/sda

Questo stampa tutte le regole che udev carica, cosa corrisponde, cosa no e quali decisioni prenderà udev quando il dispositivo viene collegato.

Spero che sia di aiuto.


Buone informazioni Proverò alcune regole udev simili quando avrò la possibilità e torno da te. Stiamo usando quelli OCZ vertex 3, ma non credo che le tue regole suggerite siano specifiche per Intel, ad eccezione del campo del modello, giusto?
— Banjer,

Sì, non c'è nulla di specifico per gli SSD Intel, l'ho usato come esempio per filtrare solo per attributi. Dovrai utilizzare udevadm infoper trovare i parametri specifici per il tuo hardware.
— zorlem,

10

Si noti che il read-ahead può essere impostato almeno tramite /sys ( /sys/class/block/sda/queue/read_ahead_kb) blockdeve hdparm( hdparm -a).

hdparmsu Debian e i suoi derivati ​​viene fornito con uno hdparm.confche specifica gli attributi per dispositivo da impostare all'avvio e su hot plug (tramite udevregole).

Quindi puoi avere:

/dev/disk/by-id/my-disk... {
  read_ahead_sect = 4096
}

(meglio usare gli ID di quelli sdache possono cambiare da un avvio all'altro).


Vedo hdparmsu SLES 11, ma non riesco a individuare hdparm.conf. Google sembra dirmi che è necessario uno script rc per hdparmfar sì che qualsiasi impostazione persista, almeno su SuSE.
— Banjer,

@Banjer, sì, sembra che sia un'estensione Debian (leggermente modificata in Ubuntu): uno script shell eseguito all'avvio anticipato e hot plug del dispositivo che analizza quel file e chiama di hdparmconseguenza. Ho aggiornato la risposta.
— Stéphane Chazelas,

+1 per specificare il /syspercorso sebbene la udevregola di @zorlem sia piuttosto utile per la configurazione di avvio.
— Totor,

-1

Non c'è nulla di corrispondente in sysctl, quindi sì, /etc/rc.localè un modo o simile. E attenzione, - l'ho notato personalmente su Ubuntu - quei cambiamenti si spostano ulteriormente anche dopo essere stati impostati una volta dopo l'avvio, quindi potrebbe anche avere senso usarlo crontabper mantenerlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.