Re: smrproxy v2

Liste des GroupesRevenir à cl c++ 
Sujet : Re: smrproxy v2
De : chris.m.thomasson.1 (at) *nospam* gmail.com (Chris M. Thomasson)
Groupes : comp.lang.c++
Date : 29. Oct 2024, 05:35:33
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vfpomm$1dqvu$1@dont-email.me>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
User-Agent : Mozilla Thunderbird
On 10/28/2024 6:17 PM, jseigh wrote:
On 10/28/24 17:57, Chris M. Thomasson wrote:
On 10/28/2024 4:45 AM, jseigh wrote:
On 10/28/24 00:02, Chris M. Thomasson wrote:
On 10/27/2024 5:35 PM, jseigh wrote:
On 10/27/24 18:32, Chris M. Thomasson wrote:
>
>
The membar version?  That's a store/load membar so it is expensive.
>
I was wondering in your c++ version if you had to use any seq_cst barriers. I think acquire/release should be good enough. Now, when I say C++, I mean pure C++, no calls to FlushProcessWriteBuffers and things like that.
>
I take it that your pure C++ version has no atomic RMW, right? Just loads and stores?
>
While a lock action has acquire memory order semantics, if the
implementation has internal stores, you have to those stores
are complete before any access from the critical section.
So you may need a store/load memory barrier.
>
Wrt acquiring a lock the only class of mutex logic that comes to mind that requires an explicit storeload style membar is Petersons, and some others along those lines, so to speak. This is for the store and load version. Now, RMW on x86 basically implies a StoreLoad wrt the LOCK prefix, XCHG aside for it has an implied LOCK prefix. For instance the original SMR algo requires a storeload as is on x86/x64. MFENCE or LOCK prefix.
>
Fwiw, my experimental pure C++ proxy works fine with XADD, or atomic fetch-add. It needs an explicit membars (no #StoreLoad) on SPARC in RMO mode. On x86, the LOCK prefix handles that wrt the RMW's themselves. This is a lot different than using stores and loads. The original SMR and Peterson's algo needs that "store followed by a load to a different location" action to hold true, aka, storeload...
>
Now, I don't think that a data-dependant load can act like a storeload. I thought that they act sort of like an acquire, aka #LoadStore | #LoadLoad wrt SPARC. SPARC in RMO mode honors data- dependencies. Now, the DEC Alpha is a different story... ;^)
>
 fwiw, here's the lock and unlock logic from smrproxy rewrite
      inline void lock()
     {
         epoch_t _epoch = shadow_epoch.load(std::memory_order_relaxed);
         _ref_epoch.store(_epoch, std::memory_order_relaxed);

         std::atomic_signal_fence(std::memory_order_acquire);
^^^^^^^^^^^^^^^^^^^^^^

     }
Still don't know how your pure C++ write up can handle this without an std::atomic_thread_fence(std::memory_order_acquire).

      inline void unlock()
     {
         _ref_epoch.store(0, std::memory_order_release);
     }

 epoch_t is interesting.  It's uint64_t but handles wrapped
compares, ie. for an epoch_t x1 and uint64_t n
      x1 < (x1 + n)
 for any value of x1 and any value of n from 0 to 2**63;
eg.
    0xfffffffffffffff0 < 0x0000000000000001
For some reason it reminds me of your atomic 63 bit counter from a while back. If your smr_poll thread is the only thread that can increment the epoch, then it will be able to detect rolling to zero, right? For one of my older proxys the thread would have two version counters:
per_thread
{
     word m_ver[2];
     lock()
     {
         word ver = g_version;
         m_ver[ver % 2] = ver;
     }
     unlock(word ver)
     {
         m_ver[ver % 2] = 0;
     }
}
So, it's different logic. The only way I got around using memory barriers (compiler barriers aside for a moment), here was for the polling thread to use an asymmetric membar. For a pure C++ version, I think it would require:
per_thread
{
     word m_ver[2];
     lock()
     {
         word ver = g_version;
         m_ver[ver % 2] = ver;
         #LoadStore | #LoadLoad;
     }
     unlock(word ver)
     {
         #LoadStore | #StoreStore;
         m_ver[ver % 2] = 0;
     }
}
I think.... Humm...

  The rewrite is almost complete except for some thread_local
stuff.  I think I might break off there.  Most of the
additional work is writing the test code.  I'm considering
rewriting it in Rust.
 Joe Seigh

Date Sujet#  Auteur
17 Oct 24 * smrproxy v266jseigh
17 Oct 24 +* Re: smrproxy v241Chris M. Thomasson
17 Oct 24 i`* Re: smrproxy v240jseigh
18 Oct 24 i `* Re: smrproxy v239Chris M. Thomasson
18 Oct 24 i  +* Re: smrproxy v22Chris M. Thomasson
18 Oct 24 i  i`- Re: smrproxy v21Chris M. Thomasson
18 Oct 24 i  `* Re: smrproxy v236jseigh
26 Oct 24 i   `* Re: smrproxy v235Chris M. Thomasson
26 Oct 24 i    `* Re: smrproxy v234jseigh
27 Oct 24 i     `* Re: smrproxy v233Chris M. Thomasson
28 Oct 24 i      `* Re: smrproxy v232jseigh
28 Oct 24 i       +* Re: smrproxy v228Chris M. Thomasson
28 Oct 24 i       i`* Re: smrproxy v227jseigh
28 Oct 24 i       i `* Re: smrproxy v226Chris M. Thomasson
28 Oct 24 i       i  `* Re: smrproxy v225jseigh
28 Oct 24 i       i   `* Re: smrproxy v224Chris M. Thomasson
29 Oct 24 i       i    +- Re: smrproxy v21Chris M. Thomasson
29 Oct 24 i       i    `* Re: smrproxy v222jseigh
29 Oct 24 i       i     +* Re: smrproxy v23Chris M. Thomasson
29 Oct 24 i       i     i`* Re: smrproxy v22jseigh
29 Oct 24 i       i     i `- Re: smrproxy v21Chris M. Thomasson
29 Oct 24 i       i     +* Re: smrproxy v25Chris M. Thomasson
29 Oct 24 i       i     i`* Re: smrproxy v24jseigh
29 Oct 24 i       i     i `* Re: smrproxy v23Chris M. Thomasson
30 Oct 24 i       i     i  `* Re: smrproxy v22jseigh
1 Nov 24 i       i     i   `- Re: smrproxy v21Chris M. Thomasson
29 Oct 24 i       i     `* Re: smrproxy v213Chris M. Thomasson
30 Oct 24 i       i      `* Re: smrproxy v212Chris M. Thomasson
30 Oct 24 i       i       `* Re: smrproxy v211jseigh
4 Nov 24 i       i        `* Re: smrproxy v210Chris M. Thomasson
4 Nov 24 i       i         `* Re: smrproxy v29jseigh
4 Nov 24 i       i          +* Re: smrproxy v23Muttley
4 Nov 24 i       i          i`* Re: smrproxy v22Chris M. Thomasson
9 Nov 24 i       i          i `- Re: smrproxy v21Chris M. Thomasson
12 Dec 24 i       i          `* Re: smrproxy v25Chris M. Thomasson
12 Dec 24 i       i           `* Re: smrproxy v24jseigh
12 Dec 24 i       i            `* Re: smrproxy v23Chris M. Thomasson
13 Dec 24 i       i             `* Re: smrproxy v22jseigh
26 Dec 24 i       i              `- Re: smrproxy v21Chris M. Thomasson
28 Oct 24 i       `* Re: smrproxy v23Chris M. Thomasson
28 Oct 24 i        +- Re: smrproxy v21Chris M. Thomasson
28 Oct 24 i        `- Re: smrproxy v21Chris M. Thomasson
29 Oct 24 +* Re: smrproxy v24Chris M. Thomasson
30 Oct 24 i+- Re: smrproxy v21Chris M. Thomasson
30 Oct 24 i`* Re: smrproxy v22Chris M. Thomasson
30 Oct 24 i `- Re: smrproxy v21Chris M. Thomasson
30 Oct 24 +* Re: smrproxy v22Chris M. Thomasson
30 Oct 24 i`- Re: smrproxy v21jseigh
2 Nov 24 +- Re: smrproxy v21Chris M. Thomasson
21 Nov 24 `* Re: smrproxy v217jseigh
23 Nov 24  `* Re: smrproxy v216jseigh
23 Nov 24   +* Re: smrproxy v23Chris M. Thomasson
24 Nov 24   i`* Re: smrproxy v22jseigh
24 Nov 24   i `- Re: smrproxy v21Chris M. Thomasson
24 Nov 24   `* Re: smrproxy v212jseigh
25 Nov 24    +* Re: smrproxy v27Chris M. Thomasson
25 Nov 24    i`* Re: smrproxy v26jseigh
25 Nov 24    i +* Re: smrproxy v22Chris M. Thomasson
25 Nov 24    i i`- Re: smrproxy v21Chris M. Thomasson
25 Nov 24    i `* Re: smrproxy v23Chris M. Thomasson
25 Nov 24    i  `* Re: smrproxy v22jseigh
26 Nov 24    i   `- Re: smrproxy v21Chris M. Thomasson
27 Nov 24    `* Re: smrproxy v24jseigh
9 Dec 24     `* Re: smrproxy v23jseigh
11 Dec 24      `* Re: smrproxy v22jseigh
12 Dec 24       `- Re: smrproxy v21Chris M. Thomasson

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal