Re: [PATCH v3] mm: add ztree - new allocator for use via zpool API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



В Вт, 08/03/2022 в 15:40 +0000, Matthew Wilcox пишет:
> On Tue, Mar 08, 2022 at 06:16:35PM +0300, Ananda Badmaev wrote:
> > > Hm.  So 368 bytes on 64-bit, but 372 bytes on 32-bit?  Is that
> > > intentional?  Why 11?
> > > 
> > Yes, 'slot_size' and 'slots_per_block' values are chosen so that in
> > general the range from 0 to PAGE_SIZE is split more or less evenly
> > and
> > the size of the block is as close as possible to the power of 2.
> > Also
> > 'slot_size' values are aligned to the size of long.
> 
> Is it intrinsic to the design that the blocks are aligned to
> sizeof(long)?

slot_size values must be aligned so that the slot addresses in blocks
are also algined to avoid potential problems with unalinged access. I
guess 4/8 byte alignment is enough for 32/64 bit systems respectively.

> > > 
> > > You have some very strange indentation (throughout).
> > > 
> > I was trying to limit the length of lines.
> 
> But you didn't achieve that.  The _start_ of the line containing
> block_type and gfp was _more indented_ than the end of the previous
> line.  Do you have unusual tab settings?
> 
Maybe it's because I have tab size 4 in my editor. 

> > > thinking                                                    
> > > about it".  What if you have two threads that execute this path
> > > concurrently?  Looks to me like you leak the memory allocated by
> > > the
> > > first thread.
> > > 
> > Probably I should pass GFP_ATOMIC flag to alloc_block() and execute
> > this entire section of code under single spinlock.
> 
> I think that's a bad approach.  Better would be:
> 
>         spin_lock();
>         if (free_slot_block)
>                 goto found;
>         spin_unlock();
>         block = alloc_block();
>         spin_lock();
>         if (free_slot_block) {
>                 free_block(block);
>                 block = free_slot_block;
>         } else {
>                 free_slot_block = block;
>         }
> found:
>         ...
>         spin_unlock();

Yes, seems really better to do like this. Solution with GFP_ATOMIC
probably will improve the worst time of ztree_alloc(), which was not
big issue in the tests, but most likely general efficiency will be
degraded.






[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux