[
https://issues.apache.org/jira/browse/CASSANDRA-16072?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17188367#comment-17188367
]
Michael Semb Wever edited comment on CASSANDRA-16072 at 9/3/20, 1:18 PM:
-------------------------------------------------------------------------
Thanks for the feedback [~blerer].
bq. If the slab size is around 1GB, the maximum hint size will be around 500MB.
I see now that the slab size can in fact be 2GB, and max mutation size 1GB.
This makes the problem worse (even if very edge-case). {{HintsBuffer.position}}
has been changed to {{AtomicLong}}
bq. Regarding CommitLogSegment, it will be good to have a comment explaining
the negative value logic.
Done. Two comments added, explaining when the overflow is harmless, and when it
isn't and hence the cast to long.
Patches
-
[3.11|https://github.com/apache/cassandra/compare/cassandra-3.11...thelastpickle:mck/cassandra-3.11_cas_improvements]
with CI
[run|https://ci-cassandra.apache.org/blue/organizations/jenkins/Cassandra-devbranch/detail/Cassandra-devbranch/2/pipeline]
-
[trunk|https://github.com/apache/cassandra/compare/trunk...thelastpickle:mck/trunk_cas_improvements]
with CI
[run|https://ci-cassandra.apache.org/blue/organizations/jenkins/Cassandra-devbranch/detail/Cassandra-devbranch/3/pipeline]
was (Author: michaelsembwever):
Thanks for the feedback [~blerer].
bq. If the slab size is around 1GB, the maximum hint size will be around 500MB.
I see now that the slab size can in fact be 2GB, and max mutation size 1GB.
This makes the problem worse (even if very edge-case). {{HintsBuffer.position}}
has been changed to {{AtomicLong}}
bq. Regarding CommitLogSegment, it will be good to have a comment explaining
the negative value logic.
Done. Two comments added, explaining when the overflow is harmless, and when it
isn't and hence the cast to long.
Patches
-
[3.11|https://github.com/apache/cassandra/compare/cassandra-3.11...thelastpickle:mck/cassandra-3.11_cas_improvements]
with CI
[run|https://ci-cassandra.apache.org/blue/organizations/jenkins/Cassandra-devbranch/detail/Cassandra-devbranch/301/pipeline]
-
[trunk|https://github.com/apache/cassandra/compare/trunk...thelastpickle:mck/trunk_cas_improvements]
with CI
[run|https://ci-cassandra.apache.org/blue/organizations/jenkins/Cassandra-devbranch/detail/Cassandra-devbranch/303/pipeline]
> Reduce thread contention in CommitLogSegment and HintsBuffer by rewriting CAS
> loops to atomic adds
> --------------------------------------------------------------------------------------------------
>
> Key: CASSANDRA-16072
> URL: https://issues.apache.org/jira/browse/CASSANDRA-16072
> Project: Cassandra
> Issue Type: Improvement
> Components: Consistency/Hints, Local/Commit Log
> Reporter: Michael Semb Wever
> Assignee: Michael Semb Wever
> Priority: Normal
> Fix For: 3.11.x, 4.0-beta
>
>
> Follow up to CASSANDRA-15922
> Both CommitLogSegment and HintsBuffer use AtomicIntegers for the current
> offset when allocating. Like in CASSANDRA\-15922 the loops on
> {{.compareAndSet(..)}} can be replaced with atomic adds using the {{.
> getAndAdd(..)}} method.
> In highly contended environments the CAS failures can be high, starving
> writes in a running Cassandra node. On the same cluster CASSANDRA\-15922 was
> found, after CASSANDRA\-15922's fix was deployed, there was still problems
> around commit log flushing and hints. No flamegraph was collected that
> demonstrated the thread contention as clearly as was found in
> CASSANDRA\-15922, but the performance fix proposed here hopefully is obvious
> enough.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]