Сборка и разборка автомата Калашникова (и снова про RAID)

13.06.18

База данных - Инструменты администратора БД

Тестирование RAID на запись в различных условиях.

Случайно купил себе сервер HP proliant ML150G3 (Xeon E5310 1.6GHz)*2, 8Gb,SmartArray E200i 128M + (SAS 72G 15k)*4. Добавил  SATA WD 80G в качестве системного, установил Ubuntu server 16.04.4 без swap и GUI (для чистоты эксперимента) и решил поиграть с RAID массивами. Пособирать, поразбирать, поломать RAID массивы, пощупать, так сказать собственными ручками.

Поводом стала статья на Хабре  Почему RAID5 — «must have»?

Странно сравнивать надежность массива из трех и четырех дисков, было бы правильно сравнить RAID10 и RAID5 из трех основных и одного резервного диска. У этих двух массивов одинаковое число дисков -4  и одинаковая емкость - удвоенная емкость одного диска, Надежность RAID 5 в данном случае выше, поскольку в случае выхода из строя одного диска - он заменяется резервным, а после выхода из строя еще одного диска массив сохраняет работоспособность, Т.е. сохраняется работоспособность при выходе из строя любых ДВУХ!! дисков. В комментариях к статье указывалось, что скорость записи на RAID 10 , выше, чем на RAID 5, особенно когда запись идет в несколько потоков и мелкими файлами. Вот это и проверим. Raid монтировался в /mnt/raid, файловая система ext4. В качестве проверки использовался bash скрипт, который писал файлы на диск в один или несколько потоков. Для записи файлов использовалась команда dd , файлы создавались из /dev/urandom. Общий объем файлов всегда 1Гб, но было три теста:

0) 64 потока, каждый поток пишет на диск 16384 файлов по 1к

1) 8 потоков, каждый пишет на диск 128 файлов по 1М

2)1 поток, один файл 1Г.

Фиксируется только время записи. Скрипт, собственно вот:

#!/bin/bash
clear
declare -i K=1024
declare -i -r BLOCK_SIZE=1024 #запись файла блоками по 1 к
declare -i BLOCK_COUNT        #число 1к-блоков на файл 
declare -i TEST_NUM           #номер теста 0,1,2 
declare -i THREAD_COUNT       #число потоков записи файлов
declare -i LOOP_COUNT         #число записываемых файлов в одном потоке
declare -r FILE_PREFIX=File
declare -r LOG=/home/user/raid/raid.log
TEST_DIR=/mnt/raid
exec >>$LOG 2>&1

for TEST_NUM in {0..2};do

  find $TEST_DIR -type f -name "${FILE_PREFIX}*" -delete

  BLOCK_COUNT=$((K ** $TEST_NUM)) #1,1K,1M
  THREAD_COUNT=$((8 ** (2-$TEST_NUM))) #64,8,1
  LOOP_COUNT=$((128 ** (2-$TEST_NUM))) #16384,128,1

  echo BLOCK_SIZE    $BLOCK_SIZE
  echo BLOCK_COUNT   $BLOCK_COUNT
  echo THREAD_COUNT  $THREAD_COUNT
  echo LOOP_COUNT  $LOOP_COUNT
  echo SUM_FILES_LEN $(($BLOCK_SIZE*$BLOCK_COUNT*$THREAD_COUNT*LOOP_COUNT))

  time {
    for ((THREAD=0; THREAD < $THREAD_COUNT; THREAD++));do
      for ((LOOP=0; LOOP < $LOOP_COUNT; LOOP++));do
        #echo $THREAD $LOOP
        dd status=none if=/dev/urandom of=${TEST_DIR}/${FILE_PREFIX}_${TEST_NUM}_$(printf "%02d_%05d" ${THREAD} ${LOOP}) bs=$BLOCK_SIZE count=$BLOCK_COUNT
      done &
    done
    wait
  }
echo "#####################################"

done

find $TEST_DIR -type f -name "${FILE_PREFIX}*" -delete

Результаты теста приведены на скриншоте. Условные обозначения raid5.4 - рейд 5 из четырех дисков (без резерва) raid5.4-1 - тот же raid, без одного диска для эмуляции отказа. Остальные по аналогии.

Выводы:

Как видно из таблички скорость записи практически одинакова на всех массивах. При записи файлов в несколько потоков наблюдалась 100% загрузка процессора. Видимо именно проц был узким местом при записи мелких файлов в несколько потоков. Не знаю, может более опытные товарищи подскажут. Для себя я бы выбрал рейд 5 с тремя дисками и одним диском горячего резерва.

В качестве soft raid использовал mdadm. Но после удаления одного диска raid не заработал, поскольку возникли проблемы c суперблоком. Может я что не так делаю, но запустить софтовый raid без одного диска у меня не получилось. Надеюсь народ, который использует софтовые рейды 5 проверяет их на отказоустойчивость перед отправкой в реальное плавание ;-).

-------------------------------------------------------------------------------------------------------------------------------------------

Ну и для сравнения укажу результаты чтения диска программой hdparm с различными raid.

Сразу хочу заметить, что hdparm работает с устройством напрямую, без файловой системы, поэтому реальные результаты работы с файлами могут быть другими.

raid 5.4 Timing cached reads 5626 in 2.00 second =2819.53 Mb/sec

Timing buffered disk reads 642 Mb in 3.00  second=213.84 Mb/sec

raid 5.3 Timing cached reads 5720 in 2.00 second =2866.77 Mb/sec

Timing buffered disk reads 448 Mb in 3.00  second=149.12 Mb/sec

raid 10 Timing cached reads 5748 in 1.99 second =2881.31 Mb/sec

Timing buffered disk reads 542 Mb in 3.00  second=180.58 Mb/sec

Вступайте в нашу телеграмм-группу Инфостарт

RAID test bash linux ubuntu debian server сервер администрирование рейд.

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

24900 руб.

20.08.2024    67585    356    163    

312

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

17000 руб.

10.11.2023    25139    93    44    

102

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 1С 8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 17.04.2026, версия 1.4.1, работает в 1С:ФРЕШ!

24400 руб.

06.12.2023    22630    80    10    

113

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14640 руб.

29.04.2020    50051    135    162    

91

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Программист Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.

6000 руб.

15.04.2026    1574    2    0    

20

Файловый обмен (TXT, XML, DBF), FTP Поиск данных Инструменты администратора БД Корректировка данных Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная обработка позволит Вам легко и просто, а главное - быстро, выполнить сравнение данных между ЛЮБЫМИ базами (и РИБ, по правилам конвертаций) по контрольным суммам выбранных объектов баз 1С, работающих на платформах 8.3 и выше. Удобный и понятный интерфейс в виде "мастера". Высокая скорость сравнения достигается за счет специального алгоритма расчета контрольной суммы объекта/записи и сравнения по данным суммам объектов 2х баз через файл. Имеется возможность выбора реквизитов, по которым система будет сравнивать объекты. Сравнение количества записей в движениях документов, возможность сравнивать данные по правилам конвертации и не только! Выбор объектов конфигурации для КАЖДОГО узла в отдельности с индивидуальным отбором для каждого объекта конфигурации, работа с FTP, сохранение или загрузка настроек, сохранение или загрузка результата сравнения, регистрация на обмен объекта и его движений. (Обновление от 12.11.2024, версия 2.2-2.5)

24400 руб.

27.10.2017    45857    31    13    

49

Чистка данных Инструменты администратора БД Администрирование 1С 8.3 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Решение представляет собой набор из 6 обработок для 1С по удалению организаций и справочников из базы по фильтрам, документов по фильтрам, универсальное сжатие данных, очистка битых движений регистратора, удаление устаревших регистров сведений, удаление устаревших документов "Электронное письмо входящее" и "Электронное письмо исходящее"

23999 руб.

20.02.2026    1208    1    0    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. nyam-nyam 14.06.18 11:23 Сейчас в теме
Не указан размер страйпа RAID5. RAID5 при записи целиком страйпа по производительности будет равен или быстрее RAID10 - XOR процессор рейда делает очень быстро, а запись на отдельный диск будет равна x/(n-1) и 2x/n для RAID5 и RAID10 соответственно (х - размер страйпа, n - кол-во дисков в массиве). В случае записи данных в не пустой страйп и размером меньше чем страйп, RAID5 для расчёта контрольной суммы должен сначала считать этот страйп, потом рассчитать XOR, а затем записать изменённый данные - вот тут и появляется падение производительности.
В данном тесте разницы в RAID5 и RAID10 практически нет скорее всего что не было случаев перезаписи страйпов. Однако, для баз данных как раз характерны сценарии с перезаписью страйпов (маленькие изменения большого файла) и падение производительности на RAID5. Есть так же некоторые сомнения по поводу распараллеливания потоков данным скриптом:

for ((LOOP=0; LOOP < $LOOP_COUNT; LOOP++));do
#echo $THREAD $LOOP
dd status=none if=/dev/urandom of=${TEST_DIR}/${FILE_PREFIX}_${TEST_NUM}_$(printf "%02d_%05d" ${THREAD} ${LOOP}) bs=$BLOCK_SIZE count=$BLOCK_COUNT
done &

я бы написал вот так:

for ((LOOP=0; LOOP < $LOOP_COUNT; LOOP++));do
#echo $THREAD $LOOP
dd status=none if=/dev/urandom of=${TEST_DIR}/${FILE_PREFIX}_${TEST_NUM}_$(printf "%02d_%05d" ${THREAD} ${LOOP}) bs=$BLOCK_SIZE count=$BLOCK_COUNT &
done
viptextil1; blindcat2006; beefit; +3 Ответить
2. A_Max 21 14.06.18 15:07 Сейчас в теме
(1) и именно для этого в бд делается размер страницы равный размеру страйпа (или наоборот кому как удобней)
viptextil1; +1 Ответить
3. viptextil1 23 15.06.18 08:32 Сейчас в теме
(1) Да я бы и рад посмотреть размер страйпа, но не знаю где. При создании железного raid он не указывается... Может надоумите, где глянуть?
for ((LOOP=0; LOOP < $LOOP_COUNT; LOOP++));do
#echo $THREAD $LOOP
dd status=none if=/dev/urandom of=${TEST_DIR}/${FILE_PREFIX}_${TEST_NUM}_$(printf "%02d_%05d" ${THREAD} ${LOOP}) bs=$BLOCK_SIZE count=$BLOCK_COUNT &
done

Э-э-э, нет. Так не пойдет. Так каждый отдельный файл будет писаться отдельным потоком, а у меня в "нулевом" тесте пишутся 16384 файла последовательно в одном потоке.
4. nyam-nyam 15.06.18 09:52 Сейчас в теме
(3) Размер страйпа можно посмотреть/изменить в утилите настройки RAID. Для HP это HP Array Configuration Utility.

По поводу куда поставить & - согласен. Но для демонстрации проседания производительности RAID5 надо всё же делать перезапись. Впрочем, за счёт кэша на RAID и встроенного оптимизатора возможно и не получится увидеть значимой разницы в скорости записи. Как вариант - отключить кэширование записи
5. viptextil1 23 17.06.18 18:14 Сейчас в теме
(4)
Размер страйпа можно посмотреть/изменить в утилите настройки RAID. Для HP это HP Array Configuration Utility.

Вот спасибо. Действительно, настройки моего контроллера задаются утилитой ssacli.

Спасибо, узнал для себя много нового.
Для отправки сообщения требуется регистрация/авторизация