RDMA 프로 그래 밍 1 수사

3567 단어 RDMA
RDMA 프로 그래 밍 연결 만 들 기
1. RDMA 학습 환경 구축
RDMA 는 전문 적 인 RDMA 네트워크 카드 나 InfiniBand 카드 가 있어 야 사용 할 수 있 습 니 다. RDMA 를 배우 고 이런 하드웨어 장치 가 없 으 면 소프트웨어 RDMA 시 뮬 레이 션 환경, softiwarp 를 사용 할 수 있 습 니 다. - 이것 은 로드 주소 입 니 다.https://github.com/zrlio/softiwarp - 설치 튜 토리 얼 입 니 다.http://www.reflectionsofthevoid.com/2011/03/how-to-install-soft-iwarp-on-ubuntu.html
여기 도 RDMA 프로 그래 밍 의 입문 예시 가 있 는데, -https://github.com/tarickb/the-geek-in-the-corner 주의해 야 할 것 은 이 예 에서 부족 한 것 은 IPv 6 연결 입 니 다. IPv 4 환경 에서 테스트 하려 면 먼저 코드 를 바 꾸 어 IPv 4 주 소 를 사용 해 야 합 니 다.
2. RDMA 와 socket 의 비교
소켓 연결 과 유사 하 며 RDMA 연결 도 신뢰 할 수 있 는 연결 과 신뢰 할 수 없 는 연결 로 나 뉜 다.그러나 완전히 같 지 않다. Socket 의 신뢰성 있 는 연결 은 바로 TCP 연결 이 고 흐름 식 이다.신뢰 할 수 없 는 연결 은 UDP 로 메시지 식 입 니 다.RDMA 의 경우 신뢰 할 수 있 는 연결 과 신뢰 할 수 없 는 연결 이 든 모두 메시지 식 이다.프로 그래 밍 측면 에서 볼 때 RDMA 코드 도 Server 엔 드, Client 엔 드, bid, listen, connect, accept 등 동작 으로 나 뉘 지만 세부 적 으로 는 많은 차이 가 있다.
3. 서버 에서 RDMA 서버 의 코드 프로 세 스 는 다음 과 같 습 니 다.
  • rdma_create_event_channel 이 단 계 는 이벤트 channel 을 만 드 는 것 입 니 다. 이벤트 channel 은 RDMA 장치 가 작 동 한 후에 연결 요청 등 이벤트 가 발생 했 을 때 프로그램 에 알 리 는 채널 입 니 다.그 내 부 는 file descriptor 이기 때문에 poll 등 을 할 수 있 습 니 다.
  • rdma_create_id 이 단계 에서 rdma 만 들 기cm_id, 개념 적 등가 와 socket 프로 그래 밍 시의 listen socket.
  • rdma_bind_addr 는 socket 프로 그래 밍 과 마찬가지 로 로 로 컬 주소 와 포트 를 연결 하여 listen 작업 을 해 야 합 니 다.
  • rdma_listen 클 라 이언 트 의 연결 요청 검색 시작
  • rdma_get_cm_이벤트 이 호출 은 첫 번 째 로 만 든 이벤트 채널 에 작용 하여 이벤트 채널 에서 이 벤트 를 가 져 오 는 것 입 니 다.이것 은 이벤트 가 있 을 때 만 돌아 오 는 차단 호출 입 니 다.모든 정상 적 인 상황 에서 함수 가 돌아 올 때 RDMA 를 얻 을 수 있 습 니 다.CM_EVENT_CONNECT_REQUEST 이벤트, 즉 클 라 이언 트 가 연결 을 시 작 했 습 니 다.이벤트 의 매개 변수 에 새로운 rdma 가 있 습 니 다.cm_id 전송.이 점 은 socket 과 다 릅 니 다. socket 은 accept 후에 만 새로운 socket fd 가 생 성 됩 니 다.
  • ibv_alloc_pd 에서 proctection domain 을 만 듭 니 다.protection domain 은 메모리 보호 단위 로 볼 수 있 으 며, 메모리 영역 과 대기 열 에 직접 관련 관 계 를 맺 어 권한 이 부여 되 지 않 은 접근 을 방지 할 수 있 습 니 다.
  • ibv_create_comp_channel 은 이전에 만 든 이벤트 channel 과 유사 합 니 다. 이것 도 이벤트 channel 이지 만 대기 열 에 있 는 이 벤트 를 보고 하 는 데 만 사 용 됩 니 다.대기 열 에 새로운 작업 이 완료 되 었 을 때 이 채널 을 통 해 프로그램 에 보고 합 니 다.
  • ibv_create_cq 생 성 완료 대기 열, 생 성 시 6 단계 채널 을 지정 합 니 다.
  • rdma_create_qp 는 queue pair 를 만 듭 니 다. queue pair 는 queue 를 보 내 고 받 는 queue 를 포함 합 니 다. 앞 에 만 든 cq 를 완성 대기 열 로 지정 합 니 다.이 qp 생 성 시 6 단계 생 성 된 pd 에 연 결 된 것 을 지정 합 니 다.
  • ibv_reg_mr 등록 메모리 영역.RDMA 에서 사용 하 는 메모 리 는 반드시 사전에 등록 해 야 한다.이것 은 이해 할 수 있 는 것 이다. DMA 의 메모 리 는 경계 정렬, swap 될 수 있 는 지 등에 대한 요구 가 있다.
  • rdma_accept 이로써 모든 준 비 를 마 쳤 습 니 다. accept 를 호출 하여 클 라 이언 트 의 이 요청 을 받 아들 일 수 있 습 니 다. -:)한숨 을 내 쉬 세 요 ~ ~ 잠깐 만 요!
  • rdma_ack_cm_이벤트 채널 에서 얻 은 모든 이벤트 에 대해 ack 함 수 를 호출 해 야 합 니 다. 그렇지 않 으 면 메모리 누 출 이 발생 합 니 다.이 단계 의 ack 는 5 단계 에 대응 하 는 get 입 니 다.매번 get 호출 에 대응 하 는 ack 호출 이 있어 야 합 니 다.
  • rdma_get_cm_이벤트 계속 호출 rdma_get_cm_event, 모든 것 이 정상 이면 우 리 는 지금 RDMA 를 받 아야 합 니 다.CM_EVENT_ESTABLISHED 사건 은 연결 이 이미 구축 되 었 음 을 나타 낸다.별도의 처리 없 이 바로 rdma_ack_cm_event 하면 됩 니 다
  • 드디어 데이터 전송 을 시작 할 수 있 게 되 었 습 니 다.
    4. 연결 닫 기
  • 연결 을 끊 고 rdma_get_cm_event RDMA 로 돌아 가기CM_EVENT_DISCONNECTED 이벤트 에 서 는 클 라 이언 트 가 연결 을 끊 었 음 을 나타 내 며 server 엔 드 는 대응 하 는 청 소 를 해 야 합 니 다.이 때 이벤트 자원 을 호출 rdma_ack_cm_event 할 수 있 습 니 다.그리고 다음 함 수 를 순서대로 호출 하여 연결 자원, 메모리 자원, 대기 열 자원 을 방출 합 니 다.
  • rdma_disconnect
  • rdma_destroy_qp
  • ibv_dereg_mr
  • rdma_destroy_id 클 라 이언 트 와 연 결 된 rdma 방출cm_id
  • rdma_destroy_id 수사 에 사용 할 rdma 방출cm_id
  • rdma_destroy_event_채널 방출 이벤트 채널
  • 좋은 웹페이지 즐겨찾기