29

I have an SSD in my laptop and I've been told that switching to the "noop" scheduler is preferred.

How do I change to the noop scheduler, and where do I make the change so that it is persistent across reboots?

4 Answers 4

31

Suppose your hard disk is /dev/sda. Then you could check to see what scheduler is currently in use for it:

cat /sys/block/sda/queue/scheduler

(The scheduler currently in use will be surrounded by [ ] brackets.)

And you could make it use the noop scheduler:

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

See this article for slightly more information.

To make the change persist, you can put the command in /etc/rc.local.

3
24

Edit /etc/default/grub, such as gksudo gedit /etc/default/grub, here you need to add elevator=noop.

Change GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" to GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop".

Then run sudo update-grub2 and restart.

2
  • 6
    Anonymous' answer is good for changing the default across all disks on a system. By contrast, Eliah Kagan's answer sets the default for specific disks. For a laptop with a single drive, either works fine. For systems with multiple disks -- most notably, disks with both SSDs and rotating drives), Eliah Kagan's answer provides finer-grained control. May 29, 2014 at 7:15
  • 6
    The elevator= kernel argument was removed in kernel v5.4, which is used since Ubuntu 20.04 LTS focal. github.com/torvalds/linux/commit/… Apr 24, 2020 at 8:58
14

This Debian reference shows how to dynamically detect SSDs and change the scheduler accordingly:

In systems with different drive types you can adjust settings with a udev rule (create /etc/udev/rules.d/60-ssd-scheduler.rules):

# Set deadline scheduler for non-rotating disks

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

To make sure that your kernel can detect rotational status:

$ 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!

All of the above is quoted directly from the Debian reference, which has many other elements of interest to first-time SSD users.

4
  • root@titan:/home/kessaras# for f in /sys/block/sd?/queue/rotational; do printf "$f is "; cat $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 Something is very wrong here. It changes all the hard disks to deadline Aug 14, 2019 at 16:57
  • The command doesn't change anything - it simply reports whether a disk is "rotational" (HDD). Rotational = 0 means it's an SSD or other non-spinning drive. Aug 14, 2019 at 17:05
  • what do you mean it doesnt change anything ? And the udev rule written there what does it do ? It is inside a yellow box too. You mean that im blind or i can't read ? Aug 15, 2019 at 13:07
  • 1
    My mistake. It seems in latest kernel they removed the schedulers... ??? for f in /sys/block/sd?/queue/scheduler; do printf "$f is "; cat $f; done /sys/block/sda/queue/scheduler is [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 The article and everything you wrote is fine. It's just that there is only deadline and nothing else to choose from. Aug 15, 2019 at 13:24
1
vi /etc/rc.local

Add line

for f in /sys/block/sd?/queue/scheduler; do echo "noop" > $f; cat $f; done

Then run the command

chmod +x /etc/rc.local

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .