[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <9b8981b1-3b7f-4b79-8f3f-b1635f1d905f@nvidia.com>
Date: Fri, 14 Jun 2024 19:51:13 -0700
From: John Hubbard <jhubbard@...dia.com>
To: Boqun Feng <boqun.feng@...il.com>
CC: Miguel Ojeda <miguel.ojeda.sandonis@...il.com>, Gary Guo
<gary@...yguo.net>, <rust-for-linux@...r.kernel.org>,
<linux-kernel@...r.kernel.org>, <linux-arch@...r.kernel.org>,
<llvm@...ts.linux.dev>, Miguel Ojeda <ojeda@...nel.org>, Alex Gaynor
<alex.gaynor@...il.com>, Wedson Almeida Filho <wedsonaf@...il.com>,
Björn Roy Baron <bjorn3_gh@...tonmail.com>, Benno Lossin
<benno.lossin@...ton.me>, Andreas Hindborg <a.hindborg@...sung.com>, "Alice
Ryhl" <aliceryhl@...gle.com>, Alan Stern <stern@...land.harvard.edu>, "Andrea
Parri" <parri.andrea@...il.com>, Will Deacon <will@...nel.org>, Peter
Zijlstra <peterz@...radead.org>, Nicholas Piggin <npiggin@...il.com>, David
Howells <dhowells@...hat.com>, Jade Alglave <j.alglave@....ac.uk>, Luc
Maranget <luc.maranget@...ia.fr>, "Paul E. McKenney" <paulmck@...nel.org>,
"Akira Yokosawa" <akiyks@...il.com>, Daniel Lustig <dlustig@...dia.com>,
"Joel Fernandes" <joel@...lfernandes.org>, Nathan Chancellor
<nathan@...nel.org>, Nick Desaulniers <ndesaulniers@...gle.com>,
<kent.overstreet@...il.com>, "Greg Kroah-Hartman"
<gregkh@...uxfoundation.org>, <elver@...gle.com>, Mark Rutland
<mark.rutland@....com>, Thomas Gleixner <tglx@...utronix.de>, Ingo Molnar
<mingo@...hat.com>, Borislav Petkov <bp@...en8.de>, Dave Hansen
<dave.hansen@...ux.intel.com>, <x86@...nel.org>, "H. Peter Anvin"
<hpa@...or.com>, Catalin Marinas <catalin.marinas@....com>,
<torvalds@...ux-foundation.org>, <linux-arm-kernel@...ts.infradead.org>,
<linux-fsdevel@...r.kernel.org>, Trevor Gross <tmgross@...ch.edu>,
<dakr@...hat.com>
Subject: Re: [RFC 2/2] rust: sync: Add atomic support
On 6/14/24 7:39 PM, Boqun Feng wrote:
> On Fri, Jun 14, 2024 at 06:28:00PM -0700, John Hubbard wrote:
>> On 6/14/24 6:24 PM, Boqun Feng wrote:
>>> On Fri, Jun 14, 2024 at 06:03:37PM -0700, John Hubbard wrote:
>>>> On 6/14/24 2:59 AM, Miguel Ojeda wrote:
>>>>> On Thu, Jun 13, 2024 at 9:05 PM Boqun Feng <boqun.feng@...il.com> wrote:
>>>>>>
>>>>>> Does this make sense?
>>>>>
>>>>> Implementation-wise, if you think it is simpler or more clear/elegant
>>>>> to have the extra lower level layer, then that sounds fine.
>>>>>
>>>>> However, I was mainly talking about what we would eventually expose to
>>>>> users, i.e. do we want to provide `Atomic<T>` to begin with? If yes,
>>>>> then we could make the lower layer private already.
>>>>>
>>>>> We can defer that extra layer/work if needed even if we go for
>>>>> `Atomic<T>`, but it would be nice to understand if we have consensus
>>>>> for an eventual user-facing API, or if someone has any other opinion
>>>>> or concerns on one vs. the other.
>>>>
>>>> Well, here's one:
>>>>
>>>> The reason that we have things like atomic64_read() in the C code is
>>>> because C doesn't have generics.
>>>>
>>>> In Rust, we should simply move directly to Atomic<T>, as there are,
>>>> after all, associated benefits. And it's very easy to see the connection
>>>
>>> What are the associated benefits you are referring to? Rust std doesn't
>>> use Atomic<T>, that somewhat proves that we don't need it.
>> Just the stock things that a generic provides: less duplicated code,
>
> It's still a bit handwavy, sorry.
>
> Admittedly, I haven't looked into too much Rust concurrent code, maybe
> it's even true for C code ;-) So I took a look at the crate that Gary
> mentioned (the one provides generic atomic APIs):
>
> https://crates.io/crates/atomic
>
> there's a "Dependent" tab where you can see the other crates that
> depends on it. With a quick look, I haven't found any Rust concurrent
> project I'm aware of (no crossbeam, no tokio, no futures). On the other
> hand, there is a non-generic based atomic library:
>
> https://crates.io/crates/portable-atomic
>
> which has more projects depend on it, and there are some Rust concurrent
> projects that I'm aware of: futures, async-task etc. Note that people
> can get the non-generic based atomic API from Rust std library, and
> the "portable-atomic" crate is only 2-year old, while "atomic" crate is
> 8-year old.
>
> More interestingly, the same author of "atomic" crate, who is an expert
> in concurrent areas, has another project (there are a lot projects from
> the author, but this is the one I'm mostly aware of) "parking_lot",
> which "provides implementations of Mutex, RwLock, Condvar and Once that
> are smaller, faster and more flexible than those in the Rust standard
> library, as well as a ReentrantMutex type which supports recursive
> locking.", and it doesn't use the "atomic" crate either.
>
> These data could mean nothing, there are multiple reasons affecting the
> popularity of a library. But all the above seems to suggests that you
> don't really need generic on atomic, at least for a lot of meaningful
> concurent code.
>
>
> So if we were to make a decision right now, I don't see that generic
> atomics are winning. Of course, as I said previously, we can always add
That does seem to be the case: the non-generic flavor looks more
popular so far.
> them if we have learned more and have the consensus.
Yes, I suppose waiting might be better. I expected the Atomic<T> to
be more popular than it actually is...
thanks,
--
John Hubbard
NVIDIA
Powered by blists - more mailing lists