Linux Scheduler'ın Alt Katı - EEVDF ile CPU Zamanı Nasıl Dağıtılıyor?

Linux scheduler'ın modern yaklaşımını, virtual runtime, latency ve EEVDF mantığı üzerinden inceliyoruz.

Hakan E. · · Akademi

Linux Scheduler · heworx Akademi

Bir process'in CPU'ya ulaşması dışarıdan bakınca basit görünür. Çalışacak iş varsa çalıştır, yoksa sıradakine geç. Kernel tarafında ise mesele, onlarca ya da yüzlerce runnable task arasında kimin ne zaman CPU alacağını adil biçimde seçmektir. EEVDF yaklaşımı, task'ların sanal çalışma sürelerini ve uygunluk zamanlarını hesaba katarak yalnızca kimin en az çalıştığına değil, kimin artık gerçekten çalışmaya hak kazandığına da bakar. Yani CPU kuyruğu, market kasası kuyruğundan biraz daha medeni davranmaya çalışır.

Buradaki önemli kavramlar virtual runtime, lag ve virtual deadline'dır. Bir task sistemden hak ettiğinden fazla CPU aldıysa lag değeri bunu gösterir. Daha az aldıysa scheduler ileride bu açığı kapatmaya çalışır. Böylece yalnızca throughput değil, interaktif uygulamalardaki gecikme de kontrol altında tutulur. Nice değeri ise doğrudan saniye dağıtmaz, scheduler ağırlığını değiştirir.

Bu konuyu anlamanın en iyi yolu scheduler'ı içini göremediğimiz bir kutu gibi görmekten vazgeçmektir. perf sched, trace-cmd ve scheduler tracepoint'leriyle task geçişlerini izlediğinizde masaüstünde yaşadığınız küçük takılmaların aslında oldukça matematiksel bir geçmişi olduğunu görürsünüz. Bilgisayar size kızmıyordur, sadece birileri virtual deadline'ını kaçırmıştır.

heworx

heworx