Jak przejść do harmonogramu noop?

29

Mam dysk SSD w laptopie i powiedziano mi, że preferowane jest przejście do harmonogramu „noop”.

Jak przejść do harmonogramu noop i gdzie wprowadzić zmiany, aby były trwałe po ponownym uruchomieniu?

Jorge Castro
źródło

Odpowiedzi:

21

Edytuj / etc / default / grub, np. gksudo gedit /etc/default/grubTutaj musisz dodać windę = noop.

Zmień GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"na GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop".

Następnie uruchom sudo update-grub2i uruchom ponownie.

Anonimowy
źródło
6
Odpowiedź anonimowa jest dobra do zmiany domyślnej wartości na wszystkich dyskach w systemie. Natomiast odpowiedź Eliaha Kagana ustawia domyślną wartość dla określonych dysków. W przypadku laptopa z jednym dyskiem albo działa dobrze. W przypadku systemów z wieloma dyskami - w szczególności dyskami z dyskami SSD i napędami obrotowymi) odpowiedź Eliaha Kagana zapewnia bardziej szczegółową kontrolę.
Royce Williams
28

Załóżmy, że masz twardy dysk /dev/sda. Następnie możesz sprawdzić, który harmonogram jest obecnie w nim używany:

cat /sys/block/sda/queue/scheduler

(Aktualnie używany harmonogram zostanie otoczony [ ]nawiasami).

I możesz sprawić, by używał harmonogramu noop:

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

Więcej informacji znajdziesz w tym artykule .

Aby zmiana została utrzymana, możesz wprowadzić polecenie /etc/rc.local.

Eliah Kagan
źródło
1
Występuje błąd „odmowa uprawnień” podczas uruchamiania tego, nawet w sudo
Lucas Bustamante
@LucasBustamante Prowadzisz sudo echo noop > /sys/block/sda/queue/scheduler? To nie działa, ponieważ powłoka działająca jako użytkownik ustawia przekierowanie przed uruchomieniem polecenia, którego dane wyjściowe są przekierowywane. Zamiast tego możesz użyć echo noop | sudo tee /sys/block/sda/queue/scheduler. Zobacz: Nie można powtórzyć „hello”> x.txt nawet w przypadku sudo? i jak rozwiązać problem „odmowa dostępu” podczas korzystania z sudo z przekierowaniem w Bash? po więcej informacji i inne podejścia. (Jeśli nie to masz na myśli, daj mi znać.)
Eliah Kagan
dzięki za odpowiedź, to też nie pomogło. Używam dysku SSD NVMe, myślę, że w ogóle nie używa harmonogramu, z tego, co zrozumiałem serverfault.com/questions/693348/…
Lucas Bustamante
14

To odwołanie do Debiana pokazuje, jak dynamicznie wykrywać dyski SSD i odpowiednio zmieniać harmonogram:

W systemach z różnymi typami dysków możesz dostosować ustawienia za pomocą reguły udev (utwórz /etc/udev/rules.d/60-ssd-scheduler.rules):

# Ustaw harmonogram terminów dla nieobrotowych dysków

 ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0",ATTR{queue/scheduler}="deadline"

Aby upewnić się, że twoje jądro może wykryć status rotacji:

$ for f in /sys/block/sd?/queue/rotational; do printf "$f is "; cat $f; done
/sys/block/sda/queue/rotational is 1
/sys/block/sdb/queue/rotational is 1
/sys/block/sdc/queue/rotational is 0   <=== Only this is SSD!

Wszystkie powyższe cytaty pochodzą bezpośrednio z referencji Debiana, która ma wiele innych elementów interesujących użytkowników SSD po raz pierwszy.

Royce Williams
źródło
root @ titan: / home / kessaras # for f in / sys / block / sd? / queue / rotational; do printf "$ f is"; kot $ f; done / sys / block / sda / queue / rotational is 0 / sys / block / sdb / queue / rotational is 0 / sys / block / sdc / queue / rotational is 1 / sys / block / sdd / queue / rotational is 1 root @titan: / home / kessaras # cat / sys / block / sd * / queue / scheduler [mq-deadline] none [mq-deadline] none [mq-deadline] none [mq-deadline] none Coś tu jest bardzo nie tak. Zmienia wszystkie dyski twarde na termin
Pavlos Theodorou
Polecenie niczego nie zmienia - po prostu informuje, czy dysk jest „obrotowy” (HDD). Rotational = 0 oznacza, że ​​jest to dysk SSD lub inny nieobrotowy dysk.
Royce Williams
co masz na myśli, że nic to nie zmienia? A tam napisana reguła udev, co ona robi? Jest również w żółtym polu. Masz na myśli, że jestem ślepy czy nie umiem czytać?
Pavlos Theodorou
1
Mój błąd. Wygląda na to, że w najnowszym jądrze usunęli programy planujące ... ??? dla f w / sys / block / sd? / queue / scheduler; do printf "$ f is"; kot $ f; done / sys / block / sda / queue / scheduler to [mq-deadline] none / sys / block / sdb / queue / scheduler is [mq-deadline] none / sys / block / sdc / queue / scheduler is [mq-deadline ] none / sys / block / sdd / queue / scheduler is [mq-deadline] none Artykuł i wszystko co napisałeś jest w porządku. Tyle, że jest tylko termin i nic innego do wyboru.
Pavlos Theodorou