CGCII 테스트 클라이언트를 이용한 dserver 성능 측정
CGCII의 조상현님께서 공개한 CGCII 테스트 클라이언트로 dserver의 echo 성능을 측정해보았다.
사실 게임서버에서 네트워크 라이브러리의 성능보다 비즈니스 로직에서 걸리는 부하가 훨씬 크며 에코로만 서버를 테스트하는게 얼마나 의미가 있을까…라는 생각이 들지만 어찌되었든 CGCII 홈페이지의 글들을 보고 궁금증이 피어오른건 사실이다.
지금 만든 서버는 지금 하고 있는 프로젝트를 위해 설계되었기 때문에 CGCII의 테스트에 맞추기 위해 헤더쪽 수정작업이 있어야했다. 사실 상당히 귀찮았다. 나중에 다시 또 쓸일이 있을까봐 아예 옵션 설정에서 켜고 끌 수 있게 수정했다.
빌드는 Visual Studio 2015 프로페셔널 버전으로 했으며 Release 로 빌드했으며 모든 로깅시스템은 off 되었다. 멀티스레드 기능은 최대한 사용할 수 있도록 설정했다. 테스트한 시스템 사양은 다음과 같다.
- CPU : Intel i7-6700 3.4GHz
- RAM : 16GB
- OS : Windows 10 Pro
서버와 클라이언트는 같은 컴퓨터에서 실행되었다.
테스트 방법은 총 100개의 접속을 유지하고 테스트 클라이언트에서 8Byte의 패킷을 초당 1000개씩 쏘고 Echo 받는 형태이다.
성능테스트한 결과는 다음과 같다. 대략 열번 정도 반복했을 때에도 수치상 이 결과와 크게 차이나지 않았다.
결과는
- 메시지처리량 : 초당 20~21만개 정도의 메시지를 처리할 수 있었다.
- 데이터처리량 : 초당 1.54M ~ 1.6M 정도의 데이터를 처리했다
- CPU 분산 이용 : 목표한대로 모든 CPU 코어가 모두 균등하게 사용되었다.
- CPU 사용률 : 27.1%를 사용했다.
- RAM 사용률 : 185.1MB를 사용했다.
cgcii 홈페이지에 있는 결과들과 비교해보면 한심한 수준이다. 싱글스레드로 작동하는 node.js 가 처리하는 수준과 거의 비슷한 정도이다.
그냥 생 ASIO로 만들어진 서버가 처리하는 양보다 거의 1/10 수준이니 뭐… 이정도면 아주 저성능 서버가 아닌가 싶다.
메모리풀을 전혀 사용하지 않았고, 데이터 전송시에 new / delete를 너무 많이 하는 점, 데이터 전송시에 락을 걸며 사용하는 점 등등 때문에 성능이 너무 낮게 나온게 아닌가 싶다.
tcmalloc 이라도 적용해보면 좀더 성능이 올라가지 않을까 싶다.
일단 여기까지 작업 완료.