|
@@ -33,6 +33,31 @@ extern __read_mostly int scheduler_running;
|
|
|
*/
|
|
|
#define NS_TO_JIFFIES(TIME) ((unsigned long)(TIME) / (NSEC_PER_SEC / HZ))
|
|
|
|
|
|
+/*
|
|
|
+ * Increase resolution of nice-level calculations for 64-bit architectures.
|
|
|
+ * The extra resolution improves shares distribution and load balancing of
|
|
|
+ * low-weight task groups (eg. nice +19 on an autogroup), deeper taskgroup
|
|
|
+ * hierarchies, especially on larger systems. This is not a user-visible change
|
|
|
+ * and does not change the user-interface for setting shares/weights.
|
|
|
+ *
|
|
|
+ * We increase resolution only if we have enough bits to allow this increased
|
|
|
+ * resolution (i.e. BITS_PER_LONG > 32). The costs for increasing resolution
|
|
|
+ * when BITS_PER_LONG <= 32 are pretty high and the returns do not justify the
|
|
|
+ * increased costs.
|
|
|
+ */
|
|
|
+#if 0 /* BITS_PER_LONG > 32 -- currently broken: it increases power usage under light load */
|
|
|
+# define SCHED_LOAD_RESOLUTION 10
|
|
|
+# define scale_load(w) ((w) << SCHED_LOAD_RESOLUTION)
|
|
|
+# define scale_load_down(w) ((w) >> SCHED_LOAD_RESOLUTION)
|
|
|
+#else
|
|
|
+# define SCHED_LOAD_RESOLUTION 0
|
|
|
+# define scale_load(w) (w)
|
|
|
+# define scale_load_down(w) (w)
|
|
|
+#endif
|
|
|
+
|
|
|
+#define SCHED_LOAD_SHIFT (10 + SCHED_LOAD_RESOLUTION)
|
|
|
+#define SCHED_LOAD_SCALE (1L << SCHED_LOAD_SHIFT)
|
|
|
+
|
|
|
#define NICE_0_LOAD SCHED_LOAD_SCALE
|
|
|
#define NICE_0_SHIFT SCHED_LOAD_SHIFT
|
|
|
|
|
@@ -784,7 +809,6 @@ static inline void finish_lock_switch(struct rq *rq, struct task_struct *prev)
|
|
|
}
|
|
|
#endif /* __ARCH_WANT_UNLOCKED_CTXSW */
|
|
|
|
|
|
-
|
|
|
static inline void update_load_add(struct load_weight *lw, unsigned long inc)
|
|
|
{
|
|
|
lw->weight += inc;
|