이 페이지에서

Chrome 추적 형식 시각화 도구

전체 스택 추적을 사용하여 최상위 레벨의 QML 또는 JavaScript부터 C++, 커널 공간까지 추적할 수 있습니다. 이를 통해 애플리케이션의 성능을 측정하고 CPU 또는 I/O 바인딩 여부 또는 동일한 시스템에서 실행 중인 다른 애플리케이션의 영향을 받는지 확인할 수 있습니다. 추적은 시스템에서 수행 중인 작업과 애플리케이션이 특정 방식으로 작동하는 이유에 대한 인사이트를 제공합니다. 하드웨어가 어떻게 활용되고 있는지, 커널과 애플리케이션이 무엇을 하고 있는지를 나타냅니다.

추적 정보를 통해 수집하는 데이터에 대한 자세한 정보를 알 수 있습니다. QML Profiler 수집하는 데이터에 대해 자세히 알려줍니다. 예를 들어, 사소한 바인딩 평가가 왜 그렇게 오래 걸리는지 확인할 수 있습니다. 이는 C++가 실행 중이거나 디스크 I/O가 느리기 때문일 수 있습니다.

여러 추적 도구(예: chrome://about)는 Chrome 추적 이벤트에 대한 정보를 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 EventJump 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는 임베디드 Linux 시스템에 적용하여 애플리케이션의 시작 시간을 최적화하는 방법을 찾을 수 있는 Linux용 추적 툴킷입니다.

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 트레이스 포인트를 활성화하는 것이 유용합니다.

스케줄러 스위치 트레이스 포인트

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

시스템 호출 추적 지점

시스템 호출 추적 지점은 스케줄러 전환이 발생한 이유를 이해하는 데 도움이 됩니다. 다음은 추적할 시스템 호출의 예입니다:

  • openatclose 파일 설명자를 파일 이름에 매핑합니다.
  • mmap 페이지 결함을 파일에 매핑
  • readwrite 는 I/O 작업에 의해 트리거됩니다.
  • nanosleep, futex, poll 은 스케줄러 스위치를 설명합니다.
  • ioctl GPU 및 디스플레이 제어

LTTng 데이터를 CTF로 변환하기

ctf2ctf 도구는 babeltrace 를 사용하여 바이너리 CTF(공통 추적 형식)를 파싱하고 이를 CTF(크롬 추적 형식)로 변환합니다. 이 도구는 다음과 같은 사용자 지정 작업을 수행하여 기록의 가독성을 높입니다:

  • 파일 설명자를 파일 이름에 매핑
  • 페이지 오류를 파일 이름에 매핑
  • 인터럽트 및 차단 기기에 이름 주석 달기
  • UTF-16 QString 데이터를 UTF-8 문자열로 변환하기
  • 메모리 페이지 할당량 계산

Chrome 추적 형식의 추적 데이터가 포함된 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.