순서
- 개요
- 현존하는 Dtrace 프로그램 수용하기
- 새로운 디스플레이 마법사
- 커맨드 라인에서 디스플레이 생성하기
- XML 속성
개요
새로운 Chime 디스플레이를 추가 시키려면 여러분은 Chime 에 의해 인식될 수 있는 XML 형태의 디스플레이를 만들어줘야 합니다. Chime 는 마법사 와 커맨드 라인 옵션 을 통해서 XML 을 생성할 수 있고 손으로 직업 XML을 수정해야 하는 경우를 위해 디스플레이 속성들이 여기 에 자세히 나와 있습니다. 여러분이 a .xml 을 /opt/OSOL0chime/displays 에 추가시켰다면 Chime 는 그것을 자동으로 집어내고 메인 윈도우의 "Traces" 리스트에 항목을 추가 시켜서 해당 디스플레이를 실행시킬 수 있도록 합니다. 그러므로 여러분 나름의 분류 대로 디스플레이를 그룹화시킬 수 있습니다. 특수 파일 description.xml 은 어떠한 서브 디렉토리에라도 포함이 가능하며 서브디렉토리에 포함되어 있는 그룹의 이름,디스플레이 그룹의 설명, 디스플레이를 접근하는 메뉴 아이템의 머릿글 그리고 디스플레이의 목록화 순서(기본적으로 목록은 타이틀의 알파벳 순으로 정렬됨)은 속성들을 지정할 수 있습니다.
Chime 는 여러분이 마음대로 바꿀 수 있는 디스플레이 셋들과 함께 인스톨 됩니다(비록 원래 상태 그대로를 분리된 디렉토리에 저장하길 원한다고 하더라도).

대신 커맨드 라인 에서 chime -d <dir> 커맨드를 통해서 어떠한 디렉토리에라도 디스플레이를 생성할 수 있고 Chime는 지정된 디렉토리를 그전의 디스플레이 디렉토리 였던것 처럼 다루게 할 수 있습니다.
현존하는 DTrace 프로그램 수용하기
여러분의 DTrace 프로그램에 몇가지 중요한 부분을 검사해 보아야 합니다:
- Chime 는 DTrace aggregation 을 시각화 해주는 툴이므로, 프로그램에 반드시 적어도 하나 이상의 aggregatio 을 포함하고 있어야 합니다. DTrace aggregation 에 대한 자세한 정보는Solaris Dynamic Tracing Guide 의 Aggregations 챕터를 참고하시기 바랍니다.
- 만약 printa() 액션을 aggregation 에 사용하고 있다면 Chime 는 aggregaton 을 가져올 수 없습니다. 일반적으로
printa()는tick-1sec같은 profile probe 에 들어가 있기 때문입니다. 여러분은 반드시 이러한 절을 프로그램에서 삭제해야 합니다. aggregation 을 출력하는 대신 이제 출력을 Chime에 의존하게 됩니다. - 복수개의 aggregation 을 프로그램에서 가질 수 있습니다. 그러나 Chime 는 모든 동일한 프로그램내의 aggregation 이 동일한 tuple 을 공유하고 있다고 가정합니다. 만약 프로그램내 두개의 aggregation 이 서로 다른 tuple 을 가지고 있다면 Chime 의 결과는 정의되지 않습니다.
새로운 디스플레이 마법사
Chime 디스플레이들은 XML 로 기술 됩니다. 그리고 XML 생성을 위해 마법사가 제공 됩니다. 여러분은 마법사을 메뉴를 통해 (File | New Display ...) 접근하거나 커맨드라인에서 -W 옵션으로 직접 접근할 수 있습니다. 마법사를 이용해서 새로운 디스플레이를 생성하거나 기존의 것들을 수정 합니다.
여러분이 시스템 상의 각 실행파일마다의 초당 시스템 콜 을 모니터하고 싶다고 해봅시다. 새로운 디스플레이를 생성하기 위해 다음과 같은 단계를 거쳐야 합니다:
거쳐야 할 단계 (시스템 콜 예제)
- 제목과 출력 파일을 설정하기
- DTrace 프로그램 설정하기
- 초기화된 Aggregation 설정하기
- 컬럼 지정하기
- 첫번째 미지정된 컬럼
- 컬럼 데이타 지정하기
- 컬럼 속성 설정하기
- 다음 미지정된 컬럼
- aggregation 값 컬럼
- 첫번째 미지정된 컬럼
- 디스플레이 테스트 수행
- 설명 제공하기
- 디스플레이 셍성 완료하기
제목과 출력 파일을 설정하기
마법사가 나타나면 기본 Title 필드에 제목 "Display" 가 하이라이트 된 것을 볼 수 있을 것입니다.
"System Calls" 를 타이핑 한 후에 엔터를 눌러서 다음 단계를 진행하도록 합니다.
DTrace 프로그램 설정하기
Program String 라디오 버튼 아래에 텍스트 패널을 클릭하고 다음과 같은 DTrace 프로그램을 입력합니다:
Check Compile 버튼을 클릭해서 입력한 프로그램이 올바른지 확인할 수 있습니다. 만약 구문 에러가 있다면 녹색의 표시 대신 빨간색의 "X" 마크를 보게될 것입니다. 그리고 에러에 대한 정보를 볼 수 있는 하이퍼링크가 나타날 것입니다. Chime 에 DTrace 프로그램을 수용시키는 도움말을 보려면 Help 버튼을 클릭합니다. Chime 에서 디스플레이 가능한 aggregation을 사용하는 DTrace 프로그램을 작성하는 법에 대해 알아 보려면 Solaris Dynamic Tracing Guide 의 Aggregations 챕터가 좋은 시작점이 될것입니다.
다음 단계를 진행하기 위해 Alt-N (혹은 Next 버튼 클릭) 을 입력합니다:
초기화된 Aggregation 설정하기
이 단계에서 여러분은 실행 전체 통계를 원하는지를 지정합니다. 기본적으로 Chime 는 매번 수집된 데이타의 스냅샷을 가져올때 마다 모든 aggregation 과 그들의 값들을 0 으로 재설정합니다. 그러므로 매초 마다의 시스템 콜을 보여주려면 기본적인 동작(실행 전체 통계가 아님) 이 올바른 선택입니다. 간단히 다음 단계로 진행 합니다.
알아둘 점은 만약 프로그램이 다른 aggregation 을 포함하고 있다면 이 곳에서 각각의 체크 박스와 함께 나타날 것입니다. 예를 들어 만약 프로그램이 @counts[execname] = count(); 구문을 포함하고 있다면 초기화 가능한 aggregation 의 목록에 "counts" 가 나타날 것입니다.
컬럼 지정하기
이 단계에서 우리는 디스플레이의 컬럼 헤더에 왼쪽에서 오른쪽으로 나타날 컬럼 이름들을 목록화 하게 됩니다. 이렇게 함으로써 디스플레이의 대략적인 윤곽을 잡을 수 있습니다. 우리의 경우에서는 Chime 에 기본적으로 인스톨 된 "System Calls" 와 유사한 디스플레이를 사용할 것입니다:
- "Executable" 컬럼 오른쪽 정렬
- "History" 컬럼 그래프
- "Calls Per Second" 컬럼으로 재명명한 후 왼쪽 정렬
기본적인 아이디어는 aggregation key 의 각 요소 마다 하나의 컬럼을 지정하는 것입니다. 우리는 @[execname] = count(); 를 수집하기 때문에 execname 키에 count() 값을 갖는 하나의 컬럼이 필요합니다. 만약 @[execname, probefunc] = count(); 을 통해 수집한다면 execname 과 probefunc 두개의 키 컬럼 이 필요하고 한개의 count() 값 컬럼이 필요 합니다. 우리의 경우에서는 오직 두개의 컬럼이 필요합니다: execname 키를 위한 "Executable" 과 count() 를 위한 "Calls Per Second" 컬럼 입니다. 어쩄든 우리는 추가적으로 "History" 컬럼을 추가시켜서 " Calls Per Second"의 시간별 sparkline 뷰를 제공합니다.
빈줄에 입력하기 위해 "Executable" 을 타이핑 한후에 엔터를 누릅니다. 그리고 "History" 를 타이핑 한 후에 역시 엔터를 누릅니다. "Calls Per Second" 타이핑을 끝낸 다음(엔터를 누르지 않아도 상관 없음) Next 를 클릭하여 다음 단계로 진행합니다.
첫번째 미지정된 컬럼
컬럼 데이타 지정하기
여기서 우리는 첫번째로 미지정된 컬럼 "Executable" 을 지정해 줍니다. 시작하기 위해 우리는 간단히 컬럼이 aggregation key 를 디스플레이할 것인지 (@[execname] = count(); 에서 execname) 혹은 aggregation 값(@[execname] = count(); 의 count())을 디스플레이할 것인지를 지정해 줍니다. 세번째 컬럼 타입인 Alternate View (아래에 보이는) 는 특별한 타입입니다: 이것은 소스 데이타를 다른 컬럼(혹은 컬럼들)에서 가져와서 데이타를 다르게 보여 줍니다. "History" 컬럼은 anternate view 의 하나의 예 입니다.

이 경우 우리의 작업은 간단합니다. 화면이 이미 Tuple Member (aggregation 키의 멤버) 와 Tuple Index 0 을 보여주고 있습니다.(네모 상자들 중의 첫번째 항목) 이것은 우리가 의도했던 @[execname] = count(); 의 execname 과 정확하게 일치 합니다. 간단히 Next 를 클릭합니다.
컬럼 속성 설정하기
이 단계에서는 aggregation 키의 일부인 컬럼의 적절한 속성값을 지정하도록 합니다.
이전과 마찬가지로 단순히 Next 를 클릭합니다. 그렇더라도 전체적인 줄은 괜찮을 것입니다. Total 필드 풀다운에서 "Count" 를 선택하고 단위 레이블의 단수 혹은 복수형 폼을 지정 합니다. Singular Total Label 필드에 "executable" 을 타이핑 합니다. 타이핑한 텍스트는 Plural Total Label 필드에 똑같이 에코되어 나타 납니다. 그러므로 단지 Tab 키만 눌러준 후에 plural form 에서 s만 타이핑 해주면 됩니다. 만약 @[execname] = count(); 대신 @[execname, probefunc] = count(); 로 수집하고 있다면 컬럼 내의 "Executable" 값이 반복적으로 나타날 것이므로 우리는 "Count" 대신 "Unique Count"를 선택하여 각각의 실행파일들에 숫자들을 디스플레이 해줘야 합니다.
우리는 또한 실행파일 이름들을 오른쪽 정렬하여 시각적으로 오른쪽의 count()값들 과 잘 조화되기를 원합니다. Alignment 필드 풀다운의 "right" 를 선택합니다.
이제 Next 를 클릭합니다.
다음 미지정된 컬럼
이제 우리는 "History" 컬럼에 반복적으로 4a. 컬럼데이티 지정하기 과 4b. 컬럼 속성 지정하기 단계를 수행 합니다. 상단의 녹색 체크 마크가 이전의 "Executable" 컬럼의 지정이 성공적이었음을 알려 줍니다.
이번에 화면에서는 기본적으로 Tuple Member 와 Tuple Index 1 을 보여주고 있습니다(이전의 "Executable" 컬럼에 자동으로 증가된 값임) 이것은 "History" 컬럼에 의도한 목적을 정확히 가르키고 있지 못합니다. "Calls Per Second" 를 Source Columns 필드 풀다운에서 선택 합니다. 이것은 자동적으로 Alternate View 라디오 버튼을 선택합니다.
Next 를 클릭합니다.
Sparkline 은 이미 선택되어져 있습니다. "History" 컬럼은 sparkline 그래프를 이용해서 "Calls Per Second" 에서 count() 데이타의 alternate view 를 나타내고 있습니다. (Edward Tufte 의 Sparklines 페이지를 참고 바랍니다.)
Next 클릭하여 마지막으로 미지정된 컬럼으로 이동합니다.
aggregation 값 컬럼
마지막 컬럼 "Calls Per Second" 은 count() aggregation 액션의 값을 디스플레이 해 줍니다. 이전과 마찬가지로 기본적으로 우리가 변경해야 할 Tuple Member 가 나타나고 이 컬럼은 aggregation 키의 일부분을 디스플레이 해주지는 않습니다.
Aggregation Value 를 선택합니다. 그리고 우리의 DTrace 프로그램은 이름이 없기 때문에 Aggregation Name 필드를 공백으로 놔둡니다: @[execname] = count(); (@ 은 익명 aggregation).
Next 를 클릭합니다.
aggregation 값을 디스플레이 하는 컬럼은 aggregation 키 보다 몇가지 더 지정할 속성들을 더 가지고 있습니다:
Value Per Second 를 체크합니다.
Alignment 필드 풀다운에서 "left" 를 선택합니다.
Format 필드 풀다운에서 "#,##0" 를 선택해서 천단위로 구분자가 나오도록 합니다.
스크롤을 아래로 내립니다 ...
Total 필드 풀다운에서 "Sum" 을 선택합니다.
Next 를 클릭합니다.
모든 컬럼이 지정된 다음에는 다시 4. 컬럼 지정하기 로 돌아가서 모든 컬럼들이 지정이 됐는지 다음 단계를 진행하기 전에 미리 확인합니다.
녹색 체크 마크는 어떤 컬럼들이 지정되었는지 보여 줍니다.(전부 지정되었음). 다시한번 말해서 컬럼은 디스플레이 상에서 왼쪽에서 오른쪽으로 나타나게 됩니다. 그리고 몇몇 새로운 지시자들이 나타 났는데: "Executable" 옆의 "[0]" 은 배열의 인덱스와 비슷하게 aggregation 키 배열에서의 첫번째 값을 가르키고 있습니다."( Calls Per Second )" 는 "History" 컬럼이 "Calls Per Second" 컬럼의 alternate view 임을 가르키고 있습니다. "@" 은 "Calls Per Second" 컬럼의 값이 익명 aggregation 에서 얻어짐을 가르키고 있습니다. 만약 aggregation 이 @counts 라는 이름으로 지정되었다면 우리는 "@counts" 라는 표시를 여기서 보게 될 것입니다.
만약 수정이 필요하다면 목록의 컬럼 네임을 선택한후 Specify > 버튼을 클릭해서 이전의 단게들을 다시 진행할 수 있습니다. 혹은 button to redo steps 4a and 4b for that column, or click Specify >> to redo only step 4b. Afterwards you will again return to the column list (above) to confirm your specifications before moving on.
Next 를 클릭합니다.
디스플레이 테스트 수행
모든 컬럼들을 지정한 다음 우리는 Finish 를 클릭할 수 있습니다. 하지만 우리가 의도한 대로 디스플레이가 동작하는지 체크할 필요가 있습니다. 이 단계는 바로 그러한 과정을 수행하게 됩니다:
Run Display 버튼을 클릭합니다. 다음과 같이 생긴 다른 윈도우가 나타날 것입니다:

기본적으로 디스플레이는 aggregation 키의 오름순으로 정렬 됩니다. "Calls Per Second" 컬럼의 헤더를 클릭하여 내림순으로 정렬되도록 합니다. 테스트 실행시에 결정한 정렬 순서가 실제 생성될 디스플레이의 기본 정렬 방법이 됩니다. 우리는 또한 초기 윈도우 사이즈도 조정할 수 있지만 기본 사이즈도 적당해 보입니다.
만약 몇몇 수정을 가하고자 한다면 Back 버튼을 클릭해서 이전의 단계로 다시 돌아갈 수 있습니다. 테스트 디스플레이를 그대로 두고 이전 단계로 돌아가서 수정된 테스트 런과 두개를 서로 비교할 수 있습니다.
우리의 테스트 디스플레이는 기존에 인스톨 된 "System Calls" 디스플레이에 전체 열과 좀 더 낳은 정렬을 추가 시킴으로써 향상 시켰습니다. 이제 그것을 닫은 후에 마법사에서 Next 를 클릭해서 설명을 제공할 수 있습니다.
설명 제공하기
Description 패널에 입력한 텍스트는 Traces 리스트에서 해당 디스플레이를 선택했을때 나타나게 됩니다. HTML을 사용해서 진하게, 이탤릭, 밑줄, 폰트, 번호 매기기 및 글머리 기호들을 지정할 수 있습니다.
아래는 메인 Chime 윈도우에서 해당 디스플레이를 선택했을때 나타나게될 결과물입니다:
Next 를 클릭합니다.
디스플레이 셍성 완료하기
다음 단계에서는 드릴다운 지원을 추가 할 수 있습니다. 이것은 비활성화 되어있고 옆에 나타난 설명 구절에서 우리의 DTrace 프로그램은 드릴다운을 지원하는데 필요한 방식으로 쓰여지지 않았음을 알려주고 있습니다.
우리는 단순히 Back 버튼을 선택해서 이것을 수정할 수 있습니다. 그러나 백업의 과정이 너무 길어 지므로 차라리 완료를 한 후에 그것을 단계 1에서 다시 여는것이 더 쉬울 것입니다.
Finish 를 클릭합니다. 콘솔 출력에서 다음과 같은 결과를 볼 수 있을 것입니다:
Wrote /opt/OSOL0chime/displays/new/system_calls.xml
To run, enter "/opt/OSOL0chime/bin/chime -C /opt/OSOL0chime/displays/new/system_calls.xml".
디스플레이를 커맨드라인에서 직접 실행시키는 대신 새로 생성된 디스플레이를 메인 Chime 윈도우에서 직접 선택하여 실행시킬 수 있습니다:
새로운 디스플레이는 기본적으로 /opt/OSOL0chime/displays/new 에 놓여 지고 위의 그림 처럼 메뉴 아이템에 의해 접근 됩니다. 만약 이것이 여러분이 만든 첫번째 디스플레이라면 축하드립니다! 여러분은 다음의 그림처럼 새로 만든 디스플레이를 볼 수 있을 것입니다:
여러분은 .xml 을 /opt/OSOL0chime/displays 혹은 다른 서브 디렉토리로 이동 시켜서 나중에 유용한 새로운 디스플레이들을 좀 더 쉽게 찾도록 할 수 있습니다. 이러한 경우 DTrace 프로그램 파일의 경로를 상대 경로로 지정했다면 이것을 새로운 장소로 다시 업데이트 시켜 주어야 합니다.
드릴 다운 지원을 디스플레이에 추가시키는 또다른 페이지들이 곧 추가될 것입니다.
커맨드 라인에서 Chime 디스플레이 생성하기
사용자는 커맨드라인에서 직접 디스플레이를 직접 생성시킬 수 있습니다. 예를 들어 다음과 같이 Brendan Gregg 의 DTrace Tools 중의 한줄짜리를 실행하려고 한다면:
# Read bytes by process,
dtrace -n 'sysinfo:::readch { @bytes[execname] = sum(arg0); }'
아래처럼 단순히 dtrace 를 chime 로 교체하면 됩니다:
/opt/OSOL0chime/bin/chime -n 'sysinfo:::readch { @bytes[execname] = sum(arg0); }'
dtrace(1M) 를 사용하는것과 같이-n 을 이용해 프로그램 을 직접 지정하거나 -s 를 이용해서 프로그램 파일을 지정할 수 있습니다. 비슷한 방식으로 -xoption=value 과 -Z 를 이용해서 DTrace 옵션을 지정하는 방법 처럼 지정할 수 있습니다. 다음의 블로그 글들을 참고해서 DTraceToolkit 의 bitesize.d 과 procsystime 스크립트를 Chime 디스플레이에 적용시킨 방법을 확인하시기 바랍니다.:
Chime and the DTraceToolkit
Chime and the DTraceToolkit Part 2
XML 속성
여러분은 디스플레이 속성을 디스플레이의 .xml 파일에 직접 손으로 지정해줄 수 있습니다. 간단한 예제 를 통해 시작해 볼 수 있을 것입니다; 다른 예제들을 (좀 더 복잡한) /opt/OSOL0chime/displays 디렉토리에서 직접 보실 수 있습니다.
"오픈솔라리스" 카테고리의 다른 글
- 오픈솔라리스의 빌드와 설치 (Part 2) (댓글 1개 / 트랙백 0개) 2006/03/23
- OpenSolaris 코드 브라우저를 이용하여 코드베이스 탐색하기 (댓글 1개 / 트랙백 1개) 2005/09/23
- 커널 프로그래머를 위한 에너지 스타 가이드라인 (댓글 1개 / 트랙백 0개) 2006/07/23
- 오픈솔라리스 domU 를 리눅스 dom0 에 설치하기 (댓글 0개 / 트랙백 0개) 2008/03/11
- Indiana 란 무엇이고 어떻게 참여할 수 있나요? (댓글 0개 / 트랙백 0개) 2008/04/17
- FAQ: 오픈솔라리스 ON(OS/Net) 번역 FAQ (댓글 0개 / 트랙백 0개) 2008/02/18
- 오픈 솔라리스를 위한 무선 네트워킹 (댓글 1개 / 트랙백 0개) 2006/01/23
- Xen: 다운로드, 설치 및 설정 정보 (댓글 0개 / 트랙백 0개) 2008/01/21
- FAQ: OpenSolaris.org (댓글 3개 / 트랙백 0개) 2006/09/23
- OpenSolaris 2008.05 발표 (댓글 0개 / 트랙백 0개) 2008/05/13
댓글을 달아 주세요
좋은 정보 감사해요~
2007/09/19 03:56좋은 자료 잘 활용하겠습니다. 회사에 쏠라리스 무지하게 많아요... 꼭 배워야됩니다.
2007/09/19 15:41좋은 정보 많이 얻고 갑니다.
2007/09/19 23:18