[kernel/f14/master] Add sched-35-increment-cache_nice_tries-only-on-periodic-lb.patch
Chuck Ebbert
cebbert at fedoraproject.org
Sat Sep 25 12:30:52 UTC 2010
commit b49b116bb07cc234c6da4d93d6f66b26a8eb1554
Author: Chuck Ebbert <cebbert at redhat.com>
Date: Sat Sep 25 08:29:41 2010 -0400
Add sched-35-increment-cache_nice_tries-only-on-periodic-lb.patch
kernel.spec | 4 +
...ment-cache_nice_tries-only-on-periodic-lb.patch | 93 ++++++++++++++++++++
2 files changed, 97 insertions(+), 0 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index e8e6cc6..e61da1f 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -749,6 +749,7 @@ Patch12575: sched-15-update-rq-clock-for-nohz-balanced-cpus.patch
Patch12580: sched-20-fix-rq-clock-synchronization-when-migrating-tasks.patch
Patch12585: sched-25-move-sched_avg_update-to-update_cpu_load.patch
Patch12590: sched-30-sched-fix-nohz-balance-kick.patch
+Patch12595: sched-35-increment-cache_nice_tries-only-on-periodic-lb.patch
Patch13600: btusb-macbookpro-6-2.patch
Patch13601: btusb-macbookpro-7-1.patch
@@ -1392,6 +1393,7 @@ ApplyPatch sched-15-update-rq-clock-for-nohz-balanced-cpus.patch
ApplyPatch sched-20-fix-rq-clock-synchronization-when-migrating-tasks.patch
ApplyPatch sched-25-move-sched_avg_update-to-update_cpu_load.patch
ApplyPatch sched-30-sched-fix-nohz-balance-kick.patch
+ApplyPatch sched-35-increment-cache_nice_tries-only-on-periodic-lb.patch
ApplyPatch btusb-macbookpro-7-1.patch
ApplyPatch btusb-macbookpro-6-2.patch
@@ -1998,6 +2000,8 @@ fi
sched-00-fix-user-time-incorrectly-accounted-as-system-time-on-32-bit.patch
- Revert: "drm/nv50: initialize ramht_refs list for faked 0 channel"
(our DRM update removes ramht_refs entirely.)
+- Add sched-35-increment-cache_nice_tries-only-on-periodic-lb.patch, another
+ fix for excessive scheduler load balancing.
* Thu Sep 23 2010 Kyle McMartin <kyle at redhat.com> 2.6.35.5-32
- Serialize mandocs/htmldocs build, since otherwise it will constantly
diff --git a/sched-35-increment-cache_nice_tries-only-on-periodic-lb.patch b/sched-35-increment-cache_nice_tries-only-on-periodic-lb.patch
new file mode 100644
index 0000000..5277dc7
--- /dev/null
+++ b/sched-35-increment-cache_nice_tries-only-on-periodic-lb.patch
@@ -0,0 +1,93 @@
+From: Venkatesh Pallipadi <venki at google.com>
+Date: Sat, 11 Sep 2010 01:19:17 +0000 (-0700)
+Subject: sched: Increment cache_nice_tries only on periodic lb
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fmingo%2Flinux-2.6-x86.git;a=commitdiff_plain;h=58b26c4c025778c09c7a1438ff185080e11b7d0a
+
+sched: Increment cache_nice_tries only on periodic lb
+
+scheduler uses cache_nice_tries as an indicator to do cache_hot and
+active load balance, when normal load balance fails. Currently,
+this value is changed on any failed load balance attempt. That ends
+up being not so nice to workloads that enter/exit idle often, as
+they do more frequent new_idle balance and that pretty soon results
+in cache hot tasks being pulled in.
+
+Making the cache_nice_tries ignore failed new_idle balance seems to
+make better sense. With that only the failed load balance in
+periodic load balance gets accounted and the rate of accumulation
+of cache_nice_tries will not depend on idle entry/exit (short
+running sleep-wakeup kind of tasks). This reduces movement of
+cache_hot tasks.
+
+schedstat diff (after-before) excerpt from a workload that has
+frequent and short wakeup-idle pattern (:2 in cpu col below refers
+to NEWIDLE idx) This snapshot was across ~400 seconds.
+
+Without this change:
+domainstats: domain0
+ cpu cnt bln fld imb gain hgain nobusyq nobusyg
+ 0:2 306487 219575 73167 110069413 44583 19070 1172 218403
+ 1:2 292139 194853 81421 120893383 50745 21902 1259 193594
+ 2:2 283166 174607 91359 129699642 54931 23688 1287 173320
+ 3:2 273998 161788 93991 132757146 57122 24351 1366 160422
+ 4:2 289851 215692 62190 83398383 36377 13680 851 214841
+ 5:2 316312 222146 77605 117582154 49948 20281 988 221158
+ 6:2 297172 195596 83623 122133390 52801 21301 929 194667
+ 7:2 283391 178078 86378 126622761 55122 22239 928 177150
+ 8:2 297655 210359 72995 110246694 45798 19777 1125 209234
+ 9:2 297357 202011 79363 119753474 50953 22088 1089 200922
+10:2 278797 178703 83180 122514385 52969 22726 1128 177575
+11:2 272661 167669 86978 127342327 55857 24342 1195 166474
+12:2 293039 204031 73211 110282059 47285 19651 948 203083
+13:2 289502 196762 76803 114712942 49339 20547 1016 195746
+14:2 264446 169609 78292 115715605 50459 21017 982 168627
+15:2 260968 163660 80142 116811793 51483 21281 1064 162596
+
+With this change:
+domainstats: domain0
+ cpu cnt bln fld imb gain hgain nobusyq nobusyg
+ 0:2 272347 187380 77455 105420270 24975 1 953 186427
+ 1:2 267276 172360 86234 116242264 28087 6 1028 171332
+ 2:2 259769 156777 93281 123243134 30555 1 1043 155734
+ 3:2 250870 143129 97627 127370868 32026 6 1188 141941
+ 4:2 248422 177116 64096 78261112 22202 2 757 176359
+ 5:2 275595 180683 84950 116075022 29400 6 778 179905
+ 6:2 262418 162609 88944 119256898 31056 4 817 161792
+ 7:2 252204 147946 92646 122388300 32879 4 824 147122
+ 8:2 262335 172239 81631 110477214 26599 4 864 171375
+ 9:2 261563 164775 88016 117203621 28331 3 849 163926
+10:2 243389 140949 93379 121353071 29585 2 909 140040
+11:2 242795 134651 98310 124768957 30895 2 1016 133635
+12:2 255234 166622 79843 104696912 26483 4 746 165876
+13:2 244944 151595 83855 109808099 27787 3 801 150794
+14:2 241301 140982 89935 116954383 30403 6 845 140137
+15:2 232271 128564 92821 119185207 31207 4 1416 127148
+
+Signed-off-by: Venkatesh Pallipadi <venki at google.com>
+Signed-off-by: Peter Zijlstra <a.p.zijlstra at chello.nl>
+LKML-Reference: <1284167957-3675-1-git-send-email-venki at google.com>
+Signed-off-by: Ingo Molnar <mingo at elte.hu>
+---
+
+[ 2.6.35.x backport ]
+
+diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
+index a171138..aa16cf1 100644
+--- a/kernel/sched_fair.c
++++ b/kernel/sched_fair.c
+@@ -3031,7 +3031,14 @@ redo:
+
+ if (!ld_moved) {
+ schedstat_inc(sd, lb_failed[idle]);
+- sd->nr_balance_failed++;
++ /*
++ * Increment the failure counter only on periodic balance.
++ * We do not want newidle balance, which can be very
++ * frequent, pollute the failure counter causing
++ * excessive cache_hot migrations and active balances.
++ */
++ if (idle != CPU_NEWLY_IDLE)
++ sd->nr_balance_failed++;
+
+ if (need_active_balance(sd, sd_idle, idle)) {
+ raw_spin_lock_irqsave(&busiest->lock, flags);
More information about the scm-commits
mailing list