Hi,
I noticed that there is a performance issue when running traffic on a vlan
interface that was created by OVS.
If we create a bridge with a vlan interface, the 8021q module is not loaded.
Then when packets with a 8021q tag arrives, the linux stack can't use the
vlan ndos (such as gro_recieve)
Jiri,
I am not sure it would be simple to move the add_offload to vlan_Core.c as
the add_offload should happen once.
in vlan.c it's done as part of module init but in vlan_core.c we are not
initializing any model and making some logic for doing that once looks
awkward to me.
Why can't we just load
I'v used ftrace to see which paths we take in the kernel.
I remind you that the packet (in my scenario) looks like the following:
ETH | IP | UDP | VXLAN | L2 | VLAN | IP | TCP | payload
When 8021q is not loaded:
dev_gro_receive <-napi_gro_receive
inet_gro_receive <-dev_gro_receive
Calling it from net_dev_init doesn't look clean.
If you will see who is calling 'dev_add_offload' you will find out that
there are couple of modules that doing that except of the 8021q. so either
all modules should add offload from net_dev_init or stay with the current
model where each module adds
So move the vlan offload registrations into vlan_core and make this
> available even without 8021q module loaded.
>
> Reported-by: Michael Shteinbok
> Signed-off-by: Jiri Pirko
> ---
> net/8021q/vlan.c | 96 -
> net/8021q/vlan_core.c |