nvm express что это
Что такое технология твердотельных накопителей NVMe?
Технология NVMe обеспечивает превосходное хранение данных, превосходную скорость и превосходную совместимость. Поскольку в технологии NVMe используются разъемы PCIe, она обеспечивает передачу в 25 раз большего объема данных по сравнению с аналогичными устройствами SATA. Наряду с большим объемом данных команды NVMe выполняются в 2 раза быстрее, чем в накопителях AHCI. Кроме того, количество операций ввода-вывода в секунду (IOPS) в устройствах NVMe превышает 1 миллион, и операции выполняются до 900% быстрее по сравнению с накопителями AHCI. NVMe также напрямую связывается с ЦП системы, обеспечивая невероятную скорость благодаря своей совместимости. Накопители NVMe работают со всеми основными операционными системами независимо от форм-фактора.
NVMe (Non-Volatile Memory Express) — это интерфейс связи и драйвер, который использует преимущества увеличенной полосы пропускания, обеспечиваемой PCIe. Он разработан для повышения производительности и эффективности, обеспечивая при этом совместимость с широким спектром корпоративных и клиентских систем. Технология NVMe была разработан для твердотельных накопителей и обменивается данными между интерфейсом хранилища и процессором системы, используя высокоскоростные разъемы PCIe без ограничений форм-фактора.
Протокол NVMe использует параллельные пути передачи данных с малой задержкой к базовому носителю, подобно архитектурам высокопроизводительных процессоров. Это обеспечивает значительно более высокую производительность и меньшие задержки по сравнению с протоколами SAS и SATA. NVMe может поддерживать множество очередей ввода-вывода — до 64 тыс. очередей глубиной 64 тыс. записей каждая. В результате задачи ввода/вывода могут передавать больший объем данных быстрее, чем старые модели хранения данных с использованием устаревших драйверов, таких как AHCI (Advanced Host Controller Interface). Поскольку протокол NVMe разработан специально для твердотельных накопителей, он неизбежно станет новым отраслевым стандартом.
Твердотельные накопители: тогда и сейчас
Шины данных передают данные внутри системы, и когда впервые появились твердотельные накопители на базе технологии NAND, для отрасли стало очевидно, что необходимы новая шина и новый протокол.
Решение использовать имеющуюся технологию шины с более высокой пропускной способностью привело к замене протоколов SATA на технологию PCIe. Технология PCIe появилась за несколько лет до NVMe, но поскольку предыдущие решения были ограничены старыми протоколами передачи данных, такими как SATA и AHCI, они не могли быть использованы в полной мере до последнего времени. Технология NVMe устранила узкие места и сняла ограничения, обеспечивая выполнение команд с малой задержкой и очереди глубиной 64 тыс. записей. Большое количество очередей обеспечивает более быструю передачу данных, поскольку данные записываются на твердотельные накопители рассредоточенно с использованием ячеек и блоков, а не на вращающихся дисках, таких как жесткие диски.
Коммуникационные драйверы AHCI и NVMe
Коммуникационные драйверы используются операционными системами для обмена данными с устройствами хранения. Драйверы NVMe работают быстрее, чем драйверы AHCI, которые обычно используются в интерфейсах SATA.
Драйвер NVMe напрямую взаимодействует с системным процессором, а AHCI должен связываться с контроллером SATA. AHCI имеет показатель IOPS (число операций ввода/вывода в секунду) до 100 тыс., в то время как для NVMe IOPS составляет более 1 миллиона. IOPS (число операций ввода-вывода в секунду, произносится «ай-опс») — это стандартный показатель производительности, используемый для тестирования компьютерных запоминающих устройств.
Что такое NVMe у твердотельных накопителей?
Содержание
Содержание
Аббревиатура NVMe сейчас на слуху. То тут, то там можно услышать или прочитать, что-то вроде «Не хочу SATA, это старье. Хочу NVMe!» А что же это вообще такое? Давайте разбираться.
Что же такое NVMe?
NVM Express или NVMe (от англ. Non-Volatile Memory Express) — это спецификация протокола (упрощенно — протокол) обмена данными через линии PCI Express. Создавалась специально для твердотельных накопителей и ориентировалась на достижение максимальной производительности и масштабируемости в дальнейшем.
Следует отметить, что NVMe — это именно протокол, поэтому распространенное выражение «NVME накопитель/SSD» применяется не совсем корректно. Ведь под этим пользователи практически всегда понимают устройство в формате M.2, тем самым объединяя под одним названием и протокол, и форм-фактор накопителя.
Какие преимущества дает использование NVMe в накопителях?
Использованием линий PCIe означает высокий максимальный предел теоретических скоростных характеристик дисков, что было показано еще накопителями, не поддерживающими NVMe. Тогда зачем нужна была вся затея с ее разработкой?
Увеличение глубины очереди команд и количества очередей
Первые диски хоть и показывали высокие скорости, используя преимущества шины PCIe, но использовали эмуляцию AHCI, где была лишь одна очередь на 32 команды. Использование одной очереди обусловлено тем, что AHCI создавался для жестких дисков, а у них ни о каком параллелизме при работе думать не приходилось. С появлением SSD все изменилось. В спецификации NVMe заложено использование до 65535 очередей и до 65535 команд в каждой очереди с указанием приоритета очередей и четким арбитражем последних. Эти огромные показатели хоть и не нужны сейчас, но задел на будущее оставляют приличный.
Представьте бригадира и некоторое количество рабочих, очень быстрых рабочих. Если бригадир один и выдает по небольшому количеству поручений одному рабочему сразу, то пока он раздает указания остальным, предыдущие уже могут всю работу выполнить и простаивать. А если бригадиров столько же, сколько рабочих и они выдают поручения сразу на полдня, то утилизация ресурсов будет гораздо выше.
Работа с многоядерными/многопроцессорными системами, внедрение механизма прерываний и поддержка виртуализации
Совместно с первым пунктом это нацелено на увеличение параллелизма в работе, что в результате приводит к улучшение скоростных характеристик. Каждое ядро процессора может управлять несколькими очередями (отправка/завершение). Управление прерываниями (MSI-X — Message Signaled Interrupt Extended) позволяет при поступлении приоритетной задачи быстрее поставить ее на выполнение. Также была произведена оптимизация по поддержке работы с технологиями виртуализации, которая обязательна для серверов, куда NVMe в первую очередь и были нужны.
Проведем параллель с дорогой. Ясно, что пропускная способность однополосной дороги существенно меньше, чем у четырехполосной. Если только у нее не одна полоса (ядро) для въезда, иначе это колосс на глиняных ногах. А если по дороге будет ехать пожарная машина, то все расступятся и она проедет первой (спасибо прерываниям и приоритизации).
Сокращение задержек при работе
Чтобы убрать задержки при выполнении команд накопителем нужен простой и короткий путь. Поэтому посредники в лице SATA-контроллера были исключены. Также был написан более простой и эффективный набор команд для работы протокола, использующий меньше процессорного времени.
Примерной аналогией будет ситуация, когда вам нужно пробежать обычную стометровку и с препятствиями. Первую, конечно, пробежать проще и быстрее, особенно если у вас ноги длиннее (проще команды) и быстрее двигаются (меньше расходуют ресурсов).
Ускорение работы с оперативной памятью
Если AHCI требовалось два запроса в DRAM, то NVMe использует один запрос на чтение 4 Кб, обеспечивая эффективную работу небольших операций ввода/вывода. Опять же сокращает накладные расходы, позволяя увеличить эффективность в единицу времени в сравнении с AHCI. Ведь быстрее оплатить покупку просто приложив карту, чем еще дополнительно вводить пин-код.
Это лишь несколько основных важных отличий NVMe, по которым виден основной вектор при работе над протоколом. SSD, в отличие от HDD, обладает некоторой степенью параллелизма — контроллер поддерживает несколько каналов для подключения микросхем памяти. В итоге большой пласт работы направлен на максимальную возможность распараллеливания операций. Несколько очередей с большой очередью команд — сценарий, в котором накопители показывают лучшие результаты. Работа с многоядерными процессорами также позволяет максимально загрузить работой диск.
Другой целью разработки было исключение промежуточных звеньев. Так удаление контроллера SATA из цепочки «процессор — накопитель», новые команды и драйвер позволили снизить задержки в обработке команд так, что основным фактором, влияющим на латентность, стали сами микросхемы NAND. Они же и остаются лимитирующим фактором в скорости записи. 3DXpoint от Intel сделала первый шаг в направлении уменьшения латентности памяти. Будем ждать, что смогут преподнести будущие типы микросхем.
Все внесенные изменения обеспечили не только и не столько скачок в скоростных показателях (это сделал еще переход на PCIe в SSD, эмулировавших AHCI), а существенное увеличение числа операций ввода-вывода (IOPS), что особенно важно в высоконагруженных сценариях/режимах работы.
Опять же если вернуться к AHCI, то ее разработка зиждилась на максимальном сохранении совместимости с разными устройствами. NVMe же возводили практически с нуля, основываясь лишь на использовании линий PCI-Express. И это наложило некоторые особенности реализации в конечном итоге.
Так для работы NVMe необходима поддержка со стороны операционной системы (ОС). Впрочем, сейчас драйвер есть во всех современных ОС: Windows, Mac OS и ядрах Linux/BSD. А для использования в качестве загрузочного накопителя, потребуется наличие драйвера в UEFI материнской платы. Как его добавить в старые модели плат, можно прочитать здесь.
Технология NVMe — характеристики, особенности и перспективы
Содержание:
Твердотельные накопители (или SSD) с недавних пор стали стандартом качества на потребительском и профессиональном рынке компьютерного оборудования. По данным аналитиков агентства TrendFocus, в 2020 году SSD-диски впервые обошли HDD по числу единиц, поставленных на мировой рынок.
Однако, технологии передачи данных, которые изначально применялись в SSD, перестали отвечать современным требованиям к скорости обработки массивов информации. Помещение флеш-памяти в форм-факторы механических жёстких дисков и использование старых интерфейсов ради обратной совместимости налагало серьезные ограничения на твердотельные накопители. Чтобы задействовать весь потенциал технологии, крупные игроки IT-индустрии создали NVM Express — новый стандарт высокопроизводительного интерфейса для SSD.
В этом обзоре мы подробно разберем, что представляет собой спецификация NVM Express. Расскажем, в каких форм-факторах она представлена, а также что значит применение нового стандарта подключения накопителей для бизнеса в практическом плане.
Что такое NVMe
Аббревиатура NVM Express (NVMe, NVMHCIS) расшифровывается как «спецификация интерфейса хост-контроллера энергонезависимой памяти». Эта технология позволяет задействовать особые преимущества накопителей, основанных на флеш-памяти типа NAND и 3D XPoint (Intel Optane).
Предпосылки создания
До NVM Express SSD-устройства подключались к компьютерам с помощью интерфейсов Serial ATA (SATA) или SAS, которые использовали режим работы AHCI для передачи данных. Эта технология разрабатывалась для традиционных механических жёстких дисков и имела существенные физические ограничения на скорость одновременной передачи данных, а также на время, необходимое для произвольного доступа к памяти.
К концу 2010-х технологическое развитие SSD-дисков упёрлось в лимиты пропускной способности интерфейса SATA. Максимальная скорость передачи данных шины составляла 6 Гбит/с или 750 Мбайт/с. А, с учётом системных издержек — не более 550 Мбайт/с.
Производители устройств для профессиональных и продвинутых пользователей смогли обойти ограничение, путём подключения SSD через интерфейс PCI Express. Однако эта стратегия позволила решить проблему со скоростью лишь частично.
Как появилась технология NVMe
Изначально спецификация NVMe была призвана упростить процесс тестирования того, как аппаратное ПО взаимодействует с энергонезависимой памятью по шине PCI Express. Позже технология стала промышленным стандартом для основных форм-факторов (U.2, M.2, AIC, EDSFF), в которых выпускаются SSD-диски.
Дорожная карта развития спецификаций NVM Express / Источник: nvmexpress.org
Протокол NVMe был анонсирован общественности в 2007 году на форуме разработчиков компании Intel. Первая рабочая версия спецификации (1.0) вышла в марте 2011 года, а текущая (2.0a) датируется июлем 2021.
Сегодня развитием технологии занимается большое международное сообщество компаний и разработчиков, которое было основано в 2014 году.
Поддерживаемые ОС
NVM Express поддерживают все основные операционные системы. Microsoft добавила встроенную поддержку NVMe в Windows 8.1 и Server 2012 R2 в октябре 2013 года. Также были выпущены модификации для Windows 7 и Server 2008 R2, доступные через Центр обновления Windows (Windows Update).
Apple добавила совместимость с OS X Yosemite версии 10.10.3 в апреле 2015 года. Поддержка NVMe в Linux реализована в марте 2012 года, начиная с ядра 3.3. С февраля 2015 года она доступна в дистрибутиве Chrome OS.
Поддержка NVMe накопителей есть в OpenBSD 6.0, NetBSD-current, FreeBSD 10.2, DragonFly BSD 4.6, а также в Oracle Solaris 11.2 и в таком ответвлении OpenSolaris как illumos. Совместимость VMware появилась в vSphere 6.0. Естественно, следующие версии этих продуктов (Windows 10, OS X 10.4 Mojave и т. д.) сохраняют поддержку NVM Express.
В чём разница между SSD и NVMe дисками
Улучшенная архитектура
Высокопроизводительные твердотельные накопители NVMe не имеют ограничений на пропускную способность, которая присуща стандартам SATA/SAS и AHCI, разработанным ещё для традиционных жёстких дисков. В традиционных дисках для чтения/записи множества файлов головка должна молниеносно перемещаться от одного участка пластины к другому. Хотя кэширование и другие ухищрения маскируют это, традиционные диски эффективно работают лишь с одним файлом одновременно.
В результате в традиционном стандарте AHCI предусмотрена только одна очередь и максимум 32 команды в ней. Поскольку у твердотельных дисков такого ограничения нет (как и головки), эта наследственная характерная черта AHCI только ухудшает их работу. NVMe разрешает до 65535 очередей и до 65536 команд в каждой (так предусмотрено спецификацией, хотя практическое использование потребует соответствующий контроллер).
К тому же, NVMe накопитель позволяет 2048 MSI-X прерываний, а AHCI — только одно такое прерывание в режиме без управления. У NVMe также снижены системные издержки: параметры команд в 4 Кбайт выполняются за одно чтение памяти, а не за два, как у AHCI. Кроме того, выполнение параллельных инструкций не требует синхроблокировки.
Повышенная производительность
Концепция протокола NVMe ориентирована на максимальное использование преимуществ твердотельной флеш-памяти для достижения лучшей производительности.
На относительную производительность твердотельных дисков влияют многие факторы — тип флеш-памяти, контроллер, прошивка. Чтобы точно понять, как на данной фактор влияет использование NVM Express, нужно сопоставить важнейшие функциональные параметры (например, скорость записи и чтения) у аналогичных моделей без этой технологии и с ней.
Вот, например, беспристрастное сравнение моделей WDS100T2B0B и WDS100T2X0C. Это относительно свежие диски SSD от Western Digital ёмкостью 1 Тбайт, выполненные на одной и той же технологии 3D TLC NAND.
Первый — это SATA/AHCI-диск со скоростью последовательного чтения/записи 560 и 530 Мбайт/с соответственно. Его IOPS — число операций ввода-вывода в секунду — 95 000 для произвольного чтения и 84 000 для записи.
Второй же жесткий диск SSD выполнен на шине PCIe/NVMe. Его последовательная скорость чтения — 3400 и записи — 2800 Мбайт/с, а аналогичные произвольные параметры — 500 000 и 400 000 IOPS.
Совместимость стандартов
Ранние SSD на PCI Express использовали AHCI, либо собственную спецификацию. В первом случае сохранялись все недостатки производительности при произвольном чтении/записи. Во втором, работа устройства сильно зависела от изготовителя или даже конкретной модели одной и той же марки.
Обходить нетипичные стандарты подобных дисков приходилось с помощью особых драйверов. В результате, накопители было сложно использовать в роли загрузочного диска Windows или Linux, если производитель не поддерживал данные ОС.
NVM Express избавился от подобных проблем с помощью общего дискового интерфейса с единой спецификацией драйверов.
Разнообразие форм-факторов
Традиционные жёсткие диски обычно поставлялись в форм-факторах 2,5 или 3,5 дюймов, а SSD — в формате 2,5 дюйма с разъемом mini-SATA (mSATA). У NVMe-дисков появилось большее разнообразие форм-факторов.
Самый типичный формат NVMe — M.2 имеет 22 мм в ширину и 30, 42, 80 или реже 110 мм в длину. Он сохраняет обратную совместимость с SATA. Есть и формат NF1 — это вариант M.2, рассчитанный на ЦОД и с поддержкой горячей замены аппаратного обеспечения.
У дисков интерфейса U.2 (ранее SFF-8639) формат — 2,5 дюйма. Предусмотрен специальный разъем для PCI Express. Некоторые диски сегмента хай-энд доступны только в виде плат PCI Express, обычно форм-фактора HHHL (half height, half length, «половинной высоты, половинной длины»).
Что дает применение NVMe
Приход NVM Express в отрасль сулит мощный рост производительности баз данных. В 2015-м исследователи из Университета Южной Калифорнии и Университета штата Калифорния в Сан-Хосе, сотрудничавшие с Samsung, установили, что при ядре Linux 3.14 архитектурные отличия NVMe «снижают системные программные издержки вчетверо».
Более того, они указали, что, при прямом сравнении дисков NVMe и SATA, первый «демонстрирует восьмикратный выигрыш производительности» при рабочей нагрузке на базу данных. Аналогично один NVMe-диск превосходит по производительности RAID0-массив из четырёх дисков SATA SSD «до пяти раз».
Для полу- и профессионального использования — редактирования графики или обработки видео — выгоды уже скромнее, поскольку они зависят больше от обычной скорости чтения/записи, чем от произвольных операций ввода-вывода. В этом случае восьмикратный рост производительности — как то было с базами данных — нереален.
Для подтверждения, вернёмся к приведенному ранее примеру с дисками WDS100T2B0B и WDS100T2X0C. Тесты показывают, что SSD с поддержкой NVMe дают увеличение скорости чтения в 6 раз, а записи — в 5,25 раз, по сравнению с аналогичным SATA SSD-диском.
Где используются диски NVM Express
NVMe SSD доступны в комплектациях большинства относительно современных компьютеров. Что же касается пользователей Mac, то Apple поддерживает NVMe с 2015 года, когда этот тип накопителя стал использоваться на Retina MacBook.
С 2016 года диски NVMe появились на MacBook Pro c Touch Bar. Контроллеры NVM Express поддерживаются и большинством моделей Retina iMac, начиная с середины 2017 года, а также всеми конфигурациями iMac Pro.
Новые материнские платы на PC часто оснащены разъёмами M.2 для подключения SSD. Если же нет, то доступны переходники, позволяющие подключить диски M.2 через разъёмы PCI Express. Некоторые производители поставляют их в комплекте с диском. Тем не менее, доступны и недорогие устройства-дженерики, совместимые с любым оборудованием.
Технологические перспективы и конструктивные реалии
Производительность NVMe-дисков не в последнюю зависит от версии PCI Express и доступного числа линий. Так, PCI Express 2.0 поддерживает пропускную способность 500 Мбайт/с на линию, а PCI Express 3.0 — около 985.
Старые компьютеры с PCI Express 2.0 могут использовать NVMe-диски, но большинство из них применяет четырёхлинейный интерфейс, который ограничивает теоретическую скорость до 2000 Мбайт/с. А из-за накладных потерь, она ещё и на 10-15% ниже. Получается, что достижение скорости чтения в 3400 Мбайт/с для упомянутой выше модели WDS100T2X0C на практике невозможно.
Проблема замечена у ноутбуков Lenovo линейки ThinkPad. Материнские платы некоторых моделей с процессорами Intel 8-го поколения (Kaby Lake Refresh) выделяют для SSD только две линии PCIe 3.0, хотя сами диски (в этом случае Samsung PM981) спроектированы под четыре.
Samsung оценивает скорость их чтения в 3200, а записи в 2400 Мбайт/с, однако тест ThinkPad P52s показал только 1777 и 1722 Мбайт/с, соответственно. Этот конструктивный недостаток есть у моделей E480, L480, T580 и T480. Но X280, T480s, X380 Yoga и X1 Carbon G6 уже задействуют четырёхлинейный интерфейс SSD.
Хотите, чтобы сайт работал максимально производительно? Размещайте его на VDS от Eternalhost — быстрые NVMe-диски, бесплатная защита от DDoS и бдительная техподдержка 24/7.
Протокол Non-Volatile Memory Express (NVMe)
Мы протестировали уже далеко не один твердотельный накопитель с интерфейсом PCIe, но все попадавшие к нам в руки SSD старательно эмулировали «традиционные» дисковые устройства. Что, впрочем, не мешало им демонстрировать высокую производительность, потому что, во-первых, SSD по определению быстрее «механики», а во-вторых (как следствие), для них уже актуален вопрос пропускной способности интерфейса подключения, в чем несколько линий PCIe однозначно превосходят SATA. Однако нужна ли массиву ячеек памяти способность «прикидываться» априори медлительным блочным устройством, типа винчестера или даже накопителя на оптических дисках? Очевидно, что производительности промежуточные уровни иерархии не добавляют: чем прямее путь, тем выше скорости. Конечно, с точки зрения совместимости «стандартные» интерфейсы предпочтительнее, но ведь PCIe эту самую совместимость ограничивает изначально. Поэтому как только речь зашла об использовании этого интерфейса, производители сразу же задумались и о соответствующей программной прослойке: чтоб в ней не было ничего лишнего для SSD, зато учитывались все их особенности. Так появился интерфейс NVMe: Non-Volatile Memory Express.
Сейчас постепенно начинается и его продвижение в массовый сектор — по причинам, указанным нами в предыдущей статье цикла: PCIe-накопители наконец-то получили стандарт универсального воплощения, пригодного для широкого класса компьютеров, в виде М.2. Однако есть сомнения, что на этом пути все будет гладко, о чем мы сегодня и поговорим. А также оценим плюсы и минусы NVMe на примере пары устройств корпоративного класса, где эта технология применяется уже почти год, благо там и проблем с внедрением меньше.
От дискет к AHCI
Для начала устроим небольшой экскурс в историю — лет этак на 30 назад, во времена появления первых персональных компьютеров. Несмотря на то, что и сегодняшние «монстры» в определенной степени совместимы с тогдашними «мастодонтами», подход к конструкции последних был совсем иным, нежели принят сейчас. Например, оригинальная IBM PC не только не снабжалась винчестером, но и могла работать даже без дисковода — с бытовым магнитофоном. Естественно, стандартизовать тогда интерфейс для подключения быстрых накопителей не было нужды, да и накопителей таких в массовом исполнении особо не водилось, ибо стоили они слишком дорого (это сейчас флэш-память продается по цене менее доллара за гигабайт, а когда-то килобайт на жестком диске стоил дороже). Впрочем, уже в РС ХТ винчестер появился, а необходимый для него контроллер, как и следовало ожидать, устанавливался в разъем шины расширения на системной плате. Время было такое — все контроллеры именно так и подключались 🙂
Некоторое время жесткие диски в персональных компьютерах использовали интерфейс ST-506/412, где вся управляющая логика была вынесена в контроллер компьютера, а плата электроники самого винчестера содержала только модули аналоговой обработки и управления шпиндельным двигателем, позиционером и коммутатором головок. Опять же, время было такое — торопиться было особо некуда, и много дисков подключать тоже, так что всех устраивало подключение не более двух винчестеров, для чего приходилось использовать аж три кабеля (два в случае одного накопителя). Скорость передачи данных от винчестера к компьютеру по интерфейсу была даже ниже способностей тогдашних тихоходов. В общем, такое вот странноватое решение, тем не менее работавшее и относительно недорогое.
Однако производительность компьютеров росла, что давало им возможность решать все более широкий круг задач, а это, в свою очередь, не могло не сказаться на периферийном оборудовании: хотелось подключать большее число более разнообразных устройств, работающих с более высокой скоростью. ST-506/412 такие потребности «не тянул». Результатом чего были попытки разработать улучшенный интерфейс жестких дисков (ESDI) или портировать на персоналки привычный по рабочим станциям интерфейс SCSI, но все кончилось тем, что стандартом стал интерфейс IDE (он же ATA). Общим между всеми перечисленными являлось то, что немалое количество электроники «переехало» на плату винчестера, что позволило последнему полностью инкапсулировать в себе все свои особенности, обмениваясь с компьютером стандартными командами и блоками информации. Различия, как всегда, крылись в деталях реализации, сложности и цене. Так, например, при создании ESDI производители постарались сделать нечто максимально похожее на ST-506/412 внешне, но более быстрое и не слишком сложное. SCSI изначально поражал своей гибкостью и универсальностью, но стоил слишком дорого (а так оно всегда и бывает). Создатели же АТА делали дешевый и простой интерфейс. Именно поэтому он был очень похож на ST-506/412 программно, но обходился одним кабелем, не был, в отличие от SCSI, рассчитан на внешние устройства (что сильно упрощало работу и снижало стоимость), а первое время вообще ориентировался только на винчестеры. Позднее появилось расширение ATAPI, представлявшее собой, по сути, реализацию SCSI-команд поверх физического интерфейса АТА, и. Он надолго стал стандартом для персональных компьютеров, со временем «встроившись» непосредственно в чипсеты.
Спустя несколько лет, впрочем, выяснилось, что АТА «выбрал» все возможности модернизации. За это время пропускная способность интерфейса выросла до 133 МБ/с, однако дальнейшее ее увеличение на параллельном интерфейсе было затруднительным. Кроме того, недостатком АТА можно было считать устаревшую схему подключения двух дисковых устройств на один канал, фактически унаследованную еще от ST-506/412. Справиться с подключением нескольких устройств можно было увеличением числа каналов (что к тому моменту уже было сделано — большинство «чипсетных» АТА-контролеров поддерживало два канала, т. е. до четырех устройств), а вот их взаимное влияние друг на друга и «дележка» пропускной способности оказывались неустранимыми особенностями — неустранимыми, во всяком случае, без изменения концепции. Поэтому пришлось заняться концепцией и перейти с параллельного АТА на последовательный SATA. Попутно перешли и к звездообразной топологии, когда каждый канал стал независимым от других за пределами контроллера, а также увеличилась пропускная способность интерфейса до 150 МБ/с с возможностью дальнейшего роста.
В принципе, еще во времена параллельного АТА пропускная способность стала несколько избыточной для тогдашних устройств, основными из которых продолжали оставаться винчестеры и оптические накопители. Собственно, немудрено, что разработчики озадачились и другими вопросами. В частности, реальную производительность дисковых устройств можно повысить путем грамотной оптимизации запросов — чтобы минимизировать перемещение головок. Но для того, чтобы оптимизировать обращения к диску, надо не спешить их выполнять, а создавать очередь команд, которую потом и переупорядочивать. Такие механизмы появились еще до внедрения SATA, но TCQ стандартом не стала, а вот NCQ — давно уже стандартная функция для всех SATA-контроллеров. Очередь команд обычно имеет небольшую глубину, поскольку все, что нам нужно в случае винчестера — оптимизировать последовательность «перебора» цилиндров, и очередь эта одна, поскольку никакого внутреннего параллелизма в массовых «механических» накопителях просто нет. Он может появиться только при использовании нескольких дисковых устройств и объединении их в RAID-массив, чем и пользуются соответствующие контроллеры — причем чипсетные это делают редко: хотя производительность чтения данных в двухдисковом массиве RAID1, например, можно удвоить, используя чередование запросов к дискам, чипсеты Intel это не используют. И даже задействование RAID-функциональности в чипсетных дисковых контроллерах не является массовым, а уж более сложные RAID-контроллеры и вовсе встречаются лишь в специфических нишах. Собственно, именно по этой причине (большинство компьютеров снабжаются лишь одним-двумя «последовательными однозадачными» накопителями) никакой параллелизм стандартам подключения дисковых устройств был не нужен. А большие «внутренние» задержки при доступе к информации, вызванные работой механики, позволяли не слишком заботиться и о накладных расходах на обеспечение работы интерфейса.
Так AHCI и работает. И, в общем-то, долгое время протокол устраивал всех. Однако приход твердотельных накопителей в массовый сегмент заставил производителей задуматься.
Non-Volatile Memory Express: что нового
Причина этой глубокой задумчивости хорошо видна на картинке. В общем-то, как давал наибольший вклад в задержки собственно «носитель данных», так ничего и не изменилось, но. Но для механических накопителей средние задержки при выполнении команд составляли порядка 2 мс, а использование флэш-памяти позволяет сократить это время примерно в 20 раз — до 100 мкс. 25-30 мкс по вине драйверов и контроллеров просто теряются на фоне первого значения, но на фоне второго они уже очень заметны. «Устранение» из цепочки SATA-контроллера путем эмуляции его функций собственно контроллером твердотельного накопителя в «AHCI PCIe SSD» экономит более 10 мкс, а прекращение эмуляции AHCI и переход на специализированный программный интерфейс и вовсе сокращают накладные расходы до пяти микросекунд. Повторимся: основным виновником задержек продолжает оставаться собственно флэш-память, но суммарно задержки сокращаются в полтора раза. Соответственно, ожидать такого же взрывного эффекта, как при отказе от механики, не стоит (все-таки 20 раз — это не 1,5 раза, но и получить «на пустом месте» полуторакратное уменьшение задержек тоже хорошо. Тем более что суммарный эффект оказывается кумулятивным — к нему добавляется и общее увеличение пропускной способности интерфейса, присущее SSD с подключением к PCIe.
На чем еще можно выгадать? На увеличении параллелизма при обработке команд. Как уже было сказано выше, винчестеры обрабатывают команды последовательно, поскольку блок головок в каждый момент времени может находиться только над одним конкретным цилиндром. Все, что дает очередь команд — возможность оптимизировать перемещения головок чтения/записи, что тоже немало, однако слабо применимо к SSD, которые, по сути своей, являются параллельными устройствами. Даже самые простые контроллеры поддерживают четыре канала флэш-памяти, при «традиционном» подходе объединяющиеся в один для полной эмуляции AHCI. Но если эмуляция AHCI нам не нужна, то все каналы можно считать независимыми накопителями. Соответственно, задачей драйвера и контроллера является «раскидывание» запросов по каналам, а дальше каждый из них будет обрабатывать свои команды наиболее эффективным образом. То есть очередей должно быть несколько и, желательно, максимально глубоких — это позволит выжать из флэш-памяти всё (например, пока одни блоки будут перезаписываться, в идеале из других можно читать данные, не дожидаясь окончания длительных операций). Но AHCI, где очередь команд всего одна на каждое устройство, да еще и глубиной в 32 команды, нам здесь ничем не поможет. «Родные» же для NVMe возможности куда серьезнее: до 64К (65536 в «некомпьютерных единицах») очередей и до 64К команд в каждой. Разумеется, сегодня такой простор пока не используется, но запас на будущее внушает оптимизм 🙂
Конечно, есть в стандарте и другие оптимизации, но главное уже понятно: в отличие от AHCI, который разрабатывался для максимальной совместимости с разными устройствами, уже существовавшими на тот момент, NVMe является специализированной разработкой, во многом нацеленной в будущее. И не стоит зацикливаться только на флэш-памяти: есть подозрения, что некоторые возможности протокола раскроются при освоении новых стандартов энергонезависимой памяти, в особенности — с низкими собственными задержками. Но пока многообразия твердотельных накопителей на рынке нет, так что NVMe используется именно с устройствами на флэше. Для механических накопителей интерфейс NVMe, очевидно, не нужен. А есть ли смысл переводить на него хотя бы все SSD? В перспективе — возможно. Прямо сейчас — есть.
Подводные камни совместимости
Вернемся к протоколу AHCI и вспомним, что́ мы о нем знаем. Во-первых, появился он очень давно, так что непосредственно поддерживается не только современными, но и устаревшими операционными системами. Во-вторых, собственно «поддержка» в его случае достаточно проста: в идеале системе вообще не нужно вдаваться в особенности функционирования конкретного устройства, поскольку все инкапсулируется на уровне контроллера. Для компьютера такой твердотельный накопитель с интерфейсом PCIe — это всего лишь очередной дисковый контроллер, работать с которыми «учили» еще DOS и BIOS. Соответственно, даже очень старая система должна легко «переваривать» его добавление, благо и на аппаратном уровне никаких особенностей нет.
Что в этом плане меняет NVMe? Да практически всё: ведь основной целью его разработки является упразднение промежуточных уровней — как раз привычных и проверенных временем. В частности, придется забыть о загрузке в Legacy-режиме — только UEFI. Также возможны проблемы с прошивками некоторых системных плат, на которые мы наткнулись, и даже с чипсетами — Intel, например, гарантирует поддержку NVMe для чипсетов «девятого» семейства, а вот с предыдущими возможны варианты. Кроме того, потребуется специальный драйвер. Поддержка NVMe, впрочем, уже встроена в Windows 8.1, Windows Server 2012 R2 и Linux начиная с версии ядра 3.10, но этими системами список используемых потребителями не ограничивается. А драйверная поддержка более старых систем остается на усмотрение производителя и может быть ограниченной: к примеру, только х64-версии Windows 7, но не х86. В частности, с этим мы столкнулись, получив два SSD корпоративной серии Intel — в итоге оказалось невозможно протестировать их по «стандартной методике» для накопителей, так как на обычно используемом стенде с платой на базе чипсета Z77 они вообще не заработали (а если бы даже и определились, легче бы от этого не стало: мы используем Windows 7 x86, а она на тот момент Intel не поддерживалась). Кстати, есть и еще одна проблема с внедрением стандарта: во-первых, контроллеры с поддержкой NVMe рассчитаны в основном на PCIe 3.0, а во-вторых, раз уж речь заходит о минимизации задержек, максимальная производительность достигается при подключении устройства непосредственно к процессору без промежуточных хопов в виде чипсета. Что из этого следует? То, что весь потенциал технологии NVMe без проблем может быть раскрыт только на системах с LGA2011-3 (или, в крайнем случае, предыдущей версией этого сокета), поскольку процессоры для этой платформы в избытке снабжены линиями PCIe 3.0. Что же касается массовой LGA1150, то там придется «урезать» по пропускной способности шины видеокарту: в наличии всего 16 линий PCIe 3.0, а использование SSD в «чипсетных» слотах вообще противопоказано.
Разъем SFF-8639: новый путь к многодисковым конфигурациям
Проблемы совместимости на этом не заканчиваются. То есть при желании установить в систему один накопитель — все просто: достаточно найти соответствующий слот PCIe (что, впрочем, как уже было сказано, не всегда просто), и всё. Но ведь степень параллелизма можно увеличить одновременным использованием нескольких устройств. Это делалось даже с «обычными» дисками, а уж объединение в один массив NVMe-устройств средствами, учитывающими их специфику, вообще открывает безграничные возможности (по крайней мере, в теории). Вопрос только, как этого добиться в условиях обычных для компьютерных шасси ограничений?
Очевидно, вариант с установкой нескольких накопителей непосредственно в слоты PCIe на системной плате не является оптимальным: их мало. Тем более, они будут использоваться неэффективно — сегодняшним SSD достаточно четырех линий PCIe, а в серверах, к примеру, более массово встречается PCIe x8. Подходящим, на первый взгляд, кажется формат М.2, благо там как раз есть нужный нам PCIe x4, однако установка нескольких таких разъемов на плату — явление редкое. К тому же топовые накопители высокой емкости вообще очень плохо упаковываются в формат компактных карт. Да еще и ни PCIe, ни M.2 не поддерживают горячую замену, что сильно ограничивает привлекательность RAID-массивов на такой «физической основе».
Таким образом, идеальным вариантом является возврат к форм-фактору винчестеров с пластинами диаметром 2,5 дюйма, благо таковые активно используются в серверах и корзины для них есть, а размеры корпуса толщиной 15 мм (как раз таковы серверные «двухсполовинойдюймовочки») позволяют установить в него несколько терабайт флэш-памяти. Остается только один вопрос: как соединять устройство с собственно шиной PCIe? Ближе всех к решению задачи интерфейс SATA Express, однако при создании последнего никто не подумал о том, что устройству может понадобиться не две, а четыре линии PCIe. Но ничего страшного: разъемы SATA Express, по сути, представляют собой известный еще по SAS разъем типа SFF-8680. Если не «закладываться» на устройства высотой 7 мм (что SATA Express в теории может понадобиться, а «2,5-дюймовым» NVMe SSD — нет), то можно добавить еще рядок контактов (увеличив их количество с 29 до 68) и экранирование, как раз реализовав «недостающие» линии PCIe. Так и получился SFF-8639. Заметим, что этот разъем по-прежнему поддерживает и SAS/SATA-устройства, но есть серьезное отличие от того же SATA Express: последний умеет автоматически определять тип подключенного устройства и выбирать соответствующий режим работы (SATA или PCIe), а вот в случае SFF-8639 вся ответственность за правильность подключения возлагается на сборщика.
А коль скоро разъем на устройстве у нас есть, и кабели тоже, дальше все просто: другой конец кабеля втыкается во вполне обычную низкопрофильную плату PCIe. Обычным делом является использование одного кабеля на пару портов, так что платы могут быть разные: слот PCIe х8 позволит подключить как раз пару накопителей одним кабелем, слот х16 — соответственно, два кабеля и четыре устройства. В принципе, можно ожидать скорого появления соответствующих разъемов непосредственно на серверных материнских платах, что сделает карты-райзеры ненужными и позволит использовать накопители и в компактных серверах.
Преимущества перед непосредственным использованием PCIe-слотов (свойственным «бытовым» устройствам) очевидны: компактность (особенно при отказе от райзеров), более экономное использование линий PCIe (если есть только один слот х16, можно либо установить в него один SSD «на карте», либо подключить к нему четыре накопителя), возможность использования стандартных корзин с горячей заменой устройств. Но, повторимся, применение SFF-8639 «в быту» разработчиками не планируется — ориентация взята на серверы и многодисковые конфигурации. Там, где нужен одиночный накопитель, стандартным по-прежнему будет оставаться использование «обычных» карт расширения либо (в перспективе) M.2.
Intel DC P3600 и P3700
Как известно, любая теория суха, если ее не закрепить практикой 🙂 В качестве последней мы познакомимся с парой накопителей Intel, поддерживающих NVMe.
Первым из них является DC P3600 емкостью 800 ГБ. Выполнен он в уже привычном форм-факторе — низкопрофильная карта расширения PCIe x4. В отличие от многих других накопителей с интерфейсом PCIe, изученных нами ранее и представляющих собой карту формата M.2 в комплекте с адаптером-переходником, выглядит он как законченное решение и снабжен весьма внушительным радиатором (о чем пару слов скажем ниже).
А вот DC P3700 на 400 ГБ как раз имеет исполнение в «винчестерном» стиле, о котором говорилось выше. Надо заметить, с его подключением нам пришлось попотеть: пока на рынке избытка корзин и кабелей, требуемых для подключения этих устройств, не наблюдается.
На что стоит обратить внимание? Цифры потребляемого тока по линии +12 В внушают уважение: как видите, накопитель требует почти 30 Вт. На самом деле, не все так страшно: на наклейке приведена общая информация для всей линейки, и даже старшая модель (емкостью 2 ТБ) потребляет 25/11 Вт при записи/чтении данных, а нашим героям достаточно 12/9 Вт. Впрочем, и это немало. Для сравнения — многие винчестеры для ноутбуков вполне ограничиваются пятью ваттами, т. е. такой твердотельный накопитель в разы прожорливее. Массовые же SSD в настоящее время нередко укладываются в десятые доли ватта, так что разрыв с ними еще больше. Это и объясняет наличие массивных радиаторов у всего семейства, а также сразу дает понять, что в портативных компьютерах подобным устройствам делать нечего.
Что же касается внутреннего устройства, то оно во всех трех линейках (есть еще и Р3500) примерно одинаковое — отличаются только микросхемы флэш-памяти, что дает немного разные скоростные показатели и весьма заметно различающуюся выносливость: для наших героев это 4,38 и 7,3 PBW соответственно. Ценой же устройства не только различаются между собой, но и сильно отличаются от накопителей потребительского сегмента — речь идет о 1,5-2 долларах за гигабайт, т. е. в пару раз больше, чем для самых быстрых «пользовательских» SSD, что, впрочем, для знакомых с корпоративным сегментом не ново — за более высокую надежность принято платить.
А основой всех трех упомянутых «корпоративных» линеек и более дешевого Intel 750 (нацеленного на рынок персональных компьютеров и рабочих станций) является собственный контроллер Intel CH29AE41AB0. Он поддерживает восемнадцать каналов для подключения флэша, в то время как «бытовые» контроллеры ограничиваются восемью, а то и четырьмя. Высокий параллелизм (которым, как уже было сказано выше, именно NVMe-устройства способны распорядиться наилучшим образом) является залогом высокой производительности, но есть у него и побочный эффект: максимального быстродействия можно ожидать лишь от старших (и самых дорогих!) модификаций. А вот 400 и даже 800 ГБ, столь внушительных на фоне наиболее продаваемых в розницу SSD — маловато, что мы ниже и увидим.
Практическое экспресс-тестирование
Столкнувшись с определенными проблемами совместимости, о чем было сказано выше, мы пришли к выводу, что протестировать эти модели по нашей стандартной методике не получится. Впрочем, мы не слишком расстроились: в ближайшее время будут готовы результаты «бытовой» модели Intel 750, с которой проблем оказалось существенно меньше. Поэтому (раз уж у нас материал сегодня более теоретический) мы решили вкратце посмотреть, чего можно и чего нельзя ожидать от внедрения NVMe.
Для тестирования P3600 и P3700 нами был собран стенд на базе платформы LGA2011-3, поскольку для данного сегмента такие накопители в основном и рекомендуются. Соответственно, нам пришлось использовать довольно мощный процессор Core i7-5960X, но на результаты дисковых тестов (особенно тех, которые мы используем сегодня) это не влияет. Объем памяти на всякий случай постарались ограничить, взяв всего один модуль DDR4-2133 емкостью 4 ГБ. А для сравнения мы приведем результаты Kingston HyperX Predator и OCZ RevoDrive 350, как раз недавно протестированных в «стандартных» условиях.
Итак, что касается последовательного чтения, то тут мы сразу столкнулись с тем, что при таком количестве каналов контроллера «медленными» оказываются даже модели емкостью 400 ГБ! При 800 ГБ потенциальные возможности PCIe 3.0 раскрываются более полно. А при записи мы опять сильно упираемся не в интерфейс, а в сам флэш со всеми вытекающими: производительность обеих моделей Intel оказалась более низкой, нежели у банального Kingston Predator, не поддерживающего NVMe и работающего всего лишь с PCIe 2.0. Впрочем, удивления это у нас не вызвало — понятно, что собственно NVMe при таких типах нагрузки ничего дать не может, а потенциальные возможности скоростных шин надо еще суметь утилизировать.
А что со случайным чтением блоками по 4К, которое как раз обещали ускорить? Вот здесь — показательно: действительно стало заметно быстрее, даже если сравнивать наших героев с OCZ RevoDrive, по сути своей являющимся массивом RAID0 из четырех SSD. Predator же еще медленнее — в его случае отставание от DC P3600 более чем двукратное (формально более быстрому Р3700 продолжает мешать низкая емкость флэш-памяти).
На записи RevoDrive пытался не отстать, но и у него это не вышло. Что еще более интересно — результаты «однопоточной» записи: ускорить ее при помощи RAID-массивов и подобных ухищрений невозможно, а вот NVMe радикально меняет положение дел. Фактически, эти два устройства Intel оказались первыми из попавших к нам в руки, демонстрирующими скорости «однопоточной» записи выше 100 МБ/с. Забегая вперед, сообщим, что Intel 750 в этом плане не хуже — и даже лучше: на нем удалось получить почти 300 МБ/с. Ну а все AHCI SSD (не только представленные на диаграмме, но и прочие модели) по этому показателю «болтаются» в районе 50-60 МБ/с, так что можно говорить о революционном изменении ситуации.
Впрочем, сама по себе революция — лишь в достаточно узкой области. С точки зрения простого пользователя, работающего за компьютером, разницы между различными современными SSD нет, независимо от интерфейсов или протоколов работы. Это нам в очередной раз подтверждает PCMark 🙂
Итого
Как видим, NVMe не панацея, что было понятно априори — пропускную способность шины эта технология не увеличивает, а уменьшение задержек по масштабу не идет ни в какое сравнение с тем, что было получено при переходе от механики к флэш-памяти. С другой стороны, технология не тянет за собой «груз совместимости» с той самой механикой и вообще ориентирована как раз на полупроводниковые носители информации, причем не обязательно на флэш-память — просто другие технологии пока еще не вышли за стены лабораторий. Однако подготовиться к их появлению можно и заранее — главное, что потенциально NVMe подойдет и для них. А если при этом будут снижены собственные задержки памяти, значит, применение подобных технологий более чем оправданно, поскольку они лучше традиционного SATA.
Некоторый эффект есть и сейчас. Стоит ли за ним гоняться? На наш взгляд, пока рановато делать это массово, поскольку он не слишком значителен. Большинству пользователей по-прежнему прекрасно подойдут обычные SATA-накопители, благо они имеют и лучшую в классе совместимость. А вот тем, кто желает получить самое-самое лучшее, без интерфейса PCIe все равно не обойтись, компьютер у них уже, как правило, «самый-самый лучший» и современный, так что проблем с совместимостью быть не должно, и тогда покупка топового накопителя с поддержкой NVMe может оказаться вполне оправданной. Главное — не рассчитывать на то, что это принципиально изменит «качество» работы компьютера, конечно. А что можно получить на практике — оценим в следующей статье.