Рост популярности кластерных систем как среды для высоко-производительных вычислений или HPC (High Performance Computing) выводит на первый план задачу обеспечения эффективного взаимодействия платформ, образующих кластер.
![Картинка для привлечения внимания Картинка для привлечения внимания](https://habrastorage.org/r/w780q1/getpro/habr/post_images/15c/5cc/755/15c5cc755ed747ad3c87322ad36151f3.jpg)
Ведущее место здесь занимает технология RDMA (Remote Direct Memory Access), обобщающая понятие прямого доступа к памяти от передачи данных в пределах локальной платформы до взаимодействия нескольких систем в пределах кластера.
Чтобы понять смысл этой технологии, попробуем рассмотреть контроллер NIC (Network Interface Controller) вне контекста сетевых протоколов (TCP), исключительно как машину, которая умеет выполнять два действия:
Тогда, для нескольких компьютеров, связанных в сеть, совокупность их контроллеров NIC можно рассматривать как некий обобщенный контроллер DMA, который отличается от обычного контроллера DMA тем, что способен взаимодействовать не только с локальной, но и с удаленной памятью.
Итак, чем же нужно дополнить традиционную операцию копирования блока памяти, если источник и получатель такого копирования находятся на разных платформах одного кластера.
![Формат RDMA-запроса на чтение данных Read Request Формат RDMA-запроса на чтение данных Read Request](https://habrastorage.org/r/w1560/getpro/habr/post_images/c19/fad/78c/c19fad78c1e210ea0b7decc89b18eabe.png)
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. Несложно заметить, что необходимость вмешательства центрального процессора в ходе выполнения такой операции минимизирована, так как вся информация, задающая базовые адреса и размеры копируемых блоков, программируется на стороне, генерирующей запрос в момент его генерации.
![Картинка для привлечения внимания Картинка для привлечения внимания](https://habrastorage.org/getpro/habr/post_images/15c/5cc/755/15c5cc755ed747ad3c87322ad36151f3.jpg)
Ведущее место здесь занимает технология RDMA (Remote Direct Memory Access), обобщающая понятие прямого доступа к памяти от передачи данных в пределах локальной платформы до взаимодействия нескольких систем в пределах кластера.
Чтобы понять смысл этой технологии, попробуем рассмотреть контроллер NIC (Network Interface Controller) вне контекста сетевых протоколов (TCP), исключительно как машину, которая умеет выполнять два действия:
- принимать данные из сети и передавать их в оперативную память
- читать данные из оперативной памяти и передавать их в сеть.
Тогда, для нескольких компьютеров, связанных в сеть, совокупность их контроллеров NIC можно рассматривать как некий обобщенный контроллер DMA, который отличается от обычного контроллера DMA тем, что способен взаимодействовать не только с локальной, но и с удаленной памятью.
Как работает DMA в пределах кластера
Итак, чем же нужно дополнить традиционную операцию копирования блока памяти, если источник и получатель такого копирования находятся на разных платформах одного кластера.
![Формат RDMA-запроса на чтение данных Read Request Формат RDMA-запроса на чтение данных Read Request](https://habrastorage.org/getpro/habr/post_images/c19/fad/78c/c19fad78c1e210ea0b7decc89b18eabe.png)
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. Несложно заметить, что необходимость вмешательства центрального процессора в ходе выполнения такой операции минимизирована, так как вся информация, задающая базовые адреса и размеры копируемых блоков, программируется на стороне, генерирующей запрос в момент его генерации.