Я использую Debian Jessie.
# uname -a
Linux host 4.9.0-0.bpo.3-amd64 #1 SMP Debian 4.9.30-2+deb9u5~bpo8+1 (2017-09-28) x86_64 GNU/Linux
И настроили RAID6.
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1]
md0 : active raid6 sda[0] sdd[3] sdc[2] sdb[1]
19532611584 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
bitmap: 1/73 pages [4KB], 65536KB chunk
Это 4x Seagate Enterprise 10 ТБ, 7200 об / мин. При копировании большого файла из массива RAID на внутренний системный диск (который является SSD) я получаю среднюю пропускную способность 220 МБ / с. Копирование больших файлов с SSD в массив выполняется со скоростью 145 МБ / с. Когда ежемесячная проверка RAID завершена (запускается при выполнении задания cron checkarray --cron --all --idle --quiet
что является поведением по умолчанию) я вижу
# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid1]
md0 : active raid6 sda[0] sdd[3] sdc[2] sdb[1]
19532611584 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]
[>....................] check = 0.7% (72485728/9766305792) finish=817.2min speed=197694K/sec
bitmap: 1/73 pages [4KB], 65536KB chunk
Так что скорость повторной синхронизации тоже отличная. Теперь наблюдается странное поведение. Пока выполняется проверка, я могу записывать данные в массив параллельно с хорошей производительностью. Скорость записи составляет ~ 100 МБ / с, и видно, что скорость синхронизации RAID снижается. После завершения копирования в массив скорость синхронизации снова увеличилась до предыдущей. Проблема в том читает из массива во время проверки. Чтения выполняются со скоростью <20 МБ / с. И скорость ресинхронизации для RAID не снижается. Понятия не имею, в чем причина этого.
# ps aux | grep md0
root 211 0.4 0.0 0 0 ? S Okt22 93:40 [md0_raid6]
root 648 0.0 0.0 0 0 ? S Okt22 0:01 [jbd2/md0-8]
root 15361 4.4 0.0 0 0 ? DN 02:25 0:00 [md6_resync]
root 15401 0.0 0.0 12752 2040 pts/2 S+ 02:26 0:00 grep md6
# ionice -p 211
none: prio 0
# ionice -p 15361
idle
Процесс повторной синхронизации установлен на idle
что правильно. Планировщик ввода / вывода настроен на CFQ
для всех нижележащих физических дисков.
В этой системе также есть RAID1
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1]
md1 : active raid1 sde[0] sdf[1]
3906887488 blocks super 1.2 [2/2] [UU]
bitmap: 2/30 pages [8KB], 65536KB chunk
С этим массивом проблем нет. Я могу писать и читать из массива с хорошей скоростью, пока выполняется проверка. Смотреть /proc/mdstat
, скорость синхронизации уменьшается при активности ввода-вывода и увеличивается после повторного завершения. Но не для чтения ввода-вывода на md0
/ RAID6. Что касается md0
нормальная скорость синхронизации очень хорошая, нормальные операции чтения и записи без повторной синхронизации хороши, и даже запись в массив при выполнении проверки RAID очень хороша, почему читается так плохо при ежемесячной проверке?
Позвольте мне начать с того, что я понятия не имею о mdadm или Debian - однако я думаю, что эффект, который вы наблюдаете, является очень общим.
Обычно скорость записи ниже, чем скорость чтения, если вы посмотрите, как работает RAID 6: при чтении все четыре диска могут быть прочитаны одновременно. Данные четности пропускаются, и вместо этого следующий сегмент данных может быть предварительно прочитан в кэш. Наилучшая скорость чтения, которую можно достичь, это п раз скорость одного диска.
При записи данные дополняются двумя разными сегментами четности, которые также необходимо записать на диск. Когда все диски записывают одновременно, наилучшая скорость п-2 раза больше одиночной скорости.
Повторная синхронизация или восстановление RAID 6 с использованием нескольких больших дисков займет много времени. По сути, каждая полоса должна быть прочитана и сравнена с данными избыточности, которые также хранятся на дисках. Диски сильно загружены, и любой продуктивный ввод-вывод должен конкурировать со всеми чтениями. Вот почему чтение происходит медленно. Чтобы иметь приличную задержку чтения, фоновая синхронизация должна выполняться с низким приоритетом, то есть она должна останавливаться и приостанавливаться на мгновение, когда обнаруживается другой ввод-вывод.
С другой стороны, записи сначала попадают в кеш и, кажется, сразу же завершаются - пока есть доступный кеш. Настоящая запись рано или поздно произойдет в фоновом режиме. Только когда ваш объем записи превысит емкость кеширования, вы заметите серьезное замедление.
Чтобы получить скорость чтения на достойном уровне во время повторной синхронизации, вам необходимо запустить фоновую проверку в медленном темпе, чтобы начать с нее, или найти способ приостановить ее, когда будут выполнены продуктивные чтения.