Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.programming.threads > #1751
| From | aminer <aminer@toto.net> |
|---|---|
| Newsgroups | comp.programming.threads, comp.programming |
| Subject | Re: About lockfree queues ... |
| Date | 2013-09-24 21:09 -0700 |
| Organization | albasani.net |
| Message-ID | <l1td5h$7rv$1@news.albasani.net> (permalink) |
| References | <l1t6hd$2pr$1@news.albasani.net> |
Cross-posted to 2 groups.
Hello, I have come to a more interresting subject, it's the exponential backoff mechanism that we use inside the Spinlock, this backoff mechanism lower the contention, but i was thinking more about it, and what does we mean by lower the contention ? when you are spining inside a Spinlock you are testing also for a flag/variable, but when you test for this variable to equal for example 1 to be able to enter the locked region you are generating cache-coherency traffic, cause when a thread leaves a locked region it will set the flag to 1 for example, but when the thread sets to 1 the variable , the variable is not in the L2 cache of others threads, so the variable must be transfered to the other threads and this is costly/expensive and this generate a lot of cache-coherence traffic, but the problem with the Spinlock is that when a lot of cache-coherence is generated this will slow the threads that enters the Spinlock and slows the threads globally in your computer, so this will slow the threads , now there is still a problem if we use a Sleep() function inside the backoff mechanism this will slow a lot the threads, so as i told you before the solution is to use the PAUSE asm instruction inside the backoff mechanism followed by a sleep(0), but about the lockfree queues , even though a lot cache-coherence traffic is generated by the threads when there is high contention , this will not slow the threads inside the CAS , as in the case of the Spinlock, cause the CAS uses a LOCK asm instruction that lock the Bus, so this is better than the Spinlock, but even though it will not slow the thread inside the CAS you have to use a PAUSE instruction inside an exponential backoff mechanism to not slow globally the other threads and applications on your computer when there is high contention. Thank you, Amine Moulay Ramdane, On 9/24/2013 7:16 PM, aminer wrote: > Hello, > > > I have wrote before this: > > "I have come to an interresting subject about lockfree queues, > if you take a look at those lockfree queues, like in transactional > memory, if the data have changed those lockfree queue retries and loop > again, but this (lockfree) mechanism generates a lot of cache-coherence > traffic, so i will not advice this lockfree mechanism, so how > can we do it ? you can take a look at the MCS queue Lock , i > think they are doing it like a waitfree linklist that doesn't spin and > that reduces a lot the cache-coherence traffic, other than that > if your memory manager is not optimal and uses a lockfree mechanism and > generates a lot cache-coherence traffic, so you have to use a freelist > to lower the cache coherence traffic." > > > But you have to know even that you are using spin waits inside lockfree > algorithms that genrates a lot of cache-coherence traffic , you have > to know that you can avoid this problem and make your lockfree queue > more efficient by adding an exponential backoff to you lockfree > mechanism using a PAUSE asm instruction followed by a Sleep(0) to not > freeze the computer and this way , like with the Spinlock, it will > reduce the cache-coherence traffic and make your lockfree queue more > efficient,. > > > > > Thank you, > Amine Moulay Ramdane. >
Back to comp.programming.threads | Previous | Next — Previous in thread | Next in thread | Find similar
About lockfree queues ... aminer <aminer@toto.net> - 2013-09-24 19:16 -0700 Re: About lockfree queues ... aminer <aminer@toto.net> - 2013-09-24 21:09 -0700 Re: About lockfree queues ... aminer <aminer@toto.net> - 2013-09-24 21:34 -0700
csiph-web