Re: [net-next 04/13] net/mlx5e: Vxlan, replace spinlock with read-write lock

Saeed Mahameed
2018-07-27T23:53:46Z

On Fri, Jul 27, 2018 at 2:48 PM, Stephen Hemminger
<stephen@networkplumber.org> wrote:
> On Fri, 27 Jul 2018 14:15:09 -0700
> Saeed Mahameed <saeedm@mellanox.com> wrote:
>
>> From: Gal Pressman <galp@mellanox.com>
>>
>> The VXLAN database is mainly used by readers in data path, and rarely
>> used by control path writers.
>> Multiple readers (threads) should not block each other and cause an
>> unnecessary contention on the lock.
>>
>> Replacing the spinlock with rwlock optimizes the common use case where
>> adding ports to the table (adding VXLAN interfaces) is quite rare, but
>> the table is accessed for each VXLAN TX skb.
>>
>> Signed-off-by: Gal Pressman <galp@mellanox.com>
>> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
>
> Did you know that for small sections a spinlock is significantly faster than
> a reader-writer lock. It turns out that reader-writer locks the reader
> creates a cache line bounce.
>
> https://www.kernel.org/doc/Documentation/locking/spinlocks.txt
>
>
> Lesson 2: reader-writer spinlocks.
>
> If your data accesses have a very natural pattern where you usually tend
> to mostly read from the shared variables, the reader-writer locks
> (rw_lock) versions of the spinlocks are sometimes useful. They allow multiple
> readers to be in the same critical region at once, but if somebody wants
> to change the variables it has to get an exclusive write lock.
>
> NOTE! reader-writer locks require more atomic memory operations than
> simple spinlocks. Unless the reader critical section is long, you
> are better off just using spinlocks.

Thanks Stephen, very usefull information !
I will drop this patch for now, I will consider using rcu lock
instead in a future patch.