RFR: 8305770: os::Linux::available_memory() should refer MemAvailable in /proc/meminfo [v4]

Yasumasa Suenaga ysuenaga at openjdk.org
Mon May 8 13:59:53 UTC 2023


> `os::Linux::available_memory()` returns available memory from cgroups or sysinfo(2). In case of the process which run on out of container, that value is based on `freeram` from sysinfo(2).
> 
> `freeram` is equivalent to `MemFree` in `/proc/meminfo` [1]. However it means just a free RAM. We should use `MemAvailable` when we want to know how much memory is available for the process [2]. `MemAvailable` is available in modern Linux kernel, and it has been backported some older kernels (e.g. RHEL). In `sar` from sysstat, it refers that value and shows it as `kbavail` [3].
> 
> AFAIK PhysicalMemory event in JFR depends on `os::Linux::available_memory()`, and it is used in automated analysis in JMC. So the JFR/JMC user could misunderstand physical memory was exhausted even if the memory was available enough.
> 
> [1] https://github.com/torvalds/linux/blob/c9c3395d5e3dcc6daee66c6908354d47bf98cb0c/fs/proc/meminfo.c#L59
> [2] https://docs.kernel.org/filesystems/proc.html?highlight=memavailable
> [3] https://github.com/sysstat/sysstat/blob/ac1df71ca252c158e8d418ded93e5ed52f5e8765/rd_stats.c#L325-L328

Yasumasa Suenaga has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains six additional commits since the last revision:

 - Merge remote-tracking branch 'upstream/master' into JDK-8305770
 - Use nullptr in condition
 - Fix comments
 - Introduce os::free_memory
 - Use JULONG_FORMAT in format string
 - 8305770: os::Linux::available_memory() should refer MemAvailable in /proc/meminfo

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/13398/files
  - new: https://git.openjdk.org/jdk/pull/13398/files/1660c0f3..13e3dcb9

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=13398&range=03
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=13398&range=02-03

  Stats: 319696 lines in 3203 files changed: 272077 ins; 26150 del; 21469 mod
  Patch: https://git.openjdk.org/jdk/pull/13398.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/13398/head:pull/13398

PR: https://git.openjdk.org/jdk/pull/13398


More information about the hotspot-compiler-dev mailing list