
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:
- Sanal makine tek sokete sığacak şekilde boyutlandırılır.
- O soketin çekirdeklerine sabitlenir.
- Belleği de aynı soketten tahsis edilir.
- 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:
- Büyük bellek kullanan veritabanları. En çok etkilenen.
- Bellek içi önbellek sunucuları.
- Analitik ve toplu işleme.
- 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:
- Tek soketli sunucularda gereksizdir
- Küçük makinelerde kazanç ölçülemez
- Sık göç yapılan ortamlarda esnekliği bozar
- 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.