CPU Pinning ve NUMA Rehberi
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?
- NUMA Nedir?
- CPU Pinning ve NUMA Neden Önemlidir?
- Sunucu Mimarisini Analiz Etme
- Linux Üzerinde CPU Pinning Nasıl Yapılır?
- NUMA Optimizasyonu Nasıl Yapılır?
- Sanallaştırma Ortamlarında Kullanım Senaryoları
- Performans Testleri ve İzleme
- En İyi Uygulamalar
- Yaygın Hatalar ve Çözümleri
- Sıkça Sorulan Sorular
- Sonuç
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
--membindhatalı 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
tasksetkomutları yeniden başlatma sonrası kaybolabilir. Kalıcı yapı içinsystemdservis 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