2011년 8월 15일 월요일

게임 서버 벤치마크 정리


온라인 게임 서버 프로그래밍 벤치마크( 한동훈 저 )를 나중에 참조하기 편하게 정리했다.
Socket I/O Handling
Overlapped I/O[이하 OIO] 방식과 IOCP 방식이 가장 효율적이다. IOCP의 강점은 멀티코어 머신을 사용할 경우, 성능 향상을 기대할 수 있다.
OIO방식으로 윈도우 95부터 지원이 되므로 클라이언트에서 사용하면 좋을 것 같다.

Accept 처리
MMORPG같은 대규모 사용자를 처리하기 위해서는 AcceptEx + Polling 방식이 효율적이다.
메모리 관리
메모리 풀 방식이 가장 효율적이다. 효율면에서나 구조적 장점에서나 좋은 방식이다.
데이터베이스 API
ADO가 사용하기는 편하지만, 속도면에서는 ODBC가 적합하다. 

Nagle 옵션
Nagle을 사용하면 네트워크 응답속도를 포기하는 대신 패킷 개수에 이득을 보는 것이고, Nagle을 사용하지 않으면 응답속도에서 이득을 보지만 패킷 개수를 포기하는 것이다.
패킷 처리
WorkerThread를 별도로 생성한 후에 IOCP Queue에서 직접 패킷을 읽어내서 처리하는 방식이 가장 효율이 좋다.
날 것 패킷을 읽어서 복호화 처리와 CRC 체크 등을 처리한 다면, WorkerThread에서 할일이 너무 많아져서 이런처리를 하는 쓰레드와 WorkerThread를 분리하는 것은 어떨지는 고민해볼 필요가 있을 것 같다.

댓글 없음:

댓글 쓰기