Назад | Перейти на главную страницу

Как получить скорость чтения двух дисков с помощью mdadm / btrfs raid1 или zfs mirror?

Учитывая, что RAID1 записывает две копии данных, я понимаю, что чтение должно быть вдвое больше, чем с одного диска.

Я безуспешно тестировал производительность чтения различных технологий (mdadm, zfs, btrfs).

Из моего опыта:

Я проверил результаты с помощью dd, iotop и iostat.

Как можно одновременно читать данные на обоих дисках, чтобы повысить производительность чтения с одного диска вдвое?

Вопрос немного ограничен информацией о том, как был проведен тест, поэтому я предполагаю, что вы просто используете dd для записи непосредственно в файл.

BTRFS:

В терминах BTRFS RAID1 означает ДВЕ КОПИИ независимо от того, сколько дисков у вас есть в пуле. Поэтому для простоты предположим, что и данные, и метаданные хранятся в RAID1 на двух дисках. Следовательно, каждый диск является копией содержимого другого диска (в BTRFS расположение дисков может не совпадать).

Когда BTRFS выполняет чтение, он (в последний раз проверял) полагался на PID процесса, чтобы определить, с каких дисков читать сначала. Это означает, что если вы запустите один процесс, он будет читать только с одного из дисков, если только не возникнет ошибка и не нужно будет получить хорошую копию с другого диска.

В следующий раз, когда вы запустите этот процесс, он может иметь другой PID, и BTRFS сначала прочитает данные с другого диска.

MD: (MDADM)

Для последовательного чтения вы ничего не выиграете, потому что одни и те же данные находятся на обоих устройствах, и поэтому оба диска должны будут пропускать (искать) один и тот же объем данных перед началом чтения. Например. диск A должен будет подождать (пропустить) первые 10 байтов перед чтением следующих 10 байтов, и даже если диск B может прочитать первые 10 байтов одновременно с пропуском диска A, ему все равно придется ждать, пока диск A не закончит чтобы иметь возможность собрать 20 байтов, которые он должен был прочитать в памяти.

На странице руководства MD (man md):

"Обратите внимание, что балансировка чтения, выполняемая драйвером, не делает профиль производительности RAID1 таким же, как для RAID0; один поток последовательного ввода не будет ускорен (например, один dd), но несколько последовательных потоков или случайная рабочая нагрузка будут использовать более одного шпинделя. Теоретически наличие N-дискового RAID1 позволит N последовательным потокам читать со всех дисков ".

ZFS:

Я ничего не знаю о ZFS, но ожидаю, что он будет работать примерно так же, как BTRFS / MDADM.

ВЫВОД:

Для не замужем последовательные операции чтения, как вы, вероятно, делаете с dd, мало что можно получить с точки зрения производительности, если настроить RAID1 как на BTRFS, так и на MDADM.

Если вы хотите увидеть улучшенную скорость чтения (которая существует) как для BTRFS, так и для MDADM, вам необходимо выполнить несколько разных операций чтения в массиве параллельно. BTRFS, вероятно, будет распределять операции чтения на разных дисках на основе PID, а MDADM должен значительно сократить количество операций поиска. Помните, что RAID1 - это не то же самое, что RAID0, и особенно в массивах BTRFS.