Sure, if your analysis is correct we can either add the comment to
cassandray.yaml or NEWS.txt, or both.

Could you leave a comment with your analysis and suggestion to
CASSANDRA-11993? When Branimir is back from holiday he can probably confirm
easily if that's the case.

On Wed, Jun 22, 2016 at 5:44 PM, Nimi Wariboko Jr <n...@channelmeter.com>
wrote:

> Hi Stefania,
>
> Thanks for the explanation - I think it may be more likely I'm hitting
> MEMORY_USAGE_THRESHOLD
> (file_cache_size_in_mb, which is 512mb by default), as the table itself is
> very large (a couple TB over 12 nodes). In that case, due to the changes
> outlined CASSANDRA-9548/CASSANDRA-8709/CASSANDRA-5863, there should
> probably be a warning in 3.6 that buffer_pool_use_heap_if_exhausted should
> be set to false if you still have some tables on SnappyCompression.
>
> Nimi
>
> On Wed, Jun 22, 2016 at 12:14 AM, Stefania Alborghetti <
> stefania.alborghe...@datastax.com> wrote:
>
> > Hi Nimi
> >
> > I am not familiar with how CASSANDRA-5863 uses the buffer pool yet, but I
> > do know how the buffer pool works
> >
> > It has a local pool, which is thread local, and takes chunks from a
> global
> > pool. These are allocated off heap and aligned to the page cache
> > boundaries, see here
> > <
> >
> https://github.com/apache/cassandra/blob/30bb255ec9fb36ace2aab51474bd3bfb9bbd3bed/src/java/org/apache/cassandra/utils/memory/BufferPool.java#L276
> > >.
> >
> >
> > The buffer pool will allocate according to
> > buffer_pool_use_heap_if_exhausted
> > only in two cases:
> >
> >    - The global pool has run out of chunks, which happens when there is
> an
> >    OOM exception or when MEMORY_USAGE_THRESHOLD is exhausted, see here
> >    <
> >
> https://github.com/apache/cassandra/blob/30bb255ec9fb36ace2aab51474bd3bfb9bbd3bed/src/java/org/apache/cassandra/utils/memory/BufferPool.java#L259
> > >
> >    .
> >    - The requested buffer size is larger than a chunk, currently
> >    CHUNK_SIZE, 64 kb.
> >
> > To understand this behaviour look at maybeTakeFromPool
> > <
> >
> https://github.com/apache/cassandra/blob/30bb255ec9fb36ace2aab51474bd3bfb9bbd3bed/src/java/org/apache/cassandra/utils/memory/BufferPool.java#L124
> > >(),
> > the line that takes from the local pool is the last one and follow from
> > there.
> >
> > The original ticket for the buffer pool is CASSANDRA-8897
> > <https://issues.apache.org/jira/browse/CASSANDRA-8897>if you need more
> > details, and there is CASSANDRA-9468
> > <https://issues.apache.org/jira/browse/CASSANDRA-9468> to extend it to
> > allow chunks with bigger or smaller sizes (point 4).
> >
> > I've left a comment on CASSANDRA-11993.
> >
> > I hope this helps,
> > Stefania
> >
> >
> > On Wed, Jun 22, 2016 at 4:54 AM, Nimi Wariboko Jr <n...@channelmeter.com
> >
> > wrote:
> >
> > > Hi,
> > >
> > > I'm trying to debug an issue I'm having with Cassandra 3.6+ and Snappy
> > > compressed tables - CASSANDRA-11993 (that may be related to
> > > CASSANDRA-5863).
> > >
> > > I'm probably 3% familiar with Cassandra internals, so apologies if I'm
> > > wrong here - I was looking at a change in CASSANDRA-5863 where a cache
> > was
> > > added to the SSTableIterator code path, which may have
> > > included org.apache.cassandra.utils.memory.BufferPool into the read
> path.
> > >
> > > My confusion comes from here - AFAICT, when the BufferPool needs to
> > > allocate more memory, it calls allocate(int size, boolean onHeap) (
> > >
> > >
> >
> https://github.com/apache/cassandra/blob/30bb255ec9fb36ace2aab51474bd3bfb9bbd3bed/src/java/org/apache/cassandra/utils/memory/BufferPool.java#L82
> > > ).
> > > The value for whether onHeap is true is
> > > constant ALLOCATE_ON_HEAP_WHEN_EXAHUSTED.
> > >
> > > ALLOCATE_ON_HEAP_WHEN_EXAHUSTED is defined by the yaml
> > > setting buffer_pool_use_heap_if_exhausted which is true by default (and
> > was
> > > so in my install).
> > >
> > > Further still (
> > >
> > >
> >
> https://github.com/apache/cassandra/blob/30bb255ec9fb36ace2aab51474bd3bfb9bbd3bed/src/java/org/apache/cassandra/utils/memory/BufferPool.java
> > > ),
> > > I can't see any logic where BufferPool will actually allocate off heap
> > > memory - it seems, due to the buffer_pool_use_heap_if_exhausted
> setting,
> > > always allocate memory on heap. It never checks if the off heap memory
> is
> > > exhausted (AFAICT from these 3 files).
> > >
> > > Sure enough, if I set buffer_pool_use_heap_if_exhausted, my issue at
> > > CASSANDRA-11993 goes away (I think? I'm having a number of issues
> lately
> > > and I may have traded one exception for another).
> > >
> > > Is this the correct behavior of buffer_pool_use_heap_if_exhausted?
> > >
> > > Nimi
> > >
> >
> >
> >
> > --
> >
> >
> > [image: datastax_logo.png] <http://www.datastax.com/>
> >
> > Stefania Alborghetti
> >
> > Apache Cassandra Software Engineer
> >
> > |+852 6114 9265| stefania.alborghe...@datastax.com
> >
> >
> > [image: cassandrasummit.org/Email_Signature]
> > <http://cassandrasummit.org/Email_Signature>
> >
>



-- 


Stefania Alborghetti

Apache Cassandra Committer

|+852 6114 9265| stefania.alborghe...@datastax.com


[image: cassandrasummit.org/Email_Signature]
<http://cassandrasummit.org/Email_Signature>

Reply via email to