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