Determinizm ve Gerçek Zamanlı Sistemler
Determinizm, bir sistemin aynı girdiler verildiğinde her zaman aynı sonuçları üretmesi ve bunları öngörülebilir zaman sınırları içinde gerçekleştirmesi anlamına gelir. Gerçek zamanlı sistemlerde bu kavram kritik öneme sahiptir, çünkü bu sistemlerde sadece doğru sonuç üretmek yeterli değildir; bu sonuçların belirli zaman sınırları içinde üretilmesi de şarttır. Geleneksel Linux çekirdeği, throughput (işlem hacmi) ve genel sistem performansını optimize etmek için tasarlanmıştır. Bu yaklaşım, işlemci zamanının adil paylaşımını sağlar ve sistem genelinde yüksek verimlilik elde eder, ancak deterministik davranış konusunda garanti vermez. Çekirdeğin kendisi kesilemez (non-preemptible) olarak tasarlanmıştır, yani bir işlem çekirdek modunda çalışırken, daha yüksek öncelikli bir işlem bile onu bölemez. Bu durum, interrupt handler’ların ve sistem çağrılarının öngörülemeyen sürelerde çalışmasına neden olur.Preempt-RT
Preempt-RT, Linux çekirdeğini gerçek zamanlı uygulamalar için uygun hale getiren bir yama setidir. Bu yama, çekirdeğin neredeyse tamamını kesilebilir (preemptible) hale getirerek, yüksek öncelikli işlemlerin çekirdek modunda çalışan düşük öncelikli işlemleri bölebilmesini sağlar. Preempt-RT’nin temel amacı, sistem genelinde latency (gecikme) değerini minimize etmek ve gerçek zamanlı işlemler için deterministik davranış garantisi sunmaktır. Bu yaklaşım, sistem throughput’unu bir miktar azaltsa da, kritik zamanlı uygulamalar için gerekli olan öngörülebilir performansı sağlar. Gemstone Minimal imajında Preempt-RT Linux kerneli tercih edilmiştir.Örnek Uygulama
t3gemstone/examples reposunda yer alanpreempt-rt
projesi
Linux Preempt-RT çekirdeğinde gerçek zamanlı görev performansını test etmeye yönelik bir benchmark aracıdır. Programın
temel amacı, gerçek zamanlı sistemlerde kritik olan latency ve jitter değerlerini ölçerek sistem
performansını analiz etmektir. Uygulama, 1 milisaniye periyotta çalışan bir görevi simüle ederek, bu görevin ne kadar
tutarlı ve öngörülebilir şekilde çalıştığını değerlendirir.
Program çalışma mantığı olarak öncelikle SCHED_FIFO
scheduling policy kullanarak gerçek zamanlı bir thread oluşturur ve buna yüksek öncelik (priority 80) atar.
Bu thread, her 1ms’de bir çalışması gereken görevi simüle eder ve clock_nanosleep()
fonksiyonu ile hassas zamanlama yapar.
Program ayrıca mlockall() ile bellek sayfalarını RAM’de kilitleyerek page fault’ları önler ve gecikmeleri azaltır.
10,000 iterasyon boyunca performans verisi toplayarak, beklenen uyanma zamanı ile gerçek uyanma zamanı arasındaki farkı
(latency) ve periyodun tutarlılığını (jitter) ölçer.