Como posso definir o prazo como o agendador de E / S para dispositivos Flash USB usando as regras do udev? [duplicado]

0

Eu configurei CFQ como o agendador de E / S padrão. Muitas vezes recebo um desempenho ruim quando gravo dados em um dispositivo Flash. Isso é resolvido se eu usar o prazo como agendador de E / S para dispositivos Flash USB. Nem sempre posso alterar o agendador manualmente, certo? Acho que escrever regras do udev é uma boa ideia.

Alguém por favor pode escrever regras para mim? Eu quero:

  1. Quando eu conecto um dispositivo USB, detecto o tipo do dispositivo.
  2. Se for um disco rígido USB portátil, não faça nada (acho que se um dispositivo tiver mais de uma partição, é sempre um disco rígido portátil.
  3. Se for um dispositivo Flash USB, defina o prazo como agendador.
por 比尔盖子 30.09.2012 / 17:13

1 resposta

1

Primeiro, coloque o script de shell scheduler4usb em $PATH (por exemplo, /usr/bin ):

#!/bin/bash
# Usage: ./script device scheduler

# If your are using util-linux 2.22, you must change this line to:
# fdisk /dev/$1 -l 2>&1 >/dev/null | grep -q "doesn't contain a valid partition table"
#
fdisk /dev/$1 -l 2>&1 >/dev/null | grep -q "This doesn't look like a partition table"

# If this device has a partition table.
if (($?==0)); then 
    echo $2 > /sys/block/$1/queue/scheduler
fi

exit

Não se esqueça de chmod +x scheduler4usb do seu script!

Em seguida, escreva a regra em /etc/udev/rules.d/91-change-schduler.rules :

SUBSYSTEMS=="usb", ACTION=="add", KERNEL=="sd?", RUN+="/usr/local/bin/scheduler4usb %k deadline"
    
por 03.10.2012 / 06:42