⚙️ Linux Performans İyileştirmesi: Kernel Ayarları, TCP/IP ve NUMA Optimizasyonu
🧠 Bu Rehberde Ne Öğreneceksiniz?
Linux, modern bulut altyapısının bel kemiğidir.
Ancak varsayılan çekirdek ayarları (kernel configuration) her zaman yüksek performans için optimize edilmemiştir.
Bu rehberde, Linux çekirdeğini optimize ederek CPU, bellek, ağ (networking) ve I/O performansını en üst düzeye çıkarmayı öğreneceksiniz.
Ayrıca perf, ftrace, bpftrace gibi profesyonel analiz araçlarıyla darboğaz tespit etmeyi ve NUMA mimarisi için ince ayar yapmayı göreceksiniz.
🚀 1. Performans Profili Oluşturma ve İzleme Araçları
Linux performansını artırmanın ilk adımı, darboğazların nerede olduğunu doğru tespit etmektir.
🔧 1.1 perf: CPU, Bellek ve G/Ç Analizi
perf, CPU döngüleri, önbellek (cache) kaçırmaları ve talimat yürütme istatistiklerini izler.
Amaç: En çok CPU tüketen fonksiyonları bulmak
Adımlar:
sudo perf record -F 99 -a --call-graph dwarf sleep 30
sudo perf report --stdio
🔹 İlk komut, 30 saniye boyunca CPU örneklerini toplar. 🔹 İkinci komut, hangi fonksiyonların en çok CPU süresi harcadığını gösterir. Bu sayede “sıcak noktaları” (hot path) optimize edebilirsin.
🧩 1.2 ftrace: Çekirdek Fonksiyonlarını İzleme
ftrace, doğrudan çekirdek seviyesindeki sistem çağrılarını izler. Örneğin, disk yazma gecikmesini analiz etmek için:
echo function | sudo tee /sys/kernel/debug/tracing/current_tracer
echo sys_enter_write | sudo tee /sys/kernel/debug/tracing/set_ftrace_filter
cat /sys/kernel/debug/tracing/trace_pipe
💡 Bu komutlar, sys_enter_write fonksiyonunu izler ve gecikmeleri anlık olarak gösterir. Disk I/O darboğazlarını teşhis etmek için birebirdir.
🧠 1.3 bpftrace: Özelleştirilebilir, Gerçek Zamanlı İzleme
bpftrace, çekirdek olaylarını (tracepoint) anlık izlemek için en esnek araçtır.
sudo bpftrace -e 'tracepoint:kmem:kmalloc { printf("Allocated %d bytes\n", args->bytes_alloc); }'
📊 Bu script, her bellek tahsisini (kmalloc) raporlar. Bellek sızıntısı veya parça parça tahsis sorunlarını tespit etmek için kullanılır.
💾 2. Bellek ve G/Ç (I/O) Optimizasyonu
🧮 2.1 Bellek Profili Çıkarma (Valgrind/Massif)
Bellek kullanımını zaman içinde izlemek için:
valgrind --tool=massif --time-unit=B ./memory_heavy_app
ms_print massif.out.<pid>
💡 Bu analiz, bellek tüketiminin hangi fonksiyonlarda yoğunlaştığını gösterir. Yüksek bellek kullanımına sahip uygulamaları yeniden yapılandırmanı sağlar.
💿 2.2 Disk G/Ç Tıkanıklığını Tespit Etme (iostat)
Disk erişim süresini ölçmek için:
iostat -dx 5
Metrik Açıklama
await İsteklerin kuyrukta beklediği süre
svctm I/O hizmet süresi
Eğer await > svctm ise, disk darboğazı vardır.
Çözüm: SSD’ye geçiş, I/O scheduler değişikliği veya RAID optimizasyonu.
🌐 3. Ağ (Networking) Yığını Optimizasyonu
📡 3.1 Yüksek Eş Zamanlılık İçin TCP Kuyruk Ayarı
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=4096
echo "net.ipv4.tcp_max_syn_backlog=4096" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Bu ayar, yoğun trafik altında daha fazla bağlantı isteğini kuyruğa alır. Özellikle API ağ geçitleri veya yüksek trafikli web siteleri için idealdir.
📦 3.2 Bant Genişliği İçin TCP Tampon Boyutları
sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 6291456"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 6291456"
Bu tamponlar, veri aktarımı sırasında gönderim/alım performansını artırır. Yüksek bant genişliğine sahip sistemlerde gecikme azalır.
⚙️ 3.3 Düşük Gecikme İçin BBR Algoritması
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
BBR, “paket kaybı” yerine “bant genişliği ve RTT” odaklı bir algoritmadır. Sonuç: Düşük gecikme, yüksek kararlılık, daha hızlı yanıt süreleri.
🧩 4. NUMA (Non-Uniform Memory Access) Yapılandırması
Çok soketli sunucularda NUMA farkındalığı, özellikle veri merkezlerinde kritik öneme sahiptir.
sudo echo 1 > /proc/irq/<IRQ_NUMBER>/smp_affinity
Bu komut, ağ kartının kesmelerini (IRQ) aynı NUMA düğümündeki CPU’ya bağlar. Gecikme azalır, veri akışı hızlanır.
💡 Ayrıca irqbalance servisini devre dışı bırakıp manuel CPU dağılımı yapılabilir.
⚡ 5. Kernel Ayarlarını Kalıcı Hale Getirme
echo "net.ipv4.tcp_max_syn_backlog=4096" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
🧠 sysctl -w komutları geçicidir. Kalıcı olması için /etc/sysctl.conf dosyasına eklenmelidir.
❓ Sıkça Sorulan Sorular (SSS)
1. Tüm bu ayarlar yeniden başlatmadan sonra kaybolur mu?
Evet, sysctl -w ile yapılan ayarlar geçicidir. Kalıcı hale getirmek için /etc/sysctl.conf’a yazın ve sudo sysctl -p uygulayın.
2. Düşük gecikme için hangi ayarlara öncelik vermeliyim?
bbr algoritması ve tampon boyutlarının (rmem/wmem) sınırlanması jitter’ı azaltır.
3. tcp_max_syn_backlog ne kadar olmalı?
4096–8192 arası değerler genellikle yeterlidir, ancak yük testleriyle doğrulanmalıdır.
4. NUMA neden önemli?
Çünkü CPU ve belleğin aynı düğümde hizalanması, gecikmeyi büyük ölçüde azaltır.
5. Yanlış kernel tuning neye yol açabilir?
Bellek israfı, bağlantı kesilmesi veya ağ darboğazı yaşanabilir. Tüm değişiklikleri üretim öncesi ortamda test etmelisiniz.
🏁 Sonuç
Doğru yapılandırılmış bir Linux sistemi, hem gecikmeyi azaltır hem de kaynakları daha verimli kullanır. Bu ayarlarla, özellikle yüksek trafikli API’ler ve veritabanı sunucularında fark edilir performans artışı elde edebilirsiniz.
⚙️ Bu optimizasyon adımlarını Rabisu Bulut sunucularınızda uygulayarak daha hızlı, kararlı ve ölçeklenebilir bir altyapı oluşturabilirsiniz.