Heute um 03:11
Startbeitrag
Linux Kernel Performans Ayarları
[quote]Günlük sunucu ve masaüstü iş akışlarında kernel davranışlarını ince ayarlarla optimize etmek, çoğu zaman uygulama katmanından bağımsız olarak elde edilen hızlanmalara kapı aralar. Bu yazıda, temel kavramları netleştirmek ve güvenli, uygulanabilir ayarların bir yol haritasını önermek için toplu bir bakış sunuyorum. Konu, donanım satırlarında değişmeden kalmış genel prensipleri ve pratik adımları kapsar; her sistem farklıdır, bu yüzden değişiklikleri dikkatli bir şekilde test etmek gerekir.
1) CPU ve scheduler davranışını anlamak
- Cgroups ve cpusetlerle süreç yoğunluğunu belirli çekirdek gruplarına atamak, contended kaynaklarda adil paylaşım sağlar. Örneğin yoğun I/O yükü altında arka plan işlerini izole etmek için CPUAffinity ve CFS scheduler parametrelerini gözden geçirmek gerekir.
- Scheduler tuning için default olarak kullanılan CFS politikaları, atama ve kuyruk yönetiminde zaman paylaşımını hedefler. Sık CPU-bound işlerde, load balancing ve migrasyon politikalarını incelemek performansı artırabilir.
- NUMA mimarili makinelerde bellek yerleşimi politikaları kritik olur. local memory erişimini artıran ayarlar gecikmeleri azaltır; bellek politika ve tabanlı ayarlara bakmak gerekir.
2) Taban performans için derleme ve yapılandırma
- Kernel derlenirken gereksiz modülleri kaldırmak, sık kullanılan sürücüler için yerleşik desteği tercih etmek, önyüklü modülleri minimize etmek genel yükü hafifletir.
- acpi ve güç yönetimi ile ilgili parametreler, termal sınırların yanında performans dengesini de etkiler. Yetersiz soğutma altında güvenlik nedeniyle otomatik throttling kaçınılmazdır; bu nedenle güç politikalarını sistemin soğutma kapasitesiyle uyumlu tutmak gerekir.
- Transparently Huge Pages (THP) kullanımı ile bellek yönetimi arasındaki denge önemlidir. Büyük sayfalar erişim maliyetini düşürebilir, ancak bazı workload’larda hareketli bellek erişimini bozabilir.
3) I/O ve ağ üzerinde ince ayarlar
- I/O schedullerinin seçimi, disk türüne ve yüklenme şeklinde güvenli seçimle iyileştirme sağlar. Örneğin SSD üzerinde bfq veya mq-deadline gibi seçenekler daha öngörülebilir latencies sunabilir.
- Ağ tarafında başlangıç ayarları ile gereksiz kesinti ve interrupt yükü azaltılabilir. IRQ affinity, RSS (Receive-Side Scaling) ve NAPI gibi kavramlar, ağ throughput ve gecikmeyi doğrudan etkiler.
4) İzleme ve güvenli test süreci
- sysctl altında kernel parametrelerini değiştirmeden önce mevcut değerleri kayıt etmek, değişiklik sonrası etkileri karşılaştırmalı olarak izlemek gerekir.
- perf, ftrace, pidstat ve iostat gibi araçlar ile darboğazlar netleşir. Önceliklerin değiştiği senaryolarda karşılaşılan davranışları betimlemek, güvenli iyileştirme sağlar.
1234# Basit bir başlangıç: CPU affinity ve scheduler
taskset -c 0,1
sysctl -w kernel.sched_min_granularity_ns=10000000
sysctl -w kernel.sched_wakeup_granularity_ns=10000000
Sonuç
Kernel seviyesinde yapılacak ince ayarlar, uygulama katmanı ile etkileşimli çalışır. Doğru balansı kurmak için test odaklı yaklaşım, hedeflenen iş yüküne göre adım adım ilerlemeyi gerektirir. Sisteminizde hangi darboğazlar belirgin? Yorumlarınızla paylaşabileceğiniz gerçek dünya örnekleri veya deneyimleriniz var mı?