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