7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기

24
생짜로 만들어보는 성능 측정 라이브 러리 7공무원도 쉽게 따라하는 프로파일링 도구 만들기

Upload: young-ho-cha

Post on 20-Jul-2015

119 views

Category:

Software


5 download

TRANSCRIPT

생짜로 만들어보는 성능 측정 라이브러리7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기

소개

● 는 생략● 뒷풀이에 많이들 오세요.

Python Profile Tool● python -m profile /usr/lib/python2.

7/test/pystone.py

시연

괜찮은 점● 소스를 하나도 안 고치고 쓸 수 있다.

문제점

● 느리다!● 뭐라고 하는지 하나도 모르겠다.● 뭐라고 나오긴 하는데, 너무 많이 나온다.● 실제로 어디서 얼마만큼 걸렸는 지 짐작도 안된다.

● python만 된다.

필요한 것● 문제점을 뒤집으면 필요한 것이 됨.● 원하는 메소드의 시작 시간과 끝 시간을 알 수 있어야 한다.

● 쉽게 켜고 끌 수 있어야 한다.

일반적인 측정 방식

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

구현 노트● 단순히 "MARK: xxx: some_method" 라는 파일이름(?)으로 접근만 하면 된다.

구현 및 시연● 구현

○ https://github.com/ganadist/ptrace

장점

● 구현이 간단● 나름대로 portable

○ system call만 가로챌 수 있으면 됨.○ 파싱하는 부분만 해당 OS의 형식에 따라 수정하면 완료

또 다른 문제점● 여전히 느리다.

○ syscall hook 는 비용이 많이 든다.● 많은 것을 표현하기 힘들다.

○ 이미지를 무한히 키울 수 없다.● 호출 순서(call stack)를 확인하기 힘들다.

○ 1차원 적으로만 표현된다.● 무엇때문에 거기서 시간을 쳐묵쳐묵 하는지 알 수가 없다.○ 지정한 이벤트만 표시된다.

구현 노트● /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