MM 事件 - 歷史內存統計

在Android上12發射和較高的利用設備mm_events ,一組與內存有關的統計數據得到定期捕獲而系統的經驗內存壓力。 mm_events集成了perfetto追踪機制,因為它檢測到內存壓力時才被激活,其增加的性能開銷最小。統計信息收集開始時內核的kswapddirect reclaim,compaction機制得到激活,這對於保持活動的時間配置時段定期向捕獲的統計數據。

相反,當一個錯誤報告被提交提供系統存儲器狀態的一次性快照, mm_events示出了存儲器的統計過程中的存儲器壓力週期的簡單的歷史圖。捕獲的統計信息列在下表中。

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

毫米相關的跟踪事件

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

分析 mm_events 數據

如果mm_events啟用,為獲得設備後不久拍攝的事件的bug報告開始遇到高內存壓力提供歷史mm_events統計,在一個壓縮報告的形式FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.

兩者vmstat數據和ftrace事件可以被看作用於使用所述分析普菲UI

vmstat 數據

上傳systrace.pftrace文件普菲UI看vmstat圖表在時間軸上的數據如下圖所示。

vmstat data graphed on a timeline

圖1.的vmstat圖形數據時間軸

ftrace 事件

所捕獲的ftrace mm_events未在時間軸上圖解顯示。查看它們,點擊查詢SQL選項卡上,位於如圖2中。

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

圖2.單擊查詢(SQL)訪問

啟用 mm_events

要啟用mm_events,集sysprop persist.mm_events.enabled=true從供應商init.rc

以下是用於減輕 mm_events 的內存和 CPU 佔用空間的方法:

  • mm-events ftrace實例使用每個CPU 4 KB的緩衝區。
  • kmem_activity觸發速率限制,以每分鐘一次。
  • 僅有1 mm-events跟踪會話可以隨時被激活。

定制

mm_events使用perfetto跟踪配置文件來指定跟踪會話期間的統計信息捕獲。

你可以提供一個自定義的普菲跟踪配置/vendor/etc/mm_events.cfg 。對於可用的跟踪配置字段的說明,請參見普菲文檔。對於一個樣品跟踪配置,請參閱本mm_events.cfg例子。

包含在跟踪配置中以確保它由內存壓力觸發的重要字段顯示在下面的代碼段中。

# 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
  }
}

在這種配置中mm_events發起PERFETTO kmem_activity扳機和普菲跟踪會話開始捕捉vm_statsftrace存儲器事件,直到配置的端部stop_delay_ms週期,36000毫秒(6分鐘)。觸發超時設置為大的值(在這種情況下,1小時)和mm_events config被定期重置,以確保mm_events始終啟用。一個錯誤報告被作為結果產生的,包含在顯示數據的類型。圖1圖2