Re: [PATCH v14 00/16] Refcounted interrupts, SpinLockIrq for rust

From: Boqun Feng

Date: Fri Nov 21 2025 - 12:47:53 EST


On Thu, Nov 20, 2025 at 03:16:04PM -0800, John Hubbard wrote:
> On 11/20/25 1:45 PM, Lyude Paul wrote:
> ...
> > this new interface is indeed possible, more on this below.
> > * Also thank to Joel, we also now have actual benchmarks for how this
> > affects performance:
> > https://lore.kernel.org/rust-for-linux/20250619175335.2905836-1-joelagnelf@xxxxxxxxxx/
> > * Also some small changes to the kunit test I added, mainly just making
> > sure I don't forget to include a MODULE_DESCRIPTION or MODULE_LICENSE.
>
> Hi,
>
> The above link says that local_interrupt takes 3.6x as as as local_irq.
>
> This is alarming, but is it the final word? In other words, is the Rust
> side of this doomed to slower performance forever, or is there some
> hope of reaching performance parity with the C part of the kernel?
>

Note that local_interrupt API is for safe Rust code, you can always
use unsafe local_irq if the interrupt disabling is the performance
bottleneck for you. So language-wise there is no difference between Rust
and C.

> Do we have to start telling the Rust for Linux story this way: "our
> new Rust-based drivers are slower, but memory-safer"?
>

I would not jump into that conclusion at the moment, because 1) as I
mentioned you can always go into unsafe if something begins the
bottleneck, and 2) there is always a gap between micro benchmark results
and the whole system performance, being slow on one operation doesn't
means the whole system will perform observably worse.

Think about a similar thing in C, we recommend people to use existing
locks instead of customized synchronization vi atomics in most cases,
and technically, locks can be slower compared to a special
synchronization based on atomics, but it's more difficult to mess up.

Regards,
Boqun

> I'm not able to deduce the answer from a quick scan through the patches
> and the cover letter.
>
> thanks,
> --
> John Hubbard
>