Pages

6 Ocak 2011 Perşembe

Linux’ta “Huge Pages” yapılandırması

“Big/Huge pages” özelliği Oracle SGA gibi paylaşımlı bellekler için ne kadar fiziksel ardışık büyük bellek sayfalarının tahsis edilebileceğini ve RAM ‘e iliştirileceğini tanımlayan bir özelliktir. Örneğin,  her biri 2GB SGA’ya sahip 3 tane Oracle instance için en azından 6GB büyük sayfa(large pages) tahsis edilmelidir. Böylece, 3 SGA da büyük sayfa kullanacak ve ana fiziksel bellek içinde kalacaktır. Bununla beraber aynı sistem içinde eğer ASM kullanılırsa ilave olarak 200MB paylaşımlı belleğe ihtiyaç olacaktır. Tabi bunun yanında başka Oracle prosesleride ilave paylaşımlı belleğe ihtiyaç duyacaktır.

Ancak çok büyük “Big/huge pages” tahsis edilmemesi tavsiye edilmektedir. Bu yeniden tahsis edilen sayfalar sadece paylaşımlı bellek tarafından kullanılabilir. Yani, sistem “out of memory” hatası verse ve swapping başlasa dahi diğer prosesler için paylaşımlı bellek tahsisleri olmayacaktır.

“Big/huge pages” kullanmanın avantajlarını saymak gerekirse;
  • Artan TLB hit performası (bunun önemi için detaylı analiz yazım http://uguroracle.blogspot.com/2010/12/oracle-10g-veritaban-icin-solaris.html adresinde yer almaktadır)
  • Sayfalar bellek içinde kilitlenir ve  dışarı taşmaz. Bu şekilde SGA gibi paylaşımlı belleklerin RAM içinde kalması garanti altına alınır.
  • Ardışık sayfalar yeniden tahsis edilir ve mesela SGA dışında başka bir iş için kullanılmazlar.
  • Sanal bellek parçasının daha büyük sayfa boyutunda olması nedeniyle kernel daha az kayıt tutar.
Linux 2.6 serisi kernellerde “huge pages” etkinleştirilmesi kernel inşa edilirken CONFIG_HUGETLB_PAGE özelliği ile sağlanır. Red Hat 4 versiyonununda desteklediği tüm kernellerde bu özellik varsayılan olarak etkindir.

x86 sistemlerde “huge pages” büyüklüğü başlangıçta 2048 KB’dir. “Huge pages” büyüklüğü /proc/meminfo dosyasında yer almaktadır.

# cat /proc/meminfo |grep Hugepagesize
Hugepagesize: 2048 kB

Huge pages özelliğini kullanmaya başlamak için alttaki işlemleri sırasıyla uygulayabilirsiniz.

  1. Hugepage hesaplama formülü;
            (SGA_SIZE/2M ) + 100
            Böylece 10GB büyüklüğünde bir SGA için huge pages değeri;
((10*1024)M / 2M ) + 100 = 5220

  1. Alttaki kernel parametresini /etc/sysctl.conf dosyasına ekleyin.
vm.nr_hugepages = 5220

  1. Alttaki komutu çalıştırın.
#sysctl –p

  1. /etc/security/limits.conf dosyasını alttaki gibi değiştirin ve sonrasında makineyi yeniden başlatın.
oracle  soft      memlock         10690560
oracle hard     memlock         10690560

** memlock parametresi Oracle kullanıcısının kendi adres boşluğuna ne kadar bellek kilitleyebileceğini belirtir. KB değeridir ve en az ( huge_pages * hugepagesize) formülü sonucu çıkan değer olmalıdır --> 5220 * 2048 = 10690560

  1. Alttaki komut ile “Toplam Huge page ve Huge page free” değerlerini kontrol edin.
#cat /proc/meminfo | grep -i huge

Alttaki gibi bir sonuç gelecektir.
HugePages_Total:   5220
HugePages_Free:    5220
HugePages_Rsvd:     00
Hugepagesize:     2048 kB
.
  1. Oracle veritabanını başlatın ve alttaki komut ile huge pages tahsis edilip edilmediğini kontrol edin.
#cat /proc/meminfo | grep -i huge

0 yorum:

Yorum Gönder