Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-6995

Execute local ONE/LOCAL_ONE reads on request thread instead of dispatching to read stage

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Low
    • Resolution: Duplicate
    • Fix Version/s: 2.2.0 beta 1
    • Component/s: None
    • Labels:

      Description

      When performing a read local to a coordinator node, AbstractReadExecutor will create a new SP.LocalReadRunnable and drop it into the read stage for asynchronous execution. If you are using a client that intelligently routes read requests to a node holding the data for a given request, and are using CL.ONE/LOCAL_ONE, the enqueuing SP.LocalReadRunnable and waiting for the context switches (and possible NUMA misses) adds unneccesary latency. We can reduce that latency and improve throughput by avoiding the queueing and thread context switching by simply executing the SP.LocalReadRunnable synchronously in the request thread. Testing on a three node cluster (each with 32 cpus, 132 GB ram) yields ~10% improvement in throughput and ~20% speedup on avg/95/99 percentiles (99.9% was about 5-10% improvement).

        Attachments

        1. 6995-v1.diff
          4 kB
          Jason Brown
        2. syncread-stress.txt
          4 kB
          Jason Brown

          Issue Links

            Activity

              People

              • Assignee:
                jasobrown Jason Brown
                Reporter:
                jasobrown Jason Brown
                Authors:
                Jason Brown
              • Votes:
                0 Vote for this issue
                Watchers:
                6 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: