Michael Burman commented on CASSANDRA-14281:

I'm not sure how LongAdder would change the need for merging? The overhead of 
updating multiple LatencyMetrics is not reduced (this is what the merging was 
created for) that way (multiple LongAdder updates are not free either). 
LongAdder does use a CAS method in updates though (thus it still prevents some 
out-of-order behavior), since it does hash a thread-id to a slot (it isn't 
ThreadLocal). There's also a small added concurrency issues when rescaling with 
LongAdders, given the following code:
for(int i = 0; i < adders.length; i++) {
    long storedValue = adders[i].sumThenReset();
    storedValue = Math.round(storedValue / rescaleFactor);
Since the reset() in LongAdder is not concurrency-safe. Although if acceptable 
risk, I can do that too.

> Reduce contention on DecayingEstimatedHistogramReservoir
> --------------------------------------------------------
>                 Key: CASSANDRA-14281
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-14281
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Core
>            Reporter: Michael Burman
>            Assignee: Michael Burman
>            Priority: Major
> Currently, the DecayingEstimatedHistogramReservoir acquires a lock for each 
> update operation, which causes a contention if there are more than one thread 
> updating the histogram. This impacts scalability when using larger machines. 
> We should make it lock-free as much as possible and also avoid a single 
> CAS-update from blocking all the concurrent threads from making an update.

This message was sent by Atlassian JIRA

To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to