Linux çekirdeğinin Completely Fair Scheduler'ı (CFS), her işlem için sanal çalışma süresini (vruntime) izleyerek CPU zamanını dağıtır. Bu yaklaşımın özünde basit ama derin bir fikir yatar: fiziksel zamanı, işlemin nice değerine göre ölçeklendirilmiş sanal bir eksene yansıtmak. cfs zamanlayıcı vruntime değeri şu formülle güncellenir: vruntime += delta_exec × (NICE_0_LOAD / se.load.weight) Burada delta_exec gerçek geçen süre, NICE_0_LOAD ise nice=0 için sabit ağırlık değeridir (1024). Yüksek öncelikli (düşük nice) bir sürecin load.weight değeri daha büyük olur; dolayısıyla aynı fiziksel süre daha küçük bir vruntime artışına karşılık gelir. Zamanlayıcı, kırmızı-siyah ağacında her zaman en düşük vruntime'a sahip süreci çalıştırır. Bu tasarımın kritik bir sonucu var: CFS tam anlamıyla adil değil, ağırlıklı adildir. Ağırlık dönüşümü 1.25 tabanlı üstel bir tabloya (prio_to_weight) dayanır. Nice değeri 1 birim düşünce ağırlık yaklaşık %10 artar; bu da uzun vadede CPU payının orantılı biçimde kaymasına yol açar. Pratik bir sorun: vruntime taşma (wraparound) riski. 64-bit unsigned değer olduğundan milyonlarca yıl sürmeden taşmaz; ancak yeni forklanan süreçlere verilen başlangıç vruntime'ı yanlış ayarlanırsa starvation oluşur. Çekirdek bu durumu min_vruntime ile çözer: yeni süreç hiçbir zaman mevcut ağacın minimumunun altında başlamaz. cfs zamanlayıcı vruntime mekanizmasının güzel yanı, preemption kararını da kapsamasıdır. sched_entity'nin vruntime'ı, çalışmakta olan sürecin vruntime'ından ideal çalışma dilimi (sched_latency / nr_running) kadar geride kalırsa preemption tetiklenir. Böylece hem adillik hem de gecikme garantisi tek bir sayısal karşılaştırmaya indirgenir. Cgroups entegrasyonu meseleyi bir katman daha karmaşık kılar. Grup zamanlayıcı, ağırlık hesabını hiyerarşik olarak yapar; her grup kendi sanal zamanını tutar ve bireysel sched_entity'ler bu grubun ağırlıklı zamanından pay alır. Bu, konteyner ortamlarında CPU limitleri koymayı mümkün kılar ama vruntime yorumlamayı çok daha sezgisel olmaktan çıkarır. Performans izleme açısından: /proc/sched_debug dosyası, her çalışan sürece ait vruntime ve weight değerlerini gerçek zamanlı gösterir. Bir sistemde adalet bozulduğunu düşünüyorsanız bu dosya ilk başvuru noktanızdır.