Шукати в цьому блозі

понеділок, 16 листопада 2009 р.

I/O Scheduler. Выбираем оптимальный.

Что нам понадобится для достижения цели?
Во-первых, установленный hdparm:
# aptitude install hdparm

Во-вторых, маленький скрипт:
# 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 anticipatory deadline [cfq]
[noop] anticipatory deadline cfq

/dev/sda:
Timing cached reads:   1690 MB in  2.00 seconds = 844.83 MB/sec
Timing buffered disk reads:  216 MB in  3.00 seconds =  71.91 MB/sec
----
noop [anticipatory] deadline cfq

/dev/sda:
Timing cached reads:   1612 MB in  2.00 seconds = 805.98 MB/sec
Timing buffered disk reads:  208 MB in  3.03 seconds =  68.67 MB/sec
----
noop anticipatory [deadline] cfq

/dev/sda:
Timing cached reads:   1644 MB in  2.00 seconds = 822.10 MB/sec
Timing buffered disk reads:  206 MB in  3.02 seconds =  68.20 MB/sec
----
noop anticipatory deadline [cfq]

/dev/sda:
Timing cached reads:   1728 MB in  2.00 seconds = 864.06 MB/sec
Timing buffered disk reads:  214 MB in  3.01 seconds =  71.05 MB/sec
----
Первая строка чисто информационная, в ней мы просто видем тот scheduler который используется на текущий момент времени и всегда можем вернуться к нему. Затем следуют секции тестирования. Наиболее оптимальные результат выбираем вручную, он соответствует наибольшей скорости чтения мегабайт в секунду. Короче занимаемся округлениями :)
Новое значение, можно установить прямо в grub'е, изменив значение elevator=...
Далее:
# update-grub
# reboot

ps: Спасибо Сергею (snkua[at]jabber.ru) за подсказанные идеи :)
Ссылки по теме:
http://www.redhat.com/magazine/008jun05/features/schedulers/
http://www.redhat.com/promo/summit/2008/downloads/pdf/Thursday/Sanjay_Rao.pdf
http://sfdoccentral.symantec.com/sf/5.0/linux/html/sf_rac_install/sfrac_prep_install27.html

1 коментар:

Alexander Russkih сказав...

# cat ./io-shed-test.sh
#!/bin/sh

SYSBLOCK=cciss\!c0d0
DEVBLOCK=cciss/c0d0

OLDSHED=$( cat /sys/block/$SYSBLOCK/queue/scheduler | sed "s/.*\[//;s/\].*//" )
ALLSHED=$( cat /sys/block/$SYSBLOCK/queue/scheduler | sed "s/\[//;s/\]//" )
echo "$SYSBLOCK current i/o-shed [$OLDSHED]"

for T in $ALLSHED; do
echo
echo -n "$SYSBLOCK set i/o-shed $T... "
sync
echo $T > /sys/block/$SYSBLOCK/queue/scheduler
sync
CURR=$( cat /sys/block/$SYSBLOCK/queue/scheduler | sed "s/.*\[//;s/\].*//" )
echo $CURR
sync
hdparm -tT /dev/$DEVBLOCK
echo "-----"
sync
sleep 15
done

echo $OLDSHED > /sys/block/$SYSBLOCK/queue/scheduler
sync