İşlem belleği koruyucu arka plan programı

Android 17 ve sonraki sürümlerde, süreç bellek koruyucu arka plan programı (PMGD) desteklenir. Bu program, süreç başına bellek kullanımını proaktif olarak yöneterek sistem sağlığını ve kullanıcı deneyimini korur. Daemon, belirli hedef süreçlerde bellek sınırlarını düzgün bir şekilde uygulayarak genel cihaz kararlılığını artırır. Ayrıca, yalıtılmış bellek sızıntılarının veya ani artışların sistem genelinde performans düşüşüne neden olmadığını doğrular.

Geleneksel küresel düşük bellekli sonlandırıcılar yalnızca sistemin tamamı baskı altındayken çalışırken PMGD ayrıntılı bir yaklaşım benimser. Daemon, hedef süreçleri için Control Group v2 belleği değerlerini izleyerek bunu başarır. Hedeflenen bir işlem, yapılandırılmış bellek sınırlarını aştığında pmgd, işlemi sonlandırmadan önce Statsd bellek atomlarını kaydederek sınır ihlallerini ele alır.

İşleyiş şekli

Daemon, bellek baskısı etkinliklerini (özellikle memory.events kullanan yüksek bellek etkinliği) dinlemek için inotify kullanır. İzlenen bir işlem bellek etkinliğini tetiklediğinde pmgd aşağıdaki işlemleri gerçekleştirir:

  1. Anonim bellek kontrolü: İşlemin anonim belleğini değerlendirir. Yapılandırılan anon_limit_in_mb değerini aşarsa pmgd işlemi hemen sonlandırır.
  2. Geri alma bekleme süresi: Anonim bellek, belirtilen anonim bellek sınırının altındaysa pmgd, sistem geri alma için ek süre (reclaim_wait_time_secs) bekler.
  3. Geri kazanma işleminden sonra bellek değerlendirmesi: Hedef işlemin memory.current değeri, ek süre sonunda memory.high değerinden büyük veya ona eşit kalırsa ya da anonim bellek anon_limit_in_mb değerini aşarsa pmgd işlemi hemen sonlandırır.

Bu işlem, süreç sonlandırılana veya süreçteki geri kazanma işlemi bellek kullanımını belirtilen bellek sınırlarının altına düşürene kadar sürekli olarak yapılır.

Sistem sağlığı özellikleri

  • Yeniden başlatma sıklık sınırlaması: Başlatma döngülerini veya kalıcı kilitlenmeleri önlemek için, pmgd /data/misc/pmgd/history.json içinde işlem sonlandırmalarını izler. Daemon, işlemleri cihaz yeniden başlatma başına tek bir pmgd ile başlatılan sonlandırma işlemiyle sınırlar.

SELinux yapılandırması

PMGD'nin süreçleri izleme özelliği, SELinux politikasıyla kısıtlanmıştır. PMGD'yi, alanına politika tarafından izin verilmeyen bir süreci (ör. tedarikçiye özel bir sistem süreci) izleyecek şekilde yapılandırırsanız PMGD bu süreci izleyemez ve logcat'te SELinux reddetme işlemleri görebilirsiniz.

PMGD'nin ek alanlardaki süreçleri izlemesine izin vermek için PMGD'ye yönelik cihaza özel SELinux politikanızı güncelleyerek PMGD'nin izinlerini genişletmeniz gerekir.

Aşağıda, yeni bir alana erişim ekleyen bir device/<vendor>/<device>/sepolicy/pmgd.te dosyası örneği verilmiştir:

# Allow pmgd to access vendor_system_apps
r_dir_file(pmgd, vendor_system_apps)

Cihaza özel politika yazma hakkında daha fazla bilgi için SELinux'u uygulama başlıklı makaleyi inceleyin.

Tedarikçi firma tarafından tanımlanmış yapılandırma

PMGD yapılandırması, satıcı tarafından yönlendirilir ve gerekli bir JSON dosyasıyla yapılandırılır /vendor/etc/pmgd/config.json. Bu, izlenecek süreçleri, yapılandırılmış bellek sınırı profillerini (cgroup görev profilleri kullanılarak) ve megabayt cinsinden sabit anonim bellek sınırını listeler.

Tedarikçi yapılandırma alanları

Sağlanan JSON yapılandırması, aşağıdaki alanlarla tanımlanan işlemlerin ve sınırlarının bir listesidir:

Alan Tür Zorunlu Açıklama Varsayılan
target_cmd Dize Evet İzlenecek hedef işlemin komut adı (ör. system_server). Yok
uid Tam sayı Hayır İşlemin kullanıcı kimliği (UID). Atlanırsa pmgd, target_cmd ile eşleşen tüm süreçlere kuralı genel olarak uygular. Yok
reclaim_wait_time_secs Tam sayı Hayır Bellek sınırının tekrar değerlendirilmesinden önce sistemin belleği geri kazanması için beklenecek süre (saniye). 5
mem_limit_profile Dize Evet `memory.high` değerini ayarlayan cgroup görev profilinin adı. Bu, işlem bellek sınırını ayarlamak için kullanılır. Yok
anon_limit_in_mb Tam sayı Evet Megabayt cinsinden nihai anonim bellek sınırı. Anonim bellek kullanımı bu değeri aşarsa pmgd işlemi hemen sonlandırır. Yok
additional_task_profiles Dize listesi Hayır İzleme başladığında pmgd işlemin uygulandığı ek görev profillerinin listesi. Boş liste

Aşağıda, vendor/etc/task_profiles.json içindeki cgroup görev profilinin örnek bir yapılandırması verilmiştir:

{
  "Attributes": [
    ...
    {
      "Name": "MemHigh",
      "Controller": "memory",
      "File": "memory.high"
    }
  ],
  "Profiles": [
    {
      "Name": "SystemServerMemoryHighLimit",
      "Actions": [
        {
          "Name": "SetAttribute",
          "Params":
          {
            "Name": "MemHigh",
            "Value": "1080M"
          }
        }
      ]
    }
  ]
}

Aşağıda, PMGD yapılandırmasının vendor/etc/pmgd/config.json içindeki örnek yapılandırması verilmiştir:

{
  "targets": [
    {
      "target_cmd": "system_server",
      "uid": 1000,
      "reclaim_wait_time_secs": 5,
      "mem_limit_profile": "SystemServerMemoryHighLimit",
      "anon_limit_in_mb": 300
    }
  ]
}