PostgreSQL — Hugepage Kullanımı ve Etkileri

Linux Hugepage Kavramı

Linux hugepage kavramı bellekteki sanal bir bloğun en küçük boyutunu belirler. Yani sanal page’lerin bir tanesinin boyutunu belirler. THP(Transparent Huge Page) kavramından farklıdır. İkisinin karıştırılmaması önemlidir.

Modern x86 CPU mimarilerinde hugepage’ler 4kB,2MB yada 1GB olarak ayarlanabilir. Bu konu özellikle veritabanı performansına doğrudan etki etmektedir.

Linux üzerindeki bir memory page verinin en küçük alanda yönetilebileceği sanal page olarak bilinmektedir. Burada dikkat edilmesi gereken nokta, işletim sistemi üzerinde öntanımlı olarak hugepage değeri 4kB olarak belirlenmektedir. Memory kullanıldığında birçok 4kB page olacağı için işletim sistemi bu sayının fazla olması nedeniyle zaman zaman zorlanabilir ve birçok iş yapması gerekebilir. Bunu optimize etmek için hugepage değerini 2MB gibi bir değer yapabiliriz. Bu sayede, page sayısı az olacağı için daha az işlem yapılması gerekmektedir.

Linux Hugepage Ayarlanması

Hugepage’lerin doğrudan etki ettiği kısım pagetable boyutudur. İşletim sistemindeki pagetable’ın boyutu monitor edilmesi gereken bileşenlerden birisidir. Aşağıdaki gibi örnek bir komutla pagetable’ın boyutu monitör edilebilir.

cat /proc/meminfo | grep PageTablesroot@76bbafba2051:/# cat /proc/meminfo | grep PageTables
PageTables: 75320 kB

Yukarıda görüleceği üzere pagetable’ın toplam boyutu 75MB civarı olarak görülmektedir. Bu değer ufak bir değer olarak görülebilir. Ancak production sistemlerde daha büyük boyutlara ulaşabilir.

Sistemdeki güncel ve mevcut hugepage boyutunu sorgulamak için aşağıdaki komut kullanılabilir. Memory bilgisi bölümünden bu değer öğrenilebilir.

root@76bbafba2051:/# grep ^Hugepagesize /proc/meminfo
Hugepagesize: 2048 kB
root@91385bbfae42:/# cat /proc/meminfo | grep Huge
AnonHugePages: 0 kB
ShmemHugePages: 0 kB
FileHugePages: 0 kB
HugePages_Total: 512
HugePages_Free: 479
HugePages_Rsvd: 263
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 1048576 kB

Yukarıda görüldüğü gibi hugepage boyutu 2048kB olarak görülmektedir. Bu boyutu değiştirmek için sysctl konfigürasyonuna aşağıdaki parametre ile yeni bir kayıt ekleyebiliriz. Bu sayede, hugepage boyutu değiştirilebilir.

vm.nr_hugepages = 512
vm.nr_hugepages = 1024
vm.nr_hugepages = 2048
vm.nr_hugepages = 4096

PostgreSQL Hugepage Performans Sonuçları

Aşağıdaki sonuçlardan görüleceği üzere hugepage sayısındaki değişimler latency ve TPS anlamında fark yaratmaktadır. Test ortamındaki kaynaklar ve konfigürasyonlar temel konfigürasyonlar olarak ayarlanmıştır.

Buradaki temel motivasyon hugepage değerinin değişiminin performansa bıraktığı etkiyi incelemektir.

Referans

--

--

Database Platform Engineer | Bogazici University — Software Engineering

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store