VIMAGE UDP memory leak fix

Marko Zec zec at fer.hr
Fri Nov 21 15:20:50 UTC 2014


On Fri, 21 Nov 2014 15:01:13 +0000
"Robert N. M. Watson" <rwatson at FreeBSD.org> wrote:

> 
> On 21 Nov 2014, at 11:02, Marko Zec <zec at fer.hr> wrote:
> 
> >> I had convinced myself for UDP many years ago that it was ok to
> >> remove it.  People have touched the code however so it’s
> >> definitively worth re-checking again.
> >> 
> >> For TCP we clearly cannot do it (yet, and couldn’t back then).
> >> But TCP was the only of the few cases I had left unfixed back then.
> >> Can’t remember what the others were (was like 3 or 4 of them;
> >> could also be some of the fixes were indeed committed back then.
> > 
> > Now that we've found ourselves in this discussion, I'm really
> > becoming curious why exactly do we need UMA_ZONE_NOFREE for network
> > stack zones at all?   Admittedly, I always thought that the primary
> > purpose of UMA_ZONE_NOFREE was to prevent uma_reclaim() from paging
> > out _used_ zone pages, but reviewing the uma code reveals that this
> > might not be the case, i.e. that NOFREE only prevents _unused_
> > pages to be freed by uma_reclaim().
> > 
> > Moreover, all uma_zalloc() calls as far as I can see are flagged as
> > M_NOWAIT and are followed by checks for allocation failures, so that
> > part seems to be covered.
> > 
> > So, what's really the problem which UMA_ZONE_NOFREE flagging is
> > supposed to solve these days? (you claim that we clearly need it
> > for TCP - why)?
> 
> Bjoern and I chatted for the last twenty or so minutes about the
> code, and believe that as things stand, it is *not* safe to turn off
> UMA_ZONE_NOFREE for TCP due to a teardown race in TCP that has been
> known about and discussed for several years, but is some work to
> resolve and that we've not yet found time to do so. The XXXRW's in
> tcp_timer.c are related to this. We're pondering ways to fix it but
> think this is not something that can be rushed.

OK fair enough - thanks a lot for looking into this!

Skimming through a bunch of hosts with moderately loaded hosts with
reasonably high uptime I couldn't find one where net.inet.tcp.timer_race
was not zero. A ny suggestions how to best reproduce the race(s) in
tcp_timer.c?

Marko


More information about the freebsd-net mailing list