CPU Pinning ve NUMA Rehberi

CPU Pinning ve NUMA Rehberi - Corelux
Paylaş:

CPU Pinning ve NUMA Rehberi: Sunucu Performansını Doğru Çekirdek ve Bellek Yerleşimiyle Optimize Etme

Son Güncelleme: Haziran 2026

CPU pinning, NUMA optimizasyonu ve doğru kaynak yerleşimi; yoğun işlem yapan web uygulamaları, veritabanları, sanallaştırma platformları ve oyun sunucuları için kritik performans konularıdır. Bu rehberde Linux sunucularda işlemci çekirdeği sabitleme, NUMA düğümü yönetimi, sanal makine kaynak planlaması ve performans ölçüm adımlarını pratik örneklerle ele alacağız.

İçindekiler

CPU Pinning Nedir?

CPU pinning, bir işlem, servis, konteyner ya da sanal makinenin yalnızca belirli işlemci çekirdeklerinde çalışacak şekilde sınırlandırılmasıdır. Türkçede bu kavram işlemci çekirdeği sabitleme olarak açıklanabilir. Normal şartlarda Linux çekirdeği, çalışan süreçleri uygun gördüğü CPU çekirdekleri arasında taşıyabilir. Bu davranış genel amaçlı sistemler için verimlidir; ancak düşük gecikme, yüksek kararlılık veya öngörülebilir performans gereken ortamlarda istenmeyen dalgalanmalara yol açabilir.

Örneğin yoğun trafik alan bir web sunucusunda Nginx, PHP-FPM ve veritabanı aynı fiziksel çekirdekler üzerinde sürekli yer değiştirirse, işlemci önbelleği yani CPU cache verimliliği düşebilir. Benzer şekilde oyun sunucuları, VoIP uygulamaları, gerçek zamanlı veri işleme servisleri ve yüksek sorgu hacmine sahip veritabanları için çekirdek yerleşimi önemli hale gelir.

CPU pinning ile belirli servisleri belirli çekirdeklere bağlayarak kaynak kullanımını daha tahmin edilebilir hale getirebilirsiniz. Bu yöntem özellikle kiralık sunucu, VDS, özel sanallaştırma altyapısı ve yüksek performanslı uygulama sunucularında tercih edilir. Fiziksel kaynak üzerinde daha fazla kontrol ihtiyacı olan projelerde Corelux Kiralık Sunucu ve Sanal Sunucu seçenekleri değerlendirilebilir.

NUMA Nedir?

NUMA, İngilizce Non-Uniform Memory Access ifadesinin kısaltmasıdır ve Türkçeye tekdüze olmayan bellek erişimi olarak çevrilebilir. NUMA mimarisinde işlemciler, belleğe eşit mesafede değildir. Çok soketli sunucularda her işlemci soketinin kendisine daha yakın olan bellek kanalları bulunur. Bir işlemci kendi yerel belleğine eriştiğinde daha düşük gecikme elde ederken, başka bir sokete bağlı belleğe eriştiğinde gecikme artabilir.

Bu durum özellikle çift işlemcili veya daha büyük fiziksel sunucularda önemlidir. Sunucuda iki CPU soketi varsa, işletim sistemi bunları genellikle ayrı NUMA node yani NUMA düğümü olarak görür. Her NUMA düğümünde belirli CPU çekirdekleri ve bu çekirdeklere yakın bellek alanı bulunur. Bir uygulama bir NUMA düğümündeki çekirdeklerde çalışırken verilerini diğer düğümdeki bellekten okuyorsa, performans kaybı yaşanabilir.

NUMA optimizasyonunun amacı, uygulamanın çalıştığı CPU çekirdekleri ile kullandığı belleği mümkün olduğunca aynı NUMA düğümünde tutmaktır. Böylece bellek erişim gecikmesi azaltılır, işlemci önbelleği daha verimli kullanılır ve yüksek yük altında daha dengeli performans elde edilir.

CPU Pinning ve NUMA Neden Önemlidir?

Sunucu performansında yalnızca işlemci modeli, RAM miktarı veya disk tipi belirleyici değildir. Kaynakların nasıl yerleştirildiği, hangi servisin hangi çekirdekte çalıştığı ve belleğe hangi yoldan eriştiği de performansı doğrudan etkiler. Özellikle modern sunucularda çok çekirdekli işlemciler, SMT teknolojisi yani Simultaneous Multithreading ve çok kanallı bellek mimarisi yaygın olduğu için kaynak planlaması daha önemli hale gelmiştir.

  • Daha düşük gecikme: İşlemler belirli çekirdeklere sabitlendiğinde çekirdekler arası geçiş azalır ve işlemci önbelleği daha verimli kullanılır.
  • Daha tutarlı performans: Kritik servisler, arka plan görevlerinden ayrıştırılarak ani performans düşüşleri azaltılabilir.
  • Daha iyi sanallaştırma verimi: Sanal makinelerin vCPU yani sanal işlemci yerleşimi doğru planlandığında host üzerindeki kaynak çakışmaları azalır.
  • NUMA gecikmesini azaltma: CPU ve bellek aynı NUMA düğümünde tutulduğunda özellikle veritabanı, cache ve analitik iş yüklerinde daha iyi sonuç alınabilir.
  • Lisans ve kaynak izolasyonu: Bazı yazılımlar çekirdek sayısına göre lisanslandığı için CPU pinning, kaynak sınırlandırma stratejisinin parçası olabilir.

Bu avantajlara rağmen CPU pinning her zaman otomatik olarak daha iyi performans anlamına gelmez. Yanlış yapılandırma, bazı çekirdeklerin aşırı yüklenmesine ve diğer çekirdeklerin boşta kalmasına neden olabilir. Bu nedenle önce sistem mimarisi analiz edilmeli, ardından kontrollü testlerle yapılandırma doğrulanmalıdır.

Sunucu Mimarisini Analiz Etme

CPU pinning veya NUMA optimizasyonu yapmadan önce sunucunun işlemci, çekirdek, thread ve bellek topolojisini anlamanız gerekir. Linux üzerinde bu bilgiler birkaç temel komutla görüntülenebilir.

İşlemci Topolojisini Görüntüleme

lscpu komutu, işlemci mimarisi hakkında hızlı bir özet sunar. Çekirdek sayısı, soket sayısı, thread yapısı ve NUMA düğümleri bu çıktıda görülebilir.

lscpu

Örnek olarak şu alanlara özellikle dikkat edilmelidir:

  • CPU(s): Sistem tarafından görülen toplam mantıksal işlemci sayısıdır.
  • Core(s) per socket: Her fiziksel işlemci soketindeki fiziksel çekirdek sayısını gösterir.
  • Thread(s) per core: SMT veya Hyper-Threading kullanılıyorsa her çekirdeğin kaç thread sunduğunu gösterir.
  • NUMA node(s): Sistemde kaç NUMA düğümü olduğunu belirtir.
  • NUMA node0 CPU(s): Belirli NUMA düğümüne bağlı CPU listesini gösterir.

NUMA Donanım Bilgisini Görüntüleme

numactl aracı yüklüyse NUMA düğümlerini ve bellek dağılımını görmek için şu komut kullanılabilir:

numactl --hardware

Eğer komut sistemde yoksa Debian ve Ubuntu tabanlı sistemlerde şu şekilde kurulabilir:

apt update
apt install numactl -y

RHEL, AlmaLinux ve Rocky Linux gibi sistemlerde ise şu komut kullanılabilir:

dnf install numactl -y

Çalışan İşlemlerin CPU Kullanımını İzleme

htop, top ve pidstat gibi araçlar çalışan süreçlerin CPU kullanımını izlemek için kullanılır. Özellikle htop üzerinde çekirdek bazlı kullanım grafikleri, hangi çekirdeklerin yoğun çalıştığını anlamayı kolaylaştırır.

htop

Daha detaylı süreç bazlı izleme için şu komut kullanılabilir:

pidstat -u -p ALL 1

Linux Üzerinde CPU Pinning Nasıl Yapılır?

Linux üzerinde CPU pinning için en temel araçlardan biri taskset komutudur. taskset, bir süreci belirli CPU çekirdeklerinde çalıştırmaya veya halihazırda çalışan bir sürecin CPU affinity yani işlemci yakınlığı ayarını değiştirmeye yarar.

Yeni Bir Komutu Belirli CPU Çekirdeklerinde Çalıştırma

Bir uygulamayı yalnızca 2 ve 3 numaralı CPU çekirdeklerinde çalıştırmak için şu örnek kullanılabilir:

taskset -c 2,3 ./uygulama

Bu komut, uygulama adlı sürecin yalnızca belirtilen çekirdeklerde çalışmasını sağlar. Eğer uygulama çok thread kullanıyorsa, bu threadler de aynı çekirdek kümesi içinde planlanır.

Çalışan Bir Sürecin CPU Affinity Değerini Değiştirme

Önce sürecin PID yani process identifier değerini bulun:

pidof nginx

Ardından ilgili PID için çekirdek sabitleme uygulanabilir:

taskset -cp 4,5,6,7 12345

Burada 12345 örnek PID değeridir. Gerçek sistemde kendi servisinizin PID değerini kullanmanız gerekir.

Systemd Servislerinde CPU Sabitleme

Kalıcı ve yönetilebilir bir yapı için systemd servis dosyalarında CPUAffinity parametresi kullanılabilir. Örneğin özel bir uygulama servisini belirli çekirdeklere sabitlemek için override dosyası oluşturabilirsiniz:

systemctl edit uygulama.service

Açılan dosyaya şu yapı eklenebilir:

[Service]
CPUAffinity=2 3 4 5

Değişiklikten sonra servis yöneticisini yeniden yükleyip servisi yeniden başlatın:

systemctl daemon-reload
systemctl restart uygulama.service

Bu yöntem, manuel taskset kullanımına göre daha kalıcıdır ve sunucu yeniden başladığında ayarın korunmasını sağlar.

NUMA Optimizasyonu Nasıl Yapılır?

NUMA optimizasyonunda temel hedef, uygulamanın CPU ve bellek kullanımını aynı NUMA düğümünde tutmaktır. Bunun için numactl aracı kullanılabilir. Ancak bu ayarlar uygulanmadan önce uygulamanın bellek tüketimi, thread davranışı ve yük profili iyi analiz edilmelidir.

Uygulamayı Belirli NUMA Düğümünde Çalıştırma

Bir uygulamayı NUMA node 0 üzerindeki CPU ve bellekle çalıştırmak için şu komut kullanılabilir:

numactl --cpunodebind=0 --membind=0 ./uygulama

Bu komut, uygulamanın CPU kullanımını ve bellek tahsisini NUMA node 0 ile sınırlar. Eğer uygulamanın bellek ihtiyacı node 0 üzerindeki kullanılabilir belleği aşarsa performans sorunları veya bellek tahsis hataları yaşanabilir.

NUMA Düğümlerine Göre Bellek Kullanımını İzleme

numastat komutu, NUMA düğümleri arasında bellek erişiminin nasıl dağıldığını anlamak için yararlıdır:

numastat

Süreç bazlı inceleme için:

numastat -p 12345

Bu çıktı, belirli bir sürecin hangi NUMA düğümlerinden bellek kullandığını gösterir. Eğer süreç sürekli uzak NUMA düğümünden bellek kullanıyorsa, CPU ve bellek yerleşimi yeniden planlanmalıdır.

Veritabanlarında NUMA Dikkati

MySQL, MariaDB, PostgreSQL, Redis ve benzeri servisler yüksek bellek kullanabilir. Büyük buffer havuzları, cache alanları ve bağlantı yükleri nedeniyle NUMA yerleşimi bu servislerde belirgin etki yaratabilir. Özellikle veritabanı tek bir NUMA düğümüne sığacak şekilde yapılandırılabiliyorsa, CPU ve bellek bağlama performans tutarlılığını artırabilir. Ancak çok büyük veritabanlarında tüm belleği tek düğüme zorlamak yerine dengeli yerleşim stratejisi daha doğru olabilir.

Sanallaştırma Ortamlarında Kullanım Senaryoları

CPU pinning ve NUMA optimizasyonu, sanallaştırma ortamlarında daha da kritik hale gelir. Çünkü fiziksel sunucu üzerinde birden fazla sanal makine çalışır ve her sanal makine kendi içinde vCPU kaynaklarını kullanır. Eğer sanal makineler rastgele fiziksel çekirdeklere dağıtılırsa, yoğun iş yüklerinde çekirdek çakışması, cache kirliliği ve NUMA gecikmesi oluşabilir.

Senaryo Önerilen Yaklaşım Dikkat Edilecek Nokta
Yoğun veritabanı sanal makinesi vCPU ve bellek aynı NUMA düğümünde planlanmalı Bellek ihtiyacı tek düğümü aşıyorsa test yapılmalı
Oyun sunucusu Düşük gecikme için belirli fiziksel çekirdekler ayrılmalı Arka plan servisleri aynı çekirdeklere bindirilmemeli
Web hosting altyapısı Yoğun kullanıcılar için kaynak izolasyonu uygulanmalı Her kullanıcıyı sabitlemek yerine servis sınıfları ayrılmalı
CI/CD veya derleme sunucusu İş yükü geçici ise esnek CPU planlama korunabilir Aşırı pinning kaynak israfına neden olabilir
Gerçek zamanlı analiz uygulaması CPU pinning, NUMA bağlama ve izole çekirdek birlikte kullanılabilir Önce gecikme testi yapılmalı

VDS ve VPS ortamlarında son kullanıcı çoğu zaman fiziksel NUMA topolojisini doğrudan yönetemez. Ancak özel kaynaklı VDS, kurumsal sanallaştırma altyapısı veya dedicated sanallaştırma sunucusu kullanıldığında bu ayarlar planlanabilir. Türkiye lokasyonlu düşük gecikme ihtiyaçları için Türkiye VDS Sunucu veya fiziksel kaynak kontrolü gereken projelerde Türkiye Kiralık Sunucu tercih edilebilir.

vCPU Sayısını Fiziksel Çekirdekle Karıştırmamak

Bir sanal makineye 8 vCPU verilmesi, her zaman 8 fiziksel çekirdeğin tamamen ayrıldığı anlamına gelmez. Sanallaştırma katmanı, vCPU kaynaklarını fiziksel CPU üzerinde planlar. Bu nedenle aşırı vCPU vermek performansı artırmak yerine düşürebilir. Özellikle yoğun I/O ve bellek kullanan sistemlerde daha az ama doğru yerleştirilmiş vCPU, daha fazla ama rastgele planlanmış vCPU’dan daha iyi sonuç verebilir.

Performans Testleri ve İzleme

CPU pinning ve NUMA ayarlarının başarılı olup olmadığını anlamanın en sağlıklı yolu ölçüm yapmaktır. Ayar öncesi ve sonrası karşılaştırılabilir metrikler toplanmalıdır. Yalnızca işlemci kullanım yüzdesine bakmak yeterli değildir; gecikme, işlem tamamlama süresi, bellek erişimi, context switch yani bağlam değiştirme sayısı ve kuyruk bekleme süreleri de izlenmelidir.

Temel CPU İzleme Komutları

mpstat -P ALL 1

Bu komut, tüm CPU çekirdekleri için kullanım oranlarını gösterir. Belirli çekirdekler sürekli yüzde 90 üzerinde çalışırken diğerleri boşta kalıyorsa pinning planı dengesiz olabilir.

vmstat 1

vmstat, CPU bekleme, bellek, takas alanı ve I/O durumu hakkında hızlı bilgi sağlar. Özellikle r sütunundaki çalışmayı bekleyen süreç sayısı, CPU darboğazı hakkında fikir verebilir.

Gecikme ve Uygulama Seviyesi Ölçüm

Web uygulamalarında yalnızca sunucu metrikleri değil, uygulama yanıt süreleri de takip edilmelidir. Örneğin API servislerinde yüzde 95 ve yüzde 99 gecikme değerleri, ortalama yanıttan daha anlamlıdır. Çünkü CPU pinning genellikle ortalama performanstan çok performans dalgalanmasını azaltmak için uygulanır.

  • p95 gecikme: İsteklerin yüzde 95’inin altında tamamlandığı süreyi gösterir.
  • p99 gecikme: Uç değerleri ve nadir performans sıçramalarını anlamak için önemlidir.
  • Throughput: Saniye başına işlenen istek veya işlem sayısıdır.
  • Context switch: Süreçler arasında geçiş sayısının aşırı yükselmesi CPU verimini azaltabilir.

En İyi Uygulamalar

CPU pinning ve NUMA optimizasyonu güçlü araçlardır; fakat doğru tasarlanmadığında karmaşıklık yaratabilir. Bu nedenle üretim sistemlerinde kademeli ve ölçülebilir bir yaklaşım izlenmelidir.

  • Önce ölçüm yapın: Ayar yapmadan önce mevcut performans değerlerini kaydedin. Aksi halde iyileşme veya kötüleşme objektif olarak değerlendirilemez.
  • Kritik servisleri ayırın: Veritabanı, cache, web sunucusu ve arka plan işçilerini aynı çekirdeklere yığmayın.
  • SMT threadlerini anlayın: Mantıksal CPU numaraları her zaman bağımsız fiziksel çekirdek anlamına gelmez. Aynı fiziksel çekirdeğin sibling threadlerini doğru değerlendirin.
  • NUMA düğüm sınırlarını aşmayın: Bir uygulamayı tek NUMA düğümüne bağlarken o düğümde yeterli bellek bulunduğundan emin olun.
  • İzole çekirdekleri dikkatli kullanın: Çekirdek izolasyonu düşük gecikme için faydalı olabilir; ancak genel sistem görevlerinin çalışacağı yeterli çekirdek bırakılmalıdır.
  • Yedek plan hazırlayın: Yanlış pinning sonrası servis performansı düşerse ayarları hızla geri alabilecek bir prosedür oluşturun.
  • Servis bazlı yaklaşın: Tüm sistem için tek bir pinning şeması uygulamak yerine her uygulamanın davranışına göre planlama yapın.

Örnek Kaynak Yerleşimi

16 mantıksal CPU içeren bir sunucuda örnek yerleşim şu şekilde olabilir:

  • CPU 0-1: İşletim sistemi, izleme araçları ve hafif servisler.
  • CPU 2-5: Web sunucusu ve uygulama işçileri.
  • CPU 6-11: Veritabanı servisi.
  • CPU 12-13: Cache servisi veya mesaj kuyruğu.
  • CPU 14-15: Yedekleme, log işleme veya arka plan görevleri.

Bu yalnızca örnek bir şemadır. Gerçek planlama, sunucunun çekirdek topolojisine, NUMA düğümlerine, uygulama davranışına ve trafik desenine göre yapılmalıdır.

Yaygın Hatalar ve Çözümleri

CPU pinning ve NUMA yapılandırmalarında en sık yapılan hata, ayarları performans testi yapmadan üretime almaktır. Aşağıdaki sorunlar yaygın olarak görülür:

  • Aşırı pinning: Çok fazla servisi dar bir CPU aralığına sıkıştırmak performans kaybına neden olur. Çözüm olarak servisleri ayırın ve CPU kullanımını çekirdek bazında izleyin.
  • NUMA belleğini yanlış bağlama: Uygulama belleği tek düğüme sığmıyorsa --membind hatalı sonuç verebilir. Önce bellek tüketimini ölçün.
  • SMT threadlerini fiziksel çekirdek sanmak: Aynı fiziksel çekirdeğe ait iki mantıksal threadi iki tam çekirdek gibi planlamak yanıltıcıdır. lscpu -e çıktısını inceleyin.
  • İşletim sistemine çekirdek bırakmamak: Tüm çekirdekleri uygulamalara sabitlemek sistem servislerini zor durumda bırakabilir. OS için yeterli kaynak ayırın.
  • Kalıcı ayar yapmayı unutmak: Manuel taskset komutları yeniden başlatma sonrası kaybolabilir. Kalıcı yapı için systemd servis ayarlarını kullanın.

Hata ayıklama sürecinde önce ayarları basitleştirmek, ardından tek tek değişkenleri test etmek en sağlıklı yöntemdir. Aynı anda hem CPU pinning, hem NUMA bağlama, hem kernel parametresi, hem de uygulama içi thread ayarı değiştirilirse hangi değişikliğin sonucu etkilediğini anlamak zorlaşır.

Sıkça Sorulan Sorular

CPU pinning her sunucuda gerekli midir?

Hayır. CPU pinning özellikle düşük gecikme, yüksek trafik, yoğun veritabanı veya sanallaştırma iş yüklerinde faydalıdır. Standart web siteleri ve düşük trafikli uygulamalarda Linux zamanlayıcısının varsayılan davranışı çoğu zaman yeterlidir.

NUMA optimizasyonu VPS kullanıcıları için uygulanabilir mi?

Standart VPS ortamlarında fiziksel NUMA topolojisine doğrudan erişim sınırlı olabilir. Ancak özel kaynaklı VDS, kiralık sunucu veya size ayrılmış sanallaştırma altyapısında NUMA yerleşimi daha kontrollü planlanabilir.

Yanlış CPU pinning performansı düşürür mü?

Evet. Kritik servisleri az sayıda çekirdeğe sıkıştırmak, bazı çekirdekleri aşırı yükleyip diğerlerini boş bırakabilir. Bu nedenle ayar öncesi ve sonrası CPU, bellek, gecikme ve uygulama metrikleri karşılaştırılmalıdır.

CPU pinning ile CPU limiti aynı şey midir?

Hayır. CPU pinning bir sürecin hangi çekirdeklerde çalışacağını belirler. CPU limiti ise sürecin ne kadar işlemci zamanı kullanabileceğini sınırlar. İkisi birlikte kullanılabilir, ancak amaçları farklıdır.

Veritabanı sunucusunda CPU pinning yapmak mantıklı mı?

Yoğun sorgu alan ve büyük bellek kullanan veritabanlarında doğru planlandığında faydalı olabilir. Ancak veritabanının thread modeli, buffer boyutu, NUMA düğüm belleği ve disk I/O yapısı birlikte değerlendirilmelidir.

Systemd ile yapılan CPUAffinity ayarı kalıcı mıdır?

Evet. Servis override dosyası doğru oluşturulduysa ve systemctl daemon-reload sonrası servis yeniden başlatıldıysa ayar servis yeniden başlatmalarında korunur. Ancak servis dosyası güncellemelerinde override yapılandırmasının kontrol edilmesi önerilir.

NUMA node sayısı nasıl öğrenilir?

lscpu komutundaki NUMA node(s) satırı veya numactl --hardware komutu ile sistemdeki NUMA düğümleri görüntülenebilir.

Sonuç

CPU pinning ve NUMA optimizasyonu, doğru uygulandığında sunucu performansını daha öngörülebilir hale getiren gelişmiş kaynak yönetimi teknikleridir. Bu yöntemler özellikle yoğun veritabanı servisleri, gerçek zamanlı uygulamalar, sanallaştırma altyapıları, oyun sunucuları ve yüksek trafikli web sistemleri için değerlidir. Ancak her performans ayarında olduğu gibi burada da temel kural ölçmek, kontrollü değişiklik yapmak ve sonuçları karşılaştırmaktır.

Önce lscpu, numactl, mpstat ve uygulama metrikleriyle mevcut durumu analiz edin. Ardından kritik servisleri doğru çekirdek gruplarına yerleştirin, NUMA düğümlerini dikkate alın ve değişiklikleri kademeli olarak test edin. Fiziksel kaynak kontrolü, düşük gecikme ve özel performans ihtiyacı olan projelerde Corelux Kiralık Sunucu, Türkiye VDS Sunucu ve Bulut Sunucu çözümleriyle ihtiyacınıza uygun altyapıyı planlayabilirsiniz.

Yazar

Boran BAR

Chat on WhatsApp