company_banner

Введение в Storage Performance Development Kit

Original author: Jonathan S.
  • Translation
Системы хранения данных на основе твердотельных накопителей получают все более широкое распространение в центрах обработки данных. Хранилища на базе флеш-памяти текущего поколения обладают значительными преимуществами с точки зрения производительности, потребления электроэнергии и плотности данных в стойках по сравнению с дисковыми накопителями. Эти преимущества станут еще более ощутимыми при появлении на рынке накопителей нового поколения. Клиентам, внедряющим твердотельные накопители текущего поколения, такие как Intel P3700 NVMe*, приходится справляться со сложной проблемой: поскольку пропускная способность гораздо выше, чем у дисковых накопителей, а задержки гораздо ниже, большая часть общего времени транзакций теперь приходится на работу программного обеспечения хранилища.

Для помощи ОЕМ-производителям и поставщикам программного обеспечения в интеграции такого оборудования корпорация Intel создала набор драйверов и разработала полную архитектуру хранилища. Эта инициатива получила название Storage Performance Development Kit (SPDK). Цель SPDK — подчеркнуть высокую эффективность и производительность, достигаемую совокупностью технологий Intel в области сетей, вычислений и хранения данных. 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
Company

Comments 2

    –1
    То есть Intel в SPDK

    1) Использует свой стек TCP/IP вместо встроенного в ядро iptables
    2) Использует свой iSCSI target вместо встроенного в ядро LIO
    3) Использует свои стек блочного I/O вместо встроенного в ядро и свои драйверы для устройств хранения.
    И все это — в юзерспейсе.

    Что же там от бедного Linux'а осталось-то?
      0
      А зачем что-то оставлять, если стандартный вариант использования подразумевает NUMA аффинность и запуск приложения на полностью изолированных от планировщика ядрах с пачкой больших страниц?

      Там линукс нужен только для того что бы инициализировать RDMA, CBDMA и IOMMU в рамках VFIO, и всё.
      В принципе, для этого можно реализовать отдельный загрузчик и полностью избавится от ядра ОС… с другой стороны вопрос менеджмента и поддержки окружения усложняется на несколько порядков.

      p.s. CBDMA — common buffer DMA, есть ещё S/GDMA — Scatter/gather DMA. Разница заключается в принципе обращения и работы с памятью. Scatter/Gather может работать с фрагментированной памятью, что требует отдельных mapping регистров и снижает размер блока данных DMA транзакции SDV (Single DMA Volume). CBDMA работает с непрерывной памятью, которая называется Common buffer и является набором больших страниц, и для его работы не требуется mapping соответственно и SDV с пропускной способностью у него на много выше. S/GDMA стоит применять когда нет возможности выделить большие страницы.

    Only users with full accounts can post comments. Log in, please.