SlideShare a Scribd company logo
1 of 24
Download to read offline
생짜로 만들어보는
성능 측정 라이브
러리
7급 공무원도 쉽게 따라하는 프로파일링 도구
만들기
소개
● 는 생략
● 뒷풀이에 많이들 오세요.
성능 측정
● 이쯤 되면 꼭 나오는 wikipedia 인용.
● 프로파일러
○ 범죄자 프로파일링
○ 프로파일링
■ 결국은 범인을 찾는 도구
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
@trace
def 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차원 적으로만 표현된다.
● 무엇때문에 거기서 시간을 쳐묵쳐묵 하는지
알 수가 없다.
○ 지정한 이벤트만 표시된다.
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 이 Red
X1 가 될 수 없다.
■ 그대신 Fiat 500 을 Vettel 이 운전하는 효과는 누
릴 수 있음.
■ 해당 프로그램이 낼 수 있는 최대 속도를 짐작할
수 있게 해줌.
○ 필요할 때 적당한 도구를 써야.
○ 그리고 결국 분석 및 개선은 결국 사람이 해야 함.
Demo scripts
http://github.com/ganadist/pyko_1301

More Related Content

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

[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)NAVER D2
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들영욱 오
 
요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지Hyoje Jo
 
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅Kiyoung Moon
 
랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorial랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorialLee Seungeun
 
Pycon korea - 2018 2to3 converter를 활용한 django 프로젝트 python 버전업 삽질기
Pycon korea - 2018 2to3 converter를 활용한 django 프로젝트 python 버전업 삽질기Pycon korea - 2018 2to3 converter를 활용한 django 프로젝트 python 버전업 삽질기
Pycon korea - 2018 2to3 converter를 활용한 django 프로젝트 python 버전업 삽질기Royce Nam
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기Seungjae Lee
 
C++ 미정의 행동(undefined behavior)
C++ 미정의 행동(undefined behavior)C++ 미정의 행동(undefined behavior)
C++ 미정의 행동(undefined behavior)은아 정
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
 
16 학술제 마무리 자료
16 학술제 마무리 자료16 학술제 마무리 자료
16 학술제 마무리 자료Junyoung Jung
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요? 내훈 정
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010Ryan Park
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10Ryan Park
 
Python Recipes for django girls seoul
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoulJoeun Park
 
Nationality recognition
Nationality recognitionNationality recognition
Nationality recognition준영 박
 
spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼라한사 아
 
TML studio & Beep 알고리즘 스터디, 오리엔테이션
TML studio & Beep 알고리즘 스터디, 오리엔테이션TML studio & Beep 알고리즘 스터디, 오리엔테이션
TML studio & Beep 알고리즘 스터디, 오리엔테이션재원 최
 
242 naver-2
242 naver-2242 naver-2
242 naver-2NAVER D2
 

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

[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
 
요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지
 
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
Debugging with visual studio. 비주얼 스튜디오를 활용한 디버깅
 
랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorial랩탑으로 tensorflow 도전하기 - tutorial
랩탑으로 tensorflow 도전하기 - tutorial
 
pyOpenCL 입문
pyOpenCL 입문pyOpenCL 입문
pyOpenCL 입문
 
Pycon korea - 2018 2to3 converter를 활용한 django 프로젝트 python 버전업 삽질기
Pycon korea - 2018 2to3 converter를 활용한 django 프로젝트 python 버전업 삽질기Pycon korea - 2018 2to3 converter를 활용한 django 프로젝트 python 버전업 삽질기
Pycon korea - 2018 2to3 converter를 활용한 django 프로젝트 python 버전업 삽질기
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
C++ 미정의 행동(undefined behavior)
C++ 미정의 행동(undefined behavior)C++ 미정의 행동(undefined behavior)
C++ 미정의 행동(undefined behavior)
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
16 학술제 마무리 자료
16 학술제 마무리 자료16 학술제 마무리 자료
16 학술제 마무리 자료
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
 
Python Recipes for django girls seoul
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoul
 
Nationality recognition
Nationality recognitionNationality recognition
Nationality recognition
 
spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼
 
TML studio & Beep 알고리즘 스터디, 오리엔테이션
TML studio & Beep 알고리즘 스터디, 오리엔테이션TML studio & Beep 알고리즘 스터디, 오리엔테이션
TML studio & Beep 알고리즘 스터디, 오리엔테이션
 
242 naver-2
242 naver-2242 naver-2
242 naver-2
 

More from Young-Ho Cha

마세라티의 비밀
마세라티의 비밀마세라티의 비밀
마세라티의 비밀Young-Ho Cha
 
More than nexus, better than nexus.
More than nexus, better than nexus.More than nexus, better than nexus.
More than nexus, better than nexus.Young-Ho Cha
 
7급 공무원도 쉽게 따라하는 쉘 스크립트
7급 공무원도 쉽게 따라하는 쉘 스크립트7급 공무원도 쉽게 따라하는 쉘 스크립트
7급 공무원도 쉽게 따라하는 쉘 스크립트Young-Ho Cha
 
Cairo clock for android wear
Cairo clock for android wearCairo clock for android wear
Cairo clock for android wearYoung-Ho Cha
 
GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기Young-Ho Cha
 
코드 리뷰 시스템 소개
코드 리뷰 시스템 소개코드 리뷰 시스템 소개
코드 리뷰 시스템 소개Young-Ho Cha
 
웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리Young-Ho Cha
 
자막을 뿌리려면 해야 할 여러가지 삽질모음
자막을 뿌리려면 해야 할 여러가지 삽질모음자막을 뿌리려면 해야 할 여러가지 삽질모음
자막을 뿌리려면 해야 할 여러가지 삽질모음Young-Ho Cha
 
Browser history and overview
Browser history and overviewBrowser history and overview
Browser history and overviewYoung-Ho Cha
 
Introduce native client
Introduce native clientIntroduce native client
Introduce native clientYoung-Ho Cha
 
Introduce gobject introspection
Introduce gobject introspectionIntroduce gobject introspection
Introduce gobject introspectionYoung-Ho Cha
 

More from Young-Ho Cha (12)

마세라티의 비밀
마세라티의 비밀마세라티의 비밀
마세라티의 비밀
 
More than nexus, better than nexus.
More than nexus, better than nexus.More than nexus, better than nexus.
More than nexus, better than nexus.
 
7급 공무원도 쉽게 따라하는 쉘 스크립트
7급 공무원도 쉽게 따라하는 쉘 스크립트7급 공무원도 쉽게 따라하는 쉘 스크립트
7급 공무원도 쉽게 따라하는 쉘 스크립트
 
Cairo clock for android wear
Cairo clock for android wearCairo clock for android wear
Cairo clock for android wear
 
GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기
 
코드 리뷰 시스템 소개
코드 리뷰 시스템 소개코드 리뷰 시스템 소개
코드 리뷰 시스템 소개
 
웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리
 
자막을 뿌리려면 해야 할 여러가지 삽질모음
자막을 뿌리려면 해야 할 여러가지 삽질모음자막을 뿌리려면 해야 할 여러가지 삽질모음
자막을 뿌리려면 해야 할 여러가지 삽질모음
 
Browser history and overview
Browser history and overviewBrowser history and overview
Browser history and overview
 
Introduce native client
Introduce native clientIntroduce native client
Introduce native client
 
Introduce gobject introspection
Introduce gobject introspectionIntroduce gobject introspection
Introduce gobject introspection
 
페챠쿠챠
페챠쿠챠페챠쿠챠
페챠쿠챠
 

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

  • 1. 생짜로 만들어보는 성능 측정 라이브 러리 7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기
  • 2. 소개 ● 는 생략 ● 뒷풀이에 많이들 오세요.
  • 3. 성능 측정 ● 이쯤 되면 꼭 나오는 wikipedia 인용. ● 프로파일러 ○ 범죄자 프로파일링 ○ 프로파일링 ■ 결국은 범인을 찾는 도구
  • 4.
  • 5.
  • 6. Python Profile Tool ● python -m profile /usr/lib/python2. 7/test/pystone.py
  • 8.
  • 9. 괜찮은 점 ● 소스를 하나도 안 고치고 쓸 수 있다.
  • 10. 문제점 ● 느리다! ● 뭐라고 하는지 하나도 모르겠다. ● 뭐라고 나오긴 하는데, 너무 많이 나온다. ● 실제로 어디서 얼마만큼 걸렸는 지 짐작도 안 된다. ● python만 된다.
  • 11. 필요한 것 ● 문제점을 뒤집으면 필요한 것이 됨. ● 원하는 메소드의 시작 시간과 끝 시간을 알 수 있어야 한다. ● 쉽게 켜고 끌 수 있어야 한다.
  • 12. 일반적인 측정 방식 def method1(): blahblah return r def method1(): start = time.time() blahblah end = time.time() print 'method1()', start, end - start return r
  • 13. 일반적인 측정 방식 def method1(): blahblah return r @trace def 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
  • 14. 첫번째 구현 ● http://people.gnome.org/~federico/news- 2006-03.html#login-time-2 ● sampling with "access" syscall ● strace ○ 시스템 콜 추적 도구 ○ 어플리케이션이 커널에게 요청하는 시간을 쉽게 알 수 있다. ● + drawing script
  • 15. 구현 노트 ● 단순히 "MARK: xxx: some_method" 라는 파 일이름(?)으로 접근만 하면 된다.
  • 16. 구현 및 시연 ● 구현 ○ https://github.com/ganadist/ptrace
  • 17. 장점 ● 구현이 간단 ● 나름대로 portable ○ system call만 가로챌 수 있으면 됨. ○ 파싱하는 부분만 해당 OS의 형식에 따라 수정하면 완 료
  • 18. 또 다른 문제점 ● 여전히 느리다. ○ syscall hook 는 비용이 많이 든다. ● 많은 것을 표현하기 힘들다. ○ 이미지를 무한히 키울 수 없다. ● 호출 순서(call stack)를 확인하기 힘들다. ○ 1차원 적으로만 표현된다. ● 무엇때문에 거기서 시간을 쳐묵쳐묵 하는지 알 수가 없다. ○ 지정한 이벤트만 표시된다.
  • 19. systrace ● systrace from android ● sampling from linux ftrace ● + chromium-trace
  • 20. 구현 노트 ● /sys/kernel/debug/tracing/trace_marker 파일 에 다음 내용을 집어넣는다. ○ 무언가 시작할 때 ■ "B|%pid|%blahblah" ○ 무언가 끝났을 때 ■ "E"
  • 21. 구현 및 시연 ● 구현 ○ https://github.com/ganadist/systrace
  • 22. 아직도 남은 문제점.. ● 여전히 느리다. ○ 불확정성의 원리 ○ 측정하려는 행위 자체가 측정을 부정확하게 만든다. ● 여전히 많은 것을 표현하기 힘들다. ○ 커널 메모리에 저장됨. ○ 무한히 데이터를 모을 수 없다. ○ 하지만 순간적인 상황에 대해서는 아주 유용하다. ● 특정 환경에서만 실행 가능 ○ linux ftrace 기반 ○ linux 2.6.33 이상에서 사용 가능
  • 23. 그럼에도 불구하고. ● python profile api는 쓸만함. ○ 그리고 훨씬 빠른 cProfile ● profiler가 모든 것을 해결해주지 않음 ○ 아무리 삽질하고 x랄을 떨어도 Fiat 500 이 Red X1 가 될 수 없다. ■ 그대신 Fiat 500 을 Vettel 이 운전하는 효과는 누 릴 수 있음. ■ 해당 프로그램이 낼 수 있는 최대 속도를 짐작할 수 있게 해줌. ○ 필요할 때 적당한 도구를 써야. ○ 그리고 결국 분석 및 개선은 결국 사람이 해야 함.