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?

21

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.

  • 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. – Royce Williams May 29 '14 at 7:15
28

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.

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.

  • 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 – Pavlos Theodorou Aug 14 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. – Royce Williams Aug 14 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 ? – Pavlos Theodorou Aug 15 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. – Pavlos Theodorou Aug 15 at 13:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.