суббота, 25 июня 2011 г.

Выбираем планировщик.

Для начала проверим производительность HDD c разными планировщиками.

1.) sudo apt-get install hdparm

2.) Выполним маленький скрипт:

DISC="sda";
 cat /sys/block/$DISC/queue/scheduler;
 for T in noop anticipatory deadline cfq; do
     echo $T > /sys/block/$DISC/queue/scheduler;
     cat /sys/block/$DISC/queue/scheduler;
     sync && /sbin/hdparm -tT /dev/$DISC && echo "----";
     sleep 15;
 done


Если диск не sda, то соответствующим образом правим кусок кода с объявлением: DISC="sda"


Рассмотрим разные планировщики.

Noop
Простейший планировщик, работающий по принципу FIFO. Переупорядочения нет, слиянию могут подлежать только запросы, находящиеся рядом в очереди. Хорошо подходит для устройств со случайным доступом, вроде Flash памяти.
Deadline
Планировщик, который ставит больший приоритет запросам на чтение, нежели запросам на запись. Запросы переупорядочиваются, но при этом время обработки запроса не должно превышать заданные пределы(по умолчанию, 0.5 с для чтения, 5 с для записи)
Для реализации используются 4 очереди: 2 очереди sorted-by-start-sector(для чтения и для записи) и 2 очереди FIFO(тоже для чтения и для записи). Обычно, запросы берутся из сортированных очередей, но если поджимает deadline(таймаут) первого запроса из очереди FIFO, то обработка запросов продолжается по сортированным очередям с этого элемента. Лучше всего подходит для организации баз данных.

CFQ — Completely Fair Queuing
Цель этого планировщика — честное распределения времени доступа к ресурсу всех инициаторов запросов. CFQ может быть настроен для уравнивания процессов, групп процессов, пользователей.

По реализации, CFQ подразумевает по одной FIFO-очереди на инициатора запросов и переключается между очередями по алгоритму Round-robin.

Не знаю, кому нужна такая честность, но переупорядочения запросов для минимизации перемещения считывающей головки жесткого диска в этом планировщике нет.
Anticipatory
Ключевая идея — перед обработкой запросов можно немного подождать, отдохнуть. Зато за эти несколько миллисекунд, соберется информация наперед, которая позволит более взвешенно принимать решения, в каком порядке запросы выполнять.

Планировщик Anticipatory базируется на Deadline. Подходит для десктопов, т.к. сохраняется отзывчивость подсистемы ввода вывода. Не подходит для RAID, TCQ. Плохо подходит в ситуациях, когда синхронные запросы посылаются разными процессами.


Чтобы посмотреть все доступные планировщики в системе и узнать, какой из них активен выполняем:
cat /sys/block/{DEVICE-NAME}/queue/scheduler

Здесь {DEVICE-NAME} — имя блочного устройства, например sda.


Смена планировщика на лету
Чтобы поменять планировщик в реальном времени без перезагрузки выполняем:
sudo -i
echo {SCHEDULER-NAME} > /sys/block/{DEVICE-NAME}/queue/scheduler



Здесь {SCHEDULER-NAME} — один из присутствующих в системе планировщиков, у меня это: noop anticipatory deadline cfq. Например, чтобы поставить планировщик deadline, выполяем:
sudo -i
echo deadline > /sys/block/sda/queue/scheduler

Фиксация настройки планировщика
Далее, нам нужно заставить Ubuntu использовать выбранный нами планировщик и после перезагрузки. Для этого добавляем строку GRUB_CMDLINE_LINUX_DEFAULT="elevator={SCHEDULER-NAME}" в конфиг GRUB 2.
sudo nano /etc/default/grub

После внесения изменений нужно обновить конфигурацию grub:
sudo update-grub

Если у вас grub, а не grub2, то добавляем строку elevator={SCHEDULER-NAME} в /boot/grub/grub.conf.

Комментариев нет:

Отправить комментарий