워치독 네이티브 서비스는 시스템 부팅 중에 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.kitchensink
및 com.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개 패키지는 다음과 같습니다.
|
Top N 스토리지 I/O 읽기 |
마지막 수집 이후 디스크에서 가장 많은 데이터를 읽은 상위 N개 패키지입니다. 각 행에는 사용자 ID, 패키지 이름, 포그라운드 모드에서 읽은 총 바이트 수와 백그라운드 모드에서 읽은 총 바이트 수, 시스템에서 읽은 모든 포그라운드 모드 바이트의 비율과 백그라운드 모드 바이트의 비율, 포그라운드 모드에서 실행된 총 |
상위 N개 스토리지 I/O 쓰기 | 마지막 수집 이후 디스크에 가장 많은 데이터를 작성한 상위 N개 패키지입니다. 각 줄에는 인기 급상승 읽기와 유사한 필드가 포함되어 있습니다. |
대기 중인 I/O UID 중 상위 N개 | 가장 많은 I/O 대기 작업이 있는 상위 N개 패키지입니다.
|
상위 N개의 주요 페이지 오류 | 마지막 수집 이후 가장 주요한 페이지 오류가 발생한 상위 N개 패키지입니다. |