Trang này cung cấp hướng dẫn chi tiết về cách thu thập dấu vết Perfetto để sử dụng với Wattson và để phân tích dữ liệu về mức tiêu thụ điện năng thu được trong giao diện người dùng Perfetto.
Mặc dù có nhiều cách để thu thập dấu vết Perfetto, nhưng các phương pháp trên trang này bao gồm các yêu cầu và quy trình cụ thể để tạo dấu vết tương thích với Wattson.
Yêu cầu tối thiểu về bản dựng
Để xác minh rằng Wattson có siêu dữ liệu cần thiết để hoạt động chính xác, bạn phải thu thập dấu vết từ một thiết bị đang chạy bản dựng gần đây. Các phiên bản bản dựng tối thiểu để ước tính mức tiêu thụ điện của CPU và GPU sẽ khác nhau tuỳ theo thiết bị.
Thiết bị | Yêu cầu tối thiểu đối với bản dựng: Ước tính CPU | Yêu cầu tối thiểu đối với bản dựng: Ước tính GPU |
---|---|---|
Pixel Watch 2 | Không có yêu cầu tối thiểu về bản dựng | Không được hỗ trợ |
Pixel Watch 3 | 25Q2 | Không được hỗ trợ |
Pixel 6 | Không có yêu cầu tối thiểu về bản dựng | 25Q2 |
Pixel 9 | 25Q2 | Không được hỗ trợ |
Thu thập dấu vết Perfetto từ dòng lệnh
Phần này trình bày một quy trình mẫu để thu thập dấu vết Perfetto để sử dụng với Wattson. Tất cả các lệnh được liệt kê trong các bước sau đây đều được phát hành từ máy chủ Cầu gỡ lỗi Android (adb).
Định cấu hình và bắt đầu dấu vết bằng cách tạo một tệp cấu hình Perfetto trên thiết bị. Bạn có thể tìm thấy một cấu hình ví dụ tại
wattson.cfg
trong cây nguồn.Cấu hình của bạn phải bao gồm các sự kiện theo dõi sau:
# 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" } } }
Để bật tính năng ước tính mức tiêu thụ năng lượng của bộ nhớ đệm L3, hãy bật sự kiện
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
(Không bắt buộc) Đặt điểm bắt đầu của cửa sổ Wattson, một điểm đánh dấu được nhúng trong dấu vết Perfetto cho biết điểm bắt đầu của bản ghi. Điểm đánh dấu này giúp tăng độ chính xác của phép đo Wattson.
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
Chạy khối lượng công việc mà bạn quan tâm.
(Không bắt buộc) Bật sự kiện theo dõi
ftrace/print
để đặt phần cuối của cửa sổ Wattson:# Optional adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
Xoá các vùng đệm theo dõi và kéo tệp theo dõi Perfetto:
adb shell killall -w perfetto adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
Thu thập dấu vết Perfetto bằng giao diện người dùng Perfetto
Để thu thập dấu vết bằng Giao diện người dùng Perfetto, bạn phải bật các chế độ cài đặt cụ thể cho Wattson. Khi ghi lại một dấu vết mới trong giao diện người dùng Perfetto, hãy bật các nút bật/tắt Thông tin chi tiết về việc lập lịch và Tần số CPU và trạng thái không hoạt động:
Hình 1. Thông tin chi tiết về lịch biểu và các nút bật/tắt tần suất CPU và trạng thái không hoạt động.
Đối với thiết bị Pixel 9, trong phần cài đặt Ftrace, hãy chọn hộp đánh dấu devfreq để bật tính năng thu thập tần suất thiết bị:
Hình 2. Bật tần suất thiết bị.
Sử dụng giao diện người dùng Wattson
Với Perfetto, hãy phân tích các mức tiêu thụ điện năng ước tính của Wattson bằng cách chọn một phạm vi thời gian để xem số liệu thống kê cho từng thành phần, hoặc bật các cấu hình dấu vết cụ thể để phân bổ mức tiêu thụ điện năng ở cấp độ luồng, quy trình hoặc gói.
Xem thông tin chi tiết về từng đường ray
Cách tương tác với Wattson trong Perfetto:
Mở một dấu vết trong Perfetto.
Nếu thiết bị của bạn được Wattson hỗ trợ, các dấu vết Wattson sẽ tự động được liệt kê:
Hình 3. Xem dấu vết Wattson trong Perfetto.
Nhấp vào Wattson để mở rộng và xem thông tin chi tiết về từng đường ray ảo:
Tất cả các biểu đồ đường ray đều được tự động điều chỉnh theo tỷ lệ thành cùng một giá trị để cho thấy tỷ lệ giữa các đường ray.
Số liệu thống kê được tạo cho mọi khu vực do người dùng chọn (hoặc đánh dấu).
Bạn có thể sắp xếp bảng thống kê bằng cách nhấp vào tên của cột bất kỳ.
Tổng số ước tính sẽ xuất hiện ngay bên dưới tiêu đề cột.
Hình 4. Thông tin ước tính về tàu hoả.
Xem dấu vết theo từng luồng, quy trình hoặc thuộc tính gói
Nếu đã bật dấu vết của trình lập lịch và có thể thấy các lát cắt luồng trong Perfetto, bạn cũng có thể nhận được thông tin phân bổ năng lượng hoặc điện năng ở cấp độ luồng hoặc cấp độ quy trình:
- Trong Perfetto, hãy chọn một vùng gồm các lát cắt luồng.
- Xem thông tin chi tiết về luồng, quy trình hoặc gói.
Tương tự như số liệu thống kê về từng dòng, bạn có thể nhấp vào bất kỳ tên cột nào để sắp xếp theo cột đó.
Phân tích thông tin chi tiết ở cấp luồng
Ngoài các yêu cầu tối thiểu để ước tính mức sử dụng năng lượng cơ bản, bạn cần thêm cấu hình sau vào phần linux.ftrace
trong wattson.cfg
để phân bổ mức sử dụng năng lượng theo cấp độ mỗi luồng:
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
}
}
}
Hình 5. Phân tích theo luồng.
Phân tích theo quy trình
Mô hình phân bổ ở cấp quy trình yêu cầu phải bật process_states
trên dữ liệu được thu thập trong dấu vết Perfetto. Bật nguồn dữ liệu sau đây trong tệp cấu hình wattson.cfg
:
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}
Hình 6. Theo quy trình phân tích.
Thông tin chi tiết ở cấp gói
Hoạt động phân bổ ở cấp gói yêu cầu phải bật android.packages_list
trên dữ liệu được thu thập trong dấu vết Perfetto. Bật nguồn dữ liệu sau đây trong tệp cấu hình wattson.cfg
:
data_sources {
config {
name: "android.packages_list"
target_buffer: 1
}
}
Tương tự như hoạt động phân bổ ở cấp luồng và cấp quy trình, khi bạn chọn một dải các lát luồng, hãy xem xét thông tin chi tiết ở cấp gói.
Hình 7. Phân tích chi tiết ở cấp độ luồng.
Câu hỏi thường gặp
Dưới đây là một số câu hỏi thường gặp về Wattson.
Liệu Wattson có cho ra kết quả đo lường công suất tương đương với phần cứng đo lường công suất trong phòng thí nghiệm không?
Đối với hầu hết các khối lượng công việc, ước tính của Wattson phù hợp với các phép đo phần cứng nguồn trong phòng thí nghiệm. Tuy nhiên, điều này không phải lúc nào cũng xảy ra và không phải là mục đích của Wattson.
Wattson được dùng để xác thực các điểm cải thiện về nguồn điện hoặc phát hiện các điểm giảm sút về nguồn điện mà không bị ảnh hưởng bởi các yếu tố môi trường (nhiệt độ), sự khác biệt giữa các thiết bị về tình trạng rò rỉ chip (cùng một SoC có thể có tình trạng rò rỉ khác nhau trên cơ sở từng thiết bị) hoặc sự khác biệt về hiệu chuẩn giữa phần cứng đo nguồn điện trong phòng thí nghiệm.
Wattson hữu ích hơn như thế nào so với việc xem thời gian CPU hoặc chu kỳ CPU?
Thời gian và chu kỳ CPU không tính đến sự khác biệt về mức tiêu thụ điện năng hoặc năng lượng giữa các tần số CPU và loại CPU (nhỏ so với trung bình so với lớn).
Tần số CPU tăng gấp đôi không phải lúc nào cũng dẫn đến công suất CPU tăng gấp đôi hoặc hiệu suất tăng gấp đôi.
Wattson có chính xác khi so sánh với các giải pháp phần cứng không?
Chúng tôi đã so sánh Wattson với phần cứng đo công suất trong phòng thí nghiệm ở nhiều trường hợp sử dụng do nhiều nhóm cung cấp. Sai số trung bình trong Wattson là 1% và độ lệch chuẩn là 1,5%. Mức độ tương quan này được duy trì trong các kiểm thử từ 10 giây đến các kiểm thử chạy trong 4 giờ. Vì vậy, không có hiện tượng lỗi tăng dần hoặc che giấu lỗi theo thời gian.
Các thử nghiệm về cấu hình nhân của Pixel 6
Sau đây là một số thử nghiệm cơ bản về các mức tiêu thụ điện điển hình của Wattson khi dùng Pixel 6:
Wattson.cfg
Phần này cung cấp cấu hình điển hình để bật Wattson trên 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"
}
}
}