Re: Еще раз о дисковой подсистеме

Igor Sysoev igor на sysoev.ru
Чт Авг 18 14:24:39 UTC 2011


On Thu, Aug 18, 2011 at 05:48:38PM +0400, Илья Винокуров wrote:
> 18 августа 2011, 13:00 от Igor Sysoev <igor at sysoev.ru>:
> > On Thu, Aug 18, 2011 at 12:49:23PM +0400, Илья Винокуров wrote:
> > > А у меня другое мнение.
> > > Для раздачи long статики (фильмы длинные) RAID 10 будет эффективнее, чем независимые винты:
> > >
> > > 1) При раздаче одного файла участвуют все диски (у независимых винтов только один)
> > 
> > Именно. То есть, весь рэйд при этом работает со скоростью одного диска.
> 
> Для одного потока да - RAID10 может работать со скоростью одного винта, но Вы рекомендуете запускать
> столько процессов nginx, сколько ядер в системе... А в системе сейчас от 2-х ядер.
> Так вот, при параллельной работе нескольких потоков запросы к массиву будут параллелиться между дисками.

Для одного потока RAID10 будет работать со скоростью всех дисков:
1) процесс читает 1М,
2) с каждого диска ядро читает по 128К,
3) диски подвели головки к нужному трэку,
4) и прочитали в свой кэш целый трэк - 1-2М,
5) в ядро уходит блоки по 128К,
6) ядро читает следующие 128К,
7) они уже не читаются с диска, а берутся из кэша диска,
8) goto 4, до тех пор пока кэш не будет исчерпан.

В случае нескольких потоков пункты 1-5 те же самые, а на пункте 6 данные,
как правило, вытеснены другими потоками. То есть, мы заставляем диски
двигать головы на каждое чтение, что практически аналогично времени
случайного доступа к одному диску.

Что касается числа процессов nginx, то данная рекомендация относится
только, если nginx упирается в процессор. Если же узкое место диски,
то процессов нужно много - 10-30 и их число никак не связано с числов
процессоров.

> Рассматриваем ситуацию, когда разным процессам нужны разные блоки данных одного длинного файла.
> В схеме же с отдельными дисками один популярный длинный фильм может убить весь сервер, который
> только и будет делать, что ждать задыхающийся винт.

С RAID10 ничего не измениться. Только задыхаться будет весь RAID.

> > Для современного диска нет ощутимой разницы в чтении 1К или 1М. Поэтому
> > читать с нескольких дисков блоки по 128К, чтобы набрать 1М - бессмысленно.
> 
> Поэтому я и предложил увеличить размер блока данных.
> 
> > > PS: При монтировании RAID10 для длинных файлов следует увеличить величину блока
> > > до 1..2 мегабайт. 
> 
> > И многие рэйд позволяют подобное увеличение ?
> 
> Конечно же, речь идет о софтовом решении. По моему мнению будущее за софтовыми RAID массивами,
> а точнее за RAIDовыми FS.

Замечательно, какие софтовые рэйды позволяют увеличить страйп до 1М ?

> > И всё равно он не полностью решает проблему - при попадании на границу
> > будут задействованы два диска вместо одного ?
> 
> Если рассматривать работу в системе кучки процессов, насилующих RAID массив, то факт попадания одного
> файла на границу не играет никакой роли. Главное, чтобы план чтения блоков с конкретного диска был
> оптимальным. Посему рекомендации сводятся к использованию SAS дисков.

См. выше.


-- 
Игорь Сысоев
http://sysoev.ru



Подробная информация о списке рассылки nginx-ru