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

    Хотим читать с винта быстрее? Настало время подобрать 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
    


    Ссылки по теме:
    www.redhat.com/magazine/008jun05/features/schedulers
    www.redhat.com/promo/summit/2008/downloads/pdf/Thursday/Sanjay_Rao.pdf
    sfdoccentral.symantec.com/sf/5.0/linux/html/sf_rac_install/sfrac_prep_install27.html
    Share post

    Similar posts

    Comments 14

      +1
      Везде пишут, что CFQ — самый понтовый. На нем и сижу.)))
        0
        Не знаю как у CFQ с понтовостью, но самый заточеный под десктоп и уж точно самый скандальный это Brain Fuck Scheduler от con kolivas. На хабре про него уже писали habrahabr.ru/blogs/linux/68533/ и habrahabr.ru/blogs/ubuntu/68946/
          +1
          Вы перепутали c CFS.

          BrainFuck — это планировщик контекстов, а CFQ/Deadline/Anticipatory/Noop — это планировщики ввода-вывода. Я использую как раз BF для контекстов и CFQ для I/O.
            0
            Есть ещё BFQ, тоже I/O Scheduler, включён в ядро zen-sources, в том числе в новые версии, а отдельно патча вроде бы и нет. Ядро zen-sources как раз для дектопов заточено.

            И всё время путают CFS/BFS и CFQ/BFQ.
          0
          Увы, из-за бага в ядре он ведёт себя не всегда хорошо. Пока остановился на anticipatory — не идеально, но получше.
          +7
          вообще шедулер надо проверять в работе идентичной рабочей нагрузке а не в простом линейном чтении с одного диска.
            +1
            Если Вы правите только elevator в menu.lst — то update-grub делать не нужно!
              +4
              У вас теги классно получились!!!
                0
                А, интересно, как выглядят тесты при использовании SATA-дисков с поддержкой NCQ. Это же, вроде, аппаратная поддержка очереднсти комманд. Не будут ли NCQ и I/O Scheduler мешать друг другу?
                  0
                  Будут. При NCQ, или хорошем аппаратном рейде лучше ставить noop или deadline.
                  0
                  Поставил себе Ubuntu 9.10 и пришлось познакомиться, блин, с этими щедулерами очень близко ;(
                  По-умолчанию там стоит cfq, с жесткими дисками он работает прекрасно. Но вот при копировании больших файлов на флешку возникают проблемы с тем, что скорость падает до жутко медленной со временем.
                  Пришлось сменить на noop — скорость записи на флешку стабилизировалась.
                  Для соболезнующих привожу ссылку на багрепорт со способами решения: https://bugs.launchpad.net/bugs/197762

                  Так что при смене планировщика тестируйте не только hdparm на винчестере, но и работу с USB-флешками и другими устройствами!
                    0
                    В статье написан бред.
                    Разницу между планировщиками ввода-вывода можно заметить только в том случае, когда есть несколько процессов, желающих этот ввод-вывод совершить, задача планировщика как раз и заключается в том, чтобы распределить время доступа между этими процессами. hdparm же в данном случае всего лишь показывает скорость линейного чтения жёсткого диска, а разница в 2-3 мб/с — допустимое отклонение, то же самое можно получить, если запускать hdparm несколько раз подряд с одним и тем же планировщиком.
                      0
                      Ну да, ну да… Только вот лисипет не мой — я только объявку дал, тобишь статья это всего лишь вольный перевод буржуйского текста.
                      Ну и раз в статье бред — предложите альтернативу для измерений, чтобы увидеть реальную картину. Думаю народ Вам только спасибо скажет.
                      0
                      Всё уже написано до нас.
                      www.rhd.ru/docs/articles/schedulers/
                      В этой статье описаны принципы работы планировщиков, приведены примеры. Сама статья написана людьми, разбирающимися в этом гораздо лучше меня, поэтому ни копипастить, ни переписывать её я не вижу смысла.
                      Могу разве что поделиться умной мыслью оттуда:
                      Подводя итоги нашего исследования мы видим, что не существует ЕДИНОГО ответа на вопрос «какой планировщик ввода/вывод является лучшим».

                      Only users with full accounts can post comments. Log in, please.