kernel: sched: added smart wake-affine foundation

This one was missing for the prior commit!

wake-affine stuff is always trying to pull wakee close to waker, by theory,
this will bring benefit if waker's cpu cached hot data for wakee, or the
extreme ping-pong case.

And testing show it could benefit hackbench 15% at most.

However, the whole stuff is somewhat blindly and time-consuming, some
workload therefore suffer.

And testing show it could damage pgbench 50% at most.

Thus, wake-affine stuff should be more smart, and realise when to stop
it's thankless effort.

This patch introduced 'nr_wakee_switch', which will be increased each
time the task switch it's wakee.

So a high 'nr_wakee_switch' means the task has more than one wakee, and
bigger the number, higher the wakeup frequency.

Now when making the decision on whether to pull or not, pay attention on
the wakee with a high 'nr_wakee_switch', pull such task may benefit wakee,
but also imply that waker will face cruel competition later, it could be
very cruel or very fast depends on the story behind 'nr_wakee_switch',
whatever, waker therefore suffer.

Furthermore, if waker also has a high 'nr_wakee_switch', imply that multiple
tasks rely on it, then waker's higher latency will damage all of them, pull
wakee seems to be a bad deal.

Thus, when 'waker->nr_wakee_switch / wakee->nr_wakee_switch' become higher
and higher, the deal seems to be worse and worse.

The patch therefore help wake-affine stuff to stop it's work when:

wakee->nr_wakee_switch > factor &&
waker->nr_wakee_switch > (factor * wakee->nr_wakee_switch)
The factor here is the node-size of current-cpu, so bigger node will lead
to more pull since the trial become more severe.

After applied the patch, pgbench show 40% improvement at most.

Test:
Tested with 12 cpu X86 server and tip 3.10.0-rc7.

pgbench    basesmart

| db_size | clients |  tps  ||  tps  |
+---------+---------+-------+   +-------+
| 22 MB   |       1 | 10598 |   | 10796 |
| 22 MB   |       2 | 21257 |   | 21336 |
| 22 MB   |       4 | 41386 |   | 41622 |
| 22 MB   |       8 | 51253 |   | 57932 |
| 22 MB   |      12 | 48570 |   | 54000 |
| 22 MB   |      16 | 46748 |   | 55982 | +19.75%
| 22 MB   |      24 | 44346 |   | 55847 | +25.93%
| 22 MB   |      32 | 43460 |   | 54614 | +25.66%
| 7484 MB |       1 |  8951 |   |  9193 |
| 7484 MB |       2 | 19233 |   | 19240 |
| 7484 MB |       4 | 37239 |   | 37302 |
| 7484 MB |       8 | 46087 |   | 50018 |
| 7484 MB |      12 | 42054 |   | 48763 |
| 7484 MB |      16 | 40765 |   | 51633 | +26.66%
| 7484 MB |      24 | 37651 |   | 52377 | +39.11%
| 7484 MB |      32 | 37056 |   | 51108 | +37.92%
| 15 GB   |       1 |  8845 |   |  9104 |
| 15 GB   |       2 | 19094 |   | 19162 |
| 15 GB   |       4 | 36979 |   | 36983 |
| 15 GB   |       8 | 46087 |   | 49977 |
| 15 GB   |      12 | 41901 |   | 48591 |
| 15 GB   |      16 | 40147 |   | 50651 | +26.16%
| 15 GB   |      24 | 37250 |   | 52365 | +40.58%
| 15 GB   |      32 | 36470 |   | 50015 | +37.14%
CC: Ingo Molnar <mingo@kernel.org>
CC: Peter Zijlstra <peterz@infradead.org>
CC: Mike Galbraith <efault@gmx.de>
Signed-off-by: Michael Wang <wangyun@linux.vnet.ibm.com>