Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Sự kiện MM - Thống kê bộ nhớ lịch sử

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 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 về bộ nhớ. mm_events được tích hợp với cơ chế theo dõi perfetto và bởi vì nó chỉ được kích hoạt khi phát hiện áp lực bộ nhớ, chi phí hiệu suất 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 hạt nhân đượ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ê theo các khoảng thời gian đề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ị một cái nhìn lịch sử ngắn gọn về thống kê bộ nhớ trong khoảng thời gian bộ nhớ bị áp lực. Các thống kê thu được được liệt kê trong 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 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 vẽ biểu đồ trên dòng thời gian như hình dưới đây.

vmstat data graphed on a timeline

Hình 1. Dòng thời gian của dữ liệu đồ họa vmstat

sự kiện ftrace

Các ftrace mm_events chụp không được hiển thị bằng đồ thị trên dòng thời gian. Để xem chúng, hãy nhấp vào tab Truy vấn SQL , nằm như thể hiện trong Hình 2.

Locate the Query SQL tab and click to view ftrace and mm_events captured and graphed

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

Những điều sau đây được áp dụng để giảm thiểu bộ nhớ và dấu chân CPU của mm_events:

  • Một 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ỉ có thể kích hoạt phiên theo dõi mm-events bất kỳ lúc nào.

Tùy biến

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 thu thập trong phiên truy tìm.

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 bởi áp lực bộ nhớ được hiển thị trong đoạn mã bên dưới.

# 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 vm_stats và các sự kiện bộ nhớ ftrace cho đến khi kết thúc khoảng thời gian stop_delay_ms định cấu hình, 36000 ms (6 phút). Thời gian chờ của trình 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 thiết lậ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 1Hình 2 .