On Wed, May 28, 2014 at 2:55 PM, Rik van Riel <riel@xxxxxxxxxx> wrote: > > Or maybe cmpxchg is cheap once you already own the cache line > exclusively? A locked cmpxchg ends up being anything between ~15-50 cycles depending on microarchitecture if things are already exclusively in the cache (with the P4 being an outlier, and all locked instructions tend to take ~100+ cycles, but I can't say I can really find it in myself to even care about netburst any more). The most noticeable downside we've seen has been when we've used "read-op-cmpxchg" as a _replacement_ for something like "lock [x]add", when that "read+cmpxchg" has caused two cacheline ops (cacheline first loaded shared by the read, then exclusive by the cmpxchg). That's bad. But if preceded by a write (or, in this case, an xadd), that doesn't happen. Still, those roughly 15-50 cycles can certainly be noticeable (especially at the high end), but you need to have some load that doesn't bounce the lock, and largely fit in the caches to see it. And you probably want to test one of the older CPU's, I think Haswell is the lower end (ie in the ~20 cycle range). If somebody has a P4 still, that's likely the worst case by far. Linus _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization