성능 데이터 수집

Watchdog 기본 서비스는 시스템 부팅 중 초기 초기화 이후 I/O 성능 데이터를 기록합니다. 기본 서비스는 수집된 성능 데이터를 버그 보고서에 덤프합니다. 공급업체는 dumpsys를 통해 기본 서비스에 쿼리하여 수집된 데이터를 덤프하거나 디버깅을 위한 사용자 지정 컬렉션 세션을 시작할 수 있습니다.

데이터 수집 빈도

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

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

성능 데이터 덤프

버그 보고서가 캡처되면 Watchdog 기본 서비스는 수집된 성능 데이터를 버그 보고서에 덤프합니다. 공급업체는 아래 dumpsys 명령을 통해 기본 서비스에 쿼리하여 수집된 성능 데이터를 덤프할 수 있습니다. 보고서에 대한 자세한 내용은 성과 데이터 보고서 이해 섹션을 참조하세요.

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

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

공급업체는 Watchdog 기본 서비스를 사용하여 디버깅 목적으로 성능 데이터를 맞춤 수집할 수 있습니다. 예를 들어 앱이나 서비스의 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 로 제한합니다. 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

덤프시스 도움말

$ 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%

버그 보고서를 캡처할 때, 인수 없이 Watchdog dumpsys 명령을 실행하거나 사용자 정의 컬렉션 세션을 중지할 때 Watchdog 기본 서비스는 위 보고서와 유사한 성능 데이터 보고서를 덤프합니다.

보고서에는 시스템 부팅 중과 보고서 생성 전 마지막 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 NI/O waiting UIDs . I/O 대기 작업이 가장 많은 상위 N개 패키지입니다.
    • 각 최상위 줄에는 사용자 ID, 패키지 이름, I/O를 기다리는 패키지가 소유한 작업의 수 및 백분율이 포함됩니다.
    • 내부 수준 줄에는 패키지가 소유한 상위 프로세스에 대한 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 .