From: Eric Dumazet <eduma...@google.com> Date: Fri, 1 Mar 2024 14:25:37 +0100
> On Fri, Mar 1, 2024 at 1:59 PM Alexander Lobakin > <aleksander.loba...@intel.com> wrote: >> >> From: Eric Dumazet <eduma...@google.com> >> Date: Fri, 1 Mar 2024 09:03:55 +0100 >> >>> On Fri, Mar 1, 2024 at 7:59 AM Jakub Kicinski <k...@kernel.org> wrote: >>>> >>>> On Thu, 29 Feb 2024 13:30:22 -0800 Kees Cook wrote: >> >> Re WARN_ONCE() in netdev_priv(): netdev_priv() is VERY hot, I'm not sure >> we want to add checks there. Maybe under CONFIG_DEBUG_NET? >> >>> >>>>> diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h >>>>> index 118c40258d07..b476809d0bae 100644 >>>>> --- a/include/linux/netdevice.h >>>>> +++ b/include/linux/netdevice.h >>>>> @@ -1815,6 +1815,8 @@ enum netdev_stat_type { >>>>> NETDEV_PCPU_STAT_DSTATS, /* struct pcpu_dstats */ >>>>> }; >>>>> >>>>> +#define NETDEV_ALIGN 32 >>>> >>>> Unless someone knows what this is for it should go. >>>> Align priv to cacheline size. >>> >>> +2 >>> >> >> Maybe >> >>> #define NETDEV_ALIGN L1_CACHE_BYTES >> >> #define NETDEV_ALIGN max(SMP_CACHE_BYTES, 32) > > Why would we care if some arches have a very small SMP_CACHE_BYTES ? Oh sorry, I thought %SMP_CACHE_BYTES is 1 when !SMP. We can then just add ____cacheline_aligned to both struct net_device and its ::priv flex array and that's it. I like the idea of declaring priv explicitly rather than doing size + ptr magic. But maybe we could just add this flex array to struct net_device and avoid introducing a new structure. > Bet it ! > > IMO nothing in networking mandates this minimal 32 byte alignment. > >> >> ? >> >> (or even max(1 << INTERNODE_CACHE_SHIFT, 32)) > > I do not think so. > > INTERNODE_CACHE_SHIFT is a bit extreme on allyesconfig on x86 :/ > (with CONFIG_X86_VSMP=y) > > >> >>> >>> or a general replacement of NETDEV_ALIGN.... >>> >>> >> >> + I'd align both struct net_device AND its private space to >> %NETDEV_ALIGN and remove this weird PTR_ALIGN. {k,v}malloc ensures >> natural alignment of allocations for at least a couple years already >> (IOW if struct net_device is aligned to 64, {k,v}malloc will *always* >> return a 64-byte aligned address). > > I think that with SLAB or SLOB in the past with some DEBUG options > there was no such guarantee. > > But this is probably no longer the case, and heavy DEBUG options these > days (KASAN, KFENCE...) > do not expect fast networking anyway. Thanks, Olek