Re: [PATCH] IB/cm: use rwlock for MAD agent lock

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

 



On Fri, Feb 21, 2025 at 6:04 PM Zhu Yanjun <yanjun.zhu@xxxxxxxxx> wrote:
>
> On 20.02.25 18:56, Jacob Moroni wrote:
> > In workloads where there are many processes establishing
> > connections using RDMA CM in parallel (large scale MPI),
> > there can be heavy contention for mad_agent_lock in
> > cm_alloc_msg.
> >
> > This contention can occur while inside of a spin_lock_irq
> > region, leading to interrupts being disabled for extended
> > durations on many cores. Furthermore, it leads to the
> > serialization of rdma_create_ah calls, which has negative
> > performance impacts for NICs which are capable of processing
> > multiple address handle creations in parallel.
>
> In the link:
> https://www.cs.columbia.edu/~jae/4118-LAST/L12-interrupt-spinlock.html
> "
> ...
> spin_lock() / spin_unlock()
>
> must not lose CPU while holding a spin lock, other threads will wait for
> the lock for a long time
>
> spin_lock() prevents kernel preemption by ++preempt_count in
> uniprocessor, that’s all spin_lock() does
>
> must NOT call any function that can potentially sleep
> ex) kmalloc, copy_from_user
>
> hardware interrupt is ok unless the interrupt handler may try to lock
> this spin lock
> spin lock not recursive: same thread locking twice will deadlock
>
> keep the critical section as small as possible
> ...
> "
> And from the source code, it seems that spin_lock/spin_unlock are not
> related with interrupts.
>
> I wonder why "leading to interrupts being disabled for extended
> durations on many cores" with spin_lock/spin_unlock?
>
> I am not against this commit. I am just obvious why
> spin_lock/spin_unlock are related with "interrupts being disabled".

Look at drivers/infiniband/core/cm.c

spin_lock_irqsave(&cm_id_priv->lock, flags);

-> Then call cm_alloc_msg() while hard IRQ are masked.





[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux