Planista We/Wy dla dysków SSD w openSUSE

Domyślnym planistą We/Wy w openSUSE jest CFQ i radzi on sobie z klasycznymi dyskami talerzowymi całkiem dobrze. Więcej informacji o samym planiście CFQ można znaleźć w dokumentacji kernela a przegląd planistów dostępnych w dystrybucji openSUSE dostępny jest w podręczniku openSUSE, rozdział 13. Dla dysków SSD lepszym wyborem zdaje się być planista Deadline bądź Noop.

Sprawdzić aktualnie używanego planistę można za pomocą:

cat /sys/block/sda/queue/scheduler

noop deadline [cfq]

Jako root możemy zmienić planistę w ‘locie’:

echo noop > /sys/block/sda/queue/scheduler

Skoro już wiemy jak zmienić planistę po uruchomieniu systemu, pozostaje tylko ten proces zautomatyzować. Jeśli posiadamy w komputerze tylko jeden dysk, i jest nim dysk SSD (lub kilka, lecz wszystkie są SSD), najprostszym rozwiązaniem będzie dodanie parametru elevator (nazwa planisty jako wartość) do listy wywołania jądra. W tym celu edytujemy plik:

sudo vi /etc/default/grub

I dodajemy nasz parametr do pozostałych dla opcji GRUB_CMDLINE_LINUX_DEFAULT. Przykładowy fragment ww. pliku może wyglądać tak:

GRUB_CMDLINE_LINUX_DEFAULT=" video=1680x1050 resume=/dev/disk/by-id/ata-Hitachi_HDS721050CLA362_JP1521HN0MUHTA-part5 splash=silent quiet showopts radeon.audio=0 radeon.dpm=1 elevator=deadline"

Pozostaje nam jeszcze zaktualizowanie menu rozruchowego, za pomocą:

grub2-mkconfig -o /boot/grub2/grub.cfg

A co gdy mamy kilka dysków, różnego typu, zarówno talerzowe jak i SSD? Wówczas nie ruszamy menu gruba, tylko korzystamy z dobrodziejstw udev. Tworzymy zestaw prostych reguł, dzięki którym przydzielimy planistę w zależności od typu dysku. Tworzymy plik /etc/udev/rules.d/50-io-schedulers.rules z zawartością:

# set deadline 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"

Reguły będą mieć zastosowanie po ponownym uruchomieniu komputera. Dla przykładu, w komputerze dysk /dev/sda jest dyskiem SSD a /dev/sdb jest dyskiem talerzowym. Wyjście polecenia cat /sys/block/sd{a,b}/queue/scheduler zwróci:

noop [deadline] cfq
noop deadline [cfq]
comments powered by Disqus