Возможности PCI-E SSD Intel 910 - Академия Selectel
В панель

Возможности PCI-E SSD Intel 910

Тирекс Тирекс Самый зубастый автор 17 января 2013

Раньше у нас долгое время для кеширования random IO использовались intel 320 серии. Это было умеренно быстро, в принципе, позволяло сократить число шпинделей. При этом обеспечение высокой производительности на запись требовало, мягко говоря, неразумное количество SSD. Наконец, в конце лета к нам приехал Intel 910. Сказать, что я глубоко впечатлён — не сказать ничего. Весь […]

Изображение записи

Раньше у нас долгое время для кеширования random IO использовались intel 320 серии. Это было умеренно быстро, в принципе, позволяло сократить число шпинделей. При этом обеспечение высокой производительности на запись требовало, мягко говоря, неразумное количество SSD.

Наконец, в конце лета к нам приехал Intel 910. Сказать, что я глубоко впечатлён — не сказать ничего. Весь мой предыдущий скепсис относительно эффективности SSD на запись развеян.

Впрочем, обо всём по порядку.

Intel 910 — это карточка формата PCI-E, довольно солидных габаритов (под стать дискретным видеокартам). Впрочем, я не люблю unpack-посты, так что перейдём к самому главному — производительности.

Описание устройства

Но сначала мы поиграем в Alchemy Classic, в которой если перетащить один LSI поверх 4х Hitachi, то получится Intel.

Устройство представляет собой особым образом адаптированный LSI 2008, к каждому порту которого «подключено» по одному SSD устройству ёмкостью 100Гб. Фактически все подключения выполнены на самой плате, так что подключение видно только при анализе взаимоотношений устройств.

Intel 910

Примерная схема такая:

Заметим, LSI’ный контроллер перепилен очень сильно — у него нет своего биоса, он не умеет быть загрузочным. В lspci он выглядит так:

04:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03)
        Subsystem: Intel Corporation Device 3700

Структура устройства (4 SSD’шки по 100Гб) подразумевает, что пользователь сам решит, как именно использовать устройство — raid0 или raid1 (для тонких ценителей — raid5, хотя с большой вероятностью это будет самая большая глупость, которую можно сделать с устройством подобного класса).

Обслуживается он драйвером mpt2sas.
К нему подключено 4 scsi устройства, которые объявляют себя hitachi:

 sg_inq /dev/sdo
 Vendor identification: HITACHI 
 Product identification: HUSSL4010ASS600 

Никаких расширенных sata-команд они не поддерживают (так же как и большинство расширенных сервисных команд SAS) — только минимум необходимого для полноценной работы в качестве блочного устройства. Хотя, к счастью, поддерживает sg_format с опцией resize, что позволяет сделать полноценное резервирование для меньшего влияния housekeeping’а при активной записи.

Тестирование

Всего мы делали 5 разных тестов, позволяющие оценить характеристики устройства:

  • тест на произвольное чтение;
  • тест на произвольную запись;
  • тест на смешанное параллельное чтение/запись (заметим, говорить про пропорции «чтения/записи» не приходится, т.к. каждый поток «молотил» отдельно друг от друга, конкурируя за ресурсы, как это чаще всего бывает в реальной жизни);
  • тест на максимальную линейную производительность на чтение;
  • тест на максимальную линейную производительность на запись.

Тесты на линейные чтение и запись

В общем случае, эти тесты мало кому интересны, для обеспечения «потока» HDD подходят куда лучше, т.к. у них выше ёмкость, ниже цена и весьма приличная линейная скорость. Простенький сервер с 8-10 SAS-дисками (или даже быстрыми SATA) в raid0 вполне способен забить десятигигабитный канал.

Но, всё-таки, вот показатели:

Линейное чтение

Для максимальных показателей мы выставили 2 потока по 256к на каждое устройство. Итоговая производительность: 1680МБ/с, без колебаний (девиация составила всего 40 мкс). Lantency при этом составила 1.2мс (для блока 256к это более чем хорошо).

Фактически, это означает, что в одиночку это устройство на чтение способно полностью «в потолок» забить канал 10Гбит/с и показывать более чем впечатляющие результаты на канале в 20Гбит/с. При этом оно будет показывать постоянную скорость работы вне зависимости от нагрузки. Заметим, сам Intel обещает до 2ГБ/с.

Линейная запись

Для получения самых высоких цифр по записи нам пришлось снизить глубину очереди — один поток на запись на каждое устройство. Остальные параметры были аналогичными (блок 256к)
Пиковая скорость (секундные отсчёты) составила 1800МБ/с, минимум — около 600МБ/с. Средняя скорость записи 100% составила 1228МБ/с. Внезапное снижение скорости записи — родовая травма SSD из-за работы housekeeping’а. В данном случае падение было до 600МБ/с (примерно в три раза), что лучше, чем в старых поколениях SSD, где деградация могла доходить до 10-15 раз. Intel обещает скорость порядка 1.6ГБ/с при линейной записи.

Random IO

Разумеется, линейная производительность никого не интересует. Всем интересна производительность под тяжёлой нагрузкой. А что может быть самым тяжёлым для SSD? Запись на 100% объёма, мелкими блоками, во много потоков, без перерывов в течение нескольких часов. На 320ой серии это приводило к падению производительности с 2000 IOPS до 300.

Параметры теста: raid0 из 4х частей устройства, делается linux-raid (3.2), 64-бита. Каждая задача с режимом randread или randwrite, для смешанной нагрузки описываются 2 задачи.
Заметим, в отличие от многих утилит, которые соотносят число операций чтений и записи в фиксированном процентном соотношении, мы запускаем два независимых потока, один из которых всё время читает, другой всё время пишет (это позволяет полнее нагрузить оборудование — если у устройства проблемы с записью, оно всё ещё может продолжать обслуживать чтение). Остальные параметры: direct=1,buffered=0, режим io — libaio, блок 4к.

Random read

Intel 910 random read
iodepthIOPSavg.latency
176810,127
2148930,131
4282030,139
8530110,148
16887000,178
32984190,323
641123780,568
1281488450,858
2561491961,714
5121480673,456
10241484456,895

Заметно, что оптимальной нагрузкой является что-то порядка 16-32 операций одновременно. Очередь длинной в 1024 добавлена из спортивного интереса, разумеется, это не является адекватными показателями для product (но даже в этом случае latency получается на уровне довольно быстрого HDD).

Random write

Intel 910 random write
iodepthIOPSavg.latency
1144800,066
2269300,072
4478270,081
8674510,116
16857900,184
32856920,371
64895890,763
128960761,330
2561024962,495
512966585,294
10249724310,52

Аналогично — оптимум находится в районе 16-32 одновременных операций, путём весьма значительного (10-кратного роста) latency можно «выжать» ещё 10к IOPS.

Интересно, что на малой нагрузке производительность на запись выше. Вот сравнение двух графиков — чтения и записи в одном масштабе:

Intel 910 read or write

Смешанная нагрузка

Самый тяжёлый вид нагрузки, который можно считать заведомо превышающим любую практическую нагрузку в продакт-среде (включая OLAP).

Intel 910 read and write

Поскольку по этому графику реальную производительность не понять, то вот те же цифры в куммулятивном виде:

Intel 910 read and write cummulative
iodepthIOPS readIOPS writeavg.latency
1+16920130150,141
2+211777201100,166
4+421541333920,18
8+836865535220,21
16+1644495584570,35
32+3249852589180,63
64+6455622630011,14

Видно, что оптимальная нагрузка так же находится в районе от 8+8 (то есть 16) до 32. Таким образом, не смотря на очень высокие максимальные показатели, нужно говорить про максимум в ~80к IOPS при нормальной нагрузке.

Единственным минусом этого устройства являются определённые проблемы с горячей заменой — PCI-E устройства требуют обесточивать сервер перед заменой.

Читайте также: