[RIO 게임서버 01.] Registered I/O 모델 개요

Index·2023년 6월 2일
1

RIO

목록 보기
1/1
post-thumbnail

| RIO (Registered IO)

윈도우 서버 중 가장 최신(사실 10년도 넘었지만..)의 서버 모델로, 낮은 CPU부하저지연, 안정성이 장점인 모델이다. 초당 패킷 처리량이 많은 데이터베이스 서버나 스트리밍 서버에 사용하면 엄청난 양의 패킷을 처리하기에 용이하다. 비슷한 모델로 Linux의 io_uring이 있다. RIO로 만들어진 서버는 국내에서 '리니지W'가 유일하다. 거의 모든 MMO서버는 IOCP를 사용하기 때문에 자료가 거의 없다시피 하다.

🔧 참고 자료

✨ 특징

  • IO에 사용할 버퍼를 미리 등록한다는 개념이다.
    - 공유메모리를 사용함으로써 context-swiching의 오버헤드를 줄일 수 있다.
    - 버퍼는 RIO에서 관리하게 되므로 SO_SNDBUF, SO_RCVBUF가 의미가 없다.
  • 완료 통지를 Event나 IOCP를 통해 받아올 수 있다.
  • IOCP에 비해 고성능이고, 많은 양의 패킷처리에 유리하다.

메커니즘

📦버퍼 등록

유저와 커널이 공유할 메모리를 등록한다.
스택, 힙메모리 말고도 가상메모리를 사용하기도 한다.
RIORegisterBuffer로 등록할 수 있고, RIODeregisterBuffer하면 등록해제된다.

📧 RQ/CQ 등록

RIO에서 사용할 고정크기의 RQ(Request Queue), CQ(Completion Queue)를 등록해야한다. Send, Receive는 RQ를 통해 이루어지고, 비동기 완료는 CQ를 통해 얻어와진다.

🔔 알림

앞에서 말한듯이 RIO는 Event나 IOCP와 함께 사용이 가능하다.
혼용하기 위해선 RIO_NOTIFICATION_COMPLETION를 사용해 CQ를 생성하고, RIONotify를 사용해
WaitForSingleObject, WaitForMultipleObjects나 GQCS, GQCSEx에 알림을 줄 수 있다.


실습하기

이 시리즈에서는 TCP를 이용해 에코서버를 만들어볼 것이다. 처음에 UDP로 도전했다가 성공하지 못했다...
왜인지는 모르겠으나 RIO UDP서버와 일반 UDP클라이언트가 서로 연동되지 않는 문제가 발생해 TCP로 결정했다.

profile
게임 서버개발자

1개의 댓글

comment-user-thumbnail
2023년 6월 13일

10년도 넘었는데 새로 만들어주시면 안되나요?

답글 달기