짧은 주저리 처음으로, 이전 주제에서 이어지는 느낌의 글임.

* 여기서 각주 하나 넣고 들어감. 본 글은 일반론 및 이제까지 운영했던 제 서버의 통계에 따르고 있으며, 서버 장르 및 특징에 따라 매우 다를 수 있음.

제 서버는 추가적인 청크 생성이 없는 제한된 단일 맵에서 운영됨.



이전 글에서 이야기한게 있음. 결국 마인크래프트 서버의 핵심 로직은 메인스레드에서만 들어간다. 그러므로 싱글코어에 가깝다.


그럼 서버에 알맞는 하드웨어는 뭘까? 이걸 설명하려면 먼저 흔히 마인크래프트 서버가 사용하는 스레드 사용률을 알아야 할 것 같음.

7cf3c028e2f206a26d81f6e04180716f5c

당장 어제였던 7월 11일 오후8시~11시 이렇게 3시간 사이의 기록임. 제 서버는 평일에는 특별한 이벤트가 없고, 주말에 서버 컨텐츠가 있는 편임. 즉 평일에는 전반적으로 유저들의 플레이가 잔잔한 느낌임.

스레드 사용률을 보면 메인스레드인 tick이 최대 100%ㅡ 평균 90%대에서 놀고있음. 100%를 찍은 적이 거의 없으니 TPS의 하락도 없었을거임.

청크를 추가적으로 생성할 일이 없는 제 서버 특성상, chunk_io 및 chunk_worker 도 많이 쓰이지 않았음. 순수하게 청크 로딩만으로 최대53%까지 찍힌적이 있노.

netty가 생각보다 적게 찍혔음. 평일 특성상 특별한 활동이 없는 일상을 지내고 있기 때문일까? 40%가 최대노.



7ff3c028e2f206a26d81f6e047877c6e1a

이번엔 컨텐츠가 몰려있는 지난주 주말임. 그래프가 급격하게 변화했음.

본서버에 270명씩이나 들어왔노. 덕분에 tick 스레드는 거의 내내 100%를 찍고있음. TPS가 영 좋지 않노. 전 글에서 말했듯 tick 스레드는 멀티스레딩이 불가능하므로, 1스레드만 사용함. 따라서 100%가 최대임. 나머지 스레드는 멀티스레딩이 가능하기에 100%를 초과할 수 있음.

chunk_io 및 chunk_worker 는 생각보다 변화가 없노. 아까랑 거의 비슷한거같지? 둘이 합쳐서 100%도 안되노.

제일 의외인 netty 스레드임. 얘는 네트워크 관련인데,뭘 해야 342%까지 찍었을까? 제 서버의 컨텐츠는 한 장소에 사람들이 몰려있는 경향이 있음. 덕분에 사람들끼리 서로 부딫치고 끼면서 나오는 suffocation 문제도 있고, 제 서버는 파티클같은게 많기도 하다보니, 아쪽에서 잔뜩 퍼먹었나봄. 게다가 사람이 많으니 청크를 불러와서 사람들에게 보내야 하는 부하도 있으니, 이 부분도 한 몫을 했을거임. (제 서버는 Velocity를 사용중이므로, 패킷 압축은 하지 않음.)




자, 일단 제 서버의 자원 사용량을 보며 뭘 알아냈노?

맞음. 마인크래프트 서버는 생각보다 스레드를 많이 쓰지 않음!

한 서버에 250명이 넘게 들어오고 컨텐츠로 인해 여기저기 난리가 나는 상황에서도, 메인 스레드인 tick 스레드가 단일 스레드로만 돌아가는 비애로 인해, 총 스레드의 사용률은 6스레드도 되지 않음.

게다가 tick 스레드가 100%가 되면 곧바로 "서버렉" 이 시작되니, 마인크래프트 서버에서 중요하게 보게 될 것은 여전히 마붕이들이 아는대로 싱글스레드의 성능이라는 결론이 나옴.


그런 의미에서 요즘 호스팅이 제공하는 하스웰~스카이레이크 시절에나 나왔던 클럭이 낮은 제온은 생각보다 큰 매리트가 되지 않음. 코어가 많아봤자, 메인스레드가 허덕이면 의미가 없으니까.

마인크래프트 서버는 게임용 컴퓨터와 요구사항이 같음. 그냥 단일코어 성능이 쩔어주면 됨. 요즘으로 치면 인텔의 코어 i 시리즈나 AMD의 라이젠이 되겠노.