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

Dịch vụ gốc của bộ kiểm soát ghi lại dữ liệu hiệu suất I/O kể từ khi khởi tạo sớm trong khoảng thời gian khởi động hệ thống. Dịch vụ gốc 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 dumpsys để kết xuất 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 bản dựng loại.

  • Trên bản dựng userdebug hoặc eng, Watchdog thu thập dữ liệu hiệu suất một lần mỗi một (1) giây trong khi khởi động hệ thống và cứ 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à cứ hai (2) phút một lần sau khi khởi động xong.

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

Việc phân tích tài nguyên 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 trước khi tạo báo cáo lỗi: Được tạo trong một cửa sổ cuốn chiếu là 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 đã 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 bên dưới lệnh dumpsys để kết xuất dữ liệu hiệu suất đã thu thập. Xem phần Hiể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 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ụ nào đó, nhà cung cấp có thể thực hiện việc thu thập dữ liệu tuỳ chỉnh về hiệu suất để lập hồ sơ hoạt động sử dụng I/O của một danh sách các 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 hoạt động thu thập dữ liệu tuỳ chỉnh về hiệu suất phiên:

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 phiên chưa dừng theo cách thủ công, 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 chỉ giới hạn trong các gói này. Nếu không, giá trị việc thu thập dữ liệu về hiệu suất đượ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 lập hồ sơ là 10 giây, thời gian thu thập tối đa là 1 giờ và giới hạn việc phân tích tài nguyên ở com.google.android.car.kitchensink và Gói 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

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à họ quan tâm, nhà cung cấp phải ngừ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 sẽ dừng thu thập dữ liệu hiệu suất tuỳ chỉnh và chuyển 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ố hoặc dừng một phiên thu thập tuỳ chỉnh, dịch vụ gốc của 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.

Mặt hàng 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 được đánh thức 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ó là 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 đăng 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 còn trong bộ nhớ cho đến khi hệ thống tắt, nên 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 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à dữ liệu liên tục trong bộ nhớ cho đến hệ thống tắt, nên dữ liệu được kết xuất vào mọi 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 nằm trong bộ nhớ cho đến hệ thống tắt, nên dữ liệu được kết xuất vào mọi 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 thời gian qua N phút 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ố nội dung dưới đây . Số liệu thống kê được báo cáo trong mỗi tập hợp là delta kể từ ngoại trừ số liệu thống kê tức thời (ví dụ: không được tổng hợp kể từ khởi động hệ thống).

Mặt hàng 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 đang chờ do 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 quy trình bị chặn đang chờ I/O kể từ lần thu thập trước.
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 của 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à CPU chu kỳ.
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 ở nền trước chế độ so với chế độ nền, tỷ lệ phần trăm byte trên tất cả chế độ nền trước so với chế độ nền trước chế độ nền đọc dữ liệu trong hệ thống, tổng số lệnh gọi fsync đã được thực hiện chế độ nền trước so với chế độ nền sau và tỷ lệ phần trăm lệnh gọi fsync giữa tất cả lệnh gọi fsync ở chế độ nền trước và chế độ nền được thực hiện trong hệ thống.

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 trường tương tự như trường 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ố và tỷ lệ phần trăm tác vụ mà gói sở hữu đang chờ I/O.
  • 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 thuộc sở hữu của gói.
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.