Các thiết bị khởi 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 ghi lại định kỳ trong khi hệ thống gặp áp lực bộ nhớ. mm_events
được tích hợp với các cơ chế theo dõi perfetto
và vì nó chỉ được kích hoạt khi phát hiện thấy áp lực bộ nhớ nên chi phí hoạt động bổ sung của nó là tối thiểu. Việc 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 kernel được kích hoạt và nó 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ê đều đặn.
Thay vì cung cấp ảnh chụp nhanh một lần về trạng thái bộ nhớ hệ thống khi báo cáo lỗi được gửi, mm_events
hiển thị chế độ xem lịch sử ngắn gọn về số liệu thống kê bộ nhớ trong các khoảng thời gian áp lực bộ nhớ. Số liệu thống kê thu được đượ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 mm_events
được bật, 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
lịch sử, dưới dạng báo cáo được nén trong FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.
Cả dữ liệu vmstat
và sự kiện ftrace
đều có thể được xem để 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 biểu đồ trên dòng thời gian như trong Hình 1:
Hình 1. Dòng thời gian của dữ liệu đồ họa vmstat.
sự kiện ftrace
ftrace
mm_events
đã ghi lại không được hiển thị bằng đồ họa trên dòng thời gian. Để xem chúng, hãy nhấp vào tab SQL truy vấn , nằm như trong Hình 2:
Hình 2. Bấm vào Truy vấn (SQL) để truy cập.
Kích hoạt mm_events
Để bật mm_events, hãy đặt sysprop persist.mm_events.enabled=true
từ nhà cung cấp init.rc
.
Những điều sau đây được áp dụng để giảm thiểu mức tiêu tốn bộ nhớ và CPU của mm_events:
- Phiên bản
mm-events ftrace
sử dụng bộ đệm 4 KB cho mỗi CPU. - Trình kích hoạt
kmem_activity
được giới hạn tốc độ một lần mỗi phút. - Chỉ phiên theo dõi
mm-events
mới có thể hoạt động bất kỳ lúc nào.
Tùy 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ê nào 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 tùy chỉnh trong /vendor/etc/mm_events.cfg
. Để biết mô tả về các trường cấu hình theo dõi có sẵn, hãy xem Tài liệu Perfetto . Để biết cấu hình theo dõi mẫu, hãy xem ví dụ mm_events.cfg
này.
Các trường quan trọng cần đưa vào cấu hình theo dõi của bạn để đảm bảo nó được kích hoạt do á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
khởi tạo trình kích hoạt perfetto kmem_activity
và phiên theo dõi Perfetto 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ờ kích hoạt được đặt thành giá trị lớn (trong trường hợp này là 1 giờ) và mm_events config
được sắp xếp lại định kỳ để đảm bảo rằng mm_events
luôn được bật. Kết quả là một báo cáo lỗi được tạo ra, chứa loại dữ liệu được hiển thị trong Hình 1 và Hình 2 .