On Thu, 2013-07-04 at 17:38 +0800, Michael Wang wrote: > On 07/04/2013 05:13 PM, Peter Zijlstra wrote: > [snip] > > > > Right, but something like the below is limited in cost to at most 32/64 (I > > forgot the type) shifts. Now its probably not worth doing, but it shows > > things like that can be done in 'constant' time. > > > > now = jiffies; > > if (now - p->last_switch_decay > 8*sizeof(p->nr_wakee_switch)*HZ) { > > p->nr_wakee_switch = 0; > > p->last_switch_decay = now; > > } else while (now > p->last_switch_decay + HZ) { > > p->nr_wakee_switch >>= 1; > > p->last_switch_decay += HZ; > > } > > Hmm...interesting, some kind of cataclysm decay, not sure how it works > but yes, the cost was capped. > > Well, seems like we still have many follow-up research works after fix > the issue ;-)
Yeah. Like how to how to exterminate the plus sign, they munch cache lines, and have a general tendency to negatively impact benchmarks. Q6600 box, hackbench -l 1000 avg 3.10.0-regress 2.293 2.297 2.313 2.291 2.295 2.297 1.000 3.10.0-regressx 2.560 2.524 2.427 2.599 2.602 2.542 1.106 pahole said... marge:/usr/local/src/kernel/linux-3.x.git # tail virgin long unsigned int timer_slack_ns; /* 1512 8 */ long unsigned int default_timer_slack_ns; /* 1520 8 */ atomic_t ptrace_bp_refcnt; /* 1528 4 */ /* size: 1536, cachelines: 24, members: 125 */ /* sum members: 1509, holes: 6, sum holes: 23 */ /* bit holes: 1, sum bit holes: 26 bits */ /* padding: 4 */ /* paddings: 1, sum paddings: 4 */ }; marge:/usr/local/src/kernel/linux-3.x.git # tail michael long unsigned int default_timer_slack_ns; /* 1552 8 */ atomic_t ptrace_bp_refcnt; /* 1560 4 */ /* size: 1568, cachelines: 25, members: 128 */ /* sum members: 1533, holes: 8, sum holes: 31 */ /* bit holes: 1, sum bit holes: 26 bits */ /* padding: 4 */ /* paddings: 1, sum paddings: 4 */ /* last cacheline: 32 bytes */ }; ..but plugging holes, didn't help, moving this/that around neither, nor did letting pahole go wild to get the line back. It's plus signs I tell ya, the evil things must die ;-) -Mike -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/