I just updated the FLIP wiki page [1], with the following changes:

   - Network memory uses JVM direct memory, and is accounted when setting
   JVM max direct memory size parameter.
   - Use dynamic configurations (`-Dkey=value`) to pass calculated memory
   configs into TaskExecutors, instead of ENV variables.
   - Remove 'supporting memory reservation' from the scope of this FLIP.

@till @stephan, please take another look see if there are any other
concerns.

Thank you~

Xintong Song


[1]
https://cwiki.apache.org/confluence/display/FLINK/FLIP-49%3A+Unified+Memory+Configuration+for+TaskExecutors

On Mon, Sep 2, 2019 at 11:13 AM Xintong Song <tonysong...@gmail.com> wrote:

> Sorry for the late response.
>
> - Regarding the `TaskExecutorSpecifics` naming, let's discuss the detail
> in PR.
> - Regarding passing parameters into the `TaskExecutor`, +1 for using
> dynamic configuration at the moment, given that there are more questions to
> be discussed to have a general framework for overwriting configurations
> with ENV variables.
> - Regarding memory reservation, I double checked with Yu and he will take
> care of it.
>
> Thank you~
>
> Xintong Song
>
>
>
> On Thu, Aug 29, 2019 at 7:35 PM Till Rohrmann <trohrm...@apache.org>
> wrote:
>
>> What I forgot to add is that we could tackle specifying the configuration
>> fully in an incremental way and that the full specification should be the
>> desired end state.
>>
>> On Thu, Aug 29, 2019 at 1:33 PM Till Rohrmann <trohrm...@apache.org>
>> wrote:
>>
>> > I think our goal should be that the configuration is fully specified
>> when
>> > the process is started. By considering the internal calculation step to
>> be
>> > rather validate existing values and calculate missing ones, these two
>> > proposal shouldn't even conflict (given determinism).
>> >
>> > Since we don't want to change an existing flink-conf.yaml, specifying
>> the
>> > full configuration would require to pass in the options differently.
>> >
>> > One way could be the ENV variables approach. The reason why I'm trying
>> to
>> > exclude this feature from the FLIP is that I believe it needs a bit more
>> > discussion. Just some questions which come to my mind: What would be the
>> > exact format (FLINK_KEY_NAME)? Would we support a dot separator which is
>> > supported by some systems (FLINK.KEY.NAME)? If we accept the dot
>> > separator what would be the order of precedence if there are two ENV
>> > variables defined (FLINK_KEY_NAME and FLINK.KEY.NAME)? What is the
>> > precedence of env variable vs. dynamic configuration value specified
>> via -D?
>> >
>> > Another approach could be to pass in the dynamic configuration values
>> via
>> > `-Dkey=value` to the Flink process. For that we don't have to change
>> > anything because the functionality already exists.
>> >
>> > Cheers,
>> > Till
>> >
>> > On Thu, Aug 29, 2019 at 12:50 PM Stephan Ewen <se...@apache.org> wrote:
>> >
>> >> I see. Under the assumption of strict determinism that should work.
>> >>
>> >> The original proposal had this point "don't compute inside the TM,
>> compute
>> >> outside and supply a full config", because that sounded more intuitive.
>> >>
>> >> On Thu, Aug 29, 2019 at 12:15 PM Till Rohrmann <trohrm...@apache.org>
>> >> wrote:
>> >>
>> >> > My understanding was that before starting the Flink process we call a
>> >> > utility which calculates these values. I assume that this utility
>> will
>> >> do
>> >> > the calculation based on a set of configured values (process memory,
>> >> flink
>> >> > memory, network memory etc.). Assuming that these values don't differ
>> >> from
>> >> > the values with which the JVM is started, it should be possible to
>> >> > recompute them in the Flink process in order to set the values.
>> >> >
>> >> >
>> >> >
>> >> > On Thu, Aug 29, 2019 at 11:29 AM Stephan Ewen <se...@apache.org>
>> wrote:
>> >> >
>> >> > > When computing the values in the JVM process after it started, how
>> >> would
>> >> > > you deal with values like Max Direct Memory, Metaspace size. native
>> >> > memory
>> >> > > reservation (reduce heap size), etc? All the values that are
>> >> parameters
>> >> > to
>> >> > > the JVM process and that need to be supplied at process startup?
>> >> > >
>> >> > > On Wed, Aug 28, 2019 at 4:46 PM Till Rohrmann <
>> trohrm...@apache.org>
>> >> > > wrote:
>> >> > >
>> >> > > > Thanks for the clarification. I have some more comments:
>> >> > > >
>> >> > > > - I would actually split the logic to compute the process memory
>> >> > > > requirements and storing the values into two things. E.g. one
>> could
>> >> > name
>> >> > > > the former TaskExecutorProcessUtility and  the latter
>> >> > > > TaskExecutorProcessMemory. But we can discuss this on the PR
>> since
>> >> it's
>> >> > > > just a naming detail.
>> >> > > >
>> >> > > > - Generally, I'm not opposed to making configuration values
>> >> overridable
>> >> > > by
>> >> > > > ENV variables. I think this is a very good idea and makes the
>> >> > > > configurability of Flink processes easier. However, I think that
>> >> adding
>> >> > > > this functionality should not be part of this FLIP because it
>> would
>> >> > > simply
>> >> > > > widen the scope unnecessarily.
>> >> > > >
>> >> > > > The reasons why I believe it is unnecessary are the following:
>> For
>> >> Yarn
>> >> > > we
>> >> > > > already create write a flink-conf.yaml which could be populated
>> with
>> >> > the
>> >> > > > memory settings. For the other processes it should not make a
>> >> > difference
>> >> > > > whether the loaded Configuration is populated with the memory
>> >> settings
>> >> > > from
>> >> > > > ENV variables or by using TaskExecutorProcessUtility to compute
>> the
>> >> > > missing
>> >> > > > values from the loaded configuration. If the latter would not be
>> >> > possible
>> >> > > > (wrong or missing configuration values), then we should not have
>> >> been
>> >> > > able
>> >> > > > to actually start the process in the first place.
>> >> > > >
>> >> > > > - Concerning the memory reservation: I agree with you that we
>> need
>> >> the
>> >> > > > memory reservation functionality to make streaming jobs work with
>> >> > > "managed"
>> >> > > > memory. However, w/o this functionality the whole Flip would
>> already
>> >> > > bring
>> >> > > > a good amount of improvements to our users when running batch
>> jobs.
>> >> > > > Moreover, by keeping the scope smaller we can complete the FLIP
>> >> faster.
>> >> > > > Hence, I would propose to address the memory reservation
>> >> functionality
>> >> > > as a
>> >> > > > follow up FLIP (which Yu is working on if I'm not mistaken).
>> >> > > >
>> >> > > > Cheers,
>> >> > > > Till
>> >> > > >
>> >> > > > On Wed, Aug 28, 2019 at 11:43 AM Yang Wang <
>> danrtsey...@gmail.com>
>> >> > > wrote:
>> >> > > >
>> >> > > > > Just add my 2 cents.
>> >> > > > >
>> >> > > > > Using environment variables to override the configuration for
>> >> > different
>> >> > > > > taskmanagers is better.
>> >> > > > > We do not need to generate dedicated flink-conf.yaml for all
>> >> > > > taskmanagers.
>> >> > > > > A common flink-conf.yam and different environment variables are
>> >> > enough.
>> >> > > > > By reducing the distributed cached files, it could make
>> launching
>> >> a
>> >> > > > > taskmanager faster.
>> >> > > > >
>> >> > > > > Stephan gives a good suggestion that we could move the logic
>> into
>> >> > > > > "GlobalConfiguration.loadConfig()" method.
>> >> > > > > Maybe the client could also benefit from this. Different users
>> do
>> >> not
>> >> > > > have
>> >> > > > > to export FLINK_CONF_DIR to update few config options.
>> >> > > > >
>> >> > > > >
>> >> > > > > Best,
>> >> > > > > Yang
>> >> > > > >
>> >> > > > > Stephan Ewen <se...@apache.org> 于2019年8月28日周三 上午1:21写道:
>> >> > > > >
>> >> > > > > > One note on the Environment Variables and Configuration
>> >> discussion.
>> >> > > > > >
>> >> > > > > > My understanding is that passed ENV variables are added to
>> the
>> >> > > > > > configuration in the "GlobalConfiguration.loadConfig()"
>> method
>> >> (or
>> >> > > > > > similar).
>> >> > > > > > For all the code inside Flink, it looks like the data was in
>> the
>> >> > > config
>> >> > > > > to
>> >> > > > > > start with, just that the scripts that compute the variables
>> can
>> >> > pass
>> >> > > > the
>> >> > > > > > values to the process without actually needing to write a
>> file.
>> >> > > > > >
>> >> > > > > > For example the "GlobalConfiguration.loadConfig()" method
>> would
>> >> > take
>> >> > > > any
>> >> > > > > > ENV variable prefixed with "flink" and add it as a config
>> key.
>> >> > > > > > "flink_taskmanager_memory_size=2g" would become
>> >> > > > "taskmanager.memory.size:
>> >> > > > > > 2g".
>> >> > > > > >
>> >> > > > > >
>> >> > > > > > On Tue, Aug 27, 2019 at 4:05 PM Xintong Song <
>> >> > tonysong...@gmail.com>
>> >> > > > > > wrote:
>> >> > > > > >
>> >> > > > > > > Thanks for the comments, Till.
>> >> > > > > > >
>> >> > > > > > > I've also seen your comments on the wiki page, but let's
>> keep
>> >> the
>> >> > > > > > > discussion here.
>> >> > > > > > >
>> >> > > > > > > - Regarding 'TaskExecutorSpecifics', how do you think about
>> >> > naming
>> >> > > it
>> >> > > > > > > 'TaskExecutorResourceSpecifics'.
>> >> > > > > > > - Regarding passing memory configurations into task
>> executors,
>> >> > I'm
>> >> > > in
>> >> > > > > > favor
>> >> > > > > > > of do it via environment variables rather than
>> configurations,
>> >> > with
>> >> > > > the
>> >> > > > > > > following two reasons.
>> >> > > > > > >   - It is easier to keep the memory options once calculate
>> >> not to
>> >> > > be
>> >> > > > > > > changed with environment variables rather than
>> configurations.
>> >> > > > > > >   - I'm not sure whether we should write the configuration
>> in
>> >> > > startup
>> >> > > > > > > scripts. Writing changes into the configuration files when
>> >> > running
>> >> > > > the
>> >> > > > > > > startup scripts does not sounds right to me. Or we could
>> make
>> >> a
>> >> > > copy
>> >> > > > of
>> >> > > > > > > configuration files per flink cluster, and make the task
>> >> executor
>> >> > > to
>> >> > > > > load
>> >> > > > > > > from the copy, and clean up the copy after the cluster is
>> >> > shutdown,
>> >> > > > > which
>> >> > > > > > > is complicated. (I think this is also what Stephan means in
>> >> his
>> >> > > > comment
>> >> > > > > > on
>> >> > > > > > > the wiki page?)
>> >> > > > > > > - Regarding reserving memory, I think this change should be
>> >> > > included
>> >> > > > in
>> >> > > > > > > this FLIP. I think a big part of motivations of this FLIP
>> is
>> >> to
>> >> > > unify
>> >> > > > > > > memory configuration for streaming / batch and make it easy
>> >> for
>> >> > > > > > configuring
>> >> > > > > > > rocksdb memory. If we don't support memory reservation,
>> then
>> >> > > > streaming
>> >> > > > > > jobs
>> >> > > > > > > cannot use managed memory (neither on-heap or off-heap),
>> which
>> >> > > makes
>> >> > > > > this
>> >> > > > > > > FLIP incomplete.
>> >> > > > > > > - Regarding network memory, I think you are right. I think
>> we
>> >> > > > probably
>> >> > > > > > > don't need to change network stack from using direct
>> memory to
>> >> > > using
>> >> > > > > > unsafe
>> >> > > > > > > native memory. Network memory size is deterministic,
>> cannot be
>> >> > > > reserved
>> >> > > > > > as
>> >> > > > > > > managed memory does, and cannot be overused. I think it
>> also
>> >> > works
>> >> > > if
>> >> > > > > we
>> >> > > > > > > simply keep using direct memory for network and include it
>> in
>> >> jvm
>> >> > > max
>> >> > > > > > > direct memory size.
>> >> > > > > > >
>> >> > > > > > > Thank you~
>> >> > > > > > >
>> >> > > > > > > Xintong Song
>> >> > > > > > >
>> >> > > > > > >
>> >> > > > > > >
>> >> > > > > > > On Tue, Aug 27, 2019 at 8:12 PM Till Rohrmann <
>> >> > > trohrm...@apache.org>
>> >> > > > > > > wrote:
>> >> > > > > > >
>> >> > > > > > > > Hi Xintong,
>> >> > > > > > > >
>> >> > > > > > > > thanks for addressing the comments and adding a more
>> >> detailed
>> >> > > > > > > > implementation plan. I have a couple of comments
>> concerning
>> >> the
>> >> > > > > > > > implementation plan:
>> >> > > > > > > >
>> >> > > > > > > > - The name `TaskExecutorSpecifics` is not really
>> >> descriptive.
>> >> > > > > Choosing
>> >> > > > > > a
>> >> > > > > > > > different name could help here.
>> >> > > > > > > > - I'm not sure whether I would pass the memory
>> >> configuration to
>> >> > > the
>> >> > > > > > > > TaskExecutor via environment variables. I think it would
>> be
>> >> > > better
>> >> > > > to
>> >> > > > > > > write
>> >> > > > > > > > it into the configuration one uses to start the TM
>> process.
>> >> > > > > > > > - If possible, I would exclude the memory reservation
>> from
>> >> this
>> >> > > > FLIP
>> >> > > > > > and
>> >> > > > > > > > add this as part of a dedicated FLIP.
>> >> > > > > > > > - If possible, then I would exclude changes to the
>> network
>> >> > stack
>> >> > > > from
>> >> > > > > > > this
>> >> > > > > > > > FLIP. Maybe we can simply say that the direct memory
>> needed
>> >> by
>> >> > > the
>> >> > > > > > > network
>> >> > > > > > > > stack is the framework direct memory requirement.
>> Changing
>> >> how
>> >> > > the
>> >> > > > > > memory
>> >> > > > > > > > is allocated can happen in a second step. This would keep
>> >> the
>> >> > > scope
>> >> > > > > of
>> >> > > > > > > this
>> >> > > > > > > > FLIP smaller.
>> >> > > > > > > >
>> >> > > > > > > > Cheers,
>> >> > > > > > > > Till
>> >> > > > > > > >
>> >> > > > > > > > On Thu, Aug 22, 2019 at 2:51 PM Xintong Song <
>> >> > > > tonysong...@gmail.com>
>> >> > > > > > > > wrote:
>> >> > > > > > > >
>> >> > > > > > > > > Hi everyone,
>> >> > > > > > > > >
>> >> > > > > > > > > I just updated the FLIP document on wiki [1], with the
>> >> > > following
>> >> > > > > > > changes.
>> >> > > > > > > > >
>> >> > > > > > > > >    - Removed open question regarding MemorySegment
>> >> > allocation.
>> >> > > As
>> >> > > > > > > > >    discussed, we exclude this topic from the scope of
>> this
>> >> > > FLIP.
>> >> > > > > > > > >    - Updated content about JVM direct memory parameter
>> >> > > according
>> >> > > > to
>> >> > > > > > > > recent
>> >> > > > > > > > >    discussions, and moved the other options to
>> "Rejected
>> >> > > > > > Alternatives"
>> >> > > > > > > > for
>> >> > > > > > > > > the
>> >> > > > > > > > >    moment.
>> >> > > > > > > > >    - Added implementation steps.
>> >> > > > > > > > >
>> >> > > > > > > > >
>> >> > > > > > > > > Thank you~
>> >> > > > > > > > >
>> >> > > > > > > > > Xintong Song
>> >> > > > > > > > >
>> >> > > > > > > > >
>> >> > > > > > > > > [1]
>> >> > > > > > > > >
>> >> > > > > > > > >
>> >> > > > > > > >
>> >> > > > > > >
>> >> > > > > >
>> >> > > > >
>> >> > > >
>> >> > >
>> >> >
>> >>
>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-49%3A+Unified+Memory+Configuration+for+TaskExecutors
>> >> > > > > > > > >
>> >> > > > > > > > > On Mon, Aug 19, 2019 at 7:16 PM Stephan Ewen <
>> >> > se...@apache.org
>> >> > > >
>> >> > > > > > wrote:
>> >> > > > > > > > >
>> >> > > > > > > > > > @Xintong: Concerning "wait for memory users before
>> task
>> >> > > dispose
>> >> > > > > and
>> >> > > > > > > > > memory
>> >> > > > > > > > > > release": I agree, that's how it should be. Let's
>> try it
>> >> > out.
>> >> > > > > > > > > >
>> >> > > > > > > > > > @Xintong @Jingsong: Concerning " JVM does not wait
>> for
>> >> GC
>> >> > > when
>> >> > > > > > > > allocating
>> >> > > > > > > > > > direct memory buffer": There seems to be pretty
>> >> elaborate
>> >> > > logic
>> >> > > > > to
>> >> > > > > > > free
>> >> > > > > > > > > > buffers when allocating new ones. See
>> >> > > > > > > > > >
>> >> > > > > > > > > >
>> >> > > > > > > > >
>> >> > > > > > > >
>> >> > > > > > >
>> >> > > > > >
>> >> > > > >
>> >> > > >
>> >> > >
>> >> >
>> >>
>> http://hg.openjdk.java.net/jdk8u/jdk8u-dev/jdk/file/tip/src/share/classes/java/nio/Bits.java#l643
>> >> > > > > > > > > >
>> >> > > > > > > > > > @Till: Maybe. If we assume that the JVM default works
>> >> (like
>> >> > > > going
>> >> > > > > > > with
>> >> > > > > > > > > > option 2 and not setting "-XX:MaxDirectMemorySize" at
>> >> all),
>> >> > > > then
>> >> > > > > I
>> >> > > > > > > > think
>> >> > > > > > > > > it
>> >> > > > > > > > > > should be okay to set "-XX:MaxDirectMemorySize" to
>> >> > > > > > > > > > "off_heap_managed_memory + direct_memory" even if we
>> use
>> >> > > > RocksDB.
>> >> > > > > > > That
>> >> > > > > > > > > is a
>> >> > > > > > > > > > big if, though, I honestly have no idea :D Would be
>> >> good to
>> >> > > > > > > understand
>> >> > > > > > > > > > this, though, because this would affect option (2)
>> and
>> >> > option
>> >> > > > > > (1.2).
>> >> > > > > > > > > >
>> >> > > > > > > > > > On Mon, Aug 19, 2019 at 4:44 PM Xintong Song <
>> >> > > > > > tonysong...@gmail.com>
>> >> > > > > > > > > > wrote:
>> >> > > > > > > > > >
>> >> > > > > > > > > > > Thanks for the inputs, Jingsong.
>> >> > > > > > > > > > >
>> >> > > > > > > > > > > Let me try to summarize your points. Please correct
>> >> me if
>> >> > > I'm
>> >> > > > > > > wrong.
>> >> > > > > > > > > > >
>> >> > > > > > > > > > >    - Memory consumers should always avoid returning
>> >> > memory
>> >> > > > > > segments
>> >> > > > > > > > to
>> >> > > > > > > > > > >    memory manager while there are still un-cleaned
>> >> > > > structures /
>> >> > > > > > > > threads
>> >> > > > > > > > > > > that
>> >> > > > > > > > > > >    may use the memory. Otherwise, it would cause
>> >> serious
>> >> > > > > problems
>> >> > > > > > > by
>> >> > > > > > > > > > having
>> >> > > > > > > > > > >    multiple consumers trying to use the same memory
>> >> > > segment.
>> >> > > > > > > > > > >    - JVM does not wait for GC when allocating
>> direct
>> >> > memory
>> >> > > > > > buffer.
>> >> > > > > > > > > > >    Therefore even we set proper max direct memory
>> size
>> >> > > limit,
>> >> > > > > we
>> >> > > > > > > may
>> >> > > > > > > > > > still
>> >> > > > > > > > > > >    encounter direct memory oom if the GC cleaning
>> >> memory
>> >> > > > slower
>> >> > > > > > > than
>> >> > > > > > > > > the
>> >> > > > > > > > > > >    direct memory allocation.
>> >> > > > > > > > > > >
>> >> > > > > > > > > > > Am I understanding this correctly?
>> >> > > > > > > > > > >
>> >> > > > > > > > > > > Thank you~
>> >> > > > > > > > > > >
>> >> > > > > > > > > > > Xintong Song
>> >> > > > > > > > > > >
>> >> > > > > > > > > > >
>> >> > > > > > > > > > >
>> >> > > > > > > > > > > On Mon, Aug 19, 2019 at 4:21 PM JingsongLee <
>> >> > > > > > > lzljs3620...@aliyun.com
>> >> > > > > > > > > > > .invalid>
>> >> > > > > > > > > > > wrote:
>> >> > > > > > > > > > >
>> >> > > > > > > > > > > > Hi stephan:
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > > > About option 2:
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > > > if additional threads not cleanly shut down
>> before
>> >> we
>> >> > can
>> >> > > > > exit
>> >> > > > > > > the
>> >> > > > > > > > > > task:
>> >> > > > > > > > > > > > In the current case of memory reuse, it has
>> freed up
>> >> > the
>> >> > > > > memory
>> >> > > > > > > it
>> >> > > > > > > > > > > >  uses. If this memory is used by other tasks and
>> >> > > > asynchronous
>> >> > > > > > > > threads
>> >> > > > > > > > > > > >  of exited task may still be writing, there will
>> be
>> >> > > > > concurrent
>> >> > > > > > > > > security
>> >> > > > > > > > > > > >  problems, and even lead to errors in user
>> computing
>> >> > > > results.
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > > > So I think this is a serious and intolerable
>> bug, No
>> >> > > matter
>> >> > > > > > what
>> >> > > > > > > > the
>> >> > > > > > > > > > > >  option is, it should be avoided.
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > > > About direct memory cleaned by GC:
>> >> > > > > > > > > > > > I don't think it is a good idea, I've
>> encountered so
>> >> > many
>> >> > > > > > > > situations
>> >> > > > > > > > > > > >  that it's too late for GC to cause DirectMemory
>> >> OOM.
>> >> > > > Release
>> >> > > > > > and
>> >> > > > > > > > > > > >  allocate DirectMemory depend on the type of user
>> >> job,
>> >> > > > which
>> >> > > > > is
>> >> > > > > > > > > > > >  often beyond our control.
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > > > Best,
>> >> > > > > > > > > > > > Jingsong Lee
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > > >
>> >> > > > > > >
>> >> > ------------------------------------------------------------------
>> >> > > > > > > > > > > > From:Stephan Ewen <se...@apache.org>
>> >> > > > > > > > > > > > Send Time:2019年8月19日(星期一) 15:56
>> >> > > > > > > > > > > > To:dev <dev@flink.apache.org>
>> >> > > > > > > > > > > > Subject:Re: [DISCUSS] FLIP-49: Unified Memory
>> >> > > Configuration
>> >> > > > > for
>> >> > > > > > > > > > > > TaskExecutors
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > > > My main concern with option 2 (manually release
>> >> memory)
>> >> > > is
>> >> > > > > that
>> >> > > > > > > > > > segfaults
>> >> > > > > > > > > > > > in the JVM send off all sorts of alarms on user
>> >> ends.
>> >> > So
>> >> > > we
>> >> > > > > > need
>> >> > > > > > > to
>> >> > > > > > > > > > > > guarantee that this never happens.
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > > > The trickyness is in tasks that uses data
>> >> structures /
>> >> > > > > > algorithms
>> >> > > > > > > > > with
>> >> > > > > > > > > > > > additional threads, like hash table spill/read
>> and
>> >> > > sorting
>> >> > > > > > > threads.
>> >> > > > > > > > > We
>> >> > > > > > > > > > > need
>> >> > > > > > > > > > > > to ensure that these cleanly shut down before we
>> can
>> >> > exit
>> >> > > > the
>> >> > > > > > > task.
>> >> > > > > > > > > > > > I am not sure that we have that guaranteed
>> already,
>> >> > > that's
>> >> > > > > why
>> >> > > > > > > > option
>> >> > > > > > > > > > 1.1
>> >> > > > > > > > > > > > seemed simpler to me.
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > > > On Mon, Aug 19, 2019 at 3:42 PM Xintong Song <
>> >> > > > > > > > tonysong...@gmail.com>
>> >> > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > > > > Thanks for the comments, Stephan. Summarized in
>> >> this
>> >> > > way
>> >> > > > > > really
>> >> > > > > > > > > makes
>> >> > > > > > > > > > > > > things easier to understand.
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > > > I'm in favor of option 2, at least for the
>> >> moment. I
>> >> > > > think
>> >> > > > > it
>> >> > > > > > > is
>> >> > > > > > > > > not
>> >> > > > > > > > > > > that
>> >> > > > > > > > > > > > > difficult to keep it segfault safe for memory
>> >> > manager,
>> >> > > as
>> >> > > > > > long
>> >> > > > > > > as
>> >> > > > > > > > > we
>> >> > > > > > > > > > > > always
>> >> > > > > > > > > > > > > de-allocate the memory segment when it is
>> released
>> >> > from
>> >> > > > the
>> >> > > > > > > > memory
>> >> > > > > > > > > > > > > consumers. Only if the memory consumer continue
>> >> using
>> >> > > the
>> >> > > > > > > buffer
>> >> > > > > > > > of
>> >> > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > segment after releasing it, in which case we do
>> >> want
>> >> > > the
>> >> > > > > job
>> >> > > > > > to
>> >> > > > > > > > > fail
>> >> > > > > > > > > > so
>> >> > > > > > > > > > > > we
>> >> > > > > > > > > > > > > detect the memory leak early.
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > > > For option 1.2, I don't think this is a good
>> idea.
>> >> > Not
>> >> > > > only
>> >> > > > > > > > because
>> >> > > > > > > > > > the
>> >> > > > > > > > > > > > > assumption (regular GC is enough to clean
>> direct
>> >> > > buffers)
>> >> > > > > may
>> >> > > > > > > not
>> >> > > > > > > > > > > always
>> >> > > > > > > > > > > > be
>> >> > > > > > > > > > > > > true, but also it makes harder for finding
>> >> problems
>> >> > in
>> >> > > > > cases
>> >> > > > > > of
>> >> > > > > > > > > > memory
>> >> > > > > > > > > > > > > overuse. E.g., user configured some direct
>> memory
>> >> for
>> >> > > the
>> >> > > > > > user
>> >> > > > > > > > > > > libraries.
>> >> > > > > > > > > > > > > If the library actually use more direct memory
>> >> then
>> >> > > > > > configured,
>> >> > > > > > > > > which
>> >> > > > > > > > > > > > > cannot be cleaned by GC because they are still
>> in
>> >> > use,
>> >> > > > may
>> >> > > > > > lead
>> >> > > > > > > > to
>> >> > > > > > > > > > > > overuse
>> >> > > > > > > > > > > > > of the total container memory. In that case,
>> if it
>> >> > > didn't
>> >> > > > > > touch
>> >> > > > > > > > the
>> >> > > > > > > > > > JVM
>> >> > > > > > > > > > > > > default max direct memory limit, we cannot get
>> a
>> >> > direct
>> >> > > > > > memory
>> >> > > > > > > > OOM
>> >> > > > > > > > > > and
>> >> > > > > > > > > > > it
>> >> > > > > > > > > > > > > will become super hard to understand which
>> part of
>> >> > the
>> >> > > > > > > > > configuration
>> >> > > > > > > > > > > need
>> >> > > > > > > > > > > > > to be updated.
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > > > For option 1.1, it has the similar problem as
>> >> 1.2, if
>> >> > > the
>> >> > > > > > > > exceeded
>> >> > > > > > > > > > > direct
>> >> > > > > > > > > > > > > memory does not reach the max direct memory
>> limit
>> >> > > > specified
>> >> > > > > > by
>> >> > > > > > > > the
>> >> > > > > > > > > > > > > dedicated parameter. I think it is slightly
>> better
>> >> > than
>> >> > > > > 1.2,
>> >> > > > > > > only
>> >> > > > > > > > > > > because
>> >> > > > > > > > > > > > > we can tune the parameter.
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > > > Thank you~
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > > > Xintong Song
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > > > On Mon, Aug 19, 2019 at 2:53 PM Stephan Ewen <
>> >> > > > > > se...@apache.org
>> >> > > > > > > >
>> >> > > > > > > > > > wrote:
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > About the "-XX:MaxDirectMemorySize"
>> discussion,
>> >> > maybe
>> >> > > > let
>> >> > > > > > me
>> >> > > > > > > > > > > summarize
>> >> > > > > > > > > > > > > it a
>> >> > > > > > > > > > > > > > bit differently:
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > We have the following two options:
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > (1) We let MemorySegments be de-allocated by
>> the
>> >> > GC.
>> >> > > > That
>> >> > > > > > > makes
>> >> > > > > > > > > it
>> >> > > > > > > > > > > > > segfault
>> >> > > > > > > > > > > > > > safe. But then we need a way to trigger GC in
>> >> case
>> >> > > > > > > > de-allocation
>> >> > > > > > > > > > and
>> >> > > > > > > > > > > > > > re-allocation of a bunch of segments happens
>> >> > quickly,
>> >> > > > > which
>> >> > > > > > > is
>> >> > > > > > > > > > often
>> >> > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > case during batch scheduling or task restart.
>> >> > > > > > > > > > > > > >   - The "-XX:MaxDirectMemorySize" (option
>> 1.1)
>> >> is
>> >> > one
>> >> > > > way
>> >> > > > > > to
>> >> > > > > > > do
>> >> > > > > > > > > > this
>> >> > > > > > > > > > > > > >   - Another way could be to have a dedicated
>> >> > > > bookkeeping
>> >> > > > > in
>> >> > > > > > > the
>> >> > > > > > > > > > > > > > MemoryManager (option 1.2), so that this is a
>> >> > number
>> >> > > > > > > > independent
>> >> > > > > > > > > of
>> >> > > > > > > > > > > the
>> >> > > > > > > > > > > > > > "-XX:MaxDirectMemorySize" parameter.
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > (2) We manually allocate and de-allocate the
>> >> memory
>> >> > > for
>> >> > > > > the
>> >> > > > > > > > > > > > > MemorySegments
>> >> > > > > > > > > > > > > > (option 2). That way we need not worry about
>> >> > > triggering
>> >> > > > > GC
>> >> > > > > > by
>> >> > > > > > > > > some
>> >> > > > > > > > > > > > > > threshold or bookkeeping, but it is harder to
>> >> > prevent
>> >> > > > > > > > segfaults.
>> >> > > > > > > > > We
>> >> > > > > > > > > > > > need
>> >> > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > be very careful about when we release the
>> memory
>> >> > > > segments
>> >> > > > > > > (only
>> >> > > > > > > > > in
>> >> > > > > > > > > > > the
>> >> > > > > > > > > > > > > > cleanup phase of the main thread).
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > If we go with option 1.1, we probably need to
>> >> set
>> >> > > > > > > > > > > > > > "-XX:MaxDirectMemorySize" to
>> >> > > "off_heap_managed_memory +
>> >> > > > > > > > > > > direct_memory"
>> >> > > > > > > > > > > > > and
>> >> > > > > > > > > > > > > > have "direct_memory" as a separate reserved
>> >> memory
>> >> > > > pool.
>> >> > > > > > > > Because
>> >> > > > > > > > > if
>> >> > > > > > > > > > > we
>> >> > > > > > > > > > > > > just
>> >> > > > > > > > > > > > > > set "-XX:MaxDirectMemorySize" to
>> >> > > > > "off_heap_managed_memory +
>> >> > > > > > > > > > > > > jvm_overhead",
>> >> > > > > > > > > > > > > > then there will be times when that entire
>> >> memory is
>> >> > > > > > allocated
>> >> > > > > > > > by
>> >> > > > > > > > > > > direct
>> >> > > > > > > > > > > > > > buffers and we have nothing left for the JVM
>> >> > > overhead.
>> >> > > > So
>> >> > > > > > we
>> >> > > > > > > > > either
>> >> > > > > > > > > > > > need
>> >> > > > > > > > > > > > > a
>> >> > > > > > > > > > > > > > way to compensate for that (again some safety
>> >> > margin
>> >> > > > > cutoff
>> >> > > > > > > > > value)
>> >> > > > > > > > > > or
>> >> > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > will exceed container memory.
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > If we go with option 1.2, we need to be aware
>> >> that
>> >> > it
>> >> > > > > takes
>> >> > > > > > > > > > elaborate
>> >> > > > > > > > > > > > > logic
>> >> > > > > > > > > > > > > > to push recycling of direct buffers without
>> >> always
>> >> > > > > > > triggering a
>> >> > > > > > > > > > full
>> >> > > > > > > > > > > > GC.
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > My first guess is that the options will be
>> >> easiest
>> >> > to
>> >> > > > do
>> >> > > > > in
>> >> > > > > > > the
>> >> > > > > > > > > > > > following
>> >> > > > > > > > > > > > > > order:
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > >   - Option 1.1 with a dedicated direct_memory
>> >> > > > parameter,
>> >> > > > > as
>> >> > > > > > > > > > discussed
>> >> > > > > > > > > > > > > > above. We would need to find a way to set the
>> >> > > > > direct_memory
>> >> > > > > > > > > > parameter
>> >> > > > > > > > > > > > by
>> >> > > > > > > > > > > > > > default. We could start with 64 MB and see
>> how
>> >> it
>> >> > > goes
>> >> > > > in
>> >> > > > > > > > > practice.
>> >> > > > > > > > > > > One
>> >> > > > > > > > > > > > > > danger I see is that setting this loo low can
>> >> > cause a
>> >> > > > > bunch
>> >> > > > > > > of
>> >> > > > > > > > > > > > additional
>> >> > > > > > > > > > > > > > GCs compared to before (we need to watch this
>> >> > > > carefully).
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > >   - Option 2. It is actually quite simple to
>> >> > > implement,
>> >> > > > > we
>> >> > > > > > > > could
>> >> > > > > > > > > > try
>> >> > > > > > > > > > > > how
>> >> > > > > > > > > > > > > > segfault safe we are at the moment.
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > >   - Option 1.2: We would not touch the
>> >> > > > > > > > "-XX:MaxDirectMemorySize"
>> >> > > > > > > > > > > > > parameter
>> >> > > > > > > > > > > > > > at all and assume that all the direct memory
>> >> > > > allocations
>> >> > > > > > that
>> >> > > > > > > > the
>> >> > > > > > > > > > JVM
>> >> > > > > > > > > > > > and
>> >> > > > > > > > > > > > > > Netty do are infrequent enough to be cleaned
>> up
>> >> > fast
>> >> > > > > enough
>> >> > > > > > > > > through
>> >> > > > > > > > > > > > > regular
>> >> > > > > > > > > > > > > > GC. I am not sure if that is a valid
>> assumption,
>> >> > > > though.
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > Best,
>> >> > > > > > > > > > > > > > Stephan
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > On Fri, Aug 16, 2019 at 2:16 PM Xintong Song
>> <
>> >> > > > > > > > > > tonysong...@gmail.com>
>> >> > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > Thanks for sharing your opinion Till.
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > I'm also in favor of alternative 2. I was
>> >> > wondering
>> >> > > > > > whether
>> >> > > > > > > > we
>> >> > > > > > > > > > can
>> >> > > > > > > > > > > > > avoid
>> >> > > > > > > > > > > > > > > using Unsafe.allocate() for off-heap
>> managed
>> >> > memory
>> >> > > > and
>> >> > > > > > > > network
>> >> > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > with
>> >> > > > > > > > > > > > > > > alternative 3. But after giving it a second
>> >> > > thought,
>> >> > > > I
>> >> > > > > > > think
>> >> > > > > > > > > even
>> >> > > > > > > > > > > for
>> >> > > > > > > > > > > > > > > alternative 3 using direct memory for
>> off-heap
>> >> > > > managed
>> >> > > > > > > memory
>> >> > > > > > > > > > could
>> >> > > > > > > > > > > > > cause
>> >> > > > > > > > > > > > > > > problems.
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > Hi Yang,
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > Regarding your concern, I think what
>> proposed
>> >> in
>> >> > > this
>> >> > > > > > FLIP
>> >> > > > > > > it
>> >> > > > > > > > > to
>> >> > > > > > > > > > > have
>> >> > > > > > > > > > > > > > both
>> >> > > > > > > > > > > > > > > off-heap managed memory and network memory
>> >> > > allocated
>> >> > > > > > > through
>> >> > > > > > > > > > > > > > > Unsafe.allocate(), which means they are
>> >> > practically
>> >> > > > > > native
>> >> > > > > > > > > memory
>> >> > > > > > > > > > > and
>> >> > > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > limited by JVM max direct memory. The only
>> >> parts
>> >> > of
>> >> > > > > > memory
>> >> > > > > > > > > > limited
>> >> > > > > > > > > > > by
>> >> > > > > > > > > > > > > JVM
>> >> > > > > > > > > > > > > > > max direct memory are task off-heap memory
>> and
>> >> > JVM
>> >> > > > > > > overhead,
>> >> > > > > > > > > > which
>> >> > > > > > > > > > > > are
>> >> > > > > > > > > > > > > > > exactly alternative 2 suggests to set the
>> JVM
>> >> max
>> >> > > > > direct
>> >> > > > > > > > memory
>> >> > > > > > > > > > to.
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > Thank you~
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > Xintong Song
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > On Fri, Aug 16, 2019 at 1:48 PM Till
>> Rohrmann
>> >> <
>> >> > > > > > > > > > > trohrm...@apache.org>
>> >> > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > Thanks for the clarification Xintong. I
>> >> > > understand
>> >> > > > > the
>> >> > > > > > > two
>> >> > > > > > > > > > > > > alternatives
>> >> > > > > > > > > > > > > > > > now.
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > I would be in favour of option 2 because
>> it
>> >> > makes
>> >> > > > > > things
>> >> > > > > > > > > > > explicit.
>> >> > > > > > > > > > > > If
>> >> > > > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > > > don't limit the direct memory, I fear
>> that
>> >> we
>> >> > > might
>> >> > > > > end
>> >> > > > > > > up
>> >> > > > > > > > > in a
>> >> > > > > > > > > > > > > similar
>> >> > > > > > > > > > > > > > > > situation as we are currently in: The
>> user
>> >> > might
>> >> > > > see
>> >> > > > > > that
>> >> > > > > > > > her
>> >> > > > > > > > > > > > process
>> >> > > > > > > > > > > > > > > gets
>> >> > > > > > > > > > > > > > > > killed by the OS and does not know why
>> this
>> >> is
>> >> > > the
>> >> > > > > > case.
>> >> > > > > > > > > > > > > Consequently,
>> >> > > > > > > > > > > > > > > she
>> >> > > > > > > > > > > > > > > > tries to decrease the process memory size
>> >> > > (similar
>> >> > > > to
>> >> > > > > > > > > > increasing
>> >> > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > cutoff
>> >> > > > > > > > > > > > > > > > ratio) in order to accommodate for the
>> extra
>> >> > > direct
>> >> > > > > > > memory.
>> >> > > > > > > > > > Even
>> >> > > > > > > > > > > > > worse,
>> >> > > > > > > > > > > > > > > she
>> >> > > > > > > > > > > > > > > > tries to decrease memory budgets which
>> are
>> >> not
>> >> > > > fully
>> >> > > > > > used
>> >> > > > > > > > and
>> >> > > > > > > > > > > hence
>> >> > > > > > > > > > > > > > won't
>> >> > > > > > > > > > > > > > > > change the overall memory consumption.
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > Cheers,
>> >> > > > > > > > > > > > > > > > Till
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > On Fri, Aug 16, 2019 at 11:01 AM Xintong
>> >> Song <
>> >> > > > > > > > > > > > tonysong...@gmail.com
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > Let me explain this with a concrete
>> >> example
>> >> > > Till.
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > Let's say we have the following
>> scenario.
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > Total Process Memory: 1GB
>> >> > > > > > > > > > > > > > > > > JVM Direct Memory (Task Off-Heap
>> Memory +
>> >> JVM
>> >> > > > > > > Overhead):
>> >> > > > > > > > > > 200MB
>> >> > > > > > > > > > > > > > > > > Other Memory (JVM Heap Memory, JVM
>> >> Metaspace,
>> >> > > > > > Off-Heap
>> >> > > > > > > > > > Managed
>> >> > > > > > > > > > > > > Memory
>> >> > > > > > > > > > > > > > > and
>> >> > > > > > > > > > > > > > > > > Network Memory): 800MB
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > For alternative 2, we set
>> >> > > -XX:MaxDirectMemorySize
>> >> > > > > to
>> >> > > > > > > > 200MB.
>> >> > > > > > > > > > > > > > > > > For alternative 3, we set
>> >> > > -XX:MaxDirectMemorySize
>> >> > > > > to
>> >> > > > > > a
>> >> > > > > > > > very
>> >> > > > > > > > > > > large
>> >> > > > > > > > > > > > > > > value,
>> >> > > > > > > > > > > > > > > > > let's say 1TB.
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > If the actual direct memory usage of
>> Task
>> >> > > > Off-Heap
>> >> > > > > > > Memory
>> >> > > > > > > > > and
>> >> > > > > > > > > > > JVM
>> >> > > > > > > > > > > > > > > > Overhead
>> >> > > > > > > > > > > > > > > > > do not exceed 200MB, then alternative 2
>> >> and
>> >> > > > > > > alternative 3
>> >> > > > > > > > > > > should
>> >> > > > > > > > > > > > > have
>> >> > > > > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > > same utility. Setting larger
>> >> > > > > -XX:MaxDirectMemorySize
>> >> > > > > > > will
>> >> > > > > > > > > not
>> >> > > > > > > > > > > > > reduce
>> >> > > > > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > > sizes of the other memory pools.
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > If the actual direct memory usage of
>> Task
>> >> > > > Off-Heap
>> >> > > > > > > Memory
>> >> > > > > > > > > and
>> >> > > > > > > > > > > JVM
>> >> > > > > > > > > > > > > > > > > Overhead potentially exceed 200MB, then
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >    - Alternative 2 suffers from
>> frequent
>> >> OOM.
>> >> > > To
>> >> > > > > > avoid
>> >> > > > > > > > > that,
>> >> > > > > > > > > > > the
>> >> > > > > > > > > > > > > only
>> >> > > > > > > > > > > > > > > > thing
>> >> > > > > > > > > > > > > > > > >    user can do is to modify the
>> >> configuration
>> >> > > and
>> >> > > > > > > > increase
>> >> > > > > > > > > > JVM
>> >> > > > > > > > > > > > > Direct
>> >> > > > > > > > > > > > > > > > > Memory
>> >> > > > > > > > > > > > > > > > >    (Task Off-Heap Memory + JVM
>> Overhead).
>> >> > Let's
>> >> > > > say
>> >> > > > > > > that
>> >> > > > > > > > > user
>> >> > > > > > > > > > > > > > increases
>> >> > > > > > > > > > > > > > > > JVM
>> >> > > > > > > > > > > > > > > > >    Direct Memory to 250MB, this will
>> >> reduce
>> >> > the
>> >> > > > > total
>> >> > > > > > > > size
>> >> > > > > > > > > of
>> >> > > > > > > > > > > > other
>> >> > > > > > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > >    pools to 750MB, given the total
>> process
>> >> > > memory
>> >> > > > > > > remains
>> >> > > > > > > > > > 1GB.
>> >> > > > > > > > > > > > > > > > >    - For alternative 3, there is no
>> >> chance of
>> >> > > > > direct
>> >> > > > > > > OOM.
>> >> > > > > > > > > > There
>> >> > > > > > > > > > > > are
>> >> > > > > > > > > > > > > > > > chances
>> >> > > > > > > > > > > > > > > > >    of exceeding the total process
>> memory
>> >> > limit,
>> >> > > > but
>> >> > > > > > > given
>> >> > > > > > > > > > that
>> >> > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > process
>> >> > > > > > > > > > > > > > > > > may
>> >> > > > > > > > > > > > > > > > >    not use up all the reserved native
>> >> memory
>> >> > > > > > (Off-Heap
>> >> > > > > > > > > > Managed
>> >> > > > > > > > > > > > > > Memory,
>> >> > > > > > > > > > > > > > > > > Network
>> >> > > > > > > > > > > > > > > > >    Memory, JVM Metaspace), if the
>> actual
>> >> > direct
>> >> > > > > > memory
>> >> > > > > > > > > usage
>> >> > > > > > > > > > is
>> >> > > > > > > > > > > > > > > slightly
>> >> > > > > > > > > > > > > > > > > above
>> >> > > > > > > > > > > > > > > > >    yet very close to 200MB, user
>> probably
>> >> do
>> >> > > not
>> >> > > > > need
>> >> > > > > > > to
>> >> > > > > > > > > > change
>> >> > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > >    configurations.
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > Therefore, I think from the user's
>> >> > > perspective, a
>> >> > > > > > > > feasible
>> >> > > > > > > > > > > > > > > configuration
>> >> > > > > > > > > > > > > > > > > for alternative 2 may lead to lower
>> >> resource
>> >> > > > > > > utilization
>> >> > > > > > > > > > > compared
>> >> > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > alternative 3.
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > Thank you~
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > Xintong Song
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > On Fri, Aug 16, 2019 at 10:28 AM Till
>> >> > Rohrmann
>> >> > > <
>> >> > > > > > > > > > > > > trohrm...@apache.org
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > I guess you have to help me
>> understand
>> >> the
>> >> > > > > > difference
>> >> > > > > > > > > > between
>> >> > > > > > > > > > > > > > > > > alternative 2
>> >> > > > > > > > > > > > > > > > > > and 3 wrt to memory under utilization
>> >> > > Xintong.
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > - Alternative 2: set
>> >> XX:MaxDirectMemorySize
>> >> > > to
>> >> > > > > Task
>> >> > > > > > > > > > Off-Heap
>> >> > > > > > > > > > > > > Memory
>> >> > > > > > > > > > > > > > > and
>> >> > > > > > > > > > > > > > > > > JVM
>> >> > > > > > > > > > > > > > > > > > Overhead. Then there is the risk that
>> >> this
>> >> > > size
>> >> > > > > is
>> >> > > > > > > too
>> >> > > > > > > > > low
>> >> > > > > > > > > > > > > > resulting
>> >> > > > > > > > > > > > > > > > in a
>> >> > > > > > > > > > > > > > > > > > lot of garbage collection and
>> >> potentially
>> >> > an
>> >> > > > OOM.
>> >> > > > > > > > > > > > > > > > > > - Alternative 3: set
>> >> XX:MaxDirectMemorySize
>> >> > > to
>> >> > > > > > > > something
>> >> > > > > > > > > > > larger
>> >> > > > > > > > > > > > > > than
>> >> > > > > > > > > > > > > > > > > > alternative 2. This would of course
>> >> reduce
>> >> > > the
>> >> > > > > > sizes
>> >> > > > > > > of
>> >> > > > > > > > > the
>> >> > > > > > > > > > > > other
>> >> > > > > > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > > > types.
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > How would alternative 2 now result
>> in an
>> >> > > under
>> >> > > > > > > > > utilization
>> >> > > > > > > > > > of
>> >> > > > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > > > compared to alternative 3? If
>> >> alternative 3
>> >> > > > > > strictly
>> >> > > > > > > > > sets a
>> >> > > > > > > > > > > > > higher
>> >> > > > > > > > > > > > > > > max
>> >> > > > > > > > > > > > > > > > > > direct memory size and we use only
>> >> little,
>> >> > > > then I
>> >> > > > > > > would
>> >> > > > > > > > > > > expect
>> >> > > > > > > > > > > > > that
>> >> > > > > > > > > > > > > > > > > > alternative 3 results in memory under
>> >> > > > > utilization.
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > Cheers,
>> >> > > > > > > > > > > > > > > > > > Till
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > On Tue, Aug 13, 2019 at 4:19 PM Yang
>> >> Wang <
>> >> > > > > > > > > > > > danrtsey...@gmail.com
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > Hi xintong,till
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > Native and Direct Memory
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > My point is setting a very large
>> max
>> >> > direct
>> >> > > > > > memory
>> >> > > > > > > > size
>> >> > > > > > > > > > > when
>> >> > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > do
>> >> > > > > > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > > > > > differentiate direct and native
>> >> memory.
>> >> > If
>> >> > > > the
>> >> > > > > > > direct
>> >> > > > > > > > > > > > > > > > memory,including
>> >> > > > > > > > > > > > > > > > > > user
>> >> > > > > > > > > > > > > > > > > > > direct memory and framework direct
>> >> > > > memory,could
>> >> > > > > > be
>> >> > > > > > > > > > > calculated
>> >> > > > > > > > > > > > > > > > > > > correctly,then
>> >> > > > > > > > > > > > > > > > > > > i am in favor of setting direct
>> memory
>> >> > with
>> >> > > > > fixed
>> >> > > > > > > > > value.
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > Memory Calculation
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > I agree with xintong. For Yarn and
>> >> k8s,we
>> >> > > > need
>> >> > > > > to
>> >> > > > > > > > check
>> >> > > > > > > > > > the
>> >> > > > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > > > > configurations in client to avoid
>> >> > > submitting
>> >> > > > > > > > > successfully
>> >> > > > > > > > > > > and
>> >> > > > > > > > > > > > > > > failing
>> >> > > > > > > > > > > > > > > > > in
>> >> > > > > > > > > > > > > > > > > > > the flink master.
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > Best,
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > Yang
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > Xintong Song <
>> tonysong...@gmail.com
>> >> > > > > >于2019年8月13日
>> >> > > > > > > > > > 周二22:07写道:
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > Thanks for replying, Till.
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > About MemorySegment, I think you
>> are
>> >> > > right
>> >> > > > > that
>> >> > > > > > > we
>> >> > > > > > > > > > should
>> >> > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > > include
>> >> > > > > > > > > > > > > > > > > > > this
>> >> > > > > > > > > > > > > > > > > > > > issue in the scope of this FLIP.
>> >> This
>> >> > > FLIP
>> >> > > > > > should
>> >> > > > > > > > > > > > concentrate
>> >> > > > > > > > > > > > > > on
>> >> > > > > > > > > > > > > > > > how
>> >> > > > > > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > > > > configure memory pools for
>> >> > TaskExecutors,
>> >> > > > > with
>> >> > > > > > > > > minimum
>> >> > > > > > > > > > > > > > > involvement
>> >> > > > > > > > > > > > > > > > on
>> >> > > > > > > > > > > > > > > > > > how
>> >> > > > > > > > > > > > > > > > > > > > memory consumers use it.
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > About direct memory, I think
>> >> > alternative
>> >> > > 3
>> >> > > > > may
>> >> > > > > > > not
>> >> > > > > > > > > > having
>> >> > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > same
>> >> > > > > > > > > > > > > > > > > over
>> >> > > > > > > > > > > > > > > > > > > > reservation issue that
>> alternative 2
>> >> > > does,
>> >> > > > > but
>> >> > > > > > at
>> >> > > > > > > > the
>> >> > > > > > > > > > > cost
>> >> > > > > > > > > > > > of
>> >> > > > > > > > > > > > > > > risk
>> >> > > > > > > > > > > > > > > > of
>> >> > > > > > > > > > > > > > > > > > > over
>> >> > > > > > > > > > > > > > > > > > > > using memory at the container
>> level,
>> >> > > which
>> >> > > > is
>> >> > > > > > not
>> >> > > > > > > > > good.
>> >> > > > > > > > > > > My
>> >> > > > > > > > > > > > > > point
>> >> > > > > > > > > > > > > > > is
>> >> > > > > > > > > > > > > > > > > > that
>> >> > > > > > > > > > > > > > > > > > > > both "Task Off-Heap Memory" and
>> "JVM
>> >> > > > > Overhead"
>> >> > > > > > > are
>> >> > > > > > > > > not
>> >> > > > > > > > > > > easy
>> >> > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > config.
>> >> > > > > > > > > > > > > > > > > > > For
>> >> > > > > > > > > > > > > > > > > > > > alternative 2, users might
>> configure
>> >> > them
>> >> > > > > > higher
>> >> > > > > > > > than
>> >> > > > > > > > > > > what
>> >> > > > > > > > > > > > > > > actually
>> >> > > > > > > > > > > > > > > > > > > needed,
>> >> > > > > > > > > > > > > > > > > > > > just to avoid getting a direct
>> OOM.
>> >> For
>> >> > > > > > > alternative
>> >> > > > > > > > > 3,
>> >> > > > > > > > > > > > users
>> >> > > > > > > > > > > > > do
>> >> > > > > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > > > get
>> >> > > > > > > > > > > > > > > > > > > > direct OOM, so they may not
>> config
>> >> the
>> >> > > two
>> >> > > > > > > options
>> >> > > > > > > > > > > > > aggressively
>> >> > > > > > > > > > > > > > > > high.
>> >> > > > > > > > > > > > > > > > > > But
>> >> > > > > > > > > > > > > > > > > > > > the consequences are risks of
>> >> overall
>> >> > > > > container
>> >> > > > > > > > > memory
>> >> > > > > > > > > > > > usage
>> >> > > > > > > > > > > > > > > > exceeds
>> >> > > > > > > > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > > > > > budget.
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > Thank you~
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > Xintong Song
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > On Tue, Aug 13, 2019 at 9:39 AM
>> Till
>> >> > > > > Rohrmann <
>> >> > > > > > > > > > > > > > > > trohrm...@apache.org>
>> >> > > > > > > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > Thanks for proposing this FLIP
>> >> > Xintong.
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > All in all I think it already
>> >> looks
>> >> > > quite
>> >> > > > > > good.
>> >> > > > > > > > > > > > Concerning
>> >> > > > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > > first
>> >> > > > > > > > > > > > > > > > > > > open
>> >> > > > > > > > > > > > > > > > > > > > > question about allocating
>> memory
>> >> > > > segments,
>> >> > > > > I
>> >> > > > > > > was
>> >> > > > > > > > > > > > wondering
>> >> > > > > > > > > > > > > > > > whether
>> >> > > > > > > > > > > > > > > > > > this
>> >> > > > > > > > > > > > > > > > > > > > is
>> >> > > > > > > > > > > > > > > > > > > > > strictly necessary to do in the
>> >> > context
>> >> > > > of
>> >> > > > > > this
>> >> > > > > > > > > FLIP
>> >> > > > > > > > > > or
>> >> > > > > > > > > > > > > > whether
>> >> > > > > > > > > > > > > > > > > this
>> >> > > > > > > > > > > > > > > > > > > > could
>> >> > > > > > > > > > > > > > > > > > > > > be done as a follow up? Without
>> >> > knowing
>> >> > > > all
>> >> > > > > > > > > details,
>> >> > > > > > > > > > I
>> >> > > > > > > > > > > > > would
>> >> > > > > > > > > > > > > > be
>> >> > > > > > > > > > > > > > > > > > > concerned
>> >> > > > > > > > > > > > > > > > > > > > > that we would widen the scope
>> of
>> >> this
>> >> > > > FLIP
>> >> > > > > > too
>> >> > > > > > > > much
>> >> > > > > > > > > > > > because
>> >> > > > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > > > > would
>> >> > > > > > > > > > > > > > > > > > > have
>> >> > > > > > > > > > > > > > > > > > > > > to touch all the existing call
>> >> sites
>> >> > of
>> >> > > > the
>> >> > > > > > > > > > > MemoryManager
>> >> > > > > > > > > > > > > > where
>> >> > > > > > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > > > > > > > allocate
>> >> > > > > > > > > > > > > > > > > > > > > memory segments (this should
>> >> mainly
>> >> > be
>> >> > > > > batch
>> >> > > > > > > > > > > operators).
>> >> > > > > > > > > > > > > The
>> >> > > > > > > > > > > > > > > > > addition
>> >> > > > > > > > > > > > > > > > > > > of
>> >> > > > > > > > > > > > > > > > > > > > > the memory reservation call to
>> the
>> >> > > > > > > MemoryManager
>> >> > > > > > > > > > should
>> >> > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > be
>> >> > > > > > > > > > > > > > > > > > affected
>> >> > > > > > > > > > > > > > > > > > > > by
>> >> > > > > > > > > > > > > > > > > > > > > this and I would hope that
>> this is
>> >> > the
>> >> > > > only
>> >> > > > > > > point
>> >> > > > > > > > > of
>> >> > > > > > > > > > > > > > > interaction
>> >> > > > > > > > > > > > > > > > a
>> >> > > > > > > > > > > > > > > > > > > > > streaming job would have with
>> the
>> >> > > > > > > MemoryManager.
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > Concerning the second open
>> >> question
>> >> > > about
>> >> > > > > > > setting
>> >> > > > > > > > > or
>> >> > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > setting
>> >> > > > > > > > > > > > > > > > a
>> >> > > > > > > > > > > > > > > > > > max
>> >> > > > > > > > > > > > > > > > > > > > > direct memory limit, I would
>> also
>> >> be
>> >> > > > > > interested
>> >> > > > > > > > why
>> >> > > > > > > > > > > Yang
>> >> > > > > > > > > > > > > Wang
>> >> > > > > > > > > > > > > > > > > thinks
>> >> > > > > > > > > > > > > > > > > > > > > leaving it open would be best.
>> My
>> >> > > concern
>> >> > > > > > about
>> >> > > > > > > > > this
>> >> > > > > > > > > > > > would
>> >> > > > > > > > > > > > > be
>> >> > > > > > > > > > > > > > > > that
>> >> > > > > > > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > > > > > > > would
>> >> > > > > > > > > > > > > > > > > > > > > be in a similar situation as we
>> >> are
>> >> > now
>> >> > > > > with
>> >> > > > > > > the
>> >> > > > > > > > > > > > > > > > > RocksDBStateBackend.
>> >> > > > > > > > > > > > > > > > > > > If
>> >> > > > > > > > > > > > > > > > > > > > > the different memory pools are
>> not
>> >> > > > clearly
>> >> > > > > > > > > separated
>> >> > > > > > > > > > > and
>> >> > > > > > > > > > > > > can
>> >> > > > > > > > > > > > > > > > spill
>> >> > > > > > > > > > > > > > > > > > over
>> >> > > > > > > > > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > > > > > a different pool, then it is
>> quite
>> >> > hard
>> >> > > > to
>> >> > > > > > > > > understand
>> >> > > > > > > > > > > > what
>> >> > > > > > > > > > > > > > > > exactly
>> >> > > > > > > > > > > > > > > > > > > > causes a
>> >> > > > > > > > > > > > > > > > > > > > > process to get killed for using
>> >> too
>> >> > > much
>> >> > > > > > > memory.
>> >> > > > > > > > > This
>> >> > > > > > > > > > > > could
>> >> > > > > > > > > > > > > > > then
>> >> > > > > > > > > > > > > > > > > > easily
>> >> > > > > > > > > > > > > > > > > > > > > lead to a similar situation
>> what
>> >> we
>> >> > > have
>> >> > > > > with
>> >> > > > > > > the
>> >> > > > > > > > > > > > > > cutoff-ratio.
>> >> > > > > > > > > > > > > > > > So
>> >> > > > > > > > > > > > > > > > > > why
>> >> > > > > > > > > > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > > > > > > > setting a sane default value
>> for
>> >> max
>> >> > > > direct
>> >> > > > > > > > memory
>> >> > > > > > > > > > and
>> >> > > > > > > > > > > > > giving
>> >> > > > > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > > > user
>> >> > > > > > > > > > > > > > > > > > > an
>> >> > > > > > > > > > > > > > > > > > > > > option to increase it if he
>> runs
>> >> into
>> >> > > an
>> >> > > > > OOM.
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > @Xintong, how would
>> alternative 2
>> >> > lead
>> >> > > to
>> >> > > > > > lower
>> >> > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > utilization
>> >> > > > > > > > > > > > > > > > > > than
>> >> > > > > > > > > > > > > > > > > > > > > alternative 3 where we set the
>> >> direct
>> >> > > > > memory
>> >> > > > > > > to a
>> >> > > > > > > > > > > higher
>> >> > > > > > > > > > > > > > value?
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > Cheers,
>> >> > > > > > > > > > > > > > > > > > > > > Till
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > On Fri, Aug 9, 2019 at 9:12 AM
>> >> > Xintong
>> >> > > > > Song <
>> >> > > > > > > > > > > > > > > > tonysong...@gmail.com
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > Thanks for the feedback,
>> Yang.
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > Regarding your comments:
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > *Native and Direct Memory*
>> >> > > > > > > > > > > > > > > > > > > > > > I think setting a very large
>> max
>> >> > > direct
>> >> > > > > > > memory
>> >> > > > > > > > > size
>> >> > > > > > > > > > > > > > > definitely
>> >> > > > > > > > > > > > > > > > > has
>> >> > > > > > > > > > > > > > > > > > > some
>> >> > > > > > > > > > > > > > > > > > > > > > good sides. E.g., we do not
>> >> worry
>> >> > > about
>> >> > > > > > > direct
>> >> > > > > > > > > OOM,
>> >> > > > > > > > > > > and
>> >> > > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > > > don't
>> >> > > > > > > > > > > > > > > > > > even
>> >> > > > > > > > > > > > > > > > > > > > > need
>> >> > > > > > > > > > > > > > > > > > > > > > to allocate managed / network
>> >> > memory
>> >> > > > with
>> >> > > > > > > > > > > > > > Unsafe.allocate() .
>> >> > > > > > > > > > > > > > > > > > > > > > However, there are also some
>> >> down
>> >> > > sides
>> >> > > > > of
>> >> > > > > > > > doing
>> >> > > > > > > > > > > this.
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > >    - One thing I can think
>> of is
>> >> > that
>> >> > > > if
>> >> > > > > a
>> >> > > > > > > task
>> >> > > > > > > > > > > > executor
>> >> > > > > > > > > > > > > > > > > container
>> >> > > > > > > > > > > > > > > > > > is
>> >> > > > > > > > > > > > > > > > > > > > > >    killed due to overusing
>> >> memory,
>> >> > it
>> >> > > > > could
>> >> > > > > > > be
>> >> > > > > > > > > hard
>> >> > > > > > > > > > > for
>> >> > > > > > > > > > > > > use
>> >> > > > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > know
>> >> > > > > > > > > > > > > > > > > > > > which
>> >> > > > > > > > > > > > > > > > > > > > > > part
>> >> > > > > > > > > > > > > > > > > > > > > >    of the memory is overused.
>> >> > > > > > > > > > > > > > > > > > > > > >    - Another down side is
>> that
>> >> the
>> >> > > JVM
>> >> > > > > > never
>> >> > > > > > > > > > trigger
>> >> > > > > > > > > > > GC
>> >> > > > > > > > > > > > > due
>> >> > > > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > > > reaching
>> >> > > > > > > > > > > > > > > > > > > > > max
>> >> > > > > > > > > > > > > > > > > > > > > >    direct memory limit,
>> because
>> >> the
>> >> > > > limit
>> >> > > > > > is
>> >> > > > > > > > too
>> >> > > > > > > > > > high
>> >> > > > > > > > > > > > to
>> >> > > > > > > > > > > > > be
>> >> > > > > > > > > > > > > > > > > > reached.
>> >> > > > > > > > > > > > > > > > > > > > That
>> >> > > > > > > > > > > > > > > > > > > > > >    means we kind of relay on
>> >> heap
>> >> > > > memory
>> >> > > > > to
>> >> > > > > > > > > trigger
>> >> > > > > > > > > > > GC
>> >> > > > > > > > > > > > > and
>> >> > > > > > > > > > > > > > > > > release
>> >> > > > > > > > > > > > > > > > > > > > direct
>> >> > > > > > > > > > > > > > > > > > > > > >    memory. That could be a
>> >> problem
>> >> > in
>> >> > > > > cases
>> >> > > > > > > > where
>> >> > > > > > > > > > we
>> >> > > > > > > > > > > > have
>> >> > > > > > > > > > > > > > > more
>> >> > > > > > > > > > > > > > > > > > direct
>> >> > > > > > > > > > > > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > > > > > > >    usage but not enough heap
>> >> > activity
>> >> > > > to
>> >> > > > > > > > trigger
>> >> > > > > > > > > > the
>> >> > > > > > > > > > > > GC.
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > Maybe you can share your
>> reasons
>> >> > for
>> >> > > > > > > preferring
>> >> > > > > > > > > > > > setting a
>> >> > > > > > > > > > > > > > > very
>> >> > > > > > > > > > > > > > > > > > large
>> >> > > > > > > > > > > > > > > > > > > > > value,
>> >> > > > > > > > > > > > > > > > > > > > > > if there are anything else I
>> >> > > > overlooked.
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > *Memory Calculation*
>> >> > > > > > > > > > > > > > > > > > > > > > If there is any conflict
>> between
>> >> > > > multiple
>> >> > > > > > > > > > > configuration
>> >> > > > > > > > > > > > > > that
>> >> > > > > > > > > > > > > > > > user
>> >> > > > > > > > > > > > > > > > > > > > > > explicitly specified, I
>> think we
>> >> > > should
>> >> > > > > > throw
>> >> > > > > > > > an
>> >> > > > > > > > > > > error.
>> >> > > > > > > > > > > > > > > > > > > > > > I think doing checking on the
>> >> > client
>> >> > > > side
>> >> > > > > > is
>> >> > > > > > > a
>> >> > > > > > > > > good
>> >> > > > > > > > > > > > idea,
>> >> > > > > > > > > > > > > > so
>> >> > > > > > > > > > > > > > > > that
>> >> > > > > > > > > > > > > > > > > > on
>> >> > > > > > > > > > > > > > > > > > > > > Yarn /
>> >> > > > > > > > > > > > > > > > > > > > > > K8s we can discover the
>> problem
>> >> > > before
>> >> > > > > > > > submitting
>> >> > > > > > > > > > the
>> >> > > > > > > > > > > > > Flink
>> >> > > > > > > > > > > > > > > > > > cluster,
>> >> > > > > > > > > > > > > > > > > > > > > which
>> >> > > > > > > > > > > > > > > > > > > > > > is always a good thing.
>> >> > > > > > > > > > > > > > > > > > > > > > But we can not only rely on
>> the
>> >> > > client
>> >> > > > > side
>> >> > > > > > > > > > checking,
>> >> > > > > > > > > > > > > > because
>> >> > > > > > > > > > > > > > > > for
>> >> > > > > > > > > > > > > > > > > > > > > > standalone cluster
>> TaskManagers
>> >> on
>> >> > > > > > different
>> >> > > > > > > > > > machines
>> >> > > > > > > > > > > > may
>> >> > > > > > > > > > > > > > > have
>> >> > > > > > > > > > > > > > > > > > > > different
>> >> > > > > > > > > > > > > > > > > > > > > > configurations and the client
>> >> does
>> >> > > see
>> >> > > > > > that.
>> >> > > > > > > > > > > > > > > > > > > > > > What do you think?
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > Thank you~
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > Xintong Song
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > On Thu, Aug 8, 2019 at 5:09
>> PM
>> >> Yang
>> >> > > > Wang
>> >> > > > > <
>> >> > > > > > > > > > > > > > > > danrtsey...@gmail.com>
>> >> > > > > > > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > Hi xintong,
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > Thanks for your detailed
>> >> > proposal.
>> >> > > > > After
>> >> > > > > > > all
>> >> > > > > > > > > the
>> >> > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > > > > configuration
>> >> > > > > > > > > > > > > > > > > > > > > are
>> >> > > > > > > > > > > > > > > > > > > > > > > introduced, it will be more
>> >> > > powerful
>> >> > > > to
>> >> > > > > > > > control
>> >> > > > > > > > > > the
>> >> > > > > > > > > > > > > flink
>> >> > > > > > > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > > > > > > usage. I
>> >> > > > > > > > > > > > > > > > > > > > > > > just have few questions
>> about
>> >> it.
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >    - Native and Direct
>> Memory
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > We do not differentiate
>> user
>> >> > direct
>> >> > > > > > memory
>> >> > > > > > > > and
>> >> > > > > > > > > > > native
>> >> > > > > > > > > > > > > > > memory.
>> >> > > > > > > > > > > > > > > > > > They
>> >> > > > > > > > > > > > > > > > > > > > are
>> >> > > > > > > > > > > > > > > > > > > > > > all
>> >> > > > > > > > > > > > > > > > > > > > > > > included in task off-heap
>> >> memory.
>> >> > > > > Right?
>> >> > > > > > > So i
>> >> > > > > > > > > > don’t
>> >> > > > > > > > > > > > > think
>> >> > > > > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > > > > > could
>> >> > > > > > > > > > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > > > > > > > > set
>> >> > > > > > > > > > > > > > > > > > > > > > > the -XX:MaxDirectMemorySize
>> >> > > > properly. I
>> >> > > > > > > > prefer
>> >> > > > > > > > > > > > leaving
>> >> > > > > > > > > > > > > > it a
>> >> > > > > > > > > > > > > > > > > very
>> >> > > > > > > > > > > > > > > > > > > > large
>> >> > > > > > > > > > > > > > > > > > > > > > > value.
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >    - Memory Calculation
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > If the sum of and
>> fine-grained
>> >> > > > > > > memory(network
>> >> > > > > > > > > > > memory,
>> >> > > > > > > > > > > > > > > managed
>> >> > > > > > > > > > > > > > > > > > > memory,
>> >> > > > > > > > > > > > > > > > > > > > > > etc.)
>> >> > > > > > > > > > > > > > > > > > > > > > > is larger than total
>> process
>> >> > > memory,
>> >> > > > > how
>> >> > > > > > do
>> >> > > > > > > > we
>> >> > > > > > > > > > deal
>> >> > > > > > > > > > > > > with
>> >> > > > > > > > > > > > > > > this
>> >> > > > > > > > > > > > > > > > > > > > > situation?
>> >> > > > > > > > > > > > > > > > > > > > > > Do
>> >> > > > > > > > > > > > > > > > > > > > > > > we need to check the memory
>> >> > > > > configuration
>> >> > > > > > > in
>> >> > > > > > > > > > > client?
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > Xintong Song <
>> >> > > tonysong...@gmail.com>
>> >> > > > > > > > > > 于2019年8月7日周三
>> >> > > > > > > > > > > > > > > 下午10:14写道:
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > Hi everyone,
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > We would like to start a
>> >> > > discussion
>> >> > > > > > > thread
>> >> > > > > > > > on
>> >> > > > > > > > > > > > > "FLIP-49:
>> >> > > > > > > > > > > > > > > > > Unified
>> >> > > > > > > > > > > > > > > > > > > > > Memory
>> >> > > > > > > > > > > > > > > > > > > > > > > > Configuration for
>> >> > > > TaskExecutors"[1],
>> >> > > > > > > where
>> >> > > > > > > > we
>> >> > > > > > > > > > > > > describe
>> >> > > > > > > > > > > > > > > how
>> >> > > > > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > > > > improve
>> >> > > > > > > > > > > > > > > > > > > > > > > > TaskExecutor memory
>> >> > > configurations.
>> >> > > > > The
>> >> > > > > > > > FLIP
>> >> > > > > > > > > > > > document
>> >> > > > > > > > > > > > > > is
>> >> > > > > > > > > > > > > > > > > mostly
>> >> > > > > > > > > > > > > > > > > > > > based
>> >> > > > > > > > > > > > > > > > > > > > > > on
>> >> > > > > > > > > > > > > > > > > > > > > > > an
>> >> > > > > > > > > > > > > > > > > > > > > > > > early design "Memory
>> >> Management
>> >> > > and
>> >> > > > > > > > > > Configuration
>> >> > > > > > > > > > > > > > > > > Reloaded"[2]
>> >> > > > > > > > > > > > > > > > > > by
>> >> > > > > > > > > > > > > > > > > > > > > > > Stephan,
>> >> > > > > > > > > > > > > > > > > > > > > > > > with updates from
>> follow-up
>> >> > > > > discussions
>> >> > > > > > > > both
>> >> > > > > > > > > > > online
>> >> > > > > > > > > > > > > and
>> >> > > > > > > > > > > > > > > > > > offline.
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > This FLIP addresses
>> several
>> >> > > > > > shortcomings
>> >> > > > > > > of
>> >> > > > > > > > > > > current
>> >> > > > > > > > > > > > > > > (Flink
>> >> > > > > > > > > > > > > > > > > 1.9)
>> >> > > > > > > > > > > > > > > > > > > > > > > > TaskExecutor memory
>> >> > > configuration.
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >    - Different
>> configuration
>> >> > for
>> >> > > > > > > Streaming
>> >> > > > > > > > > and
>> >> > > > > > > > > > > > Batch.
>> >> > > > > > > > > > > > > > > > > > > > > > > >    - Complex and
>> difficult
>> >> > > > > > configuration
>> >> > > > > > > of
>> >> > > > > > > > > > > RocksDB
>> >> > > > > > > > > > > > > in
>> >> > > > > > > > > > > > > > > > > > Streaming.
>> >> > > > > > > > > > > > > > > > > > > > > > > >    - Complicated,
>> uncertain
>> >> and
>> >> > > > hard
>> >> > > > > to
>> >> > > > > > > > > > > understand.
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > Key changes to solve the
>> >> > problems
>> >> > > > can
>> >> > > > > > be
>> >> > > > > > > > > > > summarized
>> >> > > > > > > > > > > > > as
>> >> > > > > > > > > > > > > > > > > follows.
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >    - Extend memory
>> manager
>> >> to
>> >> > > also
>> >> > > > > > > account
>> >> > > > > > > > > for
>> >> > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > usage
>> >> > > > > > > > > > > > > > > > > by
>> >> > > > > > > > > > > > > > > > > > > > state
>> >> > > > > > > > > > > > > > > > > > > > > > > >    backends.
>> >> > > > > > > > > > > > > > > > > > > > > > > >    - Modify how
>> TaskExecutor
>> >> > > memory
>> >> > > > > is
>> >> > > > > > > > > > > partitioned
>> >> > > > > > > > > > > > > > > > accounted
>> >> > > > > > > > > > > > > > > > > > > > > individual
>> >> > > > > > > > > > > > > > > > > > > > > > > >    memory reservations
>> and
>> >> > pools.
>> >> > > > > > > > > > > > > > > > > > > > > > > >    - Simplify memory
>> >> > > configuration
>> >> > > > > > > options
>> >> > > > > > > > > and
>> >> > > > > > > > > > > > > > > calculations
>> >> > > > > > > > > > > > > > > > > > > logics.
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > Please find more details
>> in
>> >> the
>> >> > > > FLIP
>> >> > > > > > wiki
>> >> > > > > > > > > > > document
>> >> > > > > > > > > > > > > [1].
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > (Please note that the
>> early
>> >> > > design
>> >> > > > > doc
>> >> > > > > > > [2]
>> >> > > > > > > > is
>> >> > > > > > > > > > out
>> >> > > > > > > > > > > > of
>> >> > > > > > > > > > > > > > > sync,
>> >> > > > > > > > > > > > > > > > > and
>> >> > > > > > > > > > > > > > > > > > it
>> >> > > > > > > > > > > > > > > > > > > > is
>> >> > > > > > > > > > > > > > > > > > > > > > > > appreciated to have the
>> >> > > discussion
>> >> > > > in
>> >> > > > > > > this
>> >> > > > > > > > > > > mailing
>> >> > > > > > > > > > > > > list
>> >> > > > > > > > > > > > > > > > > > thread.)
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > Looking forward to your
>> >> > > feedbacks.
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > Thank you~
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > Xintong Song
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > [1]
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > >
>> >> > > > > > > > > >
>> >> > > > > > > > >
>> >> > > > > > > >
>> >> > > > > > >
>> >> > > > > >
>> >> > > > >
>> >> > > >
>> >> > >
>> >> >
>> >>
>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-49%3A+Unified+Memory+Configuration+for+TaskExecutors
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > [2]
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > >
>> >> > > > > > > > > >
>> >> > > > > > > > >
>> >> > > > > > > >
>> >> > > > > > >
>> >> > > > > >
>> >> > > > >
>> >> > > >
>> >> > >
>> >> >
>> >>
>> https://docs.google.com/document/d/1o4KvyyXsQMGUastfPin3ZWeUXWsJgoL7piqp1fFYJvA/edit?usp=sharing
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > On Fri, Aug 16, 2019 at 2:16 PM Xintong Song
>> <
>> >> > > > > > > > > > tonysong...@gmail.com>
>> >> > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > Thanks for sharing your opinion Till.
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > I'm also in favor of alternative 2. I was
>> >> > wondering
>> >> > > > > > whether
>> >> > > > > > > > we
>> >> > > > > > > > > > can
>> >> > > > > > > > > > > > > avoid
>> >> > > > > > > > > > > > > > > using Unsafe.allocate() for off-heap
>> managed
>> >> > memory
>> >> > > > and
>> >> > > > > > > > network
>> >> > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > with
>> >> > > > > > > > > > > > > > > alternative 3. But after giving it a second
>> >> > > thought,
>> >> > > > I
>> >> > > > > > > think
>> >> > > > > > > > > even
>> >> > > > > > > > > > > for
>> >> > > > > > > > > > > > > > > alternative 3 using direct memory for
>> off-heap
>> >> > > > managed
>> >> > > > > > > memory
>> >> > > > > > > > > > could
>> >> > > > > > > > > > > > > cause
>> >> > > > > > > > > > > > > > > problems.
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > Hi Yang,
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > Regarding your concern, I think what
>> proposed
>> >> in
>> >> > > this
>> >> > > > > > FLIP
>> >> > > > > > > it
>> >> > > > > > > > > to
>> >> > > > > > > > > > > have
>> >> > > > > > > > > > > > > > both
>> >> > > > > > > > > > > > > > > off-heap managed memory and network memory
>> >> > > allocated
>> >> > > > > > > through
>> >> > > > > > > > > > > > > > > Unsafe.allocate(), which means they are
>> >> > practically
>> >> > > > > > native
>> >> > > > > > > > > memory
>> >> > > > > > > > > > > and
>> >> > > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > limited by JVM max direct memory. The only
>> >> parts
>> >> > of
>> >> > > > > > memory
>> >> > > > > > > > > > limited
>> >> > > > > > > > > > > by
>> >> > > > > > > > > > > > > JVM
>> >> > > > > > > > > > > > > > > max direct memory are task off-heap memory
>> and
>> >> > JVM
>> >> > > > > > > overhead,
>> >> > > > > > > > > > which
>> >> > > > > > > > > > > > are
>> >> > > > > > > > > > > > > > > exactly alternative 2 suggests to set the
>> JVM
>> >> max
>> >> > > > > direct
>> >> > > > > > > > memory
>> >> > > > > > > > > > to.
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > Thank you~
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > Xintong Song
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > On Fri, Aug 16, 2019 at 1:48 PM Till
>> Rohrmann
>> >> <
>> >> > > > > > > > > > > trohrm...@apache.org>
>> >> > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > Thanks for the clarification Xintong. I
>> >> > > understand
>> >> > > > > the
>> >> > > > > > > two
>> >> > > > > > > > > > > > > alternatives
>> >> > > > > > > > > > > > > > > > now.
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > I would be in favour of option 2 because
>> it
>> >> > makes
>> >> > > > > > things
>> >> > > > > > > > > > > explicit.
>> >> > > > > > > > > > > > If
>> >> > > > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > > > don't limit the direct memory, I fear
>> that
>> >> we
>> >> > > might
>> >> > > > > end
>> >> > > > > > > up
>> >> > > > > > > > > in a
>> >> > > > > > > > > > > > > similar
>> >> > > > > > > > > > > > > > > > situation as we are currently in: The
>> user
>> >> > might
>> >> > > > see
>> >> > > > > > that
>> >> > > > > > > > her
>> >> > > > > > > > > > > > process
>> >> > > > > > > > > > > > > > > gets
>> >> > > > > > > > > > > > > > > > killed by the OS and does not know why
>> this
>> >> is
>> >> > > the
>> >> > > > > > case.
>> >> > > > > > > > > > > > > Consequently,
>> >> > > > > > > > > > > > > > > she
>> >> > > > > > > > > > > > > > > > tries to decrease the process memory size
>> >> > > (similar
>> >> > > > to
>> >> > > > > > > > > > increasing
>> >> > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > cutoff
>> >> > > > > > > > > > > > > > > > ratio) in order to accommodate for the
>> extra
>> >> > > direct
>> >> > > > > > > memory.
>> >> > > > > > > > > > Even
>> >> > > > > > > > > > > > > worse,
>> >> > > > > > > > > > > > > > > she
>> >> > > > > > > > > > > > > > > > tries to decrease memory budgets which
>> are
>> >> not
>> >> > > > fully
>> >> > > > > > used
>> >> > > > > > > > and
>> >> > > > > > > > > > > hence
>> >> > > > > > > > > > > > > > won't
>> >> > > > > > > > > > > > > > > > change the overall memory consumption.
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > Cheers,
>> >> > > > > > > > > > > > > > > > Till
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > On Fri, Aug 16, 2019 at 11:01 AM Xintong
>> >> Song <
>> >> > > > > > > > > > > > tonysong...@gmail.com
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > Let me explain this with a concrete
>> >> example
>> >> > > Till.
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > Let's say we have the following
>> scenario.
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > Total Process Memory: 1GB
>> >> > > > > > > > > > > > > > > > > JVM Direct Memory (Task Off-Heap
>> Memory +
>> >> JVM
>> >> > > > > > > Overhead):
>> >> > > > > > > > > > 200MB
>> >> > > > > > > > > > > > > > > > > Other Memory (JVM Heap Memory, JVM
>> >> Metaspace,
>> >> > > > > > Off-Heap
>> >> > > > > > > > > > Managed
>> >> > > > > > > > > > > > > Memory
>> >> > > > > > > > > > > > > > > and
>> >> > > > > > > > > > > > > > > > > Network Memory): 800MB
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > For alternative 2, we set
>> >> > > -XX:MaxDirectMemorySize
>> >> > > > > to
>> >> > > > > > > > 200MB.
>> >> > > > > > > > > > > > > > > > > For alternative 3, we set
>> >> > > -XX:MaxDirectMemorySize
>> >> > > > > to
>> >> > > > > > a
>> >> > > > > > > > very
>> >> > > > > > > > > > > large
>> >> > > > > > > > > > > > > > > value,
>> >> > > > > > > > > > > > > > > > > let's say 1TB.
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > If the actual direct memory usage of
>> Task
>> >> > > > Off-Heap
>> >> > > > > > > Memory
>> >> > > > > > > > > and
>> >> > > > > > > > > > > JVM
>> >> > > > > > > > > > > > > > > > Overhead
>> >> > > > > > > > > > > > > > > > > do not exceed 200MB, then alternative 2
>> >> and
>> >> > > > > > > alternative 3
>> >> > > > > > > > > > > should
>> >> > > > > > > > > > > > > have
>> >> > > > > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > > same utility. Setting larger
>> >> > > > > -XX:MaxDirectMemorySize
>> >> > > > > > > will
>> >> > > > > > > > > not
>> >> > > > > > > > > > > > > reduce
>> >> > > > > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > > sizes of the other memory pools.
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > If the actual direct memory usage of
>> Task
>> >> > > > Off-Heap
>> >> > > > > > > Memory
>> >> > > > > > > > > and
>> >> > > > > > > > > > > JVM
>> >> > > > > > > > > > > > > > > > > Overhead potentially exceed 200MB, then
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >    - Alternative 2 suffers from
>> frequent
>> >> OOM.
>> >> > > To
>> >> > > > > > avoid
>> >> > > > > > > > > that,
>> >> > > > > > > > > > > the
>> >> > > > > > > > > > > > > only
>> >> > > > > > > > > > > > > > > > thing
>> >> > > > > > > > > > > > > > > > >    user can do is to modify the
>> >> configuration
>> >> > > and
>> >> > > > > > > > increase
>> >> > > > > > > > > > JVM
>> >> > > > > > > > > > > > > Direct
>> >> > > > > > > > > > > > > > > > > Memory
>> >> > > > > > > > > > > > > > > > >    (Task Off-Heap Memory + JVM
>> Overhead).
>> >> > Let's
>> >> > > > say
>> >> > > > > > > that
>> >> > > > > > > > > user
>> >> > > > > > > > > > > > > > increases
>> >> > > > > > > > > > > > > > > > JVM
>> >> > > > > > > > > > > > > > > > >    Direct Memory to 250MB, this will
>> >> reduce
>> >> > the
>> >> > > > > total
>> >> > > > > > > > size
>> >> > > > > > > > > of
>> >> > > > > > > > > > > > other
>> >> > > > > > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > >    pools to 750MB, given the total
>> process
>> >> > > memory
>> >> > > > > > > remains
>> >> > > > > > > > > > 1GB.
>> >> > > > > > > > > > > > > > > > >    - For alternative 3, there is no
>> >> chance of
>> >> > > > > direct
>> >> > > > > > > OOM.
>> >> > > > > > > > > > There
>> >> > > > > > > > > > > > are
>> >> > > > > > > > > > > > > > > > chances
>> >> > > > > > > > > > > > > > > > >    of exceeding the total process
>> memory
>> >> > limit,
>> >> > > > but
>> >> > > > > > > given
>> >> > > > > > > > > > that
>> >> > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > process
>> >> > > > > > > > > > > > > > > > > may
>> >> > > > > > > > > > > > > > > > >    not use up all the reserved native
>> >> memory
>> >> > > > > > (Off-Heap
>> >> > > > > > > > > > Managed
>> >> > > > > > > > > > > > > > Memory,
>> >> > > > > > > > > > > > > > > > > Network
>> >> > > > > > > > > > > > > > > > >    Memory, JVM Metaspace), if the
>> actual
>> >> > direct
>> >> > > > > > memory
>> >> > > > > > > > > usage
>> >> > > > > > > > > > is
>> >> > > > > > > > > > > > > > > slightly
>> >> > > > > > > > > > > > > > > > > above
>> >> > > > > > > > > > > > > > > > >    yet very close to 200MB, user
>> probably
>> >> do
>> >> > > not
>> >> > > > > need
>> >> > > > > > > to
>> >> > > > > > > > > > change
>> >> > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > >    configurations.
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > Therefore, I think from the user's
>> >> > > perspective, a
>> >> > > > > > > > feasible
>> >> > > > > > > > > > > > > > > configuration
>> >> > > > > > > > > > > > > > > > > for alternative 2 may lead to lower
>> >> resource
>> >> > > > > > > utilization
>> >> > > > > > > > > > > compared
>> >> > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > alternative 3.
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > Thank you~
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > Xintong Song
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > On Fri, Aug 16, 2019 at 10:28 AM Till
>> >> > Rohrmann
>> >> > > <
>> >> > > > > > > > > > > > > trohrm...@apache.org
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > I guess you have to help me
>> understand
>> >> the
>> >> > > > > > difference
>> >> > > > > > > > > > between
>> >> > > > > > > > > > > > > > > > > alternative 2
>> >> > > > > > > > > > > > > > > > > > and 3 wrt to memory under utilization
>> >> > > Xintong.
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > - Alternative 2: set
>> >> XX:MaxDirectMemorySize
>> >> > > to
>> >> > > > > Task
>> >> > > > > > > > > > Off-Heap
>> >> > > > > > > > > > > > > Memory
>> >> > > > > > > > > > > > > > > and
>> >> > > > > > > > > > > > > > > > > JVM
>> >> > > > > > > > > > > > > > > > > > Overhead. Then there is the risk that
>> >> this
>> >> > > size
>> >> > > > > is
>> >> > > > > > > too
>> >> > > > > > > > > low
>> >> > > > > > > > > > > > > > resulting
>> >> > > > > > > > > > > > > > > > in a
>> >> > > > > > > > > > > > > > > > > > lot of garbage collection and
>> >> potentially
>> >> > an
>> >> > > > OOM.
>> >> > > > > > > > > > > > > > > > > > - Alternative 3: set
>> >> XX:MaxDirectMemorySize
>> >> > > to
>> >> > > > > > > > something
>> >> > > > > > > > > > > larger
>> >> > > > > > > > > > > > > > than
>> >> > > > > > > > > > > > > > > > > > alternative 2. This would of course
>> >> reduce
>> >> > > the
>> >> > > > > > sizes
>> >> > > > > > > of
>> >> > > > > > > > > the
>> >> > > > > > > > > > > > other
>> >> > > > > > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > > > types.
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > How would alternative 2 now result
>> in an
>> >> > > under
>> >> > > > > > > > > utilization
>> >> > > > > > > > > > of
>> >> > > > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > > > compared to alternative 3? If
>> >> alternative 3
>> >> > > > > > strictly
>> >> > > > > > > > > sets a
>> >> > > > > > > > > > > > > higher
>> >> > > > > > > > > > > > > > > max
>> >> > > > > > > > > > > > > > > > > > direct memory size and we use only
>> >> little,
>> >> > > > then I
>> >> > > > > > > would
>> >> > > > > > > > > > > expect
>> >> > > > > > > > > > > > > that
>> >> > > > > > > > > > > > > > > > > > alternative 3 results in memory under
>> >> > > > > utilization.
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > Cheers,
>> >> > > > > > > > > > > > > > > > > > Till
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > On Tue, Aug 13, 2019 at 4:19 PM Yang
>> >> Wang <
>> >> > > > > > > > > > > > danrtsey...@gmail.com
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > Hi xintong,till
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > Native and Direct Memory
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > My point is setting a very large
>> max
>> >> > direct
>> >> > > > > > memory
>> >> > > > > > > > size
>> >> > > > > > > > > > > when
>> >> > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > do
>> >> > > > > > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > > > > > differentiate direct and native
>> >> memory.
>> >> > If
>> >> > > > the
>> >> > > > > > > direct
>> >> > > > > > > > > > > > > > > > memory,including
>> >> > > > > > > > > > > > > > > > > > user
>> >> > > > > > > > > > > > > > > > > > > direct memory and framework direct
>> >> > > > memory,could
>> >> > > > > > be
>> >> > > > > > > > > > > calculated
>> >> > > > > > > > > > > > > > > > > > > correctly,then
>> >> > > > > > > > > > > > > > > > > > > i am in favor of setting direct
>> memory
>> >> > with
>> >> > > > > fixed
>> >> > > > > > > > > value.
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > Memory Calculation
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > I agree with xintong. For Yarn and
>> >> k8s,we
>> >> > > > need
>> >> > > > > to
>> >> > > > > > > > check
>> >> > > > > > > > > > the
>> >> > > > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > > > > configurations in client to avoid
>> >> > > submitting
>> >> > > > > > > > > successfully
>> >> > > > > > > > > > > and
>> >> > > > > > > > > > > > > > > failing
>> >> > > > > > > > > > > > > > > > > in
>> >> > > > > > > > > > > > > > > > > > > the flink master.
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > Best,
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > Yang
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > Xintong Song <
>> tonysong...@gmail.com
>> >> > > > > >于2019年8月13日
>> >> > > > > > > > > > 周二22:07写道:
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > Thanks for replying, Till.
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > About MemorySegment, I think you
>> are
>> >> > > right
>> >> > > > > that
>> >> > > > > > > we
>> >> > > > > > > > > > should
>> >> > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > > include
>> >> > > > > > > > > > > > > > > > > > > this
>> >> > > > > > > > > > > > > > > > > > > > issue in the scope of this FLIP.
>> >> This
>> >> > > FLIP
>> >> > > > > > should
>> >> > > > > > > > > > > > concentrate
>> >> > > > > > > > > > > > > > on
>> >> > > > > > > > > > > > > > > > how
>> >> > > > > > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > > > > configure memory pools for
>> >> > TaskExecutors,
>> >> > > > > with
>> >> > > > > > > > > minimum
>> >> > > > > > > > > > > > > > > involvement
>> >> > > > > > > > > > > > > > > > on
>> >> > > > > > > > > > > > > > > > > > how
>> >> > > > > > > > > > > > > > > > > > > > memory consumers use it.
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > About direct memory, I think
>> >> > alternative
>> >> > > 3
>> >> > > > > may
>> >> > > > > > > not
>> >> > > > > > > > > > having
>> >> > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > same
>> >> > > > > > > > > > > > > > > > > over
>> >> > > > > > > > > > > > > > > > > > > > reservation issue that
>> alternative 2
>> >> > > does,
>> >> > > > > but
>> >> > > > > > at
>> >> > > > > > > > the
>> >> > > > > > > > > > > cost
>> >> > > > > > > > > > > > of
>> >> > > > > > > > > > > > > > > risk
>> >> > > > > > > > > > > > > > > > of
>> >> > > > > > > > > > > > > > > > > > > over
>> >> > > > > > > > > > > > > > > > > > > > using memory at the container
>> level,
>> >> > > which
>> >> > > > is
>> >> > > > > > not
>> >> > > > > > > > > good.
>> >> > > > > > > > > > > My
>> >> > > > > > > > > > > > > > point
>> >> > > > > > > > > > > > > > > is
>> >> > > > > > > > > > > > > > > > > > that
>> >> > > > > > > > > > > > > > > > > > > > both "Task Off-Heap Memory" and
>> "JVM
>> >> > > > > Overhead"
>> >> > > > > > > are
>> >> > > > > > > > > not
>> >> > > > > > > > > > > easy
>> >> > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > config.
>> >> > > > > > > > > > > > > > > > > > > For
>> >> > > > > > > > > > > > > > > > > > > > alternative 2, users might
>> configure
>> >> > them
>> >> > > > > > higher
>> >> > > > > > > > than
>> >> > > > > > > > > > > what
>> >> > > > > > > > > > > > > > > actually
>> >> > > > > > > > > > > > > > > > > > > needed,
>> >> > > > > > > > > > > > > > > > > > > > just to avoid getting a direct
>> OOM.
>> >> For
>> >> > > > > > > alternative
>> >> > > > > > > > > 3,
>> >> > > > > > > > > > > > users
>> >> > > > > > > > > > > > > do
>> >> > > > > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > > > get
>> >> > > > > > > > > > > > > > > > > > > > direct OOM, so they may not
>> config
>> >> the
>> >> > > two
>> >> > > > > > > options
>> >> > > > > > > > > > > > > aggressively
>> >> > > > > > > > > > > > > > > > high.
>> >> > > > > > > > > > > > > > > > > > But
>> >> > > > > > > > > > > > > > > > > > > > the consequences are risks of
>> >> overall
>> >> > > > > container
>> >> > > > > > > > > memory
>> >> > > > > > > > > > > > usage
>> >> > > > > > > > > > > > > > > > exceeds
>> >> > > > > > > > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > > > > > budget.
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > Thank you~
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > Xintong Song
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > On Tue, Aug 13, 2019 at 9:39 AM
>> Till
>> >> > > > > Rohrmann <
>> >> > > > > > > > > > > > > > > > trohrm...@apache.org>
>> >> > > > > > > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > Thanks for proposing this FLIP
>> >> > Xintong.
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > All in all I think it already
>> >> looks
>> >> > > quite
>> >> > > > > > good.
>> >> > > > > > > > > > > > Concerning
>> >> > > > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > > first
>> >> > > > > > > > > > > > > > > > > > > open
>> >> > > > > > > > > > > > > > > > > > > > > question about allocating
>> memory
>> >> > > > segments,
>> >> > > > > I
>> >> > > > > > > was
>> >> > > > > > > > > > > > wondering
>> >> > > > > > > > > > > > > > > > whether
>> >> > > > > > > > > > > > > > > > > > this
>> >> > > > > > > > > > > > > > > > > > > > is
>> >> > > > > > > > > > > > > > > > > > > > > strictly necessary to do in the
>> >> > context
>> >> > > > of
>> >> > > > > > this
>> >> > > > > > > > > FLIP
>> >> > > > > > > > > > or
>> >> > > > > > > > > > > > > > whether
>> >> > > > > > > > > > > > > > > > > this
>> >> > > > > > > > > > > > > > > > > > > > could
>> >> > > > > > > > > > > > > > > > > > > > > be done as a follow up? Without
>> >> > knowing
>> >> > > > all
>> >> > > > > > > > > details,
>> >> > > > > > > > > > I
>> >> > > > > > > > > > > > > would
>> >> > > > > > > > > > > > > > be
>> >> > > > > > > > > > > > > > > > > > > concerned
>> >> > > > > > > > > > > > > > > > > > > > > that we would widen the scope
>> of
>> >> this
>> >> > > > FLIP
>> >> > > > > > too
>> >> > > > > > > > much
>> >> > > > > > > > > > > > because
>> >> > > > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > > > > would
>> >> > > > > > > > > > > > > > > > > > > have
>> >> > > > > > > > > > > > > > > > > > > > > to touch all the existing call
>> >> sites
>> >> > of
>> >> > > > the
>> >> > > > > > > > > > > MemoryManager
>> >> > > > > > > > > > > > > > where
>> >> > > > > > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > > > > > > > allocate
>> >> > > > > > > > > > > > > > > > > > > > > memory segments (this should
>> >> mainly
>> >> > be
>> >> > > > > batch
>> >> > > > > > > > > > > operators).
>> >> > > > > > > > > > > > > The
>> >> > > > > > > > > > > > > > > > > addition
>> >> > > > > > > > > > > > > > > > > > > of
>> >> > > > > > > > > > > > > > > > > > > > > the memory reservation call to
>> the
>> >> > > > > > > MemoryManager
>> >> > > > > > > > > > should
>> >> > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > be
>> >> > > > > > > > > > > > > > > > > > affected
>> >> > > > > > > > > > > > > > > > > > > > by
>> >> > > > > > > > > > > > > > > > > > > > > this and I would hope that
>> this is
>> >> > the
>> >> > > > only
>> >> > > > > > > point
>> >> > > > > > > > > of
>> >> > > > > > > > > > > > > > > interaction
>> >> > > > > > > > > > > > > > > > a
>> >> > > > > > > > > > > > > > > > > > > > > streaming job would have with
>> the
>> >> > > > > > > MemoryManager.
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > Concerning the second open
>> >> question
>> >> > > about
>> >> > > > > > > setting
>> >> > > > > > > > > or
>> >> > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > setting
>> >> > > > > > > > > > > > > > > > a
>> >> > > > > > > > > > > > > > > > > > max
>> >> > > > > > > > > > > > > > > > > > > > > direct memory limit, I would
>> also
>> >> be
>> >> > > > > > interested
>> >> > > > > > > > why
>> >> > > > > > > > > > > Yang
>> >> > > > > > > > > > > > > Wang
>> >> > > > > > > > > > > > > > > > > thinks
>> >> > > > > > > > > > > > > > > > > > > > > leaving it open would be best.
>> My
>> >> > > concern
>> >> > > > > > about
>> >> > > > > > > > > this
>> >> > > > > > > > > > > > would
>> >> > > > > > > > > > > > > be
>> >> > > > > > > > > > > > > > > > that
>> >> > > > > > > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > > > > > > > would
>> >> > > > > > > > > > > > > > > > > > > > > be in a similar situation as we
>> >> are
>> >> > now
>> >> > > > > with
>> >> > > > > > > the
>> >> > > > > > > > > > > > > > > > > RocksDBStateBackend.
>> >> > > > > > > > > > > > > > > > > > > If
>> >> > > > > > > > > > > > > > > > > > > > > the different memory pools are
>> not
>> >> > > > clearly
>> >> > > > > > > > > separated
>> >> > > > > > > > > > > and
>> >> > > > > > > > > > > > > can
>> >> > > > > > > > > > > > > > > > spill
>> >> > > > > > > > > > > > > > > > > > over
>> >> > > > > > > > > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > > > > > a different pool, then it is
>> quite
>> >> > hard
>> >> > > > to
>> >> > > > > > > > > understand
>> >> > > > > > > > > > > > what
>> >> > > > > > > > > > > > > > > > exactly
>> >> > > > > > > > > > > > > > > > > > > > causes a
>> >> > > > > > > > > > > > > > > > > > > > > process to get killed for using
>> >> too
>> >> > > much
>> >> > > > > > > memory.
>> >> > > > > > > > > This
>> >> > > > > > > > > > > > could
>> >> > > > > > > > > > > > > > > then
>> >> > > > > > > > > > > > > > > > > > easily
>> >> > > > > > > > > > > > > > > > > > > > > lead to a similar situation
>> what
>> >> we
>> >> > > have
>> >> > > > > with
>> >> > > > > > > the
>> >> > > > > > > > > > > > > > cutoff-ratio.
>> >> > > > > > > > > > > > > > > > So
>> >> > > > > > > > > > > > > > > > > > why
>> >> > > > > > > > > > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > > > > > > > setting a sane default value
>> for
>> >> max
>> >> > > > direct
>> >> > > > > > > > memory
>> >> > > > > > > > > > and
>> >> > > > > > > > > > > > > giving
>> >> > > > > > > > > > > > > > > the
>> >> > > > > > > > > > > > > > > > > > user
>> >> > > > > > > > > > > > > > > > > > > an
>> >> > > > > > > > > > > > > > > > > > > > > option to increase it if he
>> runs
>> >> into
>> >> > > an
>> >> > > > > OOM.
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > @Xintong, how would
>> alternative 2
>> >> > lead
>> >> > > to
>> >> > > > > > lower
>> >> > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > utilization
>> >> > > > > > > > > > > > > > > > > > than
>> >> > > > > > > > > > > > > > > > > > > > > alternative 3 where we set the
>> >> direct
>> >> > > > > memory
>> >> > > > > > > to a
>> >> > > > > > > > > > > higher
>> >> > > > > > > > > > > > > > value?
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > Cheers,
>> >> > > > > > > > > > > > > > > > > > > > > Till
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > On Fri, Aug 9, 2019 at 9:12 AM
>> >> > Xintong
>> >> > > > > Song <
>> >> > > > > > > > > > > > > > > > tonysong...@gmail.com
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > Thanks for the feedback,
>> Yang.
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > Regarding your comments:
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > *Native and Direct Memory*
>> >> > > > > > > > > > > > > > > > > > > > > > I think setting a very large
>> max
>> >> > > direct
>> >> > > > > > > memory
>> >> > > > > > > > > size
>> >> > > > > > > > > > > > > > > definitely
>> >> > > > > > > > > > > > > > > > > has
>> >> > > > > > > > > > > > > > > > > > > some
>> >> > > > > > > > > > > > > > > > > > > > > > good sides. E.g., we do not
>> >> worry
>> >> > > about
>> >> > > > > > > direct
>> >> > > > > > > > > OOM,
>> >> > > > > > > > > > > and
>> >> > > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > > > don't
>> >> > > > > > > > > > > > > > > > > > even
>> >> > > > > > > > > > > > > > > > > > > > > need
>> >> > > > > > > > > > > > > > > > > > > > > > to allocate managed / network
>> >> > memory
>> >> > > > with
>> >> > > > > > > > > > > > > > Unsafe.allocate() .
>> >> > > > > > > > > > > > > > > > > > > > > > However, there are also some
>> >> down
>> >> > > sides
>> >> > > > > of
>> >> > > > > > > > doing
>> >> > > > > > > > > > > this.
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > >    - One thing I can think
>> of is
>> >> > that
>> >> > > > if
>> >> > > > > a
>> >> > > > > > > task
>> >> > > > > > > > > > > > executor
>> >> > > > > > > > > > > > > > > > > container
>> >> > > > > > > > > > > > > > > > > > is
>> >> > > > > > > > > > > > > > > > > > > > > >    killed due to overusing
>> >> memory,
>> >> > it
>> >> > > > > could
>> >> > > > > > > be
>> >> > > > > > > > > hard
>> >> > > > > > > > > > > for
>> >> > > > > > > > > > > > > use
>> >> > > > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > know
>> >> > > > > > > > > > > > > > > > > > > > which
>> >> > > > > > > > > > > > > > > > > > > > > > part
>> >> > > > > > > > > > > > > > > > > > > > > >    of the memory is overused.
>> >> > > > > > > > > > > > > > > > > > > > > >    - Another down side is
>> that
>> >> the
>> >> > > JVM
>> >> > > > > > never
>> >> > > > > > > > > > trigger
>> >> > > > > > > > > > > GC
>> >> > > > > > > > > > > > > due
>> >> > > > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > > > reaching
>> >> > > > > > > > > > > > > > > > > > > > > max
>> >> > > > > > > > > > > > > > > > > > > > > >    direct memory limit,
>> because
>> >> the
>> >> > > > limit
>> >> > > > > > is
>> >> > > > > > > > too
>> >> > > > > > > > > > high
>> >> > > > > > > > > > > > to
>> >> > > > > > > > > > > > > be
>> >> > > > > > > > > > > > > > > > > > reached.
>> >> > > > > > > > > > > > > > > > > > > > That
>> >> > > > > > > > > > > > > > > > > > > > > >    means we kind of relay on
>> >> heap
>> >> > > > memory
>> >> > > > > to
>> >> > > > > > > > > trigger
>> >> > > > > > > > > > > GC
>> >> > > > > > > > > > > > > and
>> >> > > > > > > > > > > > > > > > > release
>> >> > > > > > > > > > > > > > > > > > > > direct
>> >> > > > > > > > > > > > > > > > > > > > > >    memory. That could be a
>> >> problem
>> >> > in
>> >> > > > > cases
>> >> > > > > > > > where
>> >> > > > > > > > > > we
>> >> > > > > > > > > > > > have
>> >> > > > > > > > > > > > > > > more
>> >> > > > > > > > > > > > > > > > > > direct
>> >> > > > > > > > > > > > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > > > > > > >    usage but not enough heap
>> >> > activity
>> >> > > > to
>> >> > > > > > > > trigger
>> >> > > > > > > > > > the
>> >> > > > > > > > > > > > GC.
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > Maybe you can share your
>> reasons
>> >> > for
>> >> > > > > > > preferring
>> >> > > > > > > > > > > > setting a
>> >> > > > > > > > > > > > > > > very
>> >> > > > > > > > > > > > > > > > > > large
>> >> > > > > > > > > > > > > > > > > > > > > value,
>> >> > > > > > > > > > > > > > > > > > > > > > if there are anything else I
>> >> > > > overlooked.
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > *Memory Calculation*
>> >> > > > > > > > > > > > > > > > > > > > > > If there is any conflict
>> between
>> >> > > > multiple
>> >> > > > > > > > > > > configuration
>> >> > > > > > > > > > > > > > that
>> >> > > > > > > > > > > > > > > > user
>> >> > > > > > > > > > > > > > > > > > > > > > explicitly specified, I
>> think we
>> >> > > should
>> >> > > > > > throw
>> >> > > > > > > > an
>> >> > > > > > > > > > > error.
>> >> > > > > > > > > > > > > > > > > > > > > > I think doing checking on the
>> >> > client
>> >> > > > side
>> >> > > > > > is
>> >> > > > > > > a
>> >> > > > > > > > > good
>> >> > > > > > > > > > > > idea,
>> >> > > > > > > > > > > > > > so
>> >> > > > > > > > > > > > > > > > that
>> >> > > > > > > > > > > > > > > > > > on
>> >> > > > > > > > > > > > > > > > > > > > > Yarn /
>> >> > > > > > > > > > > > > > > > > > > > > > K8s we can discover the
>> problem
>> >> > > before
>> >> > > > > > > > submitting
>> >> > > > > > > > > > the
>> >> > > > > > > > > > > > > Flink
>> >> > > > > > > > > > > > > > > > > > cluster,
>> >> > > > > > > > > > > > > > > > > > > > > which
>> >> > > > > > > > > > > > > > > > > > > > > > is always a good thing.
>> >> > > > > > > > > > > > > > > > > > > > > > But we can not only rely on
>> the
>> >> > > client
>> >> > > > > side
>> >> > > > > > > > > > checking,
>> >> > > > > > > > > > > > > > because
>> >> > > > > > > > > > > > > > > > for
>> >> > > > > > > > > > > > > > > > > > > > > > standalone cluster
>> TaskManagers
>> >> on
>> >> > > > > > different
>> >> > > > > > > > > > machines
>> >> > > > > > > > > > > > may
>> >> > > > > > > > > > > > > > > have
>> >> > > > > > > > > > > > > > > > > > > > different
>> >> > > > > > > > > > > > > > > > > > > > > > configurations and the client
>> >> does
>> >> > > see
>> >> > > > > > that.
>> >> > > > > > > > > > > > > > > > > > > > > > What do you think?
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > Thank you~
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > Xintong Song
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > On Thu, Aug 8, 2019 at 5:09
>> PM
>> >> Yang
>> >> > > > Wang
>> >> > > > > <
>> >> > > > > > > > > > > > > > > > danrtsey...@gmail.com>
>> >> > > > > > > > > > > > > > > > > > > > wrote:
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > Hi xintong,
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > Thanks for your detailed
>> >> > proposal.
>> >> > > > > After
>> >> > > > > > > all
>> >> > > > > > > > > the
>> >> > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > > > > configuration
>> >> > > > > > > > > > > > > > > > > > > > > are
>> >> > > > > > > > > > > > > > > > > > > > > > > introduced, it will be more
>> >> > > powerful
>> >> > > > to
>> >> > > > > > > > control
>> >> > > > > > > > > > the
>> >> > > > > > > > > > > > > flink
>> >> > > > > > > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > > > > > > > usage. I
>> >> > > > > > > > > > > > > > > > > > > > > > > just have few questions
>> about
>> >> it.
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >    - Native and Direct
>> Memory
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > We do not differentiate
>> user
>> >> > direct
>> >> > > > > > memory
>> >> > > > > > > > and
>> >> > > > > > > > > > > native
>> >> > > > > > > > > > > > > > > memory.
>> >> > > > > > > > > > > > > > > > > > They
>> >> > > > > > > > > > > > > > > > > > > > are
>> >> > > > > > > > > > > > > > > > > > > > > > all
>> >> > > > > > > > > > > > > > > > > > > > > > > included in task off-heap
>> >> memory.
>> >> > > > > Right?
>> >> > > > > > > So i
>> >> > > > > > > > > > don’t
>> >> > > > > > > > > > > > > think
>> >> > > > > > > > > > > > > > > we
>> >> > > > > > > > > > > > > > > > > > could
>> >> > > > > > > > > > > > > > > > > > > > not
>> >> > > > > > > > > > > > > > > > > > > > > > set
>> >> > > > > > > > > > > > > > > > > > > > > > > the -XX:MaxDirectMemorySize
>> >> > > > properly. I
>> >> > > > > > > > prefer
>> >> > > > > > > > > > > > leaving
>> >> > > > > > > > > > > > > > it a
>> >> > > > > > > > > > > > > > > > > very
>> >> > > > > > > > > > > > > > > > > > > > large
>> >> > > > > > > > > > > > > > > > > > > > > > > value.
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >    - Memory Calculation
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > If the sum of and
>> fine-grained
>> >> > > > > > > memory(network
>> >> > > > > > > > > > > memory,
>> >> > > > > > > > > > > > > > > managed
>> >> > > > > > > > > > > > > > > > > > > memory,
>> >> > > > > > > > > > > > > > > > > > > > > > etc.)
>> >> > > > > > > > > > > > > > > > > > > > > > > is larger than total
>> process
>> >> > > memory,
>> >> > > > > how
>> >> > > > > > do
>> >> > > > > > > > we
>> >> > > > > > > > > > deal
>> >> > > > > > > > > > > > > with
>> >> > > > > > > > > > > > > > > this
>> >> > > > > > > > > > > > > > > > > > > > > situation?
>> >> > > > > > > > > > > > > > > > > > > > > > Do
>> >> > > > > > > > > > > > > > > > > > > > > > > we need to check the memory
>> >> > > > > configuration
>> >> > > > > > > in
>> >> > > > > > > > > > > client?
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > Xintong Song <
>> >> > > tonysong...@gmail.com>
>> >> > > > > > > > > > 于2019年8月7日周三
>> >> > > > > > > > > > > > > > > 下午10:14写道:
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > Hi everyone,
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > We would like to start a
>> >> > > discussion
>> >> > > > > > > thread
>> >> > > > > > > > on
>> >> > > > > > > > > > > > > "FLIP-49:
>> >> > > > > > > > > > > > > > > > > Unified
>> >> > > > > > > > > > > > > > > > > > > > > Memory
>> >> > > > > > > > > > > > > > > > > > > > > > > > Configuration for
>> >> > > > TaskExecutors"[1],
>> >> > > > > > > where
>> >> > > > > > > > we
>> >> > > > > > > > > > > > > describe
>> >> > > > > > > > > > > > > > > how
>> >> > > > > > > > > > > > > > > > to
>> >> > > > > > > > > > > > > > > > > > > > improve
>> >> > > > > > > > > > > > > > > > > > > > > > > > TaskExecutor memory
>> >> > > configurations.
>> >> > > > > The
>> >> > > > > > > > FLIP
>> >> > > > > > > > > > > > document
>> >> > > > > > > > > > > > > > is
>> >> > > > > > > > > > > > > > > > > mostly
>> >> > > > > > > > > > > > > > > > > > > > based
>> >> > > > > > > > > > > > > > > > > > > > > > on
>> >> > > > > > > > > > > > > > > > > > > > > > > an
>> >> > > > > > > > > > > > > > > > > > > > > > > > early design "Memory
>> >> Management
>> >> > > and
>> >> > > > > > > > > > Configuration
>> >> > > > > > > > > > > > > > > > > Reloaded"[2]
>> >> > > > > > > > > > > > > > > > > > by
>> >> > > > > > > > > > > > > > > > > > > > > > > Stephan,
>> >> > > > > > > > > > > > > > > > > > > > > > > > with updates from
>> follow-up
>> >> > > > > discussions
>> >> > > > > > > > both
>> >> > > > > > > > > > > online
>> >> > > > > > > > > > > > > and
>> >> > > > > > > > > > > > > > > > > > offline.
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > This FLIP addresses
>> several
>> >> > > > > > shortcomings
>> >> > > > > > > of
>> >> > > > > > > > > > > current
>> >> > > > > > > > > > > > > > > (Flink
>> >> > > > > > > > > > > > > > > > > 1.9)
>> >> > > > > > > > > > > > > > > > > > > > > > > > TaskExecutor memory
>> >> > > configuration.
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >    - Different
>> configuration
>> >> > for
>> >> > > > > > > Streaming
>> >> > > > > > > > > and
>> >> > > > > > > > > > > > Batch.
>> >> > > > > > > > > > > > > > > > > > > > > > > >    - Complex and
>> difficult
>> >> > > > > > configuration
>> >> > > > > > > of
>> >> > > > > > > > > > > RocksDB
>> >> > > > > > > > > > > > > in
>> >> > > > > > > > > > > > > > > > > > Streaming.
>> >> > > > > > > > > > > > > > > > > > > > > > > >    - Complicated,
>> uncertain
>> >> and
>> >> > > > hard
>> >> > > > > to
>> >> > > > > > > > > > > understand.
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > Key changes to solve the
>> >> > problems
>> >> > > > can
>> >> > > > > > be
>> >> > > > > > > > > > > summarized
>> >> > > > > > > > > > > > > as
>> >> > > > > > > > > > > > > > > > > follows.
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >    - Extend memory
>> manager
>> >> to
>> >> > > also
>> >> > > > > > > account
>> >> > > > > > > > > for
>> >> > > > > > > > > > > > memory
>> >> > > > > > > > > > > > > > > usage
>> >> > > > > > > > > > > > > > > > > by
>> >> > > > > > > > > > > > > > > > > > > > state
>> >> > > > > > > > > > > > > > > > > > > > > > > >    backends.
>> >> > > > > > > > > > > > > > > > > > > > > > > >    - Modify how
>> TaskExecutor
>> >> > > memory
>> >> > > > > is
>> >> > > > > > > > > > > partitioned
>> >> > > > > > > > > > > > > > > > accounted
>> >> > > > > > > > > > > > > > > > > > > > > individual
>> >> > > > > > > > > > > > > > > > > > > > > > > >    memory reservations
>> and
>> >> > pools.
>> >> > > > > > > > > > > > > > > > > > > > > > > >    - Simplify memory
>> >> > > configuration
>> >> > > > > > > options
>> >> > > > > > > > > and
>> >> > > > > > > > > > > > > > > calculations
>> >> > > > > > > > > > > > > > > > > > > logics.
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > Please find more details
>> in
>> >> the
>> >> > > > FLIP
>> >> > > > > > wiki
>> >> > > > > > > > > > > document
>> >> > > > > > > > > > > > > [1].
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > (Please note that the
>> early
>> >> > > design
>> >> > > > > doc
>> >> > > > > > > [2]
>> >> > > > > > > > is
>> >> > > > > > > > > > out
>> >> > > > > > > > > > > > of
>> >> > > > > > > > > > > > > > > sync,
>> >> > > > > > > > > > > > > > > > > and
>> >> > > > > > > > > > > > > > > > > > it
>> >> > > > > > > > > > > > > > > > > > > > is
>> >> > > > > > > > > > > > > > > > > > > > > > > > appreciated to have the
>> >> > > discussion
>> >> > > > in
>> >> > > > > > > this
>> >> > > > > > > > > > > mailing
>> >> > > > > > > > > > > > > list
>> >> > > > > > > > > > > > > > > > > > thread.)
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > Looking forward to your
>> >> > > feedbacks.
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > Thank you~
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > Xintong Song
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > [1]
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > >
>> >> > > > > > > > > >
>> >> > > > > > > > >
>> >> > > > > > > >
>> >> > > > > > >
>> >> > > > > >
>> >> > > > >
>> >> > > >
>> >> > >
>> >> >
>> >>
>> https://cwiki.apache.org/confluence/display/FLINK/FLIP-49%3A+Unified+Memory+Configuration+for+TaskExecutors
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > > [2]
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > >
>> >> > > > > > > > > >
>> >> > > > > > > > >
>> >> > > > > > > >
>> >> > > > > > >
>> >> > > > > >
>> >> > > > >
>> >> > > >
>> >> > >
>> >> >
>> >>
>> https://docs.google.com/document/d/1o4KvyyXsQMGUastfPin3ZWeUXWsJgoL7piqp1fFYJvA/edit?usp=sharing
>> >> > > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > > >
>> >> > > > > > > > > > > > > >
>> >> > > > > > > > > > > > >
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > > >
>> >> > > > > > > > > > >
>> >> > > > > > > > > >
>> >> > > > > > > > >
>> >> > > > > > > >
>> >> > > > > > >
>> >> > > > > >
>> >> > > > >
>> >> > > >
>> >> > >
>> >> >
>> >>
>> >
>>
>

Reply via email to