GPU Direct RDMA 구현사례

  • by

GPU Direct RDMA Uploader 구현

GPU Direct RDMA uploader 는 앞서 설명한 RDMA 통신으로 원격의 이미지 데이터를 GPU 메모리에 업로드 시키도록 구현하였다. GPU 메모리에 원격 데이터를 업로드 시킬 때, RDMA 통신 뿐만 아니라 CUDA의 GPU Direct 도 이용하였다. 두 기술에서 제공하는 Zero copy와 CPU Bypass 로 전체적인 GPU 메모리 업로딩 과정에서 성능 향상을 도모 하였다.

GPU Direct RDMA Uploader Class Diagram

GPU Direct RDMA uploader 는 크게 RDMAServer와 RDMAWorker class로 구현 된다. RDMAServer는 원격의 Pre-processing Client의 RDMA connection 요청을 처리하는 class 이다. RDMAServer는 Client의 RDMA connection을 요청이 수신되면 해당 Client와 RDMA 통신을 담당하는 RDMAWorker 생성하고 다른 Client의 RDMA connection 을 기다린다. 즉 RDMAServer는 Client의 RDMA connection 요청만을 전담 처리하고 Client의 RDMA 통신은 RDMAWorker가 담당하게 된다. 따라서 GPU Direct RDMA 통신으로 원격의 이미지 데이터를 GPU 메모리 업로드하는 것은 RDMAWork가 진행하게 된다.
RDMAWorker는 Infiniband 기반의 RDMA 통신을 수행하기 위해 앞서 설명한 Protection Domains (PD), Completion Queues (CQ), Queue Pair (QP) 를 생성하고 Client와 정보 교환할 Memory Buffers를 생성한다.

Protection Domains/Completion Queue/Queue Pair 생성

RDMAWorker는 Client가 요청하는 GPU 메모리 크기를 메타데이터로 전달 받아 해당 크기 만큼 GPU 메모리를 생성한다. 이 때, GPU Direct RDMA 통신을 수행하기 위해서는 Unified Memory system이 자동으로 관리할 GPU 메모리를 cudaMallocManaged 함수를 이용하여 생성한다. 그렇게 할당 받은 GPU 메모리 주소를 Memory region으로 등록하여 Client가 RDMA WRITE로 GPU Direct RDMA 통신을 수행할 수 있게 한다.

Unified Memory 로 생성한 GPU Memory 의 Memory Region 등록