Файлы System/bin Android 12. Справочник.


  Все     Команда     Скрипт     Служба     Приложение  

mm_events
Хронологическая статистика памяти

Тип файла: служба

   

Комментарии
Периодически включает конфигурацию трассировки perfetto для mm_events.
Конфигурация запускается триггером mm_events kmem_activity.
Этот скрипт выполняется как одноразовый сервис из perfetto.rc.



События MM (mm_events) - хронологическая статистика памяти

Устройства, работающие под управлением Android 12 и более поздних версий, используют mm_events — набор статистических данных, связанных с памятью, которые периодически собираются, когда система испытывает нехватку памяти.

mm_events интегрирован с механизмами трассировки perfetto , и поскольку он активируется только при обнаружении нехватки памяти, дополнительная нагрузка на производительность минимальна.
Сбор статистики начинается, когда активируются механизмы ядра kswapd , direct 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

    События трассировки, связанные с 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

    Анализ данных mm_events

    Если mm_events включен, отчеты об ошибках для событий, которые фиксируются вскоре после того, как устройство начинает испытывать высокую нехватку памяти, предоставляют историческую статистику mm_events в виде заархивированного отчета в FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.

    И данные vmstat, и события ftrace можно просматривать для анализа с помощью пользовательского интерфейса Perfetto
    https://ui.perfetto.dev/


    Данные vmstat

    Загрузите файл systrace.pftrace в пользовательский интерфейс Perfetto, чтобы просмотреть данные vmstat на временной шкале, как показано ниже.
    [img]

    Рисунок 1. Временная шкала графических данных vmstat

    События ftrace

    Захваченные ftrace mm_events не отображаются графически на временной шкале.
    Чтобы просмотреть их, щелкните вкладку Query SQL , расположенную, как показано на рис. 2.

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

    Рис. 2. Щелкните Запрос (SQL) для доступа

    Включение mm_events

    Чтобы включить mm_events, установите sysprop persist.mm_events.enabled=true из init.rc поставщика.

    Примечание.
    При включении mm_events задайте для persist.mm_events.enabled значение true до запуска post-fs-data , чтобы убедиться, что экземпляр трассировки mm_events доступен до mm_events.

    Предупреждение: mm_events имеет ~ 0,3% максимальной загрузки ЦП при сборе данных.
    Будьте осторожны, если вы планируете использовать mm_events для производственных сборок, поскольку частота событий нехватки памяти сильно зависит от устройства.
    Например, устройства с низким бюджетом памяти чаще сталкиваются с событиями нехватки памяти, и, следовательно, mm_events может оставаться активным (всегда включенным) для них.

    Для уменьшения нагрузки на память и ЦП в mm_events используются следующие меры:

    Экземпляр mm-events ftrace использует буфер размером 4 КБ на каждый ЦП.
    Триггер kmem_activity ограничен частотой один раз в минуту.
    В каждый момент времени может быть активен только сеанс трассировки mm-events .

    Настройка

    mm_events использует файл конфигурации трассировки perfetto, чтобы указать, какую статистику собирать во время сеанса трассировки.

    Вы можете предоставить пользовательскую конфигурацию трассировки Perfetto в /vendor/etc/mm_events.cfg .
    Описание доступных полей конфигурации трассировки см. в Perfetto Docs .
    Пример конфигурации трассировки см. в этом примере 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 , а сеанс трассировки Perfetto начинает захват vm_stats и событий памяти ftrace до конца настроенного периода stop_delay_ms , 36000 мс (6 минут).
    Время ожидания триггера установлено на большое значение (в данном случае 1 час), а mm_events config периодически перезагружается, чтобы убедиться, что mm_events всегда включен.
    В результате генерируется отчет об ошибке, содержащий тип данных, показанный на рисунках 1 и 2 .

    Примечание.
    Если вы не предоставляете пользовательскую конфигурацию, вместо нее используется конфигурация трассировки по умолчанию .