Dedicated Sunucu

CPU Sabitleme ve NUMA: Çok Soketli Sunucularda Performans

Eşit olmayan bellek erişimi, belirtiler, sabitleme yöntemi, doğru boyutlandırma, ölçüm ve hangi iş yüklerinin etkilendiği. CPU Sabitleme ve NUMA: Çok Soketli…

CPU Sabitleme ve NUMA: Çok Soketli Sunucularda Performans
İçindekiler
  1. Eşit Olmayan Bellek Erişimi
  2. Belirtiler
  3. CPU Sabitleme
  4. Doğru Boyutlandırma
  5. Ölçüm Yapmak
  6. Hangi İş Yükleri Etkilenir?
  7. Kaynak Planlaması
  8. Ne Zaman Yapılmamalı?
  9. Sonuç
  10. Sıkça Sorulan Sorular (SSS)
  11. Çekirdek ekledim ama hızlanmadı, neden?
  12. Sadece işlemciyi sabitlemek yeterli mi?
  13. Hangi iş yükleri bundan fayda görür?
  14. Sabitlemenin bir maliyeti var mı?

CPU Sabitleme ve NUMA: Çok Soketli Sunucularda Performans

Sunucunuzda iki işlemci soketi var, toplam kırk çekirdek. Sanal makinelerinize bol bol çekirdek verdiniz ama performans beklediğiniz gibi değil. Sorun çekirdek sayısında değil, hangi çekirdeği kullandıklarında olabilir.

Bu yazı, çok soketli sunucularda bellek erişim mimarisini ele alıyor.

Eşit Olmayan Bellek Erişimi

Çok soketli sunucularda bellek işlemcilere bölünmüştür:

  • Her sokete bağlı kendi bellek modülleri vardır.
  • İşlemci kendi belleğine hızlı erişir.
  • Diğer soketin belleğine daha yavaş erişir.
  • Arada bir bağlantı yolu vardır.

Üçüncü madde performans farkının kaynağıdır: uzak bellek erişimi, yerel erişime göre belirgin şekilde yavaştır ve bu fark yoğun bellek kullanan iş yüklerinde ölçülebilir sonuçlar doğurur.

Tek soketli sunucularda bu sorun yoktur — tüm bellek eşit mesafededir. Sorun yalnızca iki veya daha fazla soketli sistemlerde ortaya çıkar.

Belirtiler

Bu mimariden kaynaklanan performans sorunları şöyle görünür:

Belirti Olası neden
Çekirdek ekledim, hızlanmadı İki sokete yayılmış olabilir
Performans değişken Süreç soketler arası geziniyor
Aynı yapılandırma farklı sonuç Yerleşim rastgele belirlenmiş
Bellek yoğun iş yavaş Uzak bellek erişimi

Birinci satır en şaşırtıcı olanıdır: bir sanal makineye tek sokete sığmayacak kadar çekirdek vermek, performansı artırmak yerine düşürebilir — çünkü artık bellek erişimlerinin bir kısmı uzak hâle gelir.

Bu, kaynak eklemenin her zaman iyileştirme getirmediğine dair somut bir örnektir.

CPU Sabitleme

Çözüm, hangi sürecin hangi çekirdekte çalışacağını belirlemektir:

  1. Sanal makine tek sokete sığacak şekilde boyutlandırılır.
  2. O soketin çekirdeklerine sabitlenir.
  3. Belleği de aynı soketten tahsis edilir.
  4. Tüm erişimler yerel kalır.

Üçüncü madde sabitlemenin yarım kalmasını önler: yalnızca işlemciyi sabitleyip belleği serbest bırakmak, sorunu çözmez — süreç yerel çekirdekte çalışır ama uzak bellekten okur.

Sanallaştırma katmanları genellikle ikisini birlikte yapılandırma imkânı sunar. Doğru ayar, çekirdek ve bellek tahsisinin aynı düğümden yapılmasıdır.

Doğru Boyutlandırma

Sanal makine tasarımında dikkat edilecekler:

  • Çekirdek sayısı bir soketin kapasitesini aşmasın.
  • Bellek miktarı da o düğüme sığsın.
  • Aşması gerekiyorsa mimari bilgisi makineye aktarılsın.
  • Küçük makineleri bölmeye çalışmayın.

Üçüncü madde büyük makineler için gerekli bir ayardır: tek sokete sığmayan bir sanal makineye kendi düğüm yapısını bildirmek, içindeki işletim sisteminin de doğru yerleşim yapmasını sağlar.

Bu bilgi verilmezse, misafir sistem tüm belleğin eşit mesafede olduğunu varsayar ve kendi optimizasyonlarını yapamaz.

Dördüncü madde ise gereksiz karmaşıklıktan kaçınmak içindir. İki çekirdekli küçük bir makine için sabitleme yapmak, yönetim yükü getirir ama ölçülebilir bir kazanç sağlamaz.

Ölçüm Yapmak

Sabitlemenin işe yarayıp yaramadığını görmek için:

Ölçüm Ne gösterir
Düğüm bazlı bellek kullanımı Dağılım dengeli mi
Uzak erişim oranı Sabitleme çalışıyor mu
Bellek gecikmesi Gerçek etki
Uygulama yanıt süresi Nihai sonuç

Dördüncü satır tek anlamlı ölçüttür: uzak erişim oranını düşürmek teknik bir başarıdır ama uygulama yanıt süresi değişmediyse pratik bir kazanç yoktur.

Bazı iş yükleri bu mimariden neredeyse hiç etkilenmez — çok küçük veri kümesiyle çalışan veya işlemci yoğun uygulamalar gibi. Optimizasyona girmeden önce etkinin var olduğunu doğrulamak gerekir.

Hangi İş Yükleri Etkilenir?

Bu konuya yatırım yapmanın değerli olduğu durumlar:

  1. Büyük bellek kullanan veritabanları. En çok etkilenen.
  2. Bellek içi önbellek sunucuları.
  3. Analitik ve toplu işleme.
  4. Yüksek işlem hacimli uygulamalar.

Birinci madde açık ara en çok fayda görendir: belleği yoğun kullanan bir veritabanı sunucusunda doğru yerleşim, ölçülebilir bir performans farkı yaratır.

Buna karşılık web sunucuları, dosya sunucuları ve hafif uygulamalar bu optimizasyondan neredeyse hiç yararlanmaz. Emeği doğru yere yönlendirmek önemlidir.

Kaynak Planlaması

Sabitleme yapılan bir sunucuda kapasite planlaması değişir:

  • Toplam çekirdek sayısı tek başına anlamlı değildir.
  • Her düğümün kapasitesi ayrı hesaplanır.
  • Parçalanma oluşabilir. Boş çekirdek var ama sığmıyor.
  • Yerleşim planı belgelenmelidir.

Üçüncü madde pratik bir sınır getirir: iki düğümde de birer çekirdek boş olabilir ama iki çekirdeklik bir makine sabitlenerek yerleştirilemez.

Bu, sabitlemenin bedelidir — esneklik azalır. Yoğun kullanılan sunucularda bu kayıp, kazanılan performanstan büyük olabilir.

Bu tür ince ayarları yapabilmek, donanıma tam erişim gerektirir. Kendi yapılandırmanızı yönettiğiniz fiziksel sunucu hizmeti ortamında bu ayarlar doğrudan uygulanabilir; paylaşımlı sanallaştırma platformlarında genellikle mümkün değildir.

Ne Zaman Yapılmamalı?

Sabitleme her zaman doğru karar değildir:

  1. Tek soketli sunucularda gereksizdir
  2. Küçük makinelerde kazanç ölçülemez
  3. Sık göç yapılan ortamlarda esnekliği bozar
  4. Yük dengesiz dağılıyorsa kaynak israfı yaratır

Üçüncü madde önemli bir çelişki içerir: sabitlenmiş bir makinenin başka bir sunucuya göçü, hedefte aynı yerleşimin sağlanabilmesini gerektirir — bu her zaman mümkün olmaz.

Bu yüzden yüksek erişilebilirlik önceliğinizse, sabitlemeyi yalnızca gerçekten fayda gördüğü kritik makinelerde uygulamak daha dengeli bir yaklaşımdır.

Sonuç

Çok soketli sunucularda bellek eşit mesafede değildir ve bu, beklenmedik sonuçlar üretir: bir sanal makineye tek sokete sığmayacak kadar çekirdek vermek, performansı artırmak yerine düşürebilir. Sabitleme yaparken işlemciyle birlikte belleği de aynı düğümden tahsis edin — yalnızca işlemciyi sabitlemek sorunu çözmez. Ancak bu optimizasyondan asıl fayda gören iş yükleri bellek yoğun veritabanlarıdır; web sunucuları neredeyse hiç etkilenmez. Ve sabitleme esnekliği azaltır — parçalanma nedeniyle boş çekirdekler kullanılamaz hâle gelebilir.

Sıkça Sorulan Sorular (SSS)

Çekirdek ekledim ama hızlanmadı, neden?

Sanal makineniz tek sokete sığmayacak kadar büyük olabilir. Bu durumda çekirdekler iki sokete yayılır ve bellek erişimlerinin bir kısmı uzak hâle gelir — kazanç, artan gecikmeyle silinir hatta tersine döner.

Sadece işlemciyi sabitlemek yeterli mi?

Yeterli değil. Yalnızca işlemciyi sabitlerseniz süreç yerel çekirdekte çalışır ama uzak bellekten okumaya devam edebilir. Bellek tahsisinin de aynı düğümden yapılması gerekir; sanallaştırma katmanları genellikle ikisini birlikte ayarlama imkânı sunar.

Hangi iş yükleri bundan fayda görür?

Bellek yoğun veritabanları açık ara en çok. Bellek içi önbellek sunucuları ve analitik iş yükleri de etkilenir. Buna karşılık web sunucuları, dosya sunucuları ve hafif uygulamalar bu optimizasyondan neredeyse hiç yararlanmaz.

Sabitlemenin bir maliyeti var mı?

Esneklik kaybı. Parçalanma oluşabilir — iki düğümde birer çekirdek boş olsa bile iki çekirdeklik bir makine yerleştirilemez. Ayrıca sabitlenmiş bir makinenin başka sunucuya göçü, hedefte aynı yerleşimin sağlanabilmesini gerektirir.