SNIA: RDMA QA

SNIA 홈페이지 갔다가 RDMA Q&A란 글이 보여서 AI번역(+살짝 교정)의 힘을 빌려 정리해 봤습니다. “Everything You Wanted to Know About RDMA But Were Too Proud to Ask” 제목의 웨비나에서 나왔던 Q&A를 정리한 글이구요. 발표 영상과 함께 보면 RDMA를 이해하는데 많은 도움이 될 것 같습니다.

출처: https://www.snia.org/blog/2025/rdma-qa
발표 PDF 파일: https://www.snia.org/sites/default/files/ESF/Everything-You-Wanted-to-Know-About-RDMA-But-Were-Too-Proud-to-Ask-Final%20v2.pdf
발표 동영상: https://www.youtube.com/watch?v=6t041Lr5FCY

RDMA(Remote Direct Memory Access)의 실제 작동 원리가 궁금하셨나요? 여러분만 그런 게 아닙니다.  SNIA Data, Storage & Networking Community (DSN)에서 라이브 웨비나 ” RDMA에 대해 알고 싶었지만 묻지 못했던 모든 것 “을 개최했습니다. 이 웨비나에서 전문가 발표자인 미칼 칼데론과 로한 메타는 RDMA의 작동 원리와 고속, 저지연 데이터 전송 기능을 통해 AI/ML 워크로드에서 RDMA가 수행하는 필수적인 역할을 설명했습니다. 이 프레젠테이션은   SNIA Educational Library 에서 웨비나 슬라이드와 함께 주문형으로 제공됩니다 .

현장 청중은 질문을 하는 데 “너무 자존심이 강하지” 않았고, 연사들은 여기에서 모든 질문에 친절하게 대답했습니다. 

질문: DMA 칩이 최신 CPU에 탑재되는 경우가 있나요? 아니면 별도의 칩인가요?

A: 초기 시스템 설계에서는 외부 DMA 컨트롤러를 사용했습니다. 현대 시스템은 통합 DMA 컨트롤러 설계로 전환되었습니다. DMA 컨트롤러의 발전 과정에 대한 정보는 온라인에서 많이 찾아볼 수 있습니다.  이 주제에 대한 DMA 위키백과 문서가 좋은 참고 자료가 될 수 있습니다.   

질문: 슬라이드 51: RoCEv2의 경우 랙 내부, 데이터 센터 전반, 또는 사이트 외부에서도 라우팅합니까?

A: RoCEv2는 레이어 3 네트워크에서 작동하며, 일반적으로 PFC, DCQCN, 그리고 웨비나에서 논의된 추가적인 혼잡 제어 방식과 같은 메커니즘을 통해 구현되는 무손실 네트워크 환경을 필요로 합니다. 이러한 메커니즘은 데이터 센터와 같이 제어되는 네트워크 도메인 내에서 구현 및 관리가 더 쉽습니다. 이론적으로 RoCEv2는 여러 데이터 센터에 걸쳐 적용될 수 있지만, 이러한 거리에서 무손실 상태를 유지하는 복잡성 때문에 일반적으로 사용되지는 않습니다. 

질문: WQE에 명령어 코드가 있다고 하셨는데, 이 명령어 코드는 무엇을 지정하고 어떻게 정의됩니까?

A: WQE 명령어 코드는  슬라이드 16, 30에서 언급된 실제 RDMA 연산입니다. SEND, RECV, WRITE, READ, ATOMIC입니다. 이러한 각 연산에는 설정할 수 있는 추가 필드가 있습니다. 

질문: 슬라이드 27에 오류가 있나요? 수신 측 QP-3(QP-1, QP-2, QP3으로 표시해야 하나요?) 아니면 제가 뭔가 잘못 이해하고 있는 건가요?

답변: 맞습니다. 잘 찾으셨습니다.  업데이트된 자료는 여기 에 있습니다 .

질문: 연결 후 지연 시간은 결정적인가요?

답변: 모든 네트워크 프로토콜과 마찬가지로 RDMA는 네트워크 혼잡, 데이터 패킷 간섭, 기타 지연 시간에 영향을 줄 수 있는 네트워크 조건 등의 영향을 받습니다.

질문: 버퍼링은 어떻게 작동하나요? 서버가 데이터를 전송했는데 클라이언트가 버퍼 크기 제한으로 인해 모든 데이터를 수신할 수 없는 경우, 어떻게 해야 하나요?

A: 두 그룹의 RDMA 작업에 대한 답변을 나누어 보겠습니다.

  • (a) 채널 의미론: Send과 Recv 이 경우, 애플리케이션은 송신 작업을 수행하기 전에 수신자가 RQ 버퍼를 게시했는지 확인해야 합니다. 이는 일반적으로 클라이언트 측에서 연결 요청을 시작하기 전에 RQ 버퍼를 게시함으로써 수행됩니다. 송신 패킷이 도착했지만 RQ 버퍼가 게시되지 않으면 패킷은 삭제되고 RNR NAK 메시지가 송신자에게 전송됩니다. QP에는 rnr_retry_cnt라는 설정 가능한 매개변수가 있는데, 이 매개변수는 RNIC가 RNR NAK 메시지를 수신할 경우 메시지 재전송을 시도해야 하는 횟수를 지정합니다.
  • (b) 메모리 의미론, Read, Write, Atomic의 경우 데이터가 특정 위치의 미리 등록된 메모리에 저장되므로 이런 일이 발생할 수 없습니다. 

질문: 패킷 헤더는 어떻게/어디에서 처리되나요?

A: 패킷 헤더는 R-NIC(RDMA NIC)에서 처리됩니다. 

질문: Object (S3) over RDMA가 고수준에서 어떻게 구현되는지, 여전히 HTTP/S와 관련이 있습니까?

답변: Object (S3) over RDMA를 제공하는 독점 솔루션은 있지만, 현재 상호 운용이 가능한 공급업체 특정이 아닌 구현을 만드는 데 사용할 수 있는 업계 표준은 없습니다.    

질문: TCP/IP를 통한 단일 코어 x86 대 ARM 서버 단일 코어의 초당 패킷 전송량은 얼마입니까?

A: RDMA 성능 측정 시 TCP와는 달리 초당 패킷 수가 아닌 초당 메시지를 측정합니다. 호스트에 패킷 단위 처리가 없기 때문입니다. 성능은 호스트 코어보다는 R-NIC에 더 크게 좌우되는데, 이는 CPU 처리를 우회하기 때문입니다. RDMA(RoCE)와 TCP의 성능 비교를 원하시면 “NVMe-oF Looking Beyond Performance Hero Numbers ” 웨비나를 참조하세요.

질문: 인터럽트 방식을 사용할 때 지연 시간이 길어지는 이유를 설명해 주시겠습니까?

A: 운영 모드에 따라 다릅니다.

  • 폴링 모드: 폴링 모드에서 CPU는 완료 큐에서 새로운 이벤트를 지속적으로 확인(또는 “폴링”)합니다. 이러한 지속적인 확인은 인터럽트 신호 대기로 인한 지연을 없애 이벤트 감지 및 처리를 더욱 빠르게 합니다. 하지만 처리할 이벤트가 없을 때에도 CPU가 항상 활성 상태이므로 CPU 사용률이 높아집니다.
  • 인터럽트 모드 : 인터럽트 모드에서 CPU는 인터럽트를 통해 새로운 이벤트를 수신합니다. 이벤트가 발생하면 CPU에 인터럽트 신호가 전송되고, CPU는 현재 작업을 중단하고 해당 이벤트를 처리합니다. 이 방식은 CPU가 이벤트를 기다리는 동안 다른 작업을 수행할 수 있으므로 CPU 사용 측면에서 더 효율적입니다. 하지만 인터럽트를 생성, 전달 및 처리하는 과정은 폴링 방식의 즉각적인 응답에 비해 추가적인 지연 시간을 발생시킵니다.

질문: 슬라이드 58: RDMA는 CXL을 보완하는가, 아니면 경쟁하는가?

A: 직접적인 관련이 없습니다. RDMA는 Remote DMA 작업(즉, 일종의 네트워크를 통해)을 수행하는 데 사용되는 프로토콜이고, CXL은 단일 시스템 내에서 고속의 일관된 통신을 제공하는 데 사용되는 프로토콜입니다. CXL.mem을 사용하면 장치가 단일 시스템 또는 소규모의 밀접하게 결합된 시스템 그룹 내에서 메모리에 직접 액세스할 수 있습니다. 이 질문이 RDMA가 아니라 DMA에 대한 것이라면 답변이 약간 다를 것입니다. 

질문: RDMA 데모에서는 RDMA NIC의 MTU 크기를 1K로 설정했습니다. RDMA 트래픽에 MTU 크기를 더 큰 설정(3K~9K MTU 크기)으로 설정하면 이점이 있습니까? 아니면 RoCE 애플리케이션이 RDMA NIC를 통해 생성하는 트래픽 양에 따라 실제로 달라지는 것입니까?

A: TCP와 같은 다른 프로토콜과 마찬가지로 RDMA 트래픽도 MTU 크기를 더 큰 설정으로 설정하면 이점이 있습니다. 패킷 처리 오버헤드를 줄이고 처리량을 향상시킬 수 있습니다. 

질문: 앱에서 읽기/쓰기 요청을 보낼 때 원격 사이트의 RKEY 정보를 어떻게 가져오나요? 질문 2 – 메모리 관련 문제 디버깅을 위해 LKEY가 동일한 버퍼를 가리키도록 조정할 수 있을까요? 주제가 생소해서 질문이 이해되지 않을 수 있으니 미리 양해 부탁드립니다.

A: RKEY는 채널 의미론을 사용하여 교환할 수 있으며, SEND/RECV가 사용됩니다. 이 경우 메시지가 피어의 RQ 버퍼에 게시된 첫 번째 버퍼에 도착하므로 r-key가 필요하지 않습니다. LKEY는 로컬 메모리를 참조합니다. 등록된 모든 메모리의 LKEY와 RKEY는 동일한 위치를 가리킵니다. LKEY는 로컬 RNIC에서 메모리에 액세스하는 데 사용되고, RKEY는 원격 애플리케이션에서 메모리에 액세스하는 데 사용됩니다. 

질문: SGE는 무엇의 약자인가요?

A: Scatter Gather Element. SGL(Scatter Gather List) 내의 요소입니다. 비연속적인 메모리를 참조하는 데 사용됩니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like