Büyük tampon bellekli (shared_buffers / innodb_buffer_pool) veritabanlarında işlemci TLB önbellek ıskalamalarını ve dinamik THP bellek birleştirme donmalarını (latency cliffs) engelleyin; statik 2MB HugePages kurallarını hesaplayın.
Veritabanı tamponu (buffer pool) için toplam RAM'in %50 ila %75'i ayrılmalıdır.
PostgreSQL için kilitler ve işlem tabloları gözetilerek %6 güvenlik marjı eklenir.
8 GB'lık tampon bellek standart 4 KB sayfalarla yönetildiğinde çekirdek tam 2.097.152 adet sayfa kaydını takip etmek zorundadır. İşlemcinin dahili TLB (Translation Lookaside Buffer) önbelleği bu devasa tabloyu tutamaz ve CPU her bellek sorgusunda ana belleğe giderek döngü kaybeder (TLB Miss). 2 MB Statik HugePages ile bu sayı yalnızca 4.342 sayfaya düşerek (483x küçülme) doğrudan CPU önbelleğine sığar ve veritabanı işlem kapasitesini %10-%20 artırır.
vm.nr_hugepages çekirdek parametresi (~8684 MB)
2.097.152 sayfa yerine 4342 sayfa
İşlemci bellek haritası arama maliyetinin neredeyse sıfırlanması
Ağır sorgu ve indeks taramalarında elde edilen hız kazancı
# /etc/sysctl.d/99-hugepages.conf # Linux Statik HugePages Çekirdek Yapılandırması # Ayrılacak 2MB Statik HugePage Sayısı (Toplam ~8684 MB) vm.nr_hugepages = 4342 # Veritabanı Kullanıcısı Paylaşılan Bellek Grubu (GID: 999) vm.hugetlb_shm_group = 999 # Max Shared Memory Segment Sınırı (Byte Cinsinden) kernel.shmmax = 9105833984 kernel.shmall = 2223104
Linux işletim sisteminde standart bellek yönetimi 4 KB boyutundaki küçük sayfalarla çalışır. Örneğin PostgreSQL'de 16 GB shared_buffers veya MySQL'de 32 GB innodb_buffer_pool_size tanımladığınızda, çekirdek tam 8.388.608 adet bağımsız 4 KB sayfa tablosu kaydı tutar. İşlemcinin (CPU) donanımsal TLB (Translation Lookaside Buffer) önbelleği yalnızca 1.500-2.000 girdi saklayabildiği için, her bellek aramasında %95+ oranında TLB Miss yaşanır ve işlemci zamanının %15'i ana bellekte sayfa tablosu aramaya (page table walk) harcanır.
Sayfa boyutunu 4 KB'tan 2 MB'a (veya 1 GB) çıkardığınızda, sayfa tablosu tam 512 kat küçülür. 16 GB bellek için 4.2 milyon sayfa yerine yalnızca 8.192 sayfa tutulur. Bu sayede veritabanının neredeyse tüm bellek haritası doğrudan işlemcinin L1/L2/L3 TLB önbelleğine sığar; sayfa tablosu arama gecikmesi sıfırlanır ve yoğun veritabanı işlemlerinde %10 ila %20 saf verim artışı elde edilir.
Transparent Huge Pages (THP), sayfaları arka planda dinamik olarak 2 MB'a yükseltmeye çalışır. Ancak bellek parçalandığında çekirdeğin khugepaged süreci 2 MB bitişik blok oluşturabilmek için veritabanı iş parçacıklarını aniden durdurur (compaction stall) ve rastgele 200-500ms'lik gecikme uçurumlarına (latency cliffs) neden olur. Doğru ve profesyonel yaklaşım: THP'yi tamamen kapatıp, önyükleme anında vm.nr_hugepagesile statik rezervasyon yapmaktır.