lkml.org 
[lkml]   [2008]   [May]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] virtio_net: free transmit skbs in a timer
Mark McLoughlin wrote:
> virtio_net currently only frees old transmit skbs just
> before queueing new ones. If the queue is full, it then
> enables interrupts and waits for notification that more
> work has been performed.
>
> However, a side-effect of this scheme is that there are
> always xmit skbs left dangling when no new packets are
> sent, against the Documentation/networking/driver.txt
> guideline:
>
> "... it is not allowed for your TX mitigation scheme
> to let TX packets "hang out" in the TX ring unreclaimed
> forever if no new TX packets are sent."
>
> Add a timer to ensure that any time we queue new TX
> skbs, we will shortly free them again.
>
> This fixes an easily reproduced hang at shutdown where
> iptables attempts to unload nf_conntrack and nf_conntrack
> waits for an skb it is tracking to be freed, but virtio_net
> never frees it.
>

Sorry to barge in late, but IMO the timer should be on the host, which
is cheaper than on the guest (well, a 100ms timer is likely zero cost,
but I still don't like it).

the host should fire a tx completion interrupt whenever the completion
queue has "enough" entries, where we can define "enough" now as the
halfway mark or a timer expiry, whichever comes earlier.

We can later improve "enough" to be "just enough so the timer never
triggers" and adjust it dynamically. It probably doesn't matter for
Linux, but I don't want to punish guests that can do true async
networking and depend on timely completion notification.

--
error compiling committee.c: too many arguments to function



\
 
 \ /
  Last update: 2008-05-13 09:49    [W:1.006 / U:0.088 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site