sched/balance: single balance prototype

This patch just collect cpu load info, and prepare balance functions.
but no balance action now (return in balance_sds directly).

This prototype patchset is very simple and include a bit hard code.
For the single alance, 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 single 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 single 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 add a tuning knob for system level balance interval later.

Signed-off-by: Alex Shi <alex.shi@linaro.org>
sched/balance: send resched to load pulled cpu

If we pulled load to a idle cpu. we need to send a resched signal to it.
But since balance is actully disabled, It won't work now.

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>
sched/balance: replace idle_balance

Curren idle_balance will pull task on behalf of this group. That is
not needed in central balance.

Signed-off-by: Alex Shi <alex.shi@linaro.org>
sched/idle_balance: add a simple balance interval for new idle balance

It is a very simple interval for prevent idle_balance running too much.

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