Bagaimana cara kerjanya?

20

sched_setscheduler mengatakan:

Semua penjadwalan adalah preemptive: jika suatu proses dengan prioritas statis yang lebih tinggi siap untuk dijalankan, proses yang sedang berjalan akan didahului dan dikembalikan ke daftar tunggu untuk tingkat prioritas statisnya.

sementara setpriority mengatakan

Hal ini menyebabkan nilai-nilai bagus yang sangat rendah (+19) benar-benar memberikan sedikit CPU untuk suatu proses setiap kali ada beban prioritas lain yang lebih tinggi pada sistem, dan membuat nilai-nilai bagus yang tinggi (-20) mengantarkan sebagian besar CPU ke aplikasi yang membutuhkannya.

Jadi, bagaimana mengubah nilai bagus akan mempengaruhi pelaksanaan program? Apakah ini mirip dengan penjadwalan RT (di mana program dengan nilai bagus yang lebih tinggi akan mengganggu program dengan nilai bagus yang lebih rendah)?


Semua informasi di internet adalah cara menggunakan nice, dan cara mengubah prioritas suatu proses. Tidak ada tautan yang menjelaskan bagaimana tepatnya proses dengan berbagai prioritas berfungsi. Saya bahkan tidak dapat menemukan kode sumbernya.

BЈовић
sumber

Jawaban:

24

Proporsi waktu prosesor yang diterima proses tertentu ditentukan oleh perbedaan relatif dalam kebaikan antara itu dan proses runnable lainnya.

Linux Completely Fair Scheduler (CFS) menghitung bobot berdasarkan kebaikan. Beratnya kira-kira setara dengan 1024 / (1.25 ^ nice_value). Ketika nilai bagus berkurang, berat meningkat secara eksponensial. Kutu waktu yang dialokasikan untuk proses sebanding dengan bobot proses dibagi dengan berat total semua proses yang dapat dijalankan. Implementasi CFS ada di kernel/sched/fair.c.

CFS memiliki latensi target untuk durasi penjadwalan. Latensi target yang lebih kecil menghasilkan interaktivitas yang lebih baik, tetapi ketika latensi target menurun, overhead switching meningkat, sehingga mengurangi throughput keseluruhan.

Diberikan misalnya target latensi 20 milidetik dan dua proses runnable yang sama baiknya, maka kedua proses akan berjalan selama 10 milidetik masing-masing sebelum ditentukan sebelumnya demi proses yang lain. Jika ada 10 proses dengan kualitas yang sama, masing-masing berjalan selama 2 milidetik.

Sekarang perhatikan dua proses, satu dengan kebaikan 0 (default), yang lain dengan kebaikan 5. Perbedaan proporsional antara bobot yang sesuai kira-kira 1/3, yang berarti bahwa proses prioritas yang lebih tinggi menerima kutu waktu sekitar 15 milidetik. sedangkan proses dengan prioritas lebih rendah menerima kutu waktu 5 milidetik.

Terakhir, pertimbangkan dua proses dengan nilai kebaikan masing-masing 5 dan 10. Sementara kebaikan mutlak lebih besar dalam hal ini, perbedaan relatif antara nilai-nilai kebaikan adalah sama seperti pada contoh sebelumnya, menghasilkan pembagian kutu waktu yang identik.

Thomas Nyman
sumber
Hal yang saya cari. Terima kasih! Kemudian saya menemukan artikel ini yang menjelaskan semuanya secara rinci, tetapi bukan apa yang baru saja Anda tulis.
BЈовић
Ada sesuatu yang tidak saya mengerti .. apa peran vruntime?
Surfer pada musim gugur
@Surferonthefall vruntime adalah mekanisme internal CFS yang melacak banyak proses waktu CPU yang dialokasikan. Pertanyaan ini adalah tentang nilai bagus yang terlihat oleh ruang pengguna. Jika Anda memiliki pertanyaan tentang internal CFS, dan tidak dapat menemukan jawaban di tempat lain , ajukan pertanyaan baru
Thomas Nyman