У меня есть сервер с материнской платой Supermicro X10DRW-i и массивом RAID10 из 8 твердотельных накопителей KINGSTON SKC400S; ОС - CentOS 6
# cat /proc/mdstat
Personalities : [raid10] [raid1]
md2 : active raid10 sdj3[9](S) sde3[4] sdi3[8] sdd3[3] sdg3[6] sdf3[5] sdh3[7] sdb3[1] sda3[0]
3978989568 blocks super 1.1 512K chunks 2 near-copies [8/8] [UUUUUUUU]
bitmap: 9/30 pages [36KB], 65536KB chunk
-
# mdadm --detail /dev/md2
/dev/md2:
Version : 1.1
Creation Time : Wed Feb 8 18:35:14 2017
Raid Level : raid10
Array Size : 3978989568 (3794.66 GiB 4074.49 GB)
Used Dev Size : 994747392 (948.67 GiB 1018.62 GB)
Raid Devices : 8
Total Devices : 9
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Fri Sep 14 15:19:51 2018
State : active
Active Devices : 8
Working Devices : 9
Failed Devices : 0
Spare Devices : 1
Layout : near=2
Chunk Size : 512K
Name : ---------:2 (local to host -------)
UUID : 8a945a7a:1d43dfb2:cdcf8665:ff607a1b
Events : 601432
Number Major Minor RaidDevice State
0 8 3 0 active sync set-A /dev/sda3
1 8 19 1 active sync set-B /dev/sdb3
8 8 131 2 active sync set-A /dev/sdi3
3 8 51 3 active sync set-B /dev/sdd3
4 8 67 4 active sync set-A /dev/sde3
5 8 83 5 active sync set-B /dev/sdf3
6 8 99 6 active sync set-A /dev/sdg3
7 8 115 7 active sync set-B /dev/sdh3
9 8 147 - spare /dev/sdj3
Я заметил, что скорость записи просто ужасная, даже близко к производительности SSD.
# dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=dsync
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 16.511 s, 65.0 MB/s
Скорость чтения нормальная
# hdparm -tT /dev/md2
/dev/md2:
Timing cached reads: 20240 MB in 1.99 seconds = 10154.24 MB/sec
Timing buffered disk reads: 3478 MB in 3.00 seconds = 1158.61 MB/sec
После устранения неполадок, связанных с этой проблемой, я обнаружил, что, возможно, я изначально испортил конфигурацию хранилища: X10DRW-i имеет Intel C610, который имеет два отдельных контроллера SATA, 6-портовый SATA и 4-портовый sSATA. Итак, диски в массиве подключены к разным контроллерам, и я считаю, что это основная причина низкой производительности. У меня есть только одна идея исправить это: установить контроллер PCIe SAS (вероятно, AOC-S3008L-L8E) и подключить к нему SSD-накопители.
Итак, я хотел бы подтвердить следующее:
Прав ли я насчет основной причины или мне нужно что-то перепроверить?
Будет ли мое решение работать?
Если я повторно подключу диски к новому контроллеру, сохранятся ли мой RAID и данные? Мои исследования показывают, что да, поскольку UUID разделов останутся прежними, но я просто хочу быть уверенным.
Заранее всем спасибо.
UPD: iostat -x 1
при выполнении теста dd: https://pastebin.com/aTfRYriU
# hdparm /dev/sda
/dev/sda:
multcount = 16 (on)
IO_support = 1 (32-bit)
readonly = 0 (off)
readahead = 256 (on)
geometry = 124519/255/63, sectors = 2000409264, start = 0
-
# cat /sys/block/md2/queue/scheduler
none
Хотя планировщик AFAIK установлен на физических дисках:
# cat /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq
-
smartctl -a
(на устройствах, а не в разделах): https://pastebin.com/HcBp7gUH
UPD2:
# dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 14.389 s, 74.6 MB/s
UPD3:
Я только что сбежал fstrim
на / раздел и получил некоторые В результате скорость записи по-прежнему слишком низкая: 227 МБ / с, 162 МБ / с, 112 МБ / с, 341 МБ / с, 202 МБ / с в пяти последовательных тестах.
Измеренная низкая производительность является результатом различных факторов:
fstrim
;dd
). Для массива, полностью состоящего из твердотельных накопителей, я бы выбрал размер блока 64 КБ и, возможно (но это должно быть подтверждено реальным тестом), с «дальним» расположением. Обратите внимание, что уменьшение размера блока, хотя и полезно для потокового доступа, может ухудшить случайные чтения / записи. В основном это касается жестких дисков, но даже твердотельные накопители могут быть затронуты.dd
чтобы использовать блоки размером 1 ГБ (в соответствии с вашей первой командой), они будут разделены на множество запросов размером 512 КБ. Вместе с вашим блоком размером 512 КБ это задействует один SSD на запрос на запись, в основном ограничивая производительность потоковой записи на уровне одного SSD и отрицая любое потенциальное увеличение скорости из-за RAID. Хотя вы можете использовать max_sectors_kb
настраиваемый (находится в /sys/block/sdX/queue/max_sectors_kb
), значения больше 512 КБ могут (в некоторых конфигурациях / версиях ядра) игнорироваться;dd
сам по себе является плохим тестом: он проверяет производительность потоковой передачи только при низкой (1) глубине очереди. Даже с вашей текущей конфигурацией массива более полный тест, как fio
покажет значительное увеличение производительности по сравнению со сценарием с одним диском, по крайней мере, при случайном вводе-выводе.Что вы можете сделать, чтобы исправить сложившуюся ситуацию? В первую очередь ты должен принять стереть диски / массив; очевидно, ты необходимость сделать резервную копию в качестве первого шага. Затем:
mdadm -S /dev/md2
)blkdiscard /dev/sdX3
)mdadm --create /dev/md2 --level=10 --raid-devices=8 --chunk=64 --assume-clean /dev/sdX3
)dd
и fio
;Последнее замечание о настройке SATA: следует избегать такого разделения диска, чтобы получить максимальную производительность. Тем не менее, ваша скорость записи настолько низкая, что я бы не стал винить ваш контроллер SATA. Я бы действительно воссоздал массив в соответствии с приведенной выше инструкцией, прежде чем покупать что-нибудь новое.