이 페이지에서

Chrome 트레이스 형식 시각화 도구

풀 스택 추적을 사용하여 최상위 QML 또는 JavaScript부터 C++를 거쳐 커널 공간까지 추적할 수 있습니다. 이를 통해 애플리케이션의 성능을 측정하고, CPU 또는 I/O에 의해 성능이 제한되는지, 아니면 동일한 시스템에서 실행 중인 다른 애플리케이션의 영향을 받고 있는지 확인할 수 있습니다. 추적을 통해 시스템이 무엇을 수행하고 있는지, 그리고 애플리케이션의 성능이 특정 방식으로 나타나는 이유를 파악할 수 있습니다. 또한 하드웨어가 어떻게 활용되고 있는지, 커널과 애플리케이션이 무엇을 수행하고 있는지를 보여줍니다.

추적 정보를 통해 수집된 데이터에 대한 더 자세한 내용을 파악할 수 있습니다. QML Profiler 수집한 데이터에 대한 더 자세한 정보를 제공합니다. 예를 들어, 사소한 바인딩 평가가 왜 그렇게 오래 걸리는지 확인할 수 있습니다. 이는 C++ 코드가 실행되고 있거나 디스크 I/O 속도가 느리기 때문일 수 있습니다.

chrome://about 와 같은 여러 추적 도구를 사용하면 Chrome Trace Format(CTF) 형식으로 Chrome 추적 이벤트에 대한 정보를 생성할 수 있습니다. Qt Creator 에서 CTF 파일을 열어 볼 수 있습니다. 이는 메모리 사용량이 많아 내장된 트레이스 뷰어(chrome://tracing)로는 보기 어려운 100MB 이상의 트레이스 파일을 확인할 때 특히 유용합니다.

이 시각화 도구는 LTTng 추적 프레임워크가 생성한 데이터에서 사용되는 모든 이벤트 유형을 CTF로 변환하여 지원합니다. 그러나 예를 들어 Android 시스템 추적에서 사용되는 일부 고급 이벤트 유형은 지원되지 않습니다. 시각화 도구는 지원되지 않는 이벤트 유형을 별도 알림 없이 무시합니다.

이 시각화 도구는 다음 이벤트 유형을 지원합니다:

  • 시작, 종료, 지속 시간 및 순간 이벤트
  • 카운터 이벤트(그래프)
  • 메타데이터 이벤트(프로세스 및 스레드 이름)

JSON 파일 열기

JSON 파일을 열어 보려면 ‘ Analyze ’ > ‘ Chrome Trace Format Viewer ’ > ‘ Load JSON File ’을 선택하십시오.

이벤트 시각화

Timeline 뷰는 추적 이벤트를 그래픽으로 표시하고, 기록된 모든 이벤트의 요약 보기를 제공합니다.

타임라인 보기

타임라인의 각 범주는 애플리케이션 내의 스레드를 나타냅니다. 행에 있는 이벤트(5) 위로 커서를 이동하면 해당 이벤트의 지속 시간과 범주를 확인할 수 있습니다. 이벤트가 선택되었을 때만 정보를 표시하려면 ‘ View Event Information on Mouseover ’ 버튼(4)을 비활성화하십시오.

개요(10)는 데이터가 수집된 기간을 요약하여 보여줍니다. 확대/축소 범위(8)를 드래그하거나 개요를 클릭하여 개요 상에서 이동할 수 있습니다. 이벤트 간을 이동하려면 ‘ Jump to Previous Event ’ 및 ‘ Jump to Next Event ’ 버튼(1)을 선택하십시오.

Show Zoom Slider 버튼(2)을 선택하면 확대/축소 수준을 설정할 수 있는 슬라이더가 열립니다. 확대/축소 핸들(9)을 드래그하여 조정할 수도 있습니다. 기본 확대/축소 수준으로 재설정하려면 타임라인을 마우스 오른쪽 버튼으로 클릭하여 컨텍스트 메뉴를 열고, Reset Zoom 을 선택하십시오.

스레드로 제한 (Restrict to Threads) 버튼(6)을 선택하여 표시할 스레드를 선택합니다.

이벤트 범위 선택

이벤트 범위(7)를 선택하여 해당 범위가 나타내는 시간을 확인하거나 트레이스의 특정 영역을 확대할 수 있습니다. ‘이벤트 범위 선택( Select Range )’ 버튼(3)을 선택하여 선택 도구를 활성화하십시오. 그런 다음 타임라인을 클릭하여 이벤트 범위의 시작점을 지정하십시오. 선택 핸들을 드래그하여 범위의 끝점을 정의하십시오.

이벤트 범위를 사용하여 두 연속된 이벤트 간의 지연 시간을 측정할 수도 있습니다. 첫 번째 이벤트의 끝과 두 번째 이벤트의 시작 사이에 범위를 설정하십시오. ‘ Duration ’ 필드에는 이벤트 간의 지연 시간이 밀리초 단위로 표시됩니다.

이벤트 범위를 확대하려면 해당 범위를 두 번 클릭하십시오.

이벤트 범위를 제거하려면 ‘ Selection ’ 대화 상자를 닫으십시오.

통계 보기

통계 보기

' Statistics ' 보기는 타임라인에 있는 각 함수가 포함된 샘플 수를 총합 및 스택 최상위( self 라고 함)에 있을 때의 수로 표시합니다. 이를 통해 최적화가 필요한 함수를 파악할 수 있습니다. 발생 횟수가 많다는 것은 해당 함수가 불필요하게 트리거되거나 실행에 매우 오랜 시간이 걸린다는 것을 나타낼 수 있습니다.

LTTng 데이터 수집

LTTng는 임베디드 리눅스 시스템에 적용하여 애플리케이션의 시작 시간을 최적화하는 방법을 파악할 수 있는 리눅스용 추적 툴킷입니다.

Qt에는 일련의 커널 트레이스 포인트와 사용자 공간의 사용자 정의 트레이스 포인트를 위한 추적 하위 시스템이 있습니다.

커널 구성

LTTng를 사용하려면 커널을 빌드하기 전에 다음 구성 옵션을 설정해야 합니다:

  • CONFIG_HIGH_RES_TIMERS
  • CONFIG_KALLSYMS
  • CONFIG_MODULES
  • CONFIG_TRACEPOINTS

다음과 같은 추가 옵션을 설정하는 것을 권장합니다:

  • CONFIG_EVENT_TRACING
  • CONFIG_HAVE_SYSCALL_TRACEPOINTS
  • CONFIG_KALLSYMS_ALL

Yocto에서는 ‘ Menu ’ > ‘ Config ’ > ‘ Kernel Hacking ’ > ‘ Tracers ’ 경로에서 위 옵션을 활성화할 수 있습니다.

LTTng 설치

커널을 빌드하여 기기에 배포한 후, 기기에 다음 LTTng 패키지를 설치해야 합니다:

  • lttng-tools 추적 세션을 제어하기 위해
  • lttng-modules 커널 트레이스 포인트용
  • lttng-ust 사용자 공간 트레이스 포인트용

Yocto에서는 EXTRA_IMAGE_FEATURES += "tools profile" 를 활성화하기만 하면 됩니다.

트레이스 포인트가 포함된 Qt 빌드

Qt 버전에는 지속적으로 트레이스 포인트가 추가되고 있습니다. 이를 사용하려면 configure -trace lttng 옵션을 사용하여 Qt를 직접 빌드해야 합니다.

이벤트 기록

세션을 생성하려면 ` lttng create ` 명령을 호출합니다. 그런 다음 ` lttng enable-channel kernel -k `를 호출하여 커널 채널을 활성화합니다. 커널 채널 내에서 적절한 트레이스 포인트를 ` kernel_events `로 지정하고, ` lttng enable-event `를 호출하여 이를 활성화합니다. 마지막으로 ` lttng start `를 호출하여 추적을 시작합니다.

추적을 중지하려면 lttng stop 를 호출합니다. sleep 를 사용하여 세션 길이를 설정할 수 있습니다. 중지 후에는 lttng destroy 를 호출하여 세션을 해제할 수 있습니다.

위의 명령어를 포함하는 스크립트를 작성하여 풀스택 추적을 시작하고 중지할 수 있습니다. systemd 를 사용하여 스크립트를 실행할 수 있습니다.

추적 지점 활성화

데이터는 LTTng 세션에서 활성화한 추적 지점에 따라 기록됩니다. 일반적으로 스케줄러 전환, 시스템 호출 및 Qt 추적 지점을 활성화하는 것이 유용합니다.

스케줄러 전환 트레이스 포인트

스케줄러 전환 트레이스 포인트는 선점(preemption)으로 인해 애플리케이션이 전환될 때, 예를 들어 다른 프로세스가 CPU 코어에서 실행될 기회를 얻었을 때 도달합니다. 스케줄러 전환 트레이스 포인트를 활성화하면 현재 실행 중인 스레드와 해당 스레드가 속한 프로세스, 그리고 프로세스가 시작 및 중지된 시간을 기록할 수 있습니다.

시스템 호출 트레이스 포인트

시스템 호출 트레이스 포인트는 스케줄러 전환이 발생한 원인을 파악하는 데 도움이 됩니다. 다음은 추적해야 할 시스템 호출의 예시입니다:

  • openat close 는 파일 설명자를 파일 이름에 매핑합니다
  • mmap 페이지 오류를 파일에 매핑합니다
  • read write 는 I/O 작업에 의해 트리거됩니다
  • nanosleep, futexpoll 는 스케줄러 전환을 설명합니다
  • ioctl GPU 및 디스플레이를 제어합니다

LTTng 데이터를 CTF로 변환하기

ctf2ctf 도구는 babeltrace 를 사용하여 바이너리 공통 추적 형식(CTF)을 파싱하고 이를 Chrome 추적 형식(CTF)으로 변환합니다. 이 도구는 기록을 사람이 더 쉽게 읽을 수 있도록 다음과 같은 사용자 지정 작업을 수행합니다:

  • 파일 설명자를 파일 이름으로 매핑
  • 페이지 오류를 파일 이름으로 매핑
  • 인터럽트 및 블록 장치에 이름을 주석으로 추가
  • UTF-16 QString 데이터를 UTF-8 문자열로 변환
  • 메모리 페이지 할당 횟수 집계

Chrome Trace Format 형식의 추적 데이터가 포함된 JSON 파일을 생성하려면 명령줄에서 다음 명령을 입력하세요:

ctf2ctf -o trace.json path/to/lttng trace/

참조: 방법: 분석, 분석기코드 분석.

Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.