Linux çekirdeğini optimize etme ve gecikmeyi azaltma konusunda gelişmiş kılavuz

Son Güncelleme: 1 Mart 2026
  • Linux çekirdeğini optimize etmek, mimari yapılandırmayı, sysctl'i ve gecikme odaklı CPU zamanlamasını birleştirmeyi gerektirir.
  • Özel çekirdekler ve PREEMPT_RT yamaları, gecikmeyi son derece azaltmaya olanak tanır, ancak daha fazla karmaşıklık ve bakım gerektirir.
  • Ağ, bellek, disk ve sistem hizmeti optimizasyonu her zaman titiz bir izleme ve kıyaslama yöntemiyle ölçülmelidir.
  • Yinelemeli, ölçüm odaklı bir yaklaşım, çekirdek iyileştirmelerini uygulamalar ve kullanıcılar için gerçek faydalara dönüştürür.

Gecikmeyi azaltmak için Linux çekirdeği optimizasyonu

Linux'ta performanstan bahsettiğimizde, neredeyse her şey aynı şeye işaret eder: gecikmeyi, kararlılığı ve kaynak kullanımını kontrol eden merkezi bileşen olan çekirdek . Onu ince ayar yapmak, "idare eden" bir sistem ile sunucularda, masaüstü bilgisayarlarda, bulut ortamlarında veya hatta çok eski donanımlarda sorunsuz çalışan bir sistem arasındaki farkı yaratabilir.

Bu kılavuz , güvenlik veya sürdürülebilirliği tehlikeye atmadan gecikmeyi en aza indirmek için Linux çekirdeğini nasıl optimize edeceğinize odaklanmaktadır . Temel mimari kavramlardan sysctl ile yapılan ince ayarlara, özel çekirdeklerin derlenmesine, gerçek zamanlı yamaların kullanımına, düşük gecikmeli ağlar (EC2 gibi) için ayarlamalara ve ince ayarlarınızın performansı gerçekten iyileştirip iyileştirmediğini ölçmek için izleme ve kıyaslama tekniklerine kadar her şeyi ele alacağız.

Linux çekirdek mimarisi ve gecikmeyle ilgili önemli noktalar

Linux çekirdeği, uygulamalar ve donanım arasında aracı bir katman görevi görerek bellek, süreçler, kesintiler, sürücüler ve dosya sistemlerini yönetir . Yüklenebilir modüller sayesinde, monolitik ancak modüler tasarımı , tüm sistemi yeniden derlemeye gerek kalmadan işlevlerin esnek bir şekilde etkinleştirilmesine veya devre dışı bırakılmasına olanak tanır.

Gecikmenin kaynağını anlamak için, işlem zamanlayıcısı , bellek yönetimi ve kesme işleme gibi çeşitli alt sistemleri anlamak çok önemlidir. Kötü yapılandırılmış bir zamanlayıcı, agresif bir bellek politikası veya aşırı sayıda kontrolsüz kesme, güçlü donanımlarda bile yavaş yanıt sürelerine neden olabilir.

CONFIG_PREEMPT, CONFIG_PREEMPT_VOLUNTARY ve CONFIG_SMP gibi çekirdek yapılandırma seçenekleri devreye girer . Bunlar, çekirdeğin daha acil görevlere odaklanmak için ne ölçüde önceliklendirilebileceğini ve çok çekirdekli sistemleri nasıl ele aldığını belirler. Uygun önceliklendirme modelinin seçilmesi, masaüstü bilgisayarlarda, düşük gecikmeli sunucularda veya endüstriyel sistemlerde algılanan gecikmeyi önemli ölçüde değiştirir.

Modern sunucularda donanım topolojisi de önemlidir: çekirdek dağılımı, soketler, NUMA ve önbellek hiyerarşisi . CPU yakınlıklarını ve NUMA politikalarını ince ayar yapmak (örneğin, işlemleri ve belleği aynı düğüme atamak), erişim sürelerini azaltmaya ve önbellek isabet oranını iyileştirmeye yardımcı olur; bu da titreşimi ve öngörülemeyen gecikmeleri en aza indirmek için çok önemlidir.

Ayrıca, CPU zamanlayıcısı ile G/Ç alt sistemleri (disk ve ağ) arasındaki etkileşim, uygulamaların deneyimlediği uçtan uca verimliliği ve gecikmeyi belirler . Herhangi bir değişiklik yapmadan önce, bir değişiklik performansı kötüleştirirse hızlı bir geri alma işlemi sağlamak için mevcut durumu (çekirdek yapılandırması, sysctl, GRUB, yüklü modüller) belgelemek önerilir.

Gecikmeyi ve performansı iyileştirmek için sysctl aracılığıyla yapılan ayarlamalar

Sysctl arayüzü, derleme işlemine gerek kalmadan /proc/sys üzerinden çekirdek parametrelerini anında değiştirmenize olanak tanır . Derleme süreçlerine takılmadan optimizasyon yapmak için ideal bir başlangıç ​​noktasıdır.

Ağ ortamında, net.core.rmem_max, net.core.wmem_max ve net.ipv4.tcp_congestion_control gibi parametreler , verimliliği, gecikmeyi ve TCP bağlantı davranışını doğrudan etkiler. Tamponların ve tıkanıklık algoritmasının doğru şekilde ayarlanması, yüksek trafikli web sunucuları veya düşük gecikmeli bulut örnekleri için hayati önem taşır.

Bellek için, vm.swappiness, vm.dirty_ratio, vm.vfs_cache_pressure ve vm.overcommit_memory gibi değerler , ne kadar takas belleği kullanılacağını, sayfa önbelleğinin nasıl yönetileceğini ve sanal belleğin davranışını kontrol etmenizi sağlar. Swappiness değerini düşürmek (örneğin, 10'a), genellikle sistemin takas belleğini çok sık kullanmasını önlemeye ve disk G/Ç'sinden kaynaklanan gecikme artışlarını azaltmaya yardımcı olur.

Büyük veritabanlarıyla veya çok miktarda paylaşımlı bellek kullanan uygulamalarla çalışıyorsanız, kernel.shmmax, kernel.shmall ve fs.file-max ile fs.nr_open kullanarak açık dosya sayısının maksimum sınırını ayarlamak çok önemlidir . Yanlış boyutlandırılmış sınırlar, yük altında teşhis edilmesi zor olan darboğazlara ve hatalara neden olabilir.

Küçük değişiklikler yapılması, bunların etkisinin izleme araçlarıyla ölçülmesi ve ancak ondan sonra /etc/sysctl.conf veya /etc/sysctl.d/ dosyalarına kaydedilmesi önerilir . Kapsayıcılaştırılmış ortamlarda, birçok çekirdek parametresinin ana bilgisayara genel olduğunu unutmayın: dikkatsiz değişiklikler tüm hizmetleri etkileyebilir, bu nedenle sysctl'i cgroup'lar ve ad alanlarıyla birleştirmek neredeyse zorunludur.

Özel çekirdeklerin derlenmesi ve bakımı

Özel bir çekirdek derlemek , gecikmeyi azaltmak, gereksiz yükü ortadan kaldırmak veya alışılmadık donanımları desteklemek istediğinizde güçlü bir araç olmaya devam etmektedir . Dağıtımlar oldukça çok yönlü çekirdekler içerse de, belirli senaryolarda belirli bir çekirdek her şeyi değiştirebilir.

  Başlıca Unix sürümleri ve özellikleri

Klasik iş akışı, kodu indirmeyi içerir. kernel.org veya xanmod gibi yamalı ağaçlar veya Liquorixve şu gibi araçları kullanın make menuconfig Seçenekleri belirlemek için. .config dosyasını derleme komut dosyalarıyla birlikte kendi git deponuza kaydetmek, derlemeleri tekrarlamanıza ve sürümler arasında tutarlılığı korumanıza olanak tanır.

Debian veya türevlerini kullanıyorsanız, çekirdek, başlık dosyaları ve ilgili kütüphanelerin .deb paketlerini elde etmek için " Debian yöntemiyle " derleme yapmak çok uygundur. Bu, paketleri kurarak ve kendi deponuzla sürümleri yöneterek özel çekirdeğinizi birden fazla makineye dağıtmanıza olanak tanır.

Gerçek dünyada, eski veya çok sınırlı donanımlarla çalışırken elle derleme genellikle mantıklıdır . Tipik bir örnek, Atom işlemcili ve 1 GB RAM'li eski bir netbook'tur ; burada gereksiz sürücüler ve sunucu sınıfı seçeneklerle dolu modern, genel bir çekirdek, göze alamayacağınız gecikme ve ekstra işlemci kullanımı getirir.

Yaygın bir strateji, mevcut çekirdek yapılandırmasıyla başlamak (örneğin, yapılandırma dosyasını /boot'tan kopyalayarak ) ve ardından onu düzenlemek veya ayarlamaktır. Masaüstünün etkileşimli yanıtını önceliklendirmek için önceliklendirme modelini " Öncelikli Çekirdek (Düşük Gecikmeli Masaüstü) " olarak değiştirebilir veya mekanik disklerdeki deneyimi iyileştirmek için BFQ gibi belirli G/Ç zamanlayıcılarını bir modül olarak ekleyebilirsiniz.

Derleme işlemlerinin uzun sürmesini önlemek için, daha güçlü bir makinede derleme yapmak ve gerekirse çapraz derleme kullanmak mantıklıdır (örneğin, x86_64 bir bilgisayardan Atom için 32 bitlik bir çekirdeği ARCH ve ilgili araç zincirlerini ayarlayarak derlemek gibi). Ardından, .deb dosyalarını hedef makineye kurmanız ve GRUB'a uygun girişi eklemeniz yeterlidir.

En zor kısım bakım: Yeni çekirdeği Kanarya Adaları düğümlerinde test etmek , önyükleme yöneticisinde net geri alma yolları oluşturmak ve performans veya sürücü uyumluluğundaki gerilemeleri tespit etmek için geçiş sırasında günlükleri ve ölçümleri kaydetmek tavsiye edilir .

Düşük gecikmeli sistemler için önceliklendirme modelleri ve PREEMPT_RT yamaları

Çekirdeğin önceliklendirme modeli, daha yüksek öncelikli bir görevin devralmasına izin vermek için çalışan bir görevin ne kadar kesintiye uğratılabileceğini belirler ve bu da yanıt gecikmesini doğrudan etkiler . Bu, hem standart yapılandırma seçeneklerini hem de gerçek zamanlı yamaları içerir.

Genel çekirdekler çeşitli seçenekler sunar: önceliklendirme yok (sunucu verimliliğine daha fazla odaklanmış), isteğe bağlı önceliklendirme ve etkileşimli uygulamalar için hızlı yanıt sürelerine öncelik veren masaüstü bilgisayarlar için önceliklendirilebilir bir çekirdek . Bu ayarı değiştirmek, masaüstü sistemlerinin, ses uygulamalarının veya hatta eski, ağır yüklü makinelerin performansını önemli ölçüde artırabilir.

Daha da ileri gitmeniz gerektiğinde, PREEMPT ve PREEMPT_RT yamaları devreye girer ve öncelikli olmayan bölümleri en aza indirmek için çekirdeğin önemli kısımlarını değiştirir. PREEMPT_RT, en kötü durum gecikmesinin (sadece ortalama değil) çok düşük ve tahmin edilebilir olması gereken sistemler için tasarlanmıştır: endüstriyel otomasyon, profesyonel ses, telekomünikasyon veya yüksek frekanslı işlem.

PREEMPT_RT'yi devreye alma kararı trendlere değil, gecikme ve titreşimin somut ölçümlerine dayanmalıdır . Öncelikle, RT ağacıyla bakımı karmaşıklaştırmadan önce zamanlayıcı ayarlarını, CPU yakınlıklarını, sysctl'i ve varsa dinamik tickless gibi yapılandırmaları tam olarak incelemek tavsiye edilir.

Uyumluluk da dikkate alınmalıdır: bazı sürücüler ve alt sistemler RT'ye tam olarak uyarlanmamıştır ve belirli sürümler veya ek yamalar gerektirebilir. Mantıklı yaklaşım, ana çekirdeğin yeni sürümlerinin RT dalıyla ne zaman ve nasıl entegre edileceğini açıkça belirten bir bakım planı hazırlamaktır; bu plan periyodik olarak senkronize edilir ancak yine de biraz geride kalmaktadır.

CPU zamanlama ayarı, zamanlayıcı gerektirmeyen çalışma ve çekirdek izolasyonu

Önceliklendirme modelini seçmenin yanı sıra, özellikle RHEL gibi kurumsal odaklı dağıtımlarda, CPU zamanlaması ve çekirdek zamanlayıcı davranışıyla oynayarak gecikmeyi ince ayar yapabilirsiniz.

Örneğin, Red Hat Enterprise Linux 8, boşta olan CPU'lar için varsayılan olarak periyodik kesintilerden kaçınarak güç tüketimini azaltan, zamanlayıcı içermeyen bir çekirdekle birlikte gelir. Gecikmeye duyarlı iş yükleri için, bir dizi çekirdekte dinamik zamanlayıcı içermeyen mod etkinleştirilebilir , böylece zamanlama görevlerinin çoğunu yalnızca bir CPU ("ana çekirdek") üstlenir ve geri kalanlar periyodik kesintilerden mümkün olduğunca arındırılır.

  CPU voltaj frekans eğrisi: nasıl çalışır ve nasıl ayarlanır?

Bu yapılandırma, uygun parametrelerin eklenmesiyle yapılır. GRUB'daki çekirdek komut satırıYapılandırmayı yeniden oluşturmak ve ardından RCU iş parçacıkları veya diğer iş parçacıkları gibi kritik çekirdek iş parçacıklarının yakınlığını ayarlamak. bdi-flushBöylece bakım için ayrılmış olan çekirdek bölgede kalırlar.

Bu yaklaşım, çekirdeklerin normal kullanıcı alanı görevlerinden izole edilmesini sağlayan `isolcpus` parametresiyle tamamlanabilir . Düşük gecikmeli senaryolarda, sistemin geri kalanı (arka plan işlemleri, kesintiler vb.) diğer çekirdekler tarafından ele alınırken, birkaç çekirdeğin yalnızca kritik bir uygulama için ayrılması çok yaygındır.

Dinamik zamanlayıcı gerektirmeyen modun çalıştığını doğrulamak için aşağıdaki basit testler çalıştırılabilir. stress veya işlemciyi bir saniyeliğine meşgul eden ve gözlemleyen komut dosyaları zamanlayıcı tik sayaçları İzole edilmiş çekirdeklerde saniyedeki kesinti sayısının binlerden sadece bire düşmesi, periyodik zamanlayıcının ortadan kalktığının bir işaretidir.

Gecikme süresine odaklanan bellek ve depolama yönetimi.

Çekirdeğin bellek ve disk G/Ç'yi yönetme biçimi, özellikle birçok küçük ve sık işlem gerçekleştiren veritabanları ve hizmetlerde, uygulamalar tarafından algılanan gecikme üzerinde büyük bir etkiye sahiptir.

Bellek tarafında, vm.swappiness değerini düşürmek takas belleği kullanımını en aza indirir (ki bu neredeyse her zaman RAM'den çok daha yavaştır), vm.vfs_cache_pressure sistemin inode ve dentry önbelleğini ne kadar hızlı boşaltması gerektiğini kontrol eder ve vm.nr_hugepages, veritabanları veya JVM'ler gibi ağır yükler için statik HugePages ayırmanıza olanak tanıyarak TLB yükünü azaltır.

Depolama bölümünde, şunları seçin: Disk türüne göre uygun G/Ç zamanlayıcısı Bu çok önemli. Modern SSD'lerde genellikle şu yöntemi kullanmak iyi bir fikirdir... none o mq-deadlineOysa mekanik disklerde ve çoklu görev sistemlerinde, adalet için tasarlanmış algoritmalar daha iyi olabilir, örneğin; yemekEk olarak, dosya sistemlerini aşağıdaki gibi seçeneklerle bağlamak da mümkündür: noatime y nodiratime Dosya veya dizine her erişildiğinde gereksiz yazma işlemlerinden kaçının.

Dosya sistemleri söz konusu olduğunda, ext4 ve XFS en yaygın seçenekler olmaya devam ediyor: iyi ayarlanmış bir ext4 güvenli bir tercihken, XFS yüksek eşzamanlılık altında daha iyi ölçeklenebilirlik gösteriyor. Çok zorlu senaryolar için, RAID'i (veritabanları için RAID 10, geçici depolama için RAID 0) iyi bir zamanlayıcıyla birleştirmek, ortalama gecikmeyi ve her şeyden önemlisi değişkenliği azaltabilir.

Linux ve EC2'de düşük gecikme süresi için ağ ve çekirdek optimizasyonu

Yüksek performanslı ağ uygulamalarında gecikme süresi yalnızca donanıma veya mesafeye değil, aynı zamanda TCP/IP yığınının ve çekirdeğin kendisinin nasıl yapılandırıldığına da bağlıdır . Bu durum, özellikle ENA arayüzlerine sahip Amazon EC2 gibi bulut ortamlarında daha belirgindir.

Öncelikle, paketlerin ağda yaptığı atlama sayısını azaltmak çok önemlidir : daha doğrudan topolojiler kullanmak, arka uca yakın yük dengeleyiciler veya optimize edilmiş kullanılabilirlik bölgeleri, işletim sistemine ulaşmadan önce bile seyahat süresini milisaniyeler cinsinden azaltır.

Çekirdek içerisinde ağ yapılandırması, dosya tanımlayıcılarını artırmayı (ulimit -n) , net.core.rmem_max, net.core.wmem_max, net.ipv4.tcp_rmem, net.ipv4.tcp_wmem ile alma ve gönderme arabelleklerinin boyutlandırılmasını ve bağlantı kurma gecikmesini azaltmak için TCP Fast Open gibi seçeneklerin etkinleştirilmesini içerir.

AWS ENA arayüzlerinde, kesinti denetimi önemli bir rol oynar: varsayılan olarak, sürücü kesinti sayısını azaltmak için paketleri gruplandırır. rx-usecs ve tx-usecsGecikmeyi mutlak minimuma indirmek istiyorsanız, bu moderasyonu devre dışı bırakabilirsiniz. ethtool -Crx-usecs ve tx-usecs değerlerini sıfıra ayarlamak gecikmeyi azaltır ancak kesme yükünü artırır, bu nedenle yüke bağlı olarak bir denge bulunmalıdır.

Ayrıca, irqbalance'ı kullanarak kesmeleri birden fazla çekirdeğe dağıtabilir veya devre dışı bırakıp kesme ve ağ kuyruğu (RSS/RPS) yakınlıklarını belirli çekirdeklere manuel olarak ayarlayabilirsiniz; bu, ultra düşük gecikmeli ortamlarda veya DPDK kullanırken ve çekirdek yığınının büyük bir bölümünü atlarken çok yaygındır.

Dikkate alınması gereken bir diğer parametre ise CPU'nun C-durumlarıdır : Derin uyku durumları güç tüketimini azaltır ancak çekirdek "uyandığında" gecikmelere neden olur. Yanıt gecikmesini azaltmak için, bu derin durumları sınırlayabilir, daha yüksek güç tüketimini ve diğer çekirdeklerde Turbo Boost için daha az alanı kabul edebilirsiniz. Her ortamın, tüketilen watt miktarı ve kazanılan mikrosaniyeler arasında ideal bir noktası vardır.

  Güvenli veri yedekleme: eksiksiz bir kılavuz ve en iyi uygulamalar

Gecikmeyi azaltmak için CPU, servis ve uygulama optimizasyonu.

Çekirdeğin kendisi dışında, çevresel faktörler de genel gecikme süresi üzerinde büyük etkiye sahiptir: sistemde aktif olan hizmetlerden her uygulamanın özel yapılandırmasına kadar.

Yüksek performanslı bir sunucu yalnızca şunu çalıştırmalıdır: gerçekten gerekli olan şeytanlarArka uç makinelerde Bluetooth, yazdırma veya ağ otomatik keşfi (CUPS, Avahi vb.) gibi hizmetler, herhangi bir fayda sağlamadan yalnızca CPU, bellek ve G/Ç tüketir. Lütfen inceleyin. systemctl list-unit-files --state=enabled Gereksiz şeyleri devre dışı bırakmak, yapabileceğiniz en ucuz ve en etkili şeylerden biridir.

Kritik süreçlere öncelik vermek için renice, chrt ve taskset gibi araçları kullanabilirsiniz . Bir sürecin önceliğini ayarlamak (renice), gerçek zamanlı zamanlama atamak (chrt -f 99) veya belirli çekirdeklere atamak (taskset), diğer görevlerle olan etkileşimi azaltarak veritabanları, VoIP, yayın akışı veya ticaret hizmetleri için CPU öngörülebilirliğini artırır.

Uygulama düzeyinde, performans iyileştirmesi çekirdek performansı kadar önemlidir. Nginx veya Apache gibi web sunucuları , çalışan süreçlerin, bağlantı sürekliliğinin sağlanmasının, önbelleklerin ve sıkıştırmanın ince ayarlanmasını gerektirir. PostgreSQL veya MySQL gibi veritabanları ise düşük ve istikrarlı gecikme süresi elde etmek için arabellek boyutlarının, kontrol noktalarının, bağlantı havuzlarının ve senkron yazma parametrelerinin gözden geçirilmesini gerektirir.

JVM'nin de rolü vardır: G1GC veya ZGC gibi çöp toplayıcıları seçmek ve yığın boyutlarını ayarlamak, dışarıdan bakıldığında gecikme olarak görünen duraklamaları azaltabilir. Sanallaştırılmış ve konteynerleştirilmiş ortamlarda, vCPU, vRAM ve G/Ç kotalarının doğru şekilde tahsis edilmesi , daha sonra sonsuz disk kuyrukları veya CPU aşırı yüklenmesi olarak kendini gösteren sessiz çekişmeyi önler.

Çekirdek ve sistem izleme ve kıyaslama

Tüm bu ayarlamalar, etkisini ölçmediğiniz sürece işe yaramaz. Önemli olan, sürekli izlemeyi tekrarlanabilir performans testleriyle birleştirmektir ; böylece çekirdekte veya sysctl'de yapılan her değişiklik objektif verilerle değerlendirilebilir.

Sistemin genel durumunu görmek için aşağıdaki gibi klasik araçları kullanabilirsiniz: htop, vmstat, iotop o sarDaha fazla ayrıntıya ihtiyaç duyduğunuzda, aşağıdakiler gibi belirli çekirdek araçları devreye girer: performans ve ftraceBu sayede zamanlayıcının, kesintilerin ve dahili çağrıların davranışını oldukça doğru bir şekilde izleyebilirsiniz.

Üretim ortamlarında, CPU sayaçları, G/Ç, disk ve ağ gecikmeleri, işlem kuyrukları vb. verileri gösteren dışa aktarıcılarla birlikte Prometheus, collectd veya sysstat gibi metrik sistemlerinin kullanılması tavsiye edilir . Bu verilerin Grafana veya benzeri araçlarda görselleştirilmesi, son kullanıcı sorunları fark etmeden önce gerilemeleri veya anormallikleri tespit etmeye yardımcı olur.

Performans karşılaştırması için amaç, gerçek iş yükünü kopyalamak ve her değişikliğin "öncesi ve sonrası"nı karşılaştırmaktır. Sysbench (CPU ve veritabanları için), fio (disk için) veya iperf3 (ağ için) gibi araçlar, tekrarlanabilir senaryolar oluşturmanıza olanak tanır. Karşılaştırmaların zaman içinde anlamlı olması için çekirdek sürümlerini, sysctl yapılandırmalarını, donanımı ve test parametrelerini belgelemek çok önemlidir .

Pratikte, Linux çekirdeği optimizasyonu yinelemeli bir süreçtir: bir dizi ince ayarı test edersiniz, sonuçları ölçersiniz, gerçek fayda sağlayanları korursunuz ve geri kalanını atarsınız. İyi bir değişiklik yönetimiyle, yeni çekirdek sürümlerindeki (örneğin zamanlayıcı, grafik, güç veya ağ geliştirmeleri içeren son seriler gibi) iyileştirmeleri, ister yerel sunucularda, ister bulutta, isterse de zorlu iş istasyonlarında olsun, uygulamalarınız için ölçülebilir faydalara dönüştürebilirsiniz.

Çekirdek mimarisi bilgisi, sysctl ile ince ayar, kontrollü derleme, gerçek zamanlı yamaların seçici kullanımı ve iyi bir ölçüm sisteminin birleşimi, bir yöneticinin veya operasyon ekibinin en ufak bir tahrikte donanımı değiştirmek veya sistem güvenliğini tehlikeye atmak zorunda kalmadan daha hızlı yanıtlar, daha düşük gecikmeler ve daha iyi genel istikrar elde etmesini sağlar.

Linux6.14-0
İlgili makale:
Linux 6.14: Yenilikler, Güvenlik İyileştirmeleri ve Donanım Desteği