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

Dịch vụ gốc của cơ quan giám sát ghi lại dữ liệu hiệu suất I/O kể từ khi bắt đầu sớm trong quá trình khởi động hệ thống. Dịch vụ gốc sẽ đưa dữ liệu hiệu suất được thu thập vào báo cáo lỗi. Các 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 phiên thu thập tùy 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 thay đổi tùy 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ỗi một (1) giây trong quá trình khởi động hệ thống và 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 cứ sau 20 giây một lần trong quá trình khởi động hệ thống và hai (2) phút một lần sau khi quá trình khởi động hoàn tất.

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

Khi một báo cáo lỗi được ghi lại, dịch vụ gốc của Watchdog sẽ đưa 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. Xem phần Tìm hiểu báo cáo dữ liệu hiệu suất để biết 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

Các nhà cung cấp có thể sử dụng dịch vụ gốc của Watchdog để thu thập dữ liệu hiệu suất tùy chỉnh nhằm 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 thu thập dữ liệu hiệu suất tùy chỉnh để lập hồ sơ sử dụng I/O của danh sách gói cụ thể hoặc toàn bộ hệ thống.

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

Hiển thị bên dưới là lệnh để bắt đầu phiên thu thập dữ liệu hiệu suất tùy 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 phiên thu thập dữ liệu hiệu suất tùy chỉnh.
  • --interval <seconds> . Chỉ định khoảng thời gian định hình. 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 tùy chỉnh. Nếu phiên không bị dừng theo cách thủ công thì phiên sẽ bị dừng 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 profile. Khi được cung cấp, việc thu thập dữ liệu hiệu suất được giới hạn ở các gói này. Mặt khác, 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 thu thập dữ liệu hiệu suất tùy chỉnh với khoảng thời gian lập hồ sơ là 10 seconds , thời lượng thu thập tối đa là 1 hour và giới hạn việc lập hồ sơ ở com.google.android.car.kitchensinkcom.google.android.apps.maps 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 tùy chỉnh

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

Lệnh sau dừng việc thu thập dữ liệu hiệu suất tùy 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 của Dumpsys

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

Hiểu báo cáo dữ liệu hiệu suất

Dưới đây là báo cáo dữ liệu hiệu suất mẫu:

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

Khi ghi lại một báo cáo lỗi, chạy lệnh dumpsys của Watchdog mà không có bất kỳ đối số nào hoặc dừng phiên thu thập tùy chỉnh, dịch vụ gốc Watchdog sẽ đưa ra 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 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.

  • Boot-time collection information . Cung cấp thông tin về phiên thu thập dữ liệu hiệu suất thời gian khởi động.
  • Periodic collection information . Cung cấp thông tin về phiên thu thập hiệu suất định kỳ bắt đầu sau khi hoàn tất khởi động.
  • Boot-time I/O performance report . 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 tồn tại liên tục trong bộ nhớ cho đến khi hệ thống tắt, do đó dữ liệu sẽ được lưu trữ trên tất cả các báo cáo.
  • Last N minutes I/O performance report . 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.
  • Collection duration . Tổng thời lượng thu thập dữ liệu hiệu suất.
  • Number of collections . 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 cuối cùng ngoại trừ số liệu thống kê tức thời (ví dụ: không được tổng hợp kể từ khi khởi động hệ thống).

  • CPU I/O wait time/percent . Thời gian CPU tuyệt đối và tỷ lệ phần trăm của tổng thời gian CPU dành cho chuyển đổi ngữ cảnh hoặc chờ đợi do các hoạt động I/O kể từ lần thu thập cuối cùng.
  • Number of I/O blocked processes/percent . Tổng số quy trình bị chặn đang chờ I/O và phần trăm quy trình bị chặn đang chờ I/O kể từ lần thu thập cuối cùng.
  • Top N Reads . N gói hàng đầu đọc hầu hết dữ liệu từ đĩa kể từ bộ sưu tập cuối cùng.
    • Mỗi dòng chứa ID 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 byte trên tất cả các lần đọc ở chế độ nền trước so với chế độ nền 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, và tỷ lệ phần trăm các lệnh gọi fsync trên tất cả các lệnh gọi fsync ở chế độ nền trước so với chế độ nền được thực hiện trong hệ thống.
  • Top N Writes . N gói hàng đầu đã ghi nhiều dữ liệu nhất vào đĩa kể từ bộ sưu tập cuối cùng.
    • Mỗi dòng chứa các trường tương tự như trường Top N Reads .
  • Top NI/O waiting UIDs . N gói hàng đầu có nhiều tác vụ chờ I/O nhất.
    • Mỗi dòng cấp cao nhất chứa ID người dùng, tên gói, số lượng và phần trăm tác vụ thuộc sở hữu của gói đ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.
  • Top N major page faults . N gói hàng đầu có nhiều lỗi trang nghiêm trọng nhất kể từ bộ sưu tập trước.
    • Mỗi dòng cấp cao nhất chứa ID người dùng, tên gói, số lượng và tỷ lệ phần trăm lỗi trang chính do gói đó gây ra.
    • Các dòng cấp bên trong chứa thông tin về lỗi trang chính của các quy trình hàng đầu thuộc sở hữu của gói.
  • Number of major page faults since last collection .
  • Percentage of change in major page faults since last collection .