Re: балансинг по жестким дискам

Gena Makhomed gmm at csdoc.com
Mon Jan 12 16:19:43 MSK 2009


On Monday, January 12, 2009 at 13:03:27, Igor Sysoev wrote:

>> БД>>>> Цель  как раз и получить что-то вроде raid'a,
>> БД>>>> только с увеличенной производительностью.
>> 
>> GM>> за счет чего планируется получить увеличение производительности
>> GM>> по сравнению с вариантом решения через software/hardware raid-1?
>> 
>> ММ> Видимо  при большой конкурентности запросов на чтение лучше, если один
>> ММ> файл   целиком   читается  с  одного  диска.  В  случае  использования
>> ММ> зеркалирования  большие  файлы  елятся  на кусочки и запросы на чтение
>> ММ> этих  кусочков  распределяются  по  дискам  в зеркале. Получаем больше
>> ММ> позиционирований головок дисков.
>> 
>> "файлы делятся на кусочки" - это RAID-0 / RAID-10 / RAID-5 / etc.
>> 
>> mirror / зеркалирование - это RAID-1. здесь нет никаких кусочков.

IS> Кусочков нет, но поскольку на всех дисках одно и то же, то можно одновременно
IS> читать кусками с нескольких дисков - 1М с первого, 2М - со второго, и т.д.

но это уже идут особенности реализации software raid-1 в FreeBSD
посредством gmirror при использовании балансировщика round-robin

>> у RAID-1 на N винтах производительность выше примерно в N раз по сравнению с 1 винтом.
>> 
>> http://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_1_performance
>> 
>> Since all the data exists in two or more copies, each with its own hardware,
>> the read performance can go up roughly as a linear multiple of the number of copies.
>> 
>> ММ> Если  нагрузка  небольшая, то зеркало работает быстрее. Если нагрузка
>> ММ> пиковая  и  чтение случайное, то независимые винты отдают быстрее,
>> ММ> чем они же в зеркале.
>> 
>> возможно этот эффект наблюдался при использовании RAID-10, а не RAID-1.
>> 
>> или же причиной этому особенности реализации software RAID-1 в FreeBSD.
>> 
>> (но и чинить тогда надо там где сломалось - в реализации software RAID)

IS> Зависит от использования прочитанного. Если файл читается последовательно
IS> (просмотр видео с локального диска), то быстрее читать его одновременно
IS> с нескольких дисков. А вот если файлы читаются произвольно (веб-сервер),
IS> то лучше бОльший кусок файла прочитать с одного диска, чем дёргать головки
IS> на остальных дисках.

за один раз nginx считает с диска не более sendfile_max_chunk байт
когда он обратится к диску за следующим chunk`ом этого же файла,
(при высокой нагрузке) - исходный диск к тому моменту уже успеет
обработать несколько других запросов на чтение chunk`ов других файлов,
надо будет снова производить операцию позиционирования головок диска.

если к одному диску "жестко" привязать запросы на file1 и file2,
причем, file1 находится в начале диска, а file2 - в конце диска,
в этом случае диском достаточно много времени будет тратиться
на позиционирование головок при попеременном считывании chunk`ов
этих файлов nginx`ом. (оба файла ведь считываются последовательно)

насколько я понимаю, если в gmirror пофиксить балансировщик load,
то можно будет использовать gmirror -b load и получить в FreeBSD
большую производительность, чем сейчас при gmirror -b round-robin?

и возможно, даже получится большая производительность,
чем при "ручной" привязке запросов к различным дискам?

http://www.freebsd.org/cgi/query-pr.cgi?pr=113885

или же проблема в том, что GEOM слишком сильно абстрагируется
от дисковой подсистемы, - он ничего не знает про позиционирование
головок жесткого диска и поэтому load всеравно будет неоптимальным?

-- 
Best regards,
 Gena






More information about the nginx-ru mailing list