RDMA — это эффективный способ обойти бесполезные копии данных между приложением и ядром ОС. Mmap — это эффективный способ работы с большими файлами, как будто это просто массив байтов.
Я работаю с MPI через Infiniband, который поддерживает сетевые операции RDMA между процессами. Каждый процесс MPI имеет очень большой файл, которым можно поделиться с другими.
Может ли каждый процесс MPI создать область mmap для каждого большого файла и поделиться ею с другими? Я хочу, чтобы каждый процесс мог читать любой файл любого процесса, как если бы он читал их память через RDMA (односторонняя связь MPI).
Насколько мне известно, когда приложение вызывает операцию RDMA, оно передает «адрес виртуальной памяти» непосредственно в сетевой адаптер. Сетевая карта будет заниматься преобразованием адреса виртуальной памяти в адрес физической памяти. Если драйвер RDMA закрепит страницу интересов до того, как выдаст запрос к сетевому адаптеру, я думаю, это сработает. Есть ли кто-нибудь, у кого есть опыт в этом? :D
Спасибо