NVMe SSD. «Случайное» знакомство.

8 май, 2015 - 07:46Игорь Дражан

Протокол NVMe появился в серверах для того, чтобы раскрыть потенциал SSD в критичных к производительности приложениях. Повысить скорость отклика баз данных — одна из основных целей.

Четыре года назад Intel, Cisco, Dell, EMC, IDT, NetApp, Oracle и примкнувшие к ним 80 с лишним компаний создали рабочую группу с некрасивым названием NVMHCI (Non Volatile Memory Host Computer Interface). Таких разных попутчиков сплотила цель создания масштабируемого интерфейса NVM Express (NVMe), который смог бы полностью раскрыть огромный потенциал твердотельных накопителей на шине PCI Expess. Сегодня Intel уже производит NVMe SSD, другие производители вот-вот начнут, понемногу появляется сопутствующая инфраструктура.

Чего им всем не хватало, кому это нужно? SSD c классическими интерфейсами SAS и SATA давно вышли на уровень производительности под 100 KIOPS по чтению и 20-55 KIOPS по записи — при том, что в реальных приложениях увидеть и 5 KIOPS большая редкость. Производительность SSD в потоковых операциях в MB/s уже давно перекрывает все потребности приложений OLTP и остается желанной опцией в OLAP-задачах с большими объемами данных.

Все дело в другом ключевом параметре — латентности записи (задержках отклика при обращениях к устройству хранения коротким одиночным блоком данных). Именно он критичен в ситуациях с «конфликтом блокировок» при записи в таблицы SQL, и потому актуален. Уменьшить количество обращений к данным на медленных жестких дисках позволяют техники использования промежуточного слоя на скоростных носителях для размещения часто запрашиваемых данных. Практически любой SQL-сервер кеширует чтение в быстрой, хотя и энергозависимой RAM. В мире 1С: Предприятие 8 (ЗУП или УПП) привычен (и достаточно безопасен) перенос tempDB на RAMdrive. Но основные таблицы баз данных (DB) в энергозависимой оперативной памяти уже не разместишь — риски перевешивают выгоды.

Протокол NVMe ускоряет операции I/O за счет отказа от стека команд SAS (SCSI) — давнего наследия подсистем хранения данных. Временные задержки трансляции команд стека были неразличимо малы на фоне медленных HDD, с переходом к хранению на флэш-памяти они стали ощутимой обузой. NVMe SSD подключаются прямо в шину PCIe . Корпоративные приложения должны получить прирост производительности от смещения I/O-активности с SAS/SATA SSD и HDD на NVMe SSD. Запоминающие устройства этого нового слоя хранения энергонезависимы (non-volatile), но задержки обращения к ним существенно ниже, приближаясь к уровню задержек оперативной (volatile) памяти.

Что предлагает Intel

Intel выпускает три серии Data Center (DC) NVMe SSD для серверов: DC P3700 под интенсивную запись, DC P3600 под смешанную нагрузку и DC P3500 — под приложения с приоритетом чтения. Все они предназначены для работы с массивами данных, где критичны пропускная способность и минимальные задержки в канале доступа. Ускорение обращения к данным с использованием протокола NVMe сулит заметные эффекты в работе с базами данных, приложениях виртуализации, в обработке больших данных (big data), высокопроизводительных вычислениях (HPC).

Паспортные характеристики производительности NVMe SSD значительно превосходят показатели SATA SSD:

Таблица 1

NVMe SSD. «Случайное» знакомство.

Источник: ark.intel

Отличаются серии не только производительностью, но и запасом ресурса: для P3700 допускается ежедневная перезапись 10 объемов SSD (как и для серии S3700), для P3600 — 3, а для P3500 — 0.3 емкости накопителя в сутки.

Первое свидание

Сразу бросается в глаза превосходство NVMe SSD в показателях, критичных для нагрузки случайного доступа: производительности в IOPS и задержках отклика (латентности) в миллисекундах. Произвольными (random) выборками оперируют транзакционные базы данных. С них и решили начать. Подсистемы хранения тестируют стандартным измерителем — IOmeter’ом. Задавая входные параметры: размер блока данных (4-64К) и длину очереди запросов (1-256), имитируют дисковую активность в реальных приложениях.

Для тестов мы взяли 1/2 Height PCIe 3.0 SSD емкостью 400GB из семейства P3600 — с хорошим балансом характеристик и умеренной ценой (около $1100 в рознице). В «нижние» оппоненты ему определили стандартный для серверов и сопоставимый по стоимости SATA SSD 400GB интеловской серии S3700. Эти SSD не взаимозаменяемы, у них разные роли и модель использования. Тем не менее, интересно сравнительное позиционирование NVMe SSD относительно соседних слоев хранения: в какой степени их поведение отвечает разлету их паспортных параметров. «Верхним» оппонентом был выбран RAMdrive — виртуальный диск в оперативной памяти.

Таблица 2

NVMe SSD. «Случайное» знакомство.

Источник: ark.intel

Цель тестов

Сравнить производительность трех типов носителей: RAMdrive, NVMe SSD, SATA SSD, в операциях случайного доступа короткими блоками. Без обсуждения операционной среды, структуры приложений, реализаций многослойного (tiered-) хранения, их выгод и рисков — только цифры.

Тестовый полигон

NVMe SSD. «Случайное» знакомство.

Рис. 1

Таблица 3

NVMe SSD. «Случайное» знакомство.

Тестовая среда

ПО IOMeter v. 2006.07.27 (Intel) дает возможность генерировать нагрузку и замерять производительность в операциях с блоками разного размера и очередями команд разной длины. Использовались тесты:

  • «База данных»: блоки 4К — 64К при длине очереди Q=1... 256 (67% чтение / 33%запись)

  • «Cлучайное чтение и запись»: блоки 4К — 64К при длине очереди Q=1...256 (100% чтение / 100% запись)

  • «Последовательное чтение и запись» блоков 512К — 16МБ при длине очереди Q=1...4 (100% чтение / 100% запись) (эти результаты попадут во вторую часть статьи)

Практиков всегда интересует производительность SSD в режиме продолжительной эксплуатации (а не режим «нового SSD» или «SSD из коробки», при котором результаты максимальные — именно их производители используют в качестве паспортных данных).

Для однозначной трактовки параметров твердотельной памяти SSD и их замеров ассоциация SNIA (Storage Networking Industry Association) предлагает спецификации по тестированию производительности (Performance Test Specification, PTS). Есть отдельные релизы для клиентских и серверных накопителей. Нам интересны только вторые (PTS-E v.1.0).

Тестовое ПО использует при выполнении конфигурируемый тестовый файл. Мы взяли файл размером 30 ГБ (примерно 1/2 RAM).

Тесты многопроходные. Например, общий тест «База данных» состоит из 45 прогонов с разными параметрами (длиной очереди команд Q= 1, 2, 4, 8, 16, 32, 64, 128, 256, размером блока 4К, 8К, 16К, 32К, 64К — итого 9×5 = 45 тестов, каждый выполнялся 3 минуты).

Все тесты для трех типов носителей: RAMdrive, NVMe SSD, SATA SSD прогонялись по три раза, результаты усреднялись.

Из полученного большого массива информации мы отобрали самые интересные (на наш предвзятый взгляд) результаты, которые применимы в реальной практике — например, владельцами баз данных под MS SQL (и зачастую пользователями 1С:Предприятие 8 в одном лице).

Тест «база данных»

IOmeter запускался в режиме 67% Read / 33% Write. Начали с RAMdrive, смонтированного в оперативной памяти диска

График 1

NVMe SSD. «Случайное» знакомство.

Увеличение длины очереди запросов не сильно влияет на производительность в IOPS, вне зависимости от размера блока.

График 2

NVMe SSD. «Случайное» знакомство.

Существенный рост латентности начинается с длины очереди Q=16.

На практике, хорошо, если текущая длина очереди равна количеству установленных физических носителей. Чем очереди короче — тем лучше для операционных приложений и терпения пользователей. В правильно подобранной дисковой подсистеме SQL-сервера текущая очередь, если и имеет пики — то очень краткие и локальные.

Для имитации реальной нагрузки (к примеру, обмена данными между распределенными БД при перепроведении периода или расчете заработной платы в 1С:Предприятие) примем длину текущей очереди равной 8. Размер блока данных взяли 8K (как в Oracle) и 64K (как в MS SQL).

Производительность всех трех испытуемых в IOPS.

График 3

NVMe SSD. «Случайное» знакомство.

График 4

NVMe SSD. «Случайное» знакомство.

При работе малыми блоками 8K чуть лучше себя показывают SATA SSD, зато при блоках 64K производительность NVMe SSD примерно на 50% выше. Куда более интересны результаты по латентности доступа к данным.

График 5

NVMe SSD. «Случайное» знакомство.

График 6

NVMe SSD. «Случайное» знакомство.

По задержкам чтения NVMe SSD и SATA SSD более-менее сопоставимы. Замеры задержек записи принесли первый большой сюрприз: показатели NVMe SSD сравнимы с RAMdrive, превосходя SATA SSD более чем в 2 раза на блоках 8 KB и в 12 раз (!!!) на блоках в 64 KB. Перепроверили несколько раз, корректировали условия — результат получался аналогичным.

Опять заглянем в паспорта SSD:

Таблица 4

NVMe SSD. «Случайное» знакомство.

Источник: ark.intel

Паспортная латентность при линейном (sequential) чтении у P3600 в 6 раз ниже, чем при чтении произвольного доступа (random). Блок в 64 KB, на котором получен очень уж впечатляющий результат, корректно рассматривать как переходной от random к sequential. Возможно, мы наблюдаем эффект от имитации работы алгоритмов SQL-серверов: в связи с кешированием чтения (SQL cache обычно развернут в RAM) чтение происходит сразу по нескольку порций в 64K, тем самым усиливая эффект «линейности» чтения. Запись же происходит обычным «случайным» образом.

Очевидно, что разрыв в производительности в 12 раз на конкретном тесте не может определяться аппаратной спецификой. Скорее, сказывается программно/аппаратная оптимизация драйверов/прошивки конкретной модели SSD P3600 под одну из наиболее типовых задач — MS SQL Server.

Краевые эффекты

Если смешанные режимы теста «база данных» (67%R/33%W) имитируют реальные приложения, то «чистая» нагрузка (100% Read и 100% Write) позволяет оценить особенности и сильные стороны накопителей. Что мы и сделали, изменяя длину очереди команд и размер блока данных 4 — 8 — 64K.

График 7

NVMe SSD. «Случайное» знакомство.

График 8

NVMe SSD. «Случайное» знакомство.

Бросается в глаза существенная разница между латентностью чтения и записи коротким блоком 4-8К, для обоих SSD.

Для блока 4K (График 7) и очереди Q=1 задержки чтения NVMe SSD почти в 5 раз больше задержек записи, c увеличением длины очереди разрыв уменьшается и только ближе к Q= 16 чтение становится быстрее записи. В абсолютных значениях при Q=1 латентность NVMe SSD на запись составляет 30-35 микросекунд, поднимаясь до 180 микросекунд при Q=16. Задержки чтения при Q= 1...8 держатся на полочке 140-150 микросекунд, поднимаясь до 185 микросекунд при Q=16.

Похоже ведет себя и SATA SSD. При Q=1 задержки чтения втрое выше задержек записи, с удлинением очереди разрыв уменьшается до 20% при Q=8. А к Q=16 уже латентность на чтение приблизительно на 10% ниже латентности на запись.

Двойное превосходство NVMe SSD над SATA SSD по уровням задержек при записи при Q=1, 2 уменьшается до полуторакратного при Q=4, 8, 16. Уровень задержек при чтении у NVMe SSD также ниже, чем у SATA SSD, приблизительно на 20% в диапазоне Q=1..16.

Для блока 8K все очень похоже. Необходимо отметить, что для SATA SSD при очереди Q=1, 2 относительно блока 4 KB произошло почти 2-х кратное увеличение латентности, а NVMe SSD на такой длине очереди разницу не демонстрирует. При этом у NVMe SSD на блоке 8 KB латентность записи начинает превышать латентность чтения раньше, чем при блоке 4 KB. Латентность же по чтению у обоих типов SSD при переходе от блока 4 KB к блоку 8 KB возросла почти одинаково, приблизительно на 10%.

При работе с блоками 64K картина хоть и аналогичная, но особенности имеются.

График 9

NVMe SSD. «Случайное» знакомство.

График 10

NVMe SSD. «Случайное» знакомство.

У NVMe SSD при Q=1 задержки записи почти втрое меньше задержек чтения, при Q=2 около 20% лучше на запись, а при Q=4 запись уже вдвое дольше чтения. В абсолютных значениях задержки записи растут со 130 µs (микросекунд) при Q=1 до 580 µs при Q=4 и 1.15 ms (миллисекунд) при Q=8. Задержки чтения при Q=1..4 почти не меняются, составляя 320-330 µs, поднимаются до 420 µs при Q=8 и до 700 µs при Q=16.

У SATA SSD расхождение между задержками чтения и записи не такое резкое. При Q=1 запись примерно на 80% быстрее чтения, при Q=2 отрыв сокращается до приблизительно 30%, при Q=4, 8 латентность записи на 6-12% лучше латентности чтения, при Q=16 они сравниваются. В абсолютных значениях задержки записи стартуют с 220 µs при Q=1 и нарастают до 1,3 ms при Q=16. Задержки чтения увеличиваются с 400 µs при Q= 1..2 и достигают 1,5 ms уже при Q=8.

Если сравнивать задержки произвольной записи блоками 64K, то SATA SSD проигрывает NVMe SSD. При Q=1 разрыв составляет почти 50%, но с удлинением очереди уменьшается, при Q=2 до 15%, при Q=4...16 до 5-10% — то есть, превосходство NVMe SSD незначительно.

В режиме произвольного чтения блоками 64K поведение SATA SSD и NVMe SSD различается куда сильнее. У NVMe SSD латентность почти не меняется в диапазоне Q=1..8 и ухудшается на 50% при Q=16. SATA SSD в режиме произвольного чтения ведет себя примерно так же, как и при произвольной записи. При Q=1..2 задержки по чтению SATA SSD на 25% хуже, чем у NVMe SSD, при Q=4 хуже в 2 раза, при Q=8 хуже почти в 4 раза.

Таким образом, зона особого превосходства NVMe SSD над SATA SSD — чтение длинным блоком 64К под интенсивной нагрузкой. Задержки чтения у NVMe всегда короче, с ростом физической длины очереди команд отрыв увеличивается с 25% до 400%.

Кривые распределения чтения/записи

Кроме тестов в классической комбинации «база данных» (67%R/33%W) и под «чистой» нагрузкой (100% Read и 100% Write) мы решили посмотреть реакцию NVMe SSD серии Intel P3600 и SATA SSD серии Intel S3700 на плавное изменение профиля нагрузок. Соотношение чтения/записи в тесте с произвольной выборкой и блоками 64К меняли от 100%R/0%W до 0%R/100%W, с шагом 11%.

Показательный результат получен при длине очереди Q=2.

График 11

NVMe SSD. «Случайное» знакомство.

График 12

NVMe SSD. «Случайное» знакомство.

На смешанных операциях в диапазоне 22% Write...55% Write у NVMe SSD производительность в IOPS падает примерно на 40% относительно «100% Read» и почти на 50% относительно «100% Write». Горб роста задержек приходится на тот же диапазон 22% Write...55% Write, латентность ухудшается на 80% относительно «100% Read» и на 100% относительно «100% Write».

Как хорошо замено на графиках, SATA SDD ведет себя похоже. При смешанных нагрузках наблюдается падение производительности в IOPS и рост латентности, с пиком ухудшения характеристик в диапазоне 22% Write...44% Write (в самом критичном для баз данных сегменте). На длине очереди Q=8 картинка уже не так ярко выражена:

График 13

NVMe SSD. «Случайное» знакомство.

График 14

NVMe SSD. «Случайное» знакомство.

Как мы могли наблюдать выше, с ростом длины очереди на запись латентность и у Intel P3600, и у Intel S3700 существенно растет, что и отражено на графике. Падение производительности на смешанных операциях случайного чтения и записи у SATA SSD в процентном отношении меньше, чем у NVMe SSD. А вот в абсолютных цифрах NVMe SSD несомненный лидер, его данные на всем диапазоне измерений выше.

Практический же вывод из данных тестов прост: SSD не очень любит «смешанные» операции чтения и записи одновременно. А значит, для достижения максимальной производительности дисковых подсистем на основе SSD желательно, по возможности, разносить одновременные потоки на чтение и на запись. Примером такого разнесения служит размещение DB и tempDB на различных физических носителях. Или размещение OLTP (транзакционной базы данных, из которой выборки достаются) и OLAP (аналитической базы, в которую данные как раз загружаются) на различных физических (не путать с логическими!) носителях общего массива.

Тест на закуску и практические выводы

В тесте линейного чтения и записи (MBps) блоками в 64K с очередью Q=2 NVMe SSD оказывается производительнее SATA SSD примерно на треть:

График 15

NVMe SSD. «Случайное» знакомство.

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

Заключение

Intel по-разному позиционирует SSD — участников тестов. Серии SATA SSD S3700 уже три года, ее проектировали для нагруженных сред с высокой долей операций записи. Серия NVMe SSD P3600 (как и P3500-3700) появилась год назад. Место P3600 — в критичных к задержкам приложениях, сбалансированных по нагрузке. Подсистемы хранения, построенные на NVMe SSD — совсем другие, чем на SATA SSD. Их особенности (организация RAID, особенности конструктива и подключения) не позволяют впрямую сопоставлять продукты. Оправданием для сталкивания лбами 400GB S3700 SATA SSD и 400GB NVMe SSD P3600 была сопоставимая цена (на время написания материала — в диапазоне $1000-1100).

В большинстве тестов NVMe SSD продемонстрировал свое преимущество перед SATA SSD — где на 10%, а где в 4 раза. Для тех, кто планирует размещать на нем SQL DB, ключевой аргумент — малая латентность. В ряде тестов задержки обращения NVMe SSD были сопоставимы со скоростью отклика виртуальных дисков, размещаемых в энергозависимой RAM. За особенностями поведения серии P3600 в работе с блоками 64К (как в MS SQL) нам как практикам видится «рука производителя».

Чрезвычайно низкая латентность устройств хранения в разы снижает вероятность конфликта блокировок таблиц данных. Это оценят владельцы многопользовательских баз данных со сложными и взаимосвязанными таблицами, в особенности — «тяжелых» конфигураций 1С:Предприятие 8.

Ситуаций, где NVMe SSD существенно уступал бы SATA SSD, мы не увидели.

Добро пожаловать, NVMe SSD.