Without #3, the #1 and #2 make little sense.

Why is #3 so difficult?

⁣D.​

On Aug 4, 2017, 10:46 AM, at 10:46 AM, Sergey Chugunov 
<sergey.chugu...@gmail.com> wrote:
>Dmitriy,
>
>Last item makes perfect sense to me, one may think of it as an
>"OutOfMemoryException" in java.
>However, it looks like such feature requires considerable efforts to
>properly design and implement it, so I would propose to create a
>separate
>ticket and agree upon target version for it.
>
>Items #1 and #2 will be implemented under IGNITE-5717. Makes sense?
>
>Thanks,
>Sergey.
>
>On Thu, Aug 3, 2017 at 4:34 AM, Dmitriy Setrakyan
><dsetrak...@apache.org>
>wrote:
>
>> Here is what we should do:
>>
>>    1. Pick an acceptable number. Does not matter if it is 10% or 50%.
>>    2. Print the allocated memory in *BOLD* letters into the log.
>>    3. Make sure that Ignite server never hangs due to the low memory
>issue.
>>    We should sense it and kick the node out automatically, again with
>a
>> *BOLD*
>>    message in the log.
>>
>>  Is this possible?
>>
>> D.
>>
>> On Wed, Aug 2, 2017 at 6:09 PM, Vladimir Ozerov
><voze...@gridgain.com>
>> wrote:
>>
>> > My proposal is 10% instead of 80%.
>> >
>> > ср, 2 авг. 2017 г. в 18:54, Denis Magda <dma...@apache.org>:
>> >
>> > > Vladimir, Dmitriy P.,
>> > >
>> > > Please see inline
>> > >
>> > > > On Aug 2, 2017, at 7:20 AM, Vladimir Ozerov
><voze...@gridgain.com>
>> > > wrote:
>> > > >
>> > > > Denis,
>> > > >
>> > > > The reason is that product should not hang user's computer. How
>else
>> > this
>> > > > could be explained? I am developer. I start Ignite, 1 node, 2
>nodes,
>> X
>> > > > nodes, observe how they join topology. Add one key, 10 keys, 1M
>keys.
>> > > Then
>> > > > I do a bug in example and load 100M keys accidentally - restart
>the
>> > > > computer. Correct behavior is to have small "maxMemory" by
>default to
>> > > avoid
>> > > > that. User should get exception instead of hang. E.g. Java's
>"-Xmx"
>> is
>> > > > typically 25% of RAM - more adequate value, comparing to
>Ignite.
>> > > >
>> > >
>> > > Right, the developer was educated about the Java heap parameters
>and
>> > > limited the overall space preferring OOM to the laptop
>suspension. Who
>> > > knows how he got to the point that 25% RAM should be used. That
>might
>> > have
>> > > been deep knowledge about JVM or he faced several hangs while
>testing
>> the
>> > > application.
>> > >
>> > > Anyway, JVM creators didn’t decide to predefine the Java heap to
>a
>> static
>> > > value to avoid the situations like above. So should not we as a
>> platform.
>> > > Educate people about the Ignite memory behavior like Sun did for
>the
>> Java
>> > > heap but do not try to solve the lack of knowledge with the
>default
>> > static
>> > > memory size.
>> > >
>> > >
>> > > > It doesn't matter whether you use persistence or not.
>Persistent case
>> > > just
>> > > > makes this flaw more obvious - you have virtually unlimited
>disk, and
>> > yet
>> > > > you end up with swapping and hang when using Ignite with
>default
>> > > > configuration. As already explained, the problem is not about
>> > allocating
>> > > > "maxMemory" right away, but about the value of "maxMemory" - it
>is
>> too
>> > > big.
>> > > >
>> > >
>> > > How do you know what should be the default then? Why 1 GB? For
>> instance,
>> > > if I end up having only 1 GB of free memory left and try to start
>2
>> > server
>> > > nodes and an application I will face the laptop suspension again.
>> > >
>> > > —
>> > > Denis
>> > >
>> > > > "We had this behavior before" is never an argument. Previous
>offheap
>> > > > implementation had a lot of flaws, so let's just forget about
>it.
>> > > >
>> > > > On Wed, Aug 2, 2017 at 5:08 PM, Denis Magda <dma...@apache.org>
>> wrote:
>> > > >
>> > > >> Sergey,
>> > > >>
>> > > >> That’s expectable because as we revealed from this discussion
>the
>> > > >> allocation works different depending on whether the
>persistence is
>> > used
>> > > or
>> > > >> not:
>> > > >>
>> > > >> 1) In-memory mode (the persistence is disabled) - the space
>will be
>> > > >> allocated incrementally until the max threshold is reached.
>Good!
>> > > >>
>> > > >> 2) The persistence mode - the whole space (limited by the max
>> > threshold)
>> > > >> is allocated right away. It’s not surprising that your laptop
>starts
>> > > >> choking.
>> > > >>
>> > > >> So, in my previous response I tried to explain that I can’t
>find any
>> > > >> reason why we should adjust 1). Any reasons except for the
>massive
>> > > >> preloading?
>> > > >>
>> > > >> As for 2), that was a big surprise to reveal this after 2.1
>release.
>> > > >> Definitely we have to fix this somehow.
>> > > >>
>> > > >> —
>> > > >> Denis
>> > > >>
>> > > >>> On Aug 2, 2017, at 6:59 AM, Sergey Chugunov <
>> > sergey.chugu...@gmail.com
>> > > >
>> > > >> wrote:
>> > > >>>
>> > > >>> Denis,
>> > > >>>
>> > > >>> Just a simple example from our own codebase: I tried to
>execute
>> > > >>> PersistentStoreExample with default settings and two server
>nodes
>> and
>> > > >>> client node got frozen even on initial load of data into the
>grid.
>> > > >>> Although with one server node the example finishes pretty
>quickly.
>> > > >>>
>> > > >>> And my laptop isn't the weakest one and has 16 gigs of
>memory, but
>> it
>> > > >>> cannot deal with it.
>> > > >>>
>> > > >>>
>> > > >>> On Wed, Aug 2, 2017 at 4:58 PM, Denis Magda
><dma...@apache.org>
>> > wrote:
>> > > >>>
>> > > >>>>> As far as allocating 80% of available RAM - I was against
>this
>> even
>> > > for
>> > > >>>>> In-memory mode and still think that this is a wrong
>default.
>> > Looking
>> > > at
>> > > >>>>> free RAM is even worse because it gives you undefined
>behavior.
>> > > >>>>
>> > > >>>> Guys, I can not understand how this dynamic memory
>allocation's
>> > > >> high-level
>> > > >>>> behavior (with the persistence DISABLED) is different from
>the
>> > legacy
>> > > >>>> off-heap memory we had in 1.x. Both off-heap memories
>allocate the
>> > > >> space on
>> > > >>>> demand, the current just does this more aggressively
>requesting
>> big
>> > > >> chunks.
>> > > >>>>
>> > > >>>> Next, the legacy one was unlimited by default and the user
>can
>> start
>> > > as
>> > > >>>> many nodes as he wanted on a laptop and preload as much data
>as he
>> > > >> needed.
>> > > >>>> Sure he could bring down the laptop if too many entries were
>> > injected
>> > > >> into
>> > > >>>> the local cluster. But that’s about too massive preloading
>and not
>> > > >> caused
>> > > >>>> by the ability of the legacy off-heap memory to grow
>infinitely.
>> The
>> > > >> same
>> > > >>>> preloading would cause a hang if the Java heap memory mode
>is
>> used.
>> > > >>>>
>> > > >>>> The upshot is that the massive preloading of data on the
>local
>> > laptop
>> > > >>>> should not fixed with repealing of the dynamic memory
>allocation.
>> > > >>>> Is there any other reason why we have to use the static
>memory
>> > > >> allocation
>> > > >>>> for the case when the persistence is disabled? I think the
>case
>> with
>> > > the
>> > > >>>> persistence should be reviewed separately.
>> > > >>>>
>> > > >>>> —
>> > > >>>> Denis
>> > > >>>>
>> > > >>>>> On Aug 2, 2017, at 12:45 AM, Alexey Goncharuk <
>> > > >>>> alexey.goncha...@gmail.com> wrote:
>> > > >>>>>
>> > > >>>>> Dmitriy,
>> > > >>>>>
>> > > >>>>> The reason behind this is the need to to be able to evict
>and
>> load
>> > > >> pages
>> > > >>>> to
>> > > >>>>> disk, thus we need to preserve a PageId->Pointer mapping in
>> memory.
>> > > In
>> > > >>>>> order to do this in the most efficient way, we need to know
>in
>> > > advance
>> > > >>>> all
>> > > >>>>> the address ranges we work with. We can add dynamic memory
>> > extension
>> > > >> for
>> > > >>>>> persistence-enabled config, but this will add yet another
>step of
>> > > >>>>> indirection when resolving every page address, which adds a
>> > > noticeable
>> > > >>>>> performance penalty.
>> > > >>>>>
>> > > >>>>>
>> > > >>>>>
>> > > >>>>> 2017-08-02 10:37 GMT+03:00 Dmitriy Setrakyan <
>> > dsetrak...@apache.org
>> > > >:
>> > > >>>>>
>> > > >>>>>> On Wed, Aug 2, 2017 at 9:33 AM, Vladimir Ozerov <
>> > > voze...@gridgain.com
>> > > >>>
>> > > >>>>>> wrote:
>> > > >>>>>>
>> > > >>>>>>> Dima,
>> > > >>>>>>>
>> > > >>>>>>> Probably folks who worked closely with storage know why.
>> > > >>>>>>>
>> > > >>>>>>
>> > > >>>>>> Without knowing why, how can we make a decision?
>> > > >>>>>>
>> > > >>>>>> Alexey Goncharuk, was it you who made the decision about
>not
>> using
>> > > >>>>>> increments? Do know remember what was the reason?
>> > > >>>>>>
>> > > >>>>>>
>> > > >>>>>>>
>> > > >>>>>>> The very problem is that before being started once on
>> production
>> > > >>>>>>> environment, Ignite will typically be started hundred
>times on
>> > > >>>>>> developer's
>> > > >>>>>>> environment. I think that default should be ~10% of total
>RAM.
>> > > >>>>>>>
>> > > >>>>>>
>> > > >>>>>> Why not 80% of *free *RAM?
>> > > >>>>>>
>> > > >>>>>>
>> > > >>>>>>>
>> > > >>>>>>> On Wed, Aug 2, 2017 at 10:21 AM, Dmitriy Setrakyan <
>> > > >>>>>> dsetrak...@apache.org>
>> > > >>>>>>> wrote:
>> > > >>>>>>>
>> > > >>>>>>>> On Wed, Aug 2, 2017 at 7:27 AM, Vladimir Ozerov <
>> > > >> voze...@gridgain.com
>> > > >>>>>
>> > > >>>>>>>> wrote:
>> > > >>>>>>>>
>> > > >>>>>>>>> Please see original Sergey's message - when persistence
>is
>> > > enabled,
>> > > >>>>>>>> memory
>> > > >>>>>>>>> is not allocated incrementally, maxSize is used.
>> > > >>>>>>>>>
>> > > >>>>>>>>
>> > > >>>>>>>> Why?
>> > > >>>>>>>>
>> > > >>>>>>>>
>> > > >>>>>>>>> Default settings must allow for normal work on
>developer's
>> > > >>>>>> environment.
>> > > >>>>>>>>>
>> > > >>>>>>>>
>> > > >>>>>>>> Agree, but why not in increments?
>> > > >>>>>>>>
>> > > >>>>>>>>
>> > > >>>>>>>>>
>> > > >>>>>>>>> ср, 2 авг. 2017 г. в 1:10, Denis Magda
><dma...@apache.org>:
>> > > >>>>>>>>>
>> > > >>>>>>>>>>> Why not allocate in increments automatically?
>> > > >>>>>>>>>>
>> > > >>>>>>>>>> This is exactly how the allocation works right now.
>The
>> memory
>> > > >> will
>> > > >>>>>>>> grow
>> > > >>>>>>>>>> incrementally until the max size is reached (80% of
>RAM by
>> > > >>>>>> default).
>> > > >>>>>>>>>>
>> > > >>>>>>>>>> —
>> > > >>>>>>>>>> Denis
>> > > >>>>>>>>>>
>> > > >>>>>>>>>>> On Aug 1, 2017, at 3:03 PM, dsetrak...@apache.org
>wrote:
>> > > >>>>>>>>>>>
>> > > >>>>>>>>>>> Vova, 1GB seems a bit too small for me, and frankly i
>do
>> not
>> > > want
>> > > >>>>>>> t o
>> > > >>>>>>>>>> guess. Why not allocate in increments automatically?
>> > > >>>>>>>>>>>
>> > > >>>>>>>>>>> ⁣D.​
>> > > >>>>>>>>>>>
>> > > >>>>>>>>>>> On Aug 1, 2017, 11:03 PM, at 11:03 PM, Vladimir
>Ozerov <
>> > > >>>>>>>>>> voze...@gridgain.com> wrote:
>> > > >>>>>>>>>>>> Denis,
>> > > >>>>>>>>>>>> No doubts you haven't heard about it - AI 2.1 with
>> > > persistence,
>> > > >>>>>>> when
>> > > >>>>>>>>>>>> 80% of
>> > > >>>>>>>>>>>> RAM is allocated right away, was released several
>days
>> ago.
>> > > How
>> > > >>>>>> do
>> > > >>>>>>>> you
>> > > >>>>>>>>>>>> think, how many users tried it already?
>> > > >>>>>>>>>>>>
>> > > >>>>>>>>>>>> Guys,
>> > > >>>>>>>>>>>> Do you really think allocating 80% of available RAM
>is a
>> > > normal
>> > > >>>>>>>> thing?
>> > > >>>>>>>>>>>> Take
>> > > >>>>>>>>>>>> your laptop and check how many available RAM you
>have
>> right
>> > > now.
>> > > >>>>>>> Do
>> > > >>>>>>>>> you
>> > > >>>>>>>>>>>> fit
>> > > >>>>>>>>>>>> to remaining 20%? If not, then running AI with
>persistence
>> > > with
>> > > >>>>>>> all
>> > > >>>>>>>>>>>> defaults will bring your machine down. This is
>insane. We
>> > > shold
>> > > >>>>>>>>>>>> allocate no
>> > > >>>>>>>>>>>> more than 1Gb, so that user can play with it without
>any
>> > > >>>>>> problems.
>> > > >>>>>>>>>>>>
>> > > >>>>>>>>>>>> On Tue, Aug 1, 2017 at 10:26 PM, Denis Magda <
>> > > dma...@apache.org
>> > > >>>>>>>
>> > > >>>>>>>>> wrote:
>> > > >>>>>>>>>>>>
>> > > >>>>>>>>>>>>> My vote goes for option #1 too. I don’t think that
>80% is
>> > too
>> > > >>>>>>>>>>>> aggressive
>> > > >>>>>>>>>>>>> to bring it down.
>> > > >>>>>>>>>>>>>
>> > > >>>>>>>>>>>>> IGNITE-5717 was created to fix the issue of the 80%
>RAM
>> > > >>>>>>> allocation
>> > > >>>>>>>> on
>> > > >>>>>>>>>>>> 64
>> > > >>>>>>>>>>>>> bit systems when Ignite works on top of 32 bit JVM.
>I’ve
>> > not
>> > > >>>>>>> heard
>> > > >>>>>>>> of
>> > > >>>>>>>>>>>> any
>> > > >>>>>>>>>>>>> other complaints in regards the default allocation
>size.
>> > > >>>>>>>>>>>>>
>> > > >>>>>>>>>>>>> —
>> > > >>>>>>>>>>>>> Denis
>> > > >>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>> On Aug 1, 2017, at 10:58 AM, dsetrak...@apache.org
>> wrote:
>> > > >>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>> I prefer option #1.
>> > > >>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>> ⁣D.​
>> > > >>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>> On Aug 1, 2017, 11:20 AM, at 11:20 AM, Sergey
>Chugunov <
>> > > >>>>>>>>>>>>> sergey.chugu...@gmail.com> wrote:
>> > > >>>>>>>>>>>>>>> Folks,
>> > > >>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>> I would like to get back to the question about
>> > MemoryPolicy
>> > > >>>>>>>>>>>> maxMemory
>> > > >>>>>>>>>>>>>>> defaults.
>> > > >>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>> Although MemoryPolicy may be configured with
>initial
>> and
>> > > >>>>>>>> maxMemory
>> > > >>>>>>>>>>>>>>> settings, when persistence is used MemoryPolicy
>always
>> > > >>>>>>> allocates
>> > > >>>>>>>>>>>>>>> maxMemory
>> > > >>>>>>>>>>>>>>> size for performance reasons.
>> > > >>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>> As default size of maxMemory is 80% of physical
>memory
>> it
>> > > >>>>>>> causes
>> > > >>>>>>>>>>>> OOME
>> > > >>>>>>>>>>>>>>> exceptions of 32 bit platforms (either on OS or
>JVM
>> > level)
>> > > >>>>>> and
>> > > >>>>>>>>>>>> hurts
>> > > >>>>>>>>>>>>>>> performance in setups when multiple Ignite nodes
>are
>> > > started
>> > > >>>>>> on
>> > > >>>>>>>>>>>> the
>> > > >>>>>>>>>>>>>>> same
>> > > >>>>>>>>>>>>>>> physical server.
>> > > >>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>> I suggest to rethink these defaults and switch to
>other
>> > > >>>>>>> options:
>> > > >>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>> - Check whether platform is 32 or 64 bits and
>adapt
>> > > defaults.
>> > > >>>>>>> In
>> > > >>>>>>>>>>>> this
>> > > >>>>>>>>>>>>>>> case we still need to address the issue with
>multiple
>> > nodes
>> > > >>>>>> on
>> > > >>>>>>>> one
>> > > >>>>>>>>>>>>>>> machine
>> > > >>>>>>>>>>>>>>> even on 64 bit systems.
>> > > >>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>> - Lower defaults for maxMemory and allocate, for
>> > instance,
>> > > >>>>>>>>>>>> max(0.3 *
>> > > >>>>>>>>>>>>>>> availableMemory, 1Gb).
>> > > >>>>>>>>>>>>>>> This option allows us to solve all issues with
>starting
>> > on
>> > > 32
>> > > >>>>>>> bit
>> > > >>>>>>>>>>>>>>> platforms and reduce instability with multiple
>nodes on
>> > the
>> > > >>>>>>> same
>> > > >>>>>>>>>>>>>>> machine.
>> > > >>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>> Thoughts and/or other options?
>> > > >>>>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>>> Thanks,
>> > > >>>>>>>>>>>>>>> Sergey.
>> > > >>>>>>>>>>>>>
>> > > >>>>>>>>>>>>>
>> > > >>>>>>>>>>
>> > > >>>>>>>>>>
>> > > >>>>>>>>>
>> > > >>>>>>>>
>> > > >>>>>>>
>> > > >>>>>>
>> > > >>>>
>> > > >>>>
>> > > >>
>> > > >>
>> > >
>> > >
>> >
>>

Reply via email to