Re: [PATCH net-next V6 02/14] bridge: Add vlan filtering infrastructure

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

 



On 01/17/2013 08:57 PM, Michał Mirosław wrote:
2013/1/16 Vlad Yasevich <vyasevic@xxxxxxxxxx>:
[...]
--- /dev/null
+++ b/net/bridge/br_vlan.c
[...]
+struct net_port_vlan *nbp_vlan_find(const struct net_port_vlans *v, u16 vid)
+{
+       struct net_port_vlan *pve;
+
+       /* Must be done either in rcu critical section or with RTNL held */
+       WARN_ON_ONCE(!rcu_read_lock_held() && !rtnl_is_locked());
+
+       list_for_each_entry_rcu(pve, &v->vlan_list, list) {
+               if (pve->vid == vid)
+                       return pve;
+       }
+
+       return NULL;
+}

This looks expensive - it's O(n) with n = number of configured VLANs on a port.
And this is called for every packet. The bridge already has a hash of VLAN
structures found by br_vlan_find(). You could add a second bitmap there
(eg. ingres_ports[]) and check port's bit instead of walking the list.
You would use a bit more memory (64 bytes minus the removed list-head)
per configured VLAN but save some cycles in hot path.


Technically wouldn't even need another bitmap as an existing membership bitmap would cover this case. I did some profiling and the list is faster for 3 vlans per port. Hash is faster for more then 3 vlans.

I can easily switch to hash if that is what others think.

-vlad
Best Regards,
Michał Mirosław




[Index of Archives]     [Netdev]     [AoE Tools]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux