Linux научилась проверять RAID6 втрое быстрее. Цена ускорения — 512 МБ памяти
Проверку многотерабайтных RAID-массивов в Linux удалось ускорить втрое благодаря изменению порядка чтения данных. Разработчик Давид Гильен Фандос добился такого результата в утилите raid6check. Правку включили в исходный код mdadm, который управляет программными RAID-массивами. Ускорилась отдельная программа диагностики, а не вся дисковая подсистема Linux.
До изменения raid6check последовательно обрабатывала по одной полосе данных на каждом накопителе. Такой подход создавал много мелких операций и не позволял полностью использовать возможности дисковой подсистемы. Теперь программа объединяет чтение нескольких полос в пакеты, уменьшая накладные расходы и загружая накопители более крупными порциями работы.
Для новой схемы разработчик выбрал буфер объёмом 512 МБ. По оценке автора, дальнейшее увеличение памяти почти не давало дополнительного ускорения. Проверка стала быстрее за счёт другого порядка операций ввода-вывода, а не нового алгоритма расчёта чётности. Платой за выигрыш стала дополнительная нагрузка на оперативную память сервера.
Трёхкратный прирост автор изменения получил на массиве из шести обычных жёстких дисков по 4 ТБ каждый. Для испытания использовались современное ядро Linux и система с большим запасом оперативной памяти. Разработчик ожидает похожего результата на близких конфигурациях, но измерений на SSD, других количествах дисков и серверах с ограниченной памятью пока не представил.
Утилита raid6check проверяет RAID6, где два набора контрольной информации позволяют выявлять ошибки и восстанавливать данные при отказе накопителей. Программа сравнивает сведения о чётности в каждой полосе и пытается определить проблемный диск. В обычном режиме массив остаётся доступным для работы, а проверка не записывает данные, если специально не включено автоматическое исправление.
У ускорения есть ограничения. Согласно документации, raid6check запускается только для исправного, не деградировавшего массива RAID6. Массив с отсутствующим или вышедшим из строя диском утилита проверять отказывается. Обновление также не ускоряет RAID5, аппаратные контроллеры, ZFS или штатный механизм проверки через интерфейс ядра md, поскольку код изменён исключительно в пользовательской программе.
Оптимизация не устраняет других проблем целостности. Например, ранее обсуждавшаяся ошибка прямой записи O_DIRECT могла вызывать рассогласование содержимого дисков программного массива. Нынешняя правка меняет только способ чтения и проверки данных в raid6check. Улучшение скорости нельзя считать исправлением причин повреждения информации.
Новый код уже принят в основной репозиторий mdadm, однако последнюю официальную версию 4.6 выпустили ещё в марте 2026 года, до появления правки. Поэтому установленная в дистрибутиве версия утилиты не обязательно поддерживает пакетную обработку. Для появления ускорения потребуется сборка mdadm с соответствующим изменением или пакет дистрибутива, куда разработчики перенесут патч.