Thread (45 messages) 45 messages, 5 authors, 2011-05-30

Re: [PATCHv2 10/14] virtio_net: limit xmit polling

From: Rusty Russell <hidden>
Date: 2011-05-30 06:31:52
Also in: kvm, lkml

On Sat, 28 May 2011 23:02:04 +0300, "Michael S. Tsirkin" [off-list ref] wrote:
On Thu, May 26, 2011 at 12:58:23PM +0930, Rusty Russell wrote:
quoted
ie. free two packets for every one we're about to add.  For steady state
that would work really well.
Sure, with indirect buffers, but if we
don't use indirect (and we discussed switching indirect off
dynamically in the past) this becomes harder to
be sure about. I think I understand why but
does not a simple capacity check make it more obvious?
...
quoted
 Then we hit the case where the ring
seems full after we do the add: at that point, screw latency, and just
try to free all the buffers we can.
I see. But the code currently does this:

	for(..)
		get_buf
	add_buf
	if (capacity < max_sk_frags+2) {
		if (!enable_cb)
			for(..)
				get_buf
	}


In other words the second get_buf is only called
in the unlikely case of race condition.

So we'll need to add *another* call to get_buf.
Is it just me or is this becoming messy?
Yes, good point.  I really wonder if anyone would be able to measure the
difference between simply freeing 2 every time (with possible extra
stalls for strange cases) and the more complete version.

But it runs against my grain to implement heuristics when one more call
would make it provably reliable.

Please find a way to make that for loop less ugly though!

Thanks,
Rusty.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help