Я продолжаю видеть статьи, в которых для RAID 1 (и RAID 10) штраф за запись в IOPS описывается как 2. Конечно, RAID 0 будет иметь штраф 1, поскольку каждая запись просто записывается на диск. RAID 1 описывается как "требующий двух операций записи", поэтому штраф 2.
Но разве не должно быть 1, поскольку данные записываются одновременно?
С точки зрения приложения или сервера, использующего диск, массив RAID 1 должен выглядеть как единое целое, которое записывает данные на оба диска одновременно. Один диск может отставать от другого, но реальный аппаратный RAID-контроллер должен иметь возможность одновременно начинать запись и сообщать, что операция записи завершена, когда завершился более медленный диск, что должно быть лишь незначительно выше, чем в RAID -0, если вообще. Таким образом, штраф IOPS должен быть равен 1 для RAID 1 или максимум 1,2.
Я понимаю, что есть две операции записи, поэтому есть 2 «IOPS», но они являются внутренними для контроллера RAID.
Я что-то упустил?
Если бы RAID 1 просто подключал кабель, влияние на производительность было бы нулевым (коэффициент 1,0), но зеркалирование RAID 1 - это больше, чем просто горячее подключение кабеля - фактическая работа необходимо сделать для записи данных на два диска и обработки результатов этой записи с каждого диска.
Эта дополнительная работа - фактор, о котором они говорят, влияя на производительность. Независимо от того, происходит ли операция ввода-вывода где-то в ОС (программный RAID) или в выделенном сопроцессоре / контроллере (аппаратный RAID), по-прежнему необходимо выполнить две записи для каждого фрагмента данных, и результаты этой записи (успех, отказ или on_fire) необходимо "обработать".
В худшем случае вы, вероятно, столкнетесь (программный RAID-1, реализованный в ОС), что означает, что ядро выполняет две записи и два разговора с контроллером диска.
Это вдвое меньше штрафа записи, поскольку мы выполняем в два раза больше работы почти на всем протяжении стека.
(На самом деле это, вероятно, ближе к 1.9 - в конце концов, мы не выполняем два вызова write () к файловой системе - но давайте просто округлим его для пессимизма.)
В лучшем случае (аппаратный RAID 1, реализованный с помощью выделенного контроллера) ядро ведет один сеанс связи с контроллером, но контроллер по-прежнему ведет два сеанса связи (по одному с каждым диском), поскольку ему необходимо обеспечить получение команды обоими дисками, запишите данные и подтвердите, что данные были записаны (или обработайте любые ошибки, о которых сообщают приводы).
Вероятно, это примерно 1,2-кратный штраф за дополнительную работу контроллера, как вы предположили в своем вопросе - вы просто экономите дополнительную работу внутри ядра (что намного дороже, чем то, что делает контроллер).
Теперь, поскольку мы сисадмины и нам платят за то, чтобы мы были пессимистами, мы, очевидно, возьмем худший вариант производительности, точно так же, как когда мы округлили коэффициент производительности для программного RAID - поэтому, если кто-то спросит, мы скажем у них штраф за запись вдвое, даже для их модного аппаратного контроллера, и пусть они будут счастливы, когда система в среднем работает с 1,5-кратным штрафом :-)
реальный аппаратный RAID-контроллер должен иметь возможность одновременно начать запись и сообщать о завершении операции записи, когда завершится более медленный диск, что должно быть лишь незначительно выше, чем в RAID-0, если вообще.
Однако каждая запись дает половину доступной общей производительности. В вашем примере на каждый диск RAID 0 необходимо записать только половину того, что было отправлено на контроллер RAID. В RAID 1 каждый диск должен все это записывать.
Это ставит RAID 0 примерно в два раза быстрее, чем RAID 1 для записи (в группе RAID с 2 дисками), в то время как они равны по теоретической скорости чтения.