www.team.ru
Поиск
sales@team.ru

Проектирование дисковой подсистемы сервера

Часть 1. Выбор контроллера для RAID-массива из жестких дисков

6 апреля 2021 года

Сегодня при выборе устройств хранения для серверов обычно предпочтение отдается твердотельным накопителям. Тем не менее жесткие диски остаются все еще достаточно востребованными. За последние полгода доля жестких дисков составила 47% от общего количества накопителей, установленных в наши сервера.

И это вполне оправданно. Стоимость жестких дисков в пересчете на единицу объема сейчас в 3 – 10 раз (соотношение зависит от емкости накопителя) ниже по сравнению с SSD. И хотя жесткие диски на два-три порядка медленнее твердотельных накопителей на операциях случайного доступа, их производительность при последовательном доступе вполне сравнима с производительностью SSD-накопителей. Поэтому для файловых серверов, архивов, видеонаблюдения, резервного копирования, видеомонтажа, дизайнерских или конструкторских программ и других приложений, работающих с большими файлами, жесткие диски являются вполне подходящим вариантом.

При выборе конфигурации сервера в числе прочего нужно решить, какой контроллер будет использоваться для работы с RAID-массивами из жестких дисков.

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

Но прежде мы должны оценить производительность жестких дисков, используемых для тестирования, чтобы понимать, какую производительность мы можем ожидать от RAID-массивов из этих накопителей.

Производительность жесткого диска

Производительность дисковой подсистемы измеряют для двух типов доступа к данным: случайного и последовательного.

При случайном доступе дисковая подсистема получает запросы на чтение или запись блоков данных небольшого размера (обычно 2, 4 или 8KB), которые расположены на диске или в массиве случайным образом. Производительность операций чтения и записи при случайном доступе обычно измеряется в количестве операций ввода-вывода в секунду (IOPS - Input/Output Operations per Second). Такой тип доступа характерен, например, для баз данных.

При последовательном доступе дисковая подсистема получает запросы на чтение или запись блоков данных большого размера (например, 1MB), которые расположены на диске или в массиве последовательно друг за другом. Производительность операций чтения и записи при последовательном доступе обычно измеряется в мегабайтах в секунду (MB/s). Такой тип доступа характерен, например, для систем видеонаблюдения.

В нашем тестировании использовались жесткие диски Toshiba с интерфейсом SATA емкостью 14TB. Ниже – о том, какую производительность демонстрируют эти накопители в различных режимах работы.

Чтение со случайным доступом

Максимальная производительность этого накопителя для операций чтения со случайным доступом составляет 197 IOPS для блока данных размером 4KB при глубине очереди Q=32.

Глубина очереди Q — это количество запросов на выполнение операций чтения и/или записи, которые одновременно находятся в обработке у накопителя. Если Q=1, то диск получает запрос, обрабатывает его, отправляет ответ и готов к получению следующего запроса. Если Q=32, то диск обрабатывает очередь из 32 запросов, причем в последовательности, которую определяет сам, оптимизируя маршрут движения магнитных головок. Поэтому чем больше глубина очереди, тем лучше эта оптимизация и, как следствие, выше производительность. После выполнения очередного запроса к очереди может быть добавлен следующий запрос. Максимальное значение глубины очереди для накопителей с интерфейсом SATA составляет 32 запроса.

Чем больше глубина очереди, тем больше задержка (Latency) – интервал между отправкой запроса и его выполнением. При глубине очереди 32 последнему запросу в очереди нужно ждать, пока выполнятся предыдущие 31 запрос, хотя последний в очереди запрос может быть обработан раньше или позже в зависимости от «решения» накопителя.

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

рисунок 1

Рис.1

Дисковая подсистема сервера получает одновременно множество запросов от различных приложений многих пользователей и максимальной производительности достигает тогда, когда текущая глубина очереди накопителей максимальна.

Поскольку нашей задачей является измерение максимальной производительности, которую могут обеспечить сравниваемые модели контроллеров, для чтения со случайным доступом мы проводили тестирование так, чтобы на каждый диск приходилось 32 одновременных запроса.

Запись со случайным доступом

С производительностью на операциях записи со случайным доступом в нашем случае дело обстоит не так, как с чтением, из-за наличия у тестируемых дисков встроенной кэш-памяти объемом 256MB. Пока в этой памяти есть свободное место, операции записи выполняются практически мгновенно, потому что как только данные попадают в кэш, накопитель сразу отправляет подтверждение о выполнении операции.

Когда вся кэш-память заполнена, производительность диска определяется скоростью записи данных из памяти на диск, поскольку именно с такой скоростью освобождается кэш-память для новых данных.

Благодаря большому объему кэш-памяти запись выполняется с высокой степенью оптимизации движения головок, поэтому производительность тестируемого диска на операциях записи со случайным доступом гораздо выше, чем на чтении, и составляет примерно 400 IOPS (для установившегося режима, когда кэш заполнена на 100%).

Из-за наличия кэш-памяти глубина очереди на операциях записи не влияет на производительность накопителя, однако влияет на время задержки.

Чтение и запись с последовательным доступом

Производительность жесткого диска на операциях с последовательным доступом зависит от плотности размещения информации на дорожке и скорости движения головок относительно нее. Поэтому для чтения и записи при таком типе доступа производительность одинакова. Наличие кэш-памяти никак не влияет на установившуюся скорость последовательной записи. Для наших дисков скорость чтения и записи на операциях последовательного доступа составляет 268MB/s в начальной области диска (чем дальше головки от края диска, тем меньше их линейная скорость относительно дорожки и, соответственно, ниже скорость чтения и записи).

Итак, производительность дисков, используемых в тестировании, составляет:

Модель жесткого диска Случайный доступ (IOPS) Последовательный доступ (MB/s)
ЧтениеЗаписьЧтениеЗапись
HDD Toshiba SATA 14TB197400268268

Производительность RAID-массивов

Рассчитаем ожидаемую производительность массивов RAID 0, RAID 1, RAID 10, RAID 5 из наших дисков на операциях чтения и записи со случайным и последовательным доступом.

Чтение со случайным доступом

На операциях чтения со случайным доступом для всех типов массивов производительность массива должна быть равна произведению производительности одиночного диска на количество дисков в массиве, поскольку данные можно читать одновременно со всех дисков. Для массива RAID 5 это тоже должно выполняться, поскольку блоки четности распределены равномерно по всем дискам, следовательно, данные тоже можно читать одновременно со всех дисков.

Запись со случайным доступом

На операциях записи со случайным доступом производительность рассчитывается так:

  • для RAID 0 кратна количеству дисков (пишем блоки данных одновременно на все диски);
  • для RAID 1 равна производительности одного диска (пишем одни и те же блоки на оба диска);
  • для RAID 10 кратна половине количества дисков.

А вот с RAID 5 дело обстоит сложнее.

Данные в массиве RAID 5 разбиты на блоки одинакового размера, которые называются страйпами (stripe). Каждый страйп состоит из нескольких стрипов (strip) и блока четности. Каждый стрип одного страйпа записывается на соответствующий диск массива, а на оставшийся диск записывается блок четности. Например, если массив состоит из четырех дисков, каждый страйп содержит три стрипа и один блок четности. Блоки четности распределяются равномерно по всем дискам массива. При создании массива можно, как правило, задать размер стрипа (по умолчанию он обычно равен 256KB).

При записи со случайным доступом размер блока данных обычно меньше размера стрипа, поэтому при записи такого блока данных необходимо перезаписать только один стрип и изменить блок четности.

Алгоритмы записи различаются для инициализированного и неинициализированного массива RAID 5.

Для вновь созданного и неинициализированного массива RAID 5 блоки четности не содержат достоверной информации. Но это и не важно, поскольку никаких данных на дисках тоже нет.

Любая запись данных на диск должна сопровождаться формированием и записью блока четности, поэтому алгоритм записи должен включать, во-первых, чтение всех стрипов страйпа, кроме записываемого стрипа, и, во-вторых, запись изменяемого стрипа и блока четности. Таким образом, количество дисковых операций для одной записи блока данных для неинициализированного массива RAID 5 равно количеству дисков в массиве. То есть производительность массива будет примерно одинаковой для массивов с разным количеством дисков (на самом деле, чем меньше дисков в массиве, тем производительность будет выше, поскольку на две операции записи будет приходиться меньше более медленных операций чтения).

Особо подчеркнем, что неинициализированный массив обеспечивает избыточность, поскольку содержит правильные блоки четности для всех страйпов, в которые были записаны данные.

В инициализированном массиве RAID 5 блоки четности всех страйпов уже сформированы, поэтому при записи для изменения блока четности нет необходимости знать содержимое всего страйпа и алгоритм другой: сначала читаются «старые» данные записываемого стрипа и «старый» блок четности, затем в стрип записываются новые данные и обновляется блок четности. Таким образом, вне зависимости от числа дисков в массиве каждая операция записи требует всегда только четыре дисковые операции (два чтения и две записи). Поэтому инициализированный массив RAID 5 на операциях записи будет работать быстрее, чем неинициализированный при числе дисков больше четырех. В дальнейшем мы будем рассматривать и тестировать только инициализированные массивы RAID 5.

Попробуем рассчитать, какой должна быть производительность инициализированного массива RAID 5 из определенного количества дисков и сравнить полученный результат с результатами тестов.

Для массива RAID 5 из любого количества дисков нам нужно выполнить четыре операции: два чтения и две записи. Чтение выполняется со скоростью 197 IOPS, запись – 400 IOPS. Какова будет производительность одной операции «в среднем»?

Одна операция чтения занимает 1000ms / 197 IOPS ≈ 5ms.

Одна операция записи занимает 1000ms / 400 IOPS ≈ 2.5ms

Время одной операции «в среднем»: (5ms + 2.5ms) / 2 = 3.75ms

Производительность на таких операциях: 1000ms / 3.75ms = 267 IOPS.

Тогда производительность инициализированного массива RAID5 из восьми дисков для операций записи со случайным доступом (напомним, что одна операция записи требует четыре операции) должна быть: 267 IOPS x 8 / 4 = 534 IOPS.

А для массива из четырех дисков: 267 IOPS * 4 / 4 = 267 IOPS.

Сравним потом с результатами тестов.

Последовательное чтение

На операциях чтения с последовательным доступом данные можно читать параллельно со всех дисков массива, поэтому будем исходить из того, что для массивов RAID 0, RAID 1 и RAID 10 производительность должна быть равна произведению производительности одного диска на число дисков в массиве.

Для RAID 5 один из дисков содержит блок четности, на котором головки совершают «холостой» пробег, поэтому производительность массива должна быть меньше на производительность одного диска.

Последовательная запись

На операциях записи с последовательным доступом производительность массивов должна быть такой:

для RAID 0 кратна количеству дисков (пишем данные одновременно на все диски массива);

для RAID 1 равна производительности одного диска (пишем одни и те же данные на оба диска);

для RAID 10 кратна половине количества дисков;

для RAID 5 кратна количеству дисков минус один, при условии, что размер блока данных больше размера страйпа (в этом случае мы сразу полностью перезаписываем страйп и нет необходимости предварительно читать данные и блок четности).

Сведем ожидаемые значения производительности массивов в таблицу:

Тип RAID-массиваHDDRAID 0RAID 1RAID 10RAID 5
Число дисков в массиве 124824848
Случайный доступ, чтение (IOPS)19739478815763947881576788 1576
Случайный доступ, запись (IOPS)400800160032004008001600267 534
Последовательный доступ, чтение (MB/s)26853610722144536107221448041876
Последовательный доступ, запись (MB/s)2685361072214426853610728041876

Модели тестируемых контроллеров

Мы провели сравнительное тестирование производительности основных типов контроллеров, которые используются в современных серверах. Их основные характеристики представлены в таблице:

Тип контроллераЧисло и тип портовУровни RAIDКэш-памятьИнтерфейс хостаРазъемы портов
Intel C621 Chipset 14 (8+6) SATA3 6Gb/s0/1/10/5 нетDMI 3 x2 (2 GB/s)* 7-Pin SATA/Mini-SAS
Broadcom 93414/8 SAS3 12Gb/s 0/1/10/5/50 нетPCIe 3.0 x8 (8 GB/s) Mini-SAS HD
Broadcom 93614/8/16/24 SAS3 12Gb/s0/1/10/5/50/6/601/2/4GB PCIe 3.0 x8 (8 GB/s) Mini-SAS HD
Broadcom 94608/16 SAS3 | 2/4 PCIe 3.00/1/10/5/50/6/602/4GB PCIe 3.0 x8 (8 GB/s) Mini-SAS HD
Broadcom 95608/16 SAS3 | 2/4 PCIe 4.00/1/10/5/50/6/604/8GB PCIe 4.0 x8 (16 GB/s) SLIMLINE x8
Adaptec Series 84/8/16 SAS3 12Gb/s0/1/10/5/50/6/601GB PCIe 3.0 x8 (8 GB/s) Mini-SAS HD
Adaptec 31004/8/16/24 SAS3 12Gb/s0/1/10/5/50/6/601/2/4GB PCIe 3.0 x8 (8 GB/s) Mini-SAS HD
* чипсет подключен к процессору через 4 линии DMI, но SATA-контроллер использует только 2 линии

Первым в списке стоит интегрированный SATA-контроллер чипсета Intel, который часто используется в серверах в качестве основного контроллера дисковой подсистемы. В разных чипсетах эти контроллеры отличаются главным образом количеством портов, поэтому мы рассмотрим только контроллер чипсета Intel C621 серверов на базе Intel Xeon Scalable.

Основные особенности интегрированного SATA-контроллера чипсета C621:

  • «бесплатный» контроллер, который всегда есть в сервере;
  • таких контроллеров два, первый имеет 8 портов, а второй – 6;
  • контроллер поддерживает только накопители с интерфейсом SATA;
  • поддерживаются уровни RAID 0 (2...8 дисков), RAID 1, RAID 10 (4 диска), RAID 5 (3…8 дисков);
  • до четырех RAID-массивов на контроллер;
  • контроллер не работает с расширителем портов;
  • поддерживает не более 8 накопителей;
  • использует для своей работы ресурсы центрального процессора.

Контроллеры Broadcom 9460 и 9560, кроме накопителей SAS и SATA, поддерживают также накопители NVMe с интерфейсом PCIe x4. Кроме того, контроллер Broadcom 9560 поддерживает стандарт PCIe 4.0 как со стороны центрального процессора, так и со стороны накопителей. Для контроллеров семейства 3100 модуль защиты кэш-памяти входит в комплект поставки. Все контроллеры могут устанавливаться как в низкопрофильные (кроме 24-портовых контроллеров), так и в полноразмерные слоты.

Теперь мы переходим непосредственно к тестированию производительности контроллеров при работе с массивами из жестких дисков.

Тестирование 1. Чтение со случайным доступом

Значимые параметры тестирования: размер блока данных 4KB, глубина очереди 32 на каждый диск в массиве. Наличие и настройки кэш-памяти контроллера в данном случае сколько-нибудь заметного влияния не оказывают.

рисунок 2

Рис.2

Рисунок 2 показывает производительность RAID-массивов различных типов на операциях чтения со случайным доступом. Показана также суммарная производительность однотипных RAID-массивов, отражающая способность контроллера одновременно работать с несколькими массивами. Данные для массива RAID 10 из 8 дисков для интегрированного контроллера чипсета C621 отсутствуют, поскольку такие массивы этим контроллером не поддерживаются.

Как можно прокомментировать результаты тестов?

При работе с массивами RAID 0 все контроллеры обеспечивают близкую к максимально возможной производительность.

С массивами RAID 1 все контроллеры (кроме Adaptec 3100) выдают производительность даже выше «теоретической», поскольку могут выбирать, с какого диска зеркальной пары удобнее читать те или иные блоки данных с точки зрения текущего положения головок. Здесь мы видим существенные различия в производительности контроллеров. Adaptec Series 8 имеет самый совершенный алгоритм для подобного случая. А вот для следующего поколения контроллеров разработчики Adaptec, видимо, решили не заморачиваться с такой оптимизацией, имея в виду всеобщий переход на твердотельные накопители, для которых это действительно смысла не имеет.

Массив RAID 10 объединяет несколько зеркальных пар (массивов RAID 1) в один массив RAID 0. Поэтому его производительность равна суммарной производительности массивов RAID 1, из которых он состоит. Здесь Adaptec Series 8 снова демонстрирует наилучшие показатели.

В массиве RAID 5 данные четности равномерно распределены по всем дискам массива, поэтому производительность RAID 5 на операциях случайного чтения аналогична RAID 0.

Подытоживая: на этом типе нагрузки все контроллеры демонстрируют ожидаемую производительность. Интегрированный контроллер смотрится ничуть не хуже остальных. Adaptec Series 8 выделяется отличной работой с зеркальными массивами RAID 1 и RAID 10.

Тестирование 2. Запись со случайным доступом

Значимые параметры тестирования: размер блока данных 4KB, глубина очереди 32 на каждый диск в массиве (хотя здесь она практически не важна из-за наличия кэш-памяти у дисков).

Особо следует сказать о влиянии на производительность кэш-памяти контроллера. При длительной максимальной нагрузке включение кэш-памяти контроллера «на запись» (режим «Write Back») не будет влиять на производительность дисковой подсистемы в установившемся режиме при 100% заполнении кэш-памяти, поскольку производительность будет лимитироваться скоростью записи непосредственно на пластины жесткого диска. Однако в реальных приложениях количество запросов сильно меняется во времени и включение кэш-памяти на запись значительно улучшает производительность дисковой подсистемы в моменты пиковой нагрузки. Следует только учитывать, что кэш-память энергозависима, поэтому обязательно нуждается в защите от пропажи электропитания.

Это тестирование мы провели с выключенной кэш-памятью контроллеров, поскольку, как уже было сказано, на производительность в установившемся режиме она не влияет.

рисунок 3

Рис.3

Рисунок 3 показывает производительность RAID-массивов различных типов на операциях записи со случайным доступом. Разница в работе контроллеров с массивами RAID 0, RAID 1 и RAID 10 если и существует, то она полностью нивелируется накопителями за счет наличия в них кэш-памяти. Поэтому все контроллеры показывают одинаковые результаты. Похожая картина будет с любыми современными жесткими дисками, поскольку все они оборудованы собственной кэш-памятью.

При работе с массивами RAID 5 производительность зависит еще и от скорости операций чтения, поэтому здесь результаты контроллеров отличаются друг от друга. Встроенный контроллер чипсета Intel примерно на четверть медленнее остальных из-за задержек, вызванных необходимостью использования ресурсов центрального процессора.

Интересно, что наш теоретический подсчет производительности для RAID 5 (267 IOPS для массива из четырех накопителей) оказался довольно близок к реальным значениям (250 IOPS для большинства контроллеров).

В общем, все контроллеры на этом типе нагрузки работают вполне адекватно.

Тестирование 3. Последовательное чтение

Условия тестирования: размер блока данных 1MB, для контроллеров с кэш-памятью по умолчанию включен режим упреждающего чтения (Read Ahead).

При тестировании мы использовали для глубины очереди значение 32 (только теперь для всего массива, а не для отдельных дисков), поскольку при глубине очереди 1 не полностью раскрываются различия в работе контроллеров на этом типе нагрузки.

рисунок 4

Рис.4

На этом тесте производительность контроллеров различается существенно.

Но не для массивов RAID 0, здесь все более-менее одинаково и близко к максимуму.

С массивом RAID 1 встроенный контроллер чипсета Intel работает со скоростью одиночного накопителя, с двумя такими массивами справляется с тем же успехом, а вот с тремя и четырьмя массивами одновременно работать не может: обрабатывает только один массив, остальные простаивают. Поэтому, если вы решили использовать в сервере три или четыре массива RAID 1 с подключением к интегрированному контроллеру, настоятельно рекомендуем использовать оба встроенных контроллера чипсета, подключив к каждому из них не более четырех накопителей.

С RAID 1 все три контроллера LSI работают одинаково на уровне 75% от максимально возможной производительности, достижимость которой доказывают оба контроллера Adaptec, которые выполняют последовательное чтение с зеркала с удвоенной по сравнению с одиночным диском скоростью.

При работе с массивом RAID 10 контроллер LSI 9341 медленнее LSI 9361 и LSI 9560, поскольку не имеет встроенной кэш-памяти и, как следствие, не поддерживает режим упреждающего чтения. Оба контроллера Adaptec показывают хорошие результаты.

С массивами RAID 5 в режиме последовательного чтения все контроллеры работают очень хорошо. Не вполне понятно, каким образом Adaptec 3100 способен читать данные со скоростью выше теоретически возможной, можно лишь предположить, что это связано с группировкой блоков четности на отдельных цилиндрах.

Тестирование 4. Последовательная запись

Условия тестирования: размер блока данных 1MB, глубина очереди 32 на массив.

Кэш-память на запись включена (режим «Write Back»). Включение кэш-памяти в отдельных случаях значительно влияет на производительность в установившемся режиме. Ниже об этом будет сказано подробнее.

рисунок 5

Рис.5

С массивами RAID 0 все контроллеры демонстрируют производительность, близкую к расчетной.

При работе с массивами RAID 1 и RAID 10 для контроллеров LSI 9460 и LSI 9560 необходимо включение кэш-памяти на запись (режим «Write Back»), которая задействована в алгоритме последовательной записи для «зеркальных» массивов. Без этого производительность будет ниже примерно в три раза. Для остальных контроллеров использование кэш-памяти на производительность последовательной записи не влияет.

С RAID 5 похожая ситуация возникает с контроллерами серии Adaptec 3100. Для них эффект от использования кэш-памяти еще более значительный – без нее производительность снижается на порядок.

Интегрированный контроллер чипсета с массивами RAID 5 в режиме последовательной записи работает крайне медленно, за исключением случаев, когда размер блока в точности равен размеру страйпа. Поэтому следует избегать использования массивов RAID 5 с этим контроллером, если существенная часть рабочих нагрузок связана с выполнением операций записи с последовательным доступом.

Итоги

Результаты тестирования для наглядности можно представить следующим образом:

Модель
контроллера
Random ReadRandom WriteSeq.Read Seq.Write
R0R1R10R5R0R1R10R5R0R1R10R5R0R1R10R5
C621 + + + + + + + +/- + - - + + + + ---
LSI 9341 + + + + + + + + + +/- - + + + + +
LSI 9361 + + + + + + + + + +/- +/- + + + + +
LSI 9460 + + + + + + + + + +/- +/- + + +* +* +
LSI 9560 + + + + + + + + + +/- +/- + + +* +* +
Adaptec Series 8 + ++ ++ + + + + + + + + + + + + +
Adaptec 3100 + + + + + + + + + + + ++ + + + +*
*с использованием кэш-памяти контроллера на запись (режим “Write Back”)
++ очень хорошо, выше на 10% и более ожидаемой расчетной производительности
+ хорошо, уровень расчетной производительности
+/- приемлемо, но ниже на ~25% расчетной производительности
- плохо, производительность ниже в два раза и более
-- очень плохо, производительность ниже в четыре раза и более
--- неприемлемо, производительность более чем на порядок ниже

Интегрированный контроллер чипсета Intel довольно хорошо или приемлемо (последовательное чтение на «зеркальных» массивах) работает на всех типах нагрузок, за исключением последовательной записи в массивы RAID 5.

Контроллеры LSI (сейчас они выпускаются под брэндом Broadcom) обеспечивают максимальный уровень производительности для всех типов нагрузок, уступая контроллерам Adaptec только на операциях последовательного чтения для «зеркальных» массивов.

Контроллеры Adaptec везде показали отличные результаты, превзойдя в некоторых режимах показатели расчетной производительности.

Дмитрий Командный