Büyük bellekli sunucularda (32 GB - 1 TB RAM) standart 4KB sayfaların getirdiği TLB Miss darbağacını, Transparent Huge Pages'in (THP) yol açtığı 100ms+ mikro donmaları ve Statik HugePages yapılandırmasını hesaplayın.
| Mod | Sayfa Boyutu | PTE Kaydı | Page Table RAM | TLB Miss | P99 Jitter | Uygunluk |
|---|---|---|---|---|---|---|
| Standart 4KB Sayfalar | 4 KB | 16.777.216 | 912 MB | %15.5 | 1.8 ms | Önerilmez |
| Transparent Huge Pages (THP) | 2 MB (Dinamik) | 32.768 | 384 MB | %0.8 | 85 ms | Önerilmez |
| Statik HugePages (HugeTLB 2MB) | 2 MB (Sabit) | 32.768 | 0.25 MB | %0.6 | 0.08 ms | Tavsiye Edilir |
| Statik HugePages (HugeTLB 1GB) | 1 GB (Devasa) | 64 | 0.0005 MB | %0.05 | 0.03 ms | Önerilmez |
Seçtiğiniz 64 GB bellek havuzu için gereken vm.nr_hugepages ve THP kapatma komutları.
# 1. THP'yi (Transparent Huge Pages) Kesin Olarak Kapatın (Jitter'ı Sıfırlama):
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
# Kalıcı hale getirmek icin /etc/sysctl.d/99-hugepages.conf dosyasina ekleyin:
# 64 GB veritabani havuzu icin ayrilacak 2MB Statik HugePage sayisi:
vm.nr_hugepages = 35390
vm.hugetlb_shm_group = 1001 # postgres veya mysql kullanici grubu ID'si
# Ayarlari aninda yukleyin:
sudo sysctl -p /etc/sysctl.d/99-hugepages.conf
# 2. Ayrilan HugePage durumunu dogrulayin:
grep -i HugePages_ /proc/meminfox86-64 işlemcilerde varsayılan sanal bellek sayfa boyutu 4 Kilobayttır (4KB). 64 GB bellek kullanan bir PostgreSQL veya Redis örneğinde işletim sistemi tam 16.7 milyon adet sayfa girişini (PTE) yönetmek zorundadır.
Modern işlemcilerin L1/L2 Translation Lookaside Buffer (TLB) donanım önbellekleri yalnızca birkaç bin sayfayı tutabilir. Bellek aralığı genişledikçe TLB kaçırma (TLB Miss) oranı artar ve işlemci her bellek erişiminde 4 seviyeli sayfa tablosunu bellekte taramak (Page Walk) zorunda kalır; bu da CPU çevrimlerinin %10-15'ini boşa harcar.
Linux'un Transparent Huge Pages (THP) özelliği, 4KB sayfaları çalışma zamanında dinamik olarak 2MB bloklara birleştirmeye çalışır. Ancak bellek parçalandığında (memory fragmentation), arka plandaki khugepaged çekirdek iş parçacığı bellek sayfalarını kilitler (direct compaction). Bu kilitlenme, transactional veritabanlarında 50 ms ila 250 ms süren ani P99.9 gecikme sıçramalarına (latency cliff) sebep olur.
Çözüm, THP'yi tamamen devre dışı bırakmak (echo never > .../transparent_hugepage/enabled) ve veritabanı bellek havuzu için çekirdek seviyesinde Statik HugePages (HugeTLB) tahsis etmektir. Statik HugePage blokları önceden kilitlendiği için asla parçalanmaz, arka plan kompaksiyonu tetiklemez ve milisaniye-altı kararlı gecikme sunar.