Upload
young-ho-cha
View
119
Download
5
Embed Size (px)
Citation preview
성능 측정● 이쯤 되면 꼭 나오는 wikipedia 인용.● 프로파일러
○ 범죄자 프로파일링○ 프로파일링
■ 결국은 범인을 찾는 도구
Python Profile Tool● python -m profile /usr/lib/python2.
7/test/pystone.py
일반적인 측정 방식
def method1(): blahblah return r
def method1(): start = time.time() blahblah end = time.time() print 'method1()', start, end - start return r
일반적인 측정 방식
def method1(): blahblah return r
@tracedef method1(): blahblah return r
def trace(func): def wrapper(*args, **kwds): start = time.time() r = func(*args, **kwds) end = time.time() print func.__name__ + ''()', start, end - start return r return wrapper
첫번째 구현● http://people.gnome.org/~federico/news-
2006-03.html#login-time-2● sampling with "access" syscall● strace
○ 시스템 콜 추적 도구○ 어플리케이션이 커널에게 요청하는 시간을 쉽게 알 수 있다.
● + drawing script
구현 및 시연● 구현
○ https://github.com/ganadist/ptrace
또 다른 문제점● 여전히 느리다.
○ syscall hook 는 비용이 많이 든다.● 많은 것을 표현하기 힘들다.
○ 이미지를 무한히 키울 수 없다.● 호출 순서(call stack)를 확인하기 힘들다.
○ 1차원 적으로만 표현된다.● 무엇때문에 거기서 시간을 쳐묵쳐묵 하는지 알 수가 없다.○ 지정한 이벤트만 표시된다.
systrace● systrace from android● sampling from linux ftrace● + chromium-trace
구현 노트● /sys/kernel/debug/tracing/trace_marker 파일에 다음 내용을 집어넣는다.○ 무언가 시작할 때
■ "B|%pid|%blahblah"○ 무언가 끝났을 때
■ "E"
구현 및 시연● 구현
○ https://github.com/ganadist/systrace
아직도 남은 문제점..● 여전히 느리다.
○ 불확정성의 원리○ 측정하려는 행위 자체가 측정을 부정확하게 만든다.
● 여전히 많은 것을 표현하기 힘들다.○ 커널 메모리에 저장됨.○ 무한히 데이터를 모을 수 없다.○ 하지만 순간적인 상황에 대해서는 아주 유용하다.
● 특정 환경에서만 실행 가능○ linux ftrace 기반○ linux 2.6.33 이상에서 사용 가능
그럼에도 불구하고.● python profile api는 쓸만함.
○ 그리고 훨씬 빠른 cProfile● profiler가 모든 것을 해결해주지 않음
○ 아무리 삽질하고 x랄을 떨어도 Fiat 500 이 Redbull X1 가 될 수 없다.■ 그대신 Fiat 500 을 Vettel 이 운전하는 효과는 누릴 수 있음.
■ 해당 프로그램이 낼 수 있는 최대 속도를 짐작할 수 있게 해줌.
○ 필요할 때 적당한 도구를 써야.○ 그리고 결국 분석 및 개선은 결국 사람이 해야 함.
Demo scriptshttp://github.com/ganadist/pyko_1301