Можно ли обеспечить рост мощностей серверной инфраструктуры (вычислений и хранения) без привлечения сетевых архитектур 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. Методы выполнения пересылки данных память-память
Такое перемещение может быть выполнено одним из двух методов:
- Buffer Copy. Центральный процессор перемещает данные между буфером приложения и буфером, используемым контроллером NIC. Этот этап увеличивает время выполнения операции, увеличивает утилизацию процессора а также приводит к «засорению» кэш-памяти процессора данными, кэширование которых не актуально в данном контексте.
- Buffer Copy with DMA engine. Пересылка как Zero-Copy выполняется с помощью контроллера прямого доступа к памяти (DMA или Direct Memory Access). При этом, по сравнению с первым вариантом, снижается утилизация центрального процессора, тем не менее, вспомогательный этап, увеличивающий время выполнения операции, присутствует.
Интеллектуализация протокола передачи данных, и соответственное расширение функциональности контроллера NIC, позволяют исключить промежуточное копирование данных, существенно сократив время выполнения операции и минимизировав участие в ней центрального процессора. Последовательность изображена на следующей диаграмме:
Рис 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), несмотря на существенно различную внутреннюю реализацию программных и аппаратных компонентов.