• Pavel Emelyanov's avatar
    [VLAN]: Reduce memory consumed by vlan_groups · 67727184
    Pavel Emelyanov authored
    Currently each vlan_groupd contains 8 pointers on arrays with 512
    pointers on struct net_device each  :)  Such a construction "in many
    cases ... wastes memory".
    
    My proposal is to allow for some of these arrays pointers be NULL,
    meaning that there are no devices in it. When a new device is added
    to the vlan_group, the appropriate array is allocated.
    
    The check in vlan_group_get_device's is safe, since the pointer
    vg->vlan_devices_arrays[x] can only switch from NULL to not-NULL.
    The vlan_group_prealloc_vid() is guarded with rtnl lock and is
    also safe.
    
    I've checked (I hope that) all the places, that use these arrays
    and found, that the register_vlan_dev is the only place, that can
    put a vlan device on an empty vlan_group.
    
    Rough calculations shows, that after the patch a setup with a
    single vlan dev (or up to 512 vlans with sequential vids) will
    occupy approximately 8 times less memory.
    
    The question I have is - does this patch makes sense, or a totally
    new structures are required to store the vlan_devs?
    Signed-off-by: default avatarPavel Emelyanov <xemul@openvz.org>
    Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
    67727184
vlan.c 15.6 KB