Thu thập dữ liệu hiệu suất

Dịch vụ gốc của bộ theo dõi ghi lại dữ liệu hiệu suất I/O kể từ khởi động sớm trong quá trình khởi động hệ thống. Dịch vụ gốc sẽ kết xuất dữ liệu hiệu suất đã thu thập trong báo cáo lỗi. Nhà cung cấp có thể truy vấn dịch vụ gốc thông qua dumpsys để kết xuất dữ liệu đã thu thập hoặc bắt đầu một phiên thu thập tuỳ chỉnh để gỡ lỗi.

Tần suất thu thập dữ liệu

Tần suất thu thập dữ liệu hiệu suất sẽ khác nhau tuỳ theo loại bản dựng.

  • Trên các bản dựng userdebug hoặc eng, Watchdog thu thập dữ liệu hiệu suất một lần (1) giây trong khi khởi động hệ thống và sau mỗi một (1) phút sau khi khởi động xong.
  • Trên các bản dựng của người dùng, Watchdog thu thập dữ liệu hiệu suất 20 giây một lần trong khi khởi động hệ thống và 2 (2) phút một lần sau khi khởi động xong.

Sự kiện thu thập dữ liệu

Quá trình phân tích dựa trên mẫu được thực hiện trong các sự kiện hệ thống khác nhau (chẳng hạn như khởi động hệ thống, đánh thức hệ thống và chuyển đổi người dùng) và trong khoảng thời gian N phút vừa qua.

  • Sự kiện N phút trước khi tạo báo cáo lỗi: Được tạo trong khoảng thời gian cố định 30 phút.
  • Sự kiện thời gian khởi động: Được tạo sau khi khởi động.
  • Sự kiện chuyển đổi người dùng: Được tạo sau khi một lượt chuyển đổi của người dùng bắt đầu.
  • Sự kiện thu thập tuỳ chỉnh: Có thể chỉ định thời gian thăm dò ý kiến, thời lượng tối đa và có thể lọc theo gói.

Kết xuất dữ liệu hiệu suất

Khi ghi lại một báo cáo lỗi, dịch vụ gốc của Bộ theo dõi sẽ kết xuất dữ liệu hiệu suất đã thu thập vào báo cáo lỗi. Nhà cung cấp có thể truy vấn dịch vụ gốc thông qua lệnh dumpsys bên dưới để kết xuất dữ liệu hiệu suất đã thu thập. Hãy xem phần Tìm hiểu về báo cáo dữ liệu hiệu suất để biết thông tin chi tiết về báo cáo.

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

Thu thập dữ liệu hiệu suất để gỡ lỗi

Nhà cung cấp có thể sử dụng dịch vụ gốc của Watchdog để tuỳ chỉnh thu thập dữ liệu hiệu suất cho mục đích gỡ lỗi. Ví dụ: để hiểu cách sử dụng I/O của một ứng dụng hoặc dịch vụ, nhà cung cấp có thể thực hiện việc thu thập dữ liệu hiệu suất tuỳ chỉnh, trong đó lập hồ sơ hoạt động sử dụng I/O của một danh sách gói cụ thể hoặc toàn bộ hệ thống.

Bắt đầu phiên thu thập tuỳ chỉnh

Dưới đây là lệnh để bắt đầu một phiên thu thập dữ liệu về hiệu suất tuỳ chỉnh:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf [--interval <seconds>] [--max_duration <seconds>] [--filter_packages <package_name>,<package_name>,...]
  • --start_perf Bắt đầu một phiên thu thập dữ liệu hiệu suất tuỳ chỉnh.
  • --interval <seconds> Chỉ định khoảng thời gian lập hồ sơ. Theo mặc định, khoảng thời gian là 30 giây.
  • --max_duration <seconds> Chỉ định thời lượng tối đa của phiên thu thập dữ liệu hiệu suất tuỳ chỉnh. Nếu bạn không dừng theo cách thủ công, thì phiên đó sẽ dừng lại và dữ liệu đã thu thập sẽ bị loại bỏ sau khoảng thời gian này. Theo mặc định, thời lượng tối đa là 30 phút.
  • --filter_packages <package_name>,<package_name>... Chỉ định danh sách tên gói được phân tách bằng dấu phẩy cho hồ sơ. Khi được cung cấp, việc thu thập dữ liệu hiệu suất sẽ chỉ giới hạn ở các gói này. Nếu không, việc thu thập dữ liệu hiệu suất sẽ được thực hiện cho tất cả các gói trong hệ thống.

Ví dụ: lệnh bên dưới bắt đầu một quá trình thu thập dữ liệu hiệu suất tuỳ chỉnh với khoảng thời gian phân tích tài nguyên là 10 giây, thời lượng thu thập tối đa là 1 giờ, đồng thời giới hạn việc phân tích tài nguyên ở các gói 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

Dừng và kết xuất phiên thu thập tuỳ chỉnh

Sau khi ghi lại hoạt động sử dụng I/O của một ứng dụng hoặc dịch vụ mà bạn quan tâm, nhà cung cấp nên dừng phiên thu thập dữ liệu hiệu suất tuỳ chỉnh để kết xuất dữ liệu đã thu thập. Lệnh này dừng quá trình thu thập dữ liệu hiệu suất tuỳ chỉnh và kết xuất dữ liệu đã thu thập vào /tmp/carwatchdog_dump.txt:

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

Trợ giúp về Dumpsys

Cách nhận trợ giúp dumpsys:

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

Kết xuất sang định dạng proto

Bạn có thể kết xuất dữ liệu dumpsys ở định dạng proto nếu muốn:

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

Tìm hiểu báo cáo dữ liệu hiệu suất

Để tìm hiểu thêm, hãy xem báo cáo dữ liệu hiệu suất mẫu sau đây:

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%

Khi ghi lại báo cáo lỗi, chạy lệnh Watchdog dumpsys mà không có đối số nào hoặc dừng một phiên thu thập tuỳ chỉnh, dịch vụ gốc Watchdog kết xuất một báo cáo dữ liệu hiệu suất tương tự như báo cáo ở trên.

Báo cáo này chứa dữ liệu được thu thập trong quá trình khởi động hệ thống và N phút cuối cùng trước khi tạo báo cáo.

Tên Nội dung mô tả
Thông tin về tính năng thu thập thông tin vào thời gian khởi động Cung cấp thông tin về phiên thu thập dữ liệu hiệu suất tại thời gian khởi động.
Thông tin về bộ sưu tập đánh thức Cung cấp thông tin về phiên thu thập dữ liệu hiệu suất đánh thức khi hệ thống thức dậy sau khi tạm ngưng.
Thông tin về việc thu thập lượt chuyển đổi người dùng Cung cấp thông tin về phiên thu thập dữ liệu hiệu suất chuyển đổi người dùng khi có một chuyển đổi người dùng.
Thông tin về hoạt động thu thập định kỳ Cung cấp thông tin về phiên thu thập hiệu suất định kỳ bắt đầu sau khi khởi động xong.
Báo cáo hiệu suất thời gian khởi động Chứa dữ liệu hiệu suất được thu thập trong quá trình khởi động hệ thống. Dữ liệu này vẫn tồn tại trong bộ nhớ cho đến khi hệ thống tắt, do đó, dữ liệu sẽ được kết xuất vào mọi báo cáo.
Báo cáo hiệu suất sau khi bật Chứa dữ liệu hiệu suất được thu thập trong khi đánh thức. Dữ liệu này là ổn định trong bộ nhớ cho đến khi hệ thống tắt, vì vậy, dữ liệu sẽ được kết xuất trên tất cả báo cáo.
Báo cáo hiệu suất chuyển đổi người dùng Chứa dữ liệu hiệu suất được thu thập trong quá trình chuyển đổi người dùng. Dữ liệu này vẫn tồn tại trong bộ nhớ cho đến khi hệ thống tắt, do đó, dữ liệu sẽ được kết xuất vào tất cả báo cáo.
Báo cáo hiệu suất I/O trong N phút vừa qua Chứa dữ liệu hiệu suất được thu thập (theo phiên thu thập định kỳ) trong N phút cuối cùng trước khi tạo báo cáo.
Thời lượng thu thập Tổng thời lượng của quá trình thu thập dữ liệu hiệu suất.
Số lượng bộ sưu tập Tổng số bộ sưu tập được báo cáo trong một báo cáo.

Mỗi bộ sưu tập được báo cáo trong báo cáo có thể chứa tất cả hoặc một số phần dưới đây. Số liệu thống kê được báo cáo trong mỗi bộ sưu tập là delta kể từ bộ sưu tập gần nhất, ngoại trừ số liệu thống kê tức thì (ví dụ: không được tổng hợp kể từ khi hệ thống khởi động).

Tên Nội dung mô tả
Thời gian/phần trăm chờ I/O của CPU Thời gian tuyệt đối của CPU và tỷ lệ phần trăm tổng thời gian CPU dành cho việc chuyển đổi ngữ cảnh hoặc chờ các thao tác I/O kể từ lần thu thập gần nhất.
Tổng thời gian của CPU Tổng thời gian của CPU tính bằng mili giây.
Tổng thời gian CPU ở trạng thái rảnh Tổng thời gian CPU ở trạng thái rảnh.
Thời gian chờ I/O CPU Tổng thời gian CPU chờ các thao tác I/O.
Số lượng nút chuyển đổi ngữ cảnh Số lần chuyển đổi CPU từ một quy trình hoặc luồng sang một quy trình hoặc luồng khác.
Số phần trăm quy trình I/O bị chặn Tổng số quy trình bị chặn đang chờ I/O và tỷ lệ phần trăm các quy trình bị chặn đang chờ I/O kể từ lần thu thập gần nhất.
Thời gian N CPU hàng đầu

N gói hàng đầu tiêu thụ nhiều thời gian CPU nhất kể từ bộ sưu tập gần đây nhất:

  • Mỗi dòng cấp cao nhất chứa mã nhận dạng người dùng, tên gói, thời gian của CPU, tỷ lệ phần trăm tổng thời gian của CPU và chu kỳ của CPU.
  • Các dòng cấp bên trong chứa lệnh, thời gian của CPU, tỷ lệ phần trăm thời gian của CPU UID và chu kỳ của CPU.
Chỉ số I/O bộ nhớ N hàng đầu

N gói hàng đầu đọc nhiều dữ liệu nhất từ ổ đĩa kể từ lần thu thập gần đây nhất.

Mỗi dòng chứa mã nhận dạng người dùng, tên gói, tổng số byte được đọc ở chế độ nền trước so với chế độ nền, tỷ lệ phần trăm số byte được đọc ở chế độ nền trước so với chế độ nền sau được đọc trong hệ thống, tổng số fsync lệnh gọi được thực hiện ở chế độ nền trước so với chế độ nền và tỷ lệ phần trăm fsync lệnh gọi trên mọi lệnh gọi ở chế độ nền trước so với chế độ nền fsync.

Số lượt ghi I/O bộ nhớ hàng đầu N gói hàng đầu đã ghi nhiều dữ liệu nhất vào ổ đĩa kể từ lần thu thập gần đây nhất. Mỗi dòng chứa các trường tương tự như các trường của N lượt đọc hàng đầu.
Các UID đang chờ N I/O hàng đầu

N gói hàng đầu có nhiều thao tác chờ I/O nhất.

  • Mỗi dòng cấp cao nhất chứa mã nhận dạng người dùng, tên gói, số lượng và tỷ lệ phần trăm nhiệm vụ do gói đang chờ I/O sở hữu.
  • Các dòng cấp bên trong chứa thông tin chờ I/O cho các quy trình hàng đầu mà gói sở hữu.
Lỗi N nghiêm trọng hàng đầu trên trang N gói hàng đầu có các lỗi trang nghiêm trọng nhất kể từ bộ sưu tập gần đây nhất.