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

Gena Makhomed gmm at csdoc.com
Tue Jan 13 16:40:09 MSK 2009


On Monday, January 12, 2009 at 23:56:26, Olexander Shtepa wrote:

>> OS> Так что "ручная привязка" это уже оттюненый метод (насколько я понял).

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

>> в случае использования RAID-1 - это будет 1 файл,
>> и если его часто запрашивают - он будет уже в кеше.

OS> Прямой кандидат на DirectIO, если условия задачи позволяют.

при использовании directio файл вообще не будет попадать в кеш.
а частоиспользуемые мелкие файлы лучше все-таки держать в кеше.

и как метод ручной привязки файлов к дискам не тюнить, при N
дисках - эффективность кэширования файлов в памяти средствами
операционной системы будет в N раз хуже, потому что 1 файл
будет представлен в памяти в N копиях. - и это неустранимо.

directio имеет смысл использовать только для (очень) больших файлов.

>> что-то мне подсказывает, что метод, который при выборе диска
>> для запроса "pick the disk whose head is closest" будет работать
>> более оптимально, чем метод привязки файлов к дискам.

OS> Если я не отстал от прогресса, то IDE/SATA диски имеют чисто логическую адресацию
OS> головка/дорожка/сектор и неимеют никакого отношения к физической топологии диска.
OS> Так что это довольно сомнительное свойство..

CHS адресация сейчас не используется, а LBA адресация имеет отношение
к физическому устройству жесткого диска - линейный адрес сектора указывает
положение сектора на пластине, - чем меньше адрес, тем ближе сектор
к краю (началу) диска.

OS> На счет SCSI/SAS - совершенно не в курсе, но сомневаюсь, так как современные диски
OS> имеют переменное число секторов на дорожку, перемещенные сектора - мозг вскипит
OS> всё это учитывать, это дело внутреннего контроллера диска.

seek - это операция позиционирования на дорожку. сколько физически секторов
на трек умещается - это совершенно не важно. зная LBA адреса двух секторов
можно вычислить "расстояние" между ними - чем меньше расстояние,
тем ближе треки на которых размещены эти сектора.

примерно это и происходит в /* Find the disk whose head is closest */
http://lxr.linux.no/linux+v2.6.28/drivers/md/raid1.c#L491

OS> Кстати, именно по этому должен иметь эффект использования очередей (NCQ в SATA),
OS> сам контроллер диска имеет всю физическую инфу и может распланировать процесс самым
OS> эффективным образом.

NCQ/TCQ будет работать еще эффективнее, если на один диск направить
запросы к секторам, что находятся в 1/3 от начала диска, на второй -
те, что надодятся ближе к центру диска, а на третий - те, что ближе
к концу диска. суммарная производительность такого массива будет выше,
чем если бы запросы были бы разбросаны по всем дискам случайным образом.

примерно именно этим и занимается код в функции read_balance
http://lxr.linux.no/linux+v2.6.28/drivers/md/raid1.c#L400

>> OS>  * This routine returns the disk from which the requested read should
>> OS>  * be done. There is a per-array 'next expected sequential IO' sector
>> OS>  * number - if this matches on the next IO then we use the last disk.

>> OS>  * There is also a per-disk 'last know head position' sector that is
>> OS>  * maintained from IRQ contexts, both the normal and the resync IO
>> OS>  * completion handlers update this position correctly. If there is no
>> OS>  * perfect sequential match then we pick the disk whose head is closest.

поэтому я считаю, - нет причин для performance degrade
при использовании software raid-1 в linux через mdraid.

и кроме того - я не вижу причин по которым "ручное" привязывание
файлов к дискам должно быть эффективнее чем код software raid-1.

-- 
Best regards,
 Gena






More information about the nginx-ru mailing list