Perfetto

perfetto เป็นเครื่องมือที่ช่วยให้คุณรวบรวมข้อมูลประสิทธิภาพจาก อุปกรณ์ Android ผ่าน Android Debug Bridge (ADB) เรียกใช้เครื่องมือ perfetto โดยใช้คำสั่ง adb shell perfetto ... perfetto ใช้แหล่งข้อมูลต่างๆ เพื่อรวบรวมการติดตามประสิทธิภาพจากอุปกรณ์ เช่น

  • ftrace สำหรับข้อมูลจากเคอร์เนล
  • atrace สำหรับคำอธิบายประกอบในพื้นที่ผู้ใช้ในบริการและแอป
  • heapprofd สำหรับข้อมูลการใช้งานหน่วยความจำเนทีฟของบริการและแอป

หน้านี้อธิบายวิธีเรียก perfetto และกำหนดค่าเพื่อสร้างเอาต์พุตที่ต้องการ ดูข้อมูลเพิ่มเติมได้ที่ perfettoเอกสารประกอบ

ไวยากรณ์

ส่วนนี้อธิบายวิธีใช้ ADB เพื่อเรียก perfetto สำหรับโหมดต่างๆ และสร้างการติดตาม

การเลือกแหล่งข้อมูล

perfetto มี 2 โหมดต่อไปนี้ที่กำหนดแหล่งข้อมูลที่จะใช้ในการบันทึกการติดตาม

  • โหมดสว่าง: เลือกได้เฉพาะแหล่งข้อมูลบางส่วนเท่านั้น โดยเฉพาะ atrace และ ftrace อย่างไรก็ตาม โหมดนี้มีอินเทอร์เฟซที่คล้ายกับ systrace
  • โหมดปกติ: รับการกำหนดค่าในบัฟเฟอร์โปรโตคอลและช่วยให้คุณ ใช้ประโยชน์จากฟังก์ชันการทำงานของ perfetto ได้มากขึ้นโดยใช้แหล่งข้อมูลที่แตกต่าง จาก atrace และ ftrace

ตัวเลือกทั่วไป

ตารางต่อไปนี้แสดงตัวเลือกที่พร้อมใช้งานเมื่อใช้ perfetto ในโหมดใดโหมดหนึ่ง

ตารางที่ 1 รายการตัวเลือกเครื่องมือ Perfetto ทั่วไปที่พร้อมใช้งาน

ตัวเลือก คำอธิบาย
--background |
-d
perfetto จะออกจากอินเทอร์เฟซบรรทัดคำสั่งทันทีและบันทึกการติดตามต่อในเบื้องหลัง
--background-wait | -D คล้ายกับ --background แต่จะรอ (สูงสุด 30 วินาที) ให้แหล่งข้อมูลทั้งหมด เริ่มทำงานก่อนที่จะออก รหัสออกจะเป็น 0 หากได้รับคำยืนยันที่สำเร็จ และเป็นค่าที่ไม่ใช่ 0 ในกรณีอื่นๆ (ข้อผิดพลาดหรือหมดเวลา)
--alert-id รหัสของการแจ้งเตือนที่ทริกเกอร์การติดตามนี้
--config-id รหัสของการกำหนดค่าที่ทริกเกอร์
--config-uid UID ของแอปที่ลงทะเบียนการกำหนดค่า
--subscription-id รหัสของการสมัครใช้บริการที่ทริกเกอร์การติดตามนี้
--out OUT_FILE |
-o OUT_FILE

ระบุเส้นทางที่ต้องการไปยังไฟล์การติดตามเอาต์พุต หรือ - สำหรับ stdout perfetto จะเขียนเอาต์พุตลงในไฟล์ที่อธิบายไว้ใน แฟล็กก่อนหน้า รูปแบบเอาต์พุตจะคอมไพล์ด้วยรูปแบบที่กำหนดไว้ใน AOSP trace.proto

หมายเหตุ: คุณต้องระบุชื่อเส้นทางแบบเต็มของ ไฟล์เอาต์พุต โดยปกติแล้วควรเขียนไฟล์ลงใน /data/misc/perfetto-traces โฟลเดอร์

--upload เมื่อเสร็จสมบูรณ์แล้ว จะส่งการติดตามไปยังแพ็กเกจที่ระบุโดย IncidentReportConfig ข้อความในการกำหนดค่าการติดตามโปรโต
--no-guardrails ปิดใช้การป้องกันการใช้ทรัพยากรมากเกินไปเมื่อเปิดใช้ --upload แฟล็กระหว่างการทดสอบ
--reset-guardrails รีเซ็ตสถานะถาวรของ Guardrails และออกจากการทดสอบ
--rsave-for-bugreport หากมีการติดตามที่มี bugreport_score > 0 ทำงานอยู่ ระบบจะบันทึกการติดตามลงในไฟล์ และแสดงเส้นทางเมื่อเสร็จสิ้น
--query ค้นหาสถานะบริการและพิมพ์เป็นข้อความที่อ่านได้
--query-raw คล้ายกับ --query แต่จะพิมพ์ไบต์ที่เข้ารหัสโปรโตแบบดิบของ tracing_service_state.proto.
--help | -h พิมพ์ข้อความช่วยเหลือสำหรับเครื่องมือ perfetto

โหมดสว่าง

ไวยากรณ์ทั่วไปสำหรับการใช้ perfetto ในโหมดสว่างมีดังนี้

 adb shell perfetto [ --time TIMESPEC ] [ --buffer SIZE ] [ --size SIZE ]
             [ ATRACE_CAT | FTRACE_GROUP/FTRACE_NAME | FTRACE_GROUP/* ]...
             --out FILE

ตารางต่อไปนี้แสดงตัวเลือกที่พร้อมใช้งานเมื่อใช้ perfetto ในโหมดสว่าง

ตารางที่ 2 รายการตัวเลือกเครื่องมือ perfetto ที่พร้อมใช้งานเมื่อใช้โหมดสว่าง

ตัวเลือก คำอธิบาย
--time TIME[s|m|h] |
-t TIME[s|m|h]
ระบุระยะเวลาการติดตามเป็นวินาที นาที หรือชั่วโมง เช่น --time 1m จะระบุระยะเวลาการติดตาม 1 นาที ระยะเวลาเริ่มต้นคือ 10 วินาที
--buffer SIZE[mb|gb] |
-b SIZE[mb|gb]
ระบุขนาดบัฟเฟอร์แบบวงแหวนเป็นเมกะไบต์ (MB) หรือกิกะไบต์ (GB) พารามิเตอร์เริ่มต้นคือ --buffer 32mb
--size SIZE[mb|gb] |
-s SIZE[mb|gb]
ระบุขนาดไฟล์สูงสุดเป็นเมกะไบต์ (MB) หรือกิกะไบต์ (GB) โดย ค่าเริ่มต้น perfetto จะใช้เฉพาะบัฟเฟอร์แบบวงแหวนในหน่วยความจำเท่านั้น
--app | -a ชื่อแอป Android (atrace)

ตัวเลือกเหล่านี้ตามด้วยรายการตัวระบุเหตุการณ์

ตารางที่ 3 รายการตัวระบุเหตุการณ์สำหรับโหมดสว่าง

เหตุการณ์ คำอธิบาย
ATRACE_CAT ระบุหมวดหมู่ atrace ที่คุณต้องการบันทึกการติดตาม เช่น คำสั่งต่อไปนี้จะติดตาม Window Manager โดยใช้ atrace
    adb shell perfetto --out FILE wm
    

หากต้องการบันทึกหมวดหมู่อื่นๆ ให้ดูรายการ นี้ ของ atrace หมวดหมู่

FTRACE_GROUP/FTRACE_NAME ระบุเหตุการณ์ ftrace ที่คุณต้องการบันทึกการติดตาม เช่น คำสั่งต่อไปนี้จะติดตามเหตุการณ์ sched/sched_switch
      adb shell perfetto --out FILE sched/sched_switch
      

โหมดปกติ

ไวยากรณ์ทั่วไปสำหรับการใช้ perfetto ในโหมดปกติมีดังนี้

 adb shell perfetto [ --txt ] --config CONFIG_FILE --out FILE

ตารางต่อไปนี้แสดงตัวเลือกที่พร้อมใช้งานเมื่อใช้ perfetto ในโหมดปกติ

ตารางที่ 4 รายการตัวเลือกเครื่องมือ perfetto ที่พร้อมใช้งานเมื่อใช้โหมดปกติ

ตัวเลือก คำอธิบาย
--config CONFIG_FILE | -c CONFIG_FILE ระบุเส้นทางไปยังไฟล์การกำหนดค่า ในโหมดปกติ การกำหนดค่าบางอย่าง อาจเข้ารหัสในบัฟเฟอร์โปรโตคอลการกำหนดค่า ไฟล์นี้ ต้องเป็นไปตามสคีมาบัฟเฟอร์โปรโตคอลที่กำหนดไว้ใน AOSP trace_config.proto

เลือกและกำหนดค่าแหล่งข้อมูลโดยใช้ DataSourceConfig สมาชิกของ TraceConfig ตามที่ กำหนดไว้ใน AOSP data_source_config.proto

--txt สั่งให้ perfetto แยกวิเคราะห์ไฟล์การกำหนดค่าเป็น pbtxt แฟล็กนี้มีไว้สำหรับการทดสอบในเครื่องเท่านั้น และเราไม่แนะนำให้เปิดใช้สำหรับเวอร์ชันที่ใช้งานจริง

แหล่งข้อมูลที่รองรับ

ส่วนนี้อธิบายแหล่งข้อมูลต่างๆ ที่ perfetto ใช้เพื่อสร้างการติดตาม

ftrace

แหล่งข้อมูล ftrace ช่วยให้ perfetto รับเหตุการณ์จากเคอร์เนลได้

เปิดใช้แหล่งข้อมูลนี้โดยตั้งค่า ftrace_config ใน DataSourceConfig

เหตุการณ์ที่เปิดใช้ได้มีดังนี้

เหตุการณ์เพิ่มเติมอาจพร้อมใช้งาน ทั้งนี้ขึ้นอยู่กับอุปกรณ์ เวอร์ชันระบบปฏิบัติการ หรือเคอร์เนล ดูข้อมูลเพิ่มเติมได้ที่โปรโตการกำหนดค่า

สถิติเกี่ยวกับกระบวนงาน

แหล่งข้อมูลสถิติเกี่ยวกับกระบวนงานช่วยให้คุณรับตัวนับที่โพลเกี่ยวกับระบบและกระบวนการแต่ละอย่างได้

เปิดใช้แหล่งข้อมูลนี้โดยตั้งค่า process_stats_config และ sys_stats_config ใน DataSourceConfig

ข้อมูลที่ perfetto สร้างขึ้นมีดังนี้

เหตุการณ์เพิ่มเติมอาจพร้อมใช้งาน ทั้งนี้ขึ้นอยู่กับอุปกรณ์ เวอร์ชันระบบปฏิบัติการ และเคอร์เนล ดูข้อมูลเพิ่มเติมได้ที่โปรโตการกำหนดค่าสำหรับ sys_stats และ process_stats

heapprofd

heapprofd ช่วยให้คุณสุ่มตัวอย่างสาเหตุของการใช้หน่วยความจำเนทีฟได้

เปิดใช้แหล่งข้อมูลนี้โดยตั้งค่า heapprofd_config ใน DataSourceConfig การตั้งค่านี้จะสร้าง ProfilePackets, ซึ่งรวมถึงเฟรม Java ของ Callstack

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ heapprofd ได้ที่ perfetto.dev

แหล่งที่มาอื่นๆ

แหล่งข้อมูลเพิ่มเติมอาจพร้อมใช้งาน ทั้งนี้ขึ้นอยู่กับอุปกรณ์ เวอร์ชันระบบปฏิบัติการ และเคอร์เนล ดูข้อมูลเพิ่มเติมได้ที่ โปรโตการกำหนดค่าแหล่งข้อมูล

ดูข้อมูลเพิ่มเติมเกี่ยวกับ perfetto ได้ที่ perfetto.dev