cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "graham sanderson (JIRA)" <>
Subject [jira] [Commented] (CASSANDRA-7546) AtomicSortedColumns.addAllWithSizeDelta has a spin loop that allocates memory
Date Wed, 06 Aug 2014 16:13:12 GMT


graham sanderson commented on CASSANDRA-7546:

Cool will do; addColumns also CASes a thread locally modified Holder anyway.

Yes I agree it is ugly to have a non final in something like Holder (being CASed immutable
state) but I think we can live with it since it is not mutated after CAS

As said, we can revert to monitor enter/exit if you wish... I can't prove it is worse, and
there isn't a whole lot that needs optimization here
Note you have a comment

in wasteTracker we maintain within EXCESS_WASTE_OFFSET either side of the current time

We probably mean "to the left" of... "before" or "after" are a bit confusing here!

I thought about a couple of things while you were on vacation

# Volatile read of the wasteTracker in the "fast" path. We could avoid this thru some ugliness
of hijacking the top bit in the tree size mark pessimistic locking too. Not to concerned about
this - believe it is free on intel anyway
# Adjacent in memory CASed vars in the AtomicSortedColumns - Again not majorly worried here...
I don't think the (CASed) variables themselves are highly contended, it is more that we are
doing lots of slow concurrent work, and then failing the CAS.

> AtomicSortedColumns.addAllWithSizeDelta has a spin loop that allocates memory
> -----------------------------------------------------------------------------
>                 Key: CASSANDRA-7546
>                 URL:
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>            Reporter: graham sanderson
>            Assignee: graham sanderson
>         Attachments: 7546.20.txt, 7546.20_2.txt, 7546.20_3.txt, 7546.20_4.txt, 7546.20_5.txt,
7546.20_6.txt, 7546.20_alt.txt, suggestion1.txt, suggestion1_21.txt
> In order to preserve atomicity, this code attempts to read, clone/update, then CAS the
state of the partition.
> Under heavy contention for updating a single partition this can cause some fairly staggering
memory growth (the more cores on your machine the worst it gets).
> Whilst many usage patterns don't do highly concurrent updates to the same partition,
hinting today, does, and in this case wild (order(s) of magnitude more than expected) memory
allocation rates can be seen (especially when the updates being hinted are small updates to
different partitions which can happen very fast on their own) - see CASSANDRA-7545
> It would be best to eliminate/reduce/limit the spinning memory allocation whilst not
slowing down the very common un-contended case.

This message was sent by Atlassian JIRA

View raw message