오픈 소스 Actor Framework 인 Akka.NET 을 통해 온라인 게임 서버를 어떻게 구현할 수 있는지를 설명합니다. Actor Model 에 대한 기본 이해부터 Scale-out 가능한 게임 서버 구축까지 전반적인 내용에 대해 알 수 있습니다. 설명을 위해 클라이언트는 Unity3D 를 사용할 예정입니다.
오픈 소스 Actor Framework 인 Akka.NET 을 통해 온라인 게임 서버를 어떻게 구현할 수 있는지를 설명합니다. Actor Model 에 대한 기본 이해부터 Scale-out 가능한 게임 서버 구축까지 전반적인 내용에 대해 알 수 있습니다. 설명을 위해 클라이언트는 Unity3D 를 사용할 예정입니다.
[야생의 땅: 듀랑고]의 식물 생태계를 담당하는 21세기 정원사의 OpenCL 경험담Sumin Byeon
이 발표는 넥슨의 신규 개발 게임인 듀랑고의 생태계에 대한 간략한 소개와 OpenCL 을 이용한 병렬 처리에 관한 전반적인 기술적 내용을 다룹니다. 게임 속의 세계에서 지형과 기후, 지질 조건에 맞게 여러 종류의 식물과 광물들을 알맞은 곳에 배치시키는 것이 생태계 시뮬레이터의 역할인데, 이 시뮬레이터는 방대한 양의 계산을 수행합니다. 초기에 만들어진 프로토타입은 이러한 계산을 수행하는데 30분이 넘게 걸렸지만, 병렬처리, 알고리즘 시간복잡도 개선 등의 여러가지 방법들을 통해 그 시간을 11초까지 단축시켰습니다. 구체적으로 어떤 방법들을 시도했었고, 어떤 방법들이 효과가 있었는지 여러분과 그 경험담을 공유하고자 합니다.
[야생의 땅: 듀랑고]의 식물 생태계를 담당하는 21세기 정원사의 OpenCL 경험담Sumin Byeon
이 발표는 넥슨의 신규 개발 게임인 듀랑고의 생태계에 대한 간략한 소개와 OpenCL 을 이용한 병렬 처리에 관한 전반적인 기술적 내용을 다룹니다. 게임 속의 세계에서 지형과 기후, 지질 조건에 맞게 여러 종류의 식물과 광물들을 알맞은 곳에 배치시키는 것이 생태계 시뮬레이터의 역할인데, 이 시뮬레이터는 방대한 양의 계산을 수행합니다. 초기에 만들어진 프로토타입은 이러한 계산을 수행하는데 30분이 넘게 걸렸지만, 병렬처리, 알고리즘 시간복잡도 개선 등의 여러가지 방법들을 통해 그 시간을 11초까지 단축시켰습니다. 구체적으로 어떤 방법들을 시도했었고, 어떤 방법들이 효과가 있었는지 여러분과 그 경험담을 공유하고자 합니다.
CyberConnect2에서는 2013년부터 DirectX11세대용 멀티플랫폼엔진 개발을 시작하였으며, 제작 시 발생하였던 문제점을 DirectX9와의 차이점을 바탕으로 공유하고자 합니다.
이 세션은 DirectX11의 개발이 처음이거나 관심 있으신 분을 대상으로 합니다. Tessellation 이나 OIT와 같은 최신기술은 다루지 않으므로 주의하시기 바랍니다.
32. Thread Information Block (TIB)
FS:[0x04] Stack Base / Bottom of stack
FS:[0x08] Stack Limit / Ceiling of stack
From http://en.wikipedia.org/wiki/Win32_Thread_Information_Block
x86에선 FS, x64에선 GS에 저장
NtQueryInformationThread 함수로
TIB 주소를 얻어올 수 있음
37. JYP 서버 - 수집
asio 서버로 수집
컨트롤러로 인증을 하면 모듈 등록을 시작한다.
컨트롤러를 통해
한 번의 시작/멈춤을 기준으로
분석 작업을 생성
38. JYP 서버 - 분석
수집된 내용을 분석하는 자식 프로세스 생성
DbgHelp.dll 의 함수들을 이용하여 분석
Process Id를 임의로 주면
실제 프로세스 없이
메모리 정보만 가지고 분석할 수 있다.
39. SymLoadModule64
DbgHelp에 분석하려는 덤프에 있는
모듈의 이름, 메모리 상 위치, 크기를 알려줌
SymGetSymFromAddr64
SymGetLineFromAddr64
StackWalk64의 결과로 부터
함수 이름과 줄 위치를 얻어옴
40. StackWalk64
주어진 메모리 정보와
레지스터들이 저장된 CONTEXT로 부터
콜스택을 분석한다.
ReadMemoryRoutine을 커스텀 버전으로 대체
StackWalk64 분석과정에서 코드 영역을 읽어 콜스택
분석에 사용하기 때문에 각 모듈의 이미지 정보도
필요하다.
41. JYP 서버 – 결과 조회
Crow + AngularJS
Deep, Self sample개수 순 정렬
Call graph보여주기
모듈, 쓰레드 필터링
49. 구현 상의 삽질 (1)
매번 미니 덤프 생성하는 방식 시도
느려서 교체 (초당 10회 수준)
스택 시작 주소를 얻기 위해
VirtualQueryEx로 ESP부터 올라가며
읽기 가능한 페이지 인지 확인했었다
실제 스택보다 더 크게 계산
50. 구현 상의 삽질 (2)
스택의 binary diff 만 전송 시도
diff 크기가 압축에 비해 훨씬 작다
binary diff 생성이 심각하게 느림
snappy 압축만으로 충분히 작아서 해결
가끔 데드락 발생하던 문제 수정
SuspendThread + 메모리 할당
54. 그리고 더 앞으로...
넥슨 라이브인프라 실의
실시간 모니터링 시스템을 통한 연계
상황별 정보 (현재 게임 상태, FPS 등)
특정 퀘스트나 맵에서 렉 유발
→ 유저 불만 발생 → 개발팀 인식
→ 서버에 상황 등록
→ 재현시 자동으로 성능 정보 수집 모님의 우주정복 계획 (?)
55. QnA
라이브 프로파일러 JYP
게임 클라이언트에 JYP 심어두기
컨트롤러 프로그램으로 시작/중지
수집한 내용을 서버로 전송 후 분석
웹 인터페이스를 통해 결과 확인