четверг, 1 апреля 2010 г.

Почему не нужно делать QuickInit

Заметка в блоге Adaptec про “full-stripe writes” - что это и почему это плохо? Если в двух словах (и вольном переводе), то контроллер может работать с массивами RAID5 (да и с RAID6 почти также) двумя способами:

  • Записываемые данные могут попадать в “страйп” на одном диске и записывается только этот измененный страйп, да еще и новый блок с контрольной суммой. Т.е. операция записи блока данных в одном страйпе раскладывается на такую последовательность действий: чтение старого страйпа, чтение контрольной суммы, изменение блока данных, изменение контрольной суммы, запись нового блока и новой контрольной суммы. Этим и объясняется почему RAID5 заметно медленнее чем, например, RAID10 на операциях записи.
  • Данные записываются потоком, т.е. сразу пишутся все страйпы на весь набор дисков. В этом случае контроллер “собирает” так называемый full stripe, считает контрольную сумму и все это записывает на диски. Такой способ, очевидно, работает гораздо быстрее, но только в том случае, когда запись идет последовательно.

Но так работает контроллер в том случае, когда есть уверенность, что контрольные суммы верны (т.е. массив полностью проинициализирован и контрольные суммы не содержат заведомо неверных значений). Но, если при создании массива указать опцию “Quick Init”,  никакой полной инициализации не произойдет – будут изменены только метаданные с конфигурацией. Чтобы данные пользователя не пострадали при сбое одного из дисков, в этом случае контроллер обрабатывает операции записи несколько иначе: любая операция записи влечет за собой чтение всех страйпов, изменение нужного страйпа, расчет контрольной суммы, запись “full stripe” обратно на диски. Т.е. всегда пишем “full-stripe”, но недостающие данные сначала считываем с дисков. Таким образом, любая операция записи будет задействовать все диски в массиве. Скорость, при этом, конечно будет заметно ниже, но пока не будет проведена полная верификация такого массива, никакого улучшения ждать не следует.

Отдельно хочу отметить, что использованная здесь (да и во всех документах Adaptec) терминология немного не соответствует принятой в SNIA – Adaptec (да и многие другие,  надо сказать) под словом “страйп” (stripe) подразумевают то, что в SNIA называют “стрип” (strip), т.е. тот блок, которым оперирует контроллер при работе с RAID-массивом:

imageА  вот использованный выше термин “full stripe” как раз соответствует страйпу в терминологии SNIA. Размер страйпа по умолчанию (в текущих версиях контроллеров Adaptec) равен 256КБ, т.е. после Quick Init любая (абсолютно любая) операция записи на массиве RAID5 из 5ти дисков (как на картинке) потребует чтения 256KB*4=1MB с 4х дисков и записи 1.25МБ уже на все 5 дисков. Согласитесь, не очень это должно способствовать производительности. Мораль такова: не нужно использовать Quick Init. Лучше день подождать (выбрать опцию Clear), а потом за пять минут долететь!

Комментариев нет:

Отправить комментарий