The first question I have in mind, is, how do you define a lock benchmark? Is your goal to minimize overhead? Is your goal to minimize the latency of a successful uncontended acquire? Is your goal to minimize bus load for other CPU when three CPUs are waiting for the spin lock?<div><br></div><div>What we're measuring is not well defined.<br><div><br></div><div>Looking at [0] (wow, So little have changed in SMP architectures since 1990!) and [1], gives a few options:</div></div><div><br></div><div>1) Measure the time it takes to perform a critical section <i>N</i> times by <i>n </i>CPUs concurrently.</div><div>2) Measure overhead. Compare the time it takes to a single CPU to do a task <i>N</i> times with no locks. Do that with <i>n</i> CPUs, where the task is protected by a spin lock. The time it took to do the task with spinlock, minus the time it took to do it alone is the overhead.</div><div>3) Measure the overhead of other <i>m</i> CPUs doing a different task, while <i>n</i> CPUs are contending over a critical section.</div><div>4) Measure latency. This is a bit tricky to measure. What [1] suggests is, measure the average time between two spin locks read. If I understand that correctly, they measure the time it took to just check if the spinlock is taken.</div><div>5) What I had in mind, is measuring how much time did it took from the time a CPU released the lock, to the time another CPU held it. This is tricky to do, since CPUs clocks are not always synchronized or cheap enough to check.</div><div><br></div><div>The devil's in the details, so even though [1] have a bird's eye view description of the methodology, there are still missing details (e.g., did they measure time or cycles?).</div><div><br></div><div>I'm far from expert on this matters, so I wonder:</div><div><br></div><div>Is there an industry standard for benchmarking a spinlock? Something like JS octane. A benchmark which should mimic many real world scenarios?</div><div><br></div><div>If indeed there is, is there an open source implementation?</div><div><br></div><div>If there isn't, are there better papers describing spinlock benchmarking methodology?</div><div><br></div><div>[0] <a href="http://homes.cs.washington.edu/~tom/pubs/spinlock.pdf">http://homes.cs.washington.edu/~tom/pubs/spinlock.pdf</a></div><div>[1] <a href="http://www.ideal.ece.ufl.edu/workshops/wiosca08/paper2.pdf">http://www.ideal.ece.ufl.edu/workshops/wiosca08/paper2.pdf</a></div>