You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by David Harvey <dh...@jobcase.com> on 2018/05/28 15:37:23 UTC

Data Region Concurrency

We have a 2.4 ignite peristence cluster on AWS with 8 i3.xlarge nodes,
where the default memory region size is 160GB.    When loading a large
amount of data through a custom StreamReceiver, over time we see the
throughput decrease, as well as network and SSD I/O, and one node with
higher CPU usage than the others, but still only 33%.   Looking at that
node, I see (kill -3) that out of 27 sys-stripe* threads, 21 are blocked on
locks, 17 of which are memory segment locks.  The running threads have the
following call stacks:  acquirePage -> get/put ->getKey/Putkey .  The 2.4
documentation says I should have 32 (one per CPU) segments.    I wouldn't
expect such high contention if there was random distribution of load across
the segments.    I'm only using the default region.    Is there a
explaination for such a high contention level.

It looks as if I can set the number of segments higher by configuring the
data region

setConcurrencyLevel().   The 2.0 documentation for memory configuration
said the default was 4 * # CPUS, but the 2.4 Data Region code seems to
default to # CPUs, and we are only using default region.    What would be a
reasonable value?


It looks like the current data region settings get communicated to visor,
but I do not see a way to actually display them.   I'm I missing something?


If I change the xml configuration, it is unclear to me whether this will be
applied when I restart the node or is that setting only used when the data
region is originally created.   (As a general documentation thing, it would
be helpful to identify when settings will actually be applied. )

Thanks,
-DH

PS. Reading the code,   my first thought was that locks were configured as
fair, which ensures order but increases lock held time, but the default
seems to be unfair, which is good.   Fair  locks have the characteristic of
allowing high throughput until contended, then locking in low throughput
until the load completely stops.

Disclaimer

The information contained in this communication from the sender is confidential. It is intended solely for use by the recipient and others authorized to receive it. If you are not the recipient, you are hereby notified that any disclosure, copying, distribution or taking action in relation of the contents of this information is strictly prohibited and may be unlawful.

This email has been scanned for viruses and malware, and may have been automatically archived by Mimecast Ltd, an innovator in Software as a Service (SaaS) for business. Providing a safer and more useful place for your human generated data. Specializing in; Security, archiving and compliance. To find out more visit the Mimecast website.

Re: Data Region Concurrency

Posted by Dmitry Pavlov <dp...@gmail.com>.
Hi David,

Described behaviour (when too much time is spend on locks) was fixed in
Ignite 2.5 by 3 or 4 optimization changes.

IMO release will be published soon,so new Ignite vesion should get
performance boost in this case.

Yes, 'times 4' should be removed from the doc
https://apacheignite.readme.io/docs/memory-configuration#section-global-configuration-parameters


Sincerely,
Dmitriy Pavlov

вт, 29 мая 2018 г. в 5:42, Dave Harvey <dh...@jobcase.com>:

> It does appear that if the global concurrentLevel is not set, that it
> defaults to # CPUs not 4 * # CPUs as documented here
>
> https://apacheignite.readme.io/docs/memory-configuration#section-global-configuration-parameters
>
>
>    private long[] calculateFragmentSizes(int concLvl, long cacheSize, long
> chpBufSize) {
>         if (concLvl < 2)
>             concLvl = Runtime.getRuntime().availableProcessors();
>
>
>
> --
> Sent from: http://apache-ignite-users.70518.x6.nabble.com/
>

Re: Data Region Concurrency

Posted by Dave Harvey <dh...@jobcase.com>.
It does appear that if the global concurrentLevel is not set, that it
defaults to # CPUs not 4 * # CPUs as documented here
https://apacheignite.readme.io/docs/memory-configuration#section-global-configuration-parameters

    
   private long[] calculateFragmentSizes(int concLvl, long cacheSize, long
chpBufSize) {
        if (concLvl < 2)
            concLvl = Runtime.getRuntime().availableProcessors();



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/