#include #define HZ 1000 #define MIN_TIMESLICE ( 10 * HZ / 1000) #define MAX_TIMESLICE (200 * HZ / 1000) #define MAX_USER_RT_PRIO 100 #define MAX_RT_PRIO MAX_USER_RT_PRIO #define MAX_PRIO (MAX_RT_PRIO + 40) #define NICE_TO_PRIO(nice) (MAX_RT_PRIO + (nice) + 20) #define USER_PRIO(p) ((p)-MAX_RT_PRIO) #define MAX_USER_PRIO (USER_PRIO(MAX_PRIO)) #define BASE_TIMESLICE(p) (MIN_TIMESLICE + \ ((MAX_TIMESLICE - MIN_TIMESLICE) * (MAX_PRIO-1-p)/(MAX_USER_PRIO - 1))) #define BASE_TIMESLICE2(p) (MAX_TIMESLICE - \ ((MAX_TIMESLICE - MIN_TIMESLICE) * (MAX_PRIO-1-p)/(MAX_USER_PRIO - 1))) #define BASE_TIMESLICE3(p) (prio < MAX_RT_PRIO ? MIN_TIMESLICE : (MAX_TIMESLICE - \ ((MAX_TIMESLICE - MIN_TIMESLICE) * (MAX_PRIO-1-p)/(MAX_USER_PRIO - 1)))) int main(int argc, char *argv[]) { // original timeslice calculation for (int nice = -20; nice <= 19; nice++) printf("nice: %d, timeslice: %d ms\n", nice, BASE_TIMESLICE(NICE_TO_PRIO(nice)) * 1000 / HZ); printf("\n"); // reversed timeslice calculation for (int nice = -20; nice <= 19; nice++) printf("nice: %d, timeslice: %d ms\n", nice, BASE_TIMESLICE2(NICE_TO_PRIO(nice)) * 1000 / HZ); printf("\n"); // dynamic priority based timeslice calculation for (int prio = 0; prio < MAX_PRIO; prio++) printf("prio: %d, timeslice: %d ms\n", prio, BASE_TIMESLICE3(prio) * 1000 / HZ); return 0; }