vinum RAID5. Снова

From
Cherepanov Leonid (2:5020/400)
To
All
Date
2005-06-02T23:31:02Z
Area
RU.UNIX.BSD
From: Cherepanov Leonid <leo@tcnet.ru>

День добрый. Сразу прошу прощения за огромное послание.

Получил в руки побаловаться кучку винчестеров.
И масса вопросов возникла.

По железу.
Читал я читал, но так и не понял ситуацию с SATA-II
Вроде бы как все прелести NCQ зашиты в железе (т.е. надо только SATA-II 
HDD & SATA-II controller), но дрова специальные под ОСи идут. Под 
эхотаг, правда, нет. И в hardware ничего не сказано. И определяется это 
хозяйство в системе как SATA 1.0 Т.е. нет мне плюсов от новой технологии?

Ну и вторая вещь. Кучу дисков, конечно, надо класть в раид. С дисками у 
нас сейчас принято через geom работать. Есть 3 полезные утилитки 
gstripe, gmirror & graid3 . Чем занимаются - понятно из названий :)
Подгружают свои модули, на лету умеют ребилдить зеркало и 3-й раид. Но 
вроде как RAID3 рекомендуют для малопотоковых (по количеству) длинных 
операций (типа редактирования видео на рабочей станции). А это на 
файл-сервер совсем не похоже. Т.е. надо всё-таки RAID5. А graid5 нет :) 
Ну хорошо, делаем через gvinum. Он сейчас в сугубо спартанском 
состоянии. Половину команд не реализовали, только самое необходимое. Ну 
да ладно, главное, что работает :) Но вот стал я скорость измерять - и 
очень странные и печальные получил результаты.
Как там что надо по уму делать, к сожалению, не знаю (подскажите, 
погоняю по правильной методе). Измерял простой дд-дой.
Машина Р4, памяти 1 гиг. Вот результаты (оставил и команды для работы с 
раидами, вдруг кому пригодится?..)

Диски просто как есть
# dd if=/dev/zero of=/mnt/test bs=1M count=2k
2147483648 bytes transferred in 35.026275 secs (61310649 bytes/sec)

# dd of=/dev/zero if=/mnt/test bs=1M count=2k
2147483648 bytes transferred in 34.360461 secs (62498686 bytes/sec)
Так вроде даже нормально.


Берём страйп
# gstripe label -s 65536 data /dev/ad12s1 /dev/ad14s1
# newfs /dev/stripe/data
# mount /dev/stripe/data /mnt

# dd if=/dev/zero of=/mnt/test bs=1M count=3K
3221225472 bytes transferred in 33.296539 secs (96743552 bytes/sec)

# dd of=/dev/zero if=/mnt/test bs=1M count=3K
3221225472 bytes transferred in 46.423276 secs (69388155 bytes/sec)
Т.е. читаем почти в полтора раза медленнее, чем пишем! КАК?!

Если брать зеркало
# gmirror label data /dev/ad12s1 /dev/ad14s1
# newfs /dev/mirror/data
# mount /dev/mirror/data /mnt

# dd if=/dev/zero of=/mnt/test bs=1M count=3K
3221225472 bytes transferred in 63.202142 secs (50967030 bytes/sec)

# dd of=/dev/zero if=/mnt/test bs=1M count=3K
3221225472 bytes transferred in 60.727050 secs (53044327 bytes/sec)
Т.е. читаем и пишем примерно одинаково! И читаем медленнее, чем с одного 
диска.

RAID10
gmirror label mirr0 ad10 ad12
gmirror label mirr1 ad14 ad16
gstripe label stripe /dev/mirror/mirr0 /dev/mirror/mirr1
(Лёгкое отступление. Можно, в принципе, делать наоборот: сначала диски 
страйпить, а потом зеркалировать страйпы. Но при выходе одного 
физического диска развалится его страйп, и вся работа будет вестись со 
вторым страйпом. Т.е. при выходе из строя 1 диска данные не теряются, но 
работа ведётся не на оставшихся 3-х, а на 2-х дисках)
# dd if=/dev/zero of=/raid10/test bs=1M count=2k
2147483648 bytes transferred in 62.494281 secs (34362883 bytes/sec)
# dd of=/dev/zero if=/raid10/test bs=1M count=2k
2147483648 bytes transferred in 33.836740 secs (63466033 bytes/sec)
Ну вот, запись ещё хуже стала...

RAID3
graid3 label raid3 ad12 ad14 ad10
# dd if=/dev/zero of=/raid3/test bs=1M count=2k
2147483648 bytes transferred in 31.571675 secs (68019314 bytes/sec)
# dd of=/dev/zero if=/raid3/test bs=1M count=2k
1889533952 bytes transferred in 26.056687 secs (72516277 bytes/sec)
Красиво, ничего не скажешь! Вот как раз однопотоковая длинная "сессия"

И наконец
RAID5
gvinum create /etc/vinum.conf
vinum.conf:
drive d1 device /dev/ad10
drive d2 device /dev/ad12
drive d3 device /dev/ad14
drive d4 device /dev/ad16
volume data
    plex org raid5 345k
      sd length 0 drive d1
      sd length 0 drive d2
      sd length 0 drive d3
      sd length 0 drive d4
# dd if=/dev/zero of=/data/test bs=1M count=2k
2147483648 bytes transferred in 152.575936 secs (14074852 bytes/sec)
# dd of=/dev/zero if=/data/test bs=1M count=2k
потерял, пардон :( Около 45М/с было

Т.е. RAID5 получился хуже всех!

Но и это ещё не всё.
Пока винты шуршали, я поглядывал "systat -vm 1" на загрузку винтов. И во 
всех, практически, случаях мог оценить заранее цифирки дд. Скажем, для 
зеркала показывает около 50М/с на диск. Ну так я и знаю, что столько и 
получу (и получал). Со страйпом показывает около 50 на диск, так я и 
знаю, что итого получу 100 (и получаю). И с RAID3 такая же ситуация. А 
вот с RAID5 не так. systat показывает около 14М/с на диск (каждый из 
4-х), и итоговый трансфер около 14 (а не 3*14). Я такого не понимаю. И 
ведь действительно медленно пишет, реально секунд много проходит :)
Изменение блока в широких пределах не влияет сильно на картину (345К у 
меня получился одним из лучших). Более того, раид на 7-ми дисках даёт ту 
же производительность (что по чтению, что по записи).

Ну вот. Только руками развести и могу. Кто-нибудь может что-то толковое 
сказать? :)
Заранее весьма признателен.
--- ifmail v.2.15dev5.3
 * Origin: A well-installed InterNetNews site (2:5020/400)
SEEN-BY: 46/50 50/203 520 400/814 450/159 186 247 1024 451/30 461/43 132 640
SEEN-BY: 469/999 550/196 4616/3 4625/8 4627/10 4635/4 4652/15 5000/76 5000
SEEN-BY: 5006/1 5007/1 5010/70 5011/13 5015/10 5019/31 5020/52 118 154 175 194
SEEN-BY: 5020/400 545 549 604 715 758 830 937 1057 1523 1604 1630 1922 2020
SEEN-BY: 5020/2142 2238 2450 2590 4441 5021/29 5022/128 5025/3 750 5026/45
SEEN-BY: 5027/16 5029/32 5030/49 115 473 500 556 966 1063 1900 5031/70 72
SEEN-BY: 5034/13 5035/3 38 5036/1 34 5042/13 5049/1 50 97 5051/15 5054/1 4 8 9
SEEN-BY: 5054/28 35 36 37 63 66 67 70 75 81 84 85 5055/95 5057/1 5060/88
SEEN-BY: 5061/15 120 5062/1 10 5063/3 5066/18 5067/2 5069/7 5070/1222 5074/9
SEEN-BY: 5075/5 35 5079/23 5080/80 1003 5081/2 5082/6 5083/21 5085/13 5090/108
SEEN-BY: 5095/20 5096/18 6000/12 254 6001/3 10
PATH: 5020/400 4441 545 5054/1 37