echo deadline > /sys/block/sda/queue/scheduler echo deadline > /sys/block/sdc/queue/scheduler
но сегодня в процессе репетиции восстановления сервера из резервной копии я наткнулся на ошибку при загрузке копии сервера (связана с различием в конфигурации). Чтобы каждый раз не указывать планировщик для нужных дисков я решил доверить это дело UDEV.
Сначала проверим текущие настройки планировщиков
# cat /sys/block/sd*/queue/scheduler noop anticipatory deadline [cfq] noop anticipatory deadline [cfq] noop anticipatory deadline [cfq] noop anticipatory deadline [cfq]
В данный момент для всех дисков (2 SSD и 2 HDD) установлен планировщик CFQ. Теперь добавим правило UDEV, которое будет изменять планировщик на DEADLINE для всех non-rotational устройств.
# cat > /etc/udev/rules.d/65-ssd-deadline.rules <<_EOF_ ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline" _EOF_ # udevadm control --reload-rules # udevadm trigger --subsystem-match='block'
Снова проверим настройки планировщиков
# cat /sys/block/sd*/queue/scheduler noop anticipatory [deadline] cfq noop anticipatory [deadline] cfq noop anticipatory deadline [cfq] noop anticipatory deadline [cfq]
В этот раз для двух первых дисков настройки изменились - это как раз SSD диски. Для обычных HDD дисков остался CFQ.
А что вы не поправили ваш скриптик (http://blog.tataranovich.com/2013/01/ncq.html) что бы он делал тоже самое
ОтветитьУдалить#!/bin/bash
for _blkdev in `ls -1d /sys/block/*`
do
# Check if block device has support for NOOP IO scheduler
if [ -e "$_blkdev/queue/scheduler" ]; then
if `grep -q noop "$_blkdev/queue/scheduler"`; then
if [ ! -e "$_blkdev/device/queue_depth" ]; then
continue
fi
if [ `cat "$_blkdev/queue/rotational"` -eq 0 ]; then
echo -n "Selecting DEADLINE I/O scheduler for SSD $_blkdev: "
echo deadline >"$_blkdev/queue/scheduler" 2>/dev/null && echo OK || echo FAIL
else
if [ `cat "$_blkdev/device/queue_depth"` -gt 1 ]; then
echo -n "Selecting NOOP I/O scheduler for HDD $_blkdev: "
echo noop >"$_blkdev/queue/scheduler" 2>/dev/null && echo OK || echo FAIL
else
continue
fi
fi
else
continue
fi
fi
done
Хотя в udev есть плюс что на горячем подключении должен сработать
Исправлять его не вижу смысла, а вот поставить ссылку на альтернативное решение стоит. Спасибо за замечание.
Удалить