성능 데이터 수집

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

데이터 수집 빈도

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

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

성능 데이터 덤프

버그 신고가 캡처되면 워치독 네이티브 서비스는 버그 신고에 수집된 성능 데이터를 덤프합니다. 공급업체는 아래 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 seconds, 최대 수집 시간 1 hour인 맞춤 성능 데이터 수집을 시작하고 프로파일링을 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 도움말

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

성능 데이터 보고서 이해

아래는 샘플 성능 데이터 보고서입니다.

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

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

Periodic collection information:
=========================
Event interval: 60 seconds
--------------------------------
Boot-time I/O performance report:
============================
Collection duration: 1637609138 seconds
Number of collections: 12

Collection 0: <Fri Jan  7 19:53:53 2022 GMT>
===================================
CPU I/O wait time/percent: 18 / 0.63%
Number of I/O blocked processes/percent: 0 / 0.00%

Top N 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 Writes:
-------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, root, 53248, 100.00%, 1, 100.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.59%
        kworker/7:2+events, 1, 50.00%
        kworker/4:2+events, 1, 50.00%
0, system, 2, 7.14%
        ais_server, 2, 100.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, system, 48, 53.33%
        ais_server, 13, 27.08%
        audiod, 10, 20.83%
0, root, 41, 45.56%
        init, 39, 95.12%
        ueventd, 1, 2.44%
0, media, 1, 1.11%
        init.qti.media., 1, 100.00%
Number of major page faults since last collection: 90
Percentage of change in major page faults since last collection: 0.00%

Collection 1: <Fri Jan  7 19:53:54 2022 GMT>
===================================
 … Collection data …

Collection 2: <Fri Jan  7 19:53:55 2022 GMT>
===================================
 … Collection data …
 … Repeated collection data until boot-complete …

-----------------------------------------
Last N minutes I/O performance report:
================================
Collection duration: 10797 seconds
Number of collections: 181

Collection 0: <Tue Jan 11 19:43:05 2022 GMT>
====================================
CPU I/O wait time/percent: 18 / 0.04%
Number of I/O blocked processes/percent: 0 / 0.00%

Top N Writes:
-------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, system, 33697792, 92.41%, 0, 0.00%, 0, 0.00%, 0, 0.00%
0, gps, 2420736, 6.64%, 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, 1, 0.19%
        crtc_commit:244, 1, 100.00%

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

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

  • Boot-time collection information. 부팅 시간 성능 데이터 수집 세션에 관한 정보를 제공합니다.
  • Periodic collection information. 부팅 완료 후 시작된 주기적 성능 수집 세션에 관한 정보를 제공합니다.
  • Boot-time I/O performance report. 시스템 부팅 중에 수집된 성능 데이터를 포함합니다. 이 데이터는 시스템이 종료될 때까지 메모리 내에서 유지되므로 모든 보고서의 데이터가 덤프됩니다.
  • Last N minutes I/O performance report. 보고서 생성 전 마지막 N분 동안 주기적 수집 세션을 통해 수집된 성능 데이터를 포함합니다.
  • Collection duration. 성능 데이터 수집의 총 시간입니다.
  • Number of collections. 단일 보고서에 보고된 총 수집 횟수입니다.

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

  • CPU I/O wait time/percent. 마지막 수집 이후 I/O 작업으로 인해 컨텍스트 전환 또는 대기에 사용된 절대 CPU 시간과 총 CPU 시간의 비율입니다.
  • Number of I/O blocked processes/percent. I/O 대기 중에 차단된 총 프로세스 수 및 마지막 수집 이후 I/O 대기 중에 차단된 프로세스의 비율입니다.
  • Top N Reads. 마지막 수집 이후 디스크에서 대부분의 데이터를 읽어오는 상위 N개 패키지입니다.
    • 각 줄에는 포그라운드 모드와 백그라운드 모드에서 읽은 사용자 ID, 패키지 이름, 총 바이트 수를 비롯해, 모든 포그라운드 모드와 백그라운드 모드로 시스템에서 읽은 바이트 비율과 포그라운드 모드와 백그라운드 모드에서 실행된 fsync 호출 수, 그리고 시스템에서 실행된 모든 포그라운드 모드와 백그라운드 모드 fsync 호출에서의 fsync 호출 비율에 관한 정보가 두 모드를 비교한 상태로 들어 있습니다.
  • Top N Writes. 마지막 수집 이후 디스크에 대부분의 데이터를 작성한 상위 N개 패키지입니다.
    • 각 줄에는 Top N Reads와 유사한 필드가 포함되어 있습니다.
  • Top N I/O waiting UIDs. 가장 많은 I/O 대기 작업이 있는 상위 N개 패키지입니다.
    • 각 최상위 줄에는 I/O 대기 중인 패키지에서 소유한 작업의 개수와 비율, 사용자 ID, 패키지 이름이 포함되어 있습니다.
    • 내부 수준 줄에는 패키지가 소유한 최상위 프로세스의 I/O 대기 정보가 포함되어 있습니다.
  • Top N major page faults. 마지막 수집 이후 가장 주요한 페이지 오류가 발생한 상위 N개 패키지입니다.
    • 각 최상위 행에는 패키지로 인한 주요 페이지 오류의 횟수와 비율, 사용자 ID, 패키지 이름이 포함되어 있습니다.
    • 내부 수준 행에는 패키지가 소유한 상위 프로세스의 주요 페이지 오류 정보가 포함되어 있습니다.
  • Number of major page faults since last collection.
  • Percentage of change in major page faults since last collection.