Re: panic: uma_zone_slab is looping

From: Bosko Milekic <bmilekic_at_technokratis.com>
Date: Tue, 28 Dec 2004 17:05:51 -0500
On Tue, Dec 28, 2004 at 03:38:15PM -0500, John Baldwin wrote:
> This is what I wondered about earlier in the thread.  The problem is that 
> recursion needs to be a per-allocation (or per-thread) state, not per-zone, 
> since a zone may be used by multiple threads at the same time.  Is it really 
> desired behavior of the bucket zone that if two threads alloc at the same 
> time one gets NULL because it sees the other's use and thinks it is 
> recursing?

  Not really, but in the bucket zone case it is less of a problem
  because a failed bucket allocation will just result in a
  uma_zalloc_internal() from occuring, and the probability of the bucket
  allocation failing because of that uk_recurse being [bogusely]
  non-zero and forcing a failure is relatively small, in that it might
  not be worth the effort of further instrumenting. 

  In theory, the uk_recurse per-keg/zone flag is supposed to protect
  from re-entry from the VM, but in practise this is only really
  possible (or should only be possible) with the bucket zone itself.  We
  should not have any OFFPAGE allocations from below (VM) requiring
  separate slab headers.  The uk_recurse flag is imperfect in that
  sometimes it'll tell you it thinks there is a recursion but when in
  fact there isn't.  As long as the behavior is constrained to solely
  the bucket zone and the probability of occurance of the latter event
  is small (even if it does occur for the bucket zone, it is not fatal,
  like it could be for other zones), it shouldn't matter. 

-- 
Bosko Milekic
bmilekic_at_technokratis.com
bmilekic_at_FreeBSD.org
Received on Tue Dec 28 2004 - 21:05:54 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:25 UTC