У меня есть дешевый 2-х отсековый NAS с 2-х ТБ HDD. Чтобы быть более устойчивым к сбоям диска, я думаю купить второй 2-х ТБ HDD и поместить его в RAID1 с Linux mdadm. Файловая система — ext4.
Увеличит или уменьшит ли это производительность NAS? А как насчет производительности только чтения или записи?
В сети существует множество мнений по этому поводу, но единого мнения нет.
Спасибо.
Редактировать:
Итак, у меня уже есть три разных ответа: «чуть быстрее», «вы не заметите» и «скорость снизится, если вообще снизится». (Меня в первую очередь интересует производительность чтения.) Википедия говорит: «производительность чтения может увеличиваться примерно линейно кратно количеству копий». Какой из них?
Редактировать 2:
Я нашел все больше доказательств в поддержку увеличения производительности чтения RAID1, включая страницу руководства MD:
Изменения записываются на все устройства параллельно. Данные считываются с любого устройства. Драйвер пытается распределить запросы на чтение по всем устройствам, чтобы максимизировать производительность.
Я также обнаружил RAID10 от MD с --layout=f2
, который обеспечивает избыточность RAID1 с производительностью чтения RAID0 и может использоваться всего с двумя дисками. Однако производительность записи снижается, поскольку последовательная запись включает в себя поиск обоих дисков вперед и назад между удаленными частями диска. man md
для получения подробной информации.
решение1
Да,Реализация RAID1 в Linux ускоряет операции чтения с диска в два раза при условии, что две отдельные операции чтения с диска выполняются одновременно.Это означает, что чтение одного файла размером 10 ГБ на RAID1 не будет происходить быстрее, чем на одном диске, но чтение двух отдельных файлов размером 10 ГБ* будет происходить быстрее.
Чтобы продемонстрировать это, просто прочитайте некоторые данные с помощью dd
. Перед выполнением чего-либо очистите кэш чтения с диска с помощью sync && echo 3 > /proc/sys/vm/drop_caches
. В противном случае hdparm
будет заявлять о сверхбыстром чтении.
Отдельный файл:
# COUNT=1000; dd if=/dev/md127 of=/dev/null bs=10M count=$COUNT &
(...)
10485760000 bytes (10 GB) copied, 65,9659 s, 159 MB/s
Два файла:
# COUNT=1000; dd if=/dev/md127 of=/dev/null bs=10M count=$COUNT &; dd if=/dev/md127 of=/dev/null bs=10M count=$COUNT skip=$COUNT &
(...)
10485760000 bytes (10 GB) copied, 64,9794 s, 161 MB/s
10485760000 bytes (10 GB) copied, 68,6484 s, 153 MB/s
Чтение 10 ГБ данных заняло 65 секунд, тогда как чтение 10 ГБ + 10 ГБ = 20 ГБ данных заняло в общей сложности 68,7 секунд, что означаетМногодисковое чтение значительно выигрывает от RAID1на Linux. skip=$COUNT
часть очень важна. Второй процесс считывает 10 ГБ данных со смещения 10 ГБ.
Ответ Джареда и комментарии ssh относительноhttp://www.unicom.com/node/459неверны. Тест оттуда доказывает, что чтение с диска не выигрывает от RAID1. Однако тест был выполнен с помощью инструмента bonnie++ benchmarking, который не выполняет два отдельных чтения одновременно. Автор прямо заявляет, что bonnie++ не может использоваться для бенчмаркинга RAID-массивов (обратитесь к файлу readme).
решение2
Да, вы получите повышение производительности чтения + избыточность. Вы можете легко себе это представить, поскольку вы можете читать части файлов одновременно с двух разных жестких дисков, поскольку файлы находятся на обоих жестких дисках.
Таким образом, теоретически, если RAID-контроллер выполняет свою работу правильно, можно получить ускорение O(n).
решение3
Нет, вы не получите никаких преимуществ при чтении из mdadm RAID1. Я спрашивал себя об этом некоторое время назад.
dstat
показывает использование дисков, также bwm-ng
очень помогает, особенно в этом случае, так как он может показывать использование чтения/записи на отдельных членах RAID mdadm. Просто нажмите n(далее) несколько раз, он переключится со статистики интерфейса на статистику диска. Затем переключитесь на максимальные значения с помощью , tчтобы увидеть максимальное количество чтения/записи с каждого диска. Вы увидите следующее:
При записи на том RAID1 bwm-ng показывает 2 записи, одновременно записывая на 2 диска. При чтении с тома RAID1 bwm-ng показывает чтение с одного диска (члена массива).
решение4
ДАи НЕТ одновременно. По умолчанию параметр RAID 1 "read ahead" слишком мал, чтобы заметить преимущество при передаче одного файла, однако все, что вам нужно сделать, это настроить его.
Чтобы проверить значение, введите:
# blockdev --getra /dev/md0
256
Теперь вы можете задать опережающее чтение (в секторах по 512 байт) на каждое устройство raid. Синтаксис:
## Set read-ahead to 32 MiB ##
# blockdev --setra 65536 /dev/md0
В большинстве случаев простая установка этого параметра удвоит скорость чтения одного файла (при условии, что оба диска одинаковы).
Примечание: это применимо ко всем конфигурациям рейда.