Try using the last Deferred reader slot first
authorQi Wang <qiwang@fb.com>
Mon, 19 Sep 2016 23:48:17 +0000 (16:48 -0700)
committerFacebook Github Bot 1 <facebook-github-bot-1-bot@fb.com>
Mon, 19 Sep 2016 23:53:45 +0000 (16:53 -0700)
Summary:
When trying to find an empty deferred reader slot, getting the current CPU can
take quite a few cycles, e.g. >1% CPU on SMC (https://fburl.com/434646643).

Let's track the last slot used by this thread and try that slot first before reading
CPU id and doing the search.

u-benchmark results seem to be improving generally (though a bit noisy and not
sure how much to trust). Results w/ this diff on left side:
P56648675

Reviewed By: nbronson

Differential Revision: D3857793

fbshipit-source-id: 8b1c005362c82e748a663100f889b0b99dc257fe

folly/SharedMutex.h
folly/test/SharedMutexTest.cpp

index 4ccdff2a0a07162b711a67a806533bc1ee6aef52..aa5639e2c9d54797413d4be8a2d9441ea0ee2850 100644 (file)
@@ -723,6 +723,10 @@ class SharedMutexImpl {
   // This is the starting location for Token-less unlock_shared().
   static FOLLY_SHAREDMUTEX_TLS uint32_t tls_lastTokenlessSlot;
 
+  // Last deferred reader slot used.
+  static FOLLY_SHAREDMUTEX_TLS uint32_t tls_lastDeferredReaderSlot;
+
+
   // Only indexes divisible by kDeferredSeparationFactor are used.
   // If any of those elements points to a SharedMutexImpl, then it
   // should be considered that there is a shared lock on that instance.
@@ -1343,6 +1347,15 @@ FOLLY_SHAREDMUTEX_TLS uint32_t
     SharedMutexImpl<ReaderPriority, Tag_, Atom, BlockImmediately>::
         tls_lastTokenlessSlot = 0;
 
+template <
+    bool ReaderPriority,
+    typename Tag_,
+    template <typename> class Atom,
+    bool BlockImmediately>
+FOLLY_SHAREDMUTEX_TLS uint32_t
+    SharedMutexImpl<ReaderPriority, Tag_, Atom, BlockImmediately>::
+        tls_lastDeferredReaderSlot = 0;
+
 template <
     bool ReaderPriority,
     typename Tag_,
@@ -1385,21 +1398,27 @@ bool SharedMutexImpl<ReaderPriority, Tag_, Atom, BlockImmediately>::
         (state & kHasS) >= (kNumSharedToStartDeferring - 1) * kIncrHasS;
     bool drainInProgress = ReaderPriority && (state & kBegunE) != 0;
     if (canAlreadyDefer || (aboveDeferThreshold && !drainInProgress)) {
-      // starting point for our empty-slot search, can change after
-      // calling waitForZeroBits
-      uint32_t bestSlot =
-          (uint32_t)folly::detail::AccessSpreader<Atom>::current(
-              kMaxDeferredReaders);
-
-      // deferred readers are already enabled, or it is time to
-      // enable them if we can find a slot
-      for (uint32_t i = 0; i < kDeferredSearchDistance; ++i) {
-        slot = bestSlot ^ i;
-        assert(slot < kMaxDeferredReaders);
-        slotValue = deferredReader(slot)->load(std::memory_order_relaxed);
-        if (slotValue == 0) {
-          // found empty slot
-          break;
+      /* Try using the most recent slot first. */
+      slot = tls_lastDeferredReaderSlot;
+      slotValue = deferredReader(slot)->load(std::memory_order_relaxed);
+      if (slotValue != 0) {
+        // starting point for our empty-slot search, can change after
+        // calling waitForZeroBits
+        uint32_t bestSlot =
+            (uint32_t)folly::detail::AccessSpreader<Atom>::current(
+                kMaxDeferredReaders);
+
+        // deferred readers are already enabled, or it is time to
+        // enable them if we can find a slot
+        for (uint32_t i = 0; i < kDeferredSearchDistance; ++i) {
+          slot = bestSlot ^ i;
+          assert(slot < kMaxDeferredReaders);
+          slotValue = deferredReader(slot)->load(std::memory_order_relaxed);
+          if (slotValue == 0) {
+            // found empty slot
+            tls_lastDeferredReaderSlot = slot;
+            break;
+          }
         }
       }
     }
index dc0274c860e5e576f8543bdee9898323396a2ea3..e5c3c24a02dfab55d072be483088b7bcf1010fee 100644 (file)
@@ -1730,332 +1730,335 @@ BENCH_REL (pthrd_rwlock_ping_pong, burn1M, 1000, 1000000)
 // Comparison use folly::RWSpinLock as the baseline, with the
 // following row being the default SharedMutex (using *Holder or
 // Token-ful methods).
+//
+// Following results on 2-socket Intel(R) Xeon(R) CPU E5-2660 0 @ 2.20GHz
+//
 // ============================================================================
-// folly/experimental/test/SharedMutexTest.cpp     relative  time/iter  iters/s
+// folly/test/SharedMutexTest.cpp                  relative  time/iter  iters/s
 // ============================================================================
-// single_thread_lock_shared_unlock_shared                     22.78ns   43.89M
-// single_thread_lock_unlock                                   26.01ns   38.45M
+// single_thread_lock_shared_unlock_shared                     25.17ns   39.74M
+// single_thread_lock_unlock                                   25.88ns   38.64M
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
-// folly_rwspin_reads(1thread)                                 15.09ns   66.25M
-// shmtx_wr_pri_reads(1thread)                       69.89%    21.60ns   46.30M
-// shmtx_w_bare_reads(1thread)                       58.25%    25.91ns   38.59M
-// shmtx_rd_pri_reads(1thread)                       72.50%    20.82ns   48.03M
-// shmtx_r_bare_reads(1thread)                       58.27%    25.91ns   38.60M
-// folly_ticket_reads(1thread)                       54.80%    27.55ns   36.30M
-// boost_shared_reads(1thread)                       10.88%   138.80ns    7.20M
-// pthrd_rwlock_reads(1thread)                       40.68%    37.11ns   26.95M
+// folly_rwspin_reads(1thread)                                 15.16ns   65.95M
+// shmtx_wr_pri_reads(1thread)                       69.18%    21.92ns   45.63M
+// shmtx_w_bare_reads(1thread)                       56.07%    27.04ns   36.98M
+// shmtx_rd_pri_reads(1thread)                       69.06%    21.95ns   45.55M
+// shmtx_r_bare_reads(1thread)                       56.36%    26.90ns   37.17M
+// folly_ticket_reads(1thread)                       57.56%    26.34ns   37.96M
+// boost_shared_reads(1thread)                       10.55%   143.72ns    6.96M
+// pthrd_rwlock_reads(1thread)                       39.61%    38.28ns   26.12M
 // ----------------------------------------------------------------------------
-// folly_rwspin_reads(2thread)                                 92.63ns   10.80M
-// shmtx_wr_pri_reads(2thread)                      462.86%    20.01ns   49.97M
-// shmtx_w_bare_reads(2thread)                      430.53%    21.51ns   46.48M
-// shmtx_rd_pri_reads(2thread)                      487.13%    19.01ns   52.59M
-// shmtx_r_bare_reads(2thread)                      433.35%    21.37ns   46.79M
-// folly_ticket_reads(2thread)                       69.82%   132.67ns    7.54M
-// boost_shared_reads(2thread)                       36.66%   252.63ns    3.96M
-// pthrd_rwlock_reads(2thread)                      127.76%    72.50ns   13.79M
+// folly_rwspin_reads(2thread)                                 45.05ns   22.20M
+// shmtx_wr_pri_reads(2thread)                      379.98%    11.86ns   84.34M
+// shmtx_w_bare_reads(2thread)                      319.27%    14.11ns   70.87M
+// shmtx_rd_pri_reads(2thread)                      385.59%    11.68ns   85.59M
+// shmtx_r_bare_reads(2thread)                      306.56%    14.70ns   68.04M
+// folly_ticket_reads(2thread)                       61.07%    73.78ns   13.55M
+// boost_shared_reads(2thread)                       13.54%   332.66ns    3.01M
+// pthrd_rwlock_reads(2thread)                       34.22%   131.65ns    7.60M
 // ----------------------------------------------------------------------------
-// folly_rwspin_reads(4thread)                                 97.45ns   10.26M
-// shmtx_wr_pri_reads(4thread)                      978.22%     9.96ns  100.38M
-// shmtx_w_bare_reads(4thread)                      908.35%    10.73ns   93.21M
-// shmtx_rd_pri_reads(4thread)                     1032.29%     9.44ns  105.93M
-// shmtx_r_bare_reads(4thread)                      912.38%    10.68ns   93.63M
-// folly_ticket_reads(4thread)                       46.08%   211.46ns    4.73M
-// boost_shared_reads(4thread)                       25.00%   389.74ns    2.57M
-// pthrd_rwlock_reads(4thread)                       47.53%   205.01ns    4.88M
+// folly_rwspin_reads(4thread)                                 62.19ns   16.08M
+// shmtx_wr_pri_reads(4thread)                     1022.82%     6.08ns  164.48M
+// shmtx_w_bare_reads(4thread)                      875.37%     7.10ns  140.76M
+// shmtx_rd_pri_reads(4thread)                     1060.46%     5.86ns  170.53M
+// shmtx_r_bare_reads(4thread)                      879.88%     7.07ns  141.49M
+// folly_ticket_reads(4thread)                       64.62%    96.23ns   10.39M
+// boost_shared_reads(4thread)                       14.86%   418.49ns    2.39M
+// pthrd_rwlock_reads(4thread)                       25.01%   248.65ns    4.02M
 // ----------------------------------------------------------------------------
-// folly_rwspin_reads(8thread)                                147.24ns    6.79M
-// shmtx_wr_pri_reads(8thread)                     2915.66%     5.05ns  198.02M
-// shmtx_w_bare_reads(8thread)                     2699.32%     5.45ns  183.32M
-// shmtx_rd_pri_reads(8thread)                     3092.58%     4.76ns  210.03M
-// shmtx_r_bare_reads(8thread)                     2744.63%     5.36ns  186.40M
-// folly_ticket_reads(8thread)                       54.84%   268.47ns    3.72M
-// boost_shared_reads(8thread)                       42.40%   347.30ns    2.88M
-// pthrd_rwlock_reads(8thread)                       78.90%   186.63ns    5.36M
+// folly_rwspin_reads(8thread)                                 64.09ns   15.60M
+// shmtx_wr_pri_reads(8thread)                     2191.99%     2.92ns  342.03M
+// shmtx_w_bare_reads(8thread)                     1804.92%     3.55ns  281.63M
+// shmtx_rd_pri_reads(8thread)                     2194.60%     2.92ns  342.44M
+// shmtx_r_bare_reads(8thread)                     1800.53%     3.56ns  280.95M
+// folly_ticket_reads(8thread)                       54.90%   116.74ns    8.57M
+// boost_shared_reads(8thread)                       18.25%   351.24ns    2.85M
+// pthrd_rwlock_reads(8thread)                       28.19%   227.31ns    4.40M
 // ----------------------------------------------------------------------------
-// folly_rwspin_reads(16thread)                               166.25ns    6.02M
-// shmtx_wr_pri_reads(16thread)                    6133.03%     2.71ns  368.91M
-// shmtx_w_bare_reads(16thread)                    5936.05%     2.80ns  357.06M
-// shmtx_rd_pri_reads(16thread)                    6786.57%     2.45ns  408.22M
-// shmtx_r_bare_reads(16thread)                    5995.54%     2.77ns  360.64M
-// folly_ticket_reads(16thread)                      56.35%   295.01ns    3.39M
-// boost_shared_reads(16thread)                      51.62%   322.08ns    3.10M
-// pthrd_rwlock_reads(16thread)                      92.47%   179.79ns    5.56M
+// folly_rwspin_reads(16thread)                                70.06ns   14.27M
+// shmtx_wr_pri_reads(16thread)                    4970.09%     1.41ns  709.38M
+// shmtx_w_bare_reads(16thread)                    4143.75%     1.69ns  591.44M
+// shmtx_rd_pri_reads(16thread)                    5009.31%     1.40ns  714.98M
+// shmtx_r_bare_reads(16thread)                    4067.36%     1.72ns  580.54M
+// folly_ticket_reads(16thread)                      46.78%   149.77ns    6.68M
+// boost_shared_reads(16thread)                      21.67%   323.37ns    3.09M
+// pthrd_rwlock_reads(16thread)                      35.05%   199.90ns    5.00M
 // ----------------------------------------------------------------------------
-// folly_rwspin_reads(32thread)                               107.72ns    9.28M
-// shmtx_wr_pri_reads(32thread)                    6772.80%     1.59ns  628.77M
-// shmtx_w_bare_reads(32thread)                    6236.13%     1.73ns  578.94M
-// shmtx_rd_pri_reads(32thread)                    8143.32%     1.32ns  756.00M
-// shmtx_r_bare_reads(32thread)                    6485.18%     1.66ns  602.06M
-// folly_ticket_reads(32thread)                      35.12%   306.73ns    3.26M
-// boost_shared_reads(32thread)                      28.19%   382.17ns    2.62M
-// pthrd_rwlock_reads(32thread)                      65.29%   164.99ns    6.06M
+// folly_rwspin_reads(32thread)                                58.83ns   17.00M
+// shmtx_wr_pri_reads(32thread)                    5158.37%     1.14ns  876.79M
+// shmtx_w_bare_reads(32thread)                    4246.03%     1.39ns  721.72M
+// shmtx_rd_pri_reads(32thread)                    4845.97%     1.21ns  823.69M
+// shmtx_r_bare_reads(32thread)                    4721.44%     1.25ns  802.52M
+// folly_ticket_reads(32thread)                      28.40%   207.15ns    4.83M
+// boost_shared_reads(32thread)                      17.08%   344.54ns    2.90M
+// pthrd_rwlock_reads(32thread)                      30.01%   196.02ns    5.10M
 // ----------------------------------------------------------------------------
-// folly_rwspin_reads(64thread)                               119.46ns    8.37M
-// shmtx_wr_pri_reads(64thread)                    6744.92%     1.77ns  564.60M
-// shmtx_w_bare_reads(64thread)                    6268.50%     1.91ns  524.72M
-// shmtx_rd_pri_reads(64thread)                    7508.56%     1.59ns  628.52M
-// shmtx_r_bare_reads(64thread)                    6299.53%     1.90ns  527.32M
-// folly_ticket_reads(64thread)                      37.42%   319.26ns    3.13M
-// boost_shared_reads(64thread)                      32.58%   366.70ns    2.73M
-// pthrd_rwlock_reads(64thread)                      73.64%   162.24ns    6.16M
+// folly_rwspin_reads(64thread)                                59.19ns   16.89M
+// shmtx_wr_pri_reads(64thread)                    3804.54%     1.56ns  642.76M
+// shmtx_w_bare_reads(64thread)                    3625.06%     1.63ns  612.43M
+// shmtx_rd_pri_reads(64thread)                    3418.19%     1.73ns  577.48M
+// shmtx_r_bare_reads(64thread)                    3416.98%     1.73ns  577.28M
+// folly_ticket_reads(64thread)                      30.53%   193.90ns    5.16M
+// boost_shared_reads(64thread)                      18.59%   318.47ns    3.14M
+// pthrd_rwlock_reads(64thread)                      31.35%   188.81ns    5.30M
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
-// folly_rwspin(1thread_all_write)                             25.51ns   39.19M
-// shmtx_wr_pri(1thread_all_write)                   97.38%    26.20ns   38.17M
-// shmtx_rd_pri(1thread_all_write)                   97.55%    26.16ns   38.23M
-// folly_ticket(1thread_all_write)                   90.98%    28.04ns   35.66M
-// boost_shared(1thread_all_write)                   16.80%   151.89ns    6.58M
-// pthrd_rwlock(1thread_all_write)                   63.86%    39.96ns   25.03M
-// pthrd_mutex_(1thread_all_write)                   82.05%    31.09ns   32.16M
+// folly_rwspin(1thread_all_write)                             23.77ns   42.06M
+// shmtx_wr_pri(1thread_all_write)                   85.09%    27.94ns   35.79M
+// shmtx_rd_pri(1thread_all_write)                   85.32%    27.87ns   35.89M
+// folly_ticket(1thread_all_write)                   88.11%    26.98ns   37.06M
+// boost_shared(1thread_all_write)                   16.49%   144.14ns    6.94M
+// pthrd_rwlock(1thread_all_write)                   53.99%    44.04ns   22.71M
+// pthrd_mutex_(1thread_all_write)                   86.05%    27.63ns   36.20M
 // ----------------------------------------------------------------------------
-// folly_rwspin(2thread_all_write)                            100.70ns    9.93M
-// shmtx_wr_pri(2thread_all_write)                   40.83%   246.61ns    4.05M
-// shmtx_rd_pri(2thread_all_write)                   40.53%   248.44ns    4.03M
-// folly_ticket(2thread_all_write)                   58.49%   172.17ns    5.81M
-// boost_shared(2thread_all_write)                   24.26%   415.00ns    2.41M
-// pthrd_rwlock(2thread_all_write)                   41.35%   243.49ns    4.11M
-// pthrd_mutex_(2thread_all_write)                  146.91%    68.55ns   14.59M
+// folly_rwspin(2thread_all_write)                             76.05ns   13.15M
+// shmtx_wr_pri(2thread_all_write)                   60.67%   125.35ns    7.98M
+// shmtx_rd_pri(2thread_all_write)                   60.36%   125.99ns    7.94M
+// folly_ticket(2thread_all_write)                  129.10%    58.91ns   16.98M
+// boost_shared(2thread_all_write)                   18.65%   407.74ns    2.45M
+// pthrd_rwlock(2thread_all_write)                   40.90%   185.92ns    5.38M
+// pthrd_mutex_(2thread_all_write)                  127.37%    59.71ns   16.75M
 // ----------------------------------------------------------------------------
-// folly_rwspin(4thread_all_write)                            199.52ns    5.01M
-// shmtx_wr_pri(4thread_all_write)                   51.71%   385.86ns    2.59M
-// shmtx_rd_pri(4thread_all_write)                   49.43%   403.62ns    2.48M
-// folly_ticket(4thread_all_write)                  117.88%   169.26ns    5.91M
-// boost_shared(4thread_all_write)                    9.81%     2.03us  491.48K
-// pthrd_rwlock(4thread_all_write)                   28.23%   706.69ns    1.42M
-// pthrd_mutex_(4thread_all_write)                  111.54%   178.88ns    5.59M
+// folly_rwspin(4thread_all_write)                            207.17ns    4.83M
+// shmtx_wr_pri(4thread_all_write)                  119.42%   173.49ns    5.76M
+// shmtx_rd_pri(4thread_all_write)                  117.68%   176.05ns    5.68M
+// folly_ticket(4thread_all_write)                  182.39%   113.59ns    8.80M
+// boost_shared(4thread_all_write)                   11.98%     1.73us  578.46K
+// pthrd_rwlock(4thread_all_write)                   27.50%   753.25ns    1.33M
+// pthrd_mutex_(4thread_all_write)                  117.75%   175.95ns    5.68M
 // ----------------------------------------------------------------------------
-// folly_rwspin(8thread_all_write)                            304.61ns    3.28M
-// shmtx_wr_pri(8thread_all_write)                   69.77%   436.59ns    2.29M
-// shmtx_rd_pri(8thread_all_write)                   66.58%   457.51ns    2.19M
-// folly_ticket(8thread_all_write)                  141.00%   216.03ns    4.63M
-// boost_shared(8thread_all_write)                    6.11%     4.99us  200.59K
-// pthrd_rwlock(8thread_all_write)                   38.03%   800.88ns    1.25M
-// pthrd_mutex_(8thread_all_write)                  177.66%   171.45ns    5.83M
+// folly_rwspin(8thread_all_write)                            326.50ns    3.06M
+// shmtx_wr_pri(8thread_all_write)                  125.47%   260.22ns    3.84M
+// shmtx_rd_pri(8thread_all_write)                  124.73%   261.76ns    3.82M
+// folly_ticket(8thread_all_write)                  253.39%   128.85ns    7.76M
+// boost_shared(8thread_all_write)                    6.36%     5.13us  194.87K
+// pthrd_rwlock(8thread_all_write)                   38.54%   847.09ns    1.18M
+// pthrd_mutex_(8thread_all_write)                  166.31%   196.32ns    5.09M
 // ----------------------------------------------------------------------------
-// folly_rwspin(16thread_all_write)                           576.97ns    1.73M
-// shmtx_wr_pri(16thread_all_write)                 105.72%   545.77ns    1.83M
-// shmtx_rd_pri(16thread_all_write)                 105.13%   548.83ns    1.82M
-// folly_ticket(16thread_all_write)                 161.70%   356.82ns    2.80M
-// boost_shared(16thread_all_write)                   7.73%     7.46us  134.03K
-// pthrd_rwlock(16thread_all_write)                  96.88%   595.54ns    1.68M
-// pthrd_mutex_(16thread_all_write)                 330.44%   174.61ns    5.73M
+// folly_rwspin(16thread_all_write)                           729.89ns    1.37M
+// shmtx_wr_pri(16thread_all_write)                 219.91%   331.91ns    3.01M
+// shmtx_rd_pri(16thread_all_write)                 220.09%   331.62ns    3.02M
+// folly_ticket(16thread_all_write)                 390.06%   187.12ns    5.34M
+// boost_shared(16thread_all_write)                  10.27%     7.11us  140.72K
+// pthrd_rwlock(16thread_all_write)                 113.90%   640.84ns    1.56M
+// pthrd_mutex_(16thread_all_write)                 401.97%   181.58ns    5.51M
 // ----------------------------------------------------------------------------
-// folly_rwspin(32thread_all_write)                             1.41us  707.76K
-// shmtx_wr_pri(32thread_all_write)                 240.46%   587.58ns    1.70M
-// shmtx_rd_pri(32thread_all_write)                 393.71%   358.87ns    2.79M
-// folly_ticket(32thread_all_write)                 325.07%   434.65ns    2.30M
-// boost_shared(32thread_all_write)                  18.57%     7.61us  131.43K
-// pthrd_rwlock(32thread_all_write)                 266.78%   529.62ns    1.89M
-// pthrd_mutex_(32thread_all_write)                 877.89%   160.94ns    6.21M
+// folly_rwspin(32thread_all_write)                             1.55us  645.01K
+// shmtx_wr_pri(32thread_all_write)                 415.05%   373.54ns    2.68M
+// shmtx_rd_pri(32thread_all_write)                 258.45%   599.88ns    1.67M
+// folly_ticket(32thread_all_write)                 525.40%   295.09ns    3.39M
+// boost_shared(32thread_all_write)                  20.84%     7.44us  134.45K
+// pthrd_rwlock(32thread_all_write)                 254.16%   610.00ns    1.64M
+// pthrd_mutex_(32thread_all_write)                 852.51%   181.86ns    5.50M
 // ----------------------------------------------------------------------------
-// folly_rwspin(64thread_all_write)                             1.76us  566.94K
-// shmtx_wr_pri(64thread_all_write)                 255.67%   689.91ns    1.45M
-// shmtx_rd_pri(64thread_all_write)                 468.82%   376.23ns    2.66M
-// folly_ticket(64thread_all_write)                 294.72%   598.49ns    1.67M
-// boost_shared(64thread_all_write)                  23.39%     7.54us  132.58K
-// pthrd_rwlock(64thread_all_write)                 321.39%   548.83ns    1.82M
-// pthrd_mutex_(64thread_all_write)                1165.04%   151.40ns    6.61M
+// folly_rwspin(64thread_all_write)                             2.03us  492.00K
+// shmtx_wr_pri(64thread_all_write)                 517.65%   392.64ns    2.55M
+// shmtx_rd_pri(64thread_all_write)                 288.20%   705.24ns    1.42M
+// folly_ticket(64thread_all_write)                 638.22%   318.47ns    3.14M
+// boost_shared(64thread_all_write)                  27.56%     7.37us  135.61K
+// pthrd_rwlock(64thread_all_write)                 326.75%   622.04ns    1.61M
+// pthrd_mutex_(64thread_all_write)                1231.57%   165.04ns    6.06M
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
-// folly_rwspin(1thread_10pct_write)                           19.51ns   51.26M
-// shmtx_wr_pri(1thread_10pct_write)                 83.25%    23.43ns   42.67M
-// shmtx_rd_pri(1thread_10pct_write)                 83.31%    23.42ns   42.71M
-// folly_ticket(1thread_10pct_write)                 70.88%    27.52ns   36.34M
-// boost_shared(1thread_10pct_write)                 13.09%   148.99ns    6.71M
-// pthrd_rwlock(1thread_10pct_write)                 47.41%    41.15ns   24.30M
+// folly_rwspin(1thread_10pct_write)                           19.39ns   51.58M
+// shmtx_wr_pri(1thread_10pct_write)                 93.87%    20.65ns   48.42M
+// shmtx_rd_pri(1thread_10pct_write)                 93.60%    20.71ns   48.28M
+// folly_ticket(1thread_10pct_write)                 73.75%    26.29ns   38.04M
+// boost_shared(1thread_10pct_write)                 12.97%   149.53ns    6.69M
+// pthrd_rwlock(1thread_10pct_write)                 44.15%    43.92ns   22.77M
 // ----------------------------------------------------------------------------
-// folly_rwspin(2thread_10pct_write)                          159.42ns    6.27M
-// shmtx_wr_pri(2thread_10pct_write)                188.44%    84.60ns   11.82M
-// shmtx_rd_pri(2thread_10pct_write)                188.29%    84.67ns   11.81M
-// folly_ticket(2thread_10pct_write)                140.28%   113.64ns    8.80M
-// boost_shared(2thread_10pct_write)                 42.09%   378.81ns    2.64M
-// pthrd_rwlock(2thread_10pct_write)                103.86%   153.49ns    6.51M
+// folly_rwspin(2thread_10pct_write)                          227.88ns    4.39M
+// shmtx_wr_pri(2thread_10pct_write)                321.08%    70.98ns   14.09M
+// shmtx_rd_pri(2thread_10pct_write)                280.65%    81.20ns   12.32M
+// folly_ticket(2thread_10pct_write)                220.43%   103.38ns    9.67M
+// boost_shared(2thread_10pct_write)                 58.78%   387.71ns    2.58M
+// pthrd_rwlock(2thread_10pct_write)                112.68%   202.23ns    4.94M
 // ----------------------------------------------------------------------------
-// folly_rwspin(4thread_10pct_write)                          193.35ns    5.17M
-// shmtx_wr_pri(4thread_10pct_write)                184.30%   104.91ns    9.53M
-// shmtx_rd_pri(4thread_10pct_write)                163.76%   118.07ns    8.47M
-// folly_ticket(4thread_10pct_write)                124.07%   155.84ns    6.42M
-// boost_shared(4thread_10pct_write)                 16.32%     1.18us  843.92K
-// pthrd_rwlock(4thread_10pct_write)                 48.59%   397.94ns    2.51M
+// folly_rwspin(4thread_10pct_write)                          444.94ns    2.25M
+// shmtx_wr_pri(4thread_10pct_write)                470.35%    94.60ns   10.57M
+// shmtx_rd_pri(4thread_10pct_write)                349.08%   127.46ns    7.85M
+// folly_ticket(4thread_10pct_write)                305.64%   145.58ns    6.87M
+// boost_shared(4thread_10pct_write)                 44.43%     1.00us  998.57K
+// pthrd_rwlock(4thread_10pct_write)                100.59%   442.31ns    2.26M
 // ----------------------------------------------------------------------------
-// folly_rwspin(8thread_10pct_write)                          373.17ns    2.68M
-// shmtx_wr_pri(8thread_10pct_write)                252.02%   148.08ns    6.75M
-// shmtx_rd_pri(8thread_10pct_write)                203.59%   183.30ns    5.46M
-// folly_ticket(8thread_10pct_write)                184.37%   202.40ns    4.94M
-// boost_shared(8thread_10pct_write)                 15.85%     2.35us  424.72K
-// pthrd_rwlock(8thread_10pct_write)                 83.03%   449.45ns    2.22M
+// folly_rwspin(8thread_10pct_write)                          424.67ns    2.35M
+// shmtx_wr_pri(8thread_10pct_write)                337.53%   125.82ns    7.95M
+// shmtx_rd_pri(8thread_10pct_write)                232.32%   182.79ns    5.47M
+// folly_ticket(8thread_10pct_write)                206.59%   205.56ns    4.86M
+// boost_shared(8thread_10pct_write)                 19.45%     2.18us  457.90K
+// pthrd_rwlock(8thread_10pct_write)                 78.58%   540.42ns    1.85M
 // ----------------------------------------------------------------------------
-// folly_rwspin(16thread_10pct_write)                         742.87ns    1.35M
-// shmtx_wr_pri(16thread_10pct_write)               344.27%   215.78ns    4.63M
-// shmtx_rd_pri(16thread_10pct_write)               287.04%   258.80ns    3.86M
-// folly_ticket(16thread_10pct_write)               277.25%   267.94ns    3.73M
-// boost_shared(16thread_10pct_write)                15.33%     4.85us  206.30K
-// pthrd_rwlock(16thread_10pct_write)               158.34%   469.16ns    2.13M
+// folly_rwspin(16thread_10pct_write)                         727.04ns    1.38M
+// shmtx_wr_pri(16thread_10pct_write)               400.60%   181.49ns    5.51M
+// shmtx_rd_pri(16thread_10pct_write)               312.94%   232.33ns    4.30M
+// folly_ticket(16thread_10pct_write)               283.67%   256.30ns    3.90M
+// boost_shared(16thread_10pct_write)                15.87%     4.58us  218.32K
+// pthrd_rwlock(16thread_10pct_write)               131.28%   553.82ns    1.81M
 // ----------------------------------------------------------------------------
-// folly_rwspin(32thread_10pct_write)                         799.97ns    1.25M
-// shmtx_wr_pri(32thread_10pct_write)               351.40%   227.65ns    4.39M
-// shmtx_rd_pri(32thread_10pct_write)               341.71%   234.11ns    4.27M
-// folly_ticket(32thread_10pct_write)               245.91%   325.31ns    3.07M
-// boost_shared(32thread_10pct_write)                 7.72%    10.36us   96.56K
-// pthrd_rwlock(32thread_10pct_write)               165.87%   482.30ns    2.07M
+// folly_rwspin(32thread_10pct_write)                         810.61ns    1.23M
+// shmtx_wr_pri(32thread_10pct_write)               429.61%   188.68ns    5.30M
+// shmtx_rd_pri(32thread_10pct_write)               321.13%   252.42ns    3.96M
+// folly_ticket(32thread_10pct_write)               247.65%   327.32ns    3.06M
+// boost_shared(32thread_10pct_write)                 8.34%     9.71us  102.94K
+// pthrd_rwlock(32thread_10pct_write)               144.28%   561.85ns    1.78M
 // ----------------------------------------------------------------------------
-// folly_rwspin(64thread_10pct_write)                           1.12us  892.01K
-// shmtx_wr_pri(64thread_10pct_write)               429.84%   260.81ns    3.83M
-// shmtx_rd_pri(64thread_10pct_write)               456.93%   245.35ns    4.08M
-// folly_ticket(64thread_10pct_write)               219.21%   511.42ns    1.96M
-// boost_shared(64thread_10pct_write)                 5.43%    20.65us   48.44K
-// pthrd_rwlock(64thread_10pct_write)               233.93%   479.23ns    2.09M
+// folly_rwspin(64thread_10pct_write)                           1.10us  912.30K
+// shmtx_wr_pri(64thread_10pct_write)               486.68%   225.22ns    4.44M
+// shmtx_rd_pri(64thread_10pct_write)               412.96%   265.43ns    3.77M
+// folly_ticket(64thread_10pct_write)               280.23%   391.15ns    2.56M
+// boost_shared(64thread_10pct_write)                 6.16%    17.79us   56.22K
+// pthrd_rwlock(64thread_10pct_write)               198.81%   551.34ns    1.81M
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
-// folly_rwspin(1thread_1pct_write)                            18.88ns   52.98M
-// shmtx_wr_pri(1thread_1pct_write)                  81.53%    23.15ns   43.19M
-// shmtx_w_bare(1thread_1pct_write)                  67.90%    27.80ns   35.97M
-// shmtx_rd_pri(1thread_1pct_write)                  81.50%    23.16ns   43.18M
-// shmtx_r_bare(1thread_1pct_write)                  67.74%    27.86ns   35.89M
-// folly_ticket(1thread_1pct_write)                  68.68%    27.48ns   36.39M
-// boost_shared(1thread_1pct_write)                  12.80%   147.51ns    6.78M
-// pthrd_rwlock(1thread_1pct_write)                  45.81%    41.20ns   24.27M
+// folly_rwspin(1thread_1pct_write)                            19.02ns   52.57M
+// shmtx_wr_pri(1thread_1pct_write)                  94.46%    20.14ns   49.66M
+// shmtx_w_bare(1thread_1pct_write)                  76.60%    24.83ns   40.27M
+// shmtx_rd_pri(1thread_1pct_write)                  93.83%    20.27ns   49.33M
+// shmtx_r_bare(1thread_1pct_write)                  77.04%    24.69ns   40.50M
+// folly_ticket(1thread_1pct_write)                  72.83%    26.12ns   38.29M
+// boost_shared(1thread_1pct_write)                  12.48%   152.44ns    6.56M
+// pthrd_rwlock(1thread_1pct_write)                  42.85%    44.39ns   22.53M
 // ----------------------------------------------------------------------------
-// folly_rwspin(2thread_1pct_write)                           125.85ns    7.95M
-// shmtx_wr_pri(2thread_1pct_write)                 359.04%    35.05ns   28.53M
-// shmtx_w_bare(2thread_1pct_write)                 475.60%    26.46ns   37.79M
-// shmtx_rd_pri(2thread_1pct_write)                 332.75%    37.82ns   26.44M
-// shmtx_r_bare(2thread_1pct_write)                 115.64%   108.83ns    9.19M
-// folly_ticket(2thread_1pct_write)                 140.24%    89.74ns   11.14M
-// boost_shared(2thread_1pct_write)                  40.62%   309.82ns    3.23M
-// pthrd_rwlock(2thread_1pct_write)                 134.67%    93.45ns   10.70M
+// folly_rwspin(2thread_1pct_write)                           110.63ns    9.04M
+// shmtx_wr_pri(2thread_1pct_write)                 442.12%    25.02ns   39.96M
+// shmtx_w_bare(2thread_1pct_write)                 374.65%    29.53ns   33.86M
+// shmtx_rd_pri(2thread_1pct_write)                 371.08%    29.81ns   33.54M
+// shmtx_r_bare(2thread_1pct_write)                 138.02%    80.15ns   12.48M
+// folly_ticket(2thread_1pct_write)                 131.34%    84.23ns   11.87M
+// boost_shared(2thread_1pct_write)                  30.35%   364.58ns    2.74M
+// pthrd_rwlock(2thread_1pct_write)                  95.48%   115.87ns    8.63M
 // ----------------------------------------------------------------------------
-// folly_rwspin(4thread_1pct_write)                           126.70ns    7.89M
-// shmtx_wr_pri(4thread_1pct_write)                 422.20%    30.01ns   33.32M
-// shmtx_w_bare(4thread_1pct_write)                 403.52%    31.40ns   31.85M
-// shmtx_rd_pri(4thread_1pct_write)                 282.50%    44.85ns   22.30M
-// shmtx_r_bare(4thread_1pct_write)                  66.30%   191.10ns    5.23M
-// folly_ticket(4thread_1pct_write)                  91.93%   137.83ns    7.26M
-// boost_shared(4thread_1pct_write)                  22.74%   557.10ns    1.80M
-// pthrd_rwlock(4thread_1pct_write)                  55.66%   227.62ns    4.39M
+// folly_rwspin(4thread_1pct_write)                           140.62ns    7.11M
+// shmtx_wr_pri(4thread_1pct_write)                 627.13%    22.42ns   44.60M
+// shmtx_w_bare(4thread_1pct_write)                 552.94%    25.43ns   39.32M
+// shmtx_rd_pri(4thread_1pct_write)                 226.06%    62.21ns   16.08M
+// shmtx_r_bare(4thread_1pct_write)                  77.61%   181.19ns    5.52M
+// folly_ticket(4thread_1pct_write)                 119.58%   117.60ns    8.50M
+// boost_shared(4thread_1pct_write)                  25.36%   554.54ns    1.80M
+// pthrd_rwlock(4thread_1pct_write)                  45.55%   308.72ns    3.24M
 // ----------------------------------------------------------------------------
-// folly_rwspin(8thread_1pct_write)                           169.42ns    5.90M
-// shmtx_wr_pri(8thread_1pct_write)                 567.81%    29.84ns   33.51M
-// shmtx_w_bare(8thread_1pct_write)                 519.18%    32.63ns   30.64M
-// shmtx_rd_pri(8thread_1pct_write)                 172.36%    98.30ns   10.17M
-// shmtx_r_bare(8thread_1pct_write)                  75.56%   224.21ns    4.46M
-// folly_ticket(8thread_1pct_write)                 104.03%   162.85ns    6.14M
-// boost_shared(8thread_1pct_write)                  22.01%   769.73ns    1.30M
-// pthrd_rwlock(8thread_1pct_write)                  71.79%   235.99ns    4.24M
+// folly_rwspin(8thread_1pct_write)                           166.23ns    6.02M
+// shmtx_wr_pri(8thread_1pct_write)                 687.09%    24.19ns   41.33M
+// shmtx_w_bare(8thread_1pct_write)                 611.80%    27.17ns   36.80M
+// shmtx_rd_pri(8thread_1pct_write)                 140.37%   118.43ns    8.44M
+// shmtx_r_bare(8thread_1pct_write)                  80.32%   206.97ns    4.83M
+// folly_ticket(8thread_1pct_write)                 117.06%   142.01ns    7.04M
+// boost_shared(8thread_1pct_write)                  22.29%   745.67ns    1.34M
+// pthrd_rwlock(8thread_1pct_write)                  49.84%   333.55ns    3.00M
 // ----------------------------------------------------------------------------
-// folly_rwspin(16thread_1pct_write)                          385.88ns    2.59M
-// shmtx_wr_pri(16thread_1pct_write)               1039.03%    37.14ns   26.93M
-// shmtx_w_bare(16thread_1pct_write)                997.26%    38.69ns   25.84M
-// shmtx_rd_pri(16thread_1pct_write)                263.60%   146.39ns    6.83M
-// shmtx_r_bare(16thread_1pct_write)                173.16%   222.85ns    4.49M
-// folly_ticket(16thread_1pct_write)                179.37%   215.13ns    4.65M
-// boost_shared(16thread_1pct_write)                 26.95%     1.43us  698.42K
-// pthrd_rwlock(16thread_1pct_write)                166.70%   231.48ns    4.32M
+// folly_rwspin(16thread_1pct_write)                          419.79ns    2.38M
+// shmtx_wr_pri(16thread_1pct_write)               1397.92%    30.03ns   33.30M
+// shmtx_w_bare(16thread_1pct_write)               1324.60%    31.69ns   31.55M
+// shmtx_rd_pri(16thread_1pct_write)                278.12%   150.94ns    6.63M
+// shmtx_r_bare(16thread_1pct_write)                194.25%   216.11ns    4.63M
+// folly_ticket(16thread_1pct_write)                255.38%   164.38ns    6.08M
+// boost_shared(16thread_1pct_write)                 33.71%     1.25us  803.01K
+// pthrd_rwlock(16thread_1pct_write)                131.96%   318.12ns    3.14M
 // ----------------------------------------------------------------------------
-// folly_rwspin(32thread_1pct_write)                          382.49ns    2.61M
-// shmtx_wr_pri(32thread_1pct_write)               1046.64%    36.54ns   27.36M
-// shmtx_w_bare(32thread_1pct_write)                922.87%    41.45ns   24.13M
-// shmtx_rd_pri(32thread_1pct_write)                251.93%   151.82ns    6.59M
-// shmtx_r_bare(32thread_1pct_write)                176.44%   216.78ns    4.61M
-// folly_ticket(32thread_1pct_write)                131.07%   291.82ns    3.43M
-// boost_shared(32thread_1pct_write)                 12.77%     2.99us  333.95K
-// pthrd_rwlock(32thread_1pct_write)                173.43%   220.55ns    4.53M
+// folly_rwspin(32thread_1pct_write)                          395.99ns    2.53M
+// shmtx_wr_pri(32thread_1pct_write)               1332.76%    29.71ns   33.66M
+// shmtx_w_bare(32thread_1pct_write)               1208.86%    32.76ns   30.53M
+// shmtx_rd_pri(32thread_1pct_write)                252.97%   156.54ns    6.39M
+// shmtx_r_bare(32thread_1pct_write)                193.79%   204.35ns    4.89M
+// folly_ticket(32thread_1pct_write)                173.16%   228.69ns    4.37M
+// boost_shared(32thread_1pct_write)                 17.00%     2.33us  429.40K
+// pthrd_rwlock(32thread_1pct_write)                129.88%   304.89ns    3.28M
 // ----------------------------------------------------------------------------
-// folly_rwspin(64thread_1pct_write)                          510.54ns    1.96M
-// shmtx_wr_pri(64thread_1pct_write)               1378.27%    37.04ns   27.00M
-// shmtx_w_bare(64thread_1pct_write)               1178.24%    43.33ns   23.08M
-// shmtx_rd_pri(64thread_1pct_write)                325.29%   156.95ns    6.37M
-// shmtx_r_bare(64thread_1pct_write)                247.82%   206.02ns    4.85M
-// folly_ticket(64thread_1pct_write)                117.87%   433.13ns    2.31M
-// boost_shared(64thread_1pct_write)                  9.45%     5.40us  185.09K
-// pthrd_rwlock(64thread_1pct_write)                236.72%   215.68ns    4.64M
+// folly_rwspin(64thread_1pct_write)                          424.07ns    2.36M
+// shmtx_wr_pri(64thread_1pct_write)               1297.89%    32.67ns   30.61M
+// shmtx_w_bare(64thread_1pct_write)               1228.88%    34.51ns   28.98M
+// shmtx_rd_pri(64thread_1pct_write)                270.40%   156.83ns    6.38M
+// shmtx_r_bare(64thread_1pct_write)                218.05%   194.48ns    5.14M
+// folly_ticket(64thread_1pct_write)                171.44%   247.36ns    4.04M
+// boost_shared(64thread_1pct_write)                 10.60%     4.00us  249.95K
+// pthrd_rwlock(64thread_1pct_write)                143.80%   294.91ns    3.39M
 // ----------------------------------------------------------------------------
-// folly_rwspin(2thr_2lock_50pct_write)                        10.85ns   92.15M
-// shmtx_wr_pri(2thr_2lock_50pct_write)              81.73%    13.28ns   75.32M
-// shmtx_rd_pri(2thr_2lock_50pct_write)              81.82%    13.26ns   75.40M
-// folly_rwspin(4thr_4lock_50pct_write)                         5.29ns  188.90M
-// shmtx_wr_pri(4thr_4lock_50pct_write)              80.89%     6.54ns  152.80M
-// shmtx_rd_pri(4thr_4lock_50pct_write)              81.07%     6.53ns  153.14M
-// folly_rwspin(8thr_8lock_50pct_write)                         2.63ns  380.57M
-// shmtx_wr_pri(8thr_8lock_50pct_write)              80.56%     3.26ns  306.57M
-// shmtx_rd_pri(8thr_8lock_50pct_write)              80.29%     3.27ns  305.54M
-// folly_rwspin(16thr_16lock_50pct_write)                       1.31ns  764.70M
-// shmtx_wr_pri(16thr_16lock_50pct_write)            79.32%     1.65ns  606.54M
-// shmtx_rd_pri(16thr_16lock_50pct_write)            79.62%     1.64ns  608.84M
-// folly_rwspin(32thr_32lock_50pct_write)                       1.20ns  836.75M
-// shmtx_wr_pri(32thr_32lock_50pct_write)            91.67%     1.30ns  767.07M
-// shmtx_rd_pri(32thr_32lock_50pct_write)            92.00%     1.30ns  769.82M
-// folly_rwspin(64thr_64lock_50pct_write)                       1.39ns  717.80M
-// shmtx_wr_pri(64thr_64lock_50pct_write)            93.21%     1.49ns  669.08M
-// shmtx_rd_pri(64thr_64lock_50pct_write)            92.49%     1.51ns  663.89M
+// folly_rwspin(2thr_2lock_50pct_write)                        10.87ns   91.99M
+// shmtx_wr_pri(2thr_2lock_50pct_write)              83.71%    12.99ns   77.01M
+// shmtx_rd_pri(2thr_2lock_50pct_write)              84.08%    12.93ns   77.34M
+// folly_rwspin(4thr_4lock_50pct_write)                         5.32ns  188.12M
+// shmtx_wr_pri(4thr_4lock_50pct_write)              82.21%     6.47ns  154.65M
+// shmtx_rd_pri(4thr_4lock_50pct_write)              81.20%     6.55ns  152.75M
+// folly_rwspin(8thr_8lock_50pct_write)                         2.64ns  379.06M
+// shmtx_wr_pri(8thr_8lock_50pct_write)              81.26%     3.25ns  308.03M
+// shmtx_rd_pri(8thr_8lock_50pct_write)              80.95%     3.26ns  306.86M
+// folly_rwspin(16thr_16lock_50pct_write)                       1.52ns  656.77M
+// shmtx_wr_pri(16thr_16lock_50pct_write)            86.24%     1.77ns  566.41M
+// shmtx_rd_pri(16thr_16lock_50pct_write)            83.72%     1.82ns  549.82M
+// folly_rwspin(32thr_32lock_50pct_write)                       1.19ns  841.03M
+// shmtx_wr_pri(32thr_32lock_50pct_write)            85.08%     1.40ns  715.55M
+// shmtx_rd_pri(32thr_32lock_50pct_write)            86.44%     1.38ns  727.00M
+// folly_rwspin(64thr_64lock_50pct_write)                       1.46ns  684.28M
+// shmtx_wr_pri(64thr_64lock_50pct_write)            84.53%     1.73ns  578.43M
+// shmtx_rd_pri(64thr_64lock_50pct_write)            82.80%     1.76ns  566.58M
 // ----------------------------------------------------------------------------
-// folly_rwspin(2thr_2lock_10pct_write)                        10.24ns   97.70M
-// shmtx_wr_pri(2thr_2lock_10pct_write)              76.46%    13.39ns   74.70M
-// shmtx_rd_pri(2thr_2lock_10pct_write)              76.35%    13.41ns   74.60M
-// folly_rwspin(4thr_4lock_10pct_write)                         5.02ns  199.03M
-// shmtx_wr_pri(4thr_4lock_10pct_write)              75.83%     6.63ns  150.91M
-// shmtx_rd_pri(4thr_4lock_10pct_write)              76.10%     6.60ns  151.46M
-// folly_rwspin(8thr_8lock_10pct_write)                         2.47ns  405.50M
-// shmtx_wr_pri(8thr_8lock_10pct_write)              74.54%     3.31ns  302.27M
-// shmtx_rd_pri(8thr_8lock_10pct_write)              74.85%     3.29ns  303.52M
-// folly_rwspin(16thr_16lock_10pct_write)                       1.22ns  818.68M
-// shmtx_wr_pri(16thr_16lock_10pct_write)            73.35%     1.67ns  600.47M
-// shmtx_rd_pri(16thr_16lock_10pct_write)            73.38%     1.66ns  600.73M
-// folly_rwspin(32thr_32lock_10pct_write)                       1.21ns  827.95M
-// shmtx_wr_pri(32thr_32lock_10pct_write)            96.13%     1.26ns  795.89M
-// shmtx_rd_pri(32thr_32lock_10pct_write)            96.01%     1.26ns  794.95M
-// folly_rwspin(64thr_64lock_10pct_write)                       1.40ns  716.17M
-// shmtx_wr_pri(64thr_64lock_10pct_write)            96.91%     1.44ns  694.03M
-// shmtx_rd_pri(64thr_64lock_10pct_write)            96.85%     1.44ns  693.64M
+// folly_rwspin(2thr_2lock_10pct_write)                        10.01ns   99.85M
+// shmtx_wr_pri(2thr_2lock_10pct_write)              92.02%    10.88ns   91.88M
+// shmtx_rd_pri(2thr_2lock_10pct_write)              92.35%    10.84ns   92.22M
+// folly_rwspin(4thr_4lock_10pct_write)                         4.81ns  207.87M
+// shmtx_wr_pri(4thr_4lock_10pct_write)              89.32%     5.39ns  185.67M
+// shmtx_rd_pri(4thr_4lock_10pct_write)              88.96%     5.41ns  184.93M
+// folly_rwspin(8thr_8lock_10pct_write)                         2.39ns  417.62M
+// shmtx_wr_pri(8thr_8lock_10pct_write)              91.17%     2.63ns  380.76M
+// shmtx_rd_pri(8thr_8lock_10pct_write)              89.53%     2.67ns  373.92M
+// folly_rwspin(16thr_16lock_10pct_write)                       1.16ns  860.47M
+// shmtx_wr_pri(16thr_16lock_10pct_write)            74.35%     1.56ns  639.77M
+// shmtx_rd_pri(16thr_16lock_10pct_write)            91.34%     1.27ns  785.97M
+// folly_rwspin(32thr_32lock_10pct_write)                       1.15ns  866.23M
+// shmtx_wr_pri(32thr_32lock_10pct_write)            92.32%     1.25ns  799.72M
+// shmtx_rd_pri(32thr_32lock_10pct_write)            94.40%     1.22ns  817.71M
+// folly_rwspin(64thr_64lock_10pct_write)                       1.41ns  710.54M
+// shmtx_wr_pri(64thr_64lock_10pct_write)            94.14%     1.50ns  668.88M
+// shmtx_rd_pri(64thr_64lock_10pct_write)            94.80%     1.48ns  673.56M
 // ----------------------------------------------------------------------------
-// folly_rwspin(2thr_2lock_1pct_write)                         10.11ns   98.91M
-// shmtx_wr_pri(2thr_2lock_1pct_write)               75.07%    13.47ns   74.25M
-// shmtx_rd_pri(2thr_2lock_1pct_write)               74.98%    13.48ns   74.16M
-// folly_rwspin(4thr_4lock_1pct_write)                          4.96ns  201.77M
-// shmtx_wr_pri(4thr_4lock_1pct_write)               74.59%     6.64ns  150.49M
-// shmtx_rd_pri(4thr_4lock_1pct_write)               74.60%     6.64ns  150.51M
-// folly_rwspin(8thr_8lock_1pct_write)                          2.44ns  410.42M
-// shmtx_wr_pri(8thr_8lock_1pct_write)               73.68%     3.31ns  302.41M
-// shmtx_rd_pri(8thr_8lock_1pct_write)               73.38%     3.32ns  301.16M
-// folly_rwspin(16thr_16lock_1pct_write)                        1.21ns  827.53M
-// shmtx_wr_pri(16thr_16lock_1pct_write)             72.11%     1.68ns  596.74M
-// shmtx_rd_pri(16thr_16lock_1pct_write)             72.23%     1.67ns  597.73M
-// folly_rwspin(32thr_32lock_1pct_write)                        1.22ns  819.53M
-// shmtx_wr_pri(32thr_32lock_1pct_write)             98.17%     1.24ns  804.50M
-// shmtx_rd_pri(32thr_32lock_1pct_write)             98.21%     1.24ns  804.86M
-// folly_rwspin(64thr_64lock_1pct_write)                        1.41ns  710.26M
-// shmtx_wr_pri(64thr_64lock_1pct_write)             97.81%     1.44ns  694.71M
-// shmtx_rd_pri(64thr_64lock_1pct_write)             99.44%     1.42ns  706.28M
+// folly_rwspin(2thr_2lock_1pct_write)                          9.58ns  104.36M
+// shmtx_wr_pri(2thr_2lock_1pct_write)               92.00%    10.42ns   96.01M
+// shmtx_rd_pri(2thr_2lock_1pct_write)               91.79%    10.44ns   95.79M
+// folly_rwspin(4thr_4lock_1pct_write)                          4.71ns  212.30M
+// shmtx_wr_pri(4thr_4lock_1pct_write)               90.37%     5.21ns  191.85M
+// shmtx_rd_pri(4thr_4lock_1pct_write)               89.94%     5.24ns  190.95M
+// folly_rwspin(8thr_8lock_1pct_write)                          2.33ns  429.91M
+// shmtx_wr_pri(8thr_8lock_1pct_write)               90.67%     2.57ns  389.80M
+// shmtx_rd_pri(8thr_8lock_1pct_write)               90.61%     2.57ns  389.55M
+// folly_rwspin(16thr_16lock_1pct_write)                        1.10ns  905.23M
+// shmtx_wr_pri(16thr_16lock_1pct_write)             91.96%     1.20ns  832.46M
+// shmtx_rd_pri(16thr_16lock_1pct_write)             92.29%     1.20ns  835.42M
+// folly_rwspin(32thr_32lock_1pct_write)                        1.14ns  879.85M
+// shmtx_wr_pri(32thr_32lock_1pct_write)             93.41%     1.22ns  821.86M
+// shmtx_rd_pri(32thr_32lock_1pct_write)             94.18%     1.21ns  828.66M
+// folly_rwspin(64thr_64lock_1pct_write)                        1.34ns  748.83M
+// shmtx_wr_pri(64thr_64lock_1pct_write)             94.39%     1.41ns  706.84M
+// shmtx_rd_pri(64thr_64lock_1pct_write)             94.02%     1.42ns  704.06M
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
-// folly_rwspin_ping_pong(burn0)                              641.24ns    1.56M
-// shmtx_w_bare_ping_pong(burn0)                     91.07%   704.12ns    1.42M
-// shmtx_r_bare_ping_pong(burn0)                     78.70%   814.84ns    1.23M
-// folly_ticket_ping_pong(burn0)                     85.67%   748.53ns    1.34M
-// boost_shared_ping_pong(burn0)                      5.58%    11.50us   86.96K
-// pthrd_rwlock_ping_pong(burn0)                      8.81%     7.28us  137.40K
+// folly_rwspin_ping_pong(burn0)                              605.63ns    1.65M
+// shmtx_w_bare_ping_pong(burn0)                    102.17%   592.76ns    1.69M
+// shmtx_r_bare_ping_pong(burn0)                     88.75%   682.44ns    1.47M
+// folly_ticket_ping_pong(burn0)                     63.92%   947.56ns    1.06M
+// boost_shared_ping_pong(burn0)                      8.52%     7.11us  140.73K
+// pthrd_rwlock_ping_pong(burn0)                      7.88%     7.68us  130.15K
 // ----------------------------------------------------------------------------
-// folly_rwspin_ping_pong(burn100k)                           678.97ns    1.47M
-// shmtx_w_bare_ping_pong(burn100k)                  99.73%   680.78ns    1.47M
-// shmtx_r_bare_ping_pong(burn100k)                  98.67%   688.13ns    1.45M
-// folly_ticket_ping_pong(burn100k)                  99.31%   683.68ns    1.46M
-// boost_shared_ping_pong(burn100k)                  58.23%     1.17us  857.64K
-// pthrd_rwlock_ping_pong(burn100k)                  57.43%     1.18us  845.86K
+// folly_rwspin_ping_pong(burn100k)                           727.76ns    1.37M
+// shmtx_w_bare_ping_pong(burn100k)                 100.79%   722.09ns    1.38M
+// shmtx_r_bare_ping_pong(burn100k)                 101.98%   713.61ns    1.40M
+// folly_ticket_ping_pong(burn100k)                 102.80%   707.95ns    1.41M
+// boost_shared_ping_pong(burn100k)                  81.49%   893.02ns    1.12M
+// pthrd_rwlock_ping_pong(burn100k)                  71.05%     1.02us  976.30K
 // ----------------------------------------------------------------------------
-// folly_rwspin_ping_pong(burn300k)                             2.03us  492.99K
-// shmtx_w_bare_ping_pong(burn300k)                  99.98%     2.03us  492.88K
-// shmtx_r_bare_ping_pong(burn300k)                  99.94%     2.03us  492.68K
-// folly_ticket_ping_pong(burn300k)                  99.88%     2.03us  492.40K
-// boost_shared_ping_pong(burn300k)                  81.43%     2.49us  401.47K
-// pthrd_rwlock_ping_pong(burn300k)                  83.22%     2.44us  410.29K
+// folly_rwspin_ping_pong(burn300k)                             2.11us  473.46K
+// shmtx_w_bare_ping_pong(burn300k)                 100.06%     2.11us  473.72K
+// shmtx_r_bare_ping_pong(burn300k)                  98.93%     2.13us  468.39K
+// folly_ticket_ping_pong(burn300k)                  96.68%     2.18us  457.73K
+// boost_shared_ping_pong(burn300k)                  84.72%     2.49us  401.13K
+// pthrd_rwlock_ping_pong(burn300k)                  84.62%     2.50us  400.66K
 // ----------------------------------------------------------------------------
-// folly_rwspin_ping_pong(burn1M)                             677.07ns    1.48M
-// shmtx_w_bare_ping_pong(burn1M)                   100.50%   673.74ns    1.48M
-// shmtx_r_bare_ping_pong(burn1M)                   100.14%   676.12ns    1.48M
-// folly_ticket_ping_pong(burn1M)                   100.44%   674.14ns    1.48M
-// boost_shared_ping_pong(burn1M)                    93.04%   727.72ns    1.37M
-// pthrd_rwlock_ping_pong(burn1M)                    94.52%   716.30ns    1.40M
+// folly_rwspin_ping_pong(burn1M)                             709.70ns    1.41M
+// shmtx_w_bare_ping_pong(burn1M)                   100.28%   707.73ns    1.41M
+// shmtx_r_bare_ping_pong(burn1M)                    99.63%   712.37ns    1.40M
+// folly_ticket_ping_pong(burn1M)                   100.09%   709.05ns    1.41M
+// boost_shared_ping_pong(burn1M)                    94.09%   754.29ns    1.33M
+// pthrd_rwlock_ping_pong(burn1M)                    96.32%   736.82ns    1.36M
 // ============================================================================
 
 int main(int argc, char** argv) {