Авторские статьи об OpenSource

Различные планировщики для различных типов дисков.


При работе с дисковой подсистемой linux использует различные алгоритмы-планировщики для оптимизации, справедливого дележа I/O между приложениями и т.д. Исторически так сложилось, что долгое время в наших ПК безраздельно царствовал HDD со своими блинами и головками, которые нужно позиционировать. Всё затачивалось под HDD и во многих дистрибутивах по умолчанию используется планировщик ввода-вывода Completely Fair Queuing (CFQ). Но время не стоит на месте и вот у многих куплен SSD под систему, а HDD хранит большие объёмы мультимедиа. SSD радикально отличается от HDD и как быть с планировщиком для него?

Можно, конечно, закрыть глаза и дальше использовать CFQ для всех своих дисков, но CFQ заточен под минимизацию времени позиционирования головок, которых нет по определению в SSD. Рекомендую не полениться и легко выставить различные планировщики для различных типов дисковых систем.

Давайте глянем ваш дефолтный scheduler, скорее всего это будет [cfq]
for f in /sys/block/sd?/queue/scheduler; do printf "$f is "; cat $f; done
Поменять глобально для всех дисков планировщик вы сможете в файле /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="elevator=cfq"

Каждый диск обладает свойством "вращабельности" (rotational) и этим мы позже воспользуемся.
for f in /sys/block/sd?/queue/rotational; do printf "$f is "; cat $f; done

В наших linux системах UDEV занимается оборудованием и можно элегантно попросить его при добавлении/изменении устройства изменить планировщик для данного диска. Создайте файл sudo -e /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"

Мы просим UDEV для диапазона sda-sdz для "невращабельных" SSD сделать планировщиком I/O - deadline. Перезагружайтесь и проверяйте. У каждого типа устройства будет свой планировщик.
for f in /sys/block/sd?/queue/scheduler; do printf "$f is "; cat $f; done

Если вы хотите сделать некие тесты ДО изменения планировщиков, то можете воспользоваться скриптом, который пытается перебрать планировщики из списка noop deadline cfq и сделать тест для конкретного устройства через hdparm или любую другую добавленную вами команду.

#!/bin/sh
sudo clear
DISC="sdb"; \
cat /sys/block/$DISC/queue/scheduler; \
for T in noop deadline cfq; do \
     echo $T | sudo tee /sys/block/$DISC/queue/scheduler; \
     cat /sys/block/$DISC/queue/scheduler; \
     sync; \
     echo 3 | sudo tee /proc/sys/vm/drop_caches; \
     sudo /sbin/hdparm -tT /dev/$DISC;\
     echo "----"; \
     sleep 10; \
done

Похожие материалы:
Почему в Ubuntu планировщик переключали на Deadline.
Установка Ubuntu Linux на SSD.
Ускорение файловой системы.

    Twitter   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта

Лучшее на сайте:

1С под Linux.   Ускорение Ubuntu.   21 пример iptables.   Цикл статей о Ceph.   Убунту в дикой среде.   Ubuntu Linux на SSD.   Ubuntu для блондинок.   Поддержка железа в Linux.   BTSync на службе у админа.   Андроид программы в Ubuntu.   Прокидывание портов для p2p.   Анти СПАМ в Postfix.  



Круги Гугл Ада.


Группа поддержки