tuned ile Linux Sistem Profil Optimizasyonu: Dinamik Performans Yönetimi
Linux sistemlerde kaynak kullanımını belirli iş yükleri doğrultusunda optimize etmek, yalnızca bir performans artışı değil, aynı zamanda operasyonel maliyetlerin düşürülmesi ve kararlılığın artırılması anlamına gelir. Bu bağlamda tuned, dinamik ve esnek bir sistem optimizasyon aracı olarak öne çıkar. tuned daemon'u, sistem profillerini kullanarak çekirdek parametrelerinden disk I/O davranışlarına, CPU frekansından ağ arayüz ayarlarına kadar birçok sistem bileşenini iş yüküne göre otomatik olarak ayarlayabilir.
tuned Mekanizması ve Çalışma Prensibi
tuned çekirdek modüllerini ve sistem ayarlarını izleyen, bunların performansını değerlendiren ve önceden tanımlanmış veya özel olarak oluşturulmuş profillere göre optimize eden bir hizmettir. Temel olarak, sistemin çalışma zamanı istatistiklerini toplar ve bu verilere dayanarak aktif profili otomatik olarak ayarlar. Her bir profil, belirli bir kullanım durumu için tasarlanmış bir dizi optimizasyon ayarı içerir. Örneğin, bir veritabanı sunucusu ile bir web sunucusunun ihtiyaçları farklıdır; tuned bu farklılıkları yönetir.
systemctl status tunedYukarıdaki komut, tuned servisinin durumunu kontrol etmek için kullanılır.
Sistem Profilleri ve Kullanım Senaryoları
tuned, varsayılan olarak birçok hazır profil ile gelir. Bu profiller, genel amaçlı sunuculardan sanallaştırma ana makinelerine, düşük güç tüketimli sistemlerden yüksek verimli iş yüklerine kadar geniş bir yelpazeyi kapsar.
Mevcut profilleri listelemek için tuned-adm list komutunu kullanabiliriz.
tuned-adm listYukarıdaki komut, yüklü ve aktif profilleri listeler. Çıktı, mevcut profilleri ve aktif olanı gösterecektir. Örneğin, throughput-performance profili, yüksek ağ ve disk I/O kapasitesi gerektiren iş yükleri için tasarlanmıştır; latency-performance ise düşük gecikme süresi kritik olan uygulamalar için uygundur. Bir profili etkinleştirmek için tuned-adm profile <profil_adı> komutu kullanılır.
tuned-adm profile throughput-performanceYukarıdaki komut, yüksek verim profilini etkinleştirir. Bu komut, ilgili optimizasyonları anında sisteme uygular ve hizmetin yeniden başlatılmasına gerek kalmaz.
Özel tuned Profilleri Oluşturma ve Uygulama
Varsayılan profiller çoğu senaryo için yeterli olsa da, belirli ve niş iş yükleri için özel optimizasyonlar gerekebilir. tuned, kendi profillerinizi oluşturmanıza veya mevcut bir profili temel alarak özelleştirmenize olanak tanır. Özel profil oluşturma süreci, /etc/tuned/ dizini altında yeni bir klasör oluşturmak ve içine tuned.conf dosyasını yerleştirmekle başlar.
Senaryo: Yüksek Performanslı Bir Kafka Broker Optimizasyonu
Bir AWS EC2 c5.xlarge instance üzerinde çalışan Apache Kafka broker'ın disk I/O, ağ ve bellek performansını optimize etmek istiyoruz. Kafka, özellikle disk yazma ve ağ bant genişliği konusunda oldukça yoğun bir uygulamadır. Öncelikle throughput-performance profilini temel alarak özel bir profil oluşturacağız.
mkdir /etc/tuned/kafka-broker/etc/tuned/kafka-broker/tuned.conf içeriği:
[main]include=throughput-performance[disk]# XFS dosya sistemi için önbellekleme ve writeback ayarları# ext4 için: devices=sda, sdb; elevator=noopdevices=nvme0n1elevator=noopreadahead=2048[sysctl]# Ağ tampon bellek boyutlarını artırınnet.core.rmem_max=16777216net.core.wmem_max=16777216net.core.rmem_default=16777216net.core.wmem_default=16777216net.core.netdev_max_backlog=300000net.ipv4.tcp_max_syn_backlog=20480net.ipv4.tcp_fin_timeout=15net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_syncookies=1# VM dirty page cache ayarlarıvm.dirty_ratio=40vm.dirty_background_ratio=10vm.swappiness=1vm.vfs_cache_pressure=50# Zaman damgalarını devre dışı bırakarak CPU yükünü azaltınkernel.perf_event_paranoid=3kernel.nmi_watchdog=0[cpu]governor=performance[kernel]# NOHZ_FULL için gerekli çekirdek parametreleri# Eğer gerçek zamanlı veya ultra düşük gecikme gerekiyorsa# bu ayarlar çekirdek önyükleme parametrelerine de eklenmelidir.# boot=nohz_full=cpulist rcu_nocbs=cpulist# Burada sadece tuned üzerinden yapılabilecek ayarlar.Bu tuned.conf dosyasında, include=throughput-performance ile temel profili devraldık. Ardından, disk I/O için NVMe diskler üzerinde noop disk zamanlayıcısını ve daha yüksek readahead değerlerini belirttik. Ağ tampon belleklerini artırdık ve vm.dirty_ratio gibi sysctl parametrelerini Kafka'nın yoğun yazma iş yüküne uygun hale getirdik. vm.swappiness=1 ile takas alanının kullanımını minimuma indirdik. CPU governor'ını performance olarak ayarlayarak sürekli yüksek frekansta çalışmasını sağladık.
Bu profili etkinleştirmek için:
tuned-adm profile kafka-brokerYukarıdaki komut, özel Kafka broker profilini etkinleştirir. Uygulandıktan sonra, sistemin yeni ayarları kullanıp kullanmadığını tuned-adm active veya doğrudan sysctl -a | grep <parametre> komutlarıyla doğrulayabiliriz.
Optimizasyonun Doğrulanması ve İzlenmesi
tuned ile yapılan optimizasyonların etkisini anlamak için sistemin performansını sürekli izlemek esastır. sar, iostat, vmstat gibi araçlar, CPU kullanımı, disk I/O, bellek kullanımı ve ağ trafiği gibi metrikleri izleyerek optimizasyonun başarı derecesini ölçmenize yardımcı olur.
iostat -cxm 5Yukarıdaki komut, her 5 saniyede bir disk I/O istatistiklerini megabayt cinsinden gösterir.
sar -n DEV 5Yukarıdaki komut, her 5 saniyede bir ağ arayüzü istatistiklerini gösterir. Metrikleri optimizasyon öncesi ve sonrası karşılaştırarak, yapılan değişikliklerin iş yükü üzerindeki gerçek etkisini görebilirsiniz.
Sonuç
tuned, Linux sistemlerinde dinamik performans yönetimi için güçlü ve esnek bir araçtır. Hazır profilleri ve özel profil oluşturma yeteneği sayesinde, farklı iş yüklerine sahip sunucuların performansını hassas bir şekilde optimize etmenizi sağlar. Doğru yapılandırıldığında, tuned operasyonel verimliliği artırırken, sistem kaynaklarının daha etkin kullanılmasını temin eder. Sistem mimarları ve yöneticileri için, tuned modern altyapı yönetiminde vazgeçilmez bir bileşendir.