หน้านี้มีวิธีการโดยละเอียดสำหรับการรวบรวมการย้ายข้อมูล Perfetto เพื่อใช้กับ Wattson และสำหรับการวิเคราะห์ข้อมูลพลังงานที่ได้ใน UI ของ Perfetto
แม้ว่าจะมีหลายวิธีในการรวบรวมการย้ายข้อมูล Perfetto แต่วิธีการในหน้านี้มีข้อกำหนดและเวิร์กโฟลว์ที่เฉพาะเจาะจงสำหรับการสร้างการย้ายข้อมูลที่เข้ากันได้กับ Wattson
ข้อกำหนดขั้นต่ำของบิลด์
หากต้องการยืนยันว่า Wattson มีข้อมูลเมตาที่จำเป็นต่อการทำงานอย่างถูกต้อง คุณต้องรวบรวมการย้ายข้อมูลจากอุปกรณ์ที่ใช้บิลด์ล่าสุด เวอร์ชันบิลด์ขั้นต่ำสำหรับการประมาณพลังงานของ CPU และ GPU จะแตกต่างกันไปตามอุปกรณ์
| อุปกรณ์ | ข้อกำหนดขั้นต่ำของบิลด์: การประมาณ CPU | ข้อกำหนดขั้นต่ำของบิลด์: การประมาณ GPU |
|---|---|---|
| Pixel Watch 2 | ไม่มีข้อกำหนดขั้นต่ำของบิลด์ | ไม่รองรับ |
| Pixel Watch 3 | 25Q2 | ไม่รองรับ |
| Pixel 6 | ไม่มีข้อกำหนดขั้นต่ำของบิลด์ | 25Q2 |
| Pixel 9 | 25Q2 | ไม่รองรับ |
| Pixel 10 | 25Q2 | ไม่รองรับ |
| Galaxy XR (SXR2230P) | ไม่มีข้อกำหนดขั้นต่ำของบิลด์ | ไม่รองรับ |
รวบรวมการย้ายข้อมูล 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 เปิดใช้ความถี่ของอุปกรณ์
ดูรายละเอียดการย้ายข้อมูลต่อราง
ด้วย 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
เปิดใช้แหล่งข้อมูลต่อไปนี้
ในไฟล์การกำหนดค่า
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 รายละเอียดระดับเธรด
การประมาณพลังงานของ GPU
การประมาณพลังงานของ GPU รองรับใน Pixel 6, 6 Pro และ 6a หากต้องการเปิดใช้การประมาณพลังงานของ GPU
ให้เปิดใช้แหล่งข้อมูลต่อไปนี้ในไฟล์การกำหนดค่าของคุณ
wattson.cfg
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "mali/gpu_power_state"
ftrace_events: "power/gpu_frequency"
# [Optional] Enable GPU Work Period (not used by Wattson, but useful for debugging)
ftrace_events: "power/gpu_work_period"
}
}
}
สำหรับรายการที่เลือก ค่าประมาณพลังงานของ GPU ของ Wattson จะปรากฏใน UI ของ Perfetto ในแท็บค่าประมาณของ Wattson

รูปที่ 8 การประมาณพลังงานของ GPU
คำถามที่พบบ่อย
คำถามที่พบบ่อยเกี่ยวกับ Wattson มีดังนี้
Wattson คาดว่าจะตรงกับเอาต์พุตฮาร์ดแวร์การวัดพลังงานในห้องปฏิบัติการไหม
สำหรับเวิร์กโหลดส่วนใหญ่ ค่าประมาณของ Wattson จะตรงกับการวัดฮาร์ดแวร์พลังงานในห้องปฏิบัติการ อย่างไรก็ตาม ค่าประมาณของ Wattson อาจไม่ตรงกับการวัดฮาร์ดแวร์พลังงานในห้องปฏิบัติการเสมอไป และ Wattson ไม่ได้มีวัตถุประสงค์เพื่อการนี้
Wattson มีไว้เพื่อตรวจสอบการปรับปรุงพลังงานหรือตรวจจับการถดถอยของพลังงาน โดยไม่มีสัญญาณรบกวนจากปัจจัยแวดล้อม (อุณหภูมิ) ความแตกต่างระหว่างหน่วยต่อหน่วย ในการรั่วไหลของชิป (SoC เดียวกันอาจมีการรั่วไหลที่แตกต่างกันต่อหน่วย ) หรือความแตกต่างในการปรับเทียบระหว่างฮาร์ดแวร์การวัดพลังงานในห้องปฏิบัติการ
Wattson มีประโยชน์มากกว่าการดูเวลา CPU หรือรอบ 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"
}
}
}