¿Cómo cambio al planificador noop?

29

Tengo una SSD en mi computadora portátil y me han dicho que es preferible cambiar al programador "noop".

¿Cómo cambio al planificador de noop y dónde hago el cambio para que sea persistente en todos los reinicios?

Jorge Castro
fuente

Respuestas:

21

Edite / etc / default / grub, por ejemplo gksudo gedit /etc/default/grub, aquí necesita agregar elevator = noop.

Cambiar GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"a GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop".

Luego corre sudo update-grub2y reinicia.

Anónimo
fuente
66
La respuesta anónima es buena para cambiar el valor predeterminado en todos los discos de un sistema. Por el contrario, la respuesta de Eliah Kagan establece el valor predeterminado para discos específicos. Para una computadora portátil con una sola unidad, cualquiera funciona bien. Para los sistemas con múltiples discos, especialmente los discos con SSD y unidades giratorias), la respuesta de Eliah Kagan proporciona un control más preciso.
Royce Williams
28

Supongamos que su disco duro es /dev/sda. Luego, puede verificar qué programador está actualmente en uso:

cat /sys/block/sda/queue/scheduler

(El programador actualmente en uso estará rodeado de [ ]paréntesis).

Y podría hacer que use el planificador noop:

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

Consulte este artículo para obtener un poco más de información.

Para que el cambio persista, puede poner el comando /etc/rc.local.

Eliah Kagan
fuente
1
Me sale un error de "permiso denegado" al ejecutar esto, incluso con sudo
Lucas Bustamante
@LucasBustamante ¿Estás corriendo sudo echo noop > /sys/block/sda/queue/scheduler? Eso no funciona, ya que el shell, que se ejecuta como su usuario, configura la redirección antes de ejecutar el comando cuya salida se redirige. Puedes usar echo noop | sudo tee /sys/block/sda/queue/scheduleren su lugar. Consulte ¿No puede hacer eco de "hola"> x.txt incluso con sudo? y ¿Cómo resolver el "permiso denegado" cuando se usa sudo con redirección en Bash? para más información y otros enfoques. (Si eso no es lo que quieres decir, házmelo saber).
Eliah Kagan
gracias por responder, eso tampoco ayudó. Estoy usando un SSD NVMe, creo que no usa el programador en absoluto, por lo que entendí serverfault.com/questions/693348/…
Lucas Bustamante
14

Esta referencia de Debian muestra cómo detectar dinámicamente los SSD y cambiar el planificador en consecuencia:

En sistemas con diferentes tipos de unidades, puede ajustar la configuración con una regla udev (crear /etc/udev/rules.d/60-ssd-scheduler.rules):

# Establecer planificador de fecha límite para discos no giratorios

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

Para asegurarse de que su núcleo pueda detectar el estado de rotación:

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

Todo lo anterior se cita directamente de la referencia de Debian, que tiene muchos otros elementos de interés para los usuarios nuevos de SSD.

Royce Williams
fuente
root @ titan: / home / kessaras # para f en / sys / block / sd? / queue / rotational; do printf "$ f es"; gato $ f; done / sys / block / sda / queue / rotational es 0 / sys / block / sdb / queue / rotational es 0 / sys / block / sdc / queue / rotational es 1 / sys / block / sdd / queue / rotational es 1 root @titan: / home / kessaras # cat / sys / block / sd * / queue / Scheduler [mq-deadline] none [mq-deadline] none [mq-deadline] none [mq-deadline] none Algo está muy mal aquí. Cambia todos los discos duros a la fecha límite
Pavlos Theodorou
El comando no cambia nada, simplemente informa si un disco es "giratorio" (HDD). Rotacional = 0 significa que es una SSD u otra unidad que no gira.
Royce Williams
¿Qué quieres decir con que no cambia nada? Y la regla de udev escrita allí, ¿qué hace? También está dentro de una caja amarilla. ¿Quieres decir que soy ciego o no puedo leer?
Pavlos Theodorou
1
Mi error. Parece que en el último kernel eliminaron los planificadores ... ??? para f en / sys / block / sd? / queue / Scheduler; do printf "$ f es"; gato $ f; done / sys / block / sda / queue / Scheduler es [mq-deadline] none / sys / block / sdb / queue / Scheduler es [mq-deadline] none / sys / block / sdc / queue / Scheduler es [mq-deadline ] none / sys / block / sdd / queue / Scheduler es [mq-deadline] none El artículo y todo lo que escribió está bien. Es solo que solo hay una fecha límite y nada más para elegir.
Pavlos Theodorou