성능 데이터 수집

워치독 네이티브 서비스는 시스템 부팅 중에 early-init 단계부터 I/O 성능 데이터를 기록합니다. 네이티브 서비스는 버그 신고에 수집된 성능 데이터를 덤프합니다. 공급업체는 dumpsys를 통해 네이티브 서비스를 쿼리하여 수집된 데이터를 덤프하거나 디버깅을 위한 맞춤 수집 세션을 시작할 수 있습니다.

데이터 수집 빈도

성능 데이터 수집 빈도는 빌드 유형에 따라 다릅니다.

  • userdebug 빌드 또는 eng 빌드에서 워치독은 시스템 부팅 중에는 1초마다 한 번씩, 부팅 완료 후에는 1분마다 한 번씩 성능 데이터를 수집합니다.
  • 사용자 빌드에서 워치독은 시스템 부팅 중에는 20초마다 한 번씩, 부팅 완료 후에는 2분마다 한 번씩 성능 데이터를 수집합니다.

데이터 수집 이벤트

샘플 기반 프로파일링은 다양한 시스템 이벤트 (예: 시스템 부팅, 시스템 절전 모드 종료, 사용자 전환) 및 지난 N분 동안 실행됩니다.

  • 버그 신고 생성 전 마지막 N분 이벤트: 30분의 롤링 기간 동안 생성됩니다.
  • 부팅 시간 이벤트: 부팅 후에 생성됩니다.
  • 사용자 전환 이벤트: 사용자 전환이 시작된 후에 생성됩니다.
  • 맞춤 수집 이벤트: 폴링 기간, 최대 기간을 지정할 수 있으며 패키지로 필터링할 수 있습니다.

성능 데이터 덤프

버그 신고가 캡처되면 워치독 네이티브 서비스는 버그 신고에 수집된 성능 데이터를 덤프합니다. 공급업체는 아래 dumpsys 명령어를 통해 네이티브 서비스를 쿼리하여 수집된 성능 데이터를 덤프할 수 있습니다. 성능 데이터 보고서에 관한 자세한 내용은 성능 데이터 보고서 이해 섹션을 참고하세요.

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default > /tmp/carwatchdog_dump.txt

디버깅을 위한 성능 데이터 수집

공급업체는 워치독 네이티브 서비스를 사용하여 디버깅 목적으로 성능 데이터를 맞춤 수집할 수 있습니다. 예를 들어 공급업체는 앱 또는 서비스의 I/O 사용량을 파악하기 위해 특정 패키지 목록 또는 전체 시스템의 I/O 사용량을 프로파일링하는 맞춤 성능 데이터 수집을 실행할 수 있습니다.

맞춤 수집 세션 시작

다음은 맞춤 성능 데이터 수집 세션을 시작하는 명령어입니다.

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf [--interval <seconds>] [--max_duration <seconds>] [--filter_packages <package_name>,<package_name>,...]
  • --start_perf 맞춤 성능 데이터 수집 세션을 시작합니다.
  • --interval <seconds> 프로파일링 간격을 지정합니다. 기본적으로 간격은 30초입니다.
  • --max_duration <seconds> 맞춤 성능 데이터 수집 세션의 최대 시간을 지정합니다. 수동으로 세션이 중지되지 않으면 세션은 이 시간이 지나면 중지되고 수집된 데이터는 삭제됩니다. 기본적으로 최대 시간은 30분입니다.
  • --filter_packages <package_name>,<package_name>...프로파일링할 패키지 이름의 쉼표로 구분된 목록을 지정합니다. 제공된 경우 성능 데이터 수집은 그러한 패키지로 제한됩니다. 그 외의 경우에는 시스템의 모든 패키지에 대해 성능 데이터 수집이 진행됩니다.

예를 들어 아래 명령어는 프로파일링 간격 10초, 최대 수집 시간 1시간인 맞춤 성능 데이터 수집을 시작하고 프로파일링을 com.google.android.car.kitchensinkcom.google.android.apps.maps 패키지로 제한합니다.

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf --interval 10 --max_duration 3600 --filter_packages com.google.android.car.kitchensink,com.google.android.apps.maps

맞춤 수집 세션 중지 및 덤프

관심 있는 앱 또는 서비스의 I/O 사용량을 기록한 후 공급업체는 맞춤 성능 데이터 수집 세션을 중지하여 수집된 데이터를 덤프해야 합니다. 이 명령어는 맞춤 성능 데이터 수집을 중지하고 수집된 데이터를 /tmp/carwatchdog_dump.txt에 덤프합니다.

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --stop-perf > /tmp/carwatchdog_custom_dump.txt

dumpsys 도움말

dumpsys 도움말을 확인하려면 다음 단계를 따르세요.

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --help

proto 형식으로 덤프

원하는 경우 dumpsys 데이터를 proto 형식으로 덤프할 수 있습니다.

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --proto

성능 데이터 보고서 이해하기

자세한 내용은 다음 샘플 성능 데이터 보고서를 참고하세요.

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default

---------------------------------
WatchdogPerfService report:
---------------------------------
Boot-time collection information:
=================================
Event polling interval: 1 second

Wake-up collection information:
===============================
Event polling interval: 1 second

User-switch collection information:
===================================
Event polling interval: 1 second

Periodic collection information:
================================
Event polling interval: 60 seconds
---------------------------------------------------------------------------
Boot-time performance report:
=================================
No collection recorded
---------------------------------------------------------------------------
Wake-up performance report:
===========================
No collection recorded
---------------------------------------------------------------------------
User-switch events performance report:
======================================
No collection recorded
---------------------------------------------------------------------------
Last N minutes performance report:
======================================
Collection duration: 10800 seconds
Number of collections: 181

Collection 0: <Mon Oct  2 18:36:06 2023 GMT>
=============================================
Total CPU time (ms): 473210
Total CPU cycles: 39553152000
Total idle CPU time (ms)/percent: 435860 / 92.11%
CPU I/O wait time (ms)/percent: 0 / 0.00%
Number of context switches: 13723415093
Number of I/O blocked processes/percent: 0 / 0.00%

Top N CPU Times:
----------------
Android User ID, Package Name, CPU Time (ms), Percentage of total CPU time, CPU Cycles
    Command, CPU Time (ms), Percentage of UID's CPU Time, CPU Cycles
10, com.google.android.carassistant, 13357, 2.82%, 16409088000
    assistant:interactor, 13360, 100.02%, 16409088000
0, system, 9097, 1.92%, 9640512000
    sensors@1.0-ser, 3790, 41.66%, 3773184000
    system_server, 2760, 30.34%, 3135936000
    com.android.car, 1150, 12.64%, 1099584000
    binder:621_4, 1000, 10.99%, 1281024000
    surfaceflinger, 230, 2.53%, 245376000
0, audioserver, 4383, 0.93%, 4597248000
    Main, 2690, 61.37%, 2980416000
    binder:916_2, 950, 21.67%, 925056000
    audioserver, 720, 16.43%, 691776000
0, root, 4357, 0.92%, 3727872000
    irq/311-iam2068, 2630, 60.36%, 2471616000
    irq/26-90b6400., 370, 8.49%, 561024000
    kworker/u16:4-bwmon_wq, 290, 6.66%, 48960000
    kworker/u16:1-memlat_wq, 270, 6.20%, 0
    ipcdaemon, 220, 5.05%, 218304000
10, com.google.android.apps.geo.automotive.adas, 1509, 0.32%, 1756416000
    adas:publishing, 1490, 98.74%, 1735680000
    as:clientparams, 10, 0.66%, 20736000
0, com.android.vending, 796, 0.17%, 765504000
    android.vending, 790, 99.25%, 765504000
0, shared:com.google.uid.shared, 581, 0.12%, 481152000
    google.android.gms, 340, 58.52%, 237312000
    .gms.persistent, 190, 32.70%, 184512000
    process.gservices, 50, 8.61%, 59328000
0, gps, 507, 0.11%, 659136000
    binder:920_2, 500, 98.62%, 659136000
10, com.android.vending, 489, 0.10%, 372288000
    android.vending, 480, 98.16%, 372288000
0, shared:android.uid.systemui, 438, 0.09%, 449856000
    android.systemui, 440, 100.46%, 449856000

Top N Storage I/O Reads:
-------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, root, 56123392, 81.95%, 1, 100.00%, 0, 0.00%, 0, 0.00%
0, system, 12333056, 18.01%, 0, 0.00%, 0, 0.00%, 0, 0.00%

Top N Storage I/O Writes:
-------------------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, com.android.vending, 0, 0.00%, 0, 0.00%, 520192, 46.35%, 20, 47.62%
10, com.android.vending, 0, 0.00%, 0, 0.00%, 520192, 46.35%, 20, 47.62%
10, shared:com.google.uid.shared, 0, 0.00%, 0, 0.00%, 45056, 4.01%, 0, 0.00%
0, shared:com.google.uid.shared, 0, 0.00%, 0, 0.00%, 36864, 3.28%, 2, 4.76%
0, logd, 24576, 40.00%, 0, 0.00%, 0, 0.00%, 0, 0.00%
0, root, 20480, 33.33%, 0, 0.00%, 0, 0.00%, 0, 0.00%
0, system, 16384, 26.67%, 0, 0.00%, 0, 0.00%, 0, 0.00%

Top N I/O waiting UIDs:
-----------------------
Android User ID, Package Name, Number of owned tasks waiting for I/O, Percentage of owned tasks waiting for I/O
    Command, Number of I/O waiting tasks, Percentage of UID's tasks waiting for I/O
0, root, 2, 0.39%
    dp_hdcp2p2, 1, 50.00%
    hdcp_2x, 1, 50.00%

Top N major page faults:
------------------------
Android User ID, Package Name, Number of major page faults, Percentage of total major page faults
    Command, Number of major page faults, Percentage of UID's major page faults
0, com.android.vending, 104, 48.83%
    android.vending, 104, 100.00%
10, com.android.vending, 104, 48.83%
    android.vending, 104, 100.00%
0, shared:com.google.uid.shared, 4, 1.88%
    .gms.persistent, 4, 100.00%
10, shared:com.google.uid.shared, 1, 0.47%
    .gms.persistent, 1, 100.00%
Number of major page faults since last collection: 213
Percentage of change in major page faults since last collection: 0.00%

버그 신고를 캡처하거나 인수 없이 워치독 dumpsys 명령어를 실행하거나 맞춤 수집 세션을 중지하면 워치독 네이티브 서비스는 위의 보고서와 유사한 성능 데이터 보고서를 덤프합니다.

보고서에는 시스템 부팅 중에 수집된 데이터와 보고서 생성 전 마지막 N분 동안에 수집된 데이터가 포함됩니다.

항목 설명
부팅 시간 수집 정보 부팅 시간 성능 데이터 수집 세션에 관한 정보를 제공합니다.
Wake-up 컬렉션 정보 시스템이 정지 모드에서 깨어날 때의 깨어날 때 성능 데이터 수집 세션에 관한 정보를 제공합니다.
사용자 전환 수집 정보 사용자 전환이 있을 때 사용자 전환 성능 데이터 수집 세션에 관한 정보를 제공합니다.
주기적 수집 정보 부팅 완료 후 시작되는 주기적인 성능 수집 세션에 관한 정보를 제공합니다.
부팅 시간 실적 보고서 시스템 부팅 중에 수집된 성능 데이터를 포함합니다. 이 데이터는 시스템이 종료될 때까지 메모리에 유지되므로 모든 보고서의 데이터가 덤프됩니다.
기기 깨우기 실적 보고서 절전 모드 해제 중에 수집된 성능 데이터를 포함합니다. 이 데이터는 시스템이 종료될 때까지 메모리 내에서 유지되므로 모든 보고서의 데이터가 덤프됩니다.
사용자 전환 실적 보고서 사용자 전환 중에 수집된 성능 데이터를 포함합니다. 이 데이터는 시스템이 종료될 때까지 메모리에 유지되므로 모든 보고서에서 데이터가 덤프됩니다.
지난 N분 I/O 실적 보고서 보고서 생성 전 마지막 N분 동안 주기적 수집 세션을 통해 수집된 성능 데이터를 포함합니다.
수집 기간 성능 데이터 수집의 총 기간입니다.
컬렉션 수 단일 보고서에 보고된 총 수집 횟수입니다.

보고서에 보고된 각 수집에는 아래 섹션의 모든 항목 또는 일부 항목이 포함될 수 있습니다. 각 수집에 보고된 통계는 마지막 수집 이후에 진행된 델타입니다. 단, 즉각적인 통계(예: 시스템 부팅 이후 집계되지 않은 통계)는 제외됩니다.

항목 설명
CPU I/O 대기 시간/비율 마지막 수집 이후 I/O 작업으로 인해 컨텍스트 전환 또는 대기에 사용된 절대 CPU 시간과 총 CPU 시간의 비율입니다.
총 CPU 시간 총 CPU 시간(밀리초)입니다.
총 유휴 CPU 시간 유휴 상태에서 소비된 총 CPU 시간입니다.
CPU I/O 대기 시간 CPU가 I/O 작업을 기다리는 데 소비한 총 시간입니다.
컨텍스트 전환 수 한 프로세스 또는 스레드에서 다른 프로세스 또는 스레드로 전환된 CPU 수입니다.
차단된 I/O 프로세스 수/백분율 I/O 대기 중에 차단된 총 프로세스 수 및 마지막 수집 이후 I/O 대기 중에 차단된 프로세스의 비율입니다.
상위 N개 CPU 시간

마지막 수집 이후 CPU 시간을 가장 많이 소비한 상위 N개 패키지는 다음과 같습니다.

  • 각 최상위 행에는 사용자 ID, 패키지 이름, CPU 시간, 총 CPU 시간의 비율, CPU 주기가 포함되어 있습니다.
  • 내부 수준 줄에는 명령어, CPU 시간, UID CPU 시간의 비율, CPU 주기가 포함됩니다.
Top N 스토리지 I/O 읽기

마지막 수집 이후 디스크에서 가장 많은 데이터를 읽은 상위 N개 패키지입니다.

각 행에는 사용자 ID, 패키지 이름, 포그라운드 모드에서 읽은 총 바이트 수와 백그라운드 모드에서 읽은 총 바이트 수, 시스템에서 읽은 모든 포그라운드 모드 바이트의 비율과 백그라운드 모드 바이트의 비율, 포그라운드 모드에서 실행된 총 fsync 호출 수와 백그라운드 모드에서 실행된 총 fsync 호출 수, 시스템에서 실행된 모든 포그라운드 모드 fsync 호출의 비율과 백그라운드 모드 fsync 호출의 비율이 포함됩니다.

상위 N개 스토리지 I/O 쓰기 마지막 수집 이후 디스크에 가장 많은 데이터를 작성한 상위 N개 패키지입니다. 각 줄에는 인기 급상승 읽기와 유사한 필드가 포함되어 있습니다.
대기 중인 I/O UID 중 상위 N개

가장 많은 I/O 대기 작업이 있는 상위 N개 패키지입니다.

  • 각 최상위 줄에는 I/O 대기 중인 패키지에서 소유한 작업의 개수와 비율, 사용자 ID, 패키지 이름이 포함되어 있습니다.
  • 내부 수준 줄에는 패키지가 소유한 최상위 프로세스의 I/O 대기 정보가 포함되어 있습니다.
상위 N개의 주요 페이지 오류 마지막 수집 이후 가장 주요한 페이지 오류가 발생한 상위 N개 패키지입니다.