PREEMPT_RT Açıklaması: Gerçek Zamanlı Çekirdek Özellikleri
PREEMPT_RT, Linux çekirdeğini gerçek zamanlı bir işletim sistemine dönüştürerek kritik görevler için hassas zamanlama sağlar. Linux 6.12'ye (20 Eylül 2024'te yayınlandı) tamamen entegre edilmiş olup, x86, ARM64 ve RISC-V gibi mimariler için gerçek zamanlı yetenekler sağlar. İşte bilmeniz gerekenler:
- Temel Özellikler:
- Geleneksel spinlock'ları, öncelikli uyku kilitleriyle değiştirir.
- Kesme işleyicilerini iş parçacıklarına dönüştürerek, zamanlanabilir ve önceliklendirilebilir hale getirir.
- Öncelik tersine çevrilmesi sorunlarını gidermek için öncelik miras alma özelliğini uygular.
- RCU (Oku-Kopyala-Güncelle) işlemlerini tamamen öncelikli hale getirir.
- Uygulamalar:
- Otomotiv, robotik, telekomünikasyon ve tıbbi cihazlar gibi hassas zamanlamanın kritik önem taşıdığı sektörlerde kullanılır.
- Endüstriyel otomasyon araçları, uçuş kontrol sistemleri ve barındırma ortamları gibi sistemlere güç sağlar. düşük gecikmeli sanal özel sunucular.
- Kurmak:
- Olanak vermek
CONFIG_PREEMPT_RTÇekirdek yapılandırmasında. - Ayarları ince ayar yapın, örneğin
CONFIG_NO_HZ_FULLveCONFIG_RCU_BOOSTEn iyi performans için. - Şu araçları kullanın:
döngüsel testGecikmeyi ölçmek ve performansı doğrulamak için.
- Olanak vermek
PREEMPT_RT, verimlilikten ziyade zamanlamaya öncelik vererek Linux'u, son teslim tarihlerinin pazarlık konusu olmadığı uygulamalar için uygun hale getirir. Belirleyici performans talep eden sektörler için oyun değiştirici bir özelliktir.
PREEMPT_RT Temel Özellikleri: Linux Gerçek Zamanlı Performansı Nasıl Elde Ediyor?
PREEMPT_RT Açıklaması: Gerçek Zamanlı ve Ultra Düşük Gecikme Süresi için Linux Çekirdeğini Oluşturma ve Optimize Etme
sbb-itb-59e1987
PREEMPT_RT Temel Özellikleri
PREEMPT_RT, öncelikli olmayan kodu azaltmak ve görev zamanlaması üzerindeki kontrolü iyileştirmek için tasarlanmış dört temel özelliğe odaklanmaktadır. İşte her birine daha yakından bir bakış.
Tam Çekirdek Önceliği
En büyük güncellemelerden biri, standart spinlock'ların dönüştürülmesidir (spinlock_t) ve okuyucu-yazıcı kilitleri (rwlock_t) içine mutex tabanlı uyku spinlock'ları. Geleneksel spinlock'lar, önceliklendirmeyi devre dışı bırakarak görevleri meşgul bekleme durumuna soktukları için gecikmelere neden olabilir. PREEMPT_RT, görevlerin bir kaynağı tutarken bile uykuya geçmesine ve önceliklendirilmesine izin veren kilitler getirerek bunu değiştirir.
Bu, yüksek öncelikli görevlerin, düşük öncelikli görevler kilit tutuyor olsa bile, onları kesintiye uğratabileceği anlamına gelir. Bununla birlikte, zamanlayıcı veya donanım giriş noktaları gibi belirli kritik işlemler için PREEMPT_RT korunur. ham_dönme kilidi_t, Orijinal, önceliksiz kilitler gibi davranan bir sistem. Seçkin bir mühendis olan Paul McKenney'nin de belirttiği gibi:
""PREEMPT_RT yamasının temel amacı, önceliklendirilemeyen çekirdek kodu miktarını en aza indirirken, aynı zamanda bu ek önceliklendirme özelliğini sağlamak için değiştirilmesi gereken kod miktarını da en aza indirmektir.""
Şimdi de bu yaklaşımın kesinti yönetimine nasıl fayda sağladığına bakalım.
İş parçacıklı kesintiler
PREEMPT_RT, donanım kesme işleyicilerinin çoğunu "donanım kesme" bağlamından "donanım kesme" bağlamına taşır. çekirdek iş parçacıkları İşlem bağlamında çalışıyor. Bu ayarlama, kesme işleyicilerinin önceliklendirilmesine, kesintiye uğratılmasına veya hatta engellenmesine olanak tanır.
Standart bir Linux çekirdeğinde, uzun süren bir kesme işleyici, diğer tüm yürütmeyi durdurduğu için sınırsız gecikmeye yol açabilir. Çoklu iş parçacıklı kesmeler bu sorunu çözer. Varsayılan olarak, bu kesme iş parçacıkları şu şekilde çalışır: ÇİZEL_FIFO Öncelik seviyesi 50'dir, ancak yöneticiler aşağıdaki gibi araçlar kullanarak önceliklerini değiştirebilirler. chrt. Örneğin, endüstriyel kontrol için ağ kartının kesintisine öncelik verirken, disk G/Ç'si için önceliği düşürebilirsiniz. Bu iş parçacıkları ham spinlock'lar yerine uyku modundaki spinlock'ları kullandığından, bir kilidi tutarken donanım kesintilerini devre dışı bırakma ihtiyacını ortadan kaldırırlar.
Şimdi, PREEMPT_RT'nin öncelikle ilgili zorluklarla nasıl başa çıktığını inceleyelim.
Öncelik Mirası ve Rtmutex
Öncelik tersine çevrilmesi Yüksek öncelikli bir görevin, düşük öncelikli bir görev tarafından tutulan bir kaynağı beklerken takılıp kalması ve orta öncelikli bir görevin (kaynağa ihtiyacı olmayan) düşük öncelikli görevi önceliklendirmesi önemli bir sorundur. PREEMPT_RT bu sorunu şu şekilde çözer: öncelikli miras, Bu işlem, düşük öncelikli görevin önceliğini geçici olarak, kaynağı bekleyen en yüksek öncelikli görevin önceliğiyle eşleştirir.
The rtmutex Bu işlemi mümkün kılan araç `primitive`'dir. Bir çakışma ortaya çıktığında, düşük öncelikli görevin, orta öncelikli görevlerin müdahalesi olmadan kritik bölümünü tamamlaması için öncelik artışı almasını sağlar. Öncelik artışı alan görev başka bir kilitte bloke olursa, öncelik artışı bağımlılık zincirinde aşağı doğru yayılır. Linux çekirdeği belgelerinde açıklandığı gibi:
""Öncelik miras alma özelliği, iyi tasarlanmış uygulamaların, yüksek öncelikli bir iş parçacığının kritik kısımlarında kullanıcı alanı kilitlerini kullanmasına ve bu sırada belirleyiciliği kaybetmemesine olanak tanır.""
Bunu başarmak için, rtmutex Desteklenen mimarilerde ek yükü düşük tutmak için, bekleyen görevleri yönetmek üzere bir bayrak ve öncelik sırasına göre düzenlenmiş bir ağaç kullanır.
Son olarak, PREEMPT_RT'nin RCU işlemlerini nasıl iyileştirdiğine bakalım.
Öncelikli RCU (Oku-Kopyala-Güncelle)

Okuma-Kopyalama-Güncelleme (RCU), Linux çekirdeğinde yaygın olarak kullanılan bir senkronizasyon tekniğidir. Standart çekirdeklerde, RCU okuma bölümleri önceliklendirilemez (non-preemptible) olduğundan, öngörülemeyen gecikmelere yol açabilir. PREEMPT_RT, RCU okuma bölümlerini önceliklendirilebilir hale getirerek bunu değiştirir. tamamen öncelikli, Bu sayede gerçek zamanlı görev sürelerinin tehlikeye atılmaması sağlanır. Bu ayarlama, gerçek zamanlı sistemlerde gerekli olan öngörülebilir davranışın elde edilmesinin temel taşlarından biridir.
PREEMPT_RT Nasıl Yapılandırılır ve Kullanılır
PREEMPT_RT, ana Linux çekirdeklerine tamamen entegre edilmiştir; bu da harici yamalara artık gerek olmadığı anlamına gelir. Bununla birlikte, daha iyi mimari desteği ve geliştirilmiş grafikler için en son yama paketini uygulamak yine de iyi bir fikirdir. Çekirdek hazır olduğunda, tüm özelliklerinden tam olarak yararlanmak için ayarlarını değiştirmeniz gerekecektir.
Çekirdek Yapılandırma Ayarları
Tamamen öncelikli bir çekirdeği etkinleştirmek için şunu açın: CONFIG_PREEMPT_RT. Daha yeni çekirdeklerde bu ayar "Genel Kurulum" altında bulunur, ancak etkinleştirmeniz gerekebilir. YAPILANDIRMA UZMANI Öncelikle bunu yapılandırma menüsünde görünür hale getirin.
Üretim için adanmış sunucular ve diğer yüksek performanslı ortamlarda, ek seçenekler performansı daha da optimize edebilir:
CONFIG_NO_HZ_FULLYoğun çalışan işlemcilerde zamanlama saati kesintilerini azaltır, bu da titreşimi en aza indirmeye yardımcı olur.CONFIG_RCU_BOOST: RCU okuyucularının önceden erişim izni verilmesini geciktirmesini önler.CONFIG_RCU_NOCB_CPURCU geri çağırma işleminin yükünü belirli CPU'lara aktararak gerçek zamanlı görevlerle olan etkileşimi azaltır.
Yüksek gecikmeye neden olabilecek hata ayıklama seçeneklerini devre dışı bırakmak da çok önemlidir. Şu gibi ayarları kapatın: CONFIG_DEBUG_LOCKDEP, CONFIG_DEBUG_ÖNCESİ, CONFIG_DEBUG_OBJECTS, Ve CONFIG_SLUB_DEBUG. Bu araçlar geliştirme için faydalı olsa da, gecikme sürelerini önemli ölçüde olumsuz etkileyebilirler. kernelconfig.io'nun açıkladığı gibi:
""Bu seçenek, çeşitli kilitleme temel öğelerini (spinlock'lar, rwlock'lar vb.) öncelik devralma özelliğine sahip, önceliklendirilmiş varyantlarla değiştirerek çekirdeği gerçek zamanlı bir çekirdeğe dönüştürür.""
Çekirdeğiniz derlenip başlatıldıktan sonra, PREEMPT_RT'nin etkin olup olmadığını şu komutu çalıştırarak doğrulayın: cat /sys/kernel/realtime. Bir dönüş değeri 1 Başarıyı gösterir. Ayrıca çıktıda "PREEMPT_RT" ifadesini kontrol ederek de doğrulayabilirsiniz. uname -a.
Hata Ayıklama ve Performans Optimizasyonu
Gerçek zamanlı iş yüklerinde en iyi performansı elde etmek için çekirdeğin ince ayarı şarttır. Ele alınması gereken önemli alanlardan biri de şudur: gerçek zamanlı gaz kesme mekanizması, Bu, varsayılan olarak gerçek zamanlı olmayan görevler için saniyede 50 ms ayırır. İş yükünüz tamamen gerçek zamanlıysa, bu mekanizmayı devre dışı bırakmak için şunu yazabilirsiniz: -1 için /proc/sys/kernel/sched_rt_runtime_us. OSADL'de Kıdemli Açık Kaynak Danışmanı olan Jan Altenberg'in de belirttiği gibi:
""'Kontrolden çıkmış' bir gerçek zamanlı görev, sistemi kaynak yetersizliğinden dolayı çökertebilir. Bir koruma mekanizması olarak, gerçek zamanlı görevlerin çalışma süresi, /proc/sys/kernel/sched_rt_runtime_us dosyasında mikrosaniye cinsinden bir değer ayarlanarak sınırlandırılabilir."‘
Belirlenebilirliği artırmak için, aşağıdaki gibi parametreler kullanarak belirli CPU çekirdeklerini izole edin. isolcpus=2,3, rcu_nocbs=2,3, nohz_full=2,3, ve ayarla irqaffinity=0. Bu, söz konusu çekirdekleri yalnızca gerçek zamanlı görevler için ayırır.
Kesme iş parçacıklarını yönetmek için şunu kullanın: chrt Bu araç genellikle varsayılan bir ayarla çalışır. ÇİZEL_FIFO Öncelikleri 50'dir, ancak uygulamanızla çakışmaları önlemek için bunları ayarlayabilirsiniz. Örneğin, bir ağ kartının IRQ iş parçacığının önceliğini 98'e ayarlamak için şu komutu kullanın: chrt -p -f 98.
Yapılandırma tamamlandıktan sonra, gecikme performansını test etmek ve doğrulamak çok önemlidir. Bunun için şu araçlar kullanılabilir: döngüsel test gecikmeyi ölçebilir (örneğin, cyclictest -S -m -p98 -i250), sırasında rtla (Gerçek Zamanlı Linux Analizi) gecikme artışlarını belirlemeye ve analiz etmeye yardımcı olur. Bu araçlar, kurulumunuzun gerçek zamanlı uygulamaların gereksinimlerini karşılamasını sağlar.
PREEMPT_RT Başvuruları ve Faydaları
Gerçek Zamanlı Uygulama Kullanım Senaryoları
PREEMPT_RT, zamanlama hassasiyetinin pazarlık konusu olmadığı sistemlerde öne çıkar. havacılık ve uzay, Bu sayede navigasyon ve uçuş kontrollerinin mikrosaniyelik gecikmeler olmadan çalışması sağlanır; aksi takdirde bu durum güvenliği tehlikeye atabilir. Telekomünikasyon Şirketler, veri yönlendirmesini gerçek zamanlı olarak yönetmek, titreşimi ve gecikme artışlarını ortadan kaldırarak sorunsuz sesli ve görüntülü görüşmeler sağlamak için buna güveniyor.
İçinde otomotiv endüstrisi, Bu, araç kontrol sistemleri için temel bir unsur olup, Continental Automotive gibi büyük oyuncular da benimsenmesini desteklemektedir. endüstriyel otomasyon, PREEMPT_RT, programlanabilir mantık kontrol cihazlarını (PLC) ve SCADA sistemlerini destekler ve genellikle fabrika ortamlarında güvenlik ve verimliliği sağlamak için EtherCAT gibi protokollerle birlikte çalışır. Robotik Robotlar, hassas aktüatör kontrolü ve anlık sensör geri bildirimi için de büyük ölçüde bu teknolojiye güvenmekte ve bu sayede çevresel değişikliklere anında tepki verebilmektedir.
Belki de en kritik uygulamalar şunlardır: tıbbi cihazlar, Hassasiyetin son derece önemli olduğu alanlarda, PREEMPT_RT, hasta monitörlerinden cerrahi robotlara kadar hayati önem taşıyan sistemlerin kusursuz çalışmasını sağlamak için gereken belirleyici performansı sunar.
Barındırma Ortamları İçin Faydalar
PREEMPT_RT'nin avantajları, gerçek zamanlı yanıt vermenin de aynı derecede önemli olduğu barındırma ortamlarına kadar uzanır. VPS ve özel sunucular, Bu sayede, zamanlayıcının daha az kritik olan görevlere göre daha yüksek öncelikli görevlere öncelik vermesi sağlanarak gecikme en aza indirilir. Bu da tutarlı yanıt süreleri sağlar ve bu da doğrudan kullanıcı deneyimini ve hizmet güvenilirliğini etkiler.
Çoklu iş parçacığı tabanlı kesme modeli, yoğun G/Ç işlemleri sırasında sistemlerin "kesme fırtınaları" nedeniyle aşırı yüklenmesini önler. rt_mutex, Öncelik devralma özelliği, düşük öncelikli arka plan görevlerinin kritik barındırma hizmetlerini engellememesini sağlar. Yüksek çözünürlüklü zamanlayıcılar, mikrosaniye düzeyinde zamanlama doğruluğu sağlayarak sanallaştırılmış kurulumlarda titreşimi azaltır. Barındırma sağlayıcıları, Serverion, PREEMPT_RT ile özel çekirdek derlemeleri sunarak yöneticilere belirli iş yükleri için yapılandırmaları ince ayar yapma esnekliği sağlar. Şu gibi parametreler kullanılarak: izolekpus ve yakınlık, Bu sayede sağlayıcılar, rutin sistem işlemlerini ayrı tutarken, işlemci çekirdeklerini performans açısından kritik görevlere tahsis edebilirler.
Çözüm
Bu kılavuz, nasıl yapılacağını ayrıntılı olarak ele almıştır. PREEMPT_RT Zamanlayıcıya neredeyse tam kontrol vererek Linux'u gerçek zamanlı bir işletim sistemine dönüştürür. Linux 6.12'den (Eylül 2024) itibaren ana çekirdeklere dahil edilmesinden bu yana, x86, ARM64 ve RISC-V gibi mimarilerde harici yamalara olan ihtiyacı ortadan kaldırmıştır.
Konsept oldukça basit: Önceliklendirilemeyen kodu olabildiğince azaltmak. Spinlock'ları uyku kilitlerine dönüştürerek ve kesme işleyicilerini iş parçacıkları olarak çalıştırarak, yüksek öncelikli görevler neredeyse tüm çekirdek etkinliklerini önceliklendirebilir. Öncelik devralma gibi özellikler, düşük öncelikli görevlerin kritik işlemleri geciktirmesini önlerken, önceliklendirilebilir RCU, okuma tarafındaki kritik bölümlerin bile önemli gecikmelere neden olmamasını sağlar. Sebastian Siewior, PREEMPT_RT'nin geliştiricisi, yerinde bir şekilde şunu belirtiyor:
""Tüm kontrol planlayıcıda.""
Bu teknolojik atılım pratik faydalar sunmaktadır. Örneğin, Serverion Yoğun G/Ç baskısı altında bile istikrarlı yanıt süreleri sağlamak için, CPU izolasyonunu hassas bir şekilde ayarlamak ve gerçek zamanlı iş yüklerini optimize etmek amacıyla özel PREEMPT_RT çekirdek derlemeleri kullanır.
Gerçek zamanlı sistemleri diğerlerinden ayıran şey sadece hız değil, aynı zamanda öngörülebilirliktir. PREEMPT_RT, gecikmeyi en aza indirerek görevlerin tam olarak ihtiyaç duyulduğu anda yürütülmesini sağlar. Bu, endüstriyel otomasyon, telekomünikasyon ve performans açısından kritik barındırma hizmetleri gibi uygulamalar için çok önemlidir. Standart çekirdeklerin sağlayamayacağı türden belirleyici bir davranış sunar.
Ana çekirdeğe entegrasyonu ve kurumsal dağıtımların desteğiyle, Ubuntu Pro (Şubat 2023'ten itibaren) PREEMPT_RT, hosting sağlayıcıları ve sistem yöneticileri için daha erişilebilir hale geldi. Günümüzün en zorlu ve zamana duyarlı ortamları için gereken güvenilir, düşük gecikmeli performansı sunar.
SSS
PREEMPT_RT'ye ihtiyacım var mı yoksa standart Linux yeterli mi?
Standart Linux çekirdeği, aşağıdakilerle birleştirildiğinde... PREEMPT_RT yaması, Bu sayede gerçek zamanlı yetenekler kazanır. Bu da onu düşük gecikme süresi ve tutarlı yanıt sürelerinin kritik olduğu uygulamalar için güçlü bir seçenek haline getirir. Bununla birlikte, ana Linux çekirdeği tek başına katı gerçek zamanlı gereksinimleri karşılamakta yetersiz kalabilir.
PREEMPT_RT sistemimdeki genel işlem hızını düşürecek mi?
Gerçek zamanlı performans elde etmek için, PREEMPT_RT Bu yaklaşım, sistemin yanıt verme hızını artırmaya yardımcı olan, önceliklendirilemeyen çekirdek kodunu azaltmaya odaklanır. Bu yaklaşım, genel verimlilikte hafif bir düşüşe yol açabilir, ancak zaman açısından hassas uygulamalar için kritik önem taşıyan tutarlı ve öngörülebilir bir davranış sağlar. Bu denge, gerçek zamanlı sistemlerin taleplerini karşılamak için kasıtlı ve merkezi bir öneme sahiptir.
PREEMPT_RT ile hangi gecikme hedefi gerçekçidir?
İle PREEMPT_RT, Milisaniye aralığında gecikme süresi elde etmek hem masaüstü hem de gömülü sistemler için gerçekçi bir hedeftir. Bununla birlikte, gerçek performans büyük ölçüde sistemin belirli gereksinimleri karşılayacak şekilde ne kadar iyi yapılandırıldığına ve ayarlandığına bağlıdır. İstenen yanıt verme düzeyini sağlamak için doğru kurulum çok önemlidir.