All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vlad Yasevich <vyasevic@redhat.com>
To: "Michał Mirosław" <mirqus@gmail.com>
Cc: mst@redhat.com, netdev@vger.kernel.org,
	bridge@lists.linux-foundation.org, shmulik.ladkani@gmail.com,
	shemminger@vyatta.com, davem@davemloft.net
Subject: Re: [Bridge] [PATCH net-next V6 02/14] bridge: Add vlan filtering infrastructure
Date: Sun, 20 Jan 2013 17:59:30 -0000	[thread overview]
Message-ID: <50FC307A.5090003@redhat.com> (raw)
In-Reply-To: <CAHXqBFKg6Vp5=dprDYKON2LmshhX+nSPF7KRHiQmOS68PrQq-A@mail.gmail.com>

On 01/17/2013 08:57 PM, Michał Mirosław wrote:
> 2013/1/16 Vlad Yasevich <vyasevic@redhat.com>:
> [...]
>> --- /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
>


  reply	other threads:[~2013-01-20 17:59 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-16 18:18 [Bridge] [PATCH net-next V6 00/14] Add basic VLAN support to bridges Vlad Yasevich
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 01/14] vlan: wrap hw-acceleration calls in separate functions Vlad Yasevich
2013-01-16 22:03   ` Michał Mirosław
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 02/14] bridge: Add vlan filtering infrastructure Vlad Yasevich
2013-01-18  1:57   ` Michał Mirosław
2013-01-20 17:59     ` Vlad Yasevich [this message]
2013-01-20 19:39       ` Stephen Hemminger
2013-01-21  1:51         ` Vlad Yasevich
2013-01-21 11:45           ` Shmulik Ladkani
2013-01-22 14:31             ` Vlad Yasevich
2013-01-22 15:55               ` Shmulik Ladkani
2013-01-22 16:27                 ` Vlad Yasevich
2013-01-20 21:39   ` Shmulik Ladkani
2013-01-21  1:56     ` Vlad Yasevich
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 03/14] bridge: Validate that vlan is permitted on ingress Vlad Yasevich
2013-01-20 22:27   ` Shmulik Ladkani
2013-01-21  1:58     ` Vlad Yasevich
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 04/14] bridge: Verify that a vlan is allowed to egress on give port Vlad Yasevich
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 05/14] bridge: Cache vlan in the cb for faster egress lookup Vlad Yasevich
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 06/14] bridge: Add netlink interface to configure vlans on bridge ports Vlad Yasevich
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 07/14] bridge: Add the ability to configure pvid Vlad Yasevich
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 08/14] bridge: Implement vlan ingress/egress policy Vlad Yasevich
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 09/14] bridge: API to configure egress policy Vlad Yasevich
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 10/14] bridge: Add vlan to unicast fdb entries Vlad Yasevich
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 11/14] bridge: Add vlan id to multicast groups Vlad Yasevich
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 12/14] bridge: Add vlan support to static neighbors Vlad Yasevich
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 13/14] bridge: Add vlan support for local fdb entries Vlad Yasevich
2013-01-16 18:18 ` [Bridge] [PATCH net-next V6 14/14] bridge: Dump vlan information from a bridge port Vlad Yasevich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50FC307A.5090003@redhat.com \
    --to=vyasevic@redhat.com \
    --cc=bridge@lists.linux-foundation.org \
    --cc=davem@davemloft.net \
    --cc=mirqus@gmail.com \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=shemminger@vyatta.com \
    --cc=shmulik.ladkani@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.