On Monday 20 February 2006 16:02, Peter Williams wrote: [snip description] Hi peter, I've had a good look and have just a couple of comments: --- #endif int prio, static_prio; +#ifdef CONFIG_SMP + int load_weight; /* for load balancing purposes */ +#endif --- Can this be moved up to be part of the other ifdef CONFIG_SMP? Not highly significant since it's in a .h file but looks a tiny bit nicer. --- +/* + * Priority weight for load balancing ranges from 1/20 (nice==19) to 459/20 (RT + * priority of 100). + */ +#define NICE_TO_LOAD_PRIO(nice) \ + ((nice >= 0) ? (20 - (nice)) : (20 + (nice) * (nice))) +#define LOAD_WEIGHT(lp) \ + (((lp) * SCHED_LOAD_SCALE) / NICE_TO_LOAD_PRIO(0)) +#define NICE_TO_LOAD_WEIGHT(nice) LOAD_WEIGHT(NICE_TO_LOAD_PRIO(nice)) +#define PRIO_TO_LOAD_WEIGHT(prio) NICE_TO_LOAD_WEIGHT(PRIO_TO_NICE(prio)) +#define RTPRIO_TO_LOAD_WEIGHT(rp) \ + LOAD_WEIGHT(NICE_TO_LOAD_PRIO(-20) + (rp)) --- The weighting seems not related to anything in particular apart from saying that -nice values are more heavily weighted. Since you only do this when setting the priority of tasks can you link it to the scale of (SCHED_NORMAL) tasks' timeslice instead even though that will take a fraction more calculation? RTPRIO_TO_LOAD_WEIGHT is fine since there isn't any obvious cpu proportion relationship to rt_prio level. Otherwise, good work, thanks! > Signed-off-by: Peter Williams Signed-off-by: Con Kolivas Cheers, Con