Производительность mdraid 1+0

В Vertica есть встроенные средства анализа производительности дисковой подсистемы.

Мне стало интересно, а какие цифры эти утилиты покажут на нашем софтварном mdraid 1+0?

Запустив команду и подождав около часа, я получил результаты:


SELECT MEASURE_LOCATION_PERFORMANCE('/opt/dwh/dwh/v_dwh_node0005_data' , 'v_dwh_node0005');

Throughput : 246 MB/sec. Latency : 318 seeks/sec

При этом простой тест скорости ввода-вывода на одном диске показывает


# hdparm -tT /dev/sda

/dev/sda:
Timing cached reads: 19598 MB in 2.00 seconds = 9813.93 MB/sec
Timing buffered disk reads: 512 MB in 3.01 seconds = 169.99 MB/sec

Странность здесь в том, что утилитой hdparm скорость одного диска 170 MB/sec, а скорость чтения vertica массива из 4-х дисков 246 MB/sec

Первой мыслью было проверить состояние массива


# cat /proc/mdstat
Personalities : [raid1] [raid10]
md1 : active raid10 sdc2[2] sdd2[3] sdb2[1] sda2[0]
3864830976 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]

затем скорость чтения mdraid


hdparm -tT /dev/md1

/dev/md1:
Timing cached reads: 19336 MB in 2.00 seconds = 9684.61 MB/sec
Timing buffered disk reads: 848 MB in 3.00 seconds = 282.38 MB/sec

Как видим, vertica показывает близкую к максимальному значению производительность, так что дело не в ней и не в накладных расходах и неоптимальном коде БД.

Дальше я попытался пройтись по всему стеку файловая система — ядро — mdraid, проверить параметры монтирования ext4, параметры scheduler и readahead у дисков и mdraid, и т.д. Я даже попробовал развернуть файловую систему btrfs (благо у нас новый RHEL6) в конфигурации raid 1+0 без mdraid — ничего не помогло. Изменения были минимальны, в предлах погрешности. Стало ясно, что для чтения используется только 2 диска.

Разобраться в причинах помогли вот эти вот ребята из Италии. Мне стало инетересно, а что значит запись 2 near-copies в mdstat, я начал с википедии, окончательно запутался в терминах, решил почитать что-нибудь еще, и так добрался до этих ребят.

Действительно, для 4-х дисков с точки зреня fault-tolerance разницы, как располагаются блоки, нет:

Что для n2 layout


4 drives
--------------
A1 A1 A2 A2
A3 A3 A4 A4
A5 A5 A6 A6
A7 A7 A8 A8
.. .. .. ..

что для f2 layouts


4 drives
------------------
A1 A2 A3 A4
A5 A6 A7 A8
A9 A10 A11 A12
.. .. .. ..
A2 A1 A4 A3
A6 A5 A8 A7
A10 A9 A12 A11
.. .. .. ..

всегда найдется комбинация, когда выход из строя 2-х дисков означает выход из строя всего массива.

Огромная разница между ними состоит в том, что в случа n2 чтение происходит с 2-х дисков, а для f2 — с 4-х дисков массива. По умолчанию mdadm строит массив n2.

Так что, собрав новый массив с расположением блоков f2, я получил цифры:

«Сырое» чтение


# hdparm -tT /dev/md1
/dev/md1:
Timing cached reads: 20226 MB in 2.00 seconds = 10128.95 MB/sec
Timing buffered disk reads: 1466 MB in 3.00 seconds = 488.45 MB/sec

Чтение данных Vertica


Throughput : 335 MB/sec. Latency : 445 seeks/sec

Т.е. в 1,25 раза выросла скорость чтения БД и в 1,73 раза — «сырые» чтения.

Утверждается, что near-copies показывает лУчшую производительность для операций записи, но в случае аналитических БД основная нагрузка — чтение данных и лучше использовать режим far-copies.

Реклама

Один ответ на “Производительность mdraid 1+0

  1. Уведомление: Софтверный mdraid | leborchuk

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s