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ümesinin maksimum miktarı, toplamın yüzdesi olarak yeniden uygulanır 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 taşma, gereksiz yere yönlendiriyorsa 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ı
yer alır. Değiştirilen 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 kırıldım. 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 |