Введение
Системы хранения данных на основе твердотельных накопителей получают все более широкое распространение в центрах обработки данных. Хранилища на базе флеш-памяти текущего поколения обладают значительными преимуществами с точки зрения производительности, потребления электроэнергии и плотности данных в стойках по сравнению с дисковыми накопителями. Эти преимущества станут еще более ощутимыми при появлении на рынке накопителей нового поколения.
Клиентам, внедряющим твердотельные накопители текущего поколения, такие как Intel® P3700 NVMe*, приходится справляться со сложной проблемой: поскольку пропускная способность гораздо выше, чем у дисковых накопителей, а задержки гораздо ниже, большая часть общего времени транзакций теперь приходится на работу программного обеспечения хранилища. Другими словами, производительность и эффективность всей системы хранения данных все сильнее зависит от производительности и эффективности используемого программного набора. При этом носители данных постоянно совершенствуются, в ближайшие годы их мощность превзойдет возможности программных архитектур, используемых в системах хранения данных.
Для помощи ОЕМ-производителям и поставщикам программного обеспечения в интеграции такого оборудования корпорация Intel создала набор драйверов и разработала полную архитектуру хранилища. Эта инициатива получила название Storage Performance Development Kit (SPDK). Цель SPDK — подчеркнуть высокую эффективность и производительность, достигаемую совокупностью технологий Intel в области сетей, вычислений и хранения данных. С помощью SPDK удалось продемонстрировать, что можно достичь великолепных показателей в миллионы операций ввода-вывода в секунду, используя несколько процессорных ядер и несколько накопителей NVMe без какого-либо дополнительного оборудования для разгрузки. Intel бесплатно предоставляет полный исходный код эталонной архитектуры Linux* (по лицензии Intel). Драйвер пользовательского режима NVMe предоставлен в виде открытого исходного кода сообществу на портале 01.org, а код других элементов пакета будет представлен в течение 2016 года.
Обзор программной архитектуры
Как работает SPDK? Исключительно высокая производительность достигается за счет применения двух основных методик: работа на пользовательском уровне и в опрашиваемом режиме. Давайте подробнее рассмотрим два этих программных принципа.
Во-первых, работа нашего кода драйвера устройства на пользовательском уровне означает по определению, что код драйвера не запускается в ядре. Отказ от прерываний и переключений контекста ядра позволяет экономить значительные вычислительные ресурсы и затрачивать больше циклов на фактическое хранение данных. Вне зависимости от сложности алгоритмов хранения (дедупликация, шифрование, сжатие или обычное блочное хранение) чем меньше затраченных впустую циклов, тем выше производительность.
Во-вторых, драйверы опрашиваемого режима (PMD) постоянно ожидают работы вместо того, чтобы быть отправленными на работу. Представьте такую ситуацию: вечером в пятницу в центре города вы стоите на тротуаре, пытаясь поймать такси, но автомобили один за другим проезжают мимо вас, поскольку в них уже сидят пассажиры. При этом невозможно предсказать, сколько времени вам придется ждать у дороги, прежде чем найдется свободное такси. Именно такие затруднения могут ожидать пакет или блок данных при попытке «поймать тачку» в традиционном драйвере ввода-вывода хранилища данных с распределением нагрузки на основе прерываний. С другой стороны, представьте процесс посадки в такси в хорошем аэропорту. Водители такси уже на месте и ожидают подходящих по очереди пассажиров; при появлении пассажира они уже через несколько секунд подают машину и доставляют пассажиров и багаж по нужным адресам. Именно так работают драйверы опрашиваемого режима (PMD), и так устроены все компоненты SPDK. Пакеты и блоки распределяются мгновенно, время ожидания сводится к минимуму, благодаря чему снижаются задержки, повышается пропускная способность, а время задержек стабилизируется (меньше колебаний).
SPDK состоит из множества компонентов, взаимосвязанных и использующих общие элементы пользовательского уровня и работы в опрашиваемом режиме. Каждый из этих компонентов был создан для преодоления определенного узкого места производительности, обнаруженного при создании полной архитектуры SPDK. При этом все разработанные компоненты можно интегрировать и в другие архитектуры, отличные от SPDK, что дает клиентам возможность задействовать технологии, применяемые в SPDK, для ускорения работы собственного программного обеспечения. Например, была создана библиотека сетевых служб пользовательского пространства (UNS) для преодоления ограничений производительности набора TCP/IP ядра Linux. За счет создания работающей в пользовательском режиме опрашиваемой реализации TCP/IP в SPDK удалось добиться гораздо более высоких показателей IOPS, затрачивая намного меньше процессорных циклов на сортировку и обработку TCP/IP-пакетов.
Решение состоит из трех категорий компонентов: внешний сетевой интерфейс, вычислительная платформа и внутренние системы.
Внешний интерфейс состоит из драйвера сетевого адаптера Data Plane Development Kit (DPDK) и сетевых служб пользовательского пространства (UNS). DPDK образует платформу для высокоскоростной обработки пакетов на уровне сетевого адаптера, что позволяет данным быстрее попадать из сетевого адаптера в пользовательское пространство. После этого за работу принимается код UNS: он распаковывает TCP/IP-пакеты и формирует команды iSCSI.
После этого вычислительная платформа получает содержимое пакетов и преобразует команды iSCSI в команды SCSI блочного уровня. Перед отправкой этих команд внутренним драйверам в SPDK существует платформа API для добавления индивидуальных функций, необходимых клиентам, в рамках платформы SPDK (зеленый прямоугольник на показанном выше рисунке). Примеры таких функций: кэширование, дедупликация и сжатие данных, шифрование, вычисления для RAID и распределенного хранения. Образцы таких функций входят в состав SPDK, хотя их не следует принимать за реализации, готовые к использованию в рабочей среде: они служат лишь для моделирования реальных сценариев использования.
Наконец, данные попадают к драйверам бэк-энда, которые занимаются взаимодействием с физическими устройствами, то есть осуществляют операции чтения и записи. SPDK включает PMD пользовательского уровня для различных носителей хранения данных: устройства NVMe; универсальные устройства под управлением Linux с традиционными дисковыми накопителями; драйверы памяти для решений с блочной адресацией памяти (например, RAMDISKS), а также устройства, способные использовать технологию Intel® I/O Acceleration Technology (Crystal Beach DMA). Пакет бэк-энд драйверов позволяет расширить спектр используемых высокопроизводительных устройств хранения данных, что повышает универсальность всей системы.
SPDK совместим не со всеми архитектурами систем хранения данных. Вот несколько вопросов, с помощью которых пользователи смогут определить, подходят ли компоненты SPDK к их архитектуре.
Система хранения данных работает на основе Linux?
В настоящее время пакет SPDK протестирован и поддерживается только на Linux.
Производительность системы хранения данных сохраняется в пользовательском режиме?
В SPDK удалось добиться повышения производительности и эффективности за счет перераспределения производительности с сетевого адаптера на диск исключительно в пользовательском режиме.
Допускает ли архитектура системы внедрение драйверов PMD без блокировки в поточную модель?
Поскольку драйверы PMD постоянно работают в собственных потоках (вместо перехода в режим сна и высвобождения процессора при бездействии), у них строгие требования к поточной модели.
Использует ли система Data Plane Development Kit (DPDK) для работы с нагрузками, состоящими из сетевых пакетов
DPDK содержит платформу для SPDK, поэтому клиенты, использующие DPDK в настоящее время, смогут воспользоваться интеграцией с SPDK.
Допускает ли ваша модель лицензирования использование нераспространяемого исходного кода?
Некоторые части SPDK доступны в виде компонентов с открытым исходным кодом с лицензиями BSD (например, NVMe и драйверы пользовательского пространства CBDMA). Другие фрагменты в данное время лицензируются по лицензии Intel (UNS и iSCSI Target пользовательского пространства), хотя это, конечно же, может измениться. Весь исходный код SPDK предоставляется бесплатно.
Обладает ли команда разработчиков нужными знаниями, чтобы самостоятельно изучать и устранять неполадки?
Корпорация Intel не принимает на себя никаких обязательств по поддержке этого программного решения. И корпорация Intel, и сообщество разработчиков программ с открытым исходным кодом, работающие с SPDK, будут предпринимать коммерчески обоснованные действия для изучения возможных ошибок неизмененных выпущенных программ, но корпорация Intel ни при каких обстоятельствах не будет принимать обязательств перед клиентами в отношении какого-либо обслуживания или поддержки этого программного решения.
Возможности и преимущества технологий Intel зависят от конфигурации системы. Может потребоваться определенное оборудование, программное обеспечение или активация служб. Производительность может различаться в зависимости от конфигурации системы. Обратитесь к изготовителю системы или в розничный магазин, где вы ее приобрели, или на сайт intel.com.
Программное обеспечение и нагрузки, использованные в тестах производительности, могли быть оптимизированы для достижения высокой производительности на микропроцессорах Intel. Тесты производительности, такие как SYSmark* и MobileMark*, проводятся на определенных компьютерных системах, компонентах, программах, операциях и функциях. Любые изменения любого из этих элементов могут привести к изменению результатов. При выборе приобретаемых продуктов следует обращаться к другой информации и тестам производительности, в том числе к тестам производительности определенного продукта в сочетании с другими продуктами.
Конфигурация, использованная для измерения производительности
- 2S Xeon® E5-2699v3: 18 ядер, 2,3 ГГц (гиперпоточность выключена)
- Примечание: при измерении производительности использовалось одно процессорное гнездо.
- 32 ГБ ОЗУ, DDR4, 2133 млн передач в секунду
- 4 канала памяти на каждый ЦП
- 1x 4 ГБ 2R DIMM на канал
- 4 канала памяти на каждый ЦП
- Ubuntu (Linux) Server 14.10
- Ядро 3.16.0-30-generic
- Ethernet-контроллер XL710, 40 Гбит/с
- 8 устройств P3700 NVMe для хранения данных
- Конфигурация NVMe
- Всего 8 NVMe PCIe 3-го поколения, по 4
- 4 NVMe подключены к 1-му разъему x16
(разветвление на 4 x4 в BIOS) - 4 NVMe подключены ко 2-му разъему x16 (разветвление на 4 x4 в BIOS)
- 4 NVMe подключены к 1-му разъему x16
- Intel SSD DC P3700, 800 ГБ
- Микропрограмма: 8DV10102
- Всего 8 NVMe PCIe 3-го поколения, по 4
- Конфигурация теста FIO BenchMark
- Direct: Да
- Глубина очереди
- 4KB Random I/O: 32 outstanding I/O
- 64KB Seq. I/O: 8 outstanding I/O
- Время подготовки: 30 секунд
- Время выполнения: 180 секунд
- Norandommap: 1
- I/O Engine: Libaio
- Numjobs: 1
- Конфигурация BIOS
- Speed Step: отключено
- Turbo Boost: отключено
- Политика оптимизации экономичности и производительности ЦП: производительность
Дополнительные сведения см. на сайте http://www.intel.com/performance.
Данный документ не предоставляет явной или подразумеваемой лицензии, лишения права возражения или иных прав на интеллектуальную собственность.
Корпорация Intel не предоставляет никаких гарантий (явных и подразумеваемых), включая подразумеваемые гарантии коммерческой ценности, пригодности для какой-либо цели или ненарушения каких-либо прав, а также любых гарантий, связанных с работой программ, их распространением или их использованием в торговле.
Этот документ содержит информацию о продуктах, службах и процессах, находящихся на этапе разработки. Вся информация, представленная в данном документе, может быть изменена без предварительного уведомления. Для получения последних прогнозов, графиков, технических характеристик и планов развития обратитесь к своему представителю корпорации Intel.
Продукты и услуги, описанные в данном документе, могут содержать ошибки и неточности, из-за чего реальные характеристики продуктов могут отличаться от приведенных здесь. Уже выявленные ошибки могут быть предоставлены по запросу.
Копии документов с порядковым номером, ссылки на которые приведены в этом документе или в другой документации Intel, можно получить, обратившись по телефону 1-800-548-47-25 или на сайте www.intel.com/design/literature.htm.
Intel, эмблема Intel и Xeon являются товарными знаками корпорации Intel в США и других странах.
*Прочие наименования и товарные знаки могут быть собственностью третьих лиц.
© Intel Corporation, 2015 г.