On 2023/5/27 23:54, Alexander H Duyck wrote: > On Wed, 2023-05-24 at 16:33 +0100, David Howells wrote: >> Make the page_frag_cache allocator's alignment parameter a power of 2 >> rather than a mask and give a warning if it isn't. >> >> This means that it's consistent with {napi,netdec}_alloc_frag_align() and >> allows __{napi,netdev}_alloc_frag_align() to be removed. I am trying to rmove the page frag implemetation in vhost_net_page_frag_refill() by using page_frag_alloc_align(), and I ended up having a simiar patch as this one. >> > > This goes against the original intention of these functions. One of the > reasons why this is being used is because when somebody enables > something like 2K jumbo frames they don't necessarily want to have to > allocate 4K SLABs. Instead they can just add a bit of overhead and get > almost twice the utilization out of an order 3 page. > > The requirement should only be cache alignment, not power of 2 > alignment. This isn't meant to be a slab allocator. We are just > sectioning up pages to handle mixed workloads. In the case of > networking we can end up getting everything from 60B packets, to 1514B > in the standard cases. That was why we started sectioning up pages in > the first place so putting a power of 2 requirement on it doens't fit > our use case at all and is what we were trying to get away from with > the SLAB allocators. It seems that is_power_of_2() checking in this patch does not excluding the non-align case if we are passing 'align' being 1, which means we still can support the 'everything from 60B packets, to 1514B' case. > > . >