Rеволюционный DMA: быстрее, чем TCP

08 Ноя 2015

Rеволюционный DMA: быстрее, чем TCP

Можно ли обеспечить рост мощностей серверной инфраструктуры (вы­чи­с­ле­ний и хранения) без привлечения сетевых архитектур SAN, спе­ци­а­ли­зи­ро­ван­ных устройств хранения и протоколов передачи данных, ви­ся­щих тя­же­лыми гирями на пользователе, его кошельке и степенях его свободы? Берем привычную среду связи серверов и систем хранения на классических сетевых протоколах TCP. Она не идеальна, но доступна, универсальна и пер­спективна. Оказывается, давно и хорошо знакомое понятие DMA (Direct Memory Access) можно распространить на со­во­куп­ность контроллеров NIC (Network Interface Controller) нескольких компьютеров, соединенных в локальную сеть.

Интеллектуальный транс-платформенный контроллер DMA при соответствующей программной поддержке об­об­щает и унифицирует понятие прямого доступа к памяти. Единый подход для доступа в адресное пространство как локального, так и удаленного компьютера обозначили термином RDMA (Remote Direct Memory Access).

В прикладном смысле RDMA — это механизм передачи данных между локальной сетью и оперативной памятью вычислительной платформы. Унифицируется вся адресация — и привилегированной памяти операционной сис­те­мы, и виртуальной памяти, принадлежащей приложениям. Таким образом, два приложения, запущенные на раз­лич­ных платформах, могут взаимодействовать посредством почти общей памяти. Вообще же, термину RDMA — как спутнику передачи данных без участия центрального процессора — несколько десятков лет. Теперь вос­хо­дя­щая спираль технологий достала его из шкафа и вдохнула в него новую жизнь. Оказывается, для оптимизации вы­со­ко­на­гру­жен­ных виртуализованных платформ в контексте Zero-Copy, только RDMA и не хватало.

Виртуализация устраняет посредников

Для современных вычислений характерна многоуровневая организация. Приложение, запущенное в среде ОС, ра­бо­тает в собственном виртуальном адресном пространстве. ОС, в свою очередь, может иметь статус гостевой сис­те­мы, запущенной на виртуальной машине. И так далее. Минимизация потерь производительности, связанных с вза­и­мо­дей­ствием между различными уровнями абстракции, находится сегодня в центре внимания раз­ра­бот­чи­ков программного и аппаратного обеспечения. Один из путей — устранение транзитных буферов, часто при­ме­ня­е­мых в многоуровневых системах, ведь для опытного программиста не секрет, что дополнительная операция ко­пи­ро­ва­ния память-память занимает довольно много тактов дорогостоящего процессорного времени (и существенно вли­я­ет на эффективность кэш-памяти).

Модель передачи данных, использующая транзитные буферы при взаимодействии между архитектурными уровнями
Рис 1. Модель передачи данных, использующая транзитные буферы при взаимодействии между архитектурными уровнями: разделяемые ресурсы (контроллеры NIC и транзитные буферы) находятся в собственности операционной системы, как следствие — необходимость дополнительных пересылок в памяти и низкая производительность

 

Оптимизированная модель передачи данных, без транзитных буферов
Рис 2. Оптимизированная модель передачи данных, без транзитных буферов: виртуализация устраняет посредников: здесь память пользовательских приложений является непосредственным объектом для RDMA операций контроллера NIC

Физический смысл оптимизации RDMA

Рассмотрим с некоторыми упрощениями процесс передачи блока данных между двумя компьютерами (источником и получателем) по сети. В исходном состоянии, блок данных размещен в буфере, находящемся в оперативной памяти компьютера-источника. Результатом операции будет запись блока данных в буфер, находящийся в оперативной памяти компьютера-получателя. Производительность будем оценивать двумя критериями:

  • минимизация времени выполнения операции;
  • минимальная утилизация центрального процессора (CPU Utilization).

Напомним, что типовой современный контроллер локальной сети или NIC, поддерживает технологию Bus Master и способен обмениваться информацией с оперативной памятью самостоятельно, без участия центрального процессора.

Очевидно, с точки зрения обоих критериев, система будет функционировать оптимально при отсутствии промежуточных этапов, связанных с пересылкой информации между памятью приложения и буфером, непосредственно используемым контроллером NIC. Вместе с тем, в силу особенностей использования стека сетевых протоколов в многозадачной, а особенно, виртуализованной среде, такой вариант в ряде случаев оказывается недостижимым и необходимы вспомогательные операции перемещения данных, изображенные на диаграмме:

Методы выполнения пересылки данных память-память

Рис 3. Методы выполнения пересылки данных память-память

Такое перемещение может быть выполнено одним из двух методов:

  1. Buffer Copy. Центральный процессор перемещает данные между буфером приложения и буфером, используемым контроллером NIC. Этот этап увеличивает время выполнения операции, увеличивает утилизацию процессора а также приводит к «засорению» кэш-памяти процессора данными, кэширование которых не актуально в данном контексте.
  2. Buffer Copy with DMA engine. Пересылка как Zero-Copy выполняется с помощью контроллера прямого доступа к памяти (DMA или Direct Memory Access). При этом, по сравнению с первым вариантом, снижается утилизация центрального процессора, тем не менее, вспомогательный этап, увеличивающий время выполнения операции, присутствует.

Интеллектуализация протокола передачи данных, и соответственное расширение функциональности контроллера NIC, позволяют исключить промежуточное копирование данных, существенно сократив время выполнения операции и минимизировав участие в ней центрального процессора. Последовательность изображена на следующей диаграмме:

Оптимизация передачи данных в режиме Remote DMA

Рис 4. Оптимизация передачи данных в режиме Remote DMA

Контроллер NIC, входящий в состав компьютера-источника, читает данные из буфера (Buffer 1) и передает их в линию связи (network). Контроллер NIC в компьютере-получателе принимает данные из линии и передает в оперативную память (Buffer 2). При этом существенным моментом является отсутствие транзитных буферов и промежуточных этапов копирования данных. Области памяти Buffer 1 и Buffer 2 являются частью памяти приложений. Участие центрального процессора в такой процедуре минимизировано и сводится к инициализации контроллеров перед выполнением пересылки (CPUs program NICs). Такая схема взаимодействия, обеспечивающая реализацию Zero-Copy, подразумевает, что целевые адреса буферов источника и получателя (Src Address, Dst Address) известны к моменту начала пересылки данных.

Реализация описанной модели взаимодействия в виртуализованной среде требует эффективной аппаратной поддержки, в частности диспетчеризации адресных пространств параллельно запущенных виртуальных машин и их эффективного размещения внутри физического адресного пространства хост-платформы. Как известно, такую функциональность обеспечивает технология Intel VT-d, предоставляя отдельное виртуальное адресное пространство каждому периферийному устройству.

Реализации

В зависимости от физической среды передачи данных, различают реализации оптимизированной модели RDMA для технологий Ethernet и InfiniBand. Отметим, что унификация элементов проекта на высоте: оба семейства протоколов используют единую модель программного интерфейса (API), несмотря на существенно различную внутреннюю реализацию программных и аппаратных компонентов.