9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
* [9fans] cache lines, and 60000 cycles of doom
@ 2014-06-19 16:01 erik quanstrom
  2014-06-20  5:03 ` Devon H. O'Dell
  2014-06-20  5:09 ` Bakul Shah
  0 siblings, 2 replies; 7+ messages in thread
From: erik quanstrom @ 2014-06-19 16:01 UTC (permalink / raw)
  To: 9fans

i'm seeing some mighty interesting timing on my intel ivy bridge.
i found a bug in the file server aoe implementation (can't happen
if you're using the uniprocessor x86 version) that happens because
the Srb is freed before wakeup completes.  to solve this there is
some code that sets the state (this is from ken's ancient scheduler,
by way of sape)

	wakeup(&srb);
	srb->state = Free;

code that receives it is like this

	sleep(&srb, srbdone, srb);
	cycles(&t0);
	for(n = 0; srb->state != Free; n++){
		if(srb->wmach == m->machno)
			sched();
		else
			monmwait(&srb->state, Alloc);
	}
	cycles(&t1);
	free(srb);

the astounding thing is that t1-t0 is often ~ 60,000 cycles.
it only hits a small fraction of the time, and the average is
much lower.  but that just blows the mind.  60000 cycles!

(other versions with sched were much worse.)

as far as i can tell, there are no funny bits in the scheduler that
can cause this, and no wierd scheduling is going on.

i'm baffled.

- erik



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-06-20 13:07 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-19 16:01 [9fans] cache lines, and 60000 cycles of doom erik quanstrom
2014-06-20  5:03 ` Devon H. O'Dell
2014-06-20 11:50   ` erik quanstrom
2014-06-20 12:47     ` Devon H. O'Dell
2014-06-20 13:07       ` erik quanstrom
2014-06-20  5:09 ` Bakul Shah
2014-06-20 11:45   ` erik quanstrom

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).