Bir memcg'nin bellek kullanımı sınırına ulaştığında çekirdek doğrudan bellek geri kazanımını tetikler. Bu işlem, bellek ayırma yolunda çalışan ve mevcut süreci durduran eşzamanlı bir işlemdir. Bu gecikmeyi ortadan kaldırmak için Alibaba Cloud Linux, memcg'ler için arka uç asenkron geri kazanım özelliği sunar. Çekirdek, kullanım zorunlu sınıra ulaşmadan önce belleği arka planda geri kazanır; böylece süreçleriniz geri kazanımın tamamlanmasını beklerken bloke olmaz.
Bu özellik aşağıdaki sürümlerde kullanılabilir:
Çekirdek sürümü
4.19.81-17.al7ve üzeri olan Alibaba Cloud Linux 2Çekirdek sürümü
5.10.134-12.al8ve üzeri olan Alibaba Cloud Linux 3
Bu özelliği etkinleştirmeden önce aşağıdaki davranışları göz önünde bulundurun:
Mevcut bir memcg'deki bellek ayırma işlemi, üst cgroup'ta özyinelemeli olarak arka uç asenkron geri kazanımı tetikleyebilir.
Geri kazanım, tetiklendiği memcg'de başlar ve cgroup hiyerarşisi boyunca yukarıdan aşağıya doğru ilerler.
memory.highdeğerimemory.limit_in_bytesdeğerinden küçük olarak ayarlandığında,memory.wmark_highvememory.wmark_lowdeğerlerimemory.limit_in_bytesyerinememory.highbaz alınarak hesaplanır.
Çalışma mekanizması
Bu özellik su işareti tabanlı bir mekanizma sunar. Yüksek su işaretini (memory.wmark_high) tanımlamak için memory.wmark_ratio parametresini memcg sınırının bir yüzdesi olarak ayarlayın. Bellek kullanımı bu su işaretini aştığında çekirdek, belleği arka planda asenkron olarak geri kazanmaya başlar. Kullanım, yapılandırılabilir bir ölçeklendirme faktörüyle memory.wmark_high değerinden türetilen düşük su işaretinin (memory.wmark_low) altına düştüğünde geri kazanım durur.
Bu yaklaşım bir tampon bölge oluşturur. Geri kazanım, zorunlu sınıra ulaşmadan önce arka planda çalışır ve doğrudan geri kazanımın neden olduğu ani duraksamaları önler.
Arayüz referansı
memory.wmark_ratio
Okuma-yazma. Özelliği etkinleştirir ve yüksek su işaretini memcg sınırının bir yüzdesi olarak ayarlar.
Geçerli değerler: 0–100
Varsayılan: 0 (özellik devre dışı)
Sıfır dışı bir değer ayarlandığında özellik etkinleşir ve
memory.wmark_highyeniden hesaplanır.
memory.wmark_high
Salt okunur. Arka uç asenkron geri kazanımını tetikleyen bellek kullanımı eşiğidir.
Formül:
memory.wmark_high = memory.limit_in_bytes x memory.wmark_ratio / 100Özellik devre dışı bırakıldığında (
memory.wmark_ratio = 0), tetiklemeyi önlemek için bu değer mümkün olan en yüksek değere ayarlanır.Memcg kök dizininde bulunmaz.
memory.wmark_low
Salt okunur. Arka uç asenkron geri kazanımının durduğu bellek kullanımı eşiğidir.
Formül:
memory.wmark_low = memory.wmark_high - memory.limit_in_bytes x memory.wmark_scale_factor / 10000Memcg kök dizininde bulunmaz.
memory.wmark_scale_factor
Okuma-yazma. memory.wmark_high ile memory.wmark_low arasındaki boşluğu kontrol eder.
Birim: Memcg sınırının %0,01'i
Geçerli değerler: 1–1000
Varsayılan: 50 (memcg sınırının %0,50'si); memcg oluşturulduğunda üst cgroup'tan miras alınır
Memcg kök dizininde bulunmaz.
Arka uç asenkron geri kazanımını etkinleştirme
Aşağıdaki örnek, bir test memcg'si oluşturur, 1 GB bellek sınırı ayarlar, %95 su işareti ile özelliği etkinleştirir ve ortaya çıkan arayüz değerlerini doğrular.
-
Bir test memcg'si oluşturun.
sudo mkdir /sys/fs/cgroup/memory/test/ -
Bellek sınırını 1 GB olarak ayarlayın.
sudo sh -c 'echo 1G > /sys/fs/cgroup/memory/test/memory.limit_in_bytes' -
memory.wmark_ratiodeğerini 95 olarak ayarlayarak arka uç asenkron geri kazanımını etkinleştirin. Bu işlem,memory.wmark_highdeğerini memcg sınırının %95'ine yapılandırır.sudo sh -c 'echo 95 > /sys/fs/cgroup/memory/test/memory.wmark_ratio' -
Yapılandırmayı doğrulamak için arayüz değerlerini okuyun.
memory.wmark_scale_factordeğerini okuyun. Varsayılan miras alınan değer 50'dir ve bu, memcg sınırının %0,50'sini temsil eder.cat /sys/fs/cgroup/memory/test/memory.wmark_scale_factorYüksek su işaretini doğrulamak için
memory.wmark_highdeğerini okuyun.cat /sys/fs/cgroup/memory/test/memory.wmark_highDüşük su işaretini doğrulamak için
memory.wmark_lowdeğerini okuyun.cat /sys/fs/cgroup/memory/test/memory.wmark_low