Sau khi bạn thu thập nhiều dấu vết bằng ProfilingManager, việc khám phá từng dấu vết để tìm ra các vấn đề về hiệu suất sẽ trở nên không thực tế. Tính năng phân tích dấu vết hàng loạt cho phép bạn truy vấn đồng thời một tập dữ liệu dấu vết để:
- Xác định các trường hợp hiệu suất giảm sút thường gặp.
- Tính toán các hàm phân phối thống kê (ví dụ: độ trễ P50, P90, P99).
- Tìm các mẫu trên nhiều dấu vết.
- Tìm các dấu vết bất thường để hiểu và gỡ lỗi các vấn đề về hiệu suất.
Phần này minh hoạ cách sử dụng Perfetto Python Batch Trace Processor để phân tích các chỉ số khởi động trên một tập hợp dấu vết được lưu trữ cục bộ và xác định các dấu vết ngoại lệ để phân tích sâu hơn.
Thiết kế truy vấn
Bước đầu tiên để thực hiện phân tích hàng loạt là tạo một truy vấn PerfettoSQL.
Trong phần này, chúng tôi trình bày một ví dụ về truy vấn đo độ trễ khi khởi động ứng dụng.
Cụ thể, bạn có thể đo lường khoảng thời gian từ activityStart đến khung hình đầu tiên được tạo (lần xuất hiện đầu tiên của lát Choreographer#doFrame) để đo lường độ trễ khởi động ứng dụng nằm trong tầm kiểm soát của ứng dụng. Hình 1 cho thấy phần cần truy vấn.
CREATE OR REPLACE PERFETTO FUNCTION find_slices(pattern STRING) RETURNS
TABLE (name STRING, ts LONG, dur LONG) AS
SELECT name,ts,dur FROM slice WHERE name GLOB $pattern;
CREATE OR REPLACE PERFETTO FUNCTION generate_start_to_end_slices(startSlicePattern STRING, endSlicePattern STRING, inclusive BOOL) RETURNS
TABLE(name STRING, ts LONG, dur LONG) AS
SELECT name, ts, MIN(startToEndDur) as dur
FROM
(SELECT S.name as name, S.ts as ts, E.ts + IIF($inclusive, E.dur, 0) - S.ts as startToEndDur
FROM find_slices($startSlicePattern) as S CROSS JOIN find_slices($endSlicePattern) as E
WHERE startToEndDur > 0)
GROUP BY name, ts;
SELECT ts,name,dur from generate_start_to_end_slices('activityStart','*Choreographer#doFrame [0-9]*', true)
Bạn có thể thực thi truy vấn trong Giao diện người dùng Perfetto, sau đó sử dụng kết quả truy vấn để tạo một bản gỡ lỗi (Hình 2) và trực quan hoá bản gỡ lỗi đó trong dòng thời gian (Hình 3).
Thiết lập môi trường Python
Cài đặt Python trên máy cục bộ và các thư viện bắt buộc của Python:
pip install perfetto pandas plotly
Tạo tập lệnh phân tích dấu vết hàng loạt
Tập lệnh mẫu sau đây sẽ thực thi truy vấn trong nhiều dấu vết bằng cách sử dụng BatchTraceProcessor của Python trong Perfetto.
from perfetto.batch_trace_processor import BatchTraceProcessor
import glob
import plotly.express as px
traces = glob.glob('*.perfetto-trace')
if __name__ == '__main__':
with BatchTraceProcessor(traces) as btp:
query = """
CREATE OR REPLACE PERFETTO FUNCTION find_slices(pattern STRING) RETURNS
TABLE (name STRING, ts LONG, dur LONG) AS
SELECT name,ts,dur FROM slice WHERE name GLOB $pattern;
CREATE OR REPLACE PERFETTO FUNCTION generate_start_to_end_slices(startSlicePattern STRING, endSlicePattern STRING, inclusive BOOL) RETURNS
TABLE(name STRING, ts LONG, dur LONG) AS
SELECT name, ts, MIN(startToEndDur) as dur
FROM
(SELECT S.name as name, S.ts as ts, E.ts + IIF($inclusive, E.dur, 0) - S.ts as startToEndDur
FROM find_slices($startSlicePattern) as S CROSS JOIN find_slices($endSlicePattern) as E
WHERE startToEndDur > 0)
GROUP BY name, ts;
SELECT ts,name,dur / 1000000 as dur_ms from generate_start_to_end_slices('activityStart','*Choreographer#doFrame [0-9]*', true)
"""
df = btp.query_and_flatten(query)
violin = px.violin(df, x='dur_ms', hover_data='_path', title='startup time', points='all')
violin.show()
Tìm hiểu về tập lệnh
Khi bạn chạy tập lệnh Python, tập lệnh này sẽ thực hiện các thao tác sau:
- Tập lệnh này tìm kiếm trong thư mục cục bộ của bạn tất cả các dấu vết Perfetto có hậu tố
.perfetto-tracevà sử dụng chúng làm dấu vết nguồn để phân tích. - Thao tác này chạy một truy vấn theo dõi hàng loạt để tính toán tập hợp con của thời gian khởi động tương ứng với thời gian từ lát theo dõi
activityStartđến khung hình đầu tiên do ứng dụng của bạn tạo. - Thao tác này vẽ độ trễ tính bằng mili giây bằng cách sử dụng biểu đồ vĩ cầm để trực quan hoá sự phân phối thời gian khởi động.
Diễn giải kết quả
Sau khi bạn thực thi tập lệnh, tập lệnh sẽ tạo ra một biểu đồ. Trong trường hợp này, biểu đồ cho thấy một phân phối hai đỉnh với hai đỉnh riêng biệt (Hình 4).
Tiếp theo, hãy tìm sự khác biệt giữa hai nhóm dân số. Điều này giúp bạn kiểm tra từng dấu vết một cách chi tiết hơn. Trong ví dụ này, biểu đồ được thiết lập sao cho khi di chuột lên các điểm dữ liệu (độ trễ), bạn có thể xác định tên tệp theo dõi. Sau đó, bạn có thể mở một trong các dấu vết thuộc nhóm có độ trễ cao.
Khi mở một dấu vết từ nhóm có độ trễ cao (Hình 5), bạn sẽ thấy một lát cắt bổ sung có tên là MyFlaggedFeature đang chạy trong quá trình khởi động (Hình 6).
Ngược lại, việc chọn một dấu vết từ nhóm có độ trễ thấp hơn (đỉnh bên trái) xác nhận rằng không có chính lát cắt đó (Hình 7). Phép so sánh này cho thấy một cờ tính năng cụ thể (được bật cho một nhóm nhỏ người dùng) sẽ kích hoạt hồi quy.
Ví dụ này minh hoạ một trong nhiều cách bạn có thể sử dụng tính năng phân tích dấu vết hàng loạt. Các trường hợp sử dụng khác bao gồm trích xuất số liệu thống kê từ trường để đánh giá tác động, phát hiện các hồi quy, v.v.