Как осуществляется передача RDMA между двумя серверами без процессора?
Я читал о RoCE, и там говорится о передаче нулевой копии данных между памятью на одном сервере непосредственно в память приложения на другом сервере. В большинстве статей указывается, что это делается без участия процессора. Хотя я не понимаю, как это достигается. Как данные попадают из адаптера в оперативную память без какой-либо обработки со стороны процессора? Как он узнает, где в оперативной памяти находятся данные приложения?
1 ответ
Я думаю, вы неправильно понимаете «без процессора». Это не означает, что ЦП вообще не задействован – это просто означает, что ЦП не выполняет копирование. Он выполняет — через драйверы — настройку операции копирования, а затем аппаратное обеспечение выполняет фактическую обработку.
Ваша ссылка говорит об этом ОЧЕНЬ явно - просто прочитайте:
RDMA поддерживает сеть с нулевым копированием, позволяя сетевому адаптеру передавать данные непосредственно по проводу.
Это операция копирования, а не установка. Кто-то должен сообщить об этом сетевому адаптеру.
Поймите, что современные сети, в которых это действительно выгодно, имеют скорость 100+ гигабит - 10 гигабайт + - в секунду, часто несколько линий вместе взятых, а в наши дни high-end составляет 400 гигабит.
Это очень много — для того, чтобы ЦП читал из ОЗУ, обрабатывал его, а затем отправлял адаптеру, тогда как вы могли бы просто указать адаптеру, какую память читать и отправлять.
Но опять же, «неучастие» — это не «совсем отсутствие ЦП», а «ЦП не копирует данные». Он по-прежнему осуществляет весь контроль.