Linux Sunucuda CPU Affinity Ayarı

Linux sunucularda performans optimizasyonu, modern veri merkezlerinin vazgeçilmez bir parçasıdır.

Reklam Alanı

Linux sunucularda performans optimizasyonu, modern veri merkezlerinin vazgeçilmez bir parçasıdır. CPU affinity ayarı, belirli bir işlem veya thread’in yalnızca belirli CPU çekirdeklerine (core) bağlanmasını sağlayarak sistem kaynaklarını daha verimli yönetmenize olanak tanır. Bu ayar, özellikle çok çekirdekli sistemlerde yük dengeleme sorunlarını çözer, önbellek tutarlılığını artırır ve gecikmeleri minimize eder. Yüksek trafikli web sunucuları, veritabanı kümeleri veya gerçek zamanlı uygulamalar için kritik öneme sahiptir. Bu makalede, CPU affinity’nin temel prensiplerini, uygulama adımlarını ve pratik ipuçlarını adım adım inceleyeceğiz, böylece sunucularınızı profesyonelce optimize edebileceksiniz.

CPU Affinity Kavramı ve Sistem Performansına Etkisi

CPU affinity, Linux çekirdeğinde bir sürecin (process) veya thread’in hangi CPU core’larına atanabileceğini belirleyen bir mekanizmadır. Varsayılan olarak, Linux scheduler (zamanlayıcı) süreçleri tüm mevcut core’lar arasında dinamik olarak dağıtır. Ancak bu, NUMA (Non-Uniform Memory Access) mimarilerinde veya hiper-threaded işlemcilerde cache miss’leri ve context switch’leri artırabilir. Affinity ile belirli core’lara sabitleme yaparak, L1/L2 cache’lerin daha uzun süre korunmasını sağlar ve genel throughput’u %20-50 oranında iyileştirebilirsiniz, özellikle I/O yoğun iş yüklerinde.

Afinity ayarını yönetmek için çekirdek maskeleri (CPU mask) kullanılır. Örneğin, 8 core’lu bir sistemde mask “0x0003” (binary 00000011) ilk iki core’u (0 ve 1) temsil eder. Bu yaklaşım, kritik uygulamaları izole core’lara yerleştirerek gürültülü komşu (noisy neighbor) etkisini önler. Uygulamadan önce cat /proc/cpuinfo ile core sayısını ve topolojisini kontrol edin, ardından lscpu ile NUMA node’larını inceleyin. Bu adımlar, affinity politikasını sistem mimarisine uyarlamanıza yardımcı olur.

Afinity Ayarının Avantajları

Afinity’nin başlıca avantajı, öngörülebilir performans sağlamasıdır. Örneğin, bir veritabanı sunucusunda sorgu thread’lerini belirli core’lara sabitleyerek, cache locality’yi artırır ve latency’yi düşürür. Gerçek zamanlı uygulamalarda (örneğin, finansal trading sistemleri) jitter’ı minimize eder. Ayrıca, enerji verimliliğini yükseltir; kullanılmayan core’lar idle kalır ve güç tüketimi azalır. Pratikte, Apache veya Nginx gibi web sunucularında worker process’leri core’lara pin’leyerek RPS (requests per second) değerini önemli ölçüde artırabilirsiniz. Bu ayar, systemd servis dosyalarında kalıcı hale getirilerek reboot’lara dayanıklı olur.

Potansiyel Dezavantajlar ve Dikkat Edilecek Noktalar

CPU affinity’nin yanlış uygulanması, dengesiz yük dağılımına yol açabilir; örneğin, tüm süreçleri aynı core’a sabitlemek bottleneck yaratır. NUMA sistemlerde uzak node core’larına affinity, bellek erişim gecikmelerini tetikler. Bu yüzden, öncelikle numactl --hardware ile topolojiyi analiz edin. Ayrıca, hyper-threading etkinse fiziksel core’ları tercih edin. Test ortamında stress-ng --cpu 4 --cpu-method matrixprod ile yük simüle ederek affinity’nin etkisini ölçün. Dengeli bir yaklaşım için, core’ları iş yükü tiplerine göre gruplayın: CPU-bound işler için yüksek frekans core’lar, I/O-bound için düşük latency olanlar.

Linux’ta CPU Affinity Uygulama Yöntemleri

Linux, CPU affinity’yi yönetmek için yerleşik araçlar sunar. En yaygın olanı taskset komutudur, sched_setaffinity() sistem çağrısını sarar. Kalıcı ayarlar için systemd unit dosyalarını düzenleyin veya cron job’larla entegre edin. Affinity mask’ini hex, decimal veya liste formatında belirtebilirsiniz; örneğin, core 2,4,6 için “0x55” (binary 01010101). Uygulama öncesi taskset -p $(pgrep process_name) ile mevcut affinity’yi sorgulayın. Bu yöntemler, root yetkisi gerektirir ve SELinux/AppArmor ile uyumludur.

  1. Süreç affinity’sini değiştirin: taskset -cp 0-3 PID (PID’yi /proc ile bulun).
  2. Yeni süreçler için: taskset -c 0,2,4 komut.
  3. Sistem genelinde: /etc/default/grub‘da GRUB_CMDLINE_LINUX_DEFAULT=”isolcpus=4-7″ ekleyin ve güncelleyin.

numactl, NUMA-aware affinity için idealdir. numactl --cpunodebind=0 --membind=0 komut ile node 0’ın CPU ve memory’sini kullanır. Bu, büyük bellekli sunucularda zorunludur. İzleme için htop veya mpstat -P ALL 1 kullanın; CPU% sütununda affinity etkisini görün.

taskset ile Adım Adım Uygulama

Taskset’i kullanmak için önce hedef süreci belirleyin: pgrep -f "nginx". Sonra taskset -cp 0xF 1234 ile ilk dört core’a (0-3) affinity verin. Doğrulama: taskset -p 1234 mask’i gösterir. Servis için /lib/systemd/system/nginx.service’e ExecStart=/usr/bin/taskset -c 0-3 /usr/sbin/nginx ekleyin, systemctl daemon-reload ve restart edin. Bu, yüksek availability kümelerinde tutarlılık sağlar. Örnek: 16 core’lu sunucuda MySQL’i core 8-15’e pin’leyerek frontend core’ları (0-7) serbest bırakın.

numactl ve Gelişmiş Kullanımlar

Numactl ile numactl --physcpubind=0-3 --localalloc komut, fiziksel core’lara bağlar ve yerel memory kullanır. Script’lerde entegre edin: #!/bin/bash; numactl -N 1 -l komut. Docker/Kubernetes’te cpuset-cpus ile benzer etki yaratın. Performans testi için perf stat -e cache-misses taskset -c 0 komut; affinity sonrası miss oranının düştüğünü gözlemleyin. Bu araç, HPC (High Performance Computing) ortamlarında standarttır.

Pratik Örnekler, İzleme ve En İyi Uygulamalar

Uygulamada, bir web sunucusu için worker’ları core çiftlerine affinity verin: Core 0-1 Apache, 2-3 MySQL. cgroups ile cpu.shares ve cpuset.cpus ekleyin: echo 0-1 > /sys/fs/cgroup/cpuset/mysqld/cpuset.cpus. İzleme araçları: perf top ile hot core’ları tespit edin, Prometheus + Node Exporter ile grafikler oluşturun. En iyi uygulama: Affinity’yi dinamik hale getirin, cpupower ile frekans scaling entegre edin.

Örnek senaryo: Redis cache sunucusunda taskset -c 4-7 redis-server. Yük testiyle (redis-benchmark) latency %30 azalır. Kurumsal ortamda, Ansible playbook’larla otomatikleştirin: tasks ile taskset çalıştırın. Düzenli bakım: Haftalık mpstat raporları inceleyin, dengesizlikleri düzeltin. Bu stratejiler, SLA’ları karşılamada kritik rol oynar.

Sonuç olarak, Linux sunucularda CPU affinity ayarı, proaktif performans yönetimi için vazgeçilmez bir araçtır. Doğru uygulandığında sistem kararlılığını artırır, kaynak israfını önler ve ölçeklenebilirlik sağlar. Her zaman test edin, monitor edin ve iş yükünüze uyarlayın; bu sayede kurumsal altyapınızı en üst seviyeye taşıyabilirsiniz.

Kategori: Genel
Yazar: Meka
İçerik: 755 kelime
Okuma Süresi: 6 dakika
Zaman: Bugün
Yayım: 25-02-2026
Güncelleme: 25-02-2026