Düşük bellek katil arka plan programı

Android düşük bellek katili arka plan programı (lmkd) işlemi, belleği izler ve yüksek bellek basıncına tepki vererek sistemin kabul edilebilir düzeyde performans göstermesini sağlamak için seviyelere dokunun.

Bellek baskısı hakkında

Paralel olarak birden fazla işlem çalıştıran bir Android sistemi sistem belleğinin tükenmesi ve daha fazla test yapılmasını gerektiren işlemler gecikmeler yaşanabilir. Bellek basıncı, sistem bellek yetersizdir, Android'in bellekte yer açmasını gerektirir (bu sorunu hafifletmek için) ya da önemli olmayan süreçleri kısıtlayarak veya sonlandırarak, istenmeyen önbellekteki kritik olmayan kaynakları serbest bırakmak için süreçler vb.

Android, geçmişte çekirdek içi bir uygulama kullanarak sistem bellek basıncını izliyordu. sabit kodlu veriye bağlı sabit bir mekanizma olan düşük bellek katlayıcı (LMK) sürücüsü değerler. LMK sürücüsü, çekirdek 4.12 sürümünden itibaren yukarı akıştan kaldırılmıştır çekirdek ve lmkd kullanıcı alanı, bellek izleme ve işlem sonlandırma gerçekleştirir. görevlerden biridir.

Basınç istasyonu bilgileri

Android 10 ve sonraki sürümler şu yeni lmkd modunu destekler: Bellek baskısı için çekirdek basıncı duraklama bilgilerini (PSI) kullanır tespit edebilir. Yukarı akış çekirdeğindeki PSI yama kümesi (4.9 ve 4.14'e geri bağlanmış) çekirdekleri), görevlerin yürütülmesi nedeniyle olabilir. Bu gecikmeler kullanıcı deneyimini doğrudan etkilediğinden, , bellek basıncı önem derecesini belirlemede kullanışlı bir metriktir. İlgili içeriği oluşturmak için kullanılan yukarı akış çekirdeği, ayrıcalıklı kullanıcı alanına izin veren PSI monitörlerini de içerir. (lmkd gibi) bu gecikmelerin eşiklerini belirlemek ve Bir eşik aşıldığında çekirdekten etkinliklere abone olma.

PSI monitörleri ve vmpressure sinyalleri

Çünkü vmpressure sinyalleri (bellek için çekirdek tarafından oluşturulur) basınç tespiti ve lmkd tarafından kullanılır) genellikle çok sayıda yanlış pozitif, lmkd, belleğin gerçek baskı altında olup olmadığını belirlemek için filtreleme yapmalıdır. Bu, gereksiz lmkd uyandırma olmasına ve ek bilgi işlem kaynakları. PSI monitör kullanılması daha doğru bellek sağlar ve filtreleme ek yükünü en aza indirir.

PSI monitörleri kullanma

vmpressure etkinlikleri yerine PSI monitörlerini kullanmak için ro.lmk.use_psi mülkü. Varsayılan değer true olduğundan PSI monitörlerini lmkd için varsayılan bellek basıncı algılama mekanizması. Çünkü PSI, çekirdek desteği gerektirmesi için, çekirdek, PSI geriye dönük bağlantı yamalarını PSI desteği etkin (CONFIG_PSI=y) ile derlendi.

Çekirdek içi LMK sürücüsünün dezavantajları

Android, aşağıdakiler de dahil bir dizi sorun nedeniyle LMK sürücüsünü kullanımdan kaldırır:

  • Düşük RAM'li cihazların agresif bir şekilde ayarlanması gerekiyordu. büyük bir dosya destekli etkin sayfa önbelleğine sahip iş yüklerinde düşük performans gösterir. İlgili içeriği oluşturmak için kullanılan performans düşüklüğün etkisi çok büyüktür ve öldürme sorunu yoktur.
  • LMK çekirdek sürücüsü, ölçeklendirmeye dayalı olmadan serbest bellek sınırlarına dayanıyordu %100'e varan bir etkisi vardır.
  • Tasarımın sertliği nedeniyle iş ortakları genellikle sürücüyü cihazlarında çalışmasını sağladı.
  • LMK sürücüsü, slab shrinker API'ye bağlandı. Ancak bu kod, hedef arama ve öldürme gibi ağır işlemler için tasarlanmış Bu da vmscan sürecinin yavaşladığını gösteriyor.

Kullanıcı alanı lmkd

lmkd kullanıcı alanı, çekirdek içi sürücüyle aynı işlevi uygular Ancak bellek basıncını tespit edip tahmin etmek için mevcut çekirdek mekanizmalarını kullanır. Böyle mekanizmalar, çekirdek tarafından oluşturulan vmpressure etkinliklerini veya basınç istasyonunu kullanmayı içerir bellek basıncı düzeyleri hakkında bildirim almak üzere bilgi (PSI) izler, Her bir sisteme ayrılan bellek kaynaklarını sınırlamak için bellek grubu özelliklerini sürecin önemine göre değişecektir.

Android 10'da kullanıcı alanı lmkd'sini kullanma

Android 9 ve sonraki sürümlerde lmkd kullanıcı alanı şu durumlarda etkinleştirilir: çekirdek içi LMK sürücüsü algılanmadı. Çünkü kullanıcı alanı lmkd bellek cgroups için çekirdek desteği gerektirdiğinden çekirdek, şu yapılandırma ayarlarını kullanın:

CONFIG_ANDROID_LOW_MEMORY_KILLER=n
CONFIG_MEMCG=y
CONFIG_MEMCG_SWAP=y

Sonlandırma stratejileri

lmkd kullanıcı alanı, vmpressure etkinliğe veya PSI'ya dayalı sonlandırma stratejilerini destekler önem derecesi gibi diğer ipuçlarını da kullanabilirsiniz. Sonlandır düşük bellekli ve yüksek performanslı cihazlar için farklı stratejilere sahip olduğundan emin olun.

  • Düşük bellekli cihazlarda sistem çalışma şekline benzer.
  • Yüksek performanslı cihazlarda bellek basıncı anormal olarak görülmelidir ve genel performansı etkilemeden önce duruma göre düzeltin.

Sonlandırma stratejisini ro.config.low_ram özelliğini kullanarak yapılandırabilirsiniz. Örneğin, Düşük RAM'e bakın yapılandırma hakkında daha fazla bilgi edinin.

lmkd kullanıcı alanı, sonlandırma kararları verdiği eski bir modu da destekler çekirdek içi LMK sürücüsüyle aynı stratejileri (yani ücretsiz bellek ve dosya önbelleği eşikleri için geçerlidir. Eski modu etkinleştirmek için ro.lmk.use_minfree_levels mülk true öğesine.

lmkd'yi yapılandırın

Aşağıdaki özellikleri kullanarak belirli bir cihaz için lmkd hizmetini yapılandırın.

Özellik Kullanım Varsayılan
ro.config.low_ram Cihazın düşük RAM'li mi yoksa yüksek performanslı mı olduğunu belirtin. false
ro.lmk.use_psi vmpressure etkinlikleri yerine PSI monitörlerini kullanın. true
ro.lmk.use_minfree_levels İşlemi sonlandırmak için boş bellek ve dosya önbelleği eşiklerini kullan Çekirdekteki işlevlerin birbiriyle aynı olması LMK sürücüsü). false
ro.lmk.low Uygun işlemler için minimum oom_adj puan: vmpressure seviyesinde öldürüldü. 1001
(devre dışı bırakıldı)
ro.lmk.medium Uygun işlemler için minimum oom_adj puan: vmpressure orta seviyede öldürüldü. 800
(önbelleğe alınmış veya gerekli olmayan hizmetler)
ro.lmk.critical Uygun işlemler için minimum oom_adj puan: kritik vmpressure seviyesinde öldürüldü. 0
(herhangi bir işlem)
ro.lmk.critical_upgrade Kritik düzeye yükseltmeyi etkinleştir. false
ro.lmk.upgrade_pressure Seviyenin yükseltildiği maksimum mem_pressure çünkü sistemde çok fazla değişiklik oluyor. 100
(devre dışı bırakıldı)
ro.lmk.downgrade_pressure vmpressure olan minimum mem_pressure etkinliği yoksayılıyor çünkü hâlâ yeterli bellek var. 100
(devre dışı bırakıldı)
ro.lmk.kill_heaviest_task Uygun görevlere kıyasla en ağır görevleri (en iyi karar) sonlandırın (hızlı karar). true
ro.lmk.kill_timeout_ms Bir sonlandırma işleminden sonra ek sonlandırma yapılmayacağı süre (milisaniye cinsinden) tamamlandı. 0
(devre dışı bırakıldı)
ro.lmk.debug lmkd hata ayıklama günlüklerini etkinleştir. false

Örnek cihaz yapılandırması:

PRODUCT_PROPERTY_OVERRIDES += \
    ro.lmk.low=1001 \
    ro.lmk.medium=800 \
    ro.lmk.critical=0 \
    ro.lmk.critical_upgrade=false \
    ro.lmk.upgrade_pressure=100 \
    ro.lmk.downgrade_pressure=100 \
    ro.lmk.kill_heaviest_task=true

Android 11'de kullanıcı alanı lmkd

Android 11, yeni ve Android cihazınızda lmkd uygulamasını kullanıma sunarak Öldürme stratejisi. Sonlandırma stratejisi, bellek baskısı için PSI mekanizması kullanır algılaması sağlayan özellikler ve özellikler. lmkd inç Android 11, bellek kaynağı kullanım düzeylerini dikkate alır performansta düşüş yaşanmasını önlemek için çalışırlar. Bu öldürme stratejisi önceki stratejilerin yerini alır ve her ikisinde de kullanılabilir yüksek performanslı ve düşük RAM'li (Android Go) cihazlar.

Çekirdek gereksinimleri

lmkd, Android 11 cihazlar için aşağıdaki çekirdek özelliklerinin kullanılmasını gerektirir:

  • PSI yamalarını dahil edin ve PSI'yi etkinleştirin (geri bağlantı noktaları Android'in ortak çekirdekleri 4.9, 4.14 ve 4.19).
  • PIDFD destek yamalarını dahil et (backport'lar Android ortak sürümünde mevcuttur) 4.9, 4.14 ve 4.19) temel alınır.
  • Düşük RAM'li cihazlar için bellek cgroup'u ekleyin.

Çekirdek, aşağıdaki yapılandırma ayarlarıyla derlenmelidir:

CONFIG_PSI=y

Android 11'de lmkd'yi yapılandırma

Android 11'deki bellek azaltma stratejisi ayarlar düğmeleri ve varsayılan ayarlar. Bu özellikler hem ve düşük RAM'li cihazlar.

Özellik Kullanım Varsayılan
Yüksek performans RAM düşük
ro.lmk.psi_partial_stall_ms Düşük gecikmeyi tetiklemek için kullanılan kısmi PSI duraklama eşiği (milisaniye cinsinden) anı bildirimi. Cihaz, bellek baskısı bildirimleri alırsa çok geç, daha önceki bildirimleri tetiklemek için bu değeri azaltın. Hafızaysa gereksiz yere tetiklenen basınç bildirimlerinin sayısını artırır. gürültüye karşı daha az duyarlı olmasını sağlar. 70 200
ro.lmk.psi_complete_stall_ms Tetikleme için tam PSI duraklama eşiği (milisaniye cinsinden) kritik anı bildirimleri. Cihaz, kritik düzeyde bellek alırsa Basınç bildirimleri çok geç, daha erken tetiklemek için bu değeri azaltın bildirimleri etkinleştirebilirsiniz. Kritik bellek baskısı bildirimleri tetiklenirse ve gereksiz yere diğer hassasiyetleri azaltacak gürültü. 700
ro.lmk.thrashing_limit Çalışma kümesi için maksimum çalışma miktarı, toplamın yüzdesi olarak yeniden görüntülenir dosya destekli pagecache boyutu. Bu değerin üzerindeki çalışma seti retlerinin anlamı bu hata mesajını görebilirsiniz. Öğe cihazın performansı bellek baskısı sırasında etkilenir, değeri belirleyin. Cihazın performansı düşerse gereksiz yere kaldırmanızı sağlar, daha fazla izin vermek için değeri çok zorlanır. 100 30
ro.lmk.thrashing_limit_decay Değerin azalma eşiğindeki değerde azalması, eşik, sistem tarafından otomatik olarak belirlenen eşiği düşürmediğinde sonra bile iyileşebilir. Sürekli dışa aktarma işlemi gereksiz yere değeri azaltır. Sürekli sıkıntıya yanıt olarak çok yavaşsa değeri artırın. 10 50
ro.lmk.swap_util_max Değiştirilebilir toplam belleğin yüzdesi olarak, değiştirilen maksimum bellek miktarı hafızada bulabilirsiniz. Değiştirilmiş bellek bu sınırın üzerine çıktığında sistemi, değiştirilebilir belleğinin büyük bir kısmını değiştirdi ve hâlâ baskı altında. Bu durum, değiştirilemez ayırmalar bellek oluşturduğunda gerçekleşebilir çoğu değiştirilebilir olduğundan, değiştirme ile giderilemeyecektir. bellek zaten değiştirildi. Varsayılan değer 100'dür. Bu değer, bu kontrolü devre dışı bırakır. İşlem sırasında cihazın performansı etkileniyorsa değişim kullanımı yüksek ve serbest değişim seviyesi ayarlıyken bellek baskısı ro.lmk.swap_free_low_percentage seviyesine düşmüyor, azalt değişiklik kullanımını sınırlama değeri. 100 100

Aşağıdaki eski ayar düğmeleri de yeni öldürme stratejisiyle kullanılabilir.

Özellik Kullanım Varsayılan
Yüksek performans RAM düşük
ro.lmk.swap_free_low_percentage Toplam takas alanına oranla, serbest değişim seviyesi. "lmkd" bu değeri, sistemin ne zaman değişimli olarak değerlendirileceğine dair eşik olarak kullanır. çok ısrar etti. Değişimde çok fazla alan varken "lmkd" sonlandırılırsa yüzdeyi düşürün. "lmkd" öldürme işlemleri çok geç gerçekleşirse OOM'ye izin verilir yüzdeyi artırın. 20 10
ro.lmk.debug Bu işlem, "lmkd" hata ayıklama günlüklerini etkinleştirir. İnce ayar yaparken hata ayıklamayı etkinleştir. false