Trwałe ustawienie blockdev setra czytaj dalej


14

Mam pewne SSD zamontowany na /dev/sda1i /dev/sdb1na serwerze SLES 11 SP2, i udało mi się dostosować do odczytu z wyprzedzeniem ustawienie z 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

Jak mogę zachować to ustawienie podczas uruchamiania? W szczególności, czy istnieje odpowiednie ustawienie sysctl.conf, czy będę musiał zadowolić się skryptem rc, aby to się stało?


2
Nie wiem, czy istnieje „właściwe” rozwiązanie tego problemu, ale reguły udev byłyby z pewnością bardziej odpowiednie niż skrypt RC.
Patrick

3
Dlaczego chcesz zwiększyć wyprzedzenie odczytu na SSD BTW? Nie widzę sensu, biorąc pod uwagę, że dyski SSD mają małe czasy wyszukiwania.
Stéphane Chazelas,

Odpowiedzi:


16

Sugeruję użycie udev do ustawienia parametrów dysków SSD. W ten sposób możesz skonfigurować określony harmonogram kolejki, który jest bardziej odpowiedni dla SSD itp. Możesz także zastosować parametry tylko do niektórych urządzeń, w oparciu o wiele parametrów.

Możesz uzyskać określone atrybuty niezbędne do dopasowania urządzeń (np. Model dysku i producenta), wykonując:

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

i sprawdzanie wszystkich par ATTR dla urządzenia blokowego.

Kolejną korzyścią jest możliwość ustawienia parametrów dysków wtykowych (np. W obudowach lub wnękach hotswap), a ustawienie zostanie zastosowane do wszystkich nowych urządzeń, pod warunkiem, że parametry urządzenia są zgodne.

Oto przykład zastosowania konkretnego harmonogramu dla dysków SSD Intel, pożądanej wartości głowicy readahead (4096 bloków = 2048 kb), a także zastosowania innego harmonogramu dla wszystkich innych dysków 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"

Po zapisaniu pliku możesz sprawdzić, czy reguła będzie pasować do urządzenia i co udev zrobi za pomocą udevadm:

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

Spowoduje to wydrukowanie wszystkich reguł, które ładuje udev, co pasuje, co nie pasuje i jakie decyzje podejmą udev po podłączeniu urządzenia.

Mam nadzieję że to pomoże.


Dobra informacja. Spróbuję wykluczyć podobne udev, kiedy będę miał szansę i skontaktuję się z tobą. Korzystamy OCZ vertex 3z nich, ale nie sądzę, by sugerowane reguły były specyficzne dla Intela, z wyjątkiem pola modelu, prawda?
Banjer

Tak, nie ma nic specyficznego dla dysków SSD firmy Intel, użyłem go jako przykładu do filtrowania tylko według atrybutów. Musisz użyć, udevadm infoaby znaleźć parametry specyficzne dla twojego sprzętu.
zorlem

10

Pamiętaj, że odczyt z wyprzedzeniem można ustawić przynajmniej za pomocą /sys( /sys/class/block/sda/queue/read_ahead_kb) blockdevi hdparm( hdparm -a).

hdparmw Debianie i jego pochodnych jest dostarczany z hdparm.confatrybutem określającym atrybuty dla poszczególnych urządzeń, które należy ustawić podczas rozruchu oraz podczas hot-plug (poprzez udevreguły).

Możesz mieć:

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

(lepiej używać identyfikatorów, sdaktóre można zmienić z jednego rozruchu na drugi).


Widzę hdparmna SLES 11, ale nie mogę go zlokalizować hdparm.conf. Wydaje się, że Google mówi mi, że skrypt rc jest niezbędny do zachowania jakichkolwiek hdparmustawień, przynajmniej na SuSE.
Banjer

@Banjer, tak, wygląda na to, że jest to rozszerzenie Debiana (nieco zmodyfikowane w Ubuntu): skrypt powłoki uruchamiany przy wczesnym rozruchu i hot plug urządzenia, który analizuje ten plik i wywołuje hdparmodpowiednio. Zaktualizowałem odpowiedź.
Stéphane Chazelas,

+1 za określenie /sysścieżki, chociaż udevreguła @zorlem jest całkiem niezła w konfiguracji rozruchowej .
Totor

-1

Nie ma w tym nic odpowiadającego sysctl, więc tak, /etc/rc.localjest drogą lub tym podobnym. I uwaga, - osobiście zauważyłem, że na Ubuntu - zmiany te dalej się zmieniają, nawet gdy są ustawiane raz po starcie, więc może warto crontabje zachować.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.