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 >> >> > > > > > > > > > > > > > > > > > > > > > > > >> >> > > > > > > > > > > > > > > > > > > > > > > >> >> > > > > > > > > > > > > > > > > > > > > > >> >> > > > > > > > > > > > > > > > > > > > > >> >> > > > > > > > > > > > > > > > > > > > >> >> > > > > > > > > > > > > > > > > > > >> >> > > > > > > > > > > > > > > > > > >> >> > > > > > > > > > > > > > > > > >> >> > > > > > > > > > > > > > > > >> >> > > > > > > > > > > > > > > >> >> > > > > > > > > > > > > > >> >> > > > > > > > > > > > > >> >> > > > > > > > > > > > >> >> > > > > > > > > > > > >> >> > > > > > > > > > > >> >> > > > > > > > > > >> >> > > > > > > > > >> >> > > > > > > > >> >> > > > > > > >> >> > > > > > >> >> > > > > >> >> > > > >> >> > > >> >> > >> >> >> > >> >