Performance Tools
OSXDEV
Introduction to Performance Overview로 이동
Mac OS X 에는 여러분의 어플리케이션의 성능을 측정할 수 있는 서로 다른 몇가지 형태의 툴들이 제공된다. 이 툴들은 파인더에서 실행하는 것들도 있고, 커맨드 라인에서 실행하는 것들도 있다. 다음의 과정에서 사용가능한 툴을 소개하고, 이것들을 언제 사용하게 되는지 이야기 한다.
목차 |
[편집] Apple 툴 설치하기
애플의 퍼포먼스 툴은 Xcode 툴 패키지의 일부로써 설치된다. 이 패키지는 Mac OS X CD에 포함되어 있다. 애플 웹사이트의 Apple Developer Connection에서 자유롭게 다운로드하거나 CD를 주문할 수도 있다.
Xcode 툴을 설치하려면, Xcode CD에서 인스톨러 패키지를 찾거나 웹에서 다운로드하여 더블클릭 하면 된다. 인스톨러는 하드 디스크의 부트 볼륨에 /Developer 디렉토리를 만든다. 이 디렉토리 안에는 applications, documentation, examples와 그밖의 하위디렉토리가 포함되어있다.
주요한 퍼포먼스 툴들은 /Developer/Applications/Performance Tools 디렉토리에 들어있지만, 몇몇은 /Developer/Applications의 서브디렉토리에 들어있기도 하다. 몇가지 커맨드 라인 퍼포먼스 툴은 /usr/bin 디렉토리에 설치되어 터미널에서 사용가능하다.
Most of the applications with a graphical user interface have online help available through the Help menu. All of the command-line tools have man pages, accessed on the command line by typing “mantoolname”.
그래픽 유저 인터페이스를 갖는 대부분의 어플리케이션들은 Help 메뉴를 통해 온라인 도움말을 사용할 수 있다. 모든 커맨드 라인 툴은 맨페이지를 제공한다. 맨페이지는 "man toolname"을 입력하여 볼 수 있다.
[편집] 분석 툴
분석 툴은 활발하게 프로그램의 성능에 관한 자료를 모아준다. 이 툴을 디버깅 툴과 같은 개념으로 이해해도 괜찮다. 이 툴을 사용하여 문제를 조사하고 코드를 수정하는데 사용할 수 있는 정보를 모을 수 있다. 디버깅 툴과 다르게, 대부분은 분석 툴들은 나중에 다시 볼 수 있도록 데이터를 저장하는 기능을 제공해 준다. 이러한 특성은 여러분의 어플리케이션의 성능 향상의 변화를 확인하는데 도움이 된다.
Shark를 제외하고, 대부분의 성능 분석툴은 특정 형태의 성능 문제를 찾는 기능을 한다. 어떤 툴이 유용한 정보를 제공할 수 있지만, 여러측면에서 문제를 확인하기 위해 같은 코드에 대해 여러가지 툴을 사용하는 것이 좋다. 예를 들어, ObjectAlloc을 사용하여 프로그램에 몇개 오브젝트가 생성되었는지 알 수 있다, 그러나 MallocDebug를 사용하여 그들중 몇개가 실제로 누수되고 있는지 알 수 있다. Shark는 정보를 수집하고 볼 수 있는 여러가지 방법을 제공한다, 그리고 여러분의 코드에서 성능 문제를 찾는데 필수적이다.
표 3-1은 Xcode와 함께 설치되는 분석 툴의 목록을 보여준다. Shark와 같은 어플리케이션은 /Developer/Applications/Performance Tools 디렉토리에 설치된다. heap과 leak 같은 커맨드 라인 툴은 /usr/bin 디렉토리에 설치된다.
표 3-1 분석 툴
| Tool | Description |
|---|---|
| MallocDebug | 어플리케이션에서 할당된 메모리를 추적하고 분석한다. 이 툴을 사용하여 메모리 누수를 찾고, 메모리 할당 패턴을 분석할 수 있다. |
| ObjectAlloc | Objective-C 와 Core Foundation 오브젝트 할당/해제를 실시간 추적한다. 이 툴은 오브젝트의 보유 상태를 보여주어 초과보유하는 오브젝트가 잡고 있는 메모리를 복원하는데 효과적이다. |
| OpenGL Driver Monitor | VRAM 사용률, 비디오 버스 트래픽, 하드웨어 정체를 포함하여, GPU에 관련된 성능 자료를 수집한다. 이 정보를 활용하여 여러분의 OpenGL 어플리케이션의 일시적인 속도저하나 산발적인 멈춤현상의 원인을 찾아낼 수 있다. |
| OpenGL Profiler | OpenGL 기반의 어플리케이션의 실시간 프로파일 정보를 생성한다. 함수 통계와 어플리케이션의 OpenGL 호출의 추적 기록을 볼 수 있다. |
| Sampler | 실행시에 어플리케이션의 처리를 분석한다. 프로그램의 어디에서 많은 시간이 소요되는지와 할당 루틴, 시스템 콜 또는 임의의 함수들이 얼마나 자주 호출되는지 식별할 수 있다. |
| Saturn | 코드에 함수 레벨 프로파일을 위한 장치를 설치하고, 결과 데이터를 그래픽으로 출력해준다. 이 툴을 이용하여 얼마나 많이 이벤트가 발송되고, 함수가 호출 되었는지와 같은 이벤트의 횟수를 알 수 있다. |
| Shark | 시스템의 모든 프로세스와 쓰레드에 대해 통계적인 샘플링 작업을 수행한다. Shark를 이용하여 malloc 호출을 포함한 함수 호출을 추적할 수도 있고, 결과를 그래픽적으로 차트로 출력할 수도 있다. Shark는 풍부한 데이터 마이닝 기능을 제공하여 문제를 빠르게 분리해 낼 수 있다. 성능상의 병목현상을 찾아낼 수 있는 필수의 툴이다. |
| heap | 특정 프로세스에서 malloc에 의해 할당된 모든 버퍼의 목록을 보여준다. |
| leaks | 프로세스의 메모리 공간에서 할당되었으나 참조되지 않는 메모리 블럭을 찾아낸다. |
| vmmap | 특정 프로세스에 할당된 가상(virtual) 메모리 영역을 출력한다. 프로세스의 메모리 사용량을 분석하기 위해 이 툴을 사용할 수 있다. |
[편집] 모니터링 툴
모니터링 툴은 자료를 자동으로 수집하는 수동적인 툴이다. 이 툴을 사용하려면, 프로그램의 특징을 시험해보는 동안에 그냥 실행되도록 가만히 내버려 두면 된다. 그런 다음 생성된 데이터를 분석하여 프로그램의 성능 특성에 대해 더 이해할 수 있다. Spin Control 같은 프로그램은 실행된채로 그냥 내버려 두면 되지만, 대부분은 다른 프로그램은 성능에 관한 정보를 얻는 것을 시작하고 중단할 수 있다.
표 3-2는 Xcode와 함께 설치되는 모니터링 툴의 목록이다. BigTop과 Spin Control 같은 어플리케이션은 /Developer/Applications/Performance Tools 디렉토리에 설치된다. Activity Monitor 툴은 /Applications/Utilities 디렉토리에 설치된다. fs_usage와 top와 같은 커맨드 라인 툴은 /usr/bin 에 설치된다.
표 3-2 모니터링 툴
| Tool | Description |
|---|---|
| Activity Monitor | 현재 실행중인 프로세스들의 메모리와 CPU 사용 현황을 표시해준다. top툴과 비슷한 정보를 제공한다. |
| BigTop | 시스템의 CPU, 디스크, 네트웍, 메모리 사용 현황을 시간에 따라 그래픽적으로 표시해준다. 하나의 프로세스만 모니터할 수 있고, 모든 프로세스들을 모니터 할 수도 있다. top과 vm_stat 툴과 비슷한 정보를 제공한다. |
| Quartz Debug | 다시 그려진 영역을 빠르게 반짝거려서 화면이 갱신되는 것을 실시간으로 보여준다. 어플리케이션의 드로잉 동작을 분석하기 위해 이 툴을 사용할 수 있다. |
| Spin Control | spinning 커서(역자 주: 프로그램이 응답하지 않을때 나타나는 무지개색의 빙글빙글 도는 커서)가 나타났을때 프로그램을 샘플링한다. 이 툴을 실행하고 백그라운드로 돌아가도록 나두면 프로그램이 응답하지 않는 순간을 잡아준다. |
| Thread Viewer | 쓰레드의 활동을 그래픽적으로 표시해준다. 쓰레드의 활동을 색깔로 표시된 타임라인 뷰로 표시해주고, 특정 지점에서 추적(backtrace)정보를 표시해준다 (역자 주: 타임라인을 클릭하면 표시해준다). |
| fs_usage | page faults 나 파일시스템 함수 호출로 발생된 파일시스템 활동을 표시해준다. 이 툴을 이용하여 프로그램이 파일에 접근하는 패턴을 이해할 수 있다. |
| sc_usage | 진행중인 시스템 콜과 page fault 현황을 표시해준다. |
| top | 현재 실행중인 프로세스들에 관련된 일반적인 시스템 사용 현황을 표시해준다. 이 툴은 동적으로 정보를 갱신해주기 때문에 실시간으로 현황을 확인할 수 있다. |
[편집] 하드웨어 분석 툴
CHUD 툴은 하드웨어와 저수준의 소프트웨어 분석을 위한 추가적인 툴을 제공하고 있다. 그래픽적인 애플리케이션은 /Developer/Applications/Performance Tools/CHUD에 설치되고, 커맨드라인 툴은 /usr/bin에 설치된다. 모든 툴은 Xcode에 포함되어 있다. 표 3-3은 이 패키지에 포함된 툴과 그 사용 목적을 간단하게 나열하고 있다.
표 3-4. CHUD 툴들
| Tool | Description |
|---|---|
| CacheBasher | 넓은 범위의 조건에서 캐쉬의 성능을 측정한다. |
| MONster | 하드웨어 수준에서 샘플링 데이터를 모은다. 이 툴은 시스템전반적이거나 프로세스에 특정한 수준의 샘플링 데이터를 모아 계량화된 값을 출력해준다. utilized bandwidth, 한번의 instruction에 대한 cycle, cache miss rates 같은 값을 얻기 위해 이 툴을 사용할 수 있다. |
| PMC Index | 가능한 performance counter events를 찾도록 해준다. 이 툴은 다양한 이벤트를 선택하면, 그 이벤트들이 동시에 기록될 수 없다면 통보해 준다. |
| Reggie SE | CPU와 PCI 설정 레지스터를 검사하고 변경할 수 있게 한다. |
| Skidmarks GT | integer, floating-point, and vector 성능을 측정한다. |
| acid | 이 커맨드라인 툴은 TT6E 명령 추적을 분석하여 상세한 분석결과와 히스토그램을 제공한다. 이 툴을 이용하여 잘못 정렬된 operand, data dependency stalls, spilled loads와 같은 잘못된 일련의 명령들을 찾아낼 수 있다. |
| amber | 프로세스에서 실행중인 모든 쓰레드를 추적한다. 모든 명령(instruction)과 데이터 억세스를 추적 파일에 기록한다. TT6, TT6E, 또는 FULL 형식으로 추적 정보를 생성할 수 있다. |
| simg4 | Motorola 7400 프로세서의 cycle-accurate 시뮬레이터이다. TT6 traces를 입력으로 받는다. |
| simg5 | IBM 970 프로세서의 cycle-accurate 시뮬레이터이다. TT6 traces를 입력으로 받는다. |
CHUD 툴의 사용에 대해 더 많은 정보가 필요하면, 특정한 툴의 온라인 도움말을 보기 바란다. 어떤 CHUD 툴은 /Developer/ADC Reference Library/CHUD에 문서가 함께 설치되어있다.
[편집] 추가적인 커맨드라인 툴
표 3-4는 Mac OS X에서 성능을 분석하고 모니터링할 수 있는 추가적인 커맨드라인 툴을 보여주고 있다. 이 툴들은 /usr/bin/ 디렉토리에 들어있으며 반드시 커맨드라인 프롬프트에서 실행되어야 한다. 대부분이 Xcode와 함께 설치된다.
표 3-4. 커맨드라인 툴들
| Tool | Description |
|---|---|
| atos | 실행중인 실행가능의 파일의 심볼 이름과 심볼의 주소값 사이의 변환을 수행한다. |
| c2ph | object 파일로부터 C 구조체를 멤버의 오프셋 값과 함께 표시해준다. |
| gprof | 프로그램의 실행을 분석하여 프로파일을 생성해 준다, |
| kdump | 커널 트레이스 데이터를 출력해준다. |
| malloc_history | 특정 프로세스에서 수행된 malloc 할당 내용을 보여준다. |
| nm | 하나 이상의 object 파일에 대해 심볼 테이블 정보를 출력해준다. |
| otool | Mach-O 실행파일의 내용을 사람이 보기 편한 형태로 출력해준다. |
| pagestuff | Mach-O 실행 파일의 논리적인 페이지들에 대한 정보를 출력해준다. |
| pstruct | object 파일로부터 C 구조체를 해석하여 멤버 오프셋 값과 함께 구조체를 표시해준다. |
| sample | 프로그램의 실행을 분석하여 프로파일을 생성해준다. |
| vm_stat | 활성(active), 비활성(inactive), 고정(wired), 사용가능(free) 페이지 갯수를 포함한 Mach 가상 메모리 현황을 출력해준다. page fault 와 다른 활동 정보도 출력해준다. |




