หน้านี้มีวิธีการโดยละเอียดสำหรับการรวบรวม Perfetto traces เพื่อใช้กับ Wattson และสำหรับการ วิเคราะห์ข้อมูลพลังงานที่ได้ใน UI ของ Perfetto
แม้ว่าจะมีหลายวิธีในการรวบรวมการติดตาม Perfetto แต่วิธีการในหน้านี้มีข้อกำหนดและเวิร์กโฟลว์ที่เฉพาะเจาะจงสำหรับ การสร้างการติดตามที่เข้ากันได้กับ Wattson
ข้อกำหนดขั้นต่ำของบิลด์
หากต้องการยืนยันว่า Wattson มีข้อมูลเมตาที่จำเป็นต่อการทำงานอย่างถูกต้อง คุณต้อง รวบรวมการติดตามจากอุปกรณ์ที่ใช้บิลด์ล่าสุด เวอร์ชันบิลด์ขั้นต่ำ สำหรับการประมาณกำลัง CPU และ GPU จะแตกต่างกันไปตามอุปกรณ์
อุปกรณ์ | ข้อกำหนดขั้นต่ำของบิลด์: การประมาณ CPU | ข้อกำหนดขั้นต่ำของบิลด์: การประมาณ GPU |
---|---|---|
Pixel Watch 2 | ไม่มีข้อกำหนดขั้นต่ำในการสร้าง | ไม่รองรับ |
Pixel Watch 3 | 25Q2 | ไม่รองรับ |
Pixel 6 | ไม่มีข้อกำหนดขั้นต่ำในการสร้าง | 25Q2 |
Pixel 9 | 25Q2 | ไม่รองรับ |
รวบรวมการติดตาม Perfetto จากบรรทัดคำสั่ง
ส่วนนี้จะแสดงตัวอย่างเวิร์กโฟลว์สำหรับการรวบรวม ร่องรอย Perfetto เพื่อใช้กับ Wattson คำสั่งทั้งหมดที่แสดงในขั้นตอนต่อไปนี้ มีไว้เพื่อออกคำสั่งจากโฮสต์ Android Debug Bridge (adb)
กำหนดค่าและเริ่มการติดตามโดยสร้างไฟล์การกำหนดค่า Perfetto ในอุปกรณ์ ดูตัวอย่างการกำหนดค่าได้ที่
wattson.cfg
ในโครงสร้างแหล่งที่มาการกำหนดค่าต้องมีเหตุการณ์การติดตามต่อไปนี้
# Polls CPU freq/idle state at the start of trace data_sources: { config { name: "linux.sys_stats" sys_stats_config { # Large period so polling doesn't happen continuously # Intent is just to poll once upfront cpufreq_period_ms: 100000000 cpuidle_period_ms: 100000000 } } } data_sources: { config { name: "linux.ftrace" ftrace_config { ftrace_events: "devfreq/devfreq_frequency" ftrace_events: "cpuhp/cpuhp_enter" ftrace_events: "cpuhp/cpuhp_exit" ftrace_events: "cpuhp/cpuhp_multi_enter" ftrace_events: "power/cpu_frequency" ftrace_events: "power/cpu_idle" ftrace_events: "power/suspend_resume" } } }
หากต้องการเปิดใช้การประมาณการใช้พลังงานของแคช L3 ให้เปิดใช้เหตุการณ์
fttrace/print
adb shell perfetto --txt -c /data/misc/perfetto-configs/wattson.cfg --background-wait -o /data/misc/perfetto-traces/trace # Optional adb shell simpleperf stat -a -e arm_dsu_0/l3d_cache/,arm_dsu_0/bus_access/ --interval 10
(ไม่บังคับ) ตั้งค่าจุดเริ่มต้นของหน้าต่าง Wattson ซึ่งเป็นเครื่องหมายที่ฝังอยู่ใน การติดตาม Perfetto ซึ่งระบุจุดเริ่มต้นของการบันทึก เครื่องหมายนี้จะเพิ่ม ความแม่นยำในการวัดของ Wattson
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
เรียกใช้เวิร์กโหลดที่สนใจ
(ไม่บังคับ) เปิดใช้
ftrace/print
เหตุการณ์การติดตามเพื่อตั้งค่า จุดสิ้นสุดของช่วงเวลาของ Wattson:# Optional adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
ล้างบัฟเฟอร์การติดตามและดึงไฟล์การติดตาม Perfetto โดยทำดังนี้
adb shell killall -w perfetto adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
รวบรวมการติดตาม Perfetto โดยใช้ UI ของ Perfetto
หากต้องการรวบรวมการติดตามโดยใช้ UI ของ Perfetto คุณต้องเปิดใช้การตั้งค่าที่เฉพาะเจาะจงสำหรับ Wattson เมื่อบันทึกการติดตามใหม่ใน UI ของ Perfetto ให้เปิดใช้ปุ่มสลับรายละเอียดการจัดกำหนดการและความถี่ของ CPU และสถานะว่าง
รูปที่ 1 รายละเอียดการกำหนดเวลาและสวิตช์ความถี่ CPU และสถานะว่าง
สำหรับอุปกรณ์ Pixel 9 ให้เลือกช่องทำเครื่องหมาย devfreq ในการตั้งค่า Ftrace เพื่อเปิดใช้การรวบรวมความถี่ของอุปกรณ์
รูปที่ 2 เปิดใช้ความถี่ของอุปกรณ์
ใช้ UI ของ Wattson
Perfetto ช่วยให้คุณวิเคราะห์ค่าประมาณกำลังไฟฟ้าของ Wattson ได้โดยเลือกช่วงเวลาเพื่อดูสถิติต่อราง หรือเปิดใช้การกำหนดค่าการติดตามที่เฉพาะเจาะจงเพื่อระบุแหล่งที่มาของการใช้พลังงานที่ระดับเธรด กระบวนการ หรือแพ็กเกจ
ดูรายละเอียดต่อราง
วิธีโต้ตอบกับ Wattson ใน Perfetto
เปิดการติดตามใน Perfetto
หากอุปกรณ์ของคุณรองรับ Wattson ระบบจะแสดงรายการการติดตามของ Wattson โดยอัตโนมัติ
รูปที่ 3 ดูการติดตามของ Wattson ใน Perfetto
คลิก Wattson เพื่อขยายและดูรายละเอียดต่อรางเสมือน
กราฟรางรถไฟทั้งหมดจะปรับขนาดเป็นค่าเดียวกันโดยอัตโนมัติเพื่อแสดงสัดส่วนระหว่างรางรถไฟ
ระบบจะสร้างสถิติสำหรับภูมิภาคที่ผู้ใช้เลือก (หรือทำเครื่องหมาย)
คุณจัดเรียงตารางสถิติได้โดยคลิกชื่อคอลัมน์ใดก็ได้
ยอดรวมโดยประมาณจะแสดงอยู่ใต้ชื่อคอลัมน์โดยตรง
รูปที่ 4 การประมาณการรถไฟ
ดูการติดตามต่อเธรด กระบวนการ หรือการระบุแหล่งที่มาของแพ็กเกจ
หากเปิดใช้การติดตามตัวจัดกำหนดการและเห็นชิ้นส่วนของเธรดใน Perfetto คุณจะได้รับการระบุแหล่งที่มาของพลังงานหรือการใช้พลังงานระดับเธรดหรือระดับกระบวนการด้วย
- ใน Perfetto ให้เลือกภูมิภาคของสไลซ์เธรด
- ดูรายละเอียดของเธรด กระบวนการ หรือแพ็กเกจ
เช่นเดียวกับสถิติการติดตามต่อเส้นทาง คุณสามารถคลิกชื่อคอลัมน์ใดก็ได้ เพื่อจัดเรียงตามคอลัมน์นั้น
วิเคราะห์รายละเอียดระดับเธรด
นอกเหนือจากข้อกำหนดขั้นต่ำ
สำหรับการประมาณการใช้พลังงานขั้นพื้นฐานแล้ว คุณต้องเพิ่มการกำหนดค่าต่อไปนี้ลงใน
ส่วน linux.ftrace
ใน wattson.cfg
เพื่อการระบุแหล่งที่มาของการใช้พลังงานระดับต่อเธรด
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
}
}
}
รูปที่ 5 รายละเอียดระดับชุดข้อความ
รายละเอียดระดับกระบวนการ
การระบุแหล่งที่มาที่ระดับกระบวนการต้องprocess_states
เปิดใช้
ในข้อมูลที่รวบรวมใน Perfetto Trace เปิดใช้แหล่งข้อมูลต่อไปนี้
ในไฟล์การกำหนดค่า
wattson.cfg
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}
รูปที่ 6 โดยการแบ่งกระบวนการ
รายละเอียดระดับแพ็กเกจ
การระบุแหล่งที่มาระดับแพ็กเกจต้องandroid.packages_list
เปิดใช้ในข้อมูล
ที่รวบรวมในการติดตาม Perfetto เปิดใช้แหล่งข้อมูลต่อไปนี้ในไฟล์การกำหนดค่า wattson.cfg
data_sources {
config {
name: "android.packages_list"
target_buffer: 1
}
}
เช่นเดียวกับการระบุแหล่งที่มาระดับเธรดและระดับกระบวนการ เมื่อเลือกช่วงของสไลซ์เธรด ให้ตรวจสอบรายละเอียดระดับแพ็กเกจ
รูปที่ 7 รายละเอียดระดับเธรด
คำถามที่พบบ่อย
คำถามที่พบบ่อยเกี่ยวกับวัตสันมีดังนี้
Wattson คาดว่าจะตรงกับเอาต์พุตฮาร์ดแวร์การวัดกำลังในห้องทดลองหรือไม่
สำหรับภาระงานส่วนใหญ่ ค่าประมาณของ Wattson จะตรงกับการวัดค่าฮาร์ดแวร์ด้านพลังงานในห้องทดลอง อย่างไรก็ตาม ไม่ได้เป็นเช่นนี้เสมอไปและไม่ได้เป็นเจตนาของ Wattson
Wattson มีไว้เพื่อตรวจสอบการปรับปรุงด้านพลังงานหรือตรวจจับการถดถอยของพลังงาน โดยไม่มีสัญญาณรบกวนจากปัจจัยด้านสิ่งแวดล้อม (อุณหภูมิ) ความแตกต่างระหว่างหน่วย ในการรั่วไหลของชิป (SoC เดียวกันอาจมีการรั่วไหลที่แตกต่างกันในแต่ละหน่วย ) หรือความแตกต่างในการปรับเทียบระหว่างฮาร์ดแวร์การวัดพลังงานในห้องทดลอง
Wattson มีประโยชน์มากกว่าการดูเวลา CPU หรือรอบ CPU อย่างไร
เวลาและรอบ CPU ไม่ได้คำนึงถึงความแตกต่างของกำลังหรือพลังงาน ที่ใช้ระหว่างความถี่และประเภท CPU (เล็ก กลาง ใหญ่)
ความถี่ CPU ที่เพิ่มขึ้นเป็น 2 เท่าไม่ได้หมายความว่ากำลัง CPU หรือประสิทธิภาพจะเพิ่มขึ้นเป็น 2 เท่าเสมอไป
Wattson มีความแม่นยำเมื่อเทียบกับโซลูชันฮาร์ดแวร์หรือไม่
เราได้เปรียบเทียบ Wattson กับฮาร์ดแวร์วัดกำลังไฟฟ้าในห้องทดลองในกรณีการใช้งานหลายกรณีที่ทีมต่างๆ จัดหาให้ ข้อผิดพลาดโดยเฉลี่ยใน Wattson คือ 1% และค่าเบี่ยงเบนมาตรฐานคือ 1.5% ระดับความสัมพันธ์นี้จะยังคงอยู่ ในการทดสอบที่ใช้เวลา 10 วินาทีไปจนถึงการทดสอบที่ใช้เวลา 4 ชั่วโมง จึงไม่มีการเพิ่มข้อผิดพลาดหรือการปิดบังข้อผิดพลาดที่เกิดจากเวลา
การทดลองการกำหนดค่าเคอร์เนลของ Pixel 6
ต่อไปนี้คือการทดสอบพื้นฐานของการแยกย่อย Wattson ทั่วไปโดยใช้ Pixel 6
Wattson.cfg
ส่วนนี้จะแสดงการกำหนดค่าทั่วไปสำหรับการเปิดใช้ Wattson ใน Perfetto
write_into_file: true
flush_period_ms: 30000
file_write_period_ms: 30000
buffers: {
size_kb: 2048
fill_policy: RING_BUFFER
}
buffers: {
size_kb: 200000
fill_policy: RING_BUFFER
}
# Needed for process level power attribution
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 0
process_stats_config {
scan_all_processes_on_start: true
}
}
}
# Needed for package level power attribution
data_sources: {
config {
name: "android.packages_list"
target_buffer: 0
}
}
# Needed for determining CPU freq/idle initial state
data_sources: {
config {
name: "linux.sys_stats"
sys_stats_config {
cpufreq_period_ms: 100000000
cpuidle_period_ms: 100000000
}
}
}
# Needed for estimating power and thread level power attribution
data_sources: {
config {
name: "linux.ftrace"
target_buffer: 1
ftrace_config {
# Minimum data sources for estimating power
ftrace_events: "power/cpu_frequency"
ftrace_events: "power/cpu_idle"
ftrace_events: "power/suspend_resume"
ftrace_events: "cpuhp/cpuhp_enter"
ftrace_events: "cpuhp/cpuhp_exit"
ftrace_events: "cpuhp/cpuhp_multi_enter"
ftrace_events: "devfreq/devfreq_frequency"
# Needed for Wattson start/stop markers
ftrace_events: "ftrace/print"
# Needed for thread level power attribution
ftrace_events: "sched/sched_switch"
# Needed for process level power attribution
ftrace_events: "sched/sched_process_free"
ftrace_events: "task/task_newtask"
ftrace_events: "task/task_rename"
}
}
}