Các thiết bị chạy trên Android 12 trở lên sử dụng mm_events
, một tập hợp số liệu thống kê liên quan đến bộ nhớ được thu thập định kỳ trong khi hệ thống gặp phải áp lực bộ nhớ. mm_events
được tích hợp với các cơ chế theo dõi perfetto
, đồng thời chỉ được kích hoạt khi phát hiện áp lực bộ nhớ nên mức hao tổn hiệu suất tăng thêm sẽ giảm thiểu. Quá trình thu thập số liệu thống kê bắt đầu khi các cơ chế kswapd
, direct reclaim,
hoặc compaction
của hạt nhân được kích hoạt và vẫn hoạt động trong một khoảng thời gian có thể định cấu hình để thu thập số liệu thống kê theo chu kỳ đều đặn.
Thay vì cung cấp bản tổng quan nhanh về trạng thái bộ nhớ hệ thống khi bạn gửi báo cáo lỗi, mm_events
sẽ hiển thị một chế độ xem ngắn về số liệu thống kê bộ nhớ trong quá khứ trong những khoảng thời gian bộ nhớ bị áp lực. Số liệu thống kê được ghi lại được liệt kê trong các bảng sau.
Trường vmstat
nr_free_pages | nr_slab_reclaimable |
nr_slab_unreclaimable | nr_active_file |
nr_inactive_file | nr_active_anon |
nr_inactive_anon | workingset_refault |
workingset_activate | nr_file_pages |
pgpgin | pgpgout |
pswpin | pswpout |
pgsteal_kswapd_dma | pgsteal_kswapd_normal |
pgsteal_kswapd_movable | pgsteal_direct_dma |
pgsteal_direct_normal | pgsteal_direct_movable |
pgscan_kswapd_dma | pgscan_kswapd_normal |
pgscan_kswapd_movable | pgscan_direct_dma |
pgscan_direct_normal | pgscan_direct_movable |
compact_migrate_scanned | compact_free_scanned |
Sự kiện theo dõi liên quan đến mm
vmscan/mm_vmscan_kswapd_wake | vmscan/mm_vmscan_kswapd_sleep |
vmscan/mm_vmscan_direct_reclaim_begin | vmscan/mm_vmscan_direct_reclaim_end |
compaction/mm_compaction_begin | compaction/mm_compaction_end |
Phân tích dữ liệu mm_events
Nếu bạn bật mm_events
, báo cáo lỗi cho các sự kiện được ghi lại ngay sau khi thiết bị bắt đầu gặp áp lực bộ nhớ cao sẽ cung cấp số liệu thống kê mm_events
trong quá khứ, ở dạng báo cáo nén trong FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.
Bạn có thể xem cả dữ liệu vmstat
và sự kiện ftrace
để phân tích bằng Giao diện người dùng Perfetto.
Dữ liệu vmstat
Tải tệp systrace.pftrace
lên giao diện người dùng Perfetto để xem dữ liệu vmstat
được lập biểu đồ trên tiến trình như trong Hình 1:
Hình 1. Dòng thời gian của dữ liệu đồ hoạ vmstat.
Sự kiện ftrace
ftrace
mm_events
đã chụp không hiển thị dưới dạng đồ hoạ trên dòng thời gian. Để xem các truy vấn này, hãy nhấp vào thẻ Truy vấn SQL như trong Hình 2:
Hình 2. Nhấp vào Truy vấn (SQL) để truy cập.
Bật mm_events
Để bật mm_events, hãy đặt sysprop persist.mm_events.enabled=true
từ nhà cung cấp
init.rc
.
Sau đây là các biện pháp để giảm mức sử dụng bộ nhớ và CPU của mm_events:
- Một thực thể
mm-events ftrace
sử dụng bộ đệm 4 KB cho mỗi CPU. - Trình kích hoạt
kmem_activity
bị giới hạn tốc độ ở mức một lần mỗi phút. - Chỉ có 1 phiên theo dõi
mm-events
có thể hoạt động bất cứ lúc nào.
Tuỳ chỉnh
mm_events
sử dụng tệp cấu hình theo dõi perfetto
để chỉ định số liệu thống kê cần ghi lại trong phiên theo dõi.
Bạn có thể cung cấp cấu hình theo dõi Perfetto tuỳ chỉnh trong /vendor/etc/mm_events.cfg
.
Để biết nội dung mô tả về các trường cấu hình theo dõi hiện có, hãy xem Tài liệu về Perfetto.
Để biết cấu hình theo dõi mẫu, hãy xem ví dụ này
mm_events.cfg
.
Các trường quan trọng cần đưa vào cấu hình theo dõi để đảm bảo cấu hình đó được kích hoạt bởi áp lực bộ nhớ được hiển thị trong đoạn mã:
# Ensures only 1 tracing session with this key can be active
unique_session_name: "perfetto_mm_events_session"
# If a trace with bugreport_score > 0 is running,
# the captured data is made available in the zipped bugreport
# at FS/data/misc/perfetto-traces/bugreport/systrace.pftrace
bugreport_score: 100
trigger_config {
trigger_mode: START_TRACING
trigger_timeout_ms: 3600000 # 1 hour
triggers {
# kmem_activity trigger gets activated when memory pressure
# is detected
name: "kmem_activity"
stop_delay_ms: 360000 # 6 mins
}
}
Trong cấu hình này, mm_events
sẽ khởi tạo trình kích hoạt kmem_activity
của perfetto và phiên theo dõi Perfetto sẽ bắt đầu ghi lại các sự kiện bộ nhớ vm_stats
và ftrace
cho đến khi kết thúc khoảng thời gian stop_delay_ms
đã định cấu hình, 36000 mili giây (6 phút).
Thời gian chờ của điều kiện kích hoạt được đặt thành một giá trị lớn (trong trường hợp này là 1 giờ) và mm_events config
được kích hoạt lại định kỳ để đảm bảo mm_events
luôn được bật. Kết quả là một báo cáo lỗi sẽ được tạo, chứa loại dữ liệu hiển thị trong Hình 1 và Hình 2.