Profiling - 실시간 대화식 프로파일러

Heungsub Lee
Heungsub LeeSoftware Engineer at Naver Clova
Profiling
실시간 대화식 프로파일러
이흥섭 @ 넥슨 • 왓 스튜디오
PyCon KR 2015
이흥섭
sub@nexon.co.kr • http://subl.ee/ • sublee
• 한글라이즈
http://hangulize.org/
• TrueSkill 파이썬 구현
http://trueskill.org/
• Profiling
• <카트라이더 대시>
• <야생의 땅: 듀랑고>
http://durango.nexon.com/
Profiling
what-studio/profiling
게임서버 최적화
파이썬
프로파일러
GIF https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/interactive.gif
GIF https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/continuous.gif
게임서버
Linux
CPython 2.7
gevent
요청/응답
시야 내 동기화
생태계 AI
요청/응답 시야 내 동기화 생태계 AI
I/O 바운드 CPU 바운드
CPU 병목이 어딜까?
프로파일러
• 성능 분석 도구
• 함수 별 실행 시간, 호출 횟수, 메모리 사용량 등 수집
• 프로그램 최적화를 보조함.
1. profile/cProfile
2. Yappi
이벤트 기반 프로파일링
• 함수 호출/반환 이벤트 추적
• 실행 시간, 호출 횟수를 조사
• Exclusive ― 서브루틴 제외
• Inclusive ― 서브루틴 포함
def spin(sec):
t = time.time()
while time.time() - t < sec:
pass
def spin5():
spin(5)
spin5()
Py https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/spin_example.py
InclusiveExclusive
spin5()
spin(5)
profile/cProfile
$ python -m profile script.py
$ python -m cProfile script.py
396029 function calls in 3.000 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 3.000 3.000 script.py:1(<module>)
1 0.000 0.000 1.000 1.000 script.py:10(alice)
1 0.000 0.000 2.000 2.000 script.py:14(bob)
2 1.074 0.537 3.000 1.500 script.py:4(carol)
1 0.000 0.000 0.000 0.000 {method 'disable' of ...
396023 1.926 0.000 1.926 0.000 {time.time}
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 3.000 3.000 script.py:1(<module>)
1 0.000 0.000 1.000 1.000 script.py:10(alice)
1 0.000 0.000 2.000 2.000 script.py:14(bob)
2 1.074 0.537 3.000 1.500 script.py:4(carol)
1 0.000 0.000 0.000 0.000 {method 'disable' of ...
396023 1.926 0.000 1.926 0.000 {time.time}
Exclusive Inclusive
gevent와 잘 붙나?
gevent
• 코루틴 기반 네트워킹 라이브러리
• 경량 스레드: Greenlet
참고: <제약을 넘어: Gevent> ― 정민영 • PyCon KR 2014
https://goo.gl/h0OmE7
서브루틴 코루틴
# gevent-example.py
import gevent
def slower():
for x in range(4):
for y in range(10000000): pass
gevent.sleep(0)
def faster():
for x in range(2):
for y in range(10000000): pass
gevent.sleep(0)
gevent.spawn(slower)
gevent.spawn(faster)
gevent.wait()
Py https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/gevent_example.py
기대 결과
slower > faster
(약 2배)
$ python -m profile gevent-example.py
Traceback (most recent call last):
...
File ".../profile.py", line 211, in trace_dispatch
if self.dispatch[event](self, frame,t):
File ".../profile.py", line 283, in trace_dispatch_call
frame, frame.f_back)
AssertionError: ('Bad call', ('.../gevent/hub.py', 386, 'switch'), ...)
$ python -m cProfile gevent-example.py
함수 Exclusive Inclusive
slower 0.129 0.645
faster 0.340 0.341
profile/cProfile
gevent 호환 안 됨
Yappi
Yet Another Python Profiler
Yappi
• 멀티스레딩 지원
• 스레드 별 CPU 시간 측정
• 빠름 (적은 분석 오버헤드)
$ python -m yappi script.py
Clock type: CPU
Ordered by: totaltime, desc
name ncall tsub ttot tavg
script.py:1 <module> 1 0.000018 1.815449 1.815449
script.py:4 foo 2 0.288737 1.815422 0.907711
script.py:14 bar 1 0.000004 1.001799 1.001799
script.py:10 baz 1 0.000005 0.813632 0.813632
name tid ttot scnt
_MainThread 139638664439616 1.816491 1
Clock type: CPU
Ordered by: totaltime, desc
name ncall tsub ttot tavg
script.py:1 <module> 1 0.000018 1.815449 1.815449
script.py:4 foo 2 0.288737 1.815422 0.907711
script.py:14 bar 1 0.000004 1.001799 1.001799
script.py:10 baz 1 0.000005 0.813632 0.813632
name tid ttot scnt
_MainThread 139638664439616 1.816491 1
Exclusive Inclusive
# gevent-example.py
import gevent
def slower():
for x in range(4):
for y in range(10000000): pass
gevent.sleep(0)
def faster():
for x in range(2):
for y in range(10000000): pass
gevent.sleep(0)
gevent.spawn(slower)
gevent.spawn(faster)
gevent.wait()
slower < faster
(약 2배)
Py https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/gevent_example.py
함수 Exclusive Inclusive
slower 0.105112 0.641017
faster 0.105722 0.430493
???
스레드 식별자 설정
set_context_id_callback( f )
f → 스레드 Id
set_context_name_callback( f )
f → 스레드 타입 이름
# gyappi.py
from gevent import getcurrent
import yappi
@yappi.set_context_id_callback
def current_greenlet_id():
return id(getcurrent())
@yappi.set_context_name_callback
def current_greenlet_name():
return type(getcurrent()).__name__
yappi.main()
Py https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/gyappi.py
$ python -m gyappi gevent-example.py
Clock type: CPU
Ordered by: totaltime, desc
name ncall tsub ttot tavg
gevent-example.py:1 <module> 1 0.000047 0.660959 0.660959
gevent-example.py:3 slower 1 0.421846 0.637329 0.637329
gevent-example.py:8 faster 1 0.214511 0.425404 0.425404
name tid ttot scnt
_getframe 139755003744080 0.674929 2
Hub 139754981772656 0.670471 8
Greenlet 139754981772816 0.660287 5
Greenlet 139754981773136 0.534862 3
함수 Exclusive Inclusive
slower 0.421846 0.637329
faster 0.214511 0.425404
Yappi
gevent 호환 잘 됨
프로그램 시작
프로그램 끝
측정
분석결과 출력
측정…
측정…
분석결과 출력
측정
측정
측정
측정
분석결과 출력
분석결과 출력
분석결과 출력
분석결과 출력
측정
측정
측정
측정
뷰어
분석결과
분석결과
분석결과
분석결과
Yappi 뷰어
Yappi 뷰어
2
3
1
로깅
문자열
처리 난수
발생기
게임로직
보편적으로 불리는 함수가
병목처럼 보임
콜스택 계층구조 보존
로깅로깅 ≠
직접 만들어보자
Profiling
• Unity3D 프로파일러
요구사항
콜스택 계층구조 보존
gevent 호환
대화식 뷰어
실시간 프로파일링
함수 실행 추적
sys.setprofile( f )
threading.setprofile( f )
def spin(sec):
f (<frame of spin>, 'call', ...)
t = time.time()
while time.time() - t < sec:
pass
f (<frame of spin>, 'return', ...)
def spin5():
f (<frame of spin5>, 'call', ...)
spin(5)
f (<frame of spin5>, 'return', ...)
frame
• f_back
• f_code
• f_lineno
상위 frame
code
• co_name
• co_filename
<frame>
frame
• f_back
• f_code
• f_lineno
frame
frame
frame
top-frame
stack = deque()
while frame is not None:
stack.appendleft(frame)
frame = frame.f_back
Profiling - 실시간 대화식 프로파일러
Profiling - 실시간 대화식 프로파일러
요구사항
콜스택 계층구조 보존
gevent 호환
대화식 뷰어
실시간 프로파일링
Greenlet 문맥 추적
greenlet.settrace( f )
# gevent-example.py
import gevent
def slower():
for x in range(4):
for y in range(10000000): pass
gevent.sleep(0)
def faster():
for x in range(2):
for y in range(10000000): pass
gevent.sleep(0)
gevent.spawn(slower)
gevent.spawn(faster)
gevent.wait()
slower < faster
(약 2배)
Py https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/gevent_example.py
slowerHub faster
slowerHub faster
f ('switch', (Hub, slower))
f ('switch', (slower, Hub))
f ('switch', (Hub, faster))
f ('switch', (faster, Hub))
f ('switch', (Hub, slower))
slower faster
함수 Exclusive Inclusive
slower 0.424 0.641
faster 0.212 0.429
요구사항
콜스택 계층구조 보존
gevent 호환
대화식 뷰어
실시간 프로파일링
대화식 뷰어는
TUI로
Curses
Urwid
• TUI 라이브러리
• 위젯 단위
• TreeListBox
• Curses의 저주에서 구원
Exclusive Inclusive
Profiling OWN DEEP
Yappi tsub ttot
profile tottime cumtime
GIF https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/interactive.gif
요구사항
콜스택 계층구조 보존
gevent 호환
대화식 뷰어
실시간 프로파일링
뷰어
Pickle
프로그램 프로파일링 서버
측정
측정
측정
GIF https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/continuous.gif
요구사항
콜스택 계층구조 보존
gevent 호환
대화식 뷰어
실시간 프로파일링
느리다!
특히 YAML 파싱
def f(): pass
def shallow(n):
for x in range(n):
f()
def deep(n):
if n != 0:
deep(n - 1)
Py https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/subcalls_example.py
def f(): pass
def shallow(n):
for x in range(n):
f()
def deep(n):
if n != 0:
deep(n - 1)
def f(): pass
def shallow(n):
for x in range(n):
f()
def deep(n):
if n != 0:
deep(n - 1)
shallow(100) deep(100)
그냥 실행 0.01 0.02
Profiling 2.27 6.07
Yappi 0.07 0.07
cProfile 0.60 0.61
profile 1.26 1.25
(단위: ㎳)
http://goo.gl/Wjc7Jc
통계적 프로파일링
이벤트 기반 프로파일링
• 실행 시간, 호출 횟수 측정
• 이벤트 전수 조사
e.g. profile, hotshot, Yappi, line_profiler
통계적 프로파일링
• 상대적 실행 빈도 측정
• 표본 조사
e.g. pyinstrument, plop, pprofile
통계적 프로파일링
• 샘플링 할 때 실행 중이던 콜스택을 조사
• Exclusive Count ― 콜스택 말단이던 횟수
• Inclusive Count ― 콜스택에 속했던 횟수
def spin(sec):
t = time.time()
while time.time() - t < sec:
pass
def spin5():
spin(5)
spin5()
Py https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/spin_example.py
spin5()
spin(5)
Exclusive Count = 1
Inclusive Count = 1
Inclusive Count = 2
Inclusive Count = 3
Inclusive Count = 4
Exclusive Count = 3
Inclusive Count = 3
Exclusive Count = 2
Inclusive Count = 2
Exclusive Count = 1
Inclusive Count = 1
함수 Exclusive % Inclusive %
spin5 25% (1/4) 100% (4/4)
spin 75% (3/4) 75% (3/4)
요구사항 #2
이벤트 기반 프로파일링
통계적 프로파일링
표본 얻기
sys._current_frames()
스레드 별 <frame> dict
주기적 조사
signal.setitimer(ITIMER_PROF, t, t)
CPU 시간이 t만큼 흐를 때마다 SIGPROF 발동
시그널
• time.sleep()을 끊는다.
• IOError: EINTR
• thread.join() 중엔 발동하지 않는다.
pyinstrument가 쓰는
다른 방법
sys.setprofile(f)
threading.setprofile(f)
추적 함수에서 시간을 재다가 때가 되면 조사
앞 방법 보단 느리다.
shallow(100) deep(100)
그냥 실행 0.01 0.02
setitimer로
샘플링 0.01 0.02
setprofile로
샘플링 0.19 0.22
Profiling 2.27 6.07
Yappi 0.07 0.07
cProfile 0.60 0.61
profile 1.26 1.25
(단위: ㎳)
요구사항 #2
이벤트 기반 프로파일링
통계적 프로파일링
사용법
$ pip install
git+https://github.com/what-studio/profiling.git
$ python -m profiling COMMAND
• profile
• live-profile
• remote-profile
• view
$ python -m profiling
profile SCRIPT
Yappi, profile/cProfile 커맨드 처럼 스크립트 통째로 분석
-T --timer=
• basic
• thread
• greenlet
-S --sampler=
• itimer
signal.setitimer
• tracing
sys.setprofile, threading.setprofile
통계적 프로파일링
SamplingProfiler
이벤트 기반 프로파일링
TracingProfiler
-T (이벤트 기반 프로파일링)
-S (통계적 프로파일링)
$ python -m profiling
live-profile SCRIPT
스크립트를 돌리면서 실시간 분석
-i 갱신 주기 (기본: 1초)
$ python -m profiling
remote-profile SCRIPT
스크립트를 돌리다가 뷰어가 붙으면 분석
--bind 서버 엔드포인트 (기본: 127.0.0.1:8912)
$ python -m profiling
view HOST:PORT
대화식 뷰어로 분석결과 보기
H
J K
L
Q
^C
[ ]
종료
탐색 (포커스 이동)
접기/펼치기
정렬 기준 변경
갱신 중지/재개
조작법
# facweb.py
from flask import Flask
app = Flask(__name__)
@app.route('/<int:n>')
def fac(n):
r = 1
for x in range(2, n + 1):
r *= x
return str(r)
app.run(port=8080)
Py https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/facweb.py
웹 서버
HTTP 클라이언트
프로파일링 뷰어
GIF https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/remote.gif
GIF https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/remote.gif
GIF https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/remote.gif
GIF https://github.com/sublee/pyconkr2015-profiling-resources/blob/master/remote.gif
$ python -m profiling COMMAND
• profile
• live-profile
• remote-profile
• view
what-studio/profiling
마무리
profile cProfile Yappi Profiling
gevent 호환    
콜스택    
성능    /
완성도    
실시간    
UX    
2.2k • 3회
함께 해요
Issues
Pull requests
@falsetru @dahlia @Parkayun @kxepal
@ravipudi @lqez @ivuk @sickill @htch
그밖에
다른 프로파일러들
• line_profiler
• memory_profiler
• pyinstrument
• plop
• pprofile
그밖에
• <Profiling (computer programming)>
Wikipedia • http://goo.gl/qeblxo
• <What are Exclusive and Inclusive?>
Steve Carroll • http://goo.gl/KCysud
• <What are Exclusive and Inclusive?>
Steve Carroll • http://goo.gl/KCysud
• <Beginners Guide to Performance Profiling>
MSDN • https://goo.gl/f9Oej9
• <Profiling tools>
Alain Leufroy • https://goo.gl/YxcVWF
함께 해요 #2
질의응답
실시간으로 프로파일링 할 때
갱신주기 내 함수 호출만 측정되나요?
네, 현재는 그렇습니다. 분명 갱신주기와 측정주기가 같아서 불편한
경우가 있는데요, Unity3D 프로파일러처럼 실시간 분석결과뿐 아니
라 과거의 분석결과도 탐색할 수 있게 해 해소할 계획입니다.
Q.
A.
개발하는 데 얼마나 걸렸나요?
2014년 8월 한 달 동안 TracingProfiler와 뷰어, 서버를 만들
었고, 2015년 6월부터 천천히 두 달, 집중적으로 한 달 동안
SamplingProfiler를 만들었습니다.
Q.
A.
Python 3의 asyncio와 호환되나요?
https://github.com/what-studio/profiling/issues/26
해당 이슈가 올라와 있지만, 아직 확인해보지 못했습니다.
Q.
A.
분석결과에서 특정 함수를 필터링할 수 있나요?
https://github.com/what-studio/profiling/issues/30
지금은 불가능하지만 마침 제안받은 게 있어 구현할 예정입니다.
Q.
A.
C 함수도 분석할 수 있나요?
sys.setprofile의 콜백함수에 C 함수 호출과 반환 이벤트도
c_call, c_return이라는 이름으로 들어옵니다. 따라서 분석할
수 있겠으나 C 함수 실행에 대응하는 파이썬 frame이 없다 보니 다
소 번거로운 점이 있어 미뤄뒀습니다. 현재 TracingProfiler는
C 함수 이벤트를 무시합니다.
파이썬 frame만 조사할 수 있는 SamplingProfiler의 경우 C
함수는 분석하지 못할 것 같습니다.
Q.
A.
deferral 유틸리티를 어디엔 썼고
어디엔 안 썼던데 이유가 무엇인가요?
현장에선 Profiler 객체를 with 문에 넣기도 하고 안 넣기도 하
는 이유가 무엇이냐는 질문으로 오해하고, 그 기능이 처음부터 의도한
게 아니라 풀 리퀘스트로 받은 것이라 그런 것 같다고 잘 못 답변 드렸
습니다.
deferral 유틸리티는 with 문이나 try-finally 문이 깊어지
는 게 싫어서 만들었습니다. 필요한 곳에 모두 쓸 것을 의도했으나 실
수로 빼먹은 것 같습니다.
Q.
A.
프로파일러를 프로파일링할 수 있나요?
TracingProfiler 자체의 성능을 분석하기 위해 썼던 방법입니
다.
우선 전달받은 호출/반환 이벤트를 모두 기록해 목록화하는 함수를
sys.setprofile에 등록한 후 예제코드를 실행합니다. 그렇게
모인 이벤트들에 대해 TracingProfiler._profile() 메소
드를 직접 호출하는 코드를 만들고 그걸 프로파일링했습니다.
Q.
A.
사용한 서체
• KoPub돋움체
http://www.kopus.org/biz/electronic/font.aspx
• DejaVu Sans Mono
http://dejavu-fonts.org/
• Octicons
https://octicons.github.com/
• Font Awesome
http://fontawesome.io/
감사합니다
이흥섭 • sub@nexon.co.kr
1 of 137

Recommended

〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3 by
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3Heungsub Lee
13.5K views251 slides
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버 by
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
50.2K views152 slides
Azure로 MMO게임 서비스하기 by
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기YEONG-CHEON YOU
1.5K views29 slides
중앙 서버 없는 게임 로직 by
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직Hoyoung Choi
8.2K views111 slides
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference by
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceKGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games Conference
KGC 2016: HTTPS 로 모바일 게임 서버 구축한다는 것 - Korea Games ConferenceXionglong Jin
18.7K views54 slides
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막) by
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)Heungsub Lee
43.7K views370 slides

More Related Content

What's hot

NDC12_Lockless게임서버설계와구현 by
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
7.7K views48 slides
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오... by
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
4.4K views44 slides
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅 by
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅DongMin Choi
12.7K views123 slides
온라인 게임과 소셜 게임 서버는 어떻게 다른가? by
온라인 게임과 소셜 게임 서버는 어떻게 다른가?온라인 게임과 소셜 게임 서버는 어떻게 다른가?
온라인 게임과 소셜 게임 서버는 어떻게 다른가?Seok-ju Yun
12K views76 slides
테라로 살펴본 MMORPG의 논타겟팅 시스템 by
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
3.3K views58 slides
파이썬 생존 안내서 (자막) by
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)Heungsub Lee
50K views733 slides

What's hot(20)

NDC12_Lockless게임서버설계와구현 by noerror
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
noerror7.7K views
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오... by Amazon Web Services Korea
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅 by DongMin Choi
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
DongMin Choi12.7K views
온라인 게임과 소셜 게임 서버는 어떻게 다른가? by Seok-ju Yun
온라인 게임과 소셜 게임 서버는 어떻게 다른가?온라인 게임과 소셜 게임 서버는 어떻게 다른가?
온라인 게임과 소셜 게임 서버는 어떻게 다른가?
Seok-ju Yun12K views
테라로 살펴본 MMORPG의 논타겟팅 시스템 by QooJuice
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
QooJuice3.3K views
파이썬 생존 안내서 (자막) by Heungsub Lee
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
Heungsub Lee50K views
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍 by Chris Ohk
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
Chris Ohk2.2K views
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규 by ChangKyu Song
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
ChangKyu Song12.2K views
Windows Registered I/O (RIO) vs IOCP by Seungmo Koo
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
Seungmo Koo29K views
쿠키런 1년, 서버개발 분투기 by Brian Hong
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
Brian Hong109.6K views
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019 by devCAT Studio, NEXON
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON14.1K views
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉 by iFunFactory Inc.
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
iFunFactory Inc.6.7K views
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019 by devCAT Studio, NEXON
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
Modern C++ 프로그래머를 위한 CPP11/14 핵심 by 흥배 최
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
흥배 최46.7K views
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012 by devCAT Studio, NEXON
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
devCAT Studio, NEXON16.1K views
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018 by devCAT Studio, NEXON
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
전형규, 좋은 이름, 나쁜 이름, 이상한 이름, NDC2018
게임 분산 서버 구조 by Hyunjik Bae
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
Hyunjik Bae37.7K views
NDC 11 자이언트 서버의 비밀 by 승명 양
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
승명 양4.4K views
Ndc14 분산 서버 구축의 ABC by Ho Gyu Lee
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
Ho Gyu Lee3K views
iFunEngine: 30분 만에 게임 서버 만들기 by iFunFactory Inc.
iFunEngine: 30분 만에 게임 서버 만들기iFunEngine: 30분 만에 게임 서버 만들기
iFunEngine: 30분 만에 게임 서버 만들기
iFunFactory Inc.15.5K views

Viewers also liked

Online game server on Akka.NET (NDC2016) by
Online game server on Akka.NET (NDC2016)Online game server on Akka.NET (NDC2016)
Online game server on Akka.NET (NDC2016)Esun Kim
7.5K views78 slides
NDC16 스매싱더배틀 1년간의 개발일지 by
NDC16 스매싱더배틀 1년간의 개발일지NDC16 스매싱더배틀 1년간의 개발일지
NDC16 스매싱더배틀 1년간의 개발일지Daehoon Han
10.9K views237 slides
Developing Success in Mobile with Unreal Engine 4 | David Stelzer by
Developing Success in Mobile with Unreal Engine 4 | David StelzerDeveloping Success in Mobile with Unreal Engine 4 | David Stelzer
Developing Success in Mobile with Unreal Engine 4 | David StelzerJessica Tams
1.2K views27 slides
레퍼런스만 알면 언리얼 엔진이 제대로 보인다 by
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다Lee Dustin
7.3K views55 slides
PyCon 2017 프로그래머가 이사하는 법 2 [천원경매] by
PyCon 2017 프로그래머가 이사하는 법 2 [천원경매]PyCon 2017 프로그래머가 이사하는 법 2 [천원경매]
PyCon 2017 프로그래머가 이사하는 법 2 [천원경매]Sumin Byeon
2.6K views61 slides
NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임 by
NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임
NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임Imseong Kang
12.1K views196 slides

Viewers also liked(20)

Online game server on Akka.NET (NDC2016) by Esun Kim
Online game server on Akka.NET (NDC2016)Online game server on Akka.NET (NDC2016)
Online game server on Akka.NET (NDC2016)
Esun Kim7.5K views
NDC16 스매싱더배틀 1년간의 개발일지 by Daehoon Han
NDC16 스매싱더배틀 1년간의 개발일지NDC16 스매싱더배틀 1년간의 개발일지
NDC16 스매싱더배틀 1년간의 개발일지
Daehoon Han10.9K views
Developing Success in Mobile with Unreal Engine 4 | David Stelzer by Jessica Tams
Developing Success in Mobile with Unreal Engine 4 | David StelzerDeveloping Success in Mobile with Unreal Engine 4 | David Stelzer
Developing Success in Mobile with Unreal Engine 4 | David Stelzer
Jessica Tams1.2K views
레퍼런스만 알면 언리얼 엔진이 제대로 보인다 by Lee Dustin
레퍼런스만 알면 언리얼 엔진이 제대로 보인다레퍼런스만 알면 언리얼 엔진이 제대로 보인다
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
Lee Dustin7.3K views
PyCon 2017 프로그래머가 이사하는 법 2 [천원경매] by Sumin Byeon
PyCon 2017 프로그래머가 이사하는 법 2 [천원경매]PyCon 2017 프로그래머가 이사하는 법 2 [천원경매]
PyCon 2017 프로그래머가 이사하는 법 2 [천원경매]
Sumin Byeon2.6K views
NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임 by Imseong Kang
NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임
NDC17 게임 디자이너 커리어 포스트모템: 8년, 3개의 회사, 4개의 게임
Imseong Kang12.1K views
Re:Zero부터 시작하지 않는 오픈소스 개발 by Chris Ohk
Re:Zero부터 시작하지 않는 오픈소스 개발Re:Zero부터 시작하지 않는 오픈소스 개발
Re:Zero부터 시작하지 않는 오픈소스 개발
Chris Ohk3.4K views
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012 by Esun Kim
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
Esun Kim20.9K views
Behavior Tree in Unreal engine 4 by Huey Park
Behavior Tree in Unreal engine 4Behavior Tree in Unreal engine 4
Behavior Tree in Unreal engine 4
Huey Park7.3K views
Approximate nearest neighbor methods and vector models – NYC ML meetup by Erik Bernhardsson
Approximate nearest neighbor methods and vector models – NYC ML meetupApproximate nearest neighbor methods and vector models – NYC ML meetup
Approximate nearest neighbor methods and vector models – NYC ML meetup
Erik Bernhardsson22.2K views
Docker by Huey Park
DockerDocker
Docker
Huey Park1.1K views
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기 by Sumin Byeon
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
Sumin Byeon8.9K views
Custom fabric shader for unreal engine 4 by 동석 김
Custom fabric shader for unreal engine 4Custom fabric shader for unreal engine 4
Custom fabric shader for unreal engine 4
동석 김22.4K views
Luigi presentation NYC Data Science by Erik Bernhardsson
Luigi presentation NYC Data ScienceLuigi presentation NYC Data Science
Luigi presentation NYC Data Science
Erik Bernhardsson60.4K views
Deep learning as_WaveExtractor by 동윤 이
Deep learning as_WaveExtractorDeep learning as_WaveExtractor
Deep learning as_WaveExtractor
동윤 이2.9K views
게임회사 취업을 위한 현실적인 전략 3가지 by Harns (Nak-Hyoung) Kim
게임회사 취업을 위한 현실적인 전략 3가지게임회사 취업을 위한 현실적인 전략 3가지
게임회사 취업을 위한 현실적인 전략 3가지
영상 데이터의 처리와 정보의 추출 by 동윤 이
영상 데이터의 처리와 정보의 추출영상 데이터의 처리와 정보의 추출
영상 데이터의 처리와 정보의 추출
동윤 이15.2K views
버텍스 셰이더로 하는 머리카락 애니메이션 by 동석 김
버텍스 셰이더로 하는 머리카락 애니메이션버텍스 셰이더로 하는 머리카락 애니메이션
버텍스 셰이더로 하는 머리카락 애니메이션
동석 김3.7K views

Similar to Profiling - 실시간 대화식 프로파일러

(141031) #fitalk plaso 슈퍼 타임라인 분석 도구 활용 방안 by
(141031) #fitalk   plaso 슈퍼 타임라인 분석 도구 활용 방안(141031) #fitalk   plaso 슈퍼 타임라인 분석 도구 활용 방안
(141031) #fitalk plaso 슈퍼 타임라인 분석 도구 활용 방안INSIGHT FORENSIC
778 views43 slides
[232] 성능어디까지쥐어짜봤니 송태웅 by
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅NAVER D2
18.2K views140 slides
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) by
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) Tae Young Lee
744 views151 slides
Python 생태계의 이해 by
Python 생태계의 이해Python 생태계의 이해
Python 생태계의 이해용 최
4.6K views41 slides
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기 by
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
4.8K views100 slides
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영) by
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
22.9K views126 slides

Similar to Profiling - 실시간 대화식 프로파일러(20)

(141031) #fitalk plaso 슈퍼 타임라인 분석 도구 활용 방안 by INSIGHT FORENSIC
(141031) #fitalk   plaso 슈퍼 타임라인 분석 도구 활용 방안(141031) #fitalk   plaso 슈퍼 타임라인 분석 도구 활용 방안
(141031) #fitalk plaso 슈퍼 타임라인 분석 도구 활용 방안
INSIGHT FORENSIC778 views
[232] 성능어디까지쥐어짜봤니 송태웅 by NAVER D2
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
NAVER D218.2K views
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) by Tae Young Lee
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
Tae Young Lee744 views
Python 생태계의 이해 by 용 최
Python 생태계의 이해Python 생태계의 이해
Python 생태계의 이해
용 최4.6K views
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기 by Jaeseung Ha
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
Jaeseung Ha4.8K views
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영) by Tae Young Lee
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
Tae Young Lee22.9K views
[NDC08] 최적화와 프로파일링 - 송창규 by ChangKyu Song
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
ChangKyu Song6.3K views
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx by YeongKiKim1
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
YeongKiKim1185 views
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석 by GangSeok Lee
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
GangSeok Lee2K views
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발 by Jeongkyu Shin
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
Jeongkyu Shin2.8K views
Python 활용: 이미지 처리와 데이터 분석 by 용 최
Python 활용: 이미지 처리와 데이터 분석Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석
용 최21.4K views
Opensource APM SCOUTER in practice by GunHee Lee
Opensource APM SCOUTER in practiceOpensource APM SCOUTER in practice
Opensource APM SCOUTER in practice
GunHee Lee2.2K views
Boost 라이브리와 C++11 by OnGameServer
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
OnGameServer56.7K views
[오픈소스컨설팅] 스카우터 사용자 가이드 2020 by Ji-Woong Choi
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
Ji-Woong Choi4.4K views
Vectorized processing in_a_nutshell_DeView2014 by Gruter
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014
Gruter2K views
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅 by Youngmin Koo
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
Youngmin Koo2K views
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기 by Jaeseung Ha
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
Jaeseung Ha4.3K views
[NDC2016] TERA 서버의 Modern C++ 활용기 by Sang Heon Lee
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
Sang Heon Lee6.8K views
미래경진대회(Object detection) 설명 자료 by DACON AI 데이콘
미래경진대회(Object detection) 설명 자료미래경진대회(Object detection) 설명 자료
미래경진대회(Object detection) 설명 자료
DACON AI 데이콘123 views

Profiling - 실시간 대화식 프로파일러