Рост популярности кластерных систем как среды для высоко-производительных вычислений или HPC (High Performance Computing) выводит на первый план задачу обеспечения эффективного взаимодействия платформ, образующих кластер.
Ведущее место здесь занимает технология RDMA (Remote Direct Memory Access), обобщающая понятие прямого доступа к памяти от передачи данных в пределах локальной платформы до взаимодействия нескольких систем в пределах кластера.
Чтобы понять смысл этой технологии, попробуем рассмотреть контроллер NIC (Network Interface Controller) вне контекста сетевых протоколов (TCP), исключительно как машину, которая умеет выполнять два действия:
Тогда, для нескольких компьютеров, связанных в сеть, совокупность их контроллеров NIC можно рассматривать как некий обобщенный контроллер DMA, который отличается от обычного контроллера DMA тем, что способен взаимодействовать не только с локальной, но и с удаленной памятью.
Итак, чем же нужно дополнить традиционную операцию копирования блока памяти, если источник и получатель такого копирования находятся на разных платформах одного кластера.
Figure 6 из документа RFC5040.txt (A Remote Direct Memory Access Protocol Specification) раскрывает низкоуровневый смысл тегирования; таблица показывает формат одного из RDMA-запросов: Read Request – это запрос на чтение данных
Запрос содержит информацию идентифицирующую буфер-источник и адрес внутри него, буфер-получатель и адрес внутри него, а также длину передаваемого блока. Передача такого полного набора параметров является свойством тегированных запросов, адресующих конкретные диапазоны адресов в конкретных буферах.
Data Sink Steering Tag [32 bits] – номер, под которым в пределах кластера зарегистрирован буфер-получатель.
Data Sink Tagged Offset [64 bits] – смещение начала записываемого блока относительно начала буфера-получателя.
RDMA Read Message Size [32 bits] – размер пересылаемого блока.
Data Source Steering Tag [32 bits] – номер, под которым в пределах кластера зарегистрирован буфер-источник.
Data Source Tagged Offset [64 bits] – смещение начала читаемого блока относительно начала буфера-источника.
Такой набор из пяти параметров отличается от привычного канонического набора трех параметров операции копирования (адрес источника, адрес получателя, длина блока) только тем, что наряду с использованием 64-битных адресов (смещений) используются номера буферов (теги). Причина такого усложнения очевидна: взаимодействуют несколько платформ, у каждой платформы свое адресное пространство, поэтому для идентификации любого объекта, знания одного только адреса недостаточно.
Буферы, являющиеся логически непрерывными, могут быть фрагментированными в физических адресных пространствах платформ. Это следует из логики работы виртуальной памяти в операционной системе. 64-битные смещения Tagged Offsets задают не физические, а логические (виртуальные) адреса, которые необходимо подвергнуть страничной трансляции и дефрагментации посредством устройств Scatter-Gather, чтобы, в конечном счете, объектом RDMA-операций контроллера RNIC стала память пользовательских приложений, как это предписывает модель передачи данных Direct Data Placement (DDP).
Очевидно, технология RDMA, также как и традиционный стек сетевых протоколов, обеспечивает передачу данных между вычислительными платформами. Чем же она лучше традиционного подхода к обмену информацией по локальной сети?
В случае использования тегированных запросов, каждая из платформ, образующих кластер обладает информацией, необходимой для дистанционной адресации памяти другой платформы. Раздельные физически адресные пространства систем, образующих кластер, могут быть объединены в единое логическое адресное пространство.
Схема адресации, используемая драйверами RDMA, гарантирует, что на момент инициирования операции передачи данных, известны конечные целевые адреса как буфера-источника так и буфера-получателя. Оба этих буфера находятся в адресном пространстве пользовательских приложений. Такая форма организации передачи данных, позволяющая устранить необходимость в транзитных буферах и дополнительных операциях копирования данных, называется Zero-Copy. Несложно заметить, что необходимость вмешательства центрального процессора в ходе выполнения такой операции минимизирована, так как вся информация, задающая базовые адреса и размеры копируемых блоков, программируется на стороне, генерирующей запрос в момент его генерации.
Ведущее место здесь занимает технология RDMA (Remote Direct Memory Access), обобщающая понятие прямого доступа к памяти от передачи данных в пределах локальной платформы до взаимодействия нескольких систем в пределах кластера.
Чтобы понять смысл этой технологии, попробуем рассмотреть контроллер NIC (Network Interface Controller) вне контекста сетевых протоколов (TCP), исключительно как машину, которая умеет выполнять два действия:
- принимать данные из сети и передавать их в оперативную память
- читать данные из оперативной памяти и передавать их в сеть.
Тогда, для нескольких компьютеров, связанных в сеть, совокупность их контроллеров NIC можно рассматривать как некий обобщенный контроллер DMA, который отличается от обычного контроллера DMA тем, что способен взаимодействовать не только с локальной, но и с удаленной памятью.
Как работает DMA в пределах кластера
Итак, чем же нужно дополнить традиционную операцию копирования блока памяти, если источник и получатель такого копирования находятся на разных платформах одного кластера.
Figure 6 из документа RFC5040.txt (A Remote Direct Memory Access Protocol Specification) раскрывает низкоуровневый смысл тегирования; таблица показывает формат одного из RDMA-запросов: Read Request – это запрос на чтение данных
Запрос содержит информацию идентифицирующую буфер-источник и адрес внутри него, буфер-получатель и адрес внутри него, а также длину передаваемого блока. Передача такого полного набора параметров является свойством тегированных запросов, адресующих конкретные диапазоны адресов в конкретных буферах.
Data Sink Steering Tag [32 bits] – номер, под которым в пределах кластера зарегистрирован буфер-получатель.
Data Sink Tagged Offset [64 bits] – смещение начала записываемого блока относительно начала буфера-получателя.
RDMA Read Message Size [32 bits] – размер пересылаемого блока.
Data Source Steering Tag [32 bits] – номер, под которым в пределах кластера зарегистрирован буфер-источник.
Data Source Tagged Offset [64 bits] – смещение начала читаемого блока относительно начала буфера-источника.
Такой набор из пяти параметров отличается от привычного канонического набора трех параметров операции копирования (адрес источника, адрес получателя, длина блока) только тем, что наряду с использованием 64-битных адресов (смещений) используются номера буферов (теги). Причина такого усложнения очевидна: взаимодействуют несколько платформ, у каждой платформы свое адресное пространство, поэтому для идентификации любого объекта, знания одного только адреса недостаточно.
Буферы, являющиеся логически непрерывными, могут быть фрагментированными в физических адресных пространствах платформ. Это следует из логики работы виртуальной памяти в операционной системе. 64-битные смещения Tagged Offsets задают не физические, а логические (виртуальные) адреса, которые необходимо подвергнуть страничной трансляции и дефрагментации посредством устройств Scatter-Gather, чтобы, в конечном счете, объектом RDMA-операций контроллера RNIC стала память пользовательских приложений, как это предписывает модель передачи данных Direct Data Placement (DDP).
Резюме
Очевидно, технология RDMA, также как и традиционный стек сетевых протоколов, обеспечивает передачу данных между вычислительными платформами. Чем же она лучше традиционного подхода к обмену информацией по локальной сети?
В случае использования тегированных запросов, каждая из платформ, образующих кластер обладает информацией, необходимой для дистанционной адресации памяти другой платформы. Раздельные физически адресные пространства систем, образующих кластер, могут быть объединены в единое логическое адресное пространство.
Схема адресации, используемая драйверами RDMA, гарантирует, что на момент инициирования операции передачи данных, известны конечные целевые адреса как буфера-источника так и буфера-получателя. Оба этих буфера находятся в адресном пространстве пользовательских приложений. Такая форма организации передачи данных, позволяющая устранить необходимость в транзитных буферах и дополнительных операциях копирования данных, называется Zero-Copy. Несложно заметить, что необходимость вмешательства центрального процессора в ходе выполнения такой операции минимизирована, так как вся информация, задающая базовые адреса и размеры копируемых блоков, программируется на стороне, генерирующей запрос в момент его генерации.