Клиентам, внедряющим твердотельные накопители текущего поколения, такие как Intel DC NVMe серии P3700, приходится справляться со сложной проблемой: поскольку пропускная способность гораздо выше, чем у дисковых накопителей, а задержки гораздо ниже, большая часть общего времени транзакций теперь приходится на работу программного обеспечения хранилища. Другими словами, производительность и эффективность всей системы хранения данных все сильнее зависят от производительности и эффективности используемого программного набора. При этом носители данных постоянно совершенствуются, в ближайшие годы их мощность превзойдет возможности программных архитектур, используемых в системах хранения данных.
Для помощи ОЕМ-производителям и поставщикам программного обеспечения в интеграции такого оборудования корпорация Intel создала набор драйверов и разработала полную архитектуру хранилища под названием Storage Performance Development Kit (SPDK). Цель SPDK — подчеркнуть высокую эффективность и производительность, достигаемые совокупностью технологий Intel в области сетей, вычислений и хранения данных. С помощью SPDK удалось продемонстрировать, что можно достичь великолепных показателей в миллионы операций ввода-вывода в секунду, используя несколько процессорных ядер и несколько накопителей NVMe без какого-либо дополнительного оборудования для разгрузки. Intel предоставляет полный исходный код эталонной архитектуры для Linux на условиях более широкой и либеральной лицензии BSD, он распространяется в сообществе через GitHub. По адресу spdk.io находятся блог, список рассылки и дополнительная документация.
Как работает SPDK? Исключительно высокая производительность достигается за счет применения двух основных методик: запуска на пользовательском уровне с помощью драйверов опрашиваемого режима (PMD). Давайте подробнее рассмотрим два этих программных принципа.
Во-первых, запуск нашего кода драйвера устройства на пользовательском уровне означает по определению, что код драйвера не запускается в ядре. Отказ от прерываний и переключений контекста ядра позволяет экономить значительные вычислительные ресурсы и затрачивать больше циклов на фактическое хранение данных. Вне зависимости от сложности алгоритмов хранения (дедубликация, шифрование, сжатие или обычное блочное хранение), чем меньше затраченных впустую циклов, тем выше производительность, тем ниже задержки. При этом я не утверждаю, что ядро добавляет ненужные издержки; было бы точнее сказать, что ядро добавляет издержки, нужные для сценариев вычислений общего назначения, которые могут быть не применимы к выделенной системе хранения данных. Основополагающий принцип SPDK состоит в обеспечении наименьших задержек и наивысшей эффективности путем исключения любых источников дополнительных программных издержек.
Во-вторых, драйверы защищенного режима изменяют базовую модель ввода-вывода. В традиционной модели ввода-вывода приложение отправляет запрос на чтение или запись, а затем переходит в состояние сна и ожидает пробуждения прерыванием после завершения операции ввода-вывода. Драйверы защищенного режима работают иначе: приложение отправляет запрос на чтение или запись, а затем переключается на другую работу, периодически проверяя, не выполнен ли запрос ввода-вывода. При этом устраняются задержки и издержки, связанные с использованием прерываний, повышается эффективность ввода-вывода приложений. В эпоху использования вращающихся накопителей (например, ленточных накопителей и жестких дисков) издержки прерываний составляли незначительную долю общего времени ввода-вывода, но за счет их применения повышалась общая эффективность системы. Сейчас, в свете распространения твердотельных накопителей с низкими задержками, прерывания занимают уже значительную часть общего времени ввода-вывода. И чем ниже будут задержки, тем значительнее будет снижение производительности из-за прерываний. Системы уже способны обрабатывать миллионы операций ввода-вывода в секунду, поэтому устранение этих издержек для миллионов транзакций приведет к резкому сокращению расходования ресурсов. Пакеты и блоки распределяются мгновенно, время ожидания сводится к минимуму, благодаря чему снижаются задержки, повышается пропускная способность, а время задержек стабилизируется (меньше колебаний).
SPDK состоит из множества компонентов, взаимосвязанных и использующих общие элементы пользовательского уровня и работы в опрашиваемом режиме. Каждый из этих компонентов был создан для преодоления определенного узкого места производительности, обнаруженного при создании полной архитектуры SPDK. При этом все разработанные компоненты можно интегрировать и в другие архитектуры, отличные от SPDK, что дает клиентам возможность задействовать технологии, применяемые в SPDK, для ускорения работы собственного программного обеспечения.
Вот все эти компоненты в порядке с нижнего уровня вверх.
Драйвер NVMe: основной компонент SPDK. Этот оптимизированный драйвер обеспечивает высокую масштабируемость, эффективность и производительность работы.
Технология Intel OuickData: также называется технологией ускорения ввода-вывода Intel (Intel IOAT). Это копия подсистемы разгрузки, встроенной в платформу на основе процессоров Intel Xeon. Благодаря предоставлению доступа к пользовательскому пространству снижается порог для перемещения данных DMA, что позволяет эффективнее использовать операции ввода-вывода небольшого размера или мосты NTB.
Инициатор NVMe over Fabrics (NVMe-oF): с точки зрения программиста локальный драйвер SPDK NVMe и инициатор NVMe-oF используют общий набор команд API. Это означает, что очень просто включить, например, локальную или удаленную репликацию.
Блочное устройство Ceph RADOS (RBD): дает возможность использовать Ceph в качестве внутреннего устройства для SPDK. Благодаря этому можно использовать Ceph, к примеру, в качестве другого уровня хранилища.
Блочное устройство Blobstore: блочное устройство, выделенное пакетом SPDK Blobstore. Это виртуальное устройство, с которым могут взаимодействовать виртуальные машины или базы данных. Эти устройства используют преимущества инфраструктуры SPDK, то есть отсутствие блокировок и высокую масштабируемость производительности.
Асинхронный ввод-вывод Linux* (AIO): дает возможность SPDK взаимодействовать с устройствами ядра, например с жесткими дисками.
Уровень BDAL (уровень абстракции блочных устройств): этот общий уровень абстракции блочных устройств является связующей средой, соединяющей протоколы хранения данных с различными драйверами устройств и блочными устройствами. Также предоставляет гибкие интерфейсы API для реализации дополнительной функциональности, предоставляемой заказчикам (RAID, сжатие, дедубликация и пр.) на уровне блоков.
Blobstore: реализует упорядоченную семантику, схожую с файловой (не POSIX*), для SPDK. Этот компонент может поддерживать высокую производительность работы баз данных, контейнеров, виртуальных машин или других нагрузок, которые не зависят от большей части набора функций файловой системы POSIX, например управление доступом пользователей.
Цель iSCSI: реализация установленной спецификации блочного трафика через Ethernet, примерно вдвое эффективнее, чем ввод-вывод ядра Linux. Текущая версия использует по умолчанию стек TCP/IP ядра.
Цель NVMe-oF: реализация новой спецификации NVMe-oF. Цель NVMe-oF зависит от оборудования RDMA, но может обслуживать трафик с пропускной способностью до 40 Гбит/с на каждое ядро ЦП.
Цель yhost-scsi: компонент KVM/QEMU, использующий драйвер NVMe SPDK. За счет этого виртуальные машины получают доступ к носителям данных с пониженными задержками и снижается общая загрузка ЦП при выполнении нагрузок с интенсивными операциями ввода-вывода.
Пакет SPDK поддерживает не все архитектуры хранения данных. Вот несколько вопросов, с помощью которых можно определить, подходят ли компоненты SPDK вашей архитектуре.
Система хранения данных построена на основе Linux или FreeBSD*?
Пакет SPDK тестируется и поддерживается главным образом на платформе Linux. Драйверы оборудования поддерживаются в FreeBSD и в Linux.
Платформа оборудования системы хранения данных построена на архитектуре Intel?
Пакет SPDK использует все преимущества платформы Intel, тестируется и оптимизируется для микропроцессоров и систем Intel.
Производительность системы хранения данных сохраняется в пользовательском режиме?
В SPDK удалось добиться повышения производительности и эффективности за счет перераспределения производительности в пользовательском режиме. Если внедрить в приложениях функции SPDK, такие как цели NVMe-oF, инициатор или Blobstore, можно выполнять весь конвейер обработки данных в пользовательском пространстве и тем самым значительно повысить эффективность работы.
Допускает ли архитектура системы внедрение драйверов PMD без блокировки в поточную
модель?
Поскольку драйверы PMD постоянно работают в собственных потоках (вместо перехода в режим сна и высвобождения процессора при бездействии), у них строгие требования к поточной модели.
Система поддерживает пакет Data Plane Development Kit (DPDK) для работы с нагрузками, состоящими из сетевых пакетов?
SPDK использует одни и те же примитивы и модели программирования, что и DPDK, поэтому клиенты, использующие DPDK в настоящее время, смогут воспользоваться интеграцией с SPDK. Если же пользователи используют SPDK, добавление функций DPDK для сетевой обработки может дать существенные преимущества.
Команда разработчиков обладает нужными знаниями, чтобы самостоятельно изучать и устранять неполадки?
Корпорация Intel не принимает на себя никаких обязательств по поддержке этого программного решения. И корпорация Intel, и сообщество разработчиков программ с открытым исходным кодом, работающие с SPDK, будут предпринимать коммерчески обоснованные действия для изучения возможных ошибок неизмененных выпущенных программ, но корпорация Intel ни при каких обстоятельствах не будет принимать обязательств перед клиентами в отношении какого-либо обслуживания или поддержки этого программного решения.
Чтобы узнать больше о SPDK, заполните форму запроса контакта или посетите сайт SPDK.io для доступа к списку рассылки, документации и блогам.
Возможности и преимущества технологий Intel зависят от конфигурации системы. Может потребоваться определенное оборудование, программное обеспечение или активация служб. Производительность может различаться в зависимости от конфигурации системы. Для получения дополнительных сведений обратитесь к изготовителю или продавцу вашего оборудования или посетите сайт intel.com.
Программное обеспечение и нагрузки, использованные в тестах производительности, могли быть оптимизированы для достижения наивысшей производительности только на микропроцессорах Intel. Тесты производительности, такие как SYSmark* и MobileMark*, проводятся с использованием определенных компьютерных систем, компонентов, программного обеспечения, операций и функций. Любое изменение любого из этих факторов может привести к изменению результатов. При выборе приобретаемых продуктов следует обращаться к другой информации и тестам производительности, в том числе к тестам производительности определенного продукта в сочетании с другими продуктами.
Дополнительные сведения см. по адресу.
Для помощи ОЕМ-производителям и поставщикам программного обеспечения в интеграции такого оборудования корпорация Intel создала набор драйверов и разработала полную архитектуру хранилища под названием Storage Performance Development Kit (SPDK). Цель SPDK — подчеркнуть высокую эффективность и производительность, достигаемые совокупностью технологий Intel в области сетей, вычислений и хранения данных. С помощью SPDK удалось продемонстрировать, что можно достичь великолепных показателей в миллионы операций ввода-вывода в секунду, используя несколько процессорных ядер и несколько накопителей NVMe без какого-либо дополнительного оборудования для разгрузки. Intel предоставляет полный исходный код эталонной архитектуры для Linux на условиях более широкой и либеральной лицензии BSD, он распространяется в сообществе через GitHub. По адресу spdk.io находятся блог, список рассылки и дополнительная документация.
Обзор программной архитектуры
Как работает SPDK? Исключительно высокая производительность достигается за счет применения двух основных методик: запуска на пользовательском уровне с помощью драйверов опрашиваемого режима (PMD). Давайте подробнее рассмотрим два этих программных принципа.
Во-первых, запуск нашего кода драйвера устройства на пользовательском уровне означает по определению, что код драйвера не запускается в ядре. Отказ от прерываний и переключений контекста ядра позволяет экономить значительные вычислительные ресурсы и затрачивать больше циклов на фактическое хранение данных. Вне зависимости от сложности алгоритмов хранения (дедубликация, шифрование, сжатие или обычное блочное хранение), чем меньше затраченных впустую циклов, тем выше производительность, тем ниже задержки. При этом я не утверждаю, что ядро добавляет ненужные издержки; было бы точнее сказать, что ядро добавляет издержки, нужные для сценариев вычислений общего назначения, которые могут быть не применимы к выделенной системе хранения данных. Основополагающий принцип SPDK состоит в обеспечении наименьших задержек и наивысшей эффективности путем исключения любых источников дополнительных программных издержек.
Во-вторых, драйверы защищенного режима изменяют базовую модель ввода-вывода. В традиционной модели ввода-вывода приложение отправляет запрос на чтение или запись, а затем переходит в состояние сна и ожидает пробуждения прерыванием после завершения операции ввода-вывода. Драйверы защищенного режима работают иначе: приложение отправляет запрос на чтение или запись, а затем переключается на другую работу, периодически проверяя, не выполнен ли запрос ввода-вывода. При этом устраняются задержки и издержки, связанные с использованием прерываний, повышается эффективность ввода-вывода приложений. В эпоху использования вращающихся накопителей (например, ленточных накопителей и жестких дисков) издержки прерываний составляли незначительную долю общего времени ввода-вывода, но за счет их применения повышалась общая эффективность системы. Сейчас, в свете распространения твердотельных накопителей с низкими задержками, прерывания занимают уже значительную часть общего времени ввода-вывода. И чем ниже будут задержки, тем значительнее будет снижение производительности из-за прерываний. Системы уже способны обрабатывать миллионы операций ввода-вывода в секунду, поэтому устранение этих издержек для миллионов транзакций приведет к резкому сокращению расходования ресурсов. Пакеты и блоки распределяются мгновенно, время ожидания сводится к минимуму, благодаря чему снижаются задержки, повышается пропускная способность, а время задержек стабилизируется (меньше колебаний).
SPDK состоит из множества компонентов, взаимосвязанных и использующих общие элементы пользовательского уровня и работы в опрашиваемом режиме. Каждый из этих компонентов был создан для преодоления определенного узкого места производительности, обнаруженного при создании полной архитектуры SPDK. При этом все разработанные компоненты можно интегрировать и в другие архитектуры, отличные от SPDK, что дает клиентам возможность задействовать технологии, применяемые в SPDK, для ускорения работы собственного программного обеспечения.
Вот все эти компоненты в порядке с нижнего уровня вверх.
Драйверы оборудования
Драйвер NVMe: основной компонент SPDK. Этот оптимизированный драйвер обеспечивает высокую масштабируемость, эффективность и производительность работы.
Технология Intel OuickData: также называется технологией ускорения ввода-вывода Intel (Intel IOAT). Это копия подсистемы разгрузки, встроенной в платформу на основе процессоров Intel Xeon. Благодаря предоставлению доступа к пользовательскому пространству снижается порог для перемещения данных DMA, что позволяет эффективнее использовать операции ввода-вывода небольшого размера или мосты NTB.
Внутренние блочные устройства
Инициатор NVMe over Fabrics (NVMe-oF): с точки зрения программиста локальный драйвер SPDK NVMe и инициатор NVMe-oF используют общий набор команд API. Это означает, что очень просто включить, например, локальную или удаленную репликацию.
Блочное устройство Ceph RADOS (RBD): дает возможность использовать Ceph в качестве внутреннего устройства для SPDK. Благодаря этому можно использовать Ceph, к примеру, в качестве другого уровня хранилища.
Блочное устройство Blobstore: блочное устройство, выделенное пакетом SPDK Blobstore. Это виртуальное устройство, с которым могут взаимодействовать виртуальные машины или базы данных. Эти устройства используют преимущества инфраструктуры SPDK, то есть отсутствие блокировок и высокую масштабируемость производительности.
Асинхронный ввод-вывод Linux* (AIO): дает возможность SPDK взаимодействовать с устройствами ядра, например с жесткими дисками.
Службы хранения данных
Уровень BDAL (уровень абстракции блочных устройств): этот общий уровень абстракции блочных устройств является связующей средой, соединяющей протоколы хранения данных с различными драйверами устройств и блочными устройствами. Также предоставляет гибкие интерфейсы API для реализации дополнительной функциональности, предоставляемой заказчикам (RAID, сжатие, дедубликация и пр.) на уровне блоков.
Blobstore: реализует упорядоченную семантику, схожую с файловой (не POSIX*), для SPDK. Этот компонент может поддерживать высокую производительность работы баз данных, контейнеров, виртуальных машин или других нагрузок, которые не зависят от большей части набора функций файловой системы POSIX, например управление доступом пользователей.
Протоколы хранения данных
Цель iSCSI: реализация установленной спецификации блочного трафика через Ethernet, примерно вдвое эффективнее, чем ввод-вывод ядра Linux. Текущая версия использует по умолчанию стек TCP/IP ядра.
Цель NVMe-oF: реализация новой спецификации NVMe-oF. Цель NVMe-oF зависит от оборудования RDMA, но может обслуживать трафик с пропускной способностью до 40 Гбит/с на каждое ядро ЦП.
Цель yhost-scsi: компонент KVM/QEMU, использующий драйвер NVMe SPDK. За счет этого виртуальные машины получают доступ к носителям данных с пониженными задержками и снижается общая загрузка ЦП при выполнении нагрузок с интенсивными операциями ввода-вывода.
Пакет SPDK поддерживает не все архитектуры хранения данных. Вот несколько вопросов, с помощью которых можно определить, подходят ли компоненты SPDK вашей архитектуре.
Система хранения данных построена на основе Linux или FreeBSD*?
Пакет SPDK тестируется и поддерживается главным образом на платформе Linux. Драйверы оборудования поддерживаются в FreeBSD и в Linux.
Платформа оборудования системы хранения данных построена на архитектуре Intel?
Пакет SPDK использует все преимущества платформы Intel, тестируется и оптимизируется для микропроцессоров и систем Intel.
Производительность системы хранения данных сохраняется в пользовательском режиме?
В SPDK удалось добиться повышения производительности и эффективности за счет перераспределения производительности в пользовательском режиме. Если внедрить в приложениях функции SPDK, такие как цели NVMe-oF, инициатор или Blobstore, можно выполнять весь конвейер обработки данных в пользовательском пространстве и тем самым значительно повысить эффективность работы.
Допускает ли архитектура системы внедрение драйверов PMD без блокировки в поточную
модель?
Поскольку драйверы PMD постоянно работают в собственных потоках (вместо перехода в режим сна и высвобождения процессора при бездействии), у них строгие требования к поточной модели.
Система поддерживает пакет Data Plane Development Kit (DPDK) для работы с нагрузками, состоящими из сетевых пакетов?
SPDK использует одни и те же примитивы и модели программирования, что и DPDK, поэтому клиенты, использующие DPDK в настоящее время, смогут воспользоваться интеграцией с SPDK. Если же пользователи используют SPDK, добавление функций DPDK для сетевой обработки может дать существенные преимущества.
Команда разработчиков обладает нужными знаниями, чтобы самостоятельно изучать и устранять неполадки?
Корпорация Intel не принимает на себя никаких обязательств по поддержке этого программного решения. И корпорация Intel, и сообщество разработчиков программ с открытым исходным кодом, работающие с SPDK, будут предпринимать коммерчески обоснованные действия для изучения возможных ошибок неизмененных выпущенных программ, но корпорация Intel ни при каких обстоятельствах не будет принимать обязательств перед клиентами в отношении какого-либо обслуживания или поддержки этого программного решения.
Чтобы узнать больше о SPDK, заполните форму запроса контакта или посетите сайт SPDK.io для доступа к списку рассылки, документации и блогам.
Возможности и преимущества технологий Intel зависят от конфигурации системы. Может потребоваться определенное оборудование, программное обеспечение или активация служб. Производительность может различаться в зависимости от конфигурации системы. Для получения дополнительных сведений обратитесь к изготовителю или продавцу вашего оборудования или посетите сайт intel.com.
Программное обеспечение и нагрузки, использованные в тестах производительности, могли быть оптимизированы для достижения наивысшей производительности только на микропроцессорах Intel. Тесты производительности, такие как SYSmark* и MobileMark*, проводятся с использованием определенных компьютерных систем, компонентов, программного обеспечения, операций и функций. Любое изменение любого из этих факторов может привести к изменению результатов. При выборе приобретаемых продуктов следует обращаться к другой информации и тестам производительности, в том числе к тестам производительности определенного продукта в сочетании с другими продуктами.
Конфигурация для тестов производительности
- Два процессора Intel Xeon E5-2699 v3: 18 ядер, 2,3 ГГц (гиперпоточность отключена)
- Примечание. При тестировании производительности использовалось одно процессорное гнездо.
- 32 ГБ оперативной памяти DDR4, 2133 млн операций передачи в секунду
- 4 канала памяти на ЦП
- Один двухранговый модуль DIMM 4 ГБ на канал
- 4 канала памяти на ЦП
- Ubuntu* (Linux) Server 14.10
- Ядро 3.16.0-30-generic
- Контроллер Ethernet Intel XL710, 40GbE
- Восемь накопителей P3700 NVMe для хранения данных
- Конфигурация NVMe
- Восемь PCIe* третьего поколения по четыре NVMe
- Четыре 4 NVMe — первый разъем x16 (разделяется на четыре x4 в BIOS)
- Еще четыре NVMe — второй разъем x16 (разделяется на четыре x4 в BIOS)
- Твердотельный накопитель Intel DC серии P3700, 800 ГБ
- Версия микропрограммы: 8DV10102
- Восемь PCIe* третьего поколения по четыре NVMe
- Конфигурация теста FIO
- Прямой доступ: да
- Глубина очереди
- Случайный ввод-вывод 4 КБ: 32 операции в очереди
- Последовательный ввод-вывод 64 КБ: 8 операций в очереди
- Время подготовки: 30 секунд
- Время выполнения: 180 секунд
- Norandommap: 1
- Система ввода-вывода: Libaio
- Кол-во заданий: 1
- Конфигурация BIOS
- Технология Speed Step: отключена
- Технология Turbo Boost: отключена
- Политика питания и производительности ЦП: наивысшая производительность
Дополнительные сведения см. по адресу.
Поделиться с друзьями