Sunucularda bellek doluluğu %85 üzerine çıktığında yaşanan sayfa çırpınmasını (memory thrashing), kswapd CPU kilitlenmelerini ve rastgele OOM-Killer süreç ölümlerini hesaplayın. Linux Multi-Gen LRU (MGLRU) mimarisinin sağladığı çalışma kümesi (WSS) korumasını ve üretim sysfs / systemd yapılandırmalarını üretin.
Linux çekirdeği MGLRU aktifken rastgele sayfa listesi taramayı bırakır. Aktif çalışma kümesi (WSS) korunma oranı %84.4 seviyesine yükselir.
Linux çekirdeğinde MGLRU'yu hemen aktif eden sysfs komutları, systemd birimi ve GRUB parametreleri.
# 1. MGLRU'yu aninda aktif et (bitmask: 7 = anonim + dosya + referans bayraklari) echo 7 | sudo tee /sys/kernel/mm/lru_gen/enabled # 2. Minimum kusak TTL suresini ayarla (1000 ms) echo 1000 | sudo tee /sys/kernel/mm/lru_gen/min_ttl_ms
Linux çekirdeği 20 yılı aşkın süredir bellek sayfalarını tahliye ederken Active/Inactive 2-List LRU modelini kullanmıştır. Bu modelde bellek sayfaları yalnızca iki listeye ayrılır: son zamanlarda erişilenler (active) ve erişilmeyenler (inactive). Bellek baskısı (memory pressure) yükseldiğinde kswapd arka plan süreci uyanır ve inactive listedeki sayfaları diske (swap veya depolama) yazarak tahliye eder.
Ancak günümüzün 32 GB - 512 GB RAM'li modern sunucularında bu ikili ayrım yetersiz kalır: İki liste arasındaki geçişler kaba bir tahminle yapılır ve sıkça kullanılan sıcak veritabanı sayfaları yanlışlıkla diske atılır. Diske atılan sayfa birkaç milisaniye sonra uygulama tarafından tekrar talep edilir (Page Refault). Bu durum diski I/O kuyruğuna sokar, kswapd tek çekirdeği %100 kilitler ve sunucu 5-15 saniyelik mikro donmalar (thrashing) yaşar.
Google mühendisi Yu Zhao tarafından geliştirilen ve Linux 6.1 ile çekirdeğe giren MGLRU (CONFIG_LRU_GEN), sayfaları zamana dayalı kuşaklar (generations) halinde gruplandırır:
Klasik LRU'da kswapd daemon'u aktif sayfaları tararken global kilitler (lru_lock) nedeniyle çekirdekler arası çekişmeye girer. MGLRU ise sayfa tablolarını taranabilir ağaçlar halinde gezerek kilit süresini minimuma indirir.
Yoğun web sitelerinde ve Kubernetes küme düğümlerinde bellek %90 doluluğa ulaştığında kswapd'nin harcadığı işlemci gücü %40 ila %65 oranında azalır. Bu tasarruf edilen işlemci gücü doğrudan web uygulamasına (Nginx, Node.js, Go) tahsis edilir.
1. Anında Etkinleştirme: echo 7 | sudo tee /sys/kernel/mm/lru_gen/enabled komutuyla sunucuyu yeniden başlatmadan MGLRU'yu tam modda devreye alabilirsiniz.
2. Kalıcı systemd Servisi: Yeniden başlatmalarda ayarın korunması için mglru-tuning.service oluşturup etkinleştirin veya GRUB çekirdek satırına lru_gen=y ekleyin.
3. İstatistikleri İzleme: cat /sys/kernel/mm/lru_gen/stats komutuyla kuşak sayılarını, korunan sayfa adetlerini ve tahliye verimliliğini anlık olarak takip edebilirsiniz.