เมื่อรวบรวมการติดตามหลายรายการโดยใช้ ProfilingManager การสำรวจการติดตามแต่ละรายการเพื่อค้นหาปัญหาด้านประสิทธิภาพจะทำได้ยาก การวิเคราะห์การติดตามแบบกลุ่ม
ช่วยให้คุณค้นหาชุดข้อมูลของการติดตามพร้อมกันเพื่อทำสิ่งต่อไปนี้ได้
- ระบุการถดถอยของประสิทธิภาพที่พบบ่อย
- คำนวณการกระจายทางสถิติ (เช่น เวลาในการตอบสนองเปอร์เซ็นไทล์ที่ 50, 90, 99)
- ค้นหารูปแบบในหลายๆ ร่องรอย
- ค้นหาร่องรอยที่ผิดปกติเพื่อทำความเข้าใจและแก้ไขข้อบกพร่องด้านประสิทธิภาพ
ส่วนนี้แสดงวิธีใช้ Perfetto Python Batch Trace Processor เพื่อวิเคราะห์เมตริกการเริ่มต้นในชุดการติดตามที่จัดเก็บไว้ในเครื่อง และค้นหาการติดตามที่ผิดปกติเพื่อการวิเคราะห์ที่ละเอียดยิ่งขึ้น
ออกแบบการค้นหา
ขั้นตอนแรกในการวิเคราะห์แบบเป็นกลุ่มคือการสร้างการค้นหา PerfettoSQL
ในส่วนนี้ เราจะแสดงตัวอย่างการค้นหาที่วัดเวลาในการเริ่มต้นแอป
โดยเฉพาะอย่างยิ่ง คุณสามารถวัดระยะเวลาตั้งแต่ activityStart จนถึงเฟรมแรกที่สร้างขึ้น (Choreographer#doFrame Slice รายการแรก) เพื่อวัดเวลาในการตอบสนองเริ่มต้นของแอปที่อยู่ภายใต้การควบคุมของแอป รูปที่ 1 แสดงส่วนที่จะค้นหา
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)
คุณสามารถเรียกใช้การค้นหาภายใน UI ของ Perfetto แล้วใช้ผลลัพธ์การค้นหา เพื่อสร้างแทร็กการแก้ไขข้อบกพร่อง (รูปที่ 2) และแสดงภาพภายใน ไทม์ไลน์ (รูปที่ 3)
ตั้งค่าสภาพแวดล้อม Python
ติดตั้ง Python ในเครื่องของคุณและไลบรารีที่จำเป็น
pip install perfetto pandas plotly
สร้างสคริปต์การวิเคราะห์การติดตามแบบเป็นกลุ่ม
สคริปต์ตัวอย่างต่อไปนี้จะเรียกใช้การค้นหาในหลายร่องรอยโดยใช้ Python BatchTraceProcessor ของ 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()
ทำความเข้าใจสคริปต์
เมื่อเรียกใช้สคริปต์ Python ระบบจะดำเนินการต่อไปนี้
- สคริปต์จะค้นหาในไดเรกทอรีในเครื่องเพื่อหาร่องรอย Perfetto ทั้งหมดที่ลงท้ายด้วย
.perfetto-traceและใช้ร่องรอยเหล่านั้นเป็นร่องรอยต้นทางสำหรับการวิเคราะห์ - โดยจะเรียกใช้การค้นหาการติดตามแบบกลุ่มซึ่งคำนวณชุดย่อยของเวลาเริ่มต้น
ที่สอดคล้องกับเวลาจาก
activityStartสไลซ์การติดตามไปยังเฟรมแรก ที่แอปสร้างขึ้น - โดยจะพล็อตเวลาในการตอบสนองเป็นมิลลิวินาทีโดยใช้ไวโอลินพล็อตเพื่อแสดงภาพ การกระจายเวลาเริ่มต้น
ตีความผลลัพธ์
หลังจากเรียกใช้สคริปต์แล้ว สคริปต์จะสร้างพล็อต ในกรณีนี้ พล็อตแสดงการกระจายแบบ 2 โหมดที่มีจุดสูงสุดที่แตกต่างกัน 2 จุด (รูปที่ 4)
จากนั้นหาความแตกต่างระหว่างประชากร 2 กลุ่ม ซึ่งจะช่วยให้คุณตรวจสอบ การติดตามแต่ละรายการได้อย่างละเอียดมากขึ้น ในตัวอย่างนี้ เราได้ตั้งค่าพล็อตเพื่อให้เมื่อวางเมาส์เหนือจุดข้อมูล (เวลาในการตอบสนอง) คุณจะระบุชื่อไฟล์ของ Trace ได้ จากนั้นคุณจะเปิดการติดตามรายการใดรายการหนึ่งที่เป็นส่วนหนึ่งของกลุ่มที่มีเวลาในการตอบสนองสูงได้
เมื่อเปิดการติดตามจากกลุ่มที่มีเวลาในการตอบสนองสูง (รูปที่ 5) คุณจะเห็นสไลซ์พิเศษชื่อ MyFlaggedFeature ทำงานระหว่างการเริ่มต้น (รูปที่ 6)
ในทางกลับกัน การเลือกการติดตามจากกลุ่มประชากรที่มีเวลาในการตอบสนองต่ำกว่า (จุดสูงสุดทางซ้ายสุด) จะยืนยันว่าไม่มีสไลซ์เดียวกันนั้น (รูปที่ 7) การเปรียบเทียบนี้
แสดงให้เห็นว่าฟีเจอร์แฟล็กที่เฉพาะเจาะจงซึ่งเปิดใช้สำหรับผู้ใช้บางกลุ่มเป็นตัวกระตุ้น
การถดถอย
ตัวอย่างนี้แสดงวิธีหนึ่งในหลายๆ วิธีที่คุณสามารถใช้การวิเคราะห์การติดตามแบบกลุ่ม กรณีการใช้งานอื่นๆ ได้แก่ การดึงสถิติจากฟิลด์เพื่อวัดผลกระทบ การตรวจหาการถดถอย และอื่นๆ