vinum RAID5. Снова

From
Sergey Korolew (2:6053/1.2)
To
leo@tcnet.ru
Date
2005-06-03T17:41:46Z
Area
RU.UNIX.BSD
Пpивет Cherepanov!

03 Июн 05 16:00, Cherepanov Leonid писал к Sergey Korolew:

 CL> Вы просто не правы.
Почему на "Вы"-то сразу ?

 CL>  Абсолютно. Я десятки раз получал прекрасную производительность
 CL> софтового 5-го раида на виндах.
Дык вот и используй. Под виндами. А здесь - способен помочь с оптимизацией ?
Тогда welcome.

Кстати, у меня получались противоположные результаты. Софтовый RAID5 под виндой не идет ни в какое сравнение даже с убогим 2120S. На идентичных дисках.

 CL> Думаю, что и тут Вы не правы. Перед записью надо, конечно, поксорить
 CL> блоки. Но _дописать_ надо только 1 блок только на один диск.
Не надо ничего придумывать, алгоритм работы описан в исходниках.

         * There are a number of different kinds of
         * transfer, each of which relates to a
         * specific subdisk:
         *
         * 1. Normal read.  All participating subdisks
         *    are up, and the transfer can be made
         *    directly to the user buffer.  The bounds
         *    of the transfer are described by
         *    m.dataoffset and m.datalen.  We have
         *    already calculated m.initoffset and
         *    m.initlen, which define the parameters
         *    for the first data block.
         *
         * 2. Recovery read.  One participating
         *    subdisk is down.  To recover data, all
         *    the other subdisks, including the parity
         *    subdisk, must be read.  The data is
         *    recovered by exclusive-oring all the
         *    other blocks.  The bounds of the
         *    transfer are described by m.groupoffset
         *    and m.grouplen.
         *
         * 3. A read request may request reading both
         *    available data (normal read) and
         *    non-available data (recovery read).
         *    This can be a problem if the address
         *    ranges of the two reads do not coincide:
         *    in this case, the normal read needs to
         *    be extended to cover the address range
         *    of the recovery read, and must thus be
         *    performed out of malloced memory.
         *
         * 4. Normal write.  All the participating
         *    subdisks are up.  The bounds of the
         *    transfer are described by m.dataoffset
         *    and m.datalen.  Since these values
         *    differ for each block, we calculate the
         *    bounds for the parity block
         *    independently as the maximum of the
         *    individual blocks and store these values
         *    in m.writeoffset and m.writelen.  This
         *    write proceeds in four phases:
         *
         *    i.  Read the old contents of each block
         *        and the parity block.
         *    ii.  ``Remove'' the old contents from
         *         the parity block with exclusive or.
         *    iii. ``Insert'' the new contents of the
         *          block in the parity block, again
         *          with exclusive or.
         *
         *    iv.  Write the new contents of the data
         *         blocks and the parity block.  The data
         *         block transfers can be made directly from
         *         the user buffer.
         *
         * 5. Degraded write where the data block is
         *    not available.  The bounds of the
         *    transfer are described by m.groupoffset
         *    and m.grouplen. This requires the
         *    following steps:
         *
         *    i.  Read in all the other data blocks,
         *        excluding the parity block.
         *
         *    ii.  Recreate the parity block from the
         *         other data blocks and the data to be
         *         written.
         *
         *    iii. Write the parity block.
         *
         * 6. Parityless write, a write where the
         *    parity block is not available.  This is
         *    in fact the simplest: just write the
         *    data blocks.  This can proceed directly
         *    from the user buffer.  The bounds of the
         *    transfer are described by m.dataoffset
         *    and m.datalen.
         *
         * 7. Combination of degraded data block write
         *    and normal write.  In this case the
         *    address ranges of the reads may also
         *    need to be extended to cover all
         *    participating blocks.
         *
         * All requests in a group transfer transfer
         * the same address range relative to their
         * subdisk.  The individual transfers may
         * vary, but since our group of requests is
         * all in a single slice, we can define a
         * range in which they all fall.

 CL> реализации. А аппаратные рейдконтроллеры нужны в основном для других
 CL> целей. Например, чтобы при сбое питания держать на борту за счёт
 CL> батарейки незаписанные данные.
Это все сказки. У того же 2120S на борту 64Мб. Сколько времени они будут сохраняться ? А UPS использовать религия не позволяет ?

 CL>  Т.е. совершенно другой уровень "сервиса". А скорость - это пошло :)
 CL> Она всегда получаться должна.
Приежай, покажу raid5 на трех винтах. Аппаратный. Жалкое зрелище.


 Всего наилучшего,
  Sergey aka DS

--- GoldED+/W32 snapshot-2001.03.04
 * Origin: Нету. Придумывать лень. (2:6053/1.2)
SEEN-BY: 46/50 50/551 140/1 400/814 450/1024 5000/5000 5011/13 5015/10 5019/31
SEEN-BY: 5020/178 380 545 715 1822 2044 4441 12000 5021/29 5025/3 5027/16
SEEN-BY: 5030/115 5035/38 5036/34 5043/19 5052/4 5054/1 4 8 9 28 35 36 37 63
SEEN-BY: 5054/66 67 70 75 81 84 85 5062/10 5063/3 5069/7 5080/1003 5085/13
SEEN-BY: 5095/20 5096/18 6000/254 6001/10 6053/1 4 6056/1
PATH: 6053/1 5020/715 545 5054/1 37