Mengumpulkan data performa

Layanan native Watchdog mencatat data performa I/O sejak init awal selama booting sistem. Layanan native menghapus data performa yang dikumpulkan dalam laporan bug. Vendor dapat membuat kueri layanan native melalui dumpsys untuk membuang data yang dikumpulkan atau memulai sesi pengumpulan kustom untuk proses debug.

Frekuensi pengumpulan data

Frekuensi pengumpulan data performa bervariasi menurut jenis build.

  • Pada debug pengguna atau build ing, Watchdog mengumpulkan data performa sekali setiap satu (1) detik selama booting sistem dan sekali setiap satu (1) menit setelah booting lengkap.
  • Pada build pengguna, Watchdog mengumpulkan data performa setiap 20 detik sekali selama booting sistem dan setiap dua (2) menit setelah booting selesai.

Peristiwa pengumpulan data

Pembuatan profil berbasis sampel dilakukan selama berbagai peristiwa sistem (seperti booting sistem, pengaktifan sistem, dan peralihan pengguna) dan selama jendela N menit terakhir.

  • Peristiwa N menit terakhir sebelum pembuatan laporan bug: Dihasilkan selama periode bergulir 30 menit.
  • Peristiwa waktu booting: Dihasilkan setelah booting.
  • Peristiwa peralihan pengguna: Dibuat setelah pengalihan pengguna dimulai.
  • Peristiwa pengumpulan kustom: Dapat menentukan periode polling, durasi maksimum, dan dapat memfilter berdasarkan paket.

Hapus data performa

Saat laporan bug diambil, layanan native Watchdog akan membuang data performa yang dikumpulkan dalam laporan bug. Vendor dapat membuat kueri layanan native melalui perintah dumpsys di bawah untuk membuang data performa yang dikumpulkan. Lihat bagian Memahami laporan data performa untuk mengetahui detail tentang laporan.

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

Mengumpulkan data performa untuk proses debug

Vendor dapat menggunakan layanan native Watchdog untuk mengumpulkan data performa secara khusus untuk tujuan proses debug. Misalnya, untuk memahami penggunaan I/O aplikasi atau layanan, vendor dapat melakukan pengumpulan data performa kustom yang memprofilkan penggunaan I/O dari daftar paket tertentu atau seluruh sistem.

Mulai sesi pengumpulan kustom

Perintah untuk memulai sesi pengumpulan data performa kustom ditampilkan di bawah ini:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf [--interval <seconds>] [--max_duration <seconds>] [--filter_packages <package_name>,<package_name>,...]
  • --start_perf Memulai sesi pengumpulan data performa kustom.
  • --interval <seconds> Menentukan interval pembuatan profil. Secara default, intervalnya adalah 30 detik.
  • --max_duration <seconds> Menentukan durasi maksimum sesi pengumpulan data performa kustom. Jika sesi tidak dihentikan secara manual, sesi dihentikan dan data yang dikumpulkan akan dihapus setelah durasi ini. Secara default, durasi maksimum adalah 30 menit.
  • --filter_packages <package_name>,<package_name>... Menentukan daftar nama paket yang dipisahkan koma untuk dibuat profilnya. Jika disediakan, pengumpulan data performa dibatasi untuk paket ini. Jika tidak, pengumpulan data performa akan dilakukan untuk semua paket dalam sistem.

Misalnya, perintah di bawah ini memulai pengumpulan data performa kustom dengan interval pembuatan profil selama 10 detik, durasi pengumpulan maksimum 1 jam, dan membatasi pembuatan profil ke paket com.google.android.car.kitchensink dan 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

Menghentikan dan membuang sesi pengumpulan kustom

Setelah mencatat penggunaan I/O aplikasi atau layanan yang diminati, vendor harus menghentikan sesi pengumpulan data performa kustom untuk membuang data yang dikumpulkan. Perintah ini menghentikan pengumpulan data performa kustom dan membuang data yang dikumpulkan ke /tmp/carwatchdog_dump.txt:

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

Bantuan Dumpsys

Untuk mendapatkan bantuan dumpsys:

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

Dump ke format proto

Secara opsional, data dumpsys dapat dibuat dalam format proto:

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

Memahami laporan data performa

Untuk mempelajari lebih lanjut, lihat contoh laporan data performa berikut:

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%

Saat mengambil laporan bug, menjalankan perintah Watchdog dumpsys tanpa argumen apa pun atau menghentikan sesi pengumpulan kustom, layanan native Watchdog akan mengeluarkan laporan data performa yang mirip dengan laporan di atas.

Laporan ini berisi data yang dikumpulkan selama booting sistem dan N menit terakhir sebelum pembuatan laporan.

Item Deskripsi
Informasi pengumpulan waktu booting Memberikan informasi tentang sesi pengumpulan data performa waktu booting.
Informasi pengumpulan data bangun tidur Memberikan informasi tentang sesi pengumpulan data performa aktif saat sistem aktif dari penangguhan.
Informasi pengumpulan peralihan pengguna Memberikan informasi tentang sesi pengumpulan data performa peralihan pengguna saat terjadi peralihan pengguna.
Informasi pengumpulan berkala Memberikan informasi tentang sesi pengumpulan performa berkala yang dimulai setelah booting lengkap.
Laporan performa waktu booting Berisi data performa yang dikumpulkan selama booting sistem. Data ini tetap tersimpan di memori hingga sistem dimatikan, sehingga data dibuang di semua laporan.
Laporan performa bangun Berisi data performa yang dikumpulkan selama bangun. Data ini tersimpan dalam memori hingga sistem dimatikan, sehingga data dibuang di semua laporan.
Laporan performa peralihan pengguna Berisi data performa yang dikumpulkan selama peralihan pengguna. Data ini tetap tersimpan di memori hingga sistem dimatikan, sehingga data dibuang di semua laporan.
Laporan performa I/O N menit terakhir Berisi data performa yang dikumpulkan (berdasarkan sesi pengumpulan berkala) selama N menit terakhir sebelum pembuatan laporan.
Durasi koleksi Total durasi pengumpulan data performa.
Jumlah koleksi Jumlah total koleksi yang dilaporkan dalam satu laporan.

Setiap kumpulan yang dilaporkan dalam laporan dapat berisi semua atau beberapa bagian di bawah. Statistik yang dilaporkan di setiap koleksi adalah delta sejak koleksi terakhir kecuali statistik yang instan (misalnya, tidak digabungkan sejak sistem melakukan booting).

Item Deskripsi
Waktu tunggu I/O CPU/persen Waktu CPU absolut dan persentase total waktu CPU yang dihabiskan untuk pengalihan konteks atau waktu tunggu karena operasi I/O sejak pengumpulan terakhir.
Total waktu CPU Total waktu CPU dalam milidetik.
Total waktu CPU tidak ada aktivitas Total waktu CPU yang dihabiskan dalam tidak ada aktivitas.
Waktu tunggu I/O CPU Total waktu yang dihabiskan CPU untuk menunggu operasi I/O.
Jumlah tombol konteks Jumlah peralihan CPU dari satu proses atau thread ke proses atau thread lainnya.
Jumlah proses/persen I/O yang diblokir Jumlah total proses yang diblokir menunggu I/O dan persentase proses yang diblokir menunggu I/O sejak pengumpulan terakhir.
N Waktu CPU Teratas

Paket N teratas yang mengonsumsi paling banyak waktu CPU sejak pengumpulan terakhir:

  • Setiap baris level teratas berisi ID pengguna, nama paket, waktu CPU, persentase total waktu CPU, dan siklus CPU.
  • Baris level dalam berisi perintah, waktu CPU, persentase waktu CPU UID, dan siklus CPU.
Pembacaan I/O Penyimpanan N Teratas

Paket N teratas yang membaca data paling banyak dari disk sejak pengumpulan terakhir.

Setiap baris berisi ID pengguna, nama paket, jumlah total byte yang dibaca dalam mode latar depan versus mode latar belakang, persentase byte di semua mode latar depan versus pembacaan mode latar belakang dalam sistem, jumlah total panggilan fsync yang dilakukan dalam mode latar depan versus mode latar belakang, serta persentase panggilan fsync di semua panggilan fsync mode latar depan versus mode latar belakang yang dilakukan dalam sistem.

Penulisan I/O Storage N Teratas Paket N teratas yang menulis sebagian besar data ke {i>disk<i} sejak pengumpulan terakhir. Setiap baris berisi kolom yang mirip dengan Top N Reads.
UID menunggu N I/O teratas

Paket N teratas dengan tugas menunggu I/O terbanyak.

  • Setiap baris tingkat teratas berisi ID pengguna, nama paket, jumlah, dan persentase tugas yang dimiliki oleh paket yang menunggu I/O.
  • Garis dalam berisi informasi tunggu I/O untuk proses teratas yang dimiliki oleh paket.
Kesalahan halaman utama N teratas Paket N teratas dengan kesalahan halaman paling besar sejak koleksi terakhir.