sched/balance: central balance prototype

This patch just collect cpu load info, and prepare balance functions.
but no balance action now.

This prototype patchset is very simple and include a bit hard code.
For the central balance, the key problem is finding a algorithm to
distribute load between cpus. It is a bit similar with 'bin packing'
problem. Then I try to imitate the FFD (first fit decreasing) algorithm
to distribute the loads.

The central balance will do balance for all cpus in system.
Since it can match load among all cpus, not pull only like
current load balance, we don't need the nohz_idle_balance() function.
Also we don't need much tricks for task pin tasks.

An potential problem is that if the central balance happens on a large
system with thousand CPUs, collecting cpu info may ruin the balance cpu
cache. But since whenever do load balance for wherever sched domain,
there are some cpu cache must be stained and cost time to do load balance.
So the key judgment is that if the collected info used, if we collect
some level cpu load info, but can not conduct to a load balance, like
we are already the busiest group in domain. That is more worse.

If numa distance is quit large, or system maybe too large to frequency
balance, we can add a tuning knob for system level balance interval.

Signed-off-by: Alex Shi <alex.shi@linaro.org>
sched: remove un-used functions

We don't need nohz_idle_balance, since we can kick tasks to them.
and don't rebalance_domains.

Signed-off-by: Alex Shi <alex.shi@linaro.org>
sched/balance: just wake un/ov util tree

Fake balance, just walk unutil/ovutil tree, no actual balance doing.

This patch used for performance or debug bisection purpose.

Signed-off-by: Alex Shi <alex.shi@linaro.org>
sched/balance: task moving

Do central balance and moving task to balance.
But don't rebuild ovutil tree.

Signed-off-by: Alex Shi <alex.shi@linaro.org>
sched/balance: rebuild ovutil tree after task moving

This patch will rebuild over util tree after task moving, than
the next time balance will find out the suitable target cpu more
quick.

Also used for performance and debug bisection purpose.

Signed-off-by: Alex Shi <alex.shi@linaro.org>
sched/balance: add llc balance interval

Trade per cpu sd data touch by part llc cpu balance skip.
For further usage, need a per LLC data struct for last_balance and
interval variable.

Signed-off-by: Alex Shi <alex.shi@linaro.org>
sched/balance: add balance_interval to tuning top level balance frequency

Since central balance stains less cpu cache as current balance, we
can set the balance interval more short.

Signed-off-by: Alex Shi <alex.shi@linaro.org>