CFS (yang merupakan penjadwal default untuk proses) tidak memiliki kutu waktu tetap, ini dihitung pada waktu proses tergantung latensi yang ditargetkan (sysctl_sched_latency
) dan jumlah proses yang berjalan. Kutu waktu tidak boleh kurang dari perincian minimum (sysctl_sched_min_granularity
).
Kutukan waktu akan selalu berada di antara sysctl_sched_min_granularity
dan sysctl_sched_latency
, yang defaultnya masing-masing 0,75 ms dan 6 ms dan ditentukan di kernel/sched/fair.c.
Namun kutu waktu sebenarnya tidak diekspor ke ruang pengguna.
Kuantum yang dialokasikan untuk proses tertentu dapat bervariasi:
Anda dapat menyesuaikan "slice" dengan menyesuaikan sched_latency_ns dansched_min_granularity_ns , tetapi perhatikan bahwa "irisan" bukanlah kuantum tetap. Perhatikan juga bahwa keputusan preemption CFS didasarkan pada keadaan sesaat. Sebuah tugas mungkin telah menerima "slice" penuh (variabel) dari waktu CPU, tetapi preemption akan dipicu hanya jika tugas yang lebih layak tersedia, jadi "slice" bukanlah "waktu CPU maksimum tanpa gangguan" yang mungkin Anda harapkan. .. tapi agak mirip.
Ini karena Penjadwal yang Sepenuhnya Adil, penjadwal Linux default, memberikan proporsi prosesor ke suatu proses daripada kutu waktu tetap. Artinya, timelice untuk setiap proses sebanding dengan beban saat ini dan ditimbang dengan nilai prioritas proses.
Untuk proses waktu-nyata tujuan khusus yang menggunakan SCHED_RR, timelice default didefinisikan dalam kernel Linux sebagai RR_TIMESLICE
di include/linux/sched/rt.h.
/*
* default timeslice is 100 msecs (used only for SCHED_RR tasks).
* Timeslices get refilled after they expire.
*/
#define RR_TIMESLICE (100 * HZ / 1000)
Anda dapat menggunakan sched_rr_get_interval()
untuk mendapatkan interval SCHED_RR untuk proses SCHED_RR tertentu.