On Fri, 21 Nov 2014 15:01:13 +0000 "Robert N. M. Watson" <[email protected]> wrote:
> > On 21 Nov 2014, at 11:02, Marko Zec <[email protected]> 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 _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "[email protected]"
