개요
RDMA는 NIC에서 RAM으로 그리고 RAM에서 NIC으로의 데이터 전송이 CPU의 개입없이 이루어질 수 있도록 한다.
DMA에 대한 배경지식이 필요하다. IO를 다루는 많은 방법중에서, CPU는 장치와 메모리 사이에 데이터 복사를 담당한다. 이는 CPU가 복사 작업 중에 다른 작업을 하지 못하는 것을 의미한다. 이러한 병목 현상을 해결하기 위해서 DMA는 CPU와 IO장치 사이에 주 메모리 사이의 전송을 책임하는 별도의 컨트롤러를 둔다. CPU는 전송을 시작하고 DMA기술을 이용하여 실제로 그러한 작업을 하며 그 와중에 CPU는 다른 일을 처리한다. DMA전송이 완료되면 CPU에 전송이 완료됨을 알리는 인터럽트를 전송하고 OS에 이러한 전송이 완료됨을 알려준다. 이러한 DMA를 사용함으로써, 부하가 많은 CPU작업과 부하는 적지만, 많은 IO를 요구하는 프로세스의 매니지 먼트를 효과적으로 할 수 있도록 한다.
RDMA는 이러한 DMA를 네트워크로 확장한 것이다. NIC에서는 네트워크 패킷에 대한 수많은 복사가 이루어지고 있다. 사실 RAW한 데이터를 커널로 복사하는 작업은 이미 기존의 DMA처럼 NIC카드를 하나의 장치로 보아서 이미 이루어지고 있다. 그러나 RAW한 데이터가 커널로 움직이더라도 커널은 이 데이터를 디코딩 해야 하며, 디코딩된 데이터를 다시 User Space로 전송하여야 한다. 이러한 모든 작업은 추가적인 복사작업과 커널의 개입을 요구한다. RDMA는 이러한 오버로딩을 해결하기 위해서 NIC에서 바로 User Space에 이러한 작업을 마친 데이터를 전송하는 기술을 말한다. OS커널은 데이터 전송에 전혀 관여하지 않아도 된다. 이러한 병렬작업은 많은 양의 계산과 네트워크 처리를 할때 많은 속도 향상을 기대할 수 있다.