Re: [PATCH] mm/slub: Make __ksize() faster

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

 



On Fri, Mar 08, 2024 at 06:26:11PM +0000, Matthew Wilcox wrote:
> On Fri, Mar 08, 2024 at 09:12:06AM -0800, Christoph Lameter (Ampere) wrote:
> > 
> > > On Fri, Mar 08, 2024 at 11:27:32AM -0500, Kent Overstreet wrote:
> > > > On Fri, Mar 08, 2024 at 02:58:48PM +0000, Matthew Wilcox wrote:
> > > > > There are potentiually better uses for those bits.  We could turn
> > > > > folio_test_slab() into a PageType test, freeing up a page flag.
> > > > 
> > > > They overlap _mapcount, did you figure out how to use that for a
> > > > PageType enum?
> > > 
> > > In 2018 ... 6e292b9be7f4358985ce33ae1f59ab30a8c09e08
> > > 
> > 
> > This seems to be 32 bit field. We could segment that into two unsigned
> > shorts. In fact any operation on a slab larger than 2xPAGE_SIZE is directly
> > turned into a page allocator call bypassing slub. So you only need 0 ... 2 *
> > PAGE_SIZE for the range of the int.
> 
> Are there any CPUs with PAGE_SIZE > 65535?  ;-)
> 
> It could, just about, be done.  Although not on Hexagon with its crazy
> 256kB page.  Right now, I reserve 0xf000007f to catch over/underflow,
> although this is perhaps excessive and I could get away with just
> 0x8000007f.  That leaves 24 bits.  We've currently got 4 in use, and I
> want to add two more (Slab and HugeTLB), so there's 18 bits remaining.
> 
> So is it really worth burning all the remaining bits on implementing
> ksize with one fewer pointer dereference, given that struct kmem_cache
> is read-mostly and should live in the CPU cache quite well?

Ok, this is the first I'd seen of these PageType shenanigans :)

That definitely takes priority over shaving cycles here; but could we
clean that up and expand it?

Does it really need to be a bitmask? And really, enums should be enums
(that we can give a proper type name to) not #defines and raw ints.

If we did that, and killed PG_slab and made it part of the PageType
enum, that frees up a few bits.




[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