Re: ext3 allocate-with-reservation latencies
From: Mingming Cao
Date: Wed Apr 06 2005 - 00:37:27 EST
On Tue, 2005-04-05 at 06:13 +0200, Ingo Molnar wrote:
> * Lee Revell <rlrevell@xxxxxxxxxxx> wrote:
>
> > I can trigger latencies up to ~1.1 ms with a CVS checkout. It looks
> > like inside ext3_try_to_allocate_with_rsv, we spend a long time in this
> > loop:
> >
> > ext3_test_allocatable (bitmap_search_next_usable_block)
> > find_next_zero_bit (bitmap_search_next_usable_block)
> > find_next_zero_bit (bitmap_search_next_usable_block)
> >
> > ext3_test_allocatable (bitmap_search_next_usable_block)
> > find_next_zero_bit (bitmap_search_next_usable_block)
> > find_next_zero_bit (bitmap_search_next_usable_block)
>
> Breaking the lock is not really possible at that point, and it doesnt
> look too easy to make that path preemptable either. (To make it
> preemptable rsv_lock would need to become a semaphore (this could be
> fine, as it's only used when a new reservation window is created).)
It seems we are holding the rsv_block while searching the bitmap for a
free bit. In alloc_new_reservation(), we first find a available to
create a reservation window, then we check the bitmap to see if it
contains any free block. If not, we will search for next available
window, so on and on. During the whole process we are holding the global
rsv_lock. We could, and probably should, avoid that. Just unlock the
rsv_lock before the bitmap search and re-grab it after it. We need to
make sure that the available space that are still available after we re-
grab the lock.
Another option is to hold that available window before we release the
rsv_lock, and if there is no free bit inside that window, we will remove
it from the tree in the next round of searching for next available
window.
I prefer the second option, and plan to code it up soon. Any comments?
Thanks,
Mingming
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/