Gecikme süresine duyarlı ve kaynak tüketen görevler aynı ana bilgisayarda çalıştığında, kaynak tüketen görevlerin ani bellek tahsisi serbest belleği genel minimum su işaretine (global wmark_min) iterek gecikme süresine duyarlı görevlerde performans dalgalanmasına neden olabilir. Memcg genel minimum su işareti derecelendirmesi özelliği, her bir bellek cgroup'u (memcg) için farklı su işareti eşikleri atamanıza olanak tanır. Böylece gecikme süresine duyarlı görevler daha güçlü bellek koruması alır ve kaynak tüketen görevler sistemi kararsız hale getirmeden önce kısıtlanır.
Desteklenen sürümler:
| İşletim Sistemi | Minimum çekirdek sürümü |
|---|---|
| Alibaba Cloud Linux 2 | 4.19.91-18.al7 |
| Alibaba Cloud Linux 3 | 5.10.134-12.al8 |
Çalışma mantığı
Bu özellik, kök olmayan her memcg üzerinde memory.wmark_min_adj arayüzünü kullanıma sunar. Arayüz varsayılan olarak 0 değerini alır (arayüz oluşturulduğunda üst gruptan devralınır) ve memcg kök dizininde depolanmaz. Yazdığınız değer, ilgili cgroup'un etkin minimum su işaretini genel su işareti aralığından bir yüzde sapması olarak ayarlar. Geçerli değerler: -25 ile 50 arasındadır.
Negatif değer (−25 ila −1) — koruma önceliğini artırır. Sapma,
[0, WMARK_MIN]aralığına uygulanarak cgroup'un etkin minimum su işaretiniglobal wmark_mindeğerinin altına düşürür. Bu cgroup'tan yapılan bellek geri kazanımı ertelenir; bu da gecikme süresine duyarlı görevlerdeki performans dalgalanmasını azaltır. Örnek:memory.wmark_min_adj=-25değeri, cgroup'unWMARK_MINdeğeriniWMARK_MIN + (WMARK_MIN - 0) × (−25%)olarak ayarlar.Pozitif değer (1 ila 50) — koruma önceliğini düşürür. Sapma,
[WMARK_MIN, WMARK_LOW]aralığına uygulanarak cgroup'un etkin minimum su işaretiniglobal wmark_mindeğerinin üzerine çıkarır. Bu cgroup üzerindeki bellek geri kazanım baskısı artar, hizmet kalitesi (QoS) düşer ve daha yüksek öncelikli görevlerin dışlanmasını engeller. Örnek:memory.wmark_min_adj=50değeri, cgroup'unWMARK_MINdeğeriniWMARK_MIN + (WMARK_LOW - WMARK_MIN) × 50%olarak ayarlar.
Sapmalı su işareti seviyesine ulaşıldığında kısıtlama uygulanır. Kısıtlama süresi, aşırı bellek kullanımıyla doğru orantılıdır ve 1–1000 mikrosaniye aralığında değişir.
Çok düzeyli memcg hiyerarşisindeki etkin değer
Çok düzeyli bir memcg yapısında çekirdek, tüm üst düzeyleri gezerek maksimum değeri alır ve her düğüm için bir effective memory.wmark_min_adj değeri hesaplar. Varsayılan 0 değerine sahip ara düğümler bu hesaplamaya dahil edilmez.
Aşağıdaki hiyerarşiyi ele alalım:
root
/ \
A D
/ \
B C
/ \
E F
Aşağıdaki tabloda yapılandırılan değerlerin her düğümdeki etkin değerlerle nasıl eşleştiği gösterilmektedir:
| Düzey | Yapılandırılan değer | Etkin değer |
|---|---|---|
| A | -10 | -10 |
| B | -25 | -10 |
| C | 0 | 0 |
| D | 50 | 50 |
| E | -25 | -10 |
| F | 50 | 50 |
Bir cgroup için etkin değeri okumak üzere aşağıdaki komutu çalıştırın:
cat /sys/fs/cgroup/memory/<Memcg path>/memory.wmark_min_adj
<Memcg path> ifadesini hedef memcg'nin kök yoluyla değiştirin.
Su işareti derecelendirmesini yapılandırma
Memcg hizmet kalitesinde (QoS) yanlış değişiklikler yapmak ağ tıkanıklığı, artan yönlendirme gecikme süresi ve paket kaybı gibi ağ performansı sorunlarına yol açabilir. Bu durum işinizin kalitesini ve kullanılabilirliğini etkiler. İşlemi dikkatle yürütün.
Ön koşullar
Bu özelliği yüksek bir genel minimum su işaretiyle birlikte kullanmanızı öneririz. Örneğin,
/proc/sys/vm/min_free_kbytesdosyasına yazarakglobal wmark_mindeğerini 2 GB veya üzerine ayarlayın.Tüm yapılandırma komutlarını
rootkullanıcı olarak çalıştırın.
Gecikme süresine duyarlı görev memcg'sini yapılandırma
Etkin su işaretini düşürmek ve cgroup için bellek koruma önceliğini artırmak amacıyla negatif bir ayar değeri belirleyin.
-
Gecikme süresine duyarlı iş yükü için bir memcg oluşturun:
mkdir /sys/fs/cgroup/memory/test-lc -
Su işareti ayarını
-25olarak belirleyin:echo -25 > /sys/fs/cgroup/memory/test-lc/memory.wmark_min_adj
Kaynak tüketen görev memcg'sini yapılandırma
Etkin su işaretini yükseltmek ve cgroup için bellek koruma önceliğini düşürmek amacıyla pozitif bir ayar değeri belirleyin.
-
Kaynak tüketen iş yükü için bir memcg oluşturun:
mkdir /sys/fs/cgroup/memory/test-be -
Su işareti ayarını
25olarak belirleyin:echo 25 > /sys/fs/cgroup/memory/test-be/memory.wmark_min_adj