강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

이승표님의 프로필 이미지
이승표

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Context Switching

Context-Swiching 파트 질문 드립니다.

작성

·

366

0

1. 다양한 환경의 머신과 OS에서 발생하겠지만 Context-Swiching이 어느정도의 성능부하를 일으키는지 예시나 스트레스 테스트를 한 자료나 경험을 공유해주실 수 있으신가요.

Context-Switching은 비용이 비싸다고 통상적으로 알고있는데요.  좀 더 가늠할 수 있는 자료나 경험이 있으신지 궁금합니다.

 

2. Context-Switching시 vtable의 교체가 일어나는 것은 코어가 담당하는 프로세스가 변경되었을때에 한정인지 궁금합니다. 동일 프로세스 내의 다른 쓰레드로 Context-Switching이 일어난 것이라면 vtable이 교체되지 않고 레지스터나 스택 메모리 정보(?) 정도만 교체가 일어나면 될 것 같습니다.

 

3.  코어의 갯수만큼 쓰레드를 사용한다고 해도 쓰레드들은 Context-Switching이 일어날 것 같은데요. 1번 코어에서 A 쓰레드가 동작하다 Context-Switching 후 2번 코어에서 동작하는 일들도 일어날 것 같습니다. 

 

운영체제에서 기본적으로 돌아가는 다른 쓰레드들에 의해서도

Context-Switching이 일어날 것 같습니다.

 

쓰레드들은 정해진 작업시간이 지나면 잠들고 어느 코어에서 깨어나려고 할 것 같습니다. 제 생각에 코어와 쓰레드 갯수가 같을 때 1번 코어에만 A 쓰레드가 동작하게 할 수 있는 방법은 없는 것 같습니다.

 

그렇다면 얼마나 성능의 이득을 얻을 수 있을지 조금 의문이듭니다.

 

4.  최근 몇년간 Actor 모델이라고 해서 Tera등과 같은 서버에서 활용된 서버 디자인이 있다고 들었습니다. 향후 이 모델을 기반으로  게임 서버 디자인 및 컨텐츠 강의를 해주시면 안될지 궁금합니다. 제가 현재 강의를 듣고있는 상태인데 현재 C#, C++ MMO 서버 강의에 해당 서버 디자인이 적용되는 것일까요? Actor모델로 서버를 작성한 회사에서 일을하지 않는 한 해당 디자인과 같은 코어 성능을 최대한 활용하려 시도한 모델을 접하기 어려울 것 같아서 가능하다면 꼭 좀 부탁드리고 싶습니다.

 

제가 졸린 상태에서 쓴 글이라.. 양해 부탁드립니다. 

Context-Switching의 비용과 코어를 최대한 활용하려 시도한 Actor 모델에는 매우 관심이 있는데요. 이론적으로 실제 측정적으로 어느 정도의 성능의 이득이 있는지 궁금합니다.

 

Context-Switching과 코어의 갯수만큼 쓰레드를 만들어 최대한 활용하는 주제에 대해서 관심이 많습니다.  앞으로도 질문에 대해 친절히 답변해 주시면 정말 감사드리겠습니다!

 

퀴즈

멀티쓰레딩 개론에서 프로그램(프로세스)에 비유된 것은 무엇일까요?

CPU 코어

쓰레드

운영체제

레스토랑

답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

안녕하세요, 세부적으로 깊이 이해하려는 공부 방향은 좋다고 생각하지만
그 질문을 저에게 하시면 안 되고,
구글에서 찾아가면서 연구를 하셔야 합니다.
그런 세부적인 실험은 저도 해본 적이 없으며,
설령 해봤다 하더라도 그 결과를 지금까지 갖고 있지는 않습니다.

Context-Switching이 일어나는 이유는 다양하지만
결과적으로 특정 쓰레드가 실행권을 포기한 상황도 있겠지만
운영체제가 강제로 회수하는 경우도 있기 때문에
딱히 어떤 상황을 특정지어 말할 수 없고,
질문주신 부분은 그냥 공룡책과 같은 OS 책을 공부하셔야 하는
아주 장대한 부분이라 여기서 답변드릴 수가 없습니다.

다만 콘솔 등 일부 환경에서는 Context-Switching 횟수를 
비약적으로 줄이기 위해 코어 개수와 쓰레드 개수를 동일하게 맞춥니다.
그렇다고 해도 커널도 실행되려면 코어를 점유해서 실행되어야 하기 때문에
아예 Context-Switching이 일어나지 않는 것은 아닙니다.
마지막으로 프로세스 내 다른 쓰레드 교체는 조금 더 이득볼 수 있는 기법들이 있습니다. (하이퍼 쓰레딩 등)

Actor 모델을 이해하려면 그게 왜 필요한지를 이해해야 합니다.
C# 시리즈에서도 Part7에서 언급을 하긴 하지만,
구현은 그 모델이 아니라 방을 기반으로 하는 '일반적인' 모델로 구현을 하며
말씀하신 방법은 JobSerializer를 Actor 단위로 배치해야 합니다.
이 부분은 C# 강의에선 다루지 않고, C++에서 최종 파트를 만들 때 고려는 하고 있지만
확정되진 않았습니다. (왜냐하면 컨텐츠 작업 난이도가 매우 매우 높아지기 때문입니다)

이승표님의 프로필 이미지
이승표
질문자

답변 감사드립니다. 이전에 그냥 클래스나 객체 단위로 lock을 써도 잘 돌아가는 성능에 문제없이 돌아가는 간단한 서비스용 서버를 잠시 보았습니다. 그때 Context-Switching을 줄이는게 좋다는 얘기를 들었는데 반면에 동료와 대화를 해 보면 정상적으로 성능을 생각하고 짯다면 일반적으로 요구하는 성능이 괜찮게 나왔기 때문이었습니다.

 

C#강의를 감사히 잘 듣고있습니다. C++강의는 난이도가 있음을 고려하시고 계시고 그 동안의 경험을 녹아내 주시려는 면에서 JobSerializer를 최종 파트를 만들 때, 일부라도 꼭 다루어 주시면 MMORPG 서버 프로그래밍을 공부하는 분들에게 많은 도움이 되리라 생각합니다. 

 

MMORPG 서버 프로그래머로 계속 일한다면 언젠가는 접하게 되고, 그때가서 배워야할 부분인데 강의에서 미리 한번이라도 접해본다면 저 같은 MMORPG 서버 프로그래머를 지향하고 계속해서 배워가는 사람에게는 대단히 많은 도움이 될 것 같습니다. 현재 게임 업계에서 MMORPG 서버 성능을 최대한 끌어내려고 활용되는 서버 모델인 만큼 꼭 다뤄주셨으면 합니다.

 

그럼 잘 부탁드립니다.

이승표님의 프로필 이미지
이승표

작성한 질문수

질문하기